if (! $VotingDone) { schedule( 30000, 0, "exec", "scripts/autoexec/voting.cs" ); $VotingDone = true; } //------------------------------------------------------------------------------ function DestroyServer() { $missionRunning = false; allowConnections(false); stopHeartbeat(); if(isObject($ServerGroup)) $ServerGroup.delete(); // delete all the connections: while(ClientGroup.getCount()) { %client = ClientGroup.getObject(0); if (%client.isAIControlled()) %client.drop(); else %client.delete(); } %HostGuidList = ""; // delete all the data blocks... // this will cause problems if there are any connections deleteDataBlocks(); // reset the target manager resetTargetManager(); echo( "exporting server prefs..." ); export( "$Host::*", "prefs/ServerPrefs.cs", false ); export( "$teamdamage", "prefs/ServerPrefs.cs", true ); purgeResources(); } //------------------------------------------------------------------------------ function StartHostedGame() { %selId = GMH_MissionList.getSelectedId(); %misFile = $HostMissionFile[%selId]; if ( $Host::BotsEnabled ) { validateMaxPlayers(); $HostGameBotCount = $Host::BotCount; } else $HostGameBotCount = 0; $ServerName = $Host::GameName; $Host::Map = %misFile; echo( "exporting server prefs..." ); export( "$Host::*", "prefs/ServerPrefs.cs", false ); export( "$teamdamage", "prefs/ServerPrefs.cs", true ); if ( $Host::Dedicated ) { MessageBoxYesNo( "WARNING", "You are about to launch a dedicated server and leave Tribes 2. Do you want to continue?", "tryToLaunchDedicatedServer();" ); return; } IRCClient::onJoinGame("", ""); MessagePopup( "STARTING SERVER", "Initializing..." ); Canvas.repaint(); setNetPort( $Host::Port ); CreateServer( $Host::Map, $Host::MissionType ); %playerPref = $pref::Player[$pref::Player::Current]; %playerName = getField( %playerPref, 0 ); %playerRaceGender = getField( %playerPref, 1 ); %playerSkin = getField( %playerPref, 2 ); %playerVoice = getField( %playerPref, 3 ); %playerVoicePitch = getField( %playerPref, 4 ); localConnect( %playerName, %playerRaceGender, %playerSkin, %playerVoice, %playerVoicePitch ); if(!$RecordDemo) { // demos are incompatible with local simulated net params ServerConnection.setSimulatedNetParams($pref::Net::simPacketLoss, $pref::net::simPing * 0.5); LocalClientConnection.setSimulatedNetParams($pref::Net::simPacketLoss, $pref::net::simPing * 0.5); } } //------------------------------------------------------------------------------ function DefaultGame::sendGameVoteMenu( %game, %client, %key ) { %multipleTeams = %game.numTeams > 1; // no one is going anywhere until this thing starts if($MatchStarted) { // Client options: if ( %client.team != 0 ) { if ( %multipleTeams ) if( !$Host::TournamentMode ) messageClient( %client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Change your Team' ); messageClient( %client, 'MsgVoteItem', "", %key, 'MakeObserver', "", 'Become an Observer' ); } else { if(!%multipleTeams && !$Host::TournamentMode) messageClient( %client, 'MsgVoteItem', "", %key, 'JoinGame', "", 'Join the Game' ); } //%totalSlots = $Host::maxPlayers - ($HostGamePlayerCount + $HostGameBotCount); // if( $HostGameBotCount > 0 && %totalSlots > 0 && %client.isAdmin) //messageClient( %client, 'MsgVoteItem', "", %key, 'Addbot', "", 'Add a Bot' ); } if ( %game.scheduleVote $= "" ) { if(!%client.isAdmin) { // Actual vote options: if ( $Host::allowMissionChangeVotes ) messageClient( %client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Vote to Change the Mission' ); if ( $Host::TournamentMode ) { messageClient( %client, 'MsgVoteItem', "", %key, 'VoteFFAMode', 'Change server to Free For All.', 'Vote Free For All Mode' ); if(!$MatchStarted && !$CountdownStarted) messageClient( %client, 'MsgVoteItem', "", %key, 'VoteMatchStart', 'Start Match', 'Vote to Start the Match' ); } else if ( $Host::allowTournamentVotes) messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'Change server to Tournament.', 'Vote Tournament Mode' ); if ( %multipleTeams ) { if(!$MatchStarted && !$Host::TournamentMode) messageClient( %client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Change your Team' ); if ( $Host::allowTeamDamageVotes) { 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 { // Actual vote options: messageClient( %client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Change the Mission' ); if( $Host::TournamentMode ) { messageClient( %client, 'MsgVoteItem', "", %key, 'VoteFFAMode', 'Change server to Free For All.', 'Free For All Mode' ); if(!$MatchStarted && !$CountdownStarted) messageClient( %client, 'MsgVoteItem', "", %key, 'VoteMatchStart', 'Start Match', 'Start Match' ); } else messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'Change server to Tournament.', 'Tournament Mode' ); if ( %multipleTeams ) { if(!$MatchStarted) messageClient( %client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Choose Team' ); 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' ); } } } // Admin only options: if ( %client.isAdmin ) { messageClient( %client, 'MsgVoteItem', "", %key, 'VoteChangeTimeLimit', 'change the time limit', 'Change the Time Limit' ); messageClient( %client, 'MsgVoteItem', "", %key, 'VoteResetServer', 'reset server defaults', 'Reset the Server' ); } } //------------------------------------------------------------------------------ function AdvancedHostDlg::onWake( %this ) { // Set all of the controls to the current pref states: AH_HostPort.setText( $Host::Port ); AH_DedicatedTgl.setValue( $Host::Dedicated ); AH_TournamentTgl.setValue( $Host::TournamentMode ); AH_AdminVoteTgl.setValue( $Host::allowAdminPlayerVotes ); AH_BanVoteTgl.setValue( $Host::allowBanPlayerVotes ); AH_KickVoteTgl.setValue( $Host::allowKickPlayerVotes ); AH_AllowSmurfTgl.setValue( !$Host::NoSmurfs ); AH_TimeLimit.setText( $Host::TimeLimit ); AH_AdminPassword.setText( $Host::AdminPassword ); AH_ServerInfo.setText( $Host::Info ); AH_VotePassSlider.setValue( $Host::VotePassPercent ); AH_VoteTimeSlider.setValue( $Host::VoteTime ); AH_RespawnSlider.setValue( $Host::PlayerRespawnTimeout ); AH_WarmupSlider.setValue( $Host::WarmupTime ); AH_TeamDamageTgl.setValue( $teamdamage ); AH_TournamentVoteTgl.setValue( $Host::allowTournamentVotes ); AH_TeamDamageVoteTgl.setValue( $Host::allowTeamDamageVotes ); AH_MissionVoteTgl.setValue( $Host::allowMissionChangeVotes ); } //------------------------------------------------------------------------------ function AdvancedHostDlg::accept( %this ) { // Apply all of the changes: $Host::Port = AH_HostPort.getValue(); $Host::Dedicated = AH_DedicatedTgl.getValue(); $Host::TournamentMode = AH_TournamentTgl.getValue(); $Host::allowAdminPlayerVotes = AH_AdminVoteTgl.getValue(); $Host::allowBanPlayerVotes = AH_BanVoteTgl.getValue(); $Host::allowKickPlayerVotes = AH_KickVoteTgl.getValue(); $Host::NoSmurfs = !AH_AllowSmurfTgl.getValue(); $Host::TimeLimit = AH_TimeLimit.getValue(); $Host::AdminPassword = AH_AdminPassword.getValue(); $Host::Info = AH_ServerInfo.getText(); $Host::VotePassPercent = mFloor( AH_VotePassSlider.getValue() ); $Host::VoteTime = mFloor( AH_VoteTimeSlider.getValue() ); $Host::PlayerRespawnTimeout = mFloor( AH_RespawnSlider.getValue() ); $Host::WarmupTime = mFloor( AH_WarmupSlider.getValue() ); $Host::allowTournamentVotes = AH_TournamentVoteTgl.getValue(); $Host::allowTeamDamageVotes = AH_TeamDamageVoteTgl.getValue(); $Host::allowMissionChangeVotes = AH_MissionVoteTgl.getValue(); $teamdamage = AH_TeamDamageTgl.getValue(); // Save off the new prefs: export( "$Host::*", "prefs/ServerPrefs.cs", false ); export( "$teamdamage", "prefs/ServerPrefs.cs", true ); Canvas.popDialog( AdvancedHostDlg ); } //------------------------------------------------------------------------------ // Voting stuff: //------------------------------------------------------------------------------ function DefaultGame::sendGamePlayerPopupMenu( %game, %client, %targetClient, %key ) { %isAdmin = ( %client.isAdmin || %client.isSuperAdmin ); %isTargetSelf = ( %client == %targetClient ); %isTargetAdmin = ( %targetClient.isAdmin || %targetClient.isSuperAdmin ); %isTargetBot = %targetClient.isAIControlled(); %isTargetObserver = ( %targetClient.team == 0 ); %outrankTarget = false; if ( %client.isSuperAdmin ) %outrankTarget = !%targetClient.isSuperAdmin; else if ( %client.isAdmin ) %outrankTarget = !%targetClient.isAdmin; if( ! %targetClient.matchStartReady ) return; //mute options if ( !%isTargetSelf ) { if ( %client.muted[%targetClient] ) messageClient( %client, 'MsgPlayerPopupItem', "", %key, "MutePlayer", "", 'Unmute', 1); else messageClient( %client, 'MsgPlayerPopupItem', "", %key, "MutePlayer", "", 'Mute', 1); //if ( !%isTargetBot ) 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 ); } } // regular vote options on players if ( %game.scheduleVote $= "" && !%isAdmin && !%isTargetAdmin ) { if ( $Host::allowAdminPlayerVotes && !%isTargetBot ) messageClient( %client, 'MsgPlayerPopupItem', "", %key, "AdminPlayer", "", 'Vote to Make Admin', 2 ); if ( $Host::allowKickPlayerVotes && !%isTargetSelf ) { messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Vote to Kick', 3 ); if ( $Host::allowBanPlayerVotes && !%isTargetBot ) messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Vote to Ban', 4 ); } } // Admin only options on players: else if ( %isAdmin ) { if ( !%isTargetBot && !%isTargetAdmin ) messageClient( %client, 'MsgPlayerPopupItem', "", %key, "AdminPlayer", "", 'Make Admin', 2 ); if ( !%isTargetSelf && %outrankTarget ) { messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Kick', 3 ); if ( !%isTargetBot ) { messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Ban', 4 ); if ( !%isTargetObserver ) messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ToObserver", "", 'Force observer', 5 ); } } if ( %isTargetSelf || %outrankTarget ) { if ( %game.numTeams > 1 ) { if ( %isTargetObserver ) { %action = %isTargetSelf ? "Join " : "Change to "; %str1 = %action @ getTaggedString( $TeamName[1] ); %str2 = %action @ getTaggedString( $TeamName[2] ); messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str1, 6 ); messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str2, 7 ); } else { %changeTo = %targetClient.team == 1 ? 2 : 1; %str = "Switch to " @ getTaggedString( $TeamName[%changeTo] ); %caseId = 5 + %changeTo; messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str, %caseId ); } } else if ( %isTargetObserver ) { %str = %isTargetSelf ? 'Join the Game' : 'Add to Game'; messageClient( %client, 'MsgPlayerPopupItem', "", %key, "JoinGame", "", %str, 8 ); } } } }