1 #using scripts\codescripts\struct;
3 #using scripts\shared\challenges_shared;
4 #using scripts\shared\spawner_shared;
5 #using scripts\shared\ai\systems\destructible_character;
6 #using scripts\shared\ai\systems\gib;
8 #insert scripts\shared\shared.gsh;
10 #using scripts\zm\gametypes\_damagefeedback;
11 #using scripts\zm\gametypes\_globallogic_player;
12 #using scripts\zm\gametypes\_globallogic_utils;
13 #using scripts\zm\gametypes\_weapons;
15 #using scripts\zm\_challenges;
17 #namespace globallogic_actor;
24 function Callback_ActorDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, modelIndex, surfaceType, vSurfaceNormal )
26 if ( game[
"state"] ==
"postgame" )
29 if (
self.team ==
"spectator" )
32 if ( isdefined( eAttacker ) && isPlayer( eAttacker ) && isdefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat )
35 self.iDFlags = iDFlags;
36 self.iDFlagsTime = getTime();
41 if( !isdefined( vDir ) )
42 iDFlags |= level.iDFLAGS_NO_KNOCKBACK;
46 if ( ((
self.health ==
self.maxhealth)) || !isdefined(
self.attackers ) )
49 self.attackerData = [];
50 self.attackerDamage = [];
54 sMeansOfDeath =
"MOD_HEAD_SHOT";
56 if ( level.onlyHeadShots )
58 if ( sMeansOfDeath ==
"MOD_PISTOL_BULLET" || sMeansOfDeath ==
"MOD_RIFLE_BULLET" )
60 else if ( sMeansOfDeath ==
"MOD_HEAD_SHOT" )
65 if ( IsDefined(
self.aiOverrideDamage ) )
67 for ( index = 0; index <
self.aiOverrideDamage.size; index++ )
69 damageCallback =
self.aiOverrideDamage[index];
70 iDamage =
self [[damageCallback]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, psOffsetTime, boneIndex, modelIndex );
75 iDamage = int( iDamage + 0.5 );
79 if ( weapon == level.weaponNone && isdefined( eInflictor ) )
81 if ( isdefined( eInflictor.targetname ) && eInflictor.targetname ==
"explodable_barrel" )
82 weapon = GetWeapon(
"explodable_barrel" );
83 else if ( isdefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type,
"vehicle_" ) )
84 weapon = GetWeapon(
"destructible_car" );
88 if( !(iDFlags & level.iDFLAGS_NO_PROTECTION) )
90 if ( isPlayer( eAttacker ) )
91 eAttacker.pers[
"participation"]++;
93 prevHealthRatio =
self.health /
self.maxhealth;
95 if ( level.teamBased && isPlayer( eAttacker ) && (
self != eAttacker) && (
self.team == eAttacker.pers[
"team"]) )
97 if ( level.friendlyfire == 0 )
101 else if ( level.friendlyfire == 1 )
107 self.lastDamageWasFromEnemy =
false;
111 self finishActorDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, surfaceType, vSurfaceNormal);
113 else if ( level.friendlyfire == 2 )
117 else if ( level.friendlyfire == 3 )
119 iDamage = int(iDamage * .5);
125 self.lastDamageWasFromEnemy =
false;
129 self finishActorDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, surfaceType, vSurfaceNormal);
137 if ( isdefined( eAttacker ) && isdefined(
self.script_owner ) && eAttacker ==
self.script_owner && !level.hardcoreMode )
143 if ( isdefined( eAttacker ) && isdefined(
self.script_owner ) && isdefined( eAttacker.script_owner ) && eAttacker.script_owner ==
self.script_owner )
152 if ( issubstr( sMeansOfDeath,
"MOD_GRENADE" ) && isdefined( eInflictor ) && isdefined( eInflictor.isCooked ) )
153 self.wasCooked = getTime();
155 self.wasCooked = undefined;
157 self.lastDamageWasFromEnemy = (isdefined( eAttacker ) && (eAttacker !=
self));
161 self finishActorDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, boneIndex, surfaceType, vSurfaceNormal);
165 if ( isdefined(eAttacker) && eAttacker !=
self )
167 if ( !isdefined( eInflictor ) || !isai( eInflictor ) )
169 if ( iDamage > 0 && shitloc !==
"riotshield" )
177 lpselfnum =
self getEntityNumber();
178 lpselfteam =
self.team;
181 if(isPlayer(eAttacker))
183 lpattacknum = eAttacker getEntityNumber();
184 lpattackGuid = eAttacker getGuid();
185 lpattackname = eAttacker.name;
186 lpattackerteam = eAttacker.pers[
"team"];
193 lpattackerteam =
"world";
196 logPrint(
"AD;" + lpselfnum +
";" + lpselfteam +
";" + lpattackGuid +
";" + lpattacknum +
";" + lpattackerteam +
";" + lpattackname +
";" + weapon.name +
";" + iDamage +
";" + sMeansOfDeath +
";" + sHitLoc +
"\n");
204 if ( game[
"state"] ==
"postgame" )
207 if( isai(attacker) && isdefined( attacker.script_owner ) )
211 if ( attacker.script_owner.team !=
self.team )
212 attacker = attacker.script_owner;
215 if( attacker.classname ==
"script_vehicle" && isdefined( attacker.owner ) )
216 attacker = attacker.owner;
218 if ( isdefined( attacker ) && isplayer( attacker ) )
220 if ( !level.teamBased || (
self.team != attacker.pers[
"team"]) )
222 level.globalKillstreaksDestroyed++;
223 attacker AddWeaponStat( GetWeapon(
"dogs" ),
"destroyed", 1 );