mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-01-19 20:25:01 +00:00
235 lines
7.2 KiB
C#
235 lines
7.2 KiB
C#
// Simple bonuses
|
|
|
|
$TR2::midairLevel[0] = 10;
|
|
$TR2::midairLevel[1] = 25;
|
|
|
|
|
|
function FlagBonus::evaluate(%this, %passer, %receiver, %flag)
|
|
{
|
|
if ($TheFlag.specialPass $= "" && !%flag.onGoal)
|
|
Parent::evaluate(%this, %passer, %receiver, %flag);
|
|
|
|
$TheFlag.specialPass = "";
|
|
}
|
|
|
|
//function WeaponBonus::evaluate(%this, %shooter, %victim, %damageType)
|
|
//{
|
|
//}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Damage bonus
|
|
|
|
|
|
function G4Bonus::evaluate(%this, %plAttacker, %plVictim, %flag, %damageType, %damageLoc)
|
|
{
|
|
if (%plVictim !$= %flag.carrier && %plAttacker !$= %flag.carrier)
|
|
return;
|
|
|
|
if (%plAttacker $= "" || %plVictim $= "" || %flag.carrier $= "")
|
|
return;
|
|
|
|
// Lock this down a bit
|
|
if (%plVictim.getSpeed() < 3)
|
|
return;
|
|
|
|
%clAttacker = %plAttacker.client;
|
|
%clVictim = %plVictim.client;
|
|
%victimHeight = %plVictim.getHeight();
|
|
|
|
if (%clVictim != %clAttacker &&
|
|
%damageType == $DamageType::Disc &&
|
|
%victimHeight > 13)
|
|
{
|
|
if (%plVictim.isAboveSomething(25))
|
|
return;
|
|
|
|
// MA effect
|
|
%newEmitter = new ParticleEmissionDummy(MidairDiscEffect) {
|
|
position = %plVictim.getTransform();
|
|
rotation = "1 0 0 0";
|
|
scale = "0.1 0.1 0.1";
|
|
dataBlock = "defaultEmissionDummy";
|
|
emitter = "MidairDiscEmitter";
|
|
velocity = "1";
|
|
};
|
|
%newEmitter.schedule(%newEmitter.emitter.lifetimeMS, "delete");
|
|
|
|
if (%plVictim == %flag.carrier)
|
|
{
|
|
//Game.playerDroppedFlag(%flag.carrier);
|
|
$TheFlag.specialPass = "MA";
|
|
%plVictim.throwObject(%plVictim.holdingFlag);
|
|
|
|
if (%plVictim.team == %plAttacker.team)
|
|
{
|
|
// G4
|
|
TR2Flag::onCollision("",%flag,%plAttacker);
|
|
//%plVictim.forceRespawn = true;
|
|
%plAttacker.gogoKill = true;
|
|
%plVictim.setDamageFlash(0.75);
|
|
%plVictim.applyDamage(1);
|
|
//%plVictim.blowup();
|
|
//Game.onClientKilled(%clVictim, 0, $DamageType::G4);
|
|
serverPlay2D(GadgetSound);
|
|
} else {
|
|
// Crazy flags here
|
|
%numFlags = mFloor(%victimHeight / 7);
|
|
if (%numFlags > 40)
|
|
%numFlags = 40;
|
|
|
|
Game.emitFlags(%plVictim.getWorldBoxCenter(), mFloor(%victimHeight / 5), %plVictim);
|
|
|
|
if (%numFlags >= 30)
|
|
ServerPlay2D(MA3Sound);
|
|
else if (%numFlags >= 13)
|
|
ServerPlay2D(MA2Sound);
|
|
else if (%numFlags >= 3)
|
|
ServerPlay2D(MA1Sound);
|
|
|
|
messageAll('msgTR2MA', '%1 MA\'s %2.', %clAttacker.name, %clVictim.name);
|
|
return;
|
|
}
|
|
}
|
|
// Otherwise, Rabid Rabbit
|
|
else {
|
|
ServerPlay3D(MonsterSound, %plAttacker.getPosition());
|
|
%plVictim.setDamageFlash(0.75);
|
|
%plVictim.applyDamage(1);
|
|
}
|
|
}
|
|
else return;
|
|
|
|
Parent::evaluate(%this, %plAttacker, %plVictim, "", %damageType, %damageLoc, 5);
|
|
}
|
|
|
|
function MABonus::evaluate(%this, %clAttacker, %clVictim, %damageType, %damageLoc)
|
|
{
|
|
// MA detection
|
|
%plAttacker = %clAttacker.Player;
|
|
%plVictim = %clVictim.Player;
|
|
%victimHeight = %plVictim.getHeight();
|
|
if (%clVictim != %clAttacker &&
|
|
%damageType == $DamageType::Disc &&
|
|
%victimHeight > 10)
|
|
{
|
|
// MA effect
|
|
%newEmitter = new ParticleEmissionDummy(MidairDiscEffect) {
|
|
position = %player.getTransform();
|
|
rotation = "1 0 0 0";
|
|
scale = "1 1 1";
|
|
dataBlock = "defaultEmissionDummy";
|
|
emitter = "MidairDiscEmitter";
|
|
velocity = "1";
|
|
};
|
|
%newEmitter.schedule(%newEmitter.emitter.lifetimeMS, "delete");
|
|
|
|
if (%plVictim == $TheFlag.carrier && %plVictim.team != %plAttacker.team)
|
|
{
|
|
Game.playerDroppedFlag($TheFlag.carrier);
|
|
|
|
// Crazy flags here
|
|
game.emitFlags(%plVictim, 10);
|
|
}
|
|
else if (%plAttacker == $TheFlag.carrier)
|
|
{
|
|
// Rabid Rabbit here
|
|
%plVictim.setDamageFlash(0.75);
|
|
%plVictim.applyDamage(1);
|
|
%plVictim.blowup();
|
|
}
|
|
}
|
|
}
|
|
|
|
function CollisionBonus::evaluate(%this, %obj, %col)
|
|
{
|
|
%client = %obj.client;
|
|
if ($TheFlag.carrier.client == %client)
|
|
{
|
|
// Kidney Thief Steal
|
|
if (%client.team != %col.team)
|
|
{
|
|
if (getSimTime() - $TheFlag.lastKTS >= 3 * 1000)
|
|
{
|
|
$TheFlag.specialPass = "KTS";
|
|
Game.playerDroppedFlag($TheFlag.carrier);
|
|
TR2Flag::onCollision("",$TheFlag,%col);
|
|
$TheFlag.lastKTS = getSimTime();
|
|
%action = "ROBBED";
|
|
%desc = "Kidney Thief Steal";
|
|
%val = 5;
|
|
serverPlay3D(EvilLaughSound, %col.getPosition());
|
|
} else return;
|
|
// Mario Grab
|
|
} else {
|
|
%carrierPos = %obj.getPosition();
|
|
%collidedPos = %col.getPosition();
|
|
%carrierz = getWord(%carrierPos, 2);
|
|
%collidez = getWord(%collidedPos, 2);
|
|
|
|
// Inverse
|
|
//if (%carrierz > %collidez && %carrierz - %collidez > 2.5)
|
|
//{
|
|
//%flagVel = $TheFlag.carrier.getVelocity();
|
|
//Game.playerDroppedFlag($TheFlag.carrier);
|
|
//%flagx = firstWord(%flagVel) * 4;
|
|
//%flagy = getWord(%flagVel, 1) * 4;
|
|
//%flagz = getWord(%flagVel, 2);
|
|
//%flagz = %flagz + 1500;
|
|
//$TheFlag.applyImpulse($TheFlag.getPosition(), %flagx SPC %flagy SPC %flagz);
|
|
//} else
|
|
// Standard
|
|
if (%carrierz < %collidez && %collidez - %carrierz > 2.8
|
|
&& getSimTime() - $TheFlag.lastMario >= 4 * 1000)
|
|
{
|
|
$TheFlag.specialPass = "Mario";
|
|
$TheFlag.lastMario = getSimTime();
|
|
Game.playerDroppedFlag($TheFlag.carrier);
|
|
TR2Flag::onCollision("",$TheFlag,%col);
|
|
%action = "TROUNCED";
|
|
%desc = "Plumber Butt";
|
|
%val = 4;
|
|
serverPlay2D(MarioSound);
|
|
} else return;
|
|
}
|
|
}
|
|
else return;
|
|
|
|
%this.award("", %col, %obj, %action, %desc, %val);
|
|
}
|
|
|
|
function CreativityBonus::evaluate(%this, %variance, %player)
|
|
{
|
|
if (%variance < %this.lastVariance)
|
|
{
|
|
%this.lastVariance = 0;
|
|
%this.lastVarianceLevel = 0;
|
|
return;
|
|
}
|
|
|
|
if (%variance == %this.lastVariance)
|
|
return;
|
|
|
|
%this.lastVariance = %variance;
|
|
|
|
for(%i=%this.varianceLevels - 1; %i>0; %i--)
|
|
if (%variance >= %this.varianceThreshold[%i])
|
|
break;
|
|
|
|
if (%i < %this.lastVarianceLevel)
|
|
{
|
|
%this.lastVarianceLevel = 0;
|
|
return;
|
|
}
|
|
|
|
if (%i == %this.lastVarianceLevel)
|
|
return;
|
|
|
|
%this.lastVarianceLevel = %i;
|
|
|
|
$teamScoreCreativity[%player.team] += %this.varianceValue[%i];
|
|
|
|
// Ugly..hmm
|
|
%this.schedule(1500, "award", "", %player, "", "",
|
|
"Level" SPC %i SPC "Creativity Bonus", %this.varianceValue[%i], %this.varianceSound[%i]);
|
|
}
|