class stub_VotingHandler extends xVotingHandler; // only REAL players are counted. FUCKING IGNORES SPECS AND FAKES. FINALLY!!!!!! function TallyVotes(bool bForceMapSwitch) { local int oldNumPlayers; local Controller c; // save the current player count oldNumPlayers = Level.Game.NumPlayers; // reset the player count Level.Game.NumPlayers = 0; // count real players to prevent fakes from or specs from preventing map switching for (c=level.ControllerList; c!=none; c=c.nextController) { if (c.bIsPlayer && c.PlayerReplicationInfo != none && !c.PlayerReplicationInfo.bOnlySpectator) Level.Game.NumPlayers++; } super(xVotingHandler).TallyVotes(bForceMapSwitch); // restore the original number of players Level.Game.NumPlayers = oldNumPlayers; } // this is just here to tell spectators that they can't vote function SubmitMapVote(int MapIndex, int GameIndex, Actor Voter) { local int Index, VoteCount, PrevMapVote, PrevGameVote; local MapHistoryInfo MapInfo; local bool bAdminForce; if (bLevelSwitchPending) return; Index = GetMVRIIndex(PlayerController(Voter)); if (GameIndex < 0) { bAdminForce = true; GameIndex = (-GameIndex) - 1; } if (GameIndex >= GameConfig.Length || MapIndex < 0 || MapIndex >= MapList.Length) return; // Something is wrong... // check for invalid vote from unpatch players if (!IsValidVote(MapIndex, GameIndex)) return; // Administrator Vote if (bAdminForce && (PlayerController(Voter).PlayerReplicationInfo.bAdmin || PlayerController(Voter).PlayerReplicationInfo.bSilentAdmin)) { TextMessage = lmsgAdminMapChange; TextMessage = Repl(TextMessage, "%mapname%", MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")"); Level.Game.Broadcast(self,TextMessage); log("Admin has forced map switch to " $ MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")",'MapVote'); CloseAllVoteWindows(); bLevelSwitchPending = true; MapInfo = History.PlayMap(MapList[MapIndex].MapName); ServerTravelString = SetupGameMap(MapList[MapIndex], GameIndex, MapInfo); log("ServerTravelString = " $ ServerTravelString ,'MapVoteDebug'); // change the map Level.ServerTravel(ServerTravelString, false); settimer(1,true); return; } if (PlayerController(Voter).PlayerReplicationInfo.bOnlySpectator) { // Spectators cant vote PlayerController(Voter).ClientMessage(lmsgSpectatorsCantVote); return; } // check for invalid map, invalid gametype, player isnt revoting same as previous vote, and map choosen isnt disabled if (MapIndex < 0 || MapIndex >= MapCount || GameIndex >= GameConfig.Length || (MVRI[Index].GameVote == GameIndex && MVRI[Index].MapVote == MapIndex) || !MapList[MapIndex].bEnabled) return; log("___" $ Index $ " - " $ PlayerController(Voter).PlayerReplicationInfo.PlayerName $ " voted for " $ MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")",'MapVote'); PrevMapVote = MVRI[Index].MapVote; PrevGameVote = MVRI[Index].GameVote; MVRI[Index].MapVote = MapIndex; MVRI[Index].GameVote = GameIndex; if (bAccumulationMode) { if (bScoreMode) { VoteCount = GetAccVote(PlayerController(Voter)) + int(GetPlayerScore(PlayerController(Voter))); TextMessage = lmsgMapVotedForWithCount; TextMessage = repl(TextMessage, "%playername%", PlayerController(Voter).PlayerReplicationInfo.PlayerName ); TextMessage = repl(TextMessage, "%votecount%", string(VoteCount) ); TextMessage = repl(TextMessage, "%mapname%", MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")" ); Level.Game.Broadcast(self,TextMessage); } else { VoteCount = GetAccVote(PlayerController(Voter)) + 1; TextMessage = lmsgMapVotedForWithCount; TextMessage = repl(TextMessage, "%playername%", PlayerController(Voter).PlayerReplicationInfo.PlayerName ); TextMessage = repl(TextMessage, "%votecount%", string(VoteCount) ); TextMessage = repl(TextMessage, "%mapname%", MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")" ); Level.Game.Broadcast(self,TextMessage); } } else { if (bScoreMode) { VoteCount = int(GetPlayerScore(PlayerController(Voter))); TextMessage = lmsgMapVotedForWithCount; TextMessage = repl(TextMessage, "%playername%", PlayerController(Voter).PlayerReplicationInfo.PlayerName ); TextMessage = repl(TextMessage, "%votecount%", string(VoteCount) ); TextMessage = repl(TextMessage, "%mapname%", MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")" ); Level.Game.Broadcast(self,TextMessage); } else { VoteCount = 1; TextMessage = lmsgMapVotedFor; TextMessage = repl(TextMessage, "%playername%", PlayerController(Voter).PlayerReplicationInfo.PlayerName ); TextMessage = repl(TextMessage, "%mapname%", MapList[MapIndex].MapName $ "(" $ GameConfig[GameIndex].Acronym $ ")" ); Level.Game.Broadcast(self,TextMessage); } } UpdateVoteCount(MapIndex, GameIndex, VoteCount); if (PrevMapVote > -1 && PrevGameVote > -1) UpdateVoteCount(PrevMapVote, PrevGameVote, -MVRI[Index].VoteCount); // undo previous vote MVRI[Index].VoteCount = VoteCount; TallyVotes(false); }