mirror of
https://github.com/ChocoTaco1/TacoServer.git
synced 2026-01-20 00:24:49 +00:00
1878 lines
69 KiB
C#
1878 lines
69 KiB
C#
//$Host::AllowAdmin2Admin = 0;
|
|
//$Host::AllowAdminBan = 0;
|
|
//$Host::AllowAdminKick = 1;
|
|
//$Host::AllowAdminVotes = 1;
|
|
//$Host::AllowAdminStopVote = 1;
|
|
//$Host::AllowAdminPassVote = 1;
|
|
//$Host::AllowPlayerVoteChangeMission = 1;
|
|
//$Host::AllowPlayerVoteSkipMission = 1;
|
|
//$Host::AllowPlayerVoteTimeLimit = 1;
|
|
//$Host::AllowPlayerVoteTournamentMode = 1;
|
|
//$Host::AllowPlayerVoteTeamDamage = 0;
|
|
//$Host::AllowPlayerVoteNextMission = 1;
|
|
|
|
//Vote Delay
|
|
//Delay the ability to vote (For everyone) at the beginning of the match
|
|
//$Host::VoteDelayTime = 120; //(120 is 2 mins)
|
|
|
|
//Vote Cooldown
|
|
//Time cooldown that dosnt allow a player to vote again after theyve initiated a vote
|
|
//$Host::VoteCooldown = 120; //(120 is 2 mins)
|
|
|
|
package ExtraVoteMenu
|
|
{
|
|
|
|
function DefaultGame::evalVote(%game, %typeName, %admin, %arg1, %arg2, %arg3, %arg4)
|
|
{
|
|
switch$ (%typeName)
|
|
{
|
|
case "cancelMatchStart":
|
|
%game.cancelMatchStart(%admin, %arg1, %arg2, %arg3, %arg4);
|
|
case "VoteNextMission":
|
|
%game.setNextMission(%admin, %arg1, %arg2, %arg3, %arg4);
|
|
default:
|
|
Parent::evalVote(%game, %typeName, %admin, %arg1, %arg2, %arg3, %arg4);
|
|
}
|
|
}
|
|
|
|
function DefaultGame::sendGameVoteMenu(%game, %client, %key)
|
|
{
|
|
%isAdmin = (%client.isAdmin || %client.isSuperAdmin);
|
|
%multipleTeams = %game.numTeams > 1;
|
|
%client.k = %key; //For set next mission
|
|
|
|
if (%client.ForceVote > 0)
|
|
%client.ForceVote = %client.ForceVote - 1;
|
|
|
|
//Admin Submenu
|
|
if (%client.ForceVote > 0)
|
|
{
|
|
if(!$Host::TournamentMode)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'change server to Tournament.', 'Vote Tournament Mode');
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Vote to Change the Mission');
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteNextMission', 'set next mission to', 'Vote to Set the Next Mission');
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteChangeTimeLimit', 'change the time limit', 'Vote to Change the Time Limit');
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteSkipMission', 'skip the mission to', 'Vote to Skip Mission' );
|
|
if(%multipleTeams)
|
|
{
|
|
if($teamDamage)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'disable team damage', 'Vote to Disable Team Damage');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'enable team damage', 'Vote to Enable Team Damage');
|
|
}
|
|
messageClient(%client, 'MsgVoteItem',"", %key, 'ForceVote', 'Cancel Force Vote', "Cancel 'Vote To...'");
|
|
return;
|
|
}
|
|
|
|
//Pass Stop Menu
|
|
if(%client.isAdmin && %game.scheduleVote !$= "")
|
|
{
|
|
if(%client.isSuperAdmin || (%client.isAdmin && $Host::AllowAdminStopVote)) // allow admins to stop votes
|
|
messageClient( %client, 'MsgVoteItem', "", %key, 'stopRunningVote', 'stop current vote', 'Stop the Vote');
|
|
if(%client.isSuperAdmin || (%client.isAdmin && $Host::AllowAdminPassVote)) // allow admins to pass votes
|
|
messageClient( %client, 'MsgVoteItem', "", %key, 'passRunningVote', 'pass current vote', 'Pass the Vote');
|
|
return;
|
|
}
|
|
|
|
//Mission Info Header - Mission Name, Type, Caps to Win
|
|
if(%client.canVote && %game.scheduleVote $= "")
|
|
{
|
|
switch$($CurrentMissionType)
|
|
{
|
|
case CTF or SCtF:
|
|
if($Host::TournamentMode)
|
|
%showTL = " - Time Limit:" SPC $Host::TimeLimit SPC "Minutes";
|
|
if($voteNext)
|
|
%showNM = " - Next Map:" SPC $HostMissionName[$voteNextMap] SPC "(" @ $HostTypeName[$voteNextType] @ ")";
|
|
messageClient(%client, 'MsgVoteItem', "", %key, '', $MissionDisplayName SPC "(" @ $MissionTypeDisplayName @ "):" SPC MissionGroup.CTF_scoreLimit SPC "Caps to Win",
|
|
$MissionDisplayName SPC "(" @ $MissionTypeDisplayName @ "):" SPC MissionGroup.CTF_scoreLimit SPC "Caps to Win" @ %showTL @ %showNM);
|
|
case LakRabbit:
|
|
%cap = "2000 Points to Win";
|
|
messageClient(%client, 'MsgVoteItem', "", %key, '', $MissionDisplayName SPC "(" @ $MissionTypeDisplayName @ "):" SPC %cap,
|
|
$MissionDisplayName SPC "(" @ $MissionTypeDisplayName @ "):" SPC %cap);
|
|
case DM:
|
|
%cap = "25 Points to Win";
|
|
messageClient(%client, 'MsgVoteItem', "", %key, '', $MissionDisplayName SPC "(" @ $MissionTypeDisplayName @ "):" SPC %cap,
|
|
$MissionDisplayName SPC "(" @ $MissionTypeDisplayName @ "):" SPC %cap);
|
|
}
|
|
}
|
|
|
|
// TEAM OPTIONS
|
|
if(%client.team != 0) //he isn't an observer
|
|
{
|
|
if(!%client.isAdmin && !$Host::TournamentMode)
|
|
{
|
|
if(%multipleTeams)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Change your Team');
|
|
if($MatchStarted)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'MakeObserver', "", 'Become an Observer');
|
|
}
|
|
else if(%client.isAdmin) //only admins can change team during tournament mode
|
|
{
|
|
if(%multipleTeams)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Change your Team');
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'MakeObserver', "", 'Become an Observer');
|
|
}
|
|
}
|
|
|
|
//Beginning match Vote Delay
|
|
if(!%client.isAdmin && (getSimTime() - $VoteDelay) < ($Host::VoteDelayTime * 1000))
|
|
return;
|
|
|
|
if(!%client.canVote && !%isAdmin)
|
|
return;
|
|
|
|
//Standard Vote Options
|
|
if(%game.scheduleVote $= "")
|
|
{
|
|
//Start Match
|
|
if(!$MatchStarted && !$CountdownStarted && $Host::TournamentMode)
|
|
{
|
|
if(!%client.isAdmin)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteMatchStart', 'Start Match', 'Vote to Start the Match');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteMatchStart', 'Start Match', 'Start Match');
|
|
}
|
|
//Cancel Match Start
|
|
if(!$MatchStarted && $CountdownStarted && $Host::TournamentMode && %client.isAdmin)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'cancelMatchStart', 'Cancel Match Start', 'Cancel Match Start');
|
|
//Vote Free For All Mode
|
|
if($Host::TournamentMode)
|
|
{
|
|
if(!%client.isAdmin)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteFFAMode', 'Change server to Free For All.', 'Vote Free For All Mode');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteFFAMode', 'Change server to Free For All.', 'Change FFA Mode');
|
|
}
|
|
//Vote Tournament Mode
|
|
if(!$Host::TournamentMode)
|
|
{
|
|
if(!%client.isAdmin)
|
|
{
|
|
if($Host::AllowPlayerVoteTournamentMode && !$RestrictedVoting)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'Change server to Tournament.', 'Vote Tournament Mode');
|
|
}
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'Change server to Tournament.', 'Tournament Mode');
|
|
}
|
|
//Vote Change Mission
|
|
if(!%client.isAdmin)
|
|
{
|
|
if($Host::AllowPlayerVoteChangeMission && !$RestrictedVoting)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Vote to Change the Mission');
|
|
}
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Change the Mission');
|
|
//Vote Change Next Mission
|
|
if(!%client.isAdmin)
|
|
{
|
|
if($Host::AllowPlayerVoteNextMission && !$RestrictedVoting)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteNextMission', 'set next mission to', 'Vote to Set the Next Mission');
|
|
}
|
|
else
|
|
{
|
|
if(!$voteNext)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteNextMission', 'set next mission to', 'Set the Next Mission');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ClearNextMap', 'Clear Next Set Map', 'Clear Next Set Map');
|
|
}
|
|
//Vote Change Time
|
|
if(!%client.isAdmin)
|
|
{
|
|
if($Host::AllowPlayerVoteTimeLimit && !$RestrictedVoting)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteChangeTimeLimit', 'change the time limit', 'Vote to Change the Time Limit');
|
|
}
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteChangeTimeLimit', 'change the time limit', 'Change the Time Limit');
|
|
//Vote Skip Mission
|
|
if(!%client.isAdmin)
|
|
{
|
|
if($Host::AllowPlayerVoteSkipMission && !$RestrictedVoting)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteSkipMission', 'skip the mission to', 'Vote to Skip Mission' );
|
|
}
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteSkipMission', 'skip the mission to', 'Skip the Mission' );
|
|
//Admin Vote Menu
|
|
if(%client.isAdmin && $Host::AllowAdminVotes)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ForceVote', 'Vote to ...', 'Vote to ...');
|
|
//PUG Password
|
|
if(%client.isAdmin && $Host::TournamentMode)
|
|
{
|
|
if($Host::Password !$= "")
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'TogglePUGpassword', 'Disable PUG Password', 'Disable PUG Password');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'TogglePUGpassword', 'Enable PUG Password', 'Enable PUG Password');
|
|
}
|
|
//Locked Teams
|
|
if(%client.isAdmin && $Host::TournamentMode)
|
|
{
|
|
if($LockedTeams)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ToggleLockedTeams', 'Disable Locked Teams', 'Disable Locked Teams');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ToggleLockedTeams', 'Enable Locked Teams', 'Enable Locked Teams');
|
|
}
|
|
//Restricted Voting
|
|
if(%client.isAdmin && $Host::TournamentMode)
|
|
{
|
|
if($RestrictedVoting)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ToggleRestrictedVoting', 'Disable Restricted Voting', 'Disable Restricted Voting');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'ToggleRestrictedVoting', 'Enable Restricted Voting', 'Enable Restricted Voting');
|
|
}
|
|
//Vote Team Damage
|
|
if(%multipleTeams)
|
|
{
|
|
if(!%client.isAdmin)
|
|
{
|
|
if($Host::AllowPlayerVoteTeamDamage && !$RestrictedVoting)
|
|
{
|
|
if($teamDamage)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'disable team damage', 'Vote to Disable Team Damage');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'enable team damage', 'Vote to Enable Team Damage');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if($teamDamage)
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'disable team damage', 'Disable Team Damage');
|
|
else
|
|
messageClient(%client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'enable team damage', 'Enable Team Damage');
|
|
}
|
|
}
|
|
|
|
//Super Admin Only
|
|
if(%client.isSuperAdmin)
|
|
{
|
|
if($Host::AllowAdmin2Admin) //Toggle Admin2Admin
|
|
messageClient( %client, 'MsgVoteItem', "", %key, 'Admins2Admin', 'Disable Admins to Admin', "Disable Admins to Admin" );
|
|
else
|
|
messageClient( %client, 'MsgVoteItem', "", %key, 'Admins2Admin', 'Enable Admins to Admin', "Enable Admins to Admin" );
|
|
}
|
|
//Disabled for now
|
|
// if(%client.isSuperAdmin)
|
|
// {
|
|
// if($Host::EnableNetTourneyClient) //Toggle Tournament Net Client
|
|
// messageClient( %client, 'MsgVoteItem', "", %key, 'ToggleTourneyNetClient', 'Disable Tournament Net Client', "Disable Tournament Net Client" );
|
|
// else
|
|
// messageClient( %client, 'MsgVoteItem', "", %key, 'ToggleTourneyNetClient', 'Enable Tournament Net Client', "Enable Tournament Net Client" );
|
|
// }
|
|
|
|
//Everyone
|
|
if ($Host::ServerRules[1] !$= "" )
|
|
messageClient( %client, 'MsgVoteItem', "", %key, 'showServerRules', 'show server rules', "Show Server Rules" );
|
|
}
|
|
}
|
|
|
|
// Eolk - completely re-wrote this.
|
|
function serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %playerVote)
|
|
{
|
|
%isAdmin = ( %client.isAdmin || %client.isSuperAdmin );
|
|
if(!%client.canVote && !%isAdmin)
|
|
return;
|
|
|
|
if(Game.scheduleVote !$= "" && (!%isAdmin || (%isAdmin && %client.ForceVote)))
|
|
{
|
|
messageClient(%client, 'voteAlreadyRunning', "\c2A vote is already in progress.");
|
|
%client.ForceVote = 0;
|
|
return;
|
|
}
|
|
|
|
%teamSpecific = 0;
|
|
switch$(%typeName)
|
|
{
|
|
case "VoteKickPlayer":
|
|
if(%client == %arg1) // client is trying to votekick himself
|
|
return; // Use the leave button instead, pal.
|
|
|
|
if(%isAdmin) // Admin is trying to kick
|
|
{
|
|
if((%arg1.isAdmin && !%client.isSuperAdmin) || %arg1.isSuperAdmin) // target is an admin and kicker is just an admin, or if target is a super admin
|
|
{
|
|
messageClient(%client, "MsgClient", "\c2You cannot kick "@%arg1.nameBase@".");
|
|
return;
|
|
}
|
|
}
|
|
else // Player is voting to kick
|
|
{
|
|
if($Host::TournamentMode && $RestrictedVoting) // Dont allow Votekicks in Tournament Mode
|
|
{
|
|
messageClient(%client, "", "\c2No votekicks in Tournament Mode at this time.");
|
|
return;
|
|
}
|
|
|
|
if(%arg1.isAdmin) // target is an admin
|
|
{
|
|
messageClient(%client, "MsgClient", "\c2You cannot vote to kick "@%arg1.nameBase@", "@(%arg1.sex $= "Male" ? "he" : "she")@" is an admin!");
|
|
return;
|
|
}
|
|
|
|
if(%arg1.team != %client.team)
|
|
{
|
|
messageClient(%client, "MsgClient", "\c2Kick votes must be team based.");
|
|
return;
|
|
}
|
|
|
|
if($CMHasVoted[%client.guid] >= $Host::ClassicMaxVotes && !%isAdmin) // they've voted too many times
|
|
{
|
|
messageClient(%client, "", "\c2You have exhausted your voting rights for this mission.");
|
|
return;
|
|
}
|
|
|
|
%msg = %client.nameBase @ " initiated a vote to kick player " @ %arg1.nameBase @ ".";
|
|
|
|
//Notify any admins on the other team
|
|
for(%i = 0; %i < ClientGroup.getCount(); %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.isAdmin == true && %cl.team !$= %arg1.team) //Not on admins team
|
|
messageClient(%cl, '', '\c5[A]\c0%1 initiated a vote to kick player %2 on the other team.~wgui/objective_notification.wav', %client.nameBase, %arg1.nameBase);
|
|
}
|
|
|
|
$CMHasVoted[%client.guid]++;
|
|
}
|
|
|
|
if(%arg1.team != 0)
|
|
%teamSpecific = 1;
|
|
|
|
Game.kickClient = %arg1;
|
|
Game.kickClientName = %arg1.name;
|
|
Game.kickClientNameBase = %arg1.nameBase;
|
|
Game.kickGuid = %arg1.guid;
|
|
Game.kickTeam = %arg1.team;
|
|
|
|
case "VoteAdminPlayer":
|
|
if(%arg1.isAdmin) // target is already an admin
|
|
return; // can't vote to admin an admin!
|
|
|
|
if(%isAdmin)
|
|
{
|
|
if(!%client.isSuperAdmin && !$Host::AllowAdmin2Admin)
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if(!$host::allowadminplayervotes) // admin player votes are NOT enabled
|
|
return; // can't do that pal
|
|
|
|
%msg = %client.nameBase @ " initiated a vote to admin player " @ %arg1.nameBase @ ".";
|
|
}
|
|
|
|
case "BanPlayer":
|
|
if(%client.isSuperAdmin && !%arg1.isSuperAdmin) // we're a super admin, and our target isn't a super admin
|
|
{
|
|
ban(%arg1, %client); // ban 'em
|
|
adminLog(%client, " has banned" SPC %arg1.nameBase @ "(" @ %arg1.guid @ ").");
|
|
}
|
|
return; // stop the function in its tracks
|
|
|
|
case "VoteChangeMission":
|
|
// Vote-spoof prevention right here
|
|
%arg1 = $HostMissionFile[%arg3];
|
|
%arg2 = $HostTypeName[%arg4];
|
|
if(!checkMapExist(%arg1, %arg2))
|
|
return;
|
|
|
|
// We passed the spoof check, give it the fancy label
|
|
%arg1 = $HostMissionName[%arg3];
|
|
%arg2 = $HostTypeDisplayName[%arg4];
|
|
if((!%isAdmin && $Host::AllowPlayerVoteChangeMission) || (%isAdmin && %client.ForceVote)) // not admin
|
|
{
|
|
if($CMHasVoted[%client.guid] >= $Host::ClassicMaxVotes && !%isAdmin) // they've voted too many times
|
|
{
|
|
messageClient(%client, "", "\c2You have exhausted your voting rights for this mission.");
|
|
return;
|
|
}
|
|
|
|
%msg = %client.nameBase @ " initiated a vote to change the mission to " @ %arg1 @ " (" @ %arg2 @ ").";
|
|
$CMHasVoted[%client.guid]++;
|
|
}
|
|
|
|
case "VoteTeamDamage":
|
|
if((!%isAdmin && $Host::AllowPlayerVoteTeamDamage) || (%isAdmin && %client.ForceVote)) // not admin
|
|
{
|
|
%msg = %client.nameBase @ " initiated a vote to " @ ($TeamDamage == 0 ? "enable" : "disable") @ " team damage.";
|
|
}
|
|
|
|
case "VoteTournamentMode":
|
|
if((!%isAdmin && $Host::AllowPlayerVoteTournamentMode) || (%isAdmin && %client.ForceVote))
|
|
{
|
|
if(getAdmin() == 0)
|
|
{
|
|
messageClient(%client, 'clientMsg', "There must be a server admin to play in Tournament Mode.");
|
|
return;
|
|
}
|
|
|
|
%msg = %client.nameBase @ " initiated a vote to switch the server to Tournament Mode (" @ %arg1 @ ").";
|
|
}
|
|
|
|
case "VoteFFAMode":
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
{
|
|
%msg = %client.nameBase @ " initiated a vote to switch the server to Free For All mode.";
|
|
}
|
|
|
|
case "VoteChangeTimeLimit":
|
|
if($CMHasVoted[%client.guid] >= $Host::ClassicMaxVotes && !%isAdmin)
|
|
{
|
|
messageClient(%client, "", "\c2You have exhausted your voting rights for this mission.");
|
|
return;
|
|
}
|
|
|
|
if($CurrentMissionType $= "Siege") // Can't change time in this one
|
|
{
|
|
messageClient(%client, "", "\c2Cannot change the time limit in this gametype.");
|
|
return;
|
|
}
|
|
|
|
// Eolk - don't let votes/admins end the map immediately by switching the time limit below the elapsed time
|
|
if((%arg1 * 60 * 1000) < (getSimTime() - $missionStartTime))
|
|
{
|
|
messageClient(%client, "", "\c2Switching to this time would cause the game to end immediately.");
|
|
return;
|
|
}
|
|
|
|
if(%arg1 == $Host::TimeLimit)
|
|
{
|
|
messageClient(%client, "", "\c2Switching to this time wouldn't affect the time limit at all.");
|
|
return;
|
|
}
|
|
|
|
//If proposed time is lower than server set or higher than unlimited
|
|
if(%arg1 < $Host::TimeLimit || %arg1 > 999)
|
|
{
|
|
if(!%isAdmin)
|
|
{
|
|
messageClient(%client, "", "\c2Invalid time selection.");
|
|
return;
|
|
}
|
|
else //is an admin
|
|
{
|
|
if($Host::TournamentMode) //Admins still have the option to set the time to 30 minutes in Tourney Mode
|
|
{
|
|
if(%arg1 !$= "30") //30 minutes only
|
|
{
|
|
messageClient(%client, "", "\c2Invalid time selection.");
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
messageClient(%client, "", "\c2Invalid time selection.");
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
//If proposed time is something other than what is selectable
|
|
if(%arg1 !$= "30" && %arg1 !$= "45" && %arg1 !$= "60" && %arg1 !$= "75" && %arg1 !$= "90" && %arg1 !$= "180" && %arg1 !$= "360" && %arg1 !$= "999")
|
|
{
|
|
messageClient(%client, "", "\c2Only selectable times allowed.");
|
|
return;
|
|
}
|
|
|
|
if((!%isAdmin && $Host::AllowPlayerVoteTimeLimit) || (%isAdmin && %client.ForceVote))
|
|
{
|
|
if(%arg1 $= "999") %time = "unlimited"; else %time = %arg1;
|
|
%msg = %client.nameBase @ " initiated a vote to change the time limit to " @ %time SPC "minutes.";
|
|
// VoteOvertime
|
|
StartVOTimeVote(%game);
|
|
|
|
$CMHasVoted[%client.guid]++;
|
|
}
|
|
|
|
case "VoteMatchStart":
|
|
if(!%isAdmin)
|
|
{
|
|
if($MatchStarted || $CountdownStarted)
|
|
return;
|
|
|
|
%msg = %client.nameBase @ " initiated a vote to start the match.";
|
|
}
|
|
|
|
case "CancelMatchStart":
|
|
if(%isAdmin) // only admins can cancel match start
|
|
{
|
|
adminStartNewVote(%client, %typename, %arg1, %arg2, %arg3, %arg4);
|
|
adminLog(%client, " canceled match start.");
|
|
}
|
|
|
|
case "VoteGreedMode":
|
|
if($CurrentMissionType !$= "Hunters" || $CurrentMissionType !$= "TeamHunters")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.greedMode == 0 ? "enable" : "disable") @ " greed mode.";
|
|
|
|
case "VoteHoardMode":
|
|
if($CurrentMissionType !$= "Hunters" || $CurrentMissionType !$= "TeamHunters")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.hoardMode == 0 ? "enable" : "disable") @ " hoard mode.";
|
|
|
|
case "VoteRandomTeams":
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
{
|
|
%msg = %client.nameBase @ " initiated a vote to " @ ($RandomTeams == 0 ? "enable" : "disable") @ " random teams.";
|
|
}
|
|
|
|
case "VoteFairTeams":
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
{
|
|
%msg = %client.nameBase @ " initiated a vote to " @ ($FairTeams == 0 ? "enable" : "disable") @ " fair teams.";
|
|
}
|
|
|
|
case "VoteSkipMission":
|
|
if((!%isAdmin && $Host::AllowPlayerVoteSkipMission) || (%isAdmin && %client.ForceVote))
|
|
{
|
|
if($CMHasVoted[%client.guid] >= $Host::ClassicMaxVotes && !%isAdmin)
|
|
{
|
|
messageClient(%client, "", "\c2You have exhausted your voting rights for this mission.");
|
|
return;
|
|
}
|
|
|
|
%msg = %client.nameBase @ " initiated a vote to skip the current mission.";
|
|
$CMHasVoted[%client.guid]++;
|
|
}
|
|
|
|
case "passRunningVote":
|
|
if (%client.isSuperAdmin || (%client.isAdmin && $Host::AllowAdminPassVote))
|
|
{
|
|
passCurrentVote(%client);
|
|
adminLog(%client, " passed the vote in progress.");
|
|
return;
|
|
}
|
|
|
|
case "stopRunningVote":
|
|
if(%client.isSuperAdmin || (%client.isAdmin && $Host::AllowAdminStopVote))
|
|
{
|
|
if($VOStatus $="InProgress") //Dont allow a stop vote after time has expired, then no new time is set - VoteOverTime
|
|
{
|
|
messageClient(%client, "", "\c2Can't stop time vote after time has expired.");
|
|
return;
|
|
}
|
|
|
|
stopCurrentVote(%client);
|
|
adminLog(%client, " stopped the vote in progress.");
|
|
return;
|
|
}
|
|
|
|
case "TogglePUGpassword":
|
|
if (%client.isAdmin && $Host::TournamentMode)
|
|
{
|
|
if($Host::Password !$= "")
|
|
{
|
|
$Host::Password = "";
|
|
messageAdmins('', %client.nameBase @ " has disabled the PUG password.~wfx/powered/vehicle_screen_on.wav");
|
|
adminLog(%client, " has disabled PUG password." );
|
|
}
|
|
else
|
|
{
|
|
$Host::Password = $Host::PUGPassword;
|
|
messageAdmins('', %client.nameBase @ " has enabled the PUG password (\"" @ $Host::PUGPassword @ "\").~wfx/powered/vehicle_screen_on.wav");
|
|
adminLog(%client, " has enabled PUG password." );
|
|
}
|
|
}
|
|
return;
|
|
|
|
case "ToggleLockedTeams":
|
|
if (%client.isAdmin && $Host::TournamentMode)
|
|
{
|
|
if(!$LockedTeams)
|
|
{
|
|
if(!isActivePackage(LockedTeams))
|
|
activatePackage(LockedTeams);
|
|
$LockedTeams = 1;
|
|
messageAdmins('', %client.nameBase @ " has enabled Locked Teams.~wfx/powered/vehicle_screen_on.wav" );
|
|
adminLog(%client, " has enabled Locked Teams.");
|
|
}
|
|
else
|
|
{
|
|
if(isActivePackage(LockedTeams))
|
|
deactivatePackage(LockedTeams);
|
|
$LockedTeams = 0;
|
|
messageAdmins('', %client.nameBase @ " has disabled Locked Teams.~wfx/powered/vehicle_screen_on.wav" );
|
|
adminLog(%client, " has disabled Locked Teams.");
|
|
}
|
|
}
|
|
return;
|
|
|
|
case "ToggleRestrictedVoting":
|
|
if(%client.isAdmin && $Host::TournamentMode)
|
|
{
|
|
if(!$RestrictedVoting)
|
|
{
|
|
$RestrictedVoting = 1;
|
|
messageAdmins('', %client.nameBase @ " has enabled restricted voting (No Map, Time, Kick, or Team Damage Votes).~wfx/powered/vehicle_screen_on.wav");
|
|
adminLog(%client, " has enabled restricted voting." );
|
|
}
|
|
else
|
|
{
|
|
$RestrictedVoting = 0;
|
|
messageAdmins('', %client.nameBase @ " has disabled restricted voting.~wfx/powered/vehicle_screen_on.wav" );
|
|
adminLog(%client, " has disabled restricted voting." );
|
|
}
|
|
}
|
|
return;
|
|
|
|
case "Admins2Admin":
|
|
if(%client.isSuperAdmin)
|
|
{
|
|
if($Host::AllowAdmin2Admin)
|
|
{
|
|
$Host::AllowAdmin2Admin = 0;
|
|
|
|
messageAdmins('', %client.nameBase @ " has disabled Admins to Admin.~wfx/powered/vehicle_screen_on.wav" );
|
|
adminLog(%client, " has disabled Admins to Admin.");
|
|
}
|
|
else
|
|
{
|
|
$Host::AllowAdmin2Admin = 1;
|
|
|
|
messageAdmins('', %client.nameBase @ " has enabled Admins to Admin.~wfx/powered/vehicle_screen_on.wav" );
|
|
adminLog(%client, " has enabled Admins to Admin.");
|
|
}
|
|
}
|
|
return;
|
|
|
|
case "ToggleTourneyNetClient":
|
|
if(%client.isSuperAdmin)
|
|
{
|
|
if($Host::EnableNetTourneyClient)
|
|
{
|
|
$Host::EnableNetTourneyClient = 0;
|
|
|
|
if(isActivePackage(checkver))
|
|
deactivatePackage(checkver);
|
|
|
|
messageAdmins('', %client.nameBase @ " has disabled Net Tourney Client checking.~wfx/powered/vehicle_screen_on.wav" );
|
|
adminLog(%client, " has disabled Net Tourney Client checking.");
|
|
}
|
|
else
|
|
{
|
|
$Host::EnableNetTourneyClient = 1;
|
|
|
|
if(!isActivePackage(checkver))
|
|
activatePackage(checkver);
|
|
|
|
//Boot Offenders into Obs
|
|
CheckVerObserver(%client);
|
|
|
|
messageAdmins('', %client.nameBase @ " has enabled Net Tourney Client checking.~wfx/powered/vehicle_screen_on.wav" );
|
|
ResetGetCountsStatus();
|
|
adminLog(%client, " has enabled Net Tourney Client checking.");
|
|
}
|
|
}
|
|
return;
|
|
|
|
case "ForceVote":
|
|
if (!%client.isAdmin)
|
|
return;
|
|
|
|
if(%client.isAdmin && !$Host::AllowAdminVotes)
|
|
return;
|
|
|
|
if (%client.ForceVote)
|
|
{
|
|
%client.ForceVote = 0;
|
|
messageClient( %client, '', 'Vote to ... cancelled.' );
|
|
}
|
|
else
|
|
{
|
|
%client.ForceVote = 2;
|
|
messageClient( %client, '', "Now select what to vote on, please." );
|
|
}
|
|
|
|
return;
|
|
|
|
case "VoteNextMission":
|
|
if(!%client.isAdmin && $TotalTeamPlayerCount < 6)
|
|
{
|
|
messageClient( %client, '', "Need at least 6 players on teams to set the next map." );
|
|
return;
|
|
}
|
|
|
|
%foundMap = 0;
|
|
%client.lockVMenu = 1;
|
|
if(strpos(strlwr(%arg1),"next mission") != -1)
|
|
{
|
|
%key = %client.k++;
|
|
for ( %type = 0; %type < $HostTypeCount; %type++ )
|
|
messageClient( %client, 'MsgVoteItem', "", %key, 'VoteNextMission', $HostTypeDisplayName[%type], $HostTypeDisplayName[%type], true );
|
|
return;
|
|
}
|
|
%key = %client.k++;
|
|
for ( %type = 0; %type < $HostTypeCount; %type++ )
|
|
{
|
|
if($HostTypeDisplayName[%type] $= %arg1)
|
|
{
|
|
$HostNextTypeIndex = %type;
|
|
|
|
|
|
for ( %i = $HostMissionCount[%type] - 1; %i >= 0; %i-- )
|
|
{
|
|
%idx = $HostMission[%type, %i];
|
|
// If we have bots, don't change to a mission that doesn't support bots:
|
|
if ( $HostGameBotCount > 0 )
|
|
{
|
|
if( !$BotEnabled[%idx] )
|
|
continue;
|
|
}
|
|
messageClient( %client, 'MsgVoteItem', "", %key,'VoteNextMission',$HostMissionName[%idx],$HostMissionName[%idx], true );
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
%type = $HostNextTypeIndex;
|
|
for ( %i = $HostMissionCount[%type] - 1; %i >= 0; %i-- )
|
|
{
|
|
%idx = $HostMission[%type, %i];
|
|
if ( $HostGameBotCount > 0 )
|
|
{
|
|
if( !$BotEnabled[%idx] )
|
|
continue;
|
|
}
|
|
if(%arg1 $= $HostMissionName[%idx])
|
|
{
|
|
$hostNextMapIndex = %idx;
|
|
%foundMap = 1;
|
|
break;
|
|
}
|
|
}
|
|
//error("found map" SPC %foundMap SPC $HostNextTypeIndex SPC $hostNextMapIndex);
|
|
if(%foundMap)
|
|
{
|
|
%arg3 = $hostNextMapIndex;
|
|
%arg4 = $HostNextTypeIndex;
|
|
// Vote-spoof prevention right here
|
|
%arg1 = $HostMissionFile[%arg3];
|
|
%arg2 = $HostTypeName[%arg4];
|
|
if(!checkMapExist(%arg1, %arg2))
|
|
return;
|
|
|
|
// We passed the spoof check, give it the fancy label
|
|
%arg1 = $HostMissionName[%arg3];
|
|
%arg2 = $HostTypeDisplayName[%arg4];
|
|
%client.lockVMenu = 0;
|
|
if((!%isAdmin && $Host::AllowPlayerVoteNextMission) || (%isAdmin && %client.ForceVote)) // not admin
|
|
{
|
|
if($CMHasVoted[%client.guid] >= $Host::ClassicMaxVotes && !%isAdmin) // they've voted too many times
|
|
{
|
|
messageClient(%client, "", "\c2You have exhausted your voting rights for this mission.");
|
|
return;
|
|
}
|
|
%msg = %client.nameBase @ " initiated a vote to set the next mission to " @ %arg1 @ " (" @ %arg2 @ ").";
|
|
$CMHasVoted[%client.guid]++;
|
|
}
|
|
}
|
|
|
|
case "ClearNextMap":
|
|
if (%client.isAdmin && $voteNext)
|
|
{
|
|
messageAll('MsgAdminForce', "\c2The Admin " @ %client.nameBase @ " has cleared the next set mission.");
|
|
adminLog(%client, " has cleared" SPC $HostMissionFile[$voteNextMap] SPC "(" @ $HostTypeName[$voteNextType] @ ") from the next set mission.");
|
|
$voteNextType = 0;
|
|
$voteNextMap = 0;
|
|
$voteNext = 0;
|
|
}
|
|
return;
|
|
|
|
// LakRabbit Stuff
|
|
case "VoteDuelMode":
|
|
if(!$CurrentMissionType $= "LakRabbit")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.duelMode == 0 ? "enable" : "disable") @ " duel mode.";
|
|
|
|
case "VoteSplashDamage":
|
|
if(!$CurrentMissionType $= "LakRabbit")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.noSplashDamage == 1 ? "enable" : "disable") @ " splash damage.";
|
|
|
|
case "VotePro":
|
|
if(!$CurrentMissionType $= "LakRabbit")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.pubPro == 0 ? "enable" : "disable") @ " pro mode.";
|
|
|
|
//Deathmatch Stuff
|
|
case "DMSLOnlyMode":
|
|
if(!$CurrentMissionType $= "DM")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.DMSLOnlyMode == 0 ? "enable" : "disable") @ " shocklance only mode.";
|
|
|
|
//LCTF Stuff
|
|
case "SCtFProMode":
|
|
if(!$CurrentMissionType $= "sctf")
|
|
return;
|
|
|
|
if(!%isAdmin || (%isAdmin && %client.ForceVote))
|
|
%msg = %client.nameBase @ " initiated a vote to " @ (Game.SCtFProMode == 0 ? "enable" : "disable") @ " pro mode.";
|
|
|
|
case "showServerRules":
|
|
if (($Host::ServerRules[1] !$= "") && (!%client.CantView))
|
|
{
|
|
for ( %i = 1; $Host::ServerRules[%i] !$= ""; %i++ )
|
|
{
|
|
messageClient(%client, 'ServerRule', '\c2%1', $Host::ServerRules[%i] );
|
|
}
|
|
%client.cantView = true;
|
|
%client.schedViewRules = schedule( 10000, %client, "resetViewSchedule", %client );
|
|
}
|
|
return;
|
|
|
|
default:
|
|
return;
|
|
}
|
|
|
|
if(%isAdmin && !%client.ForceVote)
|
|
adminStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4);
|
|
else
|
|
playerStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %teamSpecific, %msg);
|
|
}
|
|
|
|
//exec("scripts/autoexec/VoteMenu.cs");
|
|
function playerStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %teamSpecific, %msg)
|
|
{
|
|
%clientsVoting = 0;
|
|
%count = ClientGroup.getCount();
|
|
if(%teamSpecific)
|
|
{
|
|
for(%i = 0; %i < %count; %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.team == %client.team && !%cl.isAIControlled())
|
|
{
|
|
//Specifically for votehud compatibility
|
|
switch$(%typeName)
|
|
{
|
|
case "VoteKickPlayer":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "kick player", %arg1.name);
|
|
default:
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, %arg1);
|
|
}
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
|
|
for(%i = 0; %i < %count; %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.team == %client.team && !%cl.isAIControlled())
|
|
messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(!%cl.isAIControlled())
|
|
{
|
|
//Specifically for votehud compatibility
|
|
switch$(%typeName)
|
|
{
|
|
case "VoteChangeMission":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "change the mission to", %arg1, %arg2);
|
|
case "VoteNextMission":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "set next mission to", %arg1, %arg2);
|
|
case "VoteSkipMission":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "skip the mission");
|
|
case "VoteChangeTimeLimit":
|
|
if(%arg1 $= "999") %time = "Unlimited"; else %time = %arg1;
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "change the time limit to", %time);
|
|
case "VoteKickPlayer":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "kick player", %arg1.name);
|
|
case "VoteTournamentMode":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "Tournament Mode", %arg1);
|
|
case "VoteMatchStart":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "Start Match");
|
|
case "VoteFFAMode":
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, "Free For All Mode");
|
|
default:
|
|
messageClient( %cl, 'VoteStarted', "\c2" @ %msg, %client.name, %arg1);
|
|
}
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
|
|
for(%i = 0; %i < %count; %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(!%cl.isAIControlled())
|
|
messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100));
|
|
}
|
|
}
|
|
|
|
clearVotes();
|
|
Game.voteType = %typeName;
|
|
Game.scheduleVote = schedule(($Host::VoteTime * 1000), 0, "calcVotes", %typeName, %arg1, %arg2, %arg3, %arg4);
|
|
|
|
// Eolk - Voting control variables
|
|
Game.votingArgs[typeName] = %typeName;
|
|
Game.votingArgs[arg1] = %arg1;
|
|
Game.votingArgs[arg2] = %arg2;
|
|
Game.votingArgs[arg3] = %arg3;
|
|
Game.votingArgs[arg4] = %arg4;
|
|
|
|
%client.vote = true;
|
|
messageAll('addYesVote', "");
|
|
if(%client.team != 0)
|
|
clearBottomPrint(%client);
|
|
|
|
%client.canVote = false;
|
|
%client.rescheduleVote = schedule(($Host::VoteCooldown * 1000) + ($Host::VoteTime * 1000) , 0, "resetVotePrivs", %client);
|
|
|
|
// Log Vote
|
|
voteLog(%client, %typeName, %arg1, %arg2, %arg3, %arg4);
|
|
echo(%msg);
|
|
|
|
if($Host::EnableVoteSoundReminders > 0)
|
|
{
|
|
%time = mFloor($Host::VoteTime / ($Host::EnableVoteSoundReminders + 1)) * 1000;
|
|
//echo(%time);
|
|
for(%i = 0; %i < $Host::EnableVoteSoundReminders; %i++)
|
|
Game.voteReminder[%i] = schedule((%time * (%i + 1)), 0, "VoteSound", %teamSpecific, %typename, %arg1, %arg2, %msg);
|
|
}
|
|
}
|
|
|
|
function DefaultGame::gameOver(%game)
|
|
{
|
|
Parent::gameOver(%game);
|
|
|
|
//Reset ClassicMaxMapChangeVotes
|
|
deleteVariables("$CMHasVoted*"); // Eolk - let people who have voted vote again
|
|
|
|
//Beginning match Vote Delay
|
|
$VoteDelay = getSimTime();
|
|
}
|
|
|
|
function DefaultGame::cancelMatchStart(%game, %admin)
|
|
{
|
|
if(%admin && $Host::TournamentMode && !$MatchStarted && $CountdownStarted)
|
|
{
|
|
CancelCountdown();
|
|
for(%i = 0; %i < ClientGroup.getCount(); %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
messageClient(%cl, 'MsgAdminForce', "\c2Match Start Canceled.");
|
|
messageClient(%cl, 'MsgSystemClock', "", 0, 0);
|
|
|
|
%cl.notready = 1;
|
|
%cl.notReadyCount = "";
|
|
centerprint(%cl, "\nPress FIRE when ready.", 0, 3);
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// all team based votes here
|
|
function DefaultGame::voteKickPlayer(%game, %admin, %client)
|
|
{
|
|
%cause = "";
|
|
%typeName = "VoteKickPlayer";
|
|
|
|
if(isObject(%admin))
|
|
{
|
|
kick(%client, %admin, %client.guid );
|
|
%cause = "(admin)";
|
|
}
|
|
else
|
|
{
|
|
%team = %client.team;
|
|
%totalVotes = %game.votesFor[%game.kickTeam] + %game.votesAgainst[%game.kickTeam];
|
|
%cause = "(vote)";
|
|
if(%totalVotes > 0 && (%game.votesFor[%game.kickTeam] / %totalVotes) > ($Host::VotePasspercent / 100))
|
|
{
|
|
kick(%client, %admin, %game.kickGuid);
|
|
|
|
%key = "Passed";
|
|
}
|
|
else
|
|
{
|
|
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
|
|
if (%cl.team == %game.kickTeam && !%cl.isAIControlled())
|
|
messageClient( %cl, 'MsgVoteFailed', '\c2Kick player vote did not pass.' );
|
|
}
|
|
%key = "Failed";
|
|
}
|
|
}
|
|
|
|
//Vote Only
|
|
if(%cause $= "(vote)")
|
|
{
|
|
//Log Vote %
|
|
votePercentLog(%client, %typeName, %key, %game.votesFor[%game.kickTeam], %game.votesAgainst[%game.kickTeam], %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageTeam(%game.kickTeam, "", '\c1Vote %6: \c0Yea: %1 Nay: %2 Total: %3 [%4%5]', %game.votesFor[%game.kickTeam], %game.votesAgainst[%game.kickTeam], %totalVotes, mfloor((%game.votesFor[%game.kickTeam] / %totalVotes) * 100), "%", %key);
|
|
}
|
|
|
|
if(%cause $= "(admin)")
|
|
adminLog(%admin, " kicked " @ %game.kickClientNameBase @ " (" @ %game.kickGuid @ ").");
|
|
|
|
%game.kickTeam = "";
|
|
%game.kickGuid = "";
|
|
%game.kickClientName = "";
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
function DefaultGame::voteChangeMission(%game, %admin, %missionDisplayName, %typeDisplayName, %missionId, %missionTypeId)
|
|
{
|
|
%typeName = "VoteChangeMission";
|
|
|
|
%mission = $HostMissionFile[%missionId];
|
|
if ( %mission $= "" )
|
|
{
|
|
error( "Invalid mission index passed to DefaultGame::voteChangeMission!" );
|
|
return;
|
|
}
|
|
|
|
%missionType = $HostTypeName[%missionTypeId];
|
|
if ( %missionType $= "" )
|
|
{
|
|
error( "Invalid mission type id passed to DefaultGame::voteChangeMission!" );
|
|
return;
|
|
}
|
|
|
|
// Eolk - Part of $admincl fix.
|
|
if(isObject(%admin))
|
|
{
|
|
messageAll('MsgAdminChangeMission', '\c2The Admin %3 has changed the mission to %1 (%2).', %missionDisplayName, %typeDisplayName, %admin.name );
|
|
$voteNext = 0;
|
|
%game.gameOver();
|
|
loadMission( %mission, %missionType, false );
|
|
adminLog(%admin, " has changed the mission to " @ %missionDisplayName @ " (" @ %typeDisplayName @ ")");
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
messageAll('MsgVotePassed', '\c2The mission was changed to %1 (%2) by vote.', %missionDisplayName, %typeDisplayName );
|
|
|
|
//Log Vote % - Must be before Game Over
|
|
%key = "Passed";
|
|
votePercentLog(%missionDisplayName, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
|
|
$voteNext = 0;
|
|
%game.gameOver();
|
|
loadMission( %mission, %missionType, false );
|
|
}
|
|
else
|
|
{
|
|
messageAll('MsgVoteFailed', '\c2Change mission vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
|
|
//Log Vote %
|
|
%key = "Failed";
|
|
votePercentLog(%missionDisplayName, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
function DefaultGame::voteTournamentMode( %game, %admin, %missionDisplayName, %typeDisplayName, %missionId, %missionTypeId )
|
|
{
|
|
%typeName = "VoteTournamentMode";
|
|
|
|
%mission = $HostMissionFile[%missionId];
|
|
if ( %mission $= "" )
|
|
{
|
|
error( "Invalid mission index passed to DefaultGame::voteTournamentMode!" );
|
|
return;
|
|
}
|
|
|
|
%missionType = $HostTypeName[%missionTypeId];
|
|
if ( %missionType $= "" )
|
|
{
|
|
error( "Invalid mission type id passed to DefaultGame::voteTournamentMode!" );
|
|
return;
|
|
}
|
|
|
|
%cause = "";
|
|
if (isObject(%admin))
|
|
{
|
|
messageAll( 'MsgAdminForce', '\c2The Admin %2 has switched the server to Tournament mode (%1).', %missionDisplayName, %admin.name );
|
|
adminLog(%admin, " has switched the server to Tournament mode. " @ %missionDisplayName @ " (" @ %typeDisplayName @ ")");
|
|
setModeTournament( %mission, %missionType );
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
messageAll('MsgVotePassed', '\c2Server switched to Tournament mode by vote (%1): %2 percent.', %missionDisplayName, mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
|
|
//Log Vote % - Must be before Game Over
|
|
%key = "Passed";
|
|
votePercentLog(%missionDisplayName, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
|
|
setModeTournament( %mission, %missionType );
|
|
}
|
|
else
|
|
{
|
|
//Log Vote %
|
|
%key = "Failed";
|
|
votePercentLog(%missionDisplayName, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
|
|
messageAll('MsgVoteFailed', '\c2Tournament mode vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
}
|
|
}
|
|
|
|
if(%cause !$= "")
|
|
logEcho($AdminCl.nameBase @ ": tournament mode set "@%cause, 1);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
function DefaultGame::voteChangeTimeLimit( %game, %admin, %newLimit )
|
|
{
|
|
%typeName = "VoteChangeTimeLimit";
|
|
|
|
if( %newLimit == 999 )
|
|
%display = "unlimited";
|
|
else
|
|
%display = %newLimit;
|
|
|
|
%cause = "";
|
|
if ( %admin )
|
|
{
|
|
messageAll( 'MsgAdminForce', '\c2The Admin %2 changed the mission time limit to %1 minutes.', %display, %admin.name );
|
|
$Host::TimeLimit = %newLimit;
|
|
adminLog(%admin, " has changed the mission time limit to " @ %display @ " minutes.");
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
messageAll('MsgVotePassed', '\c2The mission time limit was set to %1 minutes by vote.', %display);
|
|
$Host::TimeLimit = %newLimit;
|
|
// VoteOvertime
|
|
ResetVOTimeChanged(%game);
|
|
// Reset the voted time limit when changing mission
|
|
$TimeLimitChanged = 1;
|
|
|
|
//Log Vote %
|
|
%key = "Passed";
|
|
votePercentLog(%newLimit, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
}
|
|
else
|
|
{
|
|
messageAll('MsgVoteFailed', '\c2The vote to change the mission time limit did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
|
|
//Log Vote %
|
|
%key = "Failed";
|
|
votePercentLog(%newLimit, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
|
|
// VoteOvertime
|
|
ResetVOall(%game);
|
|
}
|
|
}
|
|
|
|
//if the match has been started, reset the end of match countdown
|
|
if ($matchStarted)
|
|
{
|
|
//schedule the end of match countdown
|
|
%elapsedTimeMS = getSimTime() - $missionStartTime;
|
|
%curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) - %elapsedTimeMS;
|
|
error("time limit="@$Host::TimeLimit@", elapsed="@(%elapsedTimeMS / 60000)@", curtimeleftms="@%curTimeLeftMS);
|
|
CancelEndCountdown();
|
|
EndCountdown(%curTimeLeftMS);
|
|
cancel(%game.timeSync);
|
|
%game.checkTimeLimit(true);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
function DefaultGame::voteFFAMode( %game, %admin, %client )
|
|
{
|
|
%cause = "";
|
|
%name = getTaggedString(%client.name);
|
|
|
|
if(isObject(%admin))
|
|
{
|
|
messageAll('MsgAdminForce', '\c2The Admin %1 has switched the server to Free For All mode.', %admin.name);
|
|
adminLog(%admin, " has switched the server to Free For All mode.");
|
|
setModeFFA($CurrentMission, $CurrentMissionType);
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
messageAll('MsgVotePassed', '\c2Server switched to Free For All mode by vote.', %client);
|
|
setModeFFA($CurrentMission, $CurrentMissionType);
|
|
}
|
|
else
|
|
messageAll('MsgVoteFailed', '\c2Free For All mode vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
}
|
|
}
|
|
|
|
function DefaultGame::voteSkipMission(%game, %admin, %arg1, %arg2, %arg3, %arg4)
|
|
{
|
|
%typeName = "VoteSkipMission";
|
|
|
|
if(isObject(%admin))
|
|
{
|
|
messageAll('MsgAdminForce', '\c2The Admin %1 has skipped to the next mission.',%admin.name );
|
|
adminLog(%admin, " has skipped to the next mission.");
|
|
%game.gameOver();
|
|
//loadMission( findNextCycleMission(), $CurrentMissionType, false );
|
|
cycleMissions();
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
messageAll('MsgVotePassed', '\c2The mission was skipped to next by vote.');
|
|
|
|
//Log Vote % - Must be before Game Over
|
|
%key = "Passed";
|
|
votePercentLog("N/A", %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
|
|
echo("mission skipped (vote)");
|
|
%game.gameOver();
|
|
//loadMission( findNextCycleMission(), $CurrentMissionType, false );
|
|
cycleMissions();
|
|
}
|
|
else
|
|
{
|
|
messageAll('MsgVoteFailed', '\c2Skip mission vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
|
|
//Log Vote %
|
|
%key = "Failed";
|
|
votePercentLog("N/A", %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
function DefaultGame::voteMatchStart( %game, %admin)
|
|
{
|
|
%cause = "";
|
|
%ready = forceTourneyMatchStart();
|
|
if(isObject(%admin))
|
|
{
|
|
if(!%ready)
|
|
{
|
|
// z0dd - ZOD, 5/19/03. This was sending to %client, there is no %client declared, duh
|
|
messageClient( %admin, 'msgClient', '\c2No players are ready yet.');
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
messageAll('msgMissionStart', '\c2The admin %1 has forced the match to start.', %admin.name);
|
|
startTourneyCountdown();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!%ready)
|
|
{
|
|
messageAll( 'msgClient', '\c2Vote passed to start match, but no players are ready yet.');
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
messageAll('MsgVotePassed', '\c2The match has been started by vote: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
startTourneyCountdown();
|
|
}
|
|
else
|
|
messageAll('MsgVoteFailed', '\c2Start Match vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
function DefaultGame::voteTeamDamage(%game, %admin)
|
|
{
|
|
%setto = "";
|
|
%cause = "";
|
|
if(isObject(%admin))
|
|
{
|
|
if($teamDamage)
|
|
{
|
|
messageAll('MsgAdminForce', '\c2The Admin %1 has disabled team damage.', %admin.name);
|
|
$Host::TeamDamageOn = $TeamDamage = 0;
|
|
%setto = "disabled";
|
|
adminLog(%admin, " has disabled team damage.");
|
|
}
|
|
else
|
|
{
|
|
messageAll('MsgAdminForce', '\c2The Admin %1 has enabled team damage.', %admin.name);
|
|
$Host::TeamDamageOn = $TeamDamage = 1;
|
|
%setto = "enabled";
|
|
adminLog(%admin, " has enabled team damage.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
if($teamDamage)
|
|
{
|
|
messageAll('MsgVotePassed', '\c2Team damage was disabled by vote.');
|
|
$Host::TeamDamageOn = $TeamDamage = 0;
|
|
%setto = "disabled";
|
|
}
|
|
else
|
|
{
|
|
messageAll('MsgVotePassed', '\c2Team damage was enabled by vote.');
|
|
$Host::TeamDamageOn = $TeamDamage = 1;
|
|
%setto = "enabled";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if($teamDamage)
|
|
messageAll('MsgVoteFailed', '\c2Disable team damage vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
else
|
|
messageAll('MsgVoteFailed', '\c2Enable team damage vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
}
|
|
}
|
|
}
|
|
|
|
function DefaultGame::sendGamePlayerPopupMenu( %game, %client, %targetClient, %key )
|
|
{
|
|
if( !%targetClient.matchStartReady )
|
|
return;
|
|
|
|
%isAdmin = ( %client.isAdmin || %client.isSuperAdmin );
|
|
%isSuperAdmin = (%client.isSuperAdmin);
|
|
%isTargetSelf = ( %client == %targetClient );
|
|
%isTargetAdmin = ( %targetClient.isAdmin || %targetClient.isSuperAdmin );
|
|
%isTargetBot = %targetClient.isAIControlled();
|
|
%isTargetObserver = ( %targetClient.team == 0 );
|
|
%outrankTarget = false;
|
|
|
|
if ( %client.isSuperAdmin ) // z0dd - ZOD, 7/11/03. Super admins should outrank even themseleves.
|
|
%outrankTarget = 1; //!%targetClient.isSuperAdmin;
|
|
else if ( %client.isAdmin )
|
|
%outrankTarget = !%targetClient.isAdmin;
|
|
|
|
if( %client.isSuperAdmin && %targetClient.guid != 0 ) // z0dd - ZOD, 9/29/02. Removed T2 demo code from here
|
|
{
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "addAdmin", "", 'Add to Server Admin List', 10);
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "addSuperAdmin", "", 'Add to Server SuperAdmin List', 11);
|
|
}
|
|
|
|
//mute options
|
|
if ( !%isTargetSelf )
|
|
{
|
|
if ( %client.muted[%targetClient] )
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "MutePlayer", "", 'Unmute Text Chat', 1);
|
|
else
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "MutePlayer", "", 'Mute Text Chat', 1);
|
|
|
|
if ( !%isTargetBot && %client.canListenTo( %targetClient ) )
|
|
{
|
|
if ( %client.getListenState( %targetClient ) )
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ListenPlayer", "", 'Disable Voice Com', 9 );
|
|
else
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ListenPlayer", "", 'Enable Voice Com', 9 );
|
|
}
|
|
// ------------------------------------------
|
|
// z0dd - ZOD 4/4/02. Observe a specific player
|
|
if (%client.team == 0 && !%isTargetObserver)
|
|
messageClient(%client, 'MsgPlayerPopupItem', "", %key, "ObservePlayer", "", 'Observe Player', 12);
|
|
}
|
|
if( !%client.canVote && !%isAdmin )
|
|
return;
|
|
|
|
// regular vote options on players
|
|
if ( %game.scheduleVote $= "" && !%isAdmin && !%isTargetAdmin )
|
|
{
|
|
if ( $Host::allowAdminPlayerVotes && !%isTargetBot ) // z0dd - ZOD, 9/29/02. Removed T2 demo code from here
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "AdminPlayer", "", 'Vote to Make Admin', 2 );
|
|
|
|
if ( !%isTargetSelf )
|
|
{
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Vote to Kick', 3 );
|
|
}
|
|
}
|
|
// Admin only options on players:
|
|
else if ( %isAdmin ) // z0dd - ZOD, 9/29/02. Removed T2 demo code from here
|
|
{
|
|
if ( !%isTargetBot && !%isTargetAdmin && (%isSuperAdmin || %isAdmin && $Host::AllowAdmin2Admin))
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "AdminPlayer", "", 'Make Admin', 2 );
|
|
|
|
if ( !%isTargetSelf && %outrankTarget )
|
|
{
|
|
if(%isSuperAdmin || %isAdmin && $Host::AllowAdminKick)
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Kick', 3 );
|
|
|
|
if ( !%isTargetBot )
|
|
{
|
|
// ------------------------------------------------------------------------------------------------------
|
|
// z0dd - ZOD - Founder 7/13/03. Bunch of new admin features
|
|
messageClient(%client, 'MsgPlayerPopupItem', "", %key, "Warn", "", 'Warn player', 13);
|
|
if(%isTargetAdmin)
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "StripAdmin", "", 'Strip admin', 14 );
|
|
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "SendMessage", "", 'Send Private Message', 15 );
|
|
|
|
if ( %targetClient.isGagged )
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "UnGagPlayer", "", 'UnGag Player', 17);
|
|
else
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "GagPlayer", "", 'Gag Player', 17);
|
|
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "PrintClientInfo", "", 'Client Info', 16 ); // z0dd - ZOD - MeBad, 7/13/03. Send client information.
|
|
|
|
if( %client.isSuperAdmin )
|
|
{
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Ban', 4 );
|
|
|
|
if ( %targetClient.isFroze )
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ThawPlayer", "", 'Thaw Player', 18);
|
|
else
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "FreezePlayer", "", 'Freeze Player', 18);
|
|
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BootPlayer", "", 'Boot to the Rear', 19);
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ExplodePlayer", "", 'Explode Player', 20);
|
|
}
|
|
}
|
|
|
|
if ( !%isTargetObserver )
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ToObserver", "", 'Force observer', 5 );
|
|
}
|
|
if ( %isTargetSelf || %outrankTarget )
|
|
{
|
|
if(%isTargetAdmin)
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "StripAdmin", "", 'Strip admin', 14 );
|
|
|
|
if ( %game.numTeams > 1 )
|
|
{
|
|
if ( %isTargetObserver )
|
|
{
|
|
%action = %isTargetSelf ? "Join " : "Change to ";
|
|
%str1 = %action @ getTaggedString( %game.getTeamName(1) );
|
|
%str2 = %action @ getTaggedString( %game.getTeamName(2) );
|
|
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str1, 6 );
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str2, 7 );
|
|
}
|
|
else if( %isSuperAdmin || ($Host::AllowAdminSwitchTeams && %isAdmin) )
|
|
{
|
|
%changeTo = %targetClient.team == 1 ? 2 : 1;
|
|
%str = "Switch to " @ getTaggedString( %game.getTeamName(%changeTo) );
|
|
%caseId = 5 + %changeTo;
|
|
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str, %caseId );
|
|
}
|
|
|
|
// z0dd - ZOD, 7/11/03. Allow Super admins to force themselves to obs.
|
|
if( %isSuperAdmin )
|
|
{
|
|
if(%isTargetSelf && !%isTargetObserver)
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ToObserver", "", 'Force observer', 5 );
|
|
}
|
|
}
|
|
else if ( %isTargetObserver )
|
|
{
|
|
%str = %isTargetSelf ? 'Join the Game' : 'Add to Game';
|
|
messageClient( %client, 'MsgPlayerPopupItem', "", %key, "JoinGame", "", %str, 8 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function adminStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4)
|
|
{
|
|
if ( Game.scheduleVote !$= "" && Game.voteType $= %typeName )
|
|
{
|
|
messageAll('closeVoteHud', "");
|
|
cancel(Game.scheduleVote);
|
|
Game.scheduleVote = "";
|
|
|
|
// Eolk - Voting control variables
|
|
Game.votingArgs[typeName] = "";
|
|
Game.votingArgs[arg1] = "";
|
|
Game.votingArgs[arg2] = "";
|
|
Game.votingArgs[arg3] = "";
|
|
Game.votingArgs[arg4] = "";
|
|
}
|
|
Game.evalVote(%typeName, %client, %arg1, %arg2, %arg3, %arg4);
|
|
}
|
|
|
|
function serverCmdGetVoteMenu( %client, %key )
|
|
{
|
|
if (isObject( Game ) && !%client.lockVMenu)
|
|
Game.sendGameVoteMenu( %client, %key );
|
|
%client.lockVMenu = 0;
|
|
}
|
|
|
|
function CycleMissions()
|
|
{
|
|
if($voteNext)
|
|
{
|
|
%nextMission = $HostMissionFile[$voteNextMap];
|
|
%type = $HostTypeName[$voteNextType];
|
|
messageAll( 'MsgClient', 'Loading %1 (%2)...', %nextMission, $HostTypeDisplayName[$voteNextType] );
|
|
loadMission( %nextMission, %type );
|
|
$voteNextType = 0;
|
|
$voteNextMap = 0;
|
|
$voteNext = 0;
|
|
}
|
|
else
|
|
parent::CycleMissions();
|
|
}
|
|
|
|
//Reset Set next mission if everyone leaves
|
|
function GameConnection::onDrop(%client, %reason)
|
|
{
|
|
Parent::onDrop(%client, %reason);
|
|
|
|
//Reset SetNextMission
|
|
if($HostGamePlayerCount - $HostGameBotCount == 0 && $voteNext)
|
|
{
|
|
echo("No clients on the server. Set next mission reset...");
|
|
$voteNextType = 0;
|
|
$voteNextMap = 0;
|
|
$voteNext = 0;
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
// checkMapExist(%missionName, %missionType)
|
|
// Info: check if a map exist in the mission type
|
|
function checkMapExist(%missionName, %missionType)
|
|
{
|
|
// Find if the mission exists
|
|
for(%mis = 0; %mis < $HostMissionCount; %mis++)
|
|
if($HostMissionFile[%mis] $= %missionName)
|
|
break;
|
|
|
|
// Now find if the mission type exists
|
|
for(%type = 0; %type < $HostTypeCount; %type++)
|
|
if($HostTypeName[%type] $= %missionType)
|
|
break;
|
|
|
|
// Now find if the mission's index in the mission-type specific sub-list exists
|
|
for(%i = 0; %i < $HostMissionCount[%type]; %i++)
|
|
if($HostMission[%type, %i] == %mis)
|
|
break;
|
|
|
|
if($HostMission[%type, %i] !$= "")
|
|
return true; // valid map
|
|
else
|
|
return false; // invalid map
|
|
}
|
|
|
|
// passCurrentVote()
|
|
// Info: passes a vote that is running.
|
|
// Eolk - Removed *** classic admin stuff.
|
|
function passCurrentVote(%admin)
|
|
{
|
|
if(Game.scheduleVote !$= "")
|
|
{
|
|
messageAll('closeVoteHud', "");
|
|
cancel(Game.scheduleVote);
|
|
Game.scheduleVote = "";
|
|
Game.kickClient = "";
|
|
|
|
if(Game.votingArgs[typeName] $= "VoteKickPlayer") // special case here
|
|
{
|
|
Game.votesFor[Game.kickTeam] = ClientGroup.getCount() - $HostGameBotCount;
|
|
Game.votesAgainst[Game.kickTeam] = 0;
|
|
}
|
|
else
|
|
{
|
|
Game.totalVotesFor = ClientGroup.getCount() - $HostGameBotCount;
|
|
Game.totalVotesAgainst = 0;
|
|
}
|
|
|
|
Game.evalVote(Game.votingArgs[typeName], false, Game.votingArgs[arg1], Game.votingArgs[arg2], Game.votingArgs[arg3], Game.votingArgs[arg4]);
|
|
clearVotes();
|
|
|
|
//Stop vote chimes
|
|
for(%i = 0; %i < $Host::EnableVoteSoundReminders; %i++)
|
|
{
|
|
if(isEventPending(Game.voteReminder[%i]))
|
|
cancel(Game.voteReminder[%i]);
|
|
Game.voteReminder[%i] = "";
|
|
}
|
|
|
|
messageAll('MsgAdminForce', "\c2The Admin " @ getTaggedString(%admin.name) @ " has passed the vote.");
|
|
}
|
|
else
|
|
messageClient(%admin, "MsgClient", "\c2There is no vote to pass...");
|
|
}
|
|
|
|
// stopCurrentVote()
|
|
// Info: stop a vote that is still running
|
|
function stopCurrentVote(%admin)
|
|
{
|
|
if(Game.scheduleVote !$= "")
|
|
{
|
|
|
|
messageAll('closeVoteHud', "");
|
|
cancel(Game.scheduleVote);
|
|
Game.scheduleVote = "";
|
|
Game.kickClient = "";
|
|
clearVotes();
|
|
|
|
//Stop vote chimes
|
|
for(%i = 0; %i < $Host::EnableVoteSoundReminders; %i++)
|
|
{
|
|
if(isEventPending(Game.voteReminder[%i]))
|
|
cancel(Game.voteReminder[%i]);
|
|
Game.voteReminder[%i] = "";
|
|
}
|
|
|
|
messageAll('MsgAdminForce', "\c2The Admin " @ getTaggedString(%admin.name) @ " has cancelled the vote.");
|
|
}
|
|
else
|
|
messageClient(%admin, "MsgClient", "\c2There is no vote to stop...");
|
|
}
|
|
|
|
// calcVotes(%typeName, %arg1, %arg2, %arg3, %arg4)
|
|
// Info: fixed a bug that doesn't close properly the vote hud
|
|
function calcVotes(%typeName, %arg1, %arg2, %arg3, %arg4)
|
|
{
|
|
if(%typeName $= "voteMatchStart")
|
|
{
|
|
if(($MatchStarted || $countdownStarted) && Game.scheduleVote !$= "")
|
|
{
|
|
stopCurrentVote();
|
|
return;
|
|
}
|
|
}
|
|
|
|
for(%idx = 0; %idx < ClientGroup.getCount(); %idx++)
|
|
{
|
|
%cl = ClientGroup.getObject(%idx);
|
|
messageClient(%cl, 'closeVoteHud', "");
|
|
|
|
if(%cl.vote !$= "")
|
|
{
|
|
if(%cl.vote)
|
|
{
|
|
Game.votesFor[%cl.team]++;
|
|
Game.totalVotesFor++;
|
|
}
|
|
else
|
|
{
|
|
Game.votesAgainst[%cl.team]++;
|
|
Game.totalVotesAgainst++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Game.votesNone[%cl.team]++;
|
|
Game.totalVotesNone++;
|
|
}
|
|
}
|
|
|
|
if((Game.totalVotesFor + Game.totalVotesAgainst) >= mFloor(ClientGroup.getCount()/2))
|
|
Game.evalVote(%typeName, false, %arg1, %arg2, %arg3, %arg4);
|
|
else
|
|
messageAll('MsgVoteFailed', '\c2Vote minimum participation not reached. Total votes %1 out of %2 required.',(Game.totalVotesFor + Game.totalVotesAgainst),mFloor(ClientGroup.getCount()/2));
|
|
|
|
Game.scheduleVote = "";
|
|
Game.scheduleVoteArgs = "";
|
|
Game.kickClient = "";
|
|
clearVotes();
|
|
}
|
|
|
|
function messageAdmins(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
|
{
|
|
for(%i = 0; %i < ClientGroup.getCount(); %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.isAdmin)
|
|
messageClient(%cl, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
|
}
|
|
}
|
|
|
|
function resetViewSchedule(%client)
|
|
{
|
|
%client.cantView = false;
|
|
%client.schedViewRules = "";
|
|
}
|
|
|
|
// Prevent package from being activated if it is already
|
|
if (!isActivePackage(ExtraVoteMenu))
|
|
activatePackage(ExtraVoteMenu);
|
|
|
|
// Locked Teams code (Tournament Mode Only)
|
|
// Doesnt allow players Joining the server late to join teams when enable, disables when server if switched back to free for all mode
|
|
|
|
// Reset in MissionTypeOptions.cs
|
|
//
|
|
// if(isActivePackage(LockedTeams) && !$LockedTeams)
|
|
// deactivatePackage(LockedTeams);
|
|
|
|
package LockedTeams
|
|
{
|
|
|
|
function serverCmdClientJoinGame(%client)
|
|
{
|
|
if($LockedTeams)
|
|
{
|
|
messageClient( %client, '', "Teams are locked. Wait to be assigned a team." );
|
|
return;
|
|
}
|
|
Parent::serverCmdClientJoinGame(%client);
|
|
}
|
|
|
|
//exec("Scripts/autoexec/votemenu.cs");
|
|
function serverCmdClientPickedTeam(%client, %option)
|
|
{
|
|
if(!$Host::TournamentMode)
|
|
return;
|
|
|
|
//All roads lead to observer
|
|
if( isObject(%client.player) )
|
|
{
|
|
%client.player.scriptKill(0);
|
|
ClearBottomPrint(%client);
|
|
}
|
|
Game.forceObserver( %client, "playerChoose" );
|
|
%client.observerMode = "observer";
|
|
%client.notReady = false;
|
|
messageClient( %client, '', "Teams are locked. Wait to be assigned a team." );
|
|
return;
|
|
}
|
|
|
|
function serverCmdClientTeamChange(%client, %option)
|
|
{
|
|
if($LockedTeams)
|
|
{
|
|
messageClient( %client, '', "Teams are locked. Wait to be assigned a team." );
|
|
return;
|
|
}
|
|
Parent::serverCmdClientTeamChange(%client, %option);
|
|
}
|
|
|
|
//No Pick Team PopUp Box when LockedTeams is enabled
|
|
function serverCmdPlayContentSet( %client )
|
|
{
|
|
//nothing
|
|
}
|
|
|
|
};
|
|
|
|
// VoteSound Script
|
|
//
|
|
// Make a sound every so seconds to make sure everyone votes
|
|
//
|
|
// Enable or Disable VoteSound
|
|
// $Host::EnableVoteSoundReminders = 3;
|
|
// 3 for three reminder notifications
|
|
|
|
function VoteSound(%teamSpecific, %typename, %arg1, %arg2, %msg)
|
|
{
|
|
if(Game.scheduleVote !$= "" && $Host::EnableVoteSoundReminders > 0) //Game.scheduleVote !$= "" is if vote is active
|
|
{
|
|
%vip = "Vote in Progress:";
|
|
//%yn = "Press Insert for Yes or Delete for No.";
|
|
|
|
switch$(%typeName)
|
|
{
|
|
case "VoteKickPlayer":
|
|
if(%arg1.team != 0 && Game.numTeams > 1) //Not observer
|
|
{
|
|
for(%i = 0; %i < ClientGroup.getCount(); %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if (%cl.isAdmin == true)
|
|
{
|
|
if(%cl.team !$= %arg1.team) //Not on admins team
|
|
messageClient(%cl, '', '\c5[A]\c1%1 \c0To kick %2 on the other team.~wgui/objective_notification.wav', %vip, %arg1.name);
|
|
else //Is on admins team
|
|
messageClient(%cl, '', '\c1%1 \c0%2 %3~wgui/objective_notification.wav', %vip, %msg, %yn);
|
|
}
|
|
else if(%cl.team $= %arg1.team)
|
|
messageClient(%cl, '', '\c1%1 \c0%2 %3~wgui/objective_notification.wav', %vip, %msg, %yn);
|
|
}
|
|
}
|
|
else //is observer
|
|
messageAll('', '\c1%1 \c0%2 %3~wgui/objective_notification.wav', %vip, %msg, %yn);
|
|
echo(%vip SPC %msg);
|
|
default:
|
|
messageAll('', '\c1%1 \c0%2 %3~wgui/objective_notification.wav', %vip, %msg, %yn);
|
|
echo(%vip SPC %msg);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function DefaultGame::setNextMission(%game, %client, %map, %type, %mapIndex, %typeIndex)
|
|
{
|
|
if(%client.isAdmin || %client.isSuperAdmin)
|
|
{
|
|
$voteNext = 1;
|
|
$voteNextType = %typeIndex;
|
|
$voteNextMap = %mapIndex;
|
|
messageAll('MsgAdminChangeMission', '\c2The Admin %3 has set the next mission to %1 (%2).~wfx/misc/hunters_greed.wav', $HostMissionName[%mapIndex], $HostTypeDisplayName[%typeIndex], %client.name );
|
|
adminLog(%client, " has set the next mission to" SPC $HostMissionName[%mapIndex] @ "(" @ $HostTypeDisplayName[%typeIndex] @ ").");
|
|
}
|
|
else
|
|
{
|
|
%totalVotes = %game.totalVotesFor + %game.totalVotesAgainst;
|
|
// Added people who dont vote into the equation, now if you do not vote, it doesn't count as a no. - z0dd - ZOD
|
|
if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone)) > ($Host::VotePasspercent / 100))
|
|
{
|
|
$voteNext = 1;
|
|
$voteNextType = %typeIndex;
|
|
$voteNextMap = %mapIndex;
|
|
messageAll('MsgVotePassed', '\c2Next mission set to %1 (%2) by vote.', $HostMissionName[%mapIndex], $HostTypeDisplayName[%typeIndex]);
|
|
|
|
//Log Vote % - Must be before Game Over
|
|
%key = "Passed";
|
|
votePercentLog(%missionDisplayName, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
}
|
|
else
|
|
{
|
|
messageAll('MsgVoteFailed', '\c2Next mission vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount - %game.totalVotesNone) * 100));
|
|
//Log Vote %
|
|
%key = "Failed";
|
|
votePercentLog(%missionDisplayName, %typeName, %key, %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, %game.totalVotesNone);
|
|
//Show Vote %
|
|
messageAll('', '\c1Vote %6: \c0Yea: %1 Nay: %2 Abstain: %7 Total: %3 [%4%5]', %game.totalVotesFor, %game.totalVotesAgainst, %totalVotes, mfloor((%game.totalVotesFor/(ClientGroup.getCount() - %game.totalVotesNone)) * 100), "%", %key, %game.totalVotesNone);
|
|
}
|
|
}
|
|
}
|