mirror of
https://github.com/ChocoTaco1/TacoServer.git
synced 2026-07-15 16:14:35 +00:00
MA Detection Replacement for nonLak modes
This commit is contained in:
parent
6d8f1522dc
commit
15f7cca19e
4 changed files with 152 additions and 88 deletions
|
|
@ -255,35 +255,6 @@ function Flag::onLeaveLiquid(%data, %obj, %type)
|
||||||
cancel(%obj.lavaEnterThread);
|
cancel(%obj.lavaEnterThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal)
|
|
||||||
{
|
|
||||||
if(!isObject(%targetObject) && !isObject(%projectile.sourceObject))
|
|
||||||
return;
|
|
||||||
if(!(%targetObject.getType() & ($TypeMasks::StaticTSObjectType | $TypeMasks::InteriorObjectType |
|
|
||||||
$TypeMasks::TerrainObjectType | $TypeMasks::WaterObjectType)))
|
|
||||||
{
|
|
||||||
if(%projectile.sourceObject.team !$= %targetObject.team)
|
|
||||||
{
|
|
||||||
if(%targetObject.getDataBlock().getClassName() $= "PlayerData" && %data.getName() $= "DiscProjectile")
|
|
||||||
{
|
|
||||||
%mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType;
|
|
||||||
%start = %targetObject.getWorldBoxCenter();
|
|
||||||
%distance = mFloor(VectorDist(%start, %projectile.initialPosition));
|
|
||||||
%end = getWord(%start, 0) SPC getWord(%start, 1) SPC getWord(%start, 2) - 15;
|
|
||||||
%grounded = ContainerRayCast(%start, %end, %mask, 0);
|
|
||||||
if(!%grounded)
|
|
||||||
{
|
|
||||||
%projectile.sourceObject.client.scoreMidAir++;
|
|
||||||
messageClient(%projectile.sourceObject.client, 'MsgMidAir', '\c0You received a %1 point bonus for a successful mid air shot.~wfx/misc/bounty_bonus.wav', Game.SCORE_PER_MIDAIR, %data.radiusDamageType, %distance);
|
|
||||||
messageTeamExcept(%projectile.sourceObject.client, 'MsgMidAir', '\c5%1 hit a mid air shot.', %projectile.sourceObject.client.name, %data.radiusDamageType, %distance);
|
|
||||||
Game.recalcScore(%projectile.sourceObject.client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Parent::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -705,35 +705,6 @@ package DMGame
|
||||||
schedule(2000, %mineObj, "explodeMine", %mineObj, true);
|
schedule(2000, %mineObj, "explodeMine", %mineObj, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal)
|
|
||||||
{
|
|
||||||
if(!isObject(%targetObject) && !isObject(%projectile.sourceObject))
|
|
||||||
return;
|
|
||||||
if(!(%targetObject.getType() & ($TypeMasks::StaticTSObjectType | $TypeMasks::InteriorObjectType |
|
|
||||||
$TypeMasks::TerrainObjectType | $TypeMasks::WaterObjectType)))
|
|
||||||
{
|
|
||||||
if(%projectile.sourceObject.team !$= %targetObject.team)
|
|
||||||
{
|
|
||||||
if(%targetObject.getDataBlock().getClassName() $= "PlayerData" && %data.getName() $= "DiscProjectile")
|
|
||||||
{
|
|
||||||
%mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType;
|
|
||||||
%start = %targetObject.getWorldBoxCenter();
|
|
||||||
%distance = mFloor(VectorDist(%start, %projectile.initialPosition));
|
|
||||||
%end = getWord(%start, 0) SPC getWord(%start, 1) SPC getWord(%start, 2) - 15;
|
|
||||||
%grounded = ContainerRayCast(%start, %end, %mask, 0);
|
|
||||||
if(!%grounded)
|
|
||||||
{
|
|
||||||
%projectile.sourceObject.client.scoreMidAir++;
|
|
||||||
messageClient(%projectile.sourceObject.client, 'MsgMidAir', '\c0You hit a successful mid air shot.~wfx/misc/bounty_bonus.wav', %data.radiusDamageType, %distance);
|
|
||||||
messageTeamExcept(%projectile.sourceObject.client, 'MsgMidAir', '\c5%1 hit a mid air shot.', %projectile.sourceObject.client.name, %data.radiusDamageType, %distance);
|
|
||||||
Game.recalcScore(%projectile.sourceObject.client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Parent::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Take out anything vehicle related
|
//Take out anything vehicle related
|
||||||
function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC)
|
function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -263,35 +263,6 @@ package SCtFGame
|
||||||
cancel(%obj.lavaEnterThread);
|
cancel(%obj.lavaEnterThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal)
|
|
||||||
{
|
|
||||||
if(!isObject(%targetObject) && !isObject(%projectile.sourceObject))
|
|
||||||
return;
|
|
||||||
if(!(%targetObject.getType() & ($TypeMasks::StaticTSObjectType | $TypeMasks::InteriorObjectType |
|
|
||||||
$TypeMasks::TerrainObjectType | $TypeMasks::WaterObjectType)))
|
|
||||||
{
|
|
||||||
if(%projectile.sourceObject.team !$= %targetObject.team)
|
|
||||||
{
|
|
||||||
if(%targetObject.getDataBlock().getClassName() $= "PlayerData" && %data.getName() $= "DiscProjectile")
|
|
||||||
{
|
|
||||||
%mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType;
|
|
||||||
%start = %targetObject.getWorldBoxCenter();
|
|
||||||
%distance = mFloor(VectorDist(%start, %projectile.initialPosition));
|
|
||||||
%end = getWord(%start, 0) SPC getWord(%start, 1) SPC getWord(%start, 2) - 15;
|
|
||||||
%grounded = ContainerRayCast(%start, %end, %mask, 0);
|
|
||||||
if(!%grounded)
|
|
||||||
{
|
|
||||||
%projectile.sourceObject.client.scoreMidAir++;
|
|
||||||
messageClient(%projectile.sourceObject.client, 'MsgMidAir', '\c0You received a %1 point bonus for a successful mid air shot.~wfx/misc/bounty_bonus.wav', Game.SCORE_PER_MIDAIR, %data.radiusDamageType, %distance);
|
|
||||||
messageTeamExcept(%projectile.sourceObject.client, 'MsgMidAir', '\c5%1 hit a mid air shot.', %projectile.sourceObject.client.name, %data.radiusDamageType, %distance);
|
|
||||||
Game.recalcScore(%projectile.sourceObject.client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Parent::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function stationTrigger::onEnterTrigger(%data, %obj, %colObj)
|
function stationTrigger::onEnterTrigger(%data, %obj, %colObj)
|
||||||
{
|
{
|
||||||
//make sure it's a player object, and that that object is still alive
|
//make sure it's a player object, and that that object is still alive
|
||||||
|
|
|
||||||
151
Classic/scripts/autoexec/MidAirDetRep.cs
Normal file
151
Classic/scripts/autoexec/MidAirDetRep.cs
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
// MidAir Detection Replacement
|
||||||
|
// For CTF, LCTF, DM
|
||||||
|
// Script By: DarkTiger
|
||||||
|
// v1.0
|
||||||
|
//
|
||||||
|
$MADR::Minimum = 10;
|
||||||
|
|
||||||
|
//Replacing Classic Midair Hit Detection
|
||||||
|
//
|
||||||
|
//function ProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal)
|
||||||
|
//{
|
||||||
|
// if(!isObject(%targetObject) && !isObject(%projectile.sourceObject))
|
||||||
|
// return;
|
||||||
|
// if(!(%targetObject.getType() & ($TypeMasks::StaticTSObjectType | $TypeMasks::InteriorObjectType |
|
||||||
|
// $TypeMasks::TerrainObjectType | $TypeMasks::WaterObjectType)))
|
||||||
|
// {
|
||||||
|
// if(%projectile.sourceObject.team !$= %targetObject.team)
|
||||||
|
// {
|
||||||
|
// if(%targetObject.getDataBlock().getClassName() $= "PlayerData" && %data.getName() $= "DiscProjectile")
|
||||||
|
// {
|
||||||
|
// %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType;
|
||||||
|
// %start = %targetObject.getWorldBoxCenter();
|
||||||
|
// %distance = mFloor(VectorDist(%start, %projectile.initialPosition));
|
||||||
|
// %end = getWord(%start, 0) SPC getWord(%start, 1) SPC getWord(%start, 2) - 15;
|
||||||
|
// %grounded = ContainerRayCast(%start, %end, %mask, 0);
|
||||||
|
// if(!%grounded)
|
||||||
|
// {
|
||||||
|
// %projectile.sourceObject.client.scoreMidAir++;
|
||||||
|
// messageClient(%projectile.sourceObject.client, 'MsgMidAir', '\c0You received a %1 point bonus for a successful mid air shot.~wfx/misc/bounty_bonus.wav', Game.SCORE_PER_MIDAIR, %data.radiusDamageType, %distance);
|
||||||
|
// messageTeamExcept(%projectile.sourceObject.client, 'MsgMidAir', '\c5%1 hit a mid air shot.', %projectile.sourceObject.client.name, %data.radiusDamageType, %distance);
|
||||||
|
// Game.recalcScore(%projectile.sourceObject.client);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// Parent::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
package midAirMsg
|
||||||
|
{
|
||||||
|
|
||||||
|
function detonateGrenade(%obj) // from lakRabbitGame.cs for grenade tracking
|
||||||
|
{
|
||||||
|
%obj.maNade = 1;
|
||||||
|
$maObjExplode = %obj;
|
||||||
|
parent::detonateGrenade(%obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ProjectileData::onExplode(%data, %proj, %pos, %mod)
|
||||||
|
{
|
||||||
|
%cl = %proj.sourceObject.client;
|
||||||
|
|
||||||
|
if(isObject(%cl))
|
||||||
|
%cl.expData = %data TAB %proj.initialPosition TAB %pos;
|
||||||
|
|
||||||
|
parent::onExplode(%data, %proj, %pos, %mod);
|
||||||
|
}
|
||||||
|
|
||||||
|
function DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement, %damageLoc)
|
||||||
|
{
|
||||||
|
if(%game.class $= "CTFGame" || %game.class $= "DMGame" || %game.class $= "SCtFGame") // did it this way so dont have to copy paste 3 fucntions
|
||||||
|
{
|
||||||
|
if(isObject(%clVictim.player) && isObject(%clAttacker.player))
|
||||||
|
{
|
||||||
|
if(%clVictim != %clAttacker && %clVictim.team != %clAttacker.team)
|
||||||
|
{
|
||||||
|
%dist = vectorDist(%clAttacker.player.getPosition(), %clVictim.player.getPosition());
|
||||||
|
switch$(%damageType)
|
||||||
|
{
|
||||||
|
//case $DamageType::Blaster:
|
||||||
|
//if(maRayTestDis(%clVictim.player) >= $MADR::Minimum)
|
||||||
|
//maMessage(%clAttacker,"Blaster",%dist);
|
||||||
|
case $DamageType::Plasma:
|
||||||
|
if(maRayTestDis(%clVictim.player) >= $MADR::Minimum && maDirect(%clAttacker))
|
||||||
|
maMessage(%clAttacker,"Plasma Rifle",%dist);
|
||||||
|
case $DamageType::Disc:
|
||||||
|
if(maRayTestDis(%clVictim.player) >= $MADR::Minimum && maDirect(%clAttacker))
|
||||||
|
maMessage(%clAttacker,"Spinfusor",%dist);
|
||||||
|
case $DamageType::Grenade:
|
||||||
|
if($dtObjExplode.dtNade)
|
||||||
|
{//for hand genades method out of lakRabbit
|
||||||
|
//if(maRayTestDis(%clVictim.player) >= $MADR::Minimum)
|
||||||
|
//maMessage(%clAttacker,"Hand Grenade",%dist);
|
||||||
|
}
|
||||||
|
else //Grenade Launcher
|
||||||
|
{
|
||||||
|
if(maRayTestDis(%clVictim.player) >= $MADR::Minimum && maDirect(%clAttacker))
|
||||||
|
maMessage(%clAttacker,"Grenade Launcher",%dist);
|
||||||
|
}
|
||||||
|
//case $DamageType::Laser:
|
||||||
|
//if(maRayTestDis(%clVictim.player) >= $MADR::Minimum)
|
||||||
|
//maMessage(%clAttacker,"Laser Rifle",%dist);
|
||||||
|
case $DamageType::Mortar:
|
||||||
|
if(maRayTestDis(%clVictim.player) >= $MADR::Minimum && maDirect(%clAttacker))
|
||||||
|
maMessage(%clAttacker,"Fusion Mortar",%dist);
|
||||||
|
//case $DamageType::ShockLance:
|
||||||
|
//if(maRayTestDis(%clVictim.player) >= $MADR::Minimum)
|
||||||
|
//maMessage(%clAttacker,"ShockLance",%dist);
|
||||||
|
//case $DamageType::Mine:
|
||||||
|
//if(maRayTestDis(%clVictim.player) >= $MADR::Minimum)
|
||||||
|
//maMessage(%clAttacker,"Mine",%dist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement, %damageLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Prevent package from being activated if it is already
|
||||||
|
if(!isActivePackage(midAirMsg))
|
||||||
|
activatePackage(midAirMsg);
|
||||||
|
|
||||||
|
function maDirect(%client)// tests for direct hit with aoe weapons
|
||||||
|
{
|
||||||
|
%field = %client.expData;
|
||||||
|
%data = getField(%field,0); %sPos = getField(%field,1); %ePos = getField(%field,2);
|
||||||
|
|
||||||
|
if(%data.hasDamageRadius)
|
||||||
|
{
|
||||||
|
%mask = $TypeMasks::PlayerObjectType;
|
||||||
|
%vec = vectorNormalize(vectorSub(%ePos,%sPos));
|
||||||
|
%ray = containerRayCast(%ePos, VectorAdd(%ePos, VectorScale(VectorNormalize(%vec), 5)), %mask, -1);
|
||||||
|
if(%ray)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function maRayTestDis(%targetObject)// tests for height of target
|
||||||
|
{
|
||||||
|
%mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType;
|
||||||
|
%rayStart = %targetObject.getWorldBoxCenter();
|
||||||
|
%rayEnd = VectorAdd(%rayStart,"0 0" SPC -5000);
|
||||||
|
%ray = ContainerRayCast(%rayStart, %rayEnd, %mask, %targetObject);
|
||||||
|
|
||||||
|
if(%ray)
|
||||||
|
return vectorDist(%rayStart,getWords(%ray,1,3)) - 1.15;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function maMessage(%client,%porjName,%distance)// Send message
|
||||||
|
{
|
||||||
|
%client.scoreMidAir++;
|
||||||
|
messageClient(%client, 'MsgMidAir', '\c0You received a %1 point bonus for a successful mid air shot. [%2m, %3]~wfx/misc/bounty_bonus.wav', Game.SCORE_PER_MIDAIR, mFloor(%distance), %porjName);
|
||||||
|
messageTeamExcept(%client, 'MsgMidAir', '\c5%1 hit a mid air shot. [%2m, %3]', %client.name, mFloor(%distance), %porjName);
|
||||||
|
Game.recalcScore(%client);
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue