Skip to content

Commit c548ea1

Browse files
authored
Merge pull request #100 from NexiusTailer/develop
Menu fixes, rewrite garage opening code, minor tweaks
2 parents 76cb7b2 + f08abb7 commit c548ea1

File tree

3 files changed

+95
-46
lines changed

3 files changed

+95
-46
lines changed

amx/client/client.lua

Lines changed: 62 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,54 +1366,61 @@ end
13661366
-- Menus
13671367

13681368
local function updateMenuSize(menu)
1369+
if not menu then return end
1370+
13691371
menu.width = (#menu.items[1] > 0 and (menu.leftColumnWidth + menu.rightColumnWidth) or (menu.leftColumnWidth)) + 2 * MENU_SIDE_PADDING
13701372
menu.height = MENU_ITEM_HEIGHT * math.max(#menu.items[0], #menu.items[1]) + MENU_TOP_PADDING + MENU_BOTTOM_PADDING
13711373
end
13721374

1373-
function AddMenuItem(id, column, caption)
1374-
local menu = g_Menus[id]
1375+
function AddMenuItem(menuID, column, caption)
1376+
local menu = g_Menus[menuID]
1377+
if not menu then return end
1378+
13751379
table.insert(menu.items[column], caption)
13761380
updateMenuSize(menu)
13771381
end
13781382

1379-
function CreateMenu(id, menu)
1383+
function CreateMenu(menuID, menu)
1384+
if not menu then return end
1385+
13801386
menu.x = math.floor(menu.x * screenWidth / 640)
13811387
menu.y = math.floor(menu.y * screenHeight / 480)
13821388
menu.leftColumnWidth = math.floor(menu.leftColumnWidth * screenWidth / 640)
1383-
menu.rightColumnWidth = math.floor(menu.rightColumnWidth * screenWidth / 480)
1384-
local id = 1
1385-
while g_TextDraws['m' .. id] do
1386-
id = id + 1
1387-
end
1388-
menu.titletextdraw = { text = menu.title, id = 'm' .. id, x = menu.x + MENU_SIDE_PADDING, y = menu.y - 0.5 * MENU_ITEM_HEIGHT, align = 1, font = 2 }
1389-
initTextDraw(menu.titletextdraw)
1390-
hideTextDraw(menu.titletextdraw)
1389+
menu.rightColumnWidth = math.floor(menu.rightColumnWidth * screenWidth / 640)
1390+
1391+
g_Menus[menuID] = menu
13911392
updateMenuSize(menu)
1392-
g_Menus[id] = menu
13931393
end
13941394

13951395
function DisableMenuRow(menuID, rowID)
13961396
local menu = g_Menus[menuID]
1397+
if not menu then return end
1398+
13971399
menu.disabledrows = menu.disabledrows or {}
13981400
table.insert(menu.disabledrows, rowID)
13991401
end
14001402

14011403
function SetMenuColumnHeader(menuID, column, text)
1402-
g_Menus[menuID].items[column][13] = text
1404+
local menu = g_Menus[menuID]
1405+
if not menu then return end
1406+
1407+
menu.items[column][13] = text
14031408
end
14041409

14051410
function ShowMenuForPlayer(menuID)
1411+
if not g_Menus[menuID] then return end
1412+
14061413
if g_CurrentMenu and g_CurrentMenu.anim then
14071414
g_CurrentMenu.anim:remove()
14081415
g_CurrentMenu.anim = nil
14091416
end
14101417

14111418
local prevMenu = g_CurrentMenu
14121419
g_CurrentMenu = g_Menus[menuID]
1413-
local closebtnSide = screenWidth * (30 / 1024)
1420+
local closebtnSide = screenWidth * (27 / 1024)
1421+
14141422
if not prevMenu then
14151423
g_CurrentMenu.alpha = 0
1416-
g_CurrentMenu.titletextdraw.alpha = 0
14171424

14181425
g_CurrentMenu.closebtn = guiCreateStaticImage(g_CurrentMenu.x + g_CurrentMenu.width - closebtnSide, g_CurrentMenu.y, closebtnSide, closebtnSide, 'client/closebtn.png', false, nil)
14191426
guiSetAlpha(g_CurrentMenu.closebtn, 0)
@@ -1450,25 +1457,25 @@ function ShowMenuForPlayer(menuID)
14501457
{ time = 500, from = 0, to = 1, fn = setMenuAlpha },
14511458
function()
14521459
setMenuAlpha(g_CurrentMenu, 1)
1453-
g_CurrentMenu.titletextdraw.alpha = nil
1454-
g_CurrentMenu.anim = nil
1460+
if g_CurrentMenu then
1461+
g_CurrentMenu.anim = nil
1462+
end
14551463
end
14561464
)
14571465

14581466
addEventHandler('onClientRender', root, renderMenu)
14591467
addEventHandler('onClientClick', root, menuClickHandler)
14601468
showCursor(true)
14611469
else
1462-
hideTextDraw(prevMenu.titletextdraw)
14631470
g_CurrentMenu.closebtn = prevMenu.closebtn
14641471
prevMenu.closebtn = nil
14651472
guiSetPosition(g_CurrentMenu.closebtn, g_CurrentMenu.x + g_CurrentMenu.width - closebtnSide, g_CurrentMenu.y, false)
14661473
g_CurrentMenu.closebtnhover = prevMenu.closebtnhover
14671474
prevMenu.closebtnhover = nil
14681475
guiSetPosition(g_CurrentMenu.closebtnhover, g_CurrentMenu.x + g_CurrentMenu.width - closebtnSide, g_CurrentMenu.y, false)
1469-
g_CurrentMenu.alpha = 1
1476+
setMenuAlpha(g_CurrentMenu, 1)
14701477
end
1471-
showTextDraw(g_CurrentMenu.titletextdraw)
1478+
14721479
bindKey('enter', 'down', OnKeyPress)
14731480
end
14741481

@@ -1478,29 +1485,39 @@ function HideMenuForPlayer(menuID)
14781485
g_CurrentMenu.anim:remove()
14791486
g_CurrentMenu.anim = nil
14801487
end
1481-
g_CurrentMenu.anim = Animation.createAndPlay(g_CurrentMenu, { time = 500, from = 1, to = 0, fn = setMenuAlpha }, exitMenu)
1488+
if menuID then
1489+
g_CurrentMenu.anim = Animation.createAndPlay(g_CurrentMenu, { time = 500, from = 1, to = 0, fn = setMenuAlpha }, closeMenu)
1490+
else
1491+
g_CurrentMenu.anim = Animation.createAndPlay(g_CurrentMenu, { time = 500, from = 1, to = 0, fn = setMenuAlpha }, exitMenu)
1492+
end
14821493
end
14831494
end
14841495

14851496
function DestroyMenu(menuID)
1486-
destroyTextDraw(g_Menus[menuID].titletextdraw)
1497+
if not g_Menus[menuID] then return end
1498+
14871499
if g_CurrentMenu and menuID == g_CurrentMenu.id then
1488-
exitMenu()
1500+
closeMenu()
14891501
end
1502+
14901503
g_Menus[menuID] = nil
14911504
end
14921505

14931506
function setMenuAlpha(menu, alpha)
1507+
if not menu then return end
1508+
14941509
menu.alpha = alpha
1495-
menu.titletextdraw.alpha = alpha
1496-
guiSetAlpha(menu.closebtn, .75 * alpha)
1497-
guiSetAlpha(menu.closebtnhover, .75 * alpha)
1510+
1511+
if menu.closebtn then
1512+
guiSetAlpha(menu.closebtn, .75 * alpha)
1513+
end
1514+
if menu.closebtnhover then
1515+
guiSetAlpha(menu.closebtnhover, .75 * alpha)
1516+
end
14981517
end
14991518

15001519
function closeMenu()
15011520
removeEventHandler('onClientRender', root, renderMenu)
1502-
hideTextDraw(g_CurrentMenu.titletextdraw)
1503-
g_CurrentMenu.titletextdraw.alpha = nil
15041521
removeEventHandler('onClientClick', root, menuClickHandler)
15051522
g_CurrentMenu.anim = nil
15061523
destroyElement(g_CurrentMenu.closebtn)
@@ -1526,7 +1543,19 @@ function renderMenu()
15261543
-- background
15271544
dxDrawRectangle(menu.x, menu.y, menu.width, menu.height, tocolor(0, 0, 0, 128 * menu.alpha))
15281545

1546+
if menu.title then
1547+
local titleX = menu.x + MENU_SIDE_PADDING
1548+
local titleY = menu.y + MENU_ITEM_HEIGHT - MENU_BOTTOM_PADDING
1549+
dxDrawText(menu.title, titleX, titleY, titleX, titleY, tocolor(255, 255, 255, 255 * menu.alpha), 0.9, 'bankgothic', 'left', 'center', false, false, false, true)
1550+
end
1551+
15291552
local cursorX, cursorY = getCursorPosition()
1553+
1554+
if not cursorX then
1555+
closeMenu()
1556+
return
1557+
end
1558+
15301559
cursorY = screenHeight * cursorY
15311560
-- selected row
15321561
local selectedRow
@@ -1539,8 +1568,7 @@ function renderMenu()
15391568
for column = 0, 1 do
15401569
for i, text in pairs(menu.items[column]) do
15411570
local x = menu.x + MENU_SIDE_PADDING + column * menu.leftColumnWidth
1542-
local y
1543-
local color, scale
1571+
local y, color, scale
15441572
if i < 13 then
15451573
-- regular item
15461574
y = menu.y + MENU_TOP_PADDING + (i - 1) * MENU_ITEM_HEIGHT
@@ -1565,18 +1593,21 @@ function menuClickHandler(button, state, clickX, clickY)
15651593
if state ~= 'up' then
15661594
return
15671595
end
1596+
15681597
if not g_CurrentMenu then
15691598
return
15701599
end
1600+
15711601
local cursorX, cursorY = getCursorPosition()
15721602
cursorY = screenHeight * cursorY
15731603
if cursorY < g_CurrentMenu.y + MENU_TOP_PADDING or cursorY > g_CurrentMenu.y + MENU_TOP_PADDING + math.max(#g_CurrentMenu.items[0], #g_CurrentMenu.items[1]) * MENU_ITEM_HEIGHT then
15741604
return
15751605
end
1606+
15761607
local selectedRow = math.floor((clickY - g_CurrentMenu.y - MENU_TOP_PADDING) / MENU_ITEM_HEIGHT)
15771608
if not (g_CurrentMenu.disabledrows and table.find(g_CurrentMenu.disabledrows, selectedRow)) then
15781609
serverAMXEvent('OnPlayerSelectedMenuRow', g_PlayerID, selectedRow)
1579-
exitMenu()
1610+
closeMenu()
15801611
end
15811612
end
15821613

amx/client/garages.lua

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,35 @@
1-
addEventHandler('onClientRender', root,
1+
addEventHandler('onClientResourceStart', resourceRoot,
22
function()
33
for i = 0, 49 do
44
local gx, gy, gz = getGaragePosition(i)
5-
local px, py, pz = getElementPosition(localPlayer)
6-
local dist = getDistanceBetweenPoints3D(gx, gy, gz, px, py, pz)
7-
if (dist < 20) then
8-
if (isGarageOpen(i) == false) then
9-
server.setGarageOpen(i, true)
10-
end
11-
else
12-
if (isGarageOpen(i) == true) then
13-
server.setGarageOpen(i, false)
14-
end
5+
local colshape = createColSphere(gx, gy, gz, 20)
6+
setElementData(colshape, 'GarageID', i)
7+
8+
-- Check initial proximity
9+
if isElementWithinColShape(localPlayer, colshape) then
10+
server.setGarageOpen(i, true)
11+
end
12+
end
13+
end
14+
)
15+
16+
addEventHandler('onClientColShapeHit', resourceRoot,
17+
function(hitElement, matchingDimension)
18+
if hitElement == localPlayer and matchingDimension then
19+
local garage = getElementData(source, 'GarageID')
20+
if garage and not isGarageOpen(garage) then
21+
server.setGarageOpen(garage, true)
22+
end
23+
end
24+
end
25+
)
26+
27+
addEventHandler('onClientColShapeLeave', resourceRoot,
28+
function(hitElement, matchingDimension)
29+
if hitElement == localPlayer and matchingDimension then
30+
local garage = getElementData(source, 'GarageID')
31+
if garage and isGarageOpen(garage) then
32+
server.setGarageOpen(garage, false)
1533
end
1634
end
1735
end

amx/server/natives/a_players.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ function SetPlayerInterior(amx, player, interior)
6363
return false
6464
end
6565
local oldInt = getElementInterior(player)
66+
setElementInterior(player, interior)
6667
if interior ~= oldInt then
67-
setElementInterior(player, interior)
6868
procCallOnAll('OnPlayerInteriorChange', playerId, interior, oldInt)
6969
clientCall(player, 'AMX_OnPlayerInteriorChange', interior, oldInt)
7070
end
@@ -415,7 +415,7 @@ function SetPlayerAttachedObject(amx, player, index, modelid, bone, fOffsetX, fO
415415
local mtaBone = g_BoneMapping[bone]
416416
local obj = createObject(modelid, x, y, z)
417417

418-
if obj ~= false then
418+
if obj then
419419
local playerID = getElemID(player)
420420
g_Players[playerID].attachedObjects[index] = obj
421421
setElementCollisionsEnabled(obj, false)
@@ -432,7 +432,7 @@ end
432432
function RemovePlayerAttachedObject(amx, player, index)
433433
local playerID = getElemID(player)
434434
local obj = g_Players[playerID].attachedObjects[index] -- Get the object stored at this slot
435-
if obj ~= nil and obj ~= false then
435+
if obj then
436436
detachElementFromBone(obj)
437437
destroyElement(obj)
438438
g_Players[playerID].attachedObjects[index] = nil
@@ -444,7 +444,7 @@ end
444444
function IsPlayerAttachedObjectSlotUsed(amx, player, index)
445445
local playerID = getElemID(player)
446446
local obj = g_Players[playerID].attachedObjects[index] -- Get the object stored at this slot
447-
if obj ~= nil and obj ~= false then
447+
if obj then
448448
return true
449449
end
450450
return false

0 commit comments

Comments
 (0)