‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
scoreevents_shared.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\killstreaks_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\util_shared;
7 #using scripts\shared\abilities\_ability_power;
8 #using scripts\shared\gameskill_shared;
9 
10 #insert scripts\shared\shared.gsh;
11 
12 #insert scripts\shared\abilities\_ability_util.gsh;
13 #insert scripts\shared\scoreevents_shared.gsh;
14 
15 
16 #namespace scoreevents;
17 
18 
19 function ‪processScoreEvent( event, player, victim, weapon )
20 {
21  pixbeginevent("processScoreEvent");
22 
23  scoreGiven = 0;
24  if ( !isplayer(player) )
25  {
26  AssertMsg("processScoreEvent called on non player entity: " + event );
27  return scoreGiven;
28  }
29 
30  if( GetDvarInt( "teamOpsEnabled" ) == 1 )
31  {
32  if ( isdefined( level.teamopsOnProcessPlayerEvent ) )
33  {
34  level [[level.teamopsOnProcessPlayerEvent]]( event, player );
35  }
36  }
37 
38  if ( isdefined( level.challengesOnEventReceived ) )
39  {
40  player thread [[level.challengesOnEventReceived]]( event );
41  }
42 
43  if ( ‪isRegisteredEvent( event ) && (!SessionModeIsZombiesGame() || level.onlineGame) )
44  {
45  allowPlayerScore = false;
46 
47  if ( !isdefined( weapon ) || !‪killstreaks::is_killstreak_weapon( weapon ) )
48  {
49  allowPlayerScore = true;
50  }
51  else
52  {
53  allowPlayerScore = ‪killstreakWeaponsAllowedScore( event );
54  }
55 
56  if ( allowPlayerScore )
57  {
58  if ( isdefined( level.scoreOnGivePlayerScore ) )
59  {
60  scoreGiven = [[level.scoreOnGivePlayerScore]]( event, player, victim, undefined, weapon );
61  isScoreEvent = ( scoreGiven > 0 );
62 
63  if ( isScoreEvent )
64  {
65  hero_restricted = ‪is_hero_score_event_restricted( event );
66 
67  player ‪ability_power::power_gain_event_score( victim, scoreGiven, weapon, hero_restricted );
68  }
69  }
70  }
71  }
72 
73  if ( ‪shouldAddRankXP( player ) && ( GetDvarInt( "teamOpsEnabled" ) == 0 ) )
74  {
75  pickedup = false;
76  if( isdefined( weapon) && isdefined( player.pickedUpWeapons ) && isdefined( player.pickedUpWeapons[weapon] ) )
77  {
78  pickedup = true;
79  }
80 
81  // In CP, the player earns an XP multiplier by playing on harder difficulties.
82  if (SessionModeIsCampaignGame())
83  {
84  // Determine game difficulty. Player receives an XP multiplier for harder difficulties.
85  xp_difficulty_multiplier = player ‪gameskill::get_player_xp_difficulty_multiplier();
86  }
87  else
88  {
89  // No multiplier if not in CP.
90  xp_difficulty_multiplier = 1;
91  }
92 
93  player AddRankXp( event, weapon, player.class_num, pickedup, isScoreEvent, xp_difficulty_multiplier );
94  }
95 
96  pixendevent();
97 
98  // In campaign, use the same difficulty modifier and apply it to the player's score for killing enemies.
99  if (SessionModeIsCampaignGame() && isdefined(xp_difficulty_multiplier))
100  {
101  // Only apply a score multiplier if we killed an enemy.
102  if (isdefined(victim) && isdefined(victim.team))
103  {
104  if (victim.team == "axis" || victim.team == "team3")
105  {
106  scoreGiven *= xp_difficulty_multiplier;
107  }
108  }
109  }
110 
111  return scoreGiven;
112 }
113 
114 
115 function ‪shouldAddRankXP( player )
116 {
117  if( ‪IS_BONUSZM )
118  {
119  return false;
120  }
121 
122  if( level.gametype == "fr" )
123  {
124  return false;
125  }
126 
127  if ( !isdefined( level.rankCap ) || level.rankCap == 0 )
128  {
129  return true;
130  }
131 
132  if ( ( player.pers[ "plevel" ] > 0 ) || ( player.pers[ "rank" ] > level.rankCap ) )
133  {
134  return false;
135  }
136 
137  return true;
138 }
139 
140 
141 function ‪uninterruptedObitFeedKills( attacker, weapon )
142 {
143  self endon( "disconnect" );
144  wait .1;
146  wait .1;
147 
148  ‪scoreevents::processScoreEvent( "uninterrupted_obit_feed_kills", attacker, self, weapon );
149 }
150 
151 
152 function ‪isRegisteredEvent( type )
153 {
154  if ( isdefined( level.scoreInfo[type] ) )
155  return true;
156  else
157  return false;
158 }
159 
160 
162 {
163  level endon( "reset_obituary_count" );
165  level.lastObituaryPlayerCount--;
166  assert( level.lastObituaryPlayerCount >= 0 );
167 }
168 
170 {
171  if ( SessionModeIsCampaignGame() )
172  {
174  }
175  else if ( SessionModeIsZombiesGame() )
176  {
178  }
179  else
180  {
182  }
183 }
184 
186 {
187  scoreInfoTableLoaded = false;
188  scoreInfoTableID = TableLookupFindCoreAsset( ‪getScoreEventTableName() );
189 
190  if ( isdefined( scoreInfoTableID ) )
191  {
192  scoreInfoTableLoaded = true;
193  }
194  assert( scoreInfoTableLoaded, "Score Event Table is not loaded: " + ‪getScoreEventTableName() );
195  return scoreInfoTableID;
196 }
197 
198 function ‪getScoreEventColumn( gameType )
199 {
200  columnOffset = ‪getColumnOffsetForGametype( gameType );
201  assert( columnOffset >= 0 );
202  if ( columnOffset >= 0 )
203  {
204  columnOffset += ‪SCORE_EVENT_GAMETYPE_COLUMN_SCORE;
205  }
206  return columnOffset;
207 }
208 
209 function ‪getXPEventColumn( gameType )
210 {
211  columnOffset = ‪getColumnOffsetForGametype( gameType );
212  assert( columnOffset >= 0 );
213  if ( columnOffset >= 0 )
214  {
215  columnOffset += ‪SCORE_EVENT_GAMETYPE_COLUMN_XP;
216  }
217  return columnOffset;
218 }
219 
220 function ‪getColumnOffsetForGametype( gameType )
221 {
222  foundGameMode = false;
223  if ( !isdefined ( level.scoreEventTableID ) )
224  {
225  level.scoreEventTableID = ‪getScoreEventTableID();
226  }
227 
228  assert( isdefined ( level.scoreEventTableID ) );
229  if ( !isdefined ( level.scoreEventTableID ) )
230  {
231  return -1;
232  }
233 
234  for ( gameModeColumn = ‪SCOREINFOTABLE_GAMETYPE_SCORE; ; gameModeColumn += ‪SCORE_EVENT_GAMETYPE_COLUMN_COUNT )
235  {
236  column_header = TableLookupColumnForRow( level.scoreEventTableID, 0, gameModeColumn );
237  if ( column_header == "" )
238  {
239  gameModeColumn = ‪SCOREINFOTABLE_GAMETYPE_SCORE;
240  break;
241  }
242 
243  if ( column_header == level.gameType + " score" )
244  {
245  foundGameMode = true;
246  break;
247  }
248  }
249 
250  assert( foundGameMode, "Could not find gamemode in scoreInfo.csv:" + gameType );
251  return gameModeColumn;
252 }
253 
255 {
256  if( GetDvarInt( "teamOpsEnabled" ) == 1 )
257  return false;
258 
259  if( isdefined( level.scoreInfo[type]["allowKillstreakWeapons"] ) && level.scoreInfo[type]["allowKillstreakWeapons"] == true )
260  {
261  return true;
262  }
263  else
264  {
265  return false;
266  }
267 }
268 
270 {
271  if( !isdefined( level.scoreInfo[event]["allow_hero"] ) || level.scoreInfo[event]["allow_hero"] != true )
272  {
273  return true;
274  }
275 
276  return false;
277 }
278 
279 function ‪giveCrateCaptureMedal( crate, capturer )
280 {
281  if ( isdefined( crate ) && isdefined( capturer ) && isdefined( crate.owner ) && isplayer( crate.owner ) )
282  {
283  if ( level.teambased )
284  {
285  if ( capturer.team != crate.owner.team )
286  {
287  crate.owner playlocalsound( "mpl_crate_enemy_steals" );
288  // don't give a medal for capturing a booby trapped crate
289  if( !IsDefined( crate.hacker ) )
290  {
291  ‪scoreevents::processScoreEvent( "capture_enemy_crate", capturer );
292  }
293  }
294  else
295  {
296  if ( isdefined ( crate.owner ) && ( capturer != crate.owner ) )
297  {
298  crate.owner playlocalsound( "mpl_crate_friendly_steals" );
299  // don't give a medal for capturing a booby trapped crate
300  if( !IsDefined( crate.hacker ) )
301  {
302  level.globalSharePackages++;
303  ‪scoreevents::processScoreEvent( "share_care_package", crate.owner );
304  }
305  }
306  }
307  }
308  else
309  {
310  if ( capturer != crate.owner )
311  {
312  crate.owner playlocalsound( "mpl_crate_enemy_steals" );
313  // don't give a medal for capturing a booby trapped crate
314  if( !IsDefined( crate.hacker ) )
315  {
316  ‪scoreevents::processScoreEvent( "capture_enemy_crate", capturer );
317  }
318  }
319  }
320  }
321 }
322 
324 {
325  if ( !isdefined( level.hero_ability_kill_events ) )
326  level.hero_ability_kill_events = [];
327 
328  level.hero_ability_kill_events[ level.hero_ability_kill_events.size ] = event_func;
329 }
330 
332 {
333  if ( !isdefined( level.hero_ability_multikill_events ) )
334  level.hero_ability_multikill_events = [];
335 
336  level.hero_ability_multikill_events[ level.hero_ability_multikill_events.size ] = event_func;
337 }
338 
340 {
341  if ( !isdefined( level.hero_weapon_multikill_events ) )
342  level.hero_weapon_multikill_events = [];
343 
344  level.hero_weapon_multikill_events[ level.hero_weapon_multikill_events.size ] = event_func;
345 }
346 
348 {
349  if ( !isdefined( level.thief_shutdown_enemy_events ) )
350  level.thief_shutdown_enemy_events = [];
351 
352  level.thief_shutdown_enemy_events[ level.thief_shutdown_enemy_events.size ] = event_func;
353 }
354 
355 function ‪hero_ability_kill_event( ability, victim_ability )
356 {
357  if ( !isdefined( level.hero_ability_kill_events ) )
358  return;
359 
360  foreach( event_func in level.hero_ability_kill_events )
361  {
362  if ( isdefined( event_func ) )
363  {
364  self [[ event_func ]]( ability, victim_ability );
365  }
366  }
367 }
368 
369 function ‪hero_ability_multikill_event( killcount, ability )
370 {
371  if ( !isdefined( level.hero_ability_multikill_events ) )
372  return;
373 
374  foreach( event_func in level.hero_ability_multikill_events )
375  {
376  if ( isdefined( event_func ) )
377  {
378  self [[ event_func ]]( killcount, ability );
379  }
380  }
381 }
382 
383 function ‪hero_weapon_multikill_event( killcount, weapon )
384 {
385  if ( !isdefined( level.hero_weapon_multikill_events ) )
386  return;
387 
388  foreach( event_func in level.hero_weapon_multikill_events )
389  {
390  if ( isdefined( event_func ) )
391  {
392  self [[ event_func ]]( killcount, weapon );
393  }
394  }
395 }
396 
398 {
399  if ( !isdefined( level.thief_shutdown_enemy_event ) )
400  return;
401 
402  foreach( event_func in level.thief_shutdown_enemy_event )
403  {
404  if ( isdefined( event_func ) )
405  {
406  self [[ event_func ]]();
407  }
408  }
409 }
‪processScoreEvent
‪function processScoreEvent(event, player, victim, weapon)
Definition: scoreevents_shared.gsc:19
‪shouldAddRankXP
‪function shouldAddRankXP(player)
Definition: scoreevents_shared.gsc:115
‪getScoreEventTableID
‪function getScoreEventTableID()
Definition: scoreevents_shared.gsc:185
‪SCORE_EVENT_TABLE_NAME_ZM
‪#define SCORE_EVENT_TABLE_NAME_ZM
Definition: scoreevents_shared.gsh:3
‪SCOREINFOTABLE_GAMETYPE_SCORE
‪#define SCOREINFOTABLE_GAMETYPE_SCORE
Definition: scoreevents_shared.gsh:19
‪SCORE_EVENT_TABLE_NAME_MP
‪#define SCORE_EVENT_TABLE_NAME_MP
Definition: scoreevents_shared.gsh:2
‪register_thief_shutdown_enemy_event
‪function register_thief_shutdown_enemy_event(event_func)
Definition: scoreevents_shared.gsc:347
‪decrementLastObituaryPlayerCountAfterFade
‪function decrementLastObituaryPlayerCountAfterFade()
Definition: scoreevents_shared.gsc:161
‪SCORE_EVENT_TABLE_NAME_CP
‪#define SCORE_EVENT_TABLE_NAME_CP
Definition: scoreevents_shared.gsh:1
‪SCORE_EVENT_OBITUARY_CENTERTIME
‪#define SCORE_EVENT_OBITUARY_CENTERTIME
Definition: scoreevents_shared.gsh:30
‪register_hero_ability_multikill_event
‪function register_hero_ability_multikill_event(event_func)
Definition: scoreevents_shared.gsc:331
‪hero_ability_kill_event
‪function hero_ability_kill_event(ability, victim_ability)
Definition: scoreevents_shared.gsc:355
‪SCORE_EVENT_GAMETYPE_COLUMN_SCORE
‪#define SCORE_EVENT_GAMETYPE_COLUMN_SCORE
Definition: scoreevents_shared.gsh:22
‪getXPEventColumn
‪function getXPEventColumn(gameType)
Definition: scoreevents_shared.gsc:209
‪SCORE_EVENT_GAMETYPE_COLUMN_COUNT
‪#define SCORE_EVENT_GAMETYPE_COLUMN_COUNT
Definition: scoreevents_shared.gsh:24
‪getColumnOffsetForGametype
‪function getColumnOffsetForGametype(gameType)
Definition: scoreevents_shared.gsc:220
‪is_killstreak_weapon
‪function is_killstreak_weapon(weapon)
Definition: killstreaks_shared.gsc:16
‪get_player_xp_difficulty_multiplier
‪function get_player_xp_difficulty_multiplier()
Definition: gameskill_shared.gsc:1360
‪register_hero_weapon_multikill_event
‪function register_hero_weapon_multikill_event(event_func)
Definition: scoreevents_shared.gsc:339
‪isRegisteredEvent
‪function isRegisteredEvent(type)
Definition: scoreevents_shared.gsc:152
‪killstreakWeaponsAllowedScore
‪function killstreakWeaponsAllowedScore(type)
Definition: scoreevents_shared.gsc:254
‪hero_weapon_multikill_event
‪function hero_weapon_multikill_event(killcount, weapon)
Definition: scoreevents_shared.gsc:383
‪is_hero_score_event_restricted
‪function is_hero_score_event_restricted(event)
Definition: scoreevents_shared.gsc:269
‪register_hero_ability_kill_event
‪function register_hero_ability_kill_event(event_func)
Definition: scoreevents_shared.gsc:323
‪getScoreEventTableName
‪function getScoreEventTableName()
Definition: scoreevents_shared.gsc:169
‪power_gain_event_score
‪function power_gain_event_score(eAttacker, score, weapon, hero_restricted)
Definition: _ability_power.gsc:52
‪SCORE_EVENT_GAMETYPE_COLUMN_XP
‪#define SCORE_EVENT_GAMETYPE_COLUMN_XP
Definition: scoreevents_shared.gsh:23
‪thief_shutdown_enemy_event
‪function thief_shutdown_enemy_event()
Definition: scoreevents_shared.gsc:397
‪giveCrateCaptureMedal
‪function giveCrateCaptureMedal(crate, capturer)
Definition: scoreevents_shared.gsc:279
‪uninterruptedObitFeedKills
‪function uninterruptedObitFeedKills(attacker, weapon)
Definition: scoreevents_shared.gsc:141
‪IS_BONUSZM
‪#define IS_BONUSZM
Definition: shared.gsh:532
‪WaitTillSlowProcessAllowed
‪function WaitTillSlowProcessAllowed()
Definition: util_shared.gsc:2536
‪hero_ability_multikill_event
‪function hero_ability_multikill_event(killcount, ability)
Definition: scoreevents_shared.gsc:369
‪getScoreEventColumn
‪function getScoreEventColumn(gameType)
Definition: scoreevents_shared.gsc:198