Tomc0 Posted September 3, 2013 Share Posted September 3, 2013 Hello guys, I'm writing a little addon for the DD/DM gamemode. If only one player is alive in the DM mode, the server lets the player finish the race - this part is okay of the script. But if the last player is dead, I want to switch to a random map. How can I do that? Here's my modified script: function tablelength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count 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) end if #activePlayers == nil then triggerEvent( "onPlayerWinDD",activePlayers[0] ) local maps = exports["mapmanager"]:getMaps() maps_length = tablelength(maps) exports["mapmanager"]:changeGamemodeMap(maps[Math.random(0,maps_length)]) end end But that not works, and I can't really understand why. Can you please help? Thanks! Link to comment
kevenvz Posted September 3, 2013 Share Posted September 3, 2013 Change nil in if #activePlayers == nil then to 0 it should work. Link to comment
Tomc0 Posted September 3, 2013 Author Share Posted September 3, 2013 Still not works 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) end if #activePlayers == 0 then triggerEvent( "onPlayerWinDD",activePlayers[0] ) local maps = exports["mapmanager"]:getMaps() maps_length = tablelength(maps) exports["mapmanager"]:changeGamemodeMap(maps[math.random(0,maps_length)]) end end Link to comment
bandi94 Posted September 3, 2013 Share Posted September 3, 2013 Why not just set it on the admin panel to 'random' in race settings ? Link to comment
Tomc0 Posted September 4, 2013 Author Share Posted September 4, 2013 Oh, I totally forgot this... Thanks! 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