1 #using scripts\codescripts\struct;
3 #using scripts\shared\popups_shared;
4 #using scripts\shared\util_shared;
6 #insert scripts\shared\shared.gsh;
7 #insert scripts\mp\killstreaks\_killstreaks.gsh;
9 #using scripts\mp\_util;
10 #using scripts\mp\killstreaks\_killstreaks;
11 #using scripts\mp\killstreaks\_emp;
12 #using scripts\mp\gametypes\_globallogic_audio;
14 #namespace killstreakrules;
18 level.killstreakrules = [];
19 level.killstreaktype = [];
20 level.killstreaks_triggered = [];
21 level.matchRecorderKillstreakKills = [];
23 if( !isdefined( level.globalKillstreaksCalled ) )
25 level.globalKillstreaksCalled = 0;
155 level.killstreakrules[rule] = spawnstruct();
156 level.killstreakrules[rule].cur = 0;
157 level.killstreakrules[rule].curTeam = [];
158 level.killstreakrules[rule].max = maxAllowable;
159 level.killstreakrules[rule].maxPerTeam = maxAllowablePerTeam;
164 if ( !isdefined (level.killstreaktype[killstreak] ) )
165 level.killstreaktype[killstreak] = [];
167 keys = GetArrayKeys( level.killstreaktype[killstreak] );
170 assert( isdefined(level.killstreakrules[rule] ) );
172 if ( !isdefined( level.killstreaktype[killstreak][rule] ) )
173 level.killstreaktype[killstreak][rule] = spawnstruct();
175 level.killstreaktype[killstreak][rule].counts = countTowards;
177 level.killstreaktype[killstreak][rule].checks = checkAgainst;
187 assert( isdefined( team ),
"team needs to be defined" );
193 assert ( isdefined ( hardpointType ) );
195 if( !isdefined( hacked ) )
198 if ( !isdefined( displayTeamMessage ) )
199 displayTeamMessage =
true;
201 if( GetDvarInt(
"teamOpsEnabled" ) == 1 )
202 displayTeamMessage =
false;
204 if ( displayTeamMessage ==
true )
210 keys = GetArrayKeys( level.killstreaktype[hardpointType] );
212 foreach( key
in keys )
215 if ( !level.killstreaktype[hardpointType][key].counts )
218 assert( isdefined(level.killstreakrules[key] ) );
219 level.killstreakrules[key].cur++;
220 if ( level.teambased )
222 if ( !isdefined( level.killstreakrules[key].curTeam[team] ) )
223 level.killstreakrules[key].curTeam[team] = 0;
224 level.killstreakrules[key].curTeam[team]++;
228 level notify(
"killstreak_started", hardpointType, team,
self );
230 killstreak_id = level.globalKillstreaksCalled;
231 level.globalKillstreaksCalled++;
233 killstreak_data = [];
234 killstreak_data[
"caller" ] =
self GetXUID();
235 killstreak_data[
"spawnid" ] = getplayerspawnid(
self );
236 killstreak_data[
"starttime" ] = gettime();
237 killstreak_data[
"type" ] = hardpointType;
238 killstreak_data[
"endtime" ] = 0;
239 level.matchRecorderKillstreakKills[ killstreak_id ] = 0;
241 level.killstreaks_triggered[ killstreak_id ] = killstreak_data;
243 return killstreak_id;
248 if( GetDvarInt(
"teamOpsEnabled" ) == 1 )
251 if ( isdefined( level.killstreaks[hardpointType] ) && isdefined( level.killstreaks[hardpointType].inboundtext ) )
259 player RecordKillstreakEndEvent( eventIndex, recordStreakIndex, totalKills );
261 player.killstreakEvents[recordStreakIndex] = undefined;
268 if(!IsPlayer(player))
271 if(!IsDefined(totalKills))
274 if(!isDefined(player.killstreakEvents))
277 player.killstreakEvents = associativeArray();
279 eventIndex = player.killstreakEvents[recordStreakIndex];
282 if(isDefined(eventIndex))
289 player.killstreakEvents[recordStreakIndex] = totalKills;
296 assert( isdefined( team ),
"team needs to be defined" );
299 assert ( isdefined ( hardpointType ) );
302 keys = GetArrayKeys( level.killstreaktype[hardpointType] );
304 foreach( key
in keys )
307 if ( !level.killstreaktype[hardpointType][key].counts )
310 assert( isdefined(level.killstreakrules[key] ) );
311 level.killstreakrules[key].cur--;
313 assert (level.killstreakrules[key].cur >= 0 );
315 if ( level.teambased )
317 assert( isdefined( team ) );
318 assert( isdefined( level.killstreakrules[key].curTeam[team] ) );
320 level.killstreakrules[key].curTeam[team]--;
321 assert (level.killstreakrules[key].curTeam[team] >= 0 );
329 level.killstreaks_triggered[ id ][
"endtime" ] = GetTime();
331 totalKillsWithThisKillstreak = level.matchRecorderKillstreakKills[ id ];
333 level.killstreaks_triggered[ id ] = undefined;
334 level.matchRecorderKillstreakKills[ id ] = undefined;
336 if( isdefined( level.killstreaks[hardpointType].menuname ) )
338 recordStreakIndex = level.killstreakindices[level.killstreaks[hardpointType].menuname];
339 if ( isdefined(
self ) && isdefined( recordStreakIndex ) && ( !isdefined(
self.activatingKillstreak ) || !
self.activatingKillstreak ) )
342 if(isDefined(entity.owner) )
344 entity = entity.owner;
355 assert( isdefined( team ),
"team needs to be defined" );
358 assert ( isdefined ( hardpointType ) );
366 keys = GetArrayKeys( level.killstreaktype[hardpointType] );
368 foreach( key
in keys )
371 if ( !level.killstreaktype[hardpointType][key].checks )
374 if ( level.killstreakrules[key].max != 0 )
376 if (level.killstreakrules[key].cur >= level.killstreakrules[key].max)
383 if ( level.teambased && level.killstreakrules[key].maxPerTeam != 0 )
385 if ( !isdefined( level.killstreakrules[key].curTeam[team] ) )
386 level.killstreakrules[key].curTeam[team] = 0;
388 if (level.killstreakrules[key].curTeam[team] >= level.killstreakrules[key].maxPerTeam)
397 if ( isdefined(
self.lastStand ) &&
self.lastStand )
404 if (
self IsEMPJammed() )
410 if ( isdefined( level.empEndTime ) )
412 secondsLeft = int( ( level.empendtime - getTime() ) / 1000 );
413 if ( secondsLeft > 0 )
415 self iprintlnbold( &
"KILLSTREAK_NOT_AVAILABLE_EMP_ACTIVE", secondsLeft );
422 if ( isAllowed ==
false )
424 if ( isdefined( level.killstreaks[hardpointType] ) && isdefined( level.killstreaks[hardpointType].notAvailableText ) )
426 self iprintlnbold( level.killstreaks[hardpointType].notAvailableText );
428 if ( !isdefined(
self.currentKillstreakDialog ) && level.killstreaks[hardpointType].utilizesAirspace && isEMPed ==
false )