mirror of
https://github.com/Ragora/T2-ACCM.git
synced 2026-01-20 03:14:44 +00:00
890 lines
37 KiB
C#
890 lines
37 KiB
C#
// These have been secured against all those wanna-be-hackers.
|
|
$VoteMessage["VoteAdminPlayer"] = "Admin Player";
|
|
$VoteMessage["VoteKickPlayer"] = "Kick Player";
|
|
$VoteMessage["BanPlayer"] = "Ban Player";
|
|
$VoteMessage["VoteChangeMission"] = "change the mission to";
|
|
$VoteMessage["VoteTeamDamage", 0] = "enable team damage";
|
|
$VoteMessage["VoteTeamDamage", 1] = "disable team damage";
|
|
$VoteMessage["VoteTournamentMode"] = "change the server to";
|
|
$VoteMessage["VoteFFAMode"] = "change the server to";
|
|
$VoteMessage["VoteChangeTimeLimit"] = "change the time limit to";
|
|
$VoteMessage["VoteMatchStart"] = "start the match";
|
|
$VoteMessage["VoteGreedMode", 0] = "enable Hoard Mode";
|
|
$VoteMessage["VoteGreedMode", 1] = "disable Hoard Mode";
|
|
$VoteMessage["VoteHoardMode", 0] = "enable Greed Mode";
|
|
$VoteMessage["VoteHoardMode", 1] = "disable Greed Mode";
|
|
$VoteMessage["VotePurebuild", 0] = "enable pure building";
|
|
$VoteMessage["VotePurebuild", 1] = "disable pure building";
|
|
$VoteMessage["VoteCascadeMode", 0] = "enable cascade mode";
|
|
$VoteMessage["VoteCascadeMode", 1] = "disable cascade mode";
|
|
$VoteMessage["VoteExpertMode", 0] = "enable expert mode";
|
|
$VoteMessage["VoteExpertMode", 1] = "disable expert mode";
|
|
$VoteMessage["VoteVehicles", 0] = "enable vehicles";
|
|
$VoteMessage["VoteVehicles", 1] = "disable vehicles";
|
|
$VoteMessage["VoteSatchelCharge", 0] = "enable satchel charges";
|
|
$VoteMessage["VoteSatchelCharge", 1] = "disable satchel charges";
|
|
$VoteMessage["VoteOnlyOwnerDeconstruct", 0] = "enable only owner deconstruct";
|
|
$VoteMessage["VoteOnlyOwnerDeconstruct", 1] = "disable only owner deconstruct";
|
|
$VoteMessage["VoteOnlyOwnerCascade", 0] = "enable only owner cascade";
|
|
$VoteMessage["VoteOnlyOwnerCascade", 1] = "disable only owner cascade";
|
|
$VoteMessage["VoteOnlyOwnerRotate", 0] = "enable only owner rotate";
|
|
$VoteMessage["VoteOnlyOwnerRotate", 1] = "disable only owner rotate";
|
|
$VoteMessage["VoteOnlyOwnerCubicReplace", 0] = "enable only owner cubic-replace";
|
|
$VoteMessage["VoteOnlyOwnerCubicReplace", 1] = "disable only owner cubic-replace";
|
|
$VoteMessage["VoteInvincibleArmors", 0] = "enable invincible armors";
|
|
$VoteMessage["VoteInvincibleArmors", 1] = "disable invincible armors";
|
|
$VoteMessage["VoteInvincibleDeployables", 0] = "enable invincible deployables";
|
|
$VoteMessage["VoteInvincibleDeployables", 1] = "disable invincible deployables";
|
|
$VoteMessage["VoteUndergroundMode", 0] = "enable underground mode";
|
|
$VoteMessage["VoteUndergroundMode", 1] = "disable underground mode";
|
|
$VoteMessage["VoteHazardMode", 0] = "enable hazard mode";
|
|
$VoteMessage["VoteHazardMode", 1] = "disable hazard mode";
|
|
$VoteMessage["VoteRemoveDeployables"] = "remove all deployables in mission";
|
|
$VoteMessage["VoteGlobalPowerCheck"] = "remove all duplicate deployables";
|
|
$VoteMessage["VoteRemoveDupDeployables"] = "remove all duplicate deployables";
|
|
$VoteMessage["VoteRemoveNonPoweredDeployables"] = "remove all deployables without power";
|
|
$VoteMessage["VoteRemoveOrphanedDeployables"] = "remove all orphaned deployables";
|
|
$VoteMessage["VotePrison", 0] = "enable prison";
|
|
$VoteMessage["VotePrison", 1] = "disable prison";
|
|
$VoteMessage["VotePrisonKilling", 0] = "enable jailing killers";
|
|
$VoteMessage["VotePrisonKilling", 1] = "disable jailing killers";
|
|
$VoteMessage["VotePrisonTeamKilling", 0] = "enable jailing team killers";
|
|
$VoteMessage["VotePrisonTeamKilling", 1] = "disable jailing team killers";
|
|
$VoteMessage["VotePrisonDeploySpam", 0] = "enable jailing deploy spammers";
|
|
$VoteMessage["VotePrisonDeploySpam", 1] = "disable jailing deploy spammers";
|
|
$VoteMessage["VoteMakeKeeper"] = "give Zombie Keeper abilities to";
|
|
$VoteMessage["VoteMakeNotKeeper"] = "remove Zombie Keeper abilities from";
|
|
$VoteMessage["VoteLoadBuilding"] = "load his";
|
|
$VoteMessage["CancelVote"] = "cancel vote";
|
|
$VoteMessage["PassVote"] = "pass vote";
|
|
// End JTL
|
|
|
|
function serverCmdStartNewVote(%client, %typeName, %arg1, %arg2, %arg3, %arg4, %playerVote)
|
|
{
|
|
//DEMO VERSION - only voteKickPlayer is allowed
|
|
if ((isDemo()) && %typeName !$= "VoteKickPlayer")
|
|
{
|
|
messageClient(%client, '', "All voting options except to kick a player are disabled in the DEMO VERSION.");
|
|
return;
|
|
}
|
|
|
|
if($Host::ClientSaving)
|
|
{
|
|
if(%typeName $= "StartBuildingManager")
|
|
{
|
|
%client.BuildingManagerMode = 1;
|
|
return;
|
|
}
|
|
if(%typeName $= "SavePieces")
|
|
{
|
|
%client.BuildingManagerMode = 2;
|
|
%client.BuildingManagerSubMode = 1;
|
|
return;
|
|
}
|
|
else if(%typeName $= "LoadPieces")
|
|
{
|
|
%client.BuildingManagerMode = 2;
|
|
%client.BuildingManagerSubMode = 2;
|
|
return;
|
|
}
|
|
else if(%typeName $= "RenamePieces")
|
|
{
|
|
%client.BuildingManagerMode = 2;
|
|
%client.BuildingManagerSubMode = 3;
|
|
return;
|
|
}
|
|
else if(%typeName $= "DeletePieces")
|
|
{
|
|
%client.BuildingManagerMode = 2;
|
|
%client.BuildingManagerSubMode = 4;
|
|
return;
|
|
}
|
|
else if(%typeName $= "GoBackPiece")
|
|
{
|
|
%client.BuildingManagerMode--;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
else if(strstr(%typeName, "BSel-") == 0)
|
|
{
|
|
if(%client.isRenaming)
|
|
{
|
|
messageClient(%sender, "", "\c2You must finish renaming before continuing. ~wfx/misc/misc.error.wav");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
if(%client.BuildingManagerSubMode == 1) // Saving.
|
|
{
|
|
if(%client.saveTimeout > 1)
|
|
{
|
|
messageClient(%client, "", "\c2Cannot save. You must wait\c3 "@%client.saveTimeout@" \c2more seconds before you are able to save again.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
%count = 0;
|
|
%path = "Buildings/ClientSaves/"@%client.guid@"/";
|
|
%dummy = "Buildings/ClientSaves/"@%client.guid@"/*";
|
|
for(%i = findFirstFile(%dummy); %i !$= ""; %i = findNextFile(%dummy))
|
|
{
|
|
%count++;
|
|
}
|
|
|
|
if(%count > $Host::MaxClientSaves)
|
|
{
|
|
messageClient(%client, "", "\c2Too many saves. You must either delete a few saves or overwrite them.");
|
|
return;
|
|
}
|
|
|
|
%name = getsubstr(%typeName, 5, 255);
|
|
if(%name $= "(empty)")
|
|
%name = "ClientSave"@(%count+1)@".cs";
|
|
|
|
%grp = nameToID("MissionCleanup/Deployables");
|
|
if(!isObject(%grp))
|
|
{
|
|
messageClient(%client, "", "\c2There is nothing to save.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
%buildingcount = 0;
|
|
for(%g = 0; %g < %grp.getCount(); %g++)
|
|
{
|
|
%d = %grp.getObject(%g);
|
|
if(%d.getOwner() == %client)
|
|
%buildingcount++;
|
|
}
|
|
|
|
if(%buildingcount == 0)
|
|
{
|
|
messageClient(%client, "", "\c2There is nothing to save.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
messageAll('MsgAdminForce', "\c3"@%client.nameBase@" \c2is saving "@(%client.sex $= "Male" ? "his" : "her")@" pieces.");
|
|
%obj = new FileObject();
|
|
%obj.openforwrite(%path @ %name);
|
|
%obj.writeLine("// Saved by \"" @ getField(%client.nameBase, 0) @ "\"");
|
|
%obj.writeLine("// Created in mission \"" @ $MissionName @ "\"");
|
|
%obj.writeLine("// Construction " @ $ModVersion);
|
|
%obj.writeLine("// Piece Count for this save is "@%buildingcount@" pieces");
|
|
%obj.writeLine("");
|
|
|
|
for(%x = 0; %x < %grp.getCount(); %x++)
|
|
{
|
|
%deployable = %grp.getObject(%x);
|
|
if(%deployable.getOwner() == %client)
|
|
{
|
|
%towrite = writeBuildingComponent(%deployable);
|
|
if(%towrite !$= "")
|
|
%obj.writeline(%towrite);
|
|
}
|
|
}
|
|
|
|
%obj.close();
|
|
%obj.delete();
|
|
messageClient(%client, "", "\c2Building saved to file:\c3 "@%path @ %name@"");
|
|
%client.saveTimeout = 60;
|
|
%client.saveTimeoutSchedule = schedule(1000, 0, "ClearSaveTimeout", %client);
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
else if(%client.BuildingManagerSubMode == 2) // Loading.
|
|
{
|
|
if(%client.loadTimeout > 1)
|
|
{
|
|
messageClient(%client, "", "\c2Cannot load. You must wait\c3 "@%client.loadTimeout@" \c2more seconds before you are able to load again.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
// First, count up all of the pieces.
|
|
%grp = nameToID("MissionCleanup/Deployables");
|
|
%name = getsubstr(%typeName, 5, 255);
|
|
%path = "Buildings/ClientSaves/"@%client.guid@"/"@%name;
|
|
if(!isFile(%path))
|
|
{
|
|
messageClient(%client, "", "\c2You cannot load an empty file.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
%piececount = 0;
|
|
%clpiececount = 0;
|
|
|
|
%tmp = new FileObject();
|
|
%tmp.openforread(%path);
|
|
while(!%tmp.isEOF())
|
|
{
|
|
%line = %tmp.readline();
|
|
if(strstr(%line, "// Piece Count for this save is ") != -1)
|
|
{
|
|
%newstring = getsubstr(%line, 32, 255);
|
|
%clpiececount = getword(%newstring, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
%piececount = Deployables.getCount();
|
|
|
|
if(((%clpiececount + %piececount) > $Host::MaxPieceVote) && ((ClientGroup.getCount() - $HostGameBotCount) > 1))
|
|
serverCmdStartNewVote(%client, "VoteLoadBuilding", %clpiececount@ " \c2piece building", "leaving\c3 "@1024 - (%clpiececount + %piececount)@" \c2pieces left", %path, %client, 0);
|
|
else
|
|
{
|
|
messageAll("", "\c3"@%client.nameBase@" \c2is loading "@(%client.sex $= "Male" ? "his" : "her")@"\c3 "@%clpiececount@" \c2piece building. Power has been evaluated and duplicates have been removed.");
|
|
|
|
compile(%path);
|
|
exec(%path);
|
|
Game.removeDepTime = getSimTime() + delDupPieces(0,0,true) + 1000;
|
|
globalPowerCheck();
|
|
}
|
|
|
|
%client.loadTimeout = 60;
|
|
%client.loadTimeoutSchedule = schedule(1000, 0, "ClearLoadTimeout", %client);
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
else if(%client.BuildingManagerSubMode == 3) // Renaming.
|
|
{
|
|
if(%client.isRenaming)
|
|
{
|
|
messageClient(%client, "", "\c2You are already renaming another file. Type\c3 cancel \c2in order to cancel the rename.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
|
|
%name = getsubstr(%typeName, 5, 255);
|
|
%path = "Buildings/ClientSaves/"@%client.guid@"/"@%name;
|
|
|
|
if(!isFile(%path))
|
|
{
|
|
messageClient(%client, "", "\c2Cannot rename an empty file.");
|
|
return;
|
|
}
|
|
|
|
%client.isRenaming = 1;
|
|
%client.renameFile = %path;
|
|
messageClient(%client, "", "\c2The next message you type will rename the file. Type\c3 cancel \c2in order to cancel the operation.");
|
|
messageClient(%client, "", "\c2Note that you must add\c3 .cs \c2at the end of the new name in order for the save to work correctly.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
else if(%client.BuildingManagerSubMode == 4) // Deleting.
|
|
{
|
|
%name = getsubstr(%typeName, 5, 255);
|
|
%path = "Buildings/ClientSaves/"@%client.guid@"/"@%name;
|
|
if(!isFile(%path))
|
|
{
|
|
messageClient(%client, "", "\c2Cannot delete an empty file.");
|
|
return;
|
|
}
|
|
|
|
deleteFile(%path);
|
|
messageClient(%client, "", "\c2The save file\c3 "@%name@" \c2has been deleted.");
|
|
%client.BuildingManagerMode = 0;
|
|
%client.BuildingManagerSubMode = 0;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if( %typeName $= "VoteMakeKeeper" && (!$Host::AllowKeeperPlayerVotes && !%client.isSuperAdmin))
|
|
return;
|
|
|
|
if( (!%client.isAdmin) && (%typeName !$= "VoteKickPlayer" && %typeName !$= "VoteAdminPlayer" && %typeName !$= "VoteMakeNotKeeper" && %typeName !$= "VoteMakeKeeper" && %typeName !$= "VoteChangeMission" && %typeName !$= "VoteTeamDamage" && %typeName !$= "VoteChangeTimeLimit" && %typeName !$= "VotePurebuild" && %typeName !$= "VoteExpertMode" && %typeName !$= "VoteRemoveOrphanedDeployables" && %typeName !$= "VoteTournamentMode" && %typeName !$= "VoteFFAMode" && %typeName !$= "VoteLoadBuilding"))
|
|
{
|
|
messageClient(%client, "", "\c2Your vote request was rejected.");
|
|
return;
|
|
}
|
|
|
|
%typePass = true;
|
|
|
|
// if not a valid vote, turn back.
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteTeamDamage" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteHoardMode" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteGreedMode" )
|
|
// JTL
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VotePurebuild" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteCascadeMode" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteExpertMode" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteVehicles" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteSatchelCharge" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteOnlyOwnerDeconstruct" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteOnlyOwnerCascade" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteOnlyOwnerRotate" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteOnlyOwnerCubicReplace" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteRemoveDeployables" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteGlobalPowerCheck" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteRemoveDupDeployables" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteRemoveNonPoweredDeployables" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteRemoveOrphanedDeployables" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteInvincibleArmors" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteInvincibleDeployables" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteUndergroundMode" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteHazardMode" )
|
|
// if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VoteMTCMode" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VotePrison" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VotePrisonKilling" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VotePrisonTeamKilling" )
|
|
if( $VoteMessage[ %typeName ] $= "" && %typeName !$= "VotePrisonDeploySpam" )
|
|
%typePass = false;
|
|
// End JTL
|
|
|
|
if(( $VoteMessage[ %typeName, $TeamDamage ] $= "" && %typeName $= "VoteTeamDamage" ))
|
|
%typePass = false;
|
|
// JTL
|
|
if(( $VoteMessage[ %typeName, $Host::Purebuild ] $= "" && %typeName $= "VotePurebuild" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Cascade ] $= "" && %typeName $= "VoteCascadeMode" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::ExpertMode ] $= "" && %typeName $= "VoteExpertMode" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Vehicles ] $= "" && %typeName $= "VoteVehicles" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::SatchelChargeEnabled ] $= "" && %typeName $= "VoteSatchelCharge" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::OnlyOwnerDeconstruct ] $= "" && %typeName $= "VoteOnlyOwnerDeconstruct" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::OnlyOwnerCascade ] $= "" && %typeName $= "VoteOnlyOwnerCascade" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::OnlyOwnerRotate ] $= "" && %typeName $= "VoteOnlyOwnerRotate" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::OnlyOwnerCubicReplace ] $= "" && %typeName $= "VoteOnlyOwnerCubicReplace" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::InvincibleArmors ] $= "" && %typeName $= "VoteInvincibleArmors" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::InvincibleDeployables ] $= "" && %typeName $= "VoteInvincibleDeployables" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::AllowUnderground ] $= "" && %typeName $= "VoteUndergroundMode" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Hazard::Enabled ] $= "" && %typeName $= "VoteHazardMode" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Prison::Enabled ] $= "" && %typeName $= "VotePrison" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Prison::Kill ] $= "" && %typeName $= "VotePrisonKilling" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Prison::TeamKill ] $= "" && %typeName $= "VotePrisonTeamKilling" ))
|
|
%typePass = false;
|
|
if(( $VoteMessage[ %typeName, $Host::Prison::DeploySpam ] $= "" && %typeName $= "VotePrisonDeploySpam" ))
|
|
%typePass = false;
|
|
// End JTL
|
|
|
|
if( !%typePass )
|
|
return; // -> bye ;)
|
|
|
|
// z0dd - ZOD, 10/03/02. This was busted, BanPlayer was never delt with.
|
|
if( %typeName $= "BanPlayer" )
|
|
{
|
|
if( !%client.isSuperAdmin || %arg1.isAdmin )
|
|
{
|
|
return; // -> bye ;)
|
|
}
|
|
else
|
|
{
|
|
ban( %arg1, %client );
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(%typeName $= "CancelVote")
|
|
{
|
|
if(!%client.isAdmin)
|
|
return;
|
|
|
|
ccCancelVote(%client);
|
|
return;
|
|
}
|
|
|
|
if(%typeName $= "PassVote")
|
|
{
|
|
if(!%client.isAdmin)
|
|
return;
|
|
|
|
ccPassVote(%client);
|
|
return;
|
|
}
|
|
|
|
%isAdmin = ( %client.isAdmin || %client.isSuperAdmin );
|
|
|
|
// JTL
|
|
if(%typeName $= "VoteVehicles" && !%isAdmin)
|
|
if(%typeName $= "VoteVehicles" && !%isAdmin)
|
|
if(%typeName $= "VoteSatchelCharge" && !%isAdmin)
|
|
if(%typeName $= "VoteOnlyOwnerDeconstruct" && !%isAdmin)
|
|
if(%typeName $= "VoteOnlyOwnerCascade" && !%isAdmin)
|
|
if(%typeName $= "VoteOnlyOwnerRotate" && !%isAdmin)
|
|
if(%typeName $= "VoteOnlyOwnerCubicReplace" && !%isAdmin)
|
|
if(%typeName $= "VoteRemoveDeployables" && !%isAdmin)
|
|
if(%typeName $= "VoteGlobalPowerCheck" && !%isAdmin)
|
|
if(%typeName $= "VoteRemoveDupDeployables" && !%isAdmin)
|
|
if(%typeName $= "VoteRemoveNonPoweredDeployables" && !%isAdmin)
|
|
if(%typeName $= "VoteRemoveOrphanedDeployables" && !%isAdmin)
|
|
if(%typeName $= "VoteInvincibleArmors" && !%isAdmin)
|
|
if(%typeName $= "VoteInvincibleDeployables" && !%isAdmin)
|
|
if(%typeName $= "VoteUndergroundMode" && !%isAdmin)
|
|
if(%typeName $= "VoteHazardMode" && !%isAdmin)
|
|
// if(%typeName $= "VoteMTCMode" && !%isAdmin)
|
|
if(%typeName $= "VotePrison" && !%isAdmin)
|
|
if(%typeName $= "VotePrisonKilling" && !%isAdmin)
|
|
if(%typeName $= "VotePrisonTeamKilling" && !%isAdmin)
|
|
if(%typeName $= "VotePrisonDeploySpam" && !%isAdmin)
|
|
%typePass = false;
|
|
|
|
if( !%typePass )
|
|
return; // -> bye ;)
|
|
// End JTL
|
|
|
|
// keep these under the server's control. I win.
|
|
if( !%playerVote )
|
|
%actionMsg = $VoteMessage[ %typeName ];
|
|
else if( %typeName $= "VoteTeamDamage" || %typeName $= "VoteGreedMode" || %typeName $= "VoteHoardMode" )
|
|
%actionMsg = $VoteMessage[ %typeName, $TeamDamage ];
|
|
// JTL
|
|
else if( %typeName $= "VotePurebuild" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Purebuild ];
|
|
else if( %typeName $= "VoteCascadeMode" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Cascade ];
|
|
else if( %typeName $= "VoteExpertMode" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::ExpertMode ];
|
|
else if( %typeName $= "VoteVehicles" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Vehicles ];
|
|
else if( %typeName $= "VoteSatchelCharge" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::SatchelChargeEnabled ];
|
|
else if( %typeName $= "VoteOnlyOwnerDeconstruct" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::OnlyOwnerDeconstruct ];
|
|
else if( %typeName $= "VoteOnlyOwnerCascade" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::OnlyOwnerCascade ];
|
|
else if( %typeName $= "VoteOnlyOwnerRotate" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::OnlyOwnerRotate ];
|
|
else if( %typeName $= "VoteOnlyOwnerCubicReplace" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::OnlyOwnerCubicReplace ];
|
|
else if( %typeName $= "VoteInvincibleArmors" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::InvincibleArmors ];
|
|
else if( %typeName $= "VoteInvincibleDeployables" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::InvincibleDeployables ];
|
|
else if( %typeName $= "VoteUndergroundMode" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::AllowUnderground ];
|
|
else if( %typeName $= "VoteHazardMode" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Hazard::Enabled ];
|
|
else if( %typeName $= "VotePrison" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Prison::Enabled ];
|
|
else if( %typeName $= "VotePrisonKilling" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Prison::Kill ];
|
|
else if( %typeName $= "VotePrisonTeamKilling" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Prison::TeamKill ];
|
|
else if( %typeName $= "VotePrisonDeploySpam" )
|
|
%actionMsg = $VoteMessage[ %typeName, $Host::Prison::DeploySpam ];
|
|
// End JTL
|
|
else
|
|
%actionMsg = $VoteMessage[ %typeName ];
|
|
|
|
if( !%client.canVote && !%isAdmin )
|
|
return;
|
|
if ( ( !%isAdmin || ( %arg1.isAdmin && ( %client != %arg1 ) ) ) && // z0dd - ToS 4/2/02: Allow SuperAdmins to kick Admins
|
|
!( ( %typeName $= "VoteKickPlayer" ) && %client.isSuperAdmin ) ) // z0dd - ToS 4/2/02: Allow SuperAdmins to kick Admins
|
|
{
|
|
%teamSpecific = false;
|
|
%gender = (%client.sex $= "Male" ? 'he' : 'she');
|
|
if ( Game.scheduleVote $= "" )
|
|
{
|
|
%clientsVoting = 0;
|
|
|
|
//send a message to everyone about the vote...
|
|
if ( %playerVote )
|
|
{
|
|
%teamSpecific = ( %typeName $= "VoteKickPlayer" ) && ( Game.numTeams > 1 );
|
|
%kickerIsObs = %client.team == 0;
|
|
%kickeeIsObs = %arg1.team == 0;
|
|
%sameTeam = %client.team == %arg1.team;
|
|
|
|
if( %kickeeIsObs )
|
|
{
|
|
%teamSpecific = false;
|
|
%sameTeam = false;
|
|
}
|
|
|
|
if(( !%sameTeam && %teamSpecific) && %typeName !$= "VoteAdminPlayer" && %typeName !$= "VoteMakeKeeper" && %typeName !$= "VoteMakeNotKeeper")
|
|
{
|
|
messageClient(%client, "", "\c2Player votes must be team based.");
|
|
return;
|
|
}
|
|
|
|
// kicking is team specific
|
|
if( %typeName $= "VoteKickPlayer" )
|
|
{
|
|
if(%arg1.isSuperAdmin)
|
|
{
|
|
messageClient(%client, '', '\c2You can not %1 %2, %3 is a Super Admin!', %actionMsg, %arg1.name, %gender);
|
|
return;
|
|
}
|
|
|
|
Game.kickClient = %arg1;
|
|
Game.kickClientName = %arg1.name;
|
|
Game.kickGuid = %arg1.guid;
|
|
Game.kickTeam = %arg1.team;
|
|
|
|
if(%teamSpecific)
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
|
|
if (%cl.team == %client.team && !%cl.isAIControlled())
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 \c3%3\c2.', %client.name, %actionMsg, %arg1.name);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 \c3%3\c2.', %client.name, %actionMsg, %arg1.name);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 \c3%3\c2.', %client.name, %actionMsg, %arg1.name);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( %typeName $= "VoteChangeMission" )
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 \c3%3\c2 (%4)', %client.name, %actionMsg, %arg1, %arg2 );
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
else if ( %typeName $= "VoteLoadBuilding" )
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 \c3%3\c2, %4.', %client.name, %actionMsg, %arg1, %arg2 );
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
else if (%arg1 !$= 0)
|
|
{
|
|
if (%arg2 !$= 0)
|
|
{
|
|
if(%typeName $= "VoteTournamentMode")
|
|
{
|
|
%admin = getAdmin();
|
|
if(%admin > 0)
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 Tournament Mode (%3).', %client.name, %actionMsg, %arg1);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
messageClient( %client, 'clientMsg', 'There must be a server admin to play in Tournament Mode.');
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to %2 %3 %4.', %client.name, %actionMsg, %arg1, %arg2);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to\c3 %2 \c2%3.', %client.name, %actionMsg, %arg1);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %idx );
|
|
if ( !%cl.isAIControlled() )
|
|
{
|
|
messageClient( %cl, 'VoteStarted', '\c3%1 \c2initiated a vote to\c3 %2\c2.', %client.name, %actionMsg);
|
|
%clientsVoting++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// open the vote hud for all clients that will participate in this vote
|
|
if(%teamSpecific)
|
|
{
|
|
for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %clientIndex );
|
|
|
|
if(%cl.team == %client.team && !%cl.isAIControlled())
|
|
messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %clientIndex );
|
|
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 );
|
|
|
|
Game.votingArguments[0] = %typeName;
|
|
Game.votingArguments[1] = %arg1;
|
|
Game.votingArguments[2] = %arg2;
|
|
Game.votingArguments[3] = %arg3;
|
|
Game.votingArguments[4] = %arg4;
|
|
|
|
%client.vote = true;
|
|
messageAll('addYesVote', "");
|
|
|
|
if(!%client.team == 0)
|
|
clearBottomPrint(%client);
|
|
logEcho(%client.nameBase@" ("@%client@") initiated a "@%typeName@" vote (arg1: "@%arg1@", arg2: "@%arg2@", arg3: "@%arg3@", arg4: "@%arg4@")");
|
|
}
|
|
else
|
|
messageClient( %client, 'voteAlreadyRunning', '\c2A vote is already in progress.' );
|
|
}
|
|
else
|
|
{
|
|
if ( Game.scheduleVote !$= "" && Game.voteType $= %typeName )
|
|
{
|
|
messageAll('closeVoteHud', "");
|
|
cancel(Game.scheduleVote);
|
|
Game.scheduleVote = "";
|
|
}
|
|
|
|
// if this is a superAdmin, don't kick or ban
|
|
if(%arg1 != %client)
|
|
{
|
|
if(!%arg1.isSuperAdmin)
|
|
{
|
|
// Set up kick/ban values:
|
|
if ( %typeName $= "VoteBanPlayer" || %typeName $= "VoteKickPlayer" )
|
|
{
|
|
Game.kickClient = %arg1;
|
|
Game.kickClientName = %arg1.name;
|
|
Game.kickGuid = %arg1.guid;
|
|
Game.kickTeam = %arg1.team;
|
|
}
|
|
|
|
//Tinman - PURE servers can't call "eval"
|
|
//Mark - True, but neither SHOULD a normal server
|
|
// - thanks Ian Hardingham
|
|
Game.evalVote(%typeName, %client, %arg1, %arg2, %arg3, %arg4);
|
|
}
|
|
else
|
|
messageClient(%client, '', '\c2You can not %1 %2, %3 is a Super Admin!', %actionMsg, %arg1.name, %gender);
|
|
}
|
|
}
|
|
|
|
%client.canVote = false;
|
|
%client.rescheduleVote = schedule( ($Host::voteSpread * 1000) + ($Host::voteTime * 1000) , 0, "resetVotePrivs", %client );
|
|
}
|
|
|
|
function resetVotePrivs( %client )
|
|
{
|
|
//messageClient( %client, '', 'You may now start a new vote.');
|
|
%client.canVote = true;
|
|
%client.rescheduleVote = "";
|
|
}
|
|
|
|
function serverCmdSetPlayerVote(%client, %vote)
|
|
{
|
|
%tf = %client.transferFrom;
|
|
if(isObject(%client.transferTo) && %vote == 0)
|
|
{
|
|
messageClient(%client, "", "\c2Piece transaction cancelled.");
|
|
messageClient(%client.transferTo, "", "\c3"@%client.nameBase@" \c2has cancelled the piece transaction.");
|
|
|
|
%client.transferTo.transferFrom = "";
|
|
%client.transferTo = "";
|
|
return;
|
|
}
|
|
|
|
if(isObject(%client.transferFrom))
|
|
{
|
|
if(%vote == 1)
|
|
{
|
|
messageAll('MsgAdminForce', "\c3"@%tf.nameBase@"\c2 is transferring "@(%tf.sex $= "Male" ? "his" : "her")@" pieces to \c3"@%client.nameBase@"\c2.");
|
|
GivePieces(%client.transferFrom, %client);
|
|
|
|
%tf.transferTo = "";
|
|
%client.transferFrom = "";
|
|
}
|
|
else
|
|
{
|
|
messageClient(%client, "", "\c2Piece transaction declined.");
|
|
messageClient(%tf, "", "\c3"@%client.nameBase@" \c2has declined the piece transaction.");
|
|
|
|
%tf.transferTo = "";
|
|
%client.transferFrom = "";
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
// players can only vote once
|
|
if( %client.vote $= "" )
|
|
{
|
|
%client.vote = %vote;
|
|
if(%client.vote == 1)
|
|
messageAll('addYesVote', "");
|
|
else
|
|
messageAll('addNoVote', "");
|
|
|
|
commandToClient(%client, 'voteSubmitted', %vote);
|
|
}
|
|
}
|
|
|
|
function calcVotes(%typeName, %arg1, %arg2, %arg3, %arg4)
|
|
{
|
|
if(%typeName $= "voteMatchStart")
|
|
if($MatchStarted || $countdownStarted)
|
|
return;
|
|
|
|
for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ )
|
|
{
|
|
%cl = ClientGroup.getObject( %clientIndex );
|
|
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++;
|
|
}
|
|
}
|
|
//Tinman - PURE servers can't call "eval"
|
|
//Mark - True, but neither SHOULD a normal server
|
|
// - thanks Ian Hardingham
|
|
Game.evalVote(%typeName, false, %arg1, %arg2, %arg3, %arg4);
|
|
Game.scheduleVote = "";
|
|
Game.kickClient = "";
|
|
|
|
Game.votingArguments = "";
|
|
|
|
clearVotes();
|
|
}
|
|
|
|
function clearVotes()
|
|
{
|
|
for(%clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++)
|
|
{
|
|
%client = ClientGroup.getObject(%clientIndex);
|
|
%client.vote = "";
|
|
messageClient(%client, 'clearVoteHud', "");
|
|
}
|
|
|
|
for(%team = 1; %team < 5; %team++)
|
|
{
|
|
Game.votesFor[%team] = 0;
|
|
Game.votesAgainst[%team] = 0;
|
|
Game.votesNone[%team] = 0;
|
|
Game.totalVotesFor = 0;
|
|
Game.totalVotesAgainst = 0;
|
|
Game.totalVotesNone = 0;
|
|
}
|
|
}
|
|
|
|
// Tournament mode Stuff-----------------------------------
|
|
|
|
function setModeFFA( %mission, %missionType )
|
|
{
|
|
if( $Host::TournamentMode )
|
|
{
|
|
$Host::TournamentMode = false;
|
|
|
|
if( isObject( Game ) )
|
|
Game.gameOver();
|
|
|
|
loadMission(%mission, %missionType, false);
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
function setModeTournament( %mission, %missionType )
|
|
{
|
|
if( !$Host::TournamentMode )
|
|
{
|
|
$Host::TournamentMode = true;
|
|
|
|
if( isObject( Game ) )
|
|
Game.gameOver();
|
|
|
|
loadMission(%mission, %missionType, false);
|
|
}
|
|
}
|