Zin Posted October 26, 2014 Share Posted October 26, 2014 Hey i need help with my script. Im trying to make it so when the last player reaches the hunter on DM the map ends but this is confusing? im new to scripting but maybe you guys can help like in my other posts. I have learned more from asking people then looking on the wiki. Here is my script function getActivePlayers() return g_CurrentRaceMode.activePlayerList end function isDM() end for i,v in ipairs(getElementsByType'racepickup') do if getElementData(v,'vehicle') == '425' then end end if getActivePlayerCount() <= 1 then RaceMode.endMap() return true end Im getting this error code : "attempt to call global "getactiveplayercount" (a nil value) Link to comment
FatalTerror Posted October 26, 2014 Share Posted October 26, 2014 Hi, First, the function that you're trying to call seems to be undefined. You want to get the number of active players, I see also that you have a function getActivePlayers who returns an array of the active players. If you want to get the number of active players you can do like this: if(#getActivePlayers() <= 1)then Second, If I understood right you want to end the map when the last player reach the Hunter. If you read the Wiki, you will see that the race gamemode gives you some usefull events like this one: onPlayerPickUpRacePickup int/string pickupID, string pickupType, int vehicleModel (source: https://wiki.multitheftauto.com/index.ph ... ource:Race) That events actives himself when a player pick up a racepickup like nitro, vehiclechange or repair. So, for your script, what you need to do is: when we have 1 active player, we add the event using addEventHandler per example. If the event is activated, we check if the pickup is the hunter pickup like this: if pickupType == "vehiclechange" and vehicleModel == "HUNTERID" then If this is right, then you can call the function RaceMode.endMap() to end the map. Hope that helps you. Regards. Link to comment
Zin Posted October 27, 2014 Author Share Posted October 27, 2014 Can i have an example of what it should look like? Link to comment
rtx Posted October 27, 2014 Share Posted October 27, 2014 addEvent ( "onPlayerPickUpRacePickup", true ) addEventHandler ( "onPlayerPickUpRacePickup", getRootElement(), function ( id, type, model ) if type == "vehiclechange" and tonumber(id) == 425 then -- your message outputChatBox ( "The hunter has been reached!" ) -- if you want the player's name use 'getPlayerName ( source )' as the source is the player who picked that pickup up end end ) Link to comment
Zin Posted November 4, 2014 Author Share Posted November 4, 2014 Hey i tried that but when last player gets hunter nothing happens no errors nothing. script function getActivePlayers() return g_CurrentRaceMode.activePlayerList end function isDM() end addEvent ( "onPlayerPickUpRacePickup", true ) addEventHandler ( "onPlayerPickUpRacePickup", getRootElement(), function ( id, type, model ) if type == "vehiclechange" and tonumber(id) == 425 then end end ) end end if(#getActivePlayers() <= 1)then RaceMode.endMap() return true end Link to comment
Et-win Posted November 5, 2014 Share Posted November 5, 2014 addEvent ( "onPlayerPickUpRacePickup", true ) addEventHandler ( "onPlayerPickUpRacePickup", getRootElement(), function ( id, type, model ) if type == "vehiclechange" and tonumber(id) == 425 then RaceMode.endMap() end end ) Link to comment
Zin Posted November 7, 2014 Author Share Posted November 7, 2014 Still not working function getActivePlayers() return g_CurrentRaceMode.activePlayerList end function isDM() end addEvent ( "onPlayerPickUpRacePickup", true ) addEventHandler ( "onPlayerPickUpRacePickup", getRootElement(), function ( id, type, model ) if type == "vehiclechange" and tonumber(id) == 425 then if(#getActivePlayers() <= 1)then RaceMode.endMap() return true end end end ) Link to comment
ALw7sH Posted November 7, 2014 Share Posted November 7, 2014 Still not working function getActivePlayers() return g_CurrentRaceMode.activePlayerList end function isDM() end addEvent ( "onPlayerPickUpRacePickup", true ) addEventHandler ( "onPlayerPickUpRacePickup", getRootElement(), function ( id, type, model ) if type == "vehiclechange" and tonumber(id) == 425 then if(#getActivePlayers() <= 1)then RaceMode.endMap() return true end end end ) where did u put this code? u have to put it in your race gamemode race\modes\destructionderby.lua Link to comment
Zin Posted November 8, 2014 Author Share Posted November 8, 2014 I put it in my destructionderby.lua and now the map does not change when the last player dies and when last player gets the hunter it says "attempt to call getactiveplayers (a nil value) this is my 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 DestructionDerby:onPlayerWasted(player) if isActivePlayer(player) then self:handleFinishActivePlayer(player) if getActivePlayerCount() <= 0 then RaceMode.endMap() else TimerManager.createTimerFor("map",player):setTimer(clientCall, 2000, 1, player, 'Spectate.start', 'auto') end end RaceMode.setPlayerIsFinished(player) showBlipsAttachedTo(player, false) end function hunterAlert(mapInfo, pickupID, pickupType, vehicleModel) if pickupType == "vehiclechange" then if vehicleModel == 425 then if getActivePlayerCount() <= 1 then RaceMode.endMap() end end end end addEventHandler("onPlayerPickUpRacePickup",getRootElement(),hunterAlert) function DestructionDerby:onPlayerQuit(player) if isActivePlayer(player) then self:handleFinishActivePlayer(player) if getActivePlayerCount() <= 1 then RaceMode.endMap() end end end 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() local resource = exports["mapmanager"]:getRunningGamemodeMap( ) local mapName = getResourceInfo ( resource, "name" ) if string.find ( mapName, "[DM]" ) then if #activePlayers == 1 then self.rankingBoard:add(activePlayers[1], timePassed) showMessage(getPlayerName(activePlayers[1]) .. ' won the map!', 255, 0, 0) RaceMode.endMap() end elseif string.find ( mapName, "[DD]" ) then if #alivePlayers == 1 then if getElementModel (getPedOccupiedVehicle ( alivePlayers[1] )) == 425 then self.rankingBoard:add(activePlayers[1], timePassed) showMessage(getPlayerName(activePlayers[1]) .. ' won the map!', 255, 0, 0) RaceMode.endMap() 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 isDM() end addEvent ( "onPlayerPickUpRacePickup", true ) addEventHandler ( "onPlayerPickUpRacePickup", getRootElement(), function ( id, type, model ) if type == "vehiclechange" and tonumber(id) == 425 then if(#getActivePlayers() <= 1)then RaceMode.endMap() return true end end end ) 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