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 29b5aa6..b469732 100644 Binary files a/parachutes.zip and b/parachutes.zip differ