From 4d1fad4a012be4f987ffca05083adc674fd084cb Mon Sep 17 00:00:00 2001 From: mtadayz Date: Tue, 26 Sep 2017 16:32:30 +0200 Subject: [PATCH] Fixed second match not starting after first match has ended, fixed event error with parachute resource, fixed table ipairs error, fixed alive count not being propagated to players --- battlegrounds/gui/inventory_s.lua | 84 +++++++++--------- battlegrounds/handlers/client/damage_c.lua | 2 +- battlegrounds/handlers/server/damage_s.lua | 14 +-- battlegrounds/handlers/server/permissions.lua | 4 + battlegrounds/hud/hud_c.lua | 2 +- battlegrounds/init/spawn_players.lua | 16 +++- parachutes.zip | Bin 18462 -> 18508 bytes 7 files changed, 69 insertions(+), 53 deletions(-) diff --git a/battlegrounds/gui/inventory_s.lua b/battlegrounds/gui/inventory_s.lua index f973867..5e9bd2c 100644 --- a/battlegrounds/gui/inventory_s.lua +++ b/battlegrounds/gui/inventory_s.lua @@ -273,47 +273,49 @@ function onItemFromLootToInventory(itemName,loot) if newAmmoAmount then setWeaponAmmo(client,weaponID,newAmmoAmount) end - - for i, item in ipairs(lootpointData[loot]) do - if item[1] == itemName then - if item[1] == "11.43x23mm Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "9x18mm Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "9x19mm Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == ".303 British Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "7.62x39mm Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "5.56x45mm Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "7.62x54mm Cartridge" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "1866 Slug" then - refreshInventory() - refreshLoot(loot,"") - return - elseif item[1] == "12 Gauge Pellet" then - refreshInventory() - refreshLoot(loot,"") - return - else - item[2] = item[2]-1 + + if lootpointData[loot] then + for i, item in ipairs(lootpointData[loot]) do + if item[1] == itemName then + if item[1] == "11.43x23mm Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "9x18mm Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "9x19mm Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == ".303 British Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "7.62x39mm Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "5.56x45mm Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "7.62x54mm Cartridge" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "1866 Slug" then + refreshInventory() + refreshLoot(loot,"") + return + elseif item[1] == "12 Gauge Pellet" then + refreshInventory() + refreshLoot(loot,"") + return + else + item[2] = item[2]-1 + end end end end diff --git a/battlegrounds/handlers/client/damage_c.lua b/battlegrounds/handlers/client/damage_c.lua index c3fe8de..536bfc7 100644 --- a/battlegrounds/handlers/client/damage_c.lua +++ b/battlegrounds/handlers/client/damage_c.lua @@ -11,4 +11,4 @@ function onBattleGroundsPlayerDamage(attacker,weapon,bodypart,loss) cancelEvent() triggerServerEvent("mtabg_onBattleGroundsPlayerDamage",localPlayer,attacker,weapon,bodypart,loss) end -addEventHandler("onClientPlayerDamage",localPlayer,onBattleGroundsPlayerDamage) \ No newline at end of file +addEventHandler("onClientPlayerDamage",root,onBattleGroundsPlayerDamage) \ No newline at end of file diff --git a/battlegrounds/handlers/server/damage_s.lua b/battlegrounds/handlers/server/damage_s.lua index e12df21..b7d4520 100644 --- a/battlegrounds/handlers/server/damage_s.lua +++ b/battlegrounds/handlers/server/damage_s.lua @@ -77,7 +77,6 @@ local finalRank = 0 function killBattleGroundsPlayer(player,killer,headshot) if not player then player = source end local x,y,z = getElementPosition(player) - local deadPlayerTable = {} pedCol = false killPed(player) if not isElementInWater(player) then @@ -88,7 +87,7 @@ function killBattleGroundsPlayer(player,killer,headshot) local dimension = getElementDimension(player) ped = createPed(skin,6000,6000,0,rotZ) pedCol = createColSphere(6000,6000,0,1.5) - deadPlayerTable[pedCol] = {} + lootpointData[pedCol] = {} killPed(ped) setElementDimension(ped,dimension) setTimer(destroyDeadPlayer,600000,1,ped,pedCol) @@ -108,7 +107,7 @@ function killBattleGroundsPlayer(player,killer,headshot) end if pedCol then for k, data in ipairs(playerDataInfo[player]) do - table.insert(deadPlayerTable[pedCol],{data[2],data[3]}) + table.insert(lootpointData[pedCol],{data[2],data[3]}) end end setTimer(setElementPosition,500,1,player,6000,6000,0) @@ -139,8 +138,8 @@ function killBattleGroundsPlayer(player,killer,headshot) homeScreenDimension = homeScreenDimension+1 finalRank = gameCache["playerAmount"] gameCache["playerAmount"] = gameCache["playerAmount"]-1 - setElementData(player,"participatingInGame",false) if isElement(killer) then + setElementData(player,"participatingInGame",false) checkForWinner(killer) for i, players in ipairs(getElementsByType("player")) do if getElementData(players,"participatingInGame") then @@ -149,16 +148,17 @@ function killBattleGroundsPlayer(player,killer,headshot) end triggerClientEvent(player,"mtabg_showEndscreen",player,finalRank,homeScreenDimension) else - if gameCache["playerAmount"] > 1 then + if gameCache["playerAmount"] <= 1 then + setElementData(player,"participatingInGame",false) for i, players in ipairs(getElementsByType("player")) do if getElementData(players,"participatingInGame") then - outputSideChat("Player "..getPlayerName(player).." has died - "..gameCache["playerAmount"].." left",players,255,255,255) + checkForWinner(players) end end else for i, players in ipairs(getElementsByType("player")) do if getElementData(players,"participatingInGame") then - checkForWinner(players) + outputSideChat("Player "..getPlayerName(player).." has died - "..gameCache["playerAmount"].." left",players,255,255,255) end end end diff --git a/battlegrounds/handlers/server/permissions.lua b/battlegrounds/handlers/server/permissions.lua index 352db1d..047d7dc 100644 --- a/battlegrounds/handlers/server/permissions.lua +++ b/battlegrounds/handlers/server/permissions.lua @@ -19,8 +19,12 @@ addEventHandler("onPlayerCommand",root,restrictCommands) local function stopExternalParachuteResource() local parachuteResource = getResourceFromName("parachute") + local realParachuteR = getResourceFromName("parachutes") if parachuteResource and getResourceState(parachuteResource) == "running" then stopResource(parachuteResource) end + if getResourceState(realParachuteR) == "running" then + restartResource(parachuteResource) + end end addEventHandler("onResourceStart",resourceRoot,stopExternalParachuteResource) diff --git a/battlegrounds/hud/hud_c.lua b/battlegrounds/hud/hud_c.lua index bfde741..902303b 100644 --- a/battlegrounds/hud/hud_c.lua +++ b/battlegrounds/hud/hud_c.lua @@ -260,7 +260,7 @@ addEvent("mtabg_onClientBattleGroundsAnnounceMatchStart",true) addEventHandler("mtabg_onClientBattleGroundsAnnounceMatchStart",root,onClientBattleGroundsAnnounceMatchStart) function onClientBattleGroundsSetAliveCount(amount) - playerAmount = tonumber(amount) + playerAmount = amount end addEvent("mtabg_onClientBattleGroundsSetAliveCount",true) addEventHandler("mtabg_onClientBattleGroundsSetAliveCount",root,onClientBattleGroundsSetAliveCount) diff --git a/battlegrounds/init/spawn_players.lua b/battlegrounds/init/spawn_players.lua index 2292bcf..be40937 100644 --- a/battlegrounds/init/spawn_players.lua +++ b/battlegrounds/init/spawn_players.lua @@ -132,7 +132,7 @@ function startCountDown(forcedStart, quickTick) if gameCache["status"] then return end if isTimer(spawnItemsTimer) then killTimer(spawnItemsTimer) end gameCache["playingField"] = 0 - if gameCache["initialPlayerAmount"] < 1 and not forcedStart then + if gameCache["initialPlayerAmount"] < 2 and not forcedStart then for i, players in ipairs(getElementsByType("player")) do if getElementData(players,"inLobby") then triggerClientEvent(players,"mtabg_onClientBattleGroundsAnnounceMatchStart",players,"More players needed") @@ -140,6 +140,15 @@ function startCountDown(forcedStart, quickTick) end return end + if forcedStart then + gameCache["initialPlayerAmount"] = 0 + for i, players in ipairs(getElementsByType("player")) do + if getElementData(players,"inLobby") then + gameCache["initialPlayerAmount"] = gameCache["initialPlayerAmount"]+1 + triggerClientEvent(players,"mtabg_onClientBattleGroundsSetStatus",players,false,gameCache["initialPlayerAmount"]) + end + end + end spawnItemsTimer = setTimer(function() if firstTimeLoot then refreshLootSpots() @@ -199,7 +208,7 @@ function startCountDown(forcedStart, quickTick) end end elseif gameCache["countdown"] == 0 then - if gameCache["initialPlayerAmount"] > 1 then + if gameCache["initialPlayerAmount"] > 1 or forcedStart then startGame() firstTimeLoot = true killTimer(spawnItemsTimer) @@ -247,7 +256,7 @@ function startGame() attachElements(playerCol,player,0,0,0) setElementData(player,"participatingInGame",true) gameCache["playerAmount"] = gameCache["initialPlayerAmount"] - triggerClientEvent(player,"mtabg_onClientBattleGroundsSetStatus",player,gameCache["playerAmount"],true,gameCache["countdown"]) + triggerClientEvent(player,"mtabg_onClientBattleGroundsSetAliveCount",player,gameCache["playerAmount"]) setElementData(player,"inLobby",false) giveWeapon(player,46,1,true) setPedWeaponSlot(player,11) @@ -329,6 +338,7 @@ function resetGameCache() gameCache["playerAmount"] = 0 gameCache["countdown"] = 300 gameCache["playingField"] = 0 -- = Dimension (Dimension 500 is reserved for home screen!) + outputDebugString("MTA:BG Game Cache has been reset") end addEvent("mtabg_resetGameCache",true) addEventHandler("mtabg_resetGameCache",root,resetGameCache) diff --git a/parachutes.zip b/parachutes.zip index 29b5aa69b7c97fdcd9d78b7724f36cd46413f4d1..b4697323e234a2b09d3b66809fcb12568df8fcf1 100644 GIT binary patch delta 516 zcmbO?f$_`)#tp(EyzgqQyeCPfE@@?CU`U^=ARKAT$Gvms~2@5YAy>V@C`1`rP|Nbvz0x9w$$P1cpxC!$i^#wR9(3Hh%$p|>hFbb-0c*+LPX zm1YGg0Z!`{JgDDkespdvms9o06J?6tes{RNo;mM$c=BN2x=kI9rE|c=w^li`5?U%{y4$KJA%P$zg|@&fFQ1HEP!w4|kc?@6XDqd?0rHo$*GS zT*X5V!JGXX%=|M)eIR9gTM`qm{$yeI1jYlCOWYHgBwQw6cXwp7bOosb E06Q+?<^TWy delta 456 zcmV;(0XP24kO7{M0k9Jk4fsrCMo27}Emr{m049?l6cm5ek-u((Fc8M)An^_-CXlR7 zRksZNld5BsM(TXQ2eEK$Y77$3)}fEoSEy|WN(n>OE*9ALeRsd_e!jlrNa`FV6s^jw z&cNC*p+dQ#F)z|aAe ydQy|`MHQ3B6%LcoMhpRqlifyQ0^cr^K}TQ#l9QrGVFKzylLbgY1`9<100024+s>N+