Cloak still broken in lak
This commit is contained in:
ChocoTaco 2023-09-24 18:54:23 -04:00
parent ab024cbdbc
commit bc1bd8f5dd

View file

@ -920,287 +920,6 @@ function Player::setKnockback(%this, %val)
// } // }
//} //}
//Old Behavior
function ShapeBaseImageData::onFire(%data, %obj, %slot)
{
// ---------------------------------------------------------------------------
// z0dd - ZOD, 9/3/02. Anti rapid fire mortar/missile fix.
// if (%obj.cantFire !$= "")
// {
// return 0;
// }
// %wpnName = %data.getName();
// if((%wpnName $= "MortarImage") || (%wpnName $= "MissileLauncherImage"))
// {
// %obj.cantFire = 1;
// %preventTime = %data.stateTimeoutValue[4];
// //%preventTime = (%data.stateTimeoutValue[4] + %data.stateTimeoutValue[3]) - 0.032;
// %obj.reloadSchedule = schedule(%preventTime * 1000, %obj, resetFire, %obj);
// }
// ---------------------------------------------------------------------------
%obj.lfireTime[%data.getName()] = getSimTime();
%data.lightStart = getSimTime();
if( %obj.station $= "" && %obj.isCloaked() )
{
if( %obj.respawnCloakThread !$= "" )
{
Cancel(%obj.respawnCloakThread);
%obj.setCloaked( false );
%obj.respawnCloakThread = "";
}
else
{
if( %obj.getEnergyLevel() > 20 )
{
%obj.setCloaked( false );
%obj.reCloak = %obj.schedule( 500, "setCloaked", true );
}
//We check if the player is still cloaked now. So no need to limit to 20% energy for the cloak in/out animation
//%obj.setCloaked( false );
//%obj.reCloak = schedule( 500, 0, "checkCloakState", %obj);
}
}
if( %obj.client > 0 )
{
%obj.setInvincibleMode(0 ,0.00);
%obj.setInvincible( false ); // fire your weapon and your invincibility goes away.
}
%vehicle = 0;
if(%data.usesEnergy)
{
if(%data.useMountEnergy)
{
%useEnergyObj = %obj.getObjectMount();
if(!%useEnergyObj)
%useEnergyObj = %obj;
%energy = %useEnergyObj.getEnergyLevel();
%vehicle = %useEnergyObj;
}
else
%energy = %obj.getEnergyLevel();
if(%data.useCapacitor && %data.usesEnergy)
{
if( %useEnergyObj.turretObject.getCapacitorLevel() < %data.minEnergy )
{
return;
}
}
else if(%energy < %data.minEnergy)
return;
}
// ---------------------------------------------------------------------
// z0dd - ZOD, 4/24/02. Code optimization
if(%data.projectileSpread)
{
%vec = %obj.getMuzzleVector(%slot);
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
%vector = MatrixMulVector(%mat, %vec);
}
else
{
// z0dd - ZOD, 4/10/02. Founder - fixes off center projectile drift.
//%vector = %obj.getMuzzleVector(%slot);
%vector = MatrixMulVector("0 0 0 0 0 1 0", %obj.getMuzzleVector(%slot));
}
%p = new (%data.projectileType)() {
dataBlock = %data.projectile;
initialDirection = %vector;
initialPosition = %obj.getMuzzlePoint(%slot);
sourceObject = %obj;
sourceSlot = %slot;
vehicleObject = %vehicle;
};
// End streamlining
// ---------------------------------------------------------------------
if (isObject(%obj.lastProjectile) && %obj.deleteLastProjectile)
%obj.lastProjectile.delete();
%obj.lastProjectile = %p;
%obj.deleteLastProjectile = %data.deleteLastProjectile;
MissionCleanup.add(%p);
// AI hook
if(%obj.client)
%obj.client.projectile = %p;
if(%data.usesEnergy)
{
if(%data.useMountEnergy)
{
if( %data.useCapacitor )
{
%vehicle.turretObject.setCapacitorLevel( %vehicle.turretObject.getCapacitorLevel() - %data.fireEnergy );
}
else
%useEnergyObj.setEnergyLevel(%energy - %data.fireEnergy);
}
else
%obj.setEnergyLevel(%energy - %data.fireEnergy);
}
else
%obj.decInventory(%data.ammo,1);
return %p;
}
//Old Behavior
function ShockLanceImage::onFire(%this, %obj, %slot)
{
// Added Spawn Invinciblity check
if(%obj.client > 0)
{
%obj.setInvincibleMode(0, 0.00);
%obj.setInvincible( false );
}
// z0dd - ZOD, 4/10/04. ilys - Added rapidfire shocklance fix
if(%obj.cantfire !$= "")
return;
%obj.cantfire = 1;
%preventTime = %this.stateTimeoutValue[4];
%obj.reloadSchedule = schedule(%preventTime * 1000, %obj, resetFire, %obj);
if( %obj.getEnergyLevel() < %this.minEnergy ) // z0dd - ZOD, 5/22/03. Check energy level first
{
%obj.playAudio(0, ShockLanceMissSound);
return;
}
if( %obj.isCloaked() )
{
if( %obj.respawnCloakThread !$= "" )
{
Cancel(%obj.respawnCloakThread);
%obj.setCloaked( false );
}
else
{
if( %obj.getEnergyLevel() > 20 )
{
%obj.setCloaked( false );
%obj.reCloak = %obj.schedule( 500, "setCloaked", true );
}
//We check if the player is still cloaked now. So no need to limit to 20% energy for the cloak in/out animation
//%obj.setCloaked( false );
//%obj.reCloak = schedule( 500, 0, "checkCloakState", %obj);
}
}
%muzzlePos = %obj.getMuzzlePoint(%slot);
%muzzleVec = %obj.getMuzzleVector(%slot);
%endPos = VectorAdd(%muzzlePos, VectorScale(%muzzleVec, %this.projectile.extension));
%damageMasks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType |
$TypeMasks::StationObjectType | $TypeMasks::GeneratorObjectType |
$TypeMasks::SensorObjectType | $TypeMasks::TurretObjectType;
%everythingElseMask = $TypeMasks::TerrainObjectType |
$TypeMasks::InteriorObjectType |
$TypeMasks::ForceFieldObjectType |
$TypeMasks::StaticObjectType |
$TypeMasks::MoveableObjectType |
$TypeMasks::DamagableItemObjectType;
// did I miss anything? players, vehicles, stations, gens, sensors, turrets
%hit = ContainerRayCast(%muzzlePos, %endPos, %damageMasks | %everythingElseMask, %obj);
%noDisplay = true;
if(%hit !$= "0")
{
%obj.setEnergyLevel(%obj.getEnergyLevel() - %this.hitEnergy);
%hitobj = getWord(%hit, 0);
%hitpos = getWord(%hit, 1) @ " " @ getWord(%hit, 2) @ " " @ getWord(%hit, 3);
if(%hitObj.getType() & %damageMasks)
{
// z0dd - ZOD, 5/18/03. Do not apply impulse to MPB.
if(%hitObj.getDataBlock().classname !$= WheeledVehicleData)
%hitobj.applyImpulse(%hitpos, VectorScale(%muzzleVec, %this.projectile.impulse));
%obj.playAudio(0, ShockLanceHitSound);
// This is truly lame, but we need the sourceobject property present...
%p = new ShockLanceProjectile() {
dataBlock = %this.projectile;
initialDirection = %obj.getMuzzleVector(%slot);
initialPosition = %obj.getMuzzlePoint(%slot);
sourceObject = %obj;
sourceSlot = %slot;
targetId = %hit;
};
MissionCleanup.add(%p);
%damageMultiplier = 1.0;
if(%hitObj.getDataBlock().getClassName() $= "PlayerData")
{
// Now we see if we hit from behind...
%forwardVec = %hitobj.getForwardVector();
%objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0";
%objPos = %hitObj.getPosition();
%dif = VectorSub(%objPos, %muzzlePos);
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
%dif = VectorNormalize(%dif);
%dot = VectorDot(%dif, %objDir2D);
// 120 Deg angle test...
// 1.05 == 60 degrees in radians
if (%dot >= mCos(1.05))
{
// Rear hit
%damageMultiplier = 3.0;
if(!%hitObj.getOwnerClient().isAIControlled())
%hitObj.getOwnerClient().rearshot = 1; // z0dd - ZOD, 8/25/02. Added Lance rear shot messages
}
// --------------------------------------------------------------
// z0dd - ZOD, 8/25/02. Added Lance rear shot messages
else
{
if(!%hitObj.getOwnerClient().isAIControlled())
%hitObj.getOwnerClient().rearshot = 0;
}
// --------------------------------------------------------------
}
%totalDamage = %this.Projectile.DirectDamage * %damageMultiplier;
%hitObj.getDataBlock().damageObject(%hitobj, %p.sourceObject, %hitpos, %totalDamage, $DamageType::ShockLance);
%noDisplay = false;
}
}
if( %noDisplay )
{
// Miss
%obj.setEnergyLevel(%obj.getEnergyLevel() - %this.missEnergy);
%obj.playAudio(0, ShockLanceMissSound);
%p = new ShockLanceProjectile() {
dataBlock = %this.projectile;
initialDirection = %obj.getMuzzleVector(%slot);
initialPosition = %obj.getMuzzlePoint(%slot);
sourceObject = %obj;
sourceSlot = %slot;
};
MissionCleanup.add(%p);
}
// z0dd - ZOD, 4/10/04. AI hook
if(%obj.client != -1)
%obj.client.projectile = %p;
return %p;
}
}; };
//Put everyone on NonRabbit Team //Put everyone on NonRabbit Team