Jump to content

Zin

Members
  • Posts

    24
  • Joined

  • Last visited

Posts posted by Zin

  1. 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 ) 
         
    

  2. 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 ) 
      
    

  3. 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 
    

  4. 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)

  5. Thanks man i learned quite a bit from that so i tried to add a sound function but i failed any tips here?

    client side

    function HNEnd() 
    local sound = playSound("hunter.mp3") 
        setSoundVolume(sound, 0.
        end 
        addEvent("playHunter",true) 
        addEventHandler("playHunter", getRootElement(), HNEnd) 
    

  6. I added a call to the server side to go to the client side but i got an error saying

    "failed to call 'HunterWarn:HunterWarn_client'

    Server side :

        addEvent("onPlayerPickUpRacePickup", true) 
            function onHunter(pickupID, pickupType, vehicleModel) 
                if pickupType == "vehiclechange" and vehicleModel == 425 then 
                    outputChatBox(''..getPlayerName(source)..' has reached the Hunter!',getRootElement(),255,0,0) 
    call ( getResourceFromName ( "HunterWarn" ), "HunterWarn_client") 
                end 
            end 
            addEventHandler("onPlayerPickUpRacePickup", getRootElement(), onHunter) 
              
            function HNEnd() 
                setTimer(guiSetVisible, 2000, 1, image, false) 
            end 
            addEventHandler("playHunter", getRootElement(), HNEnd) 
    

  7. Hey i put together this hunter alert script but the img does not show it might be to do with my META or my other stuff.

    Meta :

    <meta> 
      <info author="Zin" name="HunterReached" version="2.0.1" type="script" /> 
      <script src="HunterWarn_server.lua" type="server"/> 
      <script src="HunterWarn_client.lua" type="client"/> 
    <file src="hunter.png" /> 
    </meta> 
      
    

    Server side :

        addEvent("onPlayerPickUpRacePickup", true) 
        function onHunter(pickupID, pickupType, vehicleModel) 
            if pickupType == "vehiclechange" and vehicleModel == 425 then 
                outputChatBox('[HUNTER] '..getPlayerName(source)..' has reached a Hunter!',getRootElement(),255,0,0) 
            end 
        end 
        addEventHandler("onPlayerPickUpRacePickup", getRootElement(), onHunter) 
          
        function HNEnd() 
            setTimer(guiSetVisible, 2000, 1, image, false) 
        end 
        addEventHandler("playHunter", getRootElement(), HNEnd) 
    

    client side :

    local image = guiCreateStaticImage( 0.2, 0.1, 0.5, 0.1, "hunter.png", true ) 
    guiSetVisible(image,false) 
    function HNEnd() 
        guiSetVisible(image,true) 
        setTimer(guiSetVisible, 2000, 1, image, false) 
    end 
    addEvent("playHunter",true) 
    addEventHandler("playHunter", getRootElement(), HNEnd) 
      
      
    

  8. Hi im trying to make a script that allows the final survivor in a DM map to complete it instead of the next map starting.

    Im getting an error saying "Failed to getactiveplayers" Whenever someone dies.

    this is my code

        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, "[DD]" ) 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, "[DM]" ) 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 
      
    

  9. Hi Im having a problem with my DD/DM server i made it with the race gamemode. The problem is that whenever the last survivor is doing the map the next map starts like its a derby map. Im using mapcycler to cycle the maps please help.

  10. 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() <= 1 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 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

    local rank = self:getPlayerRank(player)

    finishActivePlayer(player)

    if rank and rank > 1 then

    triggerEvent( "onPlayerFinishDD",player,tonumber( rank ) )

    end

    -- Update ranking board if one player left

    local activePlayers = getActivePlayers()

    if #activePlayers == 1 then

    self.rankingBoard:add(activePlayers[1], timePassed)

    showMessage(getPlayerName(activePlayers[1]) .. ' is the final survivor!', 0, 255, 0)

    triggerEvent( "onPlayerWinDD",activePlayers[1] )

    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()

    return g_CurrentRaceMode.activePlayerList

    end

  11. Hi i just made a DD/DM server but i got a problem it only works on DD maps the DD maps work fine but on DM maps when everyone dies and only one person is left so the next map starts is the anyway to fix this? so it can be DD and DM.

×
×
  • Create New...