SuleymanM Posted October 25, 2013 Share Posted October 25, 2013 Bro, I have race gamemode by arc_ implementator, But i try to solve this problem but not effect. -----> Rankingboard not function. Problem: [gamemodes]\[race]\race\modes\destructionderby.lua:152: attempt to index global 'g_CurrentRaceMode' (a nil value) -- destructionderby.lua DestructionDerby = setmetatable({}, RaceMode) DestructionDerby.__index = DestructionDerby DestructionDerby:register('Destruction derby') function DestructionDerby:isApplicable() return not RaceMode.checkpointsExist() and RaceMode.getMapOption('respawn') == 'none' end function DestructionDerby:getPlayerRank(player) return #getActivePlayers() end -- Copy of old updateRank function DestructionDerby:updateRanks() for i,player in ipairs(g_Players) do if not isPlayerFinished(player) then local rank = self:getPlayerRank(player) if not rank or rank > 0 then setElementData(player, 'race rank', rank) end end end -- Make text look good at the start if not self.running then for i,player in ipairs(g_Players) do setElementData(player, 'race rank', '' ) setElementData(player, 'checkpoint', '' ) end end end function endTheMap() RaceMode.endMap() end function DestructionDerby:onPlayerWasted(player) if isActivePlayer(player) then self:handleFinishActivePlayer(player) if getActivePlayerCount() <= 0 then endTheMap() else TimerManager.createTimerFor("map",player):setTimer(clientCall, 2000, 1, player, 'Spectate.start', 'auto') end end RaceMode.setPlayerIsFinished(player) showBlipsAttachedTo(player, false) end function DestructionDerby:onPlayerQuit(player) if isActivePlayer(player) then self:handleFinishActivePlayer(player) if getActivePlayerCount() <= 0 then endTheMap() end end end function checkForHunter(number,sort,model) if #getElementsByType("player") <= 0 then return end local activePlayers = getActivePlayers() if #activePlayers == 1 then local vehicle = getPedOccupiedVehicle(activePlayers[1]) if getElementModel(vehicle) == 425 then setElementHealth(activePlayers[1],0) end end end addEvent('onPlayerPickUpRacePickup',true) addEventHandler("onPlayerPickUpRacePickup",getRootElement(),checkForHunter) function DestructionDerby:handleFinishActivePlayer(player) -- Update ranking board for player being removed if not self.rankingBoard then self.rankingBoard = RankingBoard:create() self.rankingBoard:setDirection( 'up', getActivePlayerCount() ) end local timePassed = self:getTimePassed() self.rankingBoard:add(player, timePassed) -- Do remove finishActivePlayer(player) -- Update ranking board if one player left local activePlayers = getActivePlayers() if #activePlayers == 2 then triggerClientEvent ( "savetag3",getRootElement(),_getPlayerName(player)) end if #activePlayers == 1 then triggerClientEvent ( "savetag2",getRootElement(),_getPlayerName(player)) end if #activePlayers == 0 then self.rankingBoard:add(activePlayers[1], timePassed) triggerClientEvent ( "savetag",getRootElement(),_getPlayerName(player)) triggerEvent("peds",getRootElement()) --triggerEvent("onPlayerDestructionDerbyWin", getRootElement(), player) --saveDeathPlayer(activePlayers[1]) --addPodiumPlayer(activePlayers[1]) local timeravviato = false if timeravviato == false then setTimer (checkForHunter , 100, 0, player ) timeravviato = true end end if #activePlayers == 1 then --showMessage(getPlayerName(activePlayers[1]) .. ' pwned you all!', 171, 7, 7) triggerClientEvent ( "Winnertext", getRootElement(), activePlayers[1] ) triggerEvent("onPlayerDestructionDerbyWin", getRootElement(), activePlayers[1]) local car = getPedOccupiedVehicle(activePlayers[1]) if car then local model = getElementModel(car) if model == 425 then setElementHealth(activePlayers[1],0) end end end end ------------------------------------------------------------ -- activePlayerList stuff -- function isActivePlayer( player ) return table.find( g_CurrentRaceMode.activePlayerList, player ) end function addActivePlayer( player ) table.insertUnique( g_CurrentRaceMode.activePlayerList, player ) end function removeActivePlayer( player ) table.removevalue( g_CurrentRaceMode.activePlayerList, player ) end function finishActivePlayer( player ) table.removevalue( g_CurrentRaceMode.activePlayerList, player ) table.insertUnique( g_CurrentRaceMode.finishedPlayerList, _getPlayerName(player) ) end function getFinishedPlayerCount() return #g_CurrentRaceMode.finishedPlayerList end function getActivePlayerCount() return #g_CurrentRaceMode.activePlayerList end function getActivePlayers() if #getElementsByType("player") > 0 then return g_CurrentRaceMode.activePlayerList else return false end end Link to comment
Chronic Posted October 25, 2013 Share Posted October 25, 2013 g_CurrentRaceMode is nil, it was never defined. Assuming what you're trying to do is get the Map name, I would use getMapName and g_CurrentRaceMode = getMapName() Link to comment
SuleymanM Posted October 26, 2013 Author Share Posted October 26, 2013 only replace line:152 with this : g_CurrentRaceMode = getMapName() ? Link to comment
Chronic Posted October 26, 2013 Share Posted October 26, 2013 No, don't replace any lines. Just add this at the beginning of your script. g_CurrentRaceMode = getMapName() Link to comment
SuleymanM Posted October 27, 2013 Author Share Posted October 27, 2013 thanks bro, but error not solved ... only reduces at 2-3 times... Link to comment
Castillo Posted October 27, 2013 Share Posted October 27, 2013 The variable 'g_CurrentRaceMode' is defined on "race_server.lua", so, it seems like you've edited it wrongly and removed it. Link to comment
Moderators Citizen Posted October 27, 2013 Moderators Share Posted October 27, 2013 Ok try this (copy-paste everything): DestructionDerby = setmetatable({}, RaceMode) DestructionDerby.__index = DestructionDerby DestructionDerby:register('Destruction derby') function DestructionDerby:isApplicable() return not RaceMode.checkpointsExist() and RaceMode.getMapOption('respawn') == 'none' end function DestructionDerby:getPlayerRank(player) return #getActivePlayers() end -- Copy of old updateRank function DestructionDerby:updateRanks() for i,player in ipairs(g_Players) do if not isPlayerFinished(player) then local rank = self:getPlayerRank(player) if not rank or rank > 0 then setElementData(player, 'race rank', rank) end end end -- Make text look good at the start if not self.running then for i,player in ipairs(g_Players) do setElementData(player, 'race rank', '' ) setElementData(player, 'checkpoint', '' ) end end end function endTheMap() RaceMode.endMap() end function DestructionDerby:onPlayerWasted(player) if isActivePlayer(player) then self:handleFinishActivePlayer(player) if getActivePlayerCount() <= 0 then endTheMap() else TimerManager.createTimerFor("map",player):setTimer(clientCall, 2000, 1, player, 'Spectate.start', 'auto') end end RaceMode.setPlayerIsFinished(player) showBlipsAttachedTo(player, false) end function DestructionDerby:onPlayerQuit(player) if isActivePlayer(player) then self:handleFinishActivePlayer(player) if getActivePlayerCount() <= 0 then endTheMap() end end end function checkForHunter(number,pickType,model) if #getElementsByType("player") <= 0 then return end local activePlayers = getActivePlayers() if #activePlayers == 1 then local vehicle = getPedOccupiedVehicle(activePlayers[1]) if getElementModel(vehicle) == 425 then setElementHealth(activePlayers[1],0) end end end addEvent('onPlayerPickUpRacePickup',true) addEventHandler("onPlayerPickUpRacePickup", getRootElement(), checkForHunter) function DestructionDerby:handleFinishActivePlayer(player) -- Update ranking board for player being removed if not self.rankingBoard then self.rankingBoard = RankingBoard:create() self.rankingBoard:setDirection( 'up', getActivePlayerCount() ) end local timePassed = self:getTimePassed() self.rankingBoard:add(player, timePassed) -- Do remove finishActivePlayer(player) -- Update ranking board if one player left local activePlayers = getActivePlayers() if #activePlayers == 2 then triggerClientEvent ( "savetag3",getRootElement(),_getPlayerName(player)) end if #activePlayers == 1 then triggerClientEvent ( "savetag2",getRootElement(),_getPlayerName(player)) end if #activePlayers == 0 then self.rankingBoard:add(activePlayers[1], timePassed) triggerClientEvent ( "savetag",getRootElement(),_getPlayerName(player)) triggerEvent("peds",getRootElement()) --triggerEvent("onPlayerDestructionDerbyWin", getRootElement(), player) --saveDeathPlayer(activePlayers[1]) --addPodiumPlayer(activePlayers[1]) local timeravviato = false if timeravviato == false then setTimer (checkForHunter , 100, 0, player ) timeravviato = true end end if #activePlayers == 1 then --showMessage(getPlayerName(activePlayers[1]) .. ' pwned you all!', 171, 7, 7) triggerClientEvent ( "Winnertext", getRootElement(), activePlayers[1] ) triggerEvent("onPlayerDestructionDerbyWin", getRootElement(), activePlayers[1]) local car = getPedOccupiedVehicle(activePlayers[1]) if car then local model = getElementModel(car) if model == 425 then setElementHealth(activePlayers[1],0) end end end end ------------------------------------------------------------ -- activePlayerList stuff -- function initializeCurrentRaceMode() g_CurrentRaceMode = {} g_CurrentRaceMode.activePlayerList = getElementsByType("player") g_CurrentRaceMode.finishedPlayerList = {} end addEventHandler("onResourceStart", resourceRoot, initializeCurrentRaceMode) addEvent("onMapStarting", true) -- not sure if needed addEventHandler("onMapStarting", root, initializeCurrentRaceMode) function isActivePlayer( player ) return table.find( g_CurrentRaceMode.activePlayerList, player ) end function addActivePlayer( player ) table.insertUnique( g_CurrentRaceMode.activePlayerList, player ) end function removeActivePlayer( player ) table.removevalue( g_CurrentRaceMode.activePlayerList, player ) end function finishActivePlayer( player ) table.removevalue( g_CurrentRaceMode.activePlayerList, player ) table.insertUnique( g_CurrentRaceMode.finishedPlayerList, _getPlayerName(player) ) end function getFinishedPlayerCount() return #g_CurrentRaceMode.finishedPlayerList end function getActivePlayerCount() return #g_CurrentRaceMode.activePlayerList end function getActivePlayers() return g_CurrentRaceMode.activePlayerList end ---- !!! DELETE THIS PART ONLY IF THE SERVER ASK YOU TO DELETE table.find !!! ---- if type(table.find) == nil then _G.table.find = function(t, d) if t == nil or d == nil or type(t) ~= "table" then return nil end for k, i in ipairs(t) do if i == d then return true end end return false end else outputDebugString( "table.find function is already defined, you can delete it !", 2) end ---- !!! DELETE THIS PART ONLY IF THE SERVER ASK YOU TO DELETE table.insertUnique !!! ---- if type(table.insertUnique) == nil then _G.table.insertUnique = function(t, d) if t == nil or d == nil or type(t) ~= "table" then return nil end for k, i in ipairs(t) do if i == d then return false end end return table.insert(t, d) end else outputDebugString( "table.insertUnique function is already defined, you can delete it !", 2) end ---- !!! DELETE THIS PART ONLY IF THE SERVER ASK YOU TO DELETE table.removevalue !!! ---- if type(table.removevalue) == nil then _G.table.removevalue = function(t, d) if t == nil or d == nil or type(t) ~= "table" then return nil end for k, i in ipairs(t) do if i == d then return table.remove(t, k) end end return false end else outputDebugString( "table.removevalue function is already defined, you can delete it !", 2) end And I don't understand this function: function checkForHunter(number,pickType,model) It will just kill the last guy that still alive and just got the hunter. But if he is the last guy, the game il already over and he can't get the hunter (imo) So I'm pretty sure that you can delete it since you are doing right at the end of the handleFinishActivePlayer method. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now