1 #using scripts\shared\ai_shared;
2 #using scripts\shared\array_shared;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\math_shared;
6 #using scripts\shared\spawner_shared;
7 #using scripts\shared\gameskill_shared;
8 #using scripts\shared\util_shared;
11 #using scripts\shared\ai\systems\ai_blackboard;
12 #using scripts\shared\ai\systems\ai_interface;
13 #using scripts\shared\ai\systems\animation_state_machine_utility;
14 #using scripts\shared\ai\systems\behavior_tree_utility;
15 #using scripts\shared\ai\systems\blackboard;
16 #using scripts\shared\ai\systems\destructible_character;
17 #using scripts\shared\ai\systems\gib;
18 #using scripts\shared\ai\archetype_cover_utility;
19 #using scripts\shared\ai\archetype_mocomps_utility;
22 #using scripts\shared\ai\archetype_human_blackboard;
25 #using scripts\shared\ai\archetype_notetracks;
28 #using scripts\shared\ai\archetype_human_exposed;
29 #using scripts\shared\ai\archetype_human_cover;
30 #using scripts\shared\ai\archetype_human_locomotion;
33 #using scripts\shared\ai\archetype_human_interface;
35 #using scripts\shared\ai\archetype_utility;
37 #insert scripts\shared\archetype_shared\archetype_shared.gsh;
38 #insert scripts\shared\ai\systems\animation_state_machine.gsh;
39 #insert scripts\shared\ai\systems\blackboard.gsh;
40 #insert scripts\shared\ai\systems\behavior.gsh;
41 #insert scripts\shared\ai\systems\behavior_tree.gsh;
42 #insert scripts\shared\ai\systems\gib.gsh;
43 #insert scripts\shared\shared.gsh;
44 #insert scripts\shared\version.gsh;
46 #precache( "fx", "weapon/fx_hero_annhilatr_death_blood" );
64 level.__ai_forceGibs = GetDvarInt(
"ai_forceGibs" );
75 locomotionTypes =
array(
"alt1",
"alt2",
"alt3",
"alt4" );
76 altIndex = entity GetEntityNumber() % locomotionTypes.size;
111 if(
self.accurateFire )
131 grenadeThrowInfo = SpawnStruct();
132 grenadeThrowInfo.grenadeThrower = entity;
134 "human_grenade_throw",
142 entity.__blackboard = undefined;
152 #define CLOSE_EXPLOSIVE SQR(60)
154 inflictor, attacker,
damage, meansOfDeath, weapon, dir, hitLoc, offsetTime )
164 attackerDistance = 0;
166 if ( IsDefined( attacker ) )
168 attackerDistance = DistanceSquared( attacker.origin, entity.origin );
171 isExplosive = IsInArray(
175 "MOD_GRENADE_SPLASH",
177 "MOD_PROJECTILE_SPLASH",
181 forceGibbing =
false;
183 if ( IsDefined( weapon.weapclass ) && weapon.weapclass ==
"turret" )
188 if ( IsDefined( inflictor ) )
190 isDirectExplosive = IsInArray(
193 "MOD_GRENADE_SPLASH",
195 "MOD_PROJECTILE_SPLASH",
199 isCloseExplosive = DistanceSquared( inflictor.origin, entity.origin ) <=
CLOSE_EXPLOSIVE;
201 if ( isDirectExplosive && isCloseExplosive )
208 if ( forceGibbing || isExplosive ||
209 ( IsDefined( level.__ai_forceGibs ) && level.__ai_forceGibs ) ||
210 ( weapon.doGibbing && ( attackerDistance <=
SQR( weapon.maxGibDistance ) ) ) )
231 else if ( IsInArray(
array(
"head",
"neck",
"helmet" ), hitLoc ) )
241 randomChance = RandomFloatRange( 0, 1 );
243 if ( randomChance < 0.5 )
254 else if ( IsInArray(
array(
"left_hand",
"left_arm_lower",
"left_arm_upper" ), hitLoc ) )
258 else if ( IsInArray(
array(
"right_hand",
"right_arm_lower",
"right_arm_upper" ), hitLoc ) )
280 randomChance = RandomFloatRange( 0, 1 );
282 if ( randomChance < 0.33 )
287 else if ( randomChance < 0.66 )
298 else if ( IsInArray(
array(
"left_leg_upper",
"left_leg_lower",
"left_foot" ), hitLoc ) )
302 else if ( IsInArray(
array(
"right_leg_upper",
"right_leg_lower",
"right_foot" ), hitLoc ) )
320 function DamageOverride( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, boneIndex, modelIndex )
324 entity
DestructServerUtils::HandleDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, boneIndex, modelIndex );
326 if( isDefined( eAttacker) && !isPlayer( eAttacker ) && !isVehicle( eAttacker ) )
328 dist = DistanceSquared( entity.origin, eAttacker.origin );
332 iDamage = Int( iDamage * 10 );
336 iDamage = Int( iDamage * 1.5 );
340 if ( sWeapon.name ==
"incendiary_grenade" )
342 iDamage = entity.health;
348 #namespace HumanSoldierServerUtils;
354 entity AsmChangeAnimMappingTable( 2 );
359 entity AsmChangeAnimMappingTable( 1 );
361 entity AsmChangeAnimMappingTable( 0 );
367 entity.ignorerunAndgundist = value;
372 entity.ignorepathenemyfightdist =
false;
379 entity.ignorepathenemyfightdist =
true;
388 entity AsmChangeAnimMappingTable( 1 );
392 entity AsmChangeAnimMappingTable( 0 );
401 entity.pushable =
true;
402 entity PushActors(
false );
403 entity PushPlayer(
false );
404 entity SetAvoidanceMask(
"avoid all" );
405 entity SetSteeringMode(
"normal steering" );
408 entity.pushable =
false;
409 entity PushActors(
false );
410 entity PushPlayer(
true );
411 entity SetAvoidanceMask(
"avoid ai" );
412 entity SetSteeringMode(
"vignette steering" );
415 entity.pushable =
false;
416 entity PushActors(
true );
417 entity PushPlayer(
true );
418 entity SetAvoidanceMask(
"avoid none" );
419 entity SetSteeringMode(
"vignette steering" );