4 #using scripts\codescripts\struct;
6 #using scripts\shared\callbacks_shared;
7 #using scripts\shared\demo_shared;
8 #using scripts\shared\flag_shared;
9 #using scripts\shared\hud_util_shared;
10 #using scripts\shared\killcam_shared;
11 #using scripts\shared\laststand_shared;
12 #using scripts\shared\scoreevents_shared;
13 #using scripts\shared\system_shared;
14 #using scripts\shared\util_shared;
15 #using scripts\shared\clientfield_shared;
17 #using scripts\shared\abilities\gadgets\_gadget_resurrect;
18 #using scripts\shared\abilities\_ability_util;
20 #insert scripts\shared\shared.gsh;
21 #insert scripts\shared\abilities\_ability_util.gsh;
23 #using scripts\mp\gametypes\_globallogic_player;
24 #using scripts\mp\gametypes\_globallogic_spawn;
25 #using scripts\mp\gametypes\_killcam;
33 if (level.script==
"frontend")
39 function player_last_stand_stats( eInflictor, attacker, iDamage, sMeansOfDeath, weapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration )
42 if ( IsDefined( attacker ) && IsPlayer( attacker ) && attacker !=
self )
46 if (isdefined(weapon))
50 weaponPickedUp =
false;
51 if( isdefined( attacker.pickedUpWeapons ) && isdefined( attacker.pickedUpWeapons[weapon] ) )
53 weaponPickedUp =
true;
56 attacker AddWeaponStat(dmgweapon,
"kills", 1, attacker.class_num, weaponPickedUp );
63 function PlayerLastStand( eInflictor, attacker, iDamage, sMeansOfDeath, weapon, vDir, sHitLoc, psOffsetTime, delayOverride )
70 if ( isdefined(
self.resurrect_not_allowed_by ) )
77 self notify(
"entering_last_stand");
80 if( isDefined( level._game_module_player_laststand_callback ) )
82 self [[ level._game_module_player_laststand_callback ]]( eInflictor, attacker, iDamage, sMeansOfDeath, weapon, vDir, sHitLoc, psOffsetTime, delayOverride );
85 self.lastStandParams = spawnstruct();
86 self.lastStandParams.eInflictor = eInflictor;
87 self.lastStandParams.attacker = attacker;
88 self.lastStandParams.iDamage = iDamage;
89 self.lastStandParams.sMeansOfDeath = sMeansOfDeath;
90 self.lastStandParams.sWeapon = weapon;
91 self.lastStandParams.vDir = vDir;
92 self.lastStandParams.sHitLoc = sHitLoc;
93 self.lastStandParams.lastStandStartTime = gettime();
96 self thread
player_last_stand_stats( eInflictor, attacker, iDamage, sMeansOfDeath, weapon, vDir, sHitLoc, psOffsetTime, delayOverride );
99 self.laststand =
true;
100 self.ignoreme =
true;
101 self EnableInvulnerability();
102 self.meleeAttackers = undefined;
103 self.no_revive_trigger =
true;
107 assert( IsDefined(
self.resurrect_weapon ) );
108 assert(
self.resurrect_weapon != level.weaponNone );
122 self endon(
"death" );
123 self endon(
"disconnect" );
124 self endon(
"bleed_out" );
125 self endon(
"player_input_revive" );
126 self endon(
"player_input_suicide" );
127 level endon(
"game_ended");
131 if(
self getcurrentweapon() !=
self.resurrect_weapon )
133 self SwitchToWeapon(
self.resurrect_weapon );
142 weaponInventory =
self GetWeaponsList(
true );
143 self.lastActiveWeapon =
self GetCurrentWeapon();
144 if (
self IsThrowingGrenade() )
146 primaryWeapons =
self GetWeaponsListPrimaries();
147 if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
149 self.lastActiveWeapon = primaryWeapons[0];
150 self SwitchToWeaponImmediate(
self.lastActiveWeapon );
157 self EnableWeaponCycling();
159 if ( b_allow_grenades )
161 self EnableOffhandWeapons();
164 if( IsDefined(
self.lastActiveWeapon) && (
self.lastActiveWeapon != level.weaponNone) &&
self HasWeapon(
self.lastActiveWeapon ) )
166 self SwitchToWeapon(
self.lastActiveWeapon );
170 primaryWeapons =
self GetWeaponsListPrimaries();
171 if( IsDefined( primaryWeapons ) && primaryWeapons.size > 0 )
173 self SwitchToWeapon( primaryWeapons[0] );
180 self endon(
"do_revive_ended_normally" );
182 reviveTrigger = playerBeingRevived.revivetrigger;
186 if( isdefined( reviveTrigger ) )
188 reviveTrigger
delete();
192 if( isdefined(
self.reviveProgressBar ) )
197 if( isdefined(
self.reviveTextHud ) )
205 self endon(
"do_revive_ended_normally" );
207 playerBeingRevived
util::waittill_any(
"disconnect",
"zombified",
"stop_revive_trigger" );
209 self.is_reviving_any--;
212 self.is_reviving_any = 0;
220 level notify(
"bleed_out",
self.characterindex);
222 self UndoLastStand();
223 self.ignoreme =
false;
224 self.laststand = undefined;
226 self.useLastStandParams =
true;
229 if ( !isDefined(
self.lastStandParams.attacker ) )
231 self.lastStandParams.attacker =
self;
245 level endon(
"game_ended");
247 self endon(
"player_input_bleed_out" );
248 self endon(
"disconnect" );
249 self endon(
"death" );
251 self waittill(
"player_input_revive");
259 self.ignoreme =
false;
260 self DisableInvulnerability();
261 self.laststand = undefined;
266 level endon(
"game_ended");
268 self endon(
"player_input_revive" );
269 self endon(
"disconnect" );
270 self endon(
"death" );
272 self waittill(
"player_input_suicide");