‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_killstreak_hacking.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\killstreaks_shared;
5 #using scripts\shared\popups_shared;
6 #using scripts\shared\scoreevents_shared;
7 #using scripts\shared\system_shared;
8 #using scripts\shared\util_shared;
9 #using scripts\shared\vehicle_shared;
10 
11 #using scripts\mp\_util;
12 #using scripts\mp\killstreaks\_killstreaks;
13 #using scripts\mp\killstreaks\_killstreak_bundles;
14 
15 #insert scripts\mp\_hacker_tool.gsh;
16 #insert scripts\mp\killstreaks\_killstreaks.gsh;
17 #insert scripts\shared\shared.gsh;
18 #insert scripts\shared\version.gsh;
19 
20 #namespace killstreak_hacking;
21 
22 function ‪enable_hacking( killstreakName, preHackFunction, postHackFunction )
23 {
24  killstreak = self;
25 
26  level.challenge_scorestreaksenabled = true;
27  killstreak.challenge_isScoreStreak = true;
28  killstreak.killstreak_hackedCallback = &‪_hacked_callback;
29  killstreak.killstreakPreHackFunction = preHackFunction;
30  killstreak.killstreakPostHackFunction = postHackFunction;
31  killstreak.hackerToolInnerTimeMs = killstreak ‪killstreak_bundles::get_hack_tool_inner_time();
32  killstreak.hackerToolOuterTimeMs = killstreak ‪killstreak_bundles::get_hack_tool_outer_time();
33  killstreak.hackerToolInnerRadius = killstreak ‪killstreak_bundles::get_hack_tool_inner_radius();
34  killstreak.hackerToolOuterRadius = killstreak ‪killstreak_bundles::get_hack_tool_outer_radius();
35  killstreak.hackerToolRadius = killstreak.hackerToolOuterRadius;
36  killstreak.killstreakHackLoopFX = killstreak ‪killstreak_bundles::get_hack_loop_fx();
37  killstreak.killstreakHackFX = killstreak ‪killstreak_bundles::get_hack_fx();
38  killstreak.killstreakHackScoreEvent = killstreak ‪killstreak_bundles::get_hack_scoreevent();
39  killstreak.killstreakHackLostLineOfSightLimitMs = killstreak ‪killstreak_bundles::get_lost_line_of_sight_limit_msec();
40  killstreak.killstreakHackLostLineOfSightTimeMs = killstreak ‪killstreak_bundles::get_hack_tool_no_line_of_sight_time();
41 
42  killstreak.killstreak_hackedProtection = killstreak ‪killstreak_bundles::get_hack_protection();
43 }
44 
46 {
47  killstreak = self;
48 
49  killstreak.killstreak_hackedCallback = undefined;
50 }
51 
52 function ‪hackerFX()
53 {
54  killstreak = self;
55 
56  if ( isdefined( killstreak.killstreakHackFX ) && killstreak.killstreakHackFX != "" )
57  {
58  playfxontag( killstreak.killstreakHackFX, killstreak, "tag_origin" );
59  }
60 }
61 
62 function ‪hackerLoopFX()
63 {
64  killstreak = self;
65 
66  if ( isdefined( killstreak.killstreakLoopHackFX ) && killstreak.killstreakLoopHackFX != "" )
67  {
68  playfxontag( killstreak.killstreakLoopHackFX, killstreak, "tag_origin" );
69  }
70 }
71 
72 function private ‪_hacked_callback( hacker )
73 {
74  killstreak = self;
75 
76  originalOwner = killstreak.owner;
77 
78  if ( isdefined( killstreak.killstreakHackScoreEvent ) )
79  {
80  scoreevents::processscoreevent( killstreak.killstreakHackScoreEvent, hacker, originalOwner, level.weaponHackerTool );
81  }
82 
83  if ( isdefined( killstreak.killstreakPreHackFunction ) )
84  {
85  killstreak thread [[killstreak.killstreakPreHackFunction]]( hacker );
86  }
87 
88  killstreak ‪killstreaks::configure_team_internal( hacker, true );
89  killstreak ‪clientfield::set( "enemyvehicle", ENEMY_VEHICLE_HACKED );
90  if ( isdefined ( killstreak.killstreakHackFX ) )
91  {
92  killstreak thread ‪hackerFX();
93  }
94  if ( isdefined ( killstreak.killstreakHackLoopFX ) )
95  {
96  killstreak thread ‪hackerLoopFX();
97  }
98 
99  if ( isdefined( killstreak.killstreakPostHackFunction ) )
100  {
101  killstreak thread [[killstreak.killstreakPostHackFunction]]( hacker );
102  }
103 
104  killstreakType = killstreak.killstreakType;
105  if ( isdefined ( killstreak.hackedKillstreakRef ) )
106  {
107  killstreakType = killstreak.hackedKillstreakRef;
108  }
109 
110  level thread ‪popups::DisplayKillstreakHackedTeamMessageToAll( killstreakType, hacker );
111 
112  killstreak ‪_update_health( hacker );
113 }
114 
115 function ‪override_hacked_killstreak_reference( KillstreakRef )
116 {
117  killstreak = self;
118 
119  killstreak.hackedKillstreakRef = KillstreakRef;
120 }
121 
123 {
124  killstreak = self;
125 
127 
128 
129  if ( !isdefined( ‪timeout ) || ‪timeout <= 0 )
130  {
131 /#
132  assertmsg( "get_hacked_timeout_duration_ms(): Set \"" + killstreak.killstreakType + "\" to a greater than zero value, in the killstreaks GDT" );
133 #/
134  return;
135  }
136 
137  return ‪timeout * 1000;
138 }
139 
140 function ‪set_vehicle_drivable_time_starting_now( killstreak, duration_ms = (-1) ) // self == player
141 {
142  if ( duration_ms == -1 )
143  duration_ms = killstreak ‪get_hacked_timeout_duration_ms();
144 
145  return self ‪vehicle::set_vehicle_drivable_time_starting_now( duration_ms );
146 }
147 
148 function ‪_update_health( hacker )
149 {
150  killstreak = self;
151 
152  if ( isdefined ( killstreak.hackedHealthUpdateCallback ) )
153  {
154  killstreak [[ killstreak.hackedHealthUpdateCallback ]]( hacker );
155  }
156  else if ( IsSentient( killstreak ) )
157  {
158  hackedHealth = ‪killstreak_bundles::get_hacked_health( killstreak.killstreakType );
159  assert( isdefined( hackedHealth ) );
160  if ( self.health > hackedhealth )
161  {
162  self.health = hackedhealth;
163  }
164  }
165  else
166  {
167  /#hacker iprintlnbold( "Hacked but no update of health occured" );#/
168  }
169 }
170 
171 /#
173 {
174  killstreakEntity = self;
175  killstreakEntity notify( "killstreak_switch_team_end" );
176 }
177 
178 function ‪killstreak_switch_team( owner )
179 {
180  killstreakEntity = self;
181  killstreakEntity notify( "killstreak_switch_team_singleton" );
182  killstreakEntity endon( "killstreak_switch_team_singleton" );
183  killstreakEntity endon( "death" );
184 
185  //Init my dvar
186  SetDvar("scr_killstreak_switch_team", "");
187 
188  while( true )
189  {
190  wait(0.5);
191 
192  //Grab my dvar every .5 seconds in the form of an int
193  devgui_int = GetDvarint( "scr_killstreak_switch_team");
194 
195  //"" returns as zero with GetDvarInt
196  if(devgui_int != 0)
197  {
198  // spawn a larry to be the opposing team
199  team = "autoassign";
200 
201  if( isdefined( level.getEnemyTeam ) && isdefined( owner ) && isdefined( owner.team ) )
202  {
203  team = [[level.getEnemyTeam]]( owner.team );
204  }
205 
206  if ( isdefined( level.devOnGetOrMakeBot ) )
207  {
208  player = [[level.devOnGetOrMakeBot]]( team );
209  }
210 
211  if( !isdefined( player ) )
212  {
213  println("Could not add test client");
214  wait 1;
215  continue;
216  }
217 
218  if ( !isdefined( killstreakEntity.killstreak_hackedCallback ) )
219  {
220 /#
221  iprintlnbold( "missing hacked callback" );
222 #/
223  return;
224  }
225  killstreakEntity notify( "killstreak_hacked", player );
226  killstreakEntity.previouslyHacked = true;
227  killstreakEntity [[ killstreakEntity.killstreak_hackedCallback ]]( player );
228 
229  wait( 0.5 );
230  SetDvar("scr_killstreak_switch_team", "0");
231  return;
232  }
233  }
234 }
235 #/
236 
‪get_hack_tool_inner_time
‪function get_hack_tool_inner_time()
Definition: _killstreak_bundles.gsc:58
‪timeout
‪function timeout(n_time, func, arg1, arg2, arg3, arg4, arg5, arg6)
Definition: util_shared.csc:762
‪get_hacked_timeout_duration_ms
‪function get_hacked_timeout_duration_ms()
Definition: _killstreak_hacking.gsc:122
‪hackerLoopFX
‪function hackerLoopFX()
Definition: _killstreak_hacking.gsc:62
‪get_hack_tool_no_line_of_sight_time
‪function get_hack_tool_no_line_of_sight_time()
Definition: _killstreak_bundles.gsc:131
‪disable_hacking
‪function disable_hacking()
Definition: _killstreak_hacking.gsc:45
‪get_hack_timeout
‪function get_hack_timeout()
Definition: _killstreak_bundles.gsc:36
‪get_hack_scoreevent
‪function get_hack_scoreevent()
Definition: _killstreak_bundles.gsc:147
‪hackerFX
‪function hackerFX()
Definition: _killstreak_hacking.gsc:52
‪get_lost_line_of_sight_limit_msec
‪function get_lost_line_of_sight_limit_msec()
Definition: _killstreak_bundles.gsc:116
‪DisplayKillstreakHackedTeamMessageToAll
‪function DisplayKillstreakHackedTeamMessageToAll(killstreak, player)
Definition: popups_shared.gsc:102
‪get_hack_protection
‪function get_hack_protection()
Definition: _killstreak_bundles.gsc:44
‪get_hack_loop_fx
‪function get_hack_loop_fx()
Definition: _killstreak_bundles.gsc:174
‪get_hack_fx
‪function get_hack_fx()
Definition: _killstreak_bundles.gsc:160
‪get_hack_tool_inner_radius
‪function get_hack_tool_inner_radius()
Definition: _killstreak_bundles.gsc:86
‪killstreak_switch_team
‪function killstreak_switch_team(owner)
Definition: _killstreak_hacking.gsc:178
‪configure_team_internal
‪function configure_team_internal(owner, isHacked)
Definition: _killstreaks.gsc:2839
‪set_vehicle_drivable_time_starting_now
‪function set_vehicle_drivable_time_starting_now(killstreak, duration_ms=(-1))
Definition: _killstreak_hacking.gsc:140
‪killstreak_switch_team_end
‪function killstreak_switch_team_end()
Definition: _killstreak_hacking.gsc:172
‪override_hacked_killstreak_reference
‪function override_hacked_killstreak_reference(KillstreakRef)
Definition: _killstreak_hacking.gsc:115
‪_update_health
‪function _update_health(hacker)
Definition: _killstreak_hacking.gsc:148
‪get_hacked_health
‪function get_hacked_health(killstreakType)
Definition: _killstreak_bundles.gsc:202
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪_hacked_callback
‪function private _hacked_callback(hacker)
Definition: _killstreak_hacking.gsc:72
‪get_hack_tool_outer_radius
‪function get_hack_tool_outer_radius()
Definition: _killstreak_bundles.gsc:101
‪enable_hacking
‪function enable_hacking(killstreakName, preHackFunction, postHackFunction)
Definition: _killstreak_hacking.gsc:22
‪get_hack_tool_outer_time
‪function get_hack_tool_outer_time()
Definition: _killstreak_bundles.gsc:72