1 #using scripts\codescripts\struct;
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\challenges_shared;
5 #using scripts\shared\damagefeedback_shared;
6 #using scripts\shared\scoreevents_shared;
7 #using scripts\shared\spawner_shared;
8 #using scripts\shared\weapons\_weapon_utils;
9 #using scripts\shared\ai\systems\destructible_character;
10 #using scripts\shared\ai\systems\gib;
11 #using scripts\shared\abilities\gadgets\_gadget_clone;
13 #using scripts\mp\gametypes\_globallogic;
14 #using scripts\mp\gametypes\_globallogic_player;
15 #using scripts\mp\gametypes\_globallogic_utils;
17 #using scripts\shared\_burnplayer;
18 #using scripts\mp\_challenges;
21 #insert scripts\shared\shared.gsh;
22 #insert scripts\shared\version.gsh;
24 #namespace globallogic_actor;
35 function Callback_ActorDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, modelIndex, surfaceType, vSurfaceNormal )
37 if ( game[
"state"] ==
"postgame" )
40 if (
self.team ==
"spectator" )
43 if ( isdefined( eAttacker ) && isPlayer( eAttacker ) && isdefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat )
46 self.iDFlags = iDFlags;
47 self.iDFlagsTime = getTime();
52 if( !isdefined( vDir ) )
57 if ( ((
self.health ==
self.maxhealth)) || !isdefined(
self.attackers ) )
60 self.attackerData = [];
61 self.attackerDamage = [];
62 self.attackersThisSpawn = [];
67 sMeansOfDeath =
"MOD_HEAD_SHOT";
70 if ( level.onlyHeadShots )
72 if ( sMeansOfDeath ==
"MOD_PISTOL_BULLET" || sMeansOfDeath ==
"MOD_RIFLE_BULLET" )
74 else if ( sMeansOfDeath ==
"MOD_HEAD_SHOT" )
78 if ( isdefined(
self.overrideActorDamage ) )
80 iDamage =
self [[
self.overrideActorDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime, boneIndex, modelIndex );
83 friendlyfire = [[ level.figure_out_friendly_fire ]]( self );
84 if( ( friendlyfire == 0 ) && (
self.archetype ===
"robot" ) && isdefined( eAttacker ) && ( eAttacker.team ===
self.team ) )
88 if ( IsDefined(
self.aiOverrideDamage ) )
90 for ( index = 0; index <
self.aiOverrideDamage.size; index++ )
92 damageCallback =
self.aiOverrideDamage[index];
93 iDamage =
self [[damageCallback]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime, boneIndex, modelIndex );
98 iDamage = int( iDamage + 0.5 );
102 if ( weapon == level.weaponNone && isdefined( eInflictor ) )
104 if ( isdefined( eInflictor.targetname ) && eInflictor.targetname ==
"explodable_barrel" )
105 weapon = GetWeapon(
"explodable_barrel" );
106 else if ( isdefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type,
"vehicle_" ) )
107 weapon = GetWeapon(
"destructible_car" );
113 if ( isPlayer( eAttacker ) )
114 eAttacker.pers[
"participation"]++;
116 prevHealthRatio =
self.health /
self.maxhealth;
118 isShootingOwnClone =
false;
119 if( isDefined(
self.isaiclone ) &&
self.isaiclone && isPlayer( eAttacker ) && (
self.owner == eAttacker ) )
121 isShootingOwnClone =
true;
124 if ( level.teamBased && isPlayer( eAttacker ) && (
self != eAttacker) && (
self.team == eAttacker.pers[
"team"]) && !isShootingOwnClone )
126 friendlyfire = [[ level.figure_out_friendly_fire ]]( self );
128 if ( friendlyfire == 0 )
132 else if ( friendlyfire == 1 )
138 self.lastDamageWasFromEnemy =
false;
142 self finishActorDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, surfaceType, vSurfaceNormal);
144 else if ( friendlyfire == 2 )
148 else if ( friendlyfire == 3 )
150 iDamage = int(iDamage * .5);
156 self.lastDamageWasFromEnemy =
false;
160 self finishActorDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, surfaceType, vSurfaceNormal);
168 if ( isdefined( eAttacker ) && isdefined(
self.script_owner ) && eAttacker ==
self.script_owner && !level.hardcoreMode && !isShootingOwnClone )
174 if ( isdefined( eAttacker ) && isdefined(
self.script_owner ) && isdefined( eAttacker.script_owner ) && eAttacker.script_owner ==
self.script_owner )
183 if ( issubstr( sMeansOfDeath,
"MOD_GRENADE" ) && isdefined( eInflictor ) && isdefined( eInflictor.isCooked ) )
184 self.wasCooked = getTime();
186 self.wasCooked = undefined;
188 self.lastDamageWasFromEnemy = (isdefined( eAttacker ) && (eAttacker !=
self));
192 self finishActorDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, surfaceType, vSurfaceNormal);
195 if ( isdefined(eAttacker) && eAttacker !=
self )
197 if ( weapon.name !=
"artillery" && ( !isdefined( eInflictor ) || !isai( eInflictor ) || !isdefined( eInflictor.controlled ) || eInflictor.controlled ) )
199 if ( iDamage > 0 && shitloc !==
"riotshield" )
209 lpselfnum =
self getEntityNumber();
210 lpselfteam =
self.team;
213 if(isPlayer(eAttacker))
215 lpattacknum = eAttacker getEntityNumber();
216 lpattackGuid = eAttacker getGuid();
217 lpattackname = eAttacker.name;
218 lpattackerteam = eAttacker.pers[
"team"];
225 lpattackerteam =
"world";
228 /#logPrint(
"AD;" + lpselfnum +
";" + lpselfteam +
";" + lpattackGuid +
";" + lpattacknum +
";" + lpattackerteam +
";" + lpattackname +
";" + weapon.name +
";" + iDamage +
";" + sMeansOfDeath +
";" + sHitLoc +
";" + boneIndex +
"\n");#/
235 if ( game[
"state"] ==
"postgame" )
238 if( isai(attacker) && isdefined( attacker.script_owner ) )
242 if ( attacker.script_owner.team !=
self.team )
243 attacker = attacker.script_owner;
246 if( attacker.classname ==
"script_vehicle" && isdefined( attacker.owner ) )
247 attacker = attacker.owner;