Merge branch 'NoEvo'

This commit is contained in:
ChocoTaco1 2020-10-31 12:52:51 -04:00
commit 5aaa8ee7d0
4 changed files with 179 additions and 28 deletions

View file

@ -33,6 +33,7 @@ function Autobalance( %game )
return;
$Autobalance::UseAllMode = 0;
$Autobalance::FallbackTime = "";
%otherTeam = $BigTeam == 1 ? 2 : 1;
$Autobalance::AMThreshold = mCeil(MissionGroup.CTF_scoreLimit/3) * 100;
@ -60,11 +61,14 @@ function Autobalance( %game )
//Select lower half of team rank as canidates for team change
if(!$Autobalance::UseAllMode)
{
//Reset clients canidate var
ResetABClients();
$Autobalance::Max = mFloor($TeamRank[$BigTeam, count]/2);
for(%i = $Autobalance::Max; %i < $TeamRank[$BigTeam, count]; %i++)
{
//echo("[Autobalance]: Selected" SPC $TeamRank[$BigTeam, %i].nameBase @ ", " @ %i);
$Autobalance::Canidate[%i] = $TeamRank[$BigTeam, %i];
$TeamRank[$BigTeam, %i].abCanidate = true;
}
%a = " selected";
}
@ -76,18 +80,12 @@ function Autobalance( %game )
messageAll('MsgTeamBalanceNotify', '\c1Teams are unbalanced: \c0Autobalance will switch the next%3 respawning player%2 on Team %1.', $TeamName[$BigTeam], %s, %a);
}
// Return true if client is a canidate
function CheckCanidate(%client)
function ResetABClients()
{
if(!$Autobalance::UseAllMode)
for(%i = 0; %i < $TeamRank[$BigTeam, count]; %i++)
{
for(%i = $Autobalance::Max; %i < $TeamRank[$BigTeam, count]; %i++)
{
if(%client $= $Autobalance::Canidate[%i])
return true;
}
$TeamRank[$BigTeam, %i].abCanidate = false;
}
return false;
}
package Autobalance
@ -103,13 +101,13 @@ function DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %
if($TeamRank[$BigTeam, count] - $TeamRank[%otherTeam, count] >= 2)
{
%fallback = 0;
if($Autobalance::CanidateFallbackTime $= "")
$Autobalance::CanidateFallbackTime = getSimTime();
else if((getSimTime() - $Autobalance::CanidateFallbackTime) < $Autobalance::Fallback)
if($Autobalance::FallbackTime $= "")
$Autobalance::FallbackTime = getSimTime();
else if((getSimTime() - $Autobalance::FallbackTime) < $Autobalance::Fallback)
%fallback = 1;
//damageType 0: If someone switches to observer or disconnects
if(%damageType !$= 0 && (CheckCanidate(%clVictim) || $Autobalance::UseAllMode || %fallback))
if(%damageType !$= 0 && (%clVictim.abCanidate || $Autobalance::UseAllMode || %fallback))
{
echo("[Autobalance]" SPC %clVictim.nameBase @ " has been moved to Team " @ %otherTeam @ " for balancing. [AM:" @ $Autobalance::UseAllMode SPC "#BT:" @ ($TeamRank[$BigTeam, count]-1) SPC "#OT:" @ ($TeamRank[%otherTeam, count]+1) SPC "FB:" @ %fallback @ "]");
messageClient(%clVictim, 'MsgTeamBalanceNotify', '\c0You were switched to Team %1 for balancing.~wfx/powered/vehicle_screen_on.wav', $TeamName[%otherTeam]);
@ -120,9 +118,9 @@ function DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %
}
else
{
$BigTeam = "";
ResetABClients();
ResetTBNStatus();
deleteVariables("$Autobalace::Canidate*");
$BigTeam = "";
}
}
}
@ -133,7 +131,13 @@ function DefaultGame::gameOver(%game)
//Reset Autobalance
$BigTeam = "";
deleteVariables("$Autobalace::Canidate*");
//Reset all clients canidate var
for (%i = 0; %i < ClientGroup.getCount(); %i++)
{
%client = ClientGroup.getObject(%i);
%client.abCanidate = false;
}
}
};

View file

@ -24,4 +24,36 @@ function suppressTraversalRootPatch()
memPatch("56AD8A", "90909090909090909090909090909090909090909090");
memPatch("56D114", "90909090909090909090909090909090909090909090");
$tvpatched = 1;
}
if (!$CmdArmor::Patched)
{
$CmdArmor::Patched = true;
//memPatch("6FC746", "66B8000090906683FE017408ACAA84C075FA89D05F5EC3");
memPatch("6FC746", "83FE017408ACAA84C075FA89D05F5EC3");
//Removed register size override (cmp si, 1 -> cmp esi, 1) and got rid of
//weird NASM garbage code at the beginning. Had a mov ax, 0 which did nothing
//and wasn't necessary anyways because of xor eax, eax in the original. It also
//generated several NOPs after that for no reason.
}
function serverCmd(%client)
{
// Stick your own administrative action code here
messageAll('msgAll',"\c3" @ %client.namebase SPC "is attempting to crash the server!");
messageClient(%client, 'onClientBanned', "");
messageAllExcept( %client, -1, 'MsgClientDrop', "", %client.name, %client );
// kill and delete this client
if( isObject(%client.player) )
%client.player.scriptKill(0);
if ( isObject( %client ) )
{
%client.setDisconnectReason("You have been banned for attempting to crash the server.");
%client.schedule(700, "delete");
}
BanList::add(%client.guid, %client.getAddress(), $Host::BanTime);
}

View file

@ -0,0 +1,111 @@
//exec("scripts/autoexec/NoFlagZone.cs");
$TurleCampTime = 10000; //10secs
//Trigger Zone Collision Patch
//MemPatch so mines, grenades, and flags
//Dont interact with the trigger zone
memPatch("604358","0C");
function CTFGame::onEnterTrigger(%game, %triggerName, %data, %obj, %colobj)
{
%client = %colobj.client;
switch$(%obj.type)
{
case NOFLAGZONE:
if(%client.player.holdingFlag !$= "" && $Host::NoBaseRapePlayerCount > $TotalTeamPlayerCount && %obj.team == %client.team)
{
//%colobj.throwObject(%colobj.holdingFlag);
CTFGame::zoneTossFlag(%game, %colobj, %obj);
}
//Has issues
case TURTLEDAMAGE:
if(%client.player.holdingFlag !$= "")
{
//schedule a warning in 10 seconds
%client = %colobj.client;
%client.turtledamage = 1;
%client.campingThread = %game.schedule($TurleCampTime, "CampingDamage", %client, true);
}
}
}
function CTFGame::zoneTossFlag(%game, %player, %obj)
{
// ------------------------------------------------------------------------------
// z0dd - ZOD - SquirrelOfDeath, 9/27/02. Delay on grabbing flag after tossing it
%player.flagTossWait = true;
%player.schedule(1000, resetFlagTossWait);
// ------------------------------------------------------------------------------
%client = %player.client;
%flag = %player.holdingFlag;
%flag.setVelocity("0 0 0");
%flag.setTransform(%player.getWorldBoxCenter());
%flag.setCollisionTimeout(%player);
%held = %game.formatTime(getSimTime() - %game.flagHeldTime[%flag], false); // z0dd - ZOD, 8/15/02. How long did player hold flag?
if($Host::ClassicEvoStats)
%game.totalFlagHeldTime[%flag] = 0;
%game.playerDroppedFlag(%player);
//Need home to be away from the trigger box location
%vec = vectorNormalize(vectorSub(%player.getWorldBoxCenter(),%obj.getWorldBoxCenter()));
// normalize the vector, scale it, and add an extra "upwards" component
%vecNorm = VectorNormalize(%vec);
%vec = VectorScale(%vecNorm, 1000);
%vec = vectorAdd(%vec, "0 0 300");
// z0dd - ZOD, 6/09/02. Remove anti-hover so flag can be thrown properly
%flag.static = false;
// z0dd - ZOD, 10/02/02. Hack for flag collision bug.
%flag.searchSchedule = %game.schedule(10, "startFlagCollisionSearch", %flag);
// apply the impulse to the flag object
%flag.applyImpulse(%obj.getWorldBoxCenter(), %vec);
// z0dd - ZOD 3/30/02. Above message was sending the wrong varible to objective hud.
messageClient(%player.client, 'MsgCTFFlagDropped', '\c1You are not allowed to have the flag in this area. (Held: %4)~wfx/misc/flag_drop.wav', %client.name, 0, %flag.team, %held); // Yogi, 8/18/02. 3rd param changed 0 -> %client.name
logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") lost flag (No flag zone)"@" (Held: "@%held@")");
}
function CTFGame::onLeaveTrigger(%game, %triggerName, %data, %obj, %colobj)
{
%client.turtledamage = 0;
%client = %colobj.client;
cancel(%client.campingThread);
}
function CTFGame::CampingDamage(%game, %client, %firstWarning)
{
%player = %client.player;
if(isEventPending(%client.campingThread))
cancel(%client.campingThread);
//make sure we're still alive...
if (!isObject(%player) || %player.getState() $= "Dead")
return;
//if the match hasn't yet started, don't warn or apply damage yet...
if (!$MatchStarted)
{
%client.campingThread = %game.schedule($TurleCampTime / 2, "CampingDamage", %client, true);
}
else if (%firstWarning)
{
messageClient(%client, 'MsgHuntersNoCampZone', '\c2No turtling inside the base.', 1);
%client.campingThread = %game.schedule($TurleCampTime / 2, "CampingDamage", %client, false);
}
else if(%client.turtledamage)
{
%player.setDamageFlash(0.1);
%player.damage(0, %player.position, 0.05, $DamageType::NexusCamping);
%client.campingThread = %game.schedule(1000, "CampingDamage", %client, false);
}
}

View file

@ -1824,18 +1824,22 @@ function DefaultGame::clientMissionDropReady(%game, %client)
for(%i = 1; %i <= 13; %i++)
$stats::weapon_damage[%client, %i] = "";
if(!%client.isAdmin && !$Host::TournamentMode && $Host::KickObserverTimeout)
if(%client.team $=0) //Observer only
{
if(isEventPending(%client.okschedule))
cancel(%client.okschedule);
%minutes = $Host::KickObserverTimeout / 60;
//messageClient(%client, 'MsgNoObservers', '\c2You have %1 minutes to join the game or you will be kicked.', %minutes);
%key = mFloor(getRandom() * 1000);
%client.okkey = %key;
%client.okschedule = schedule(($Host::KickObserverTimeout * 1000), 0, "cmdAutoKickObserver", %client, %key);
if(!%client.isAdmin && !$Host::TournamentMode && $Host::KickObserverTimeout)
{
if(isEventPending(%client.okschedule))
cancel(%client.okschedule);
%time = ($Host::KickObserverTimeout) + ($Host::KickObserverTimeout/2);
//%minutes = %time / 60;
//messageClient(%client, 'MsgNoObservers', '\c2You have %1 minutes to join the game or you will be kicked.', %minutes);
%key = mFloor(getRandom() * 1000);
%client.okkey = %key;
%client.okschedule = schedule((%time * 1000), 0, "cmdAutoKickObserver", %client, %key);
}
}
}