‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
koth.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\util_shared;
5 
6 #using scripts\mp\_shoutcaster;
7 
8 #insert scripts\shared\shared.gsh;
9 #insert scripts\shared\version.gsh;
10 
11 #precache( "client_fx", "ui/fx_koth_marker_blue" );
12 #precache( "client_fx", "ui/fx_koth_marker_orng" );
13 #precache( "client_fx", "ui/fx_koth_marker_neutral" );
14 #precache( "client_fx", "ui/fx_koth_marker_contested" );
15 #precache( "client_fx", "ui/fx_koth_marker_blue_window" );
16 #precache( "client_fx", "ui/fx_koth_marker_orng_window" );
17 #precache( "client_fx", "ui/fx_koth_marker_neutral_window" );
18 #precache( "client_fx", "ui/fx_koth_marker_contested_window" );
19 #precache( "client_fx", "ui/fx_koth_marker_white" );
20 #precache( "client_fx", "ui/fx_koth_marker_white_window" );
21 
22 #define KS_NEUTRAL 0
23 #define KS_ALLIES 1
24 #define KS_AXIS 2
25 #define KS_CONTESTED 3
26 
27 #define KS_FRIENDLY 1
28 #define KS_ENEMY 2
29 
30 function ‪main()
31 {
32  level.current_zone = [];
33  level.current_state = [];
34  for( i = 0; i < 4; i++ )
35  {
36  level.current_zone[i] = 0;
37  level.current_state[i] = 0;
38  }
39 
40  level.hardPoints = [];
41  level.visuals = [];
42  level.hardPointFX = [];
43 
46 
47  level.effect_scriptbundles = [];
48 
49  level.effect_scriptbundles["zoneEdgeMarker"] = ‪struct::get_script_bundle( "teamcolorfx", "teamcolorfx_koth_edge_marker" );
50  level.effect_scriptbundles["zoneEdgeMarkerWndw"] = ‪struct::get_script_bundle( "teamcolorfx", "teamcolorfx_koth_edge_marker_window" );
51 
52  level._effect["zoneEdgeMarker"] = [];
53  level._effect["zoneEdgeMarker"][‪KS_NEUTRAL] = "ui/fx_koth_marker_neutral";
54  level._effect["zoneEdgeMarker"][‪KS_ALLIES] = "ui/fx_koth_marker_blue";
55  level._effect["zoneEdgeMarker"][‪KS_AXIS] = "ui/fx_koth_marker_orng";
56  level._effect["zoneEdgeMarker"][‪KS_CONTESTED] = "ui/fx_koth_marker_contested";
57 
58  level._effect["zoneEdgeMarkerWndw"] = [];
59  level._effect["zoneEdgeMarkerWndw"][‪KS_NEUTRAL] = "ui/fx_koth_marker_neutral_window";
60  level._effect["zoneEdgeMarkerWndw"][‪KS_ALLIES] = "ui/fx_koth_marker_blue_window";
61  level._effect["zoneEdgeMarkerWndw"][‪KS_AXIS] = "ui/fx_koth_marker_orng_window";
62  level._effect["zoneEdgeMarkerWndw"][‪KS_CONTESTED] = "ui/fx_koth_marker_contested_window";
63 }
64 
65 function ‪get_shoutcaster_fx(local_client_num)
66 {
67  effects = [];
68  effects["zoneEdgeMarker"][‪KS_NEUTRAL] = level._effect["zoneEdgeMarker"][‪KS_NEUTRAL];
69  effects["zoneEdgeMarker"][‪KS_CONTESTED] = level._effect["zoneEdgeMarker"][‪KS_CONTESTED];
70  effects["zoneEdgeMarkerWndw"][‪KS_NEUTRAL] = level._effect["zoneEdgeMarkerWndw"][‪KS_NEUTRAL];
71  effects["zoneEdgeMarkerWndw"][‪KS_CONTESTED] = level._effect["zoneEdgeMarkerWndw"][‪KS_CONTESTED];
72 
73  if ( GetDvarInt("tu11_programaticallyColoredGameFX") )
74  {
75  effects["zoneEdgeMarker"][‪KS_ALLIES] = "ui/fx_koth_marker_white";
76  effects["zoneEdgeMarker"][‪KS_AXIS] = "ui/fx_koth_marker_white";
77  effects["zoneEdgeMarkerWndw"][‪KS_ALLIES] = "ui/fx_koth_marker_white_window";
78  effects["zoneEdgeMarkerWndw"][‪KS_AXIS] = "ui/fx_koth_marker_white_window";
79  }
80  else
81  {
82  caster_effects = [];
83  caster_effects["zoneEdgeMarker"] = ‪shoutcaster::get_color_fx( local_client_num, level.effect_scriptbundles["zoneEdgeMarker"] );
84  caster_effects["zoneEdgeMarkerWndw"] = ‪shoutcaster::get_color_fx( local_client_num, level.effect_scriptbundles["zoneEdgeMarkerWndw"] );
85 
86  effects["zoneEdgeMarker"][‪KS_ALLIES] = caster_effects["zoneEdgeMarker"]["allies"];
87  effects["zoneEdgeMarker"][‪KS_AXIS] = caster_effects["zoneEdgeMarker"]["axis"];
88  effects["zoneEdgeMarkerWndw"][‪KS_ALLIES] = caster_effects["zoneEdgeMarkerWndw"]["allies"];
89  effects["zoneEdgeMarkerWndw"][‪KS_AXIS] = caster_effects["zoneEdgeMarkerWndw"]["axis"];
90  }
91 
92  return effects;
93 }
94 
95 function ‪get_fx_state( local_client_num, state, ‪is_shoutcaster )
96 {
97  if ( ‪is_shoutcaster )
98  return state;
99 
100  if ( state == ‪KS_ALLIES )
101  {
102  if ( ‪util::friend_not_foe_team( local_client_num, "allies" ) )
103  return ‪KS_FRIENDLY;
104  else
105  return ‪KS_ENEMY;
106  }
107  else if ( state == ‪KS_AXIS )
108  {
109  if ( ‪util::friend_not_foe_team( local_client_num, "axis" ) )
110  return ‪KS_FRIENDLY;
111  else
112  return ‪KS_ENEMY;
113  }
114 
115  return state;
116 }
117 
118 function ‪get_fx( fx_name, fx_state, effects )
119 {
120  return effects[fx_name][fx_state];
121 }
122 
123 function ‪setup_hardpoint_fx( local_client_num, zone_index, state )
124 {
125  effects = [];
126 
128  {
129  effects = ‪get_shoutcaster_fx(local_client_num);
130  }
131  else
132  {
133  effects["zoneEdgeMarker"] = level._effect["zoneEdgeMarker"];
134  effects["zoneEdgeMarkerWndw"] = level._effect["zoneEdgeMarkerWndw"];
135  }
136 
137  if ( isdefined( level.hardPointFX[local_client_num] ) )
138  {
139  foreach ( fx in level.hardPointFX[local_client_num] )
140  {
141  StopFx( local_client_num, fx );
142  }
143  }
144  level.hardPointFX[local_client_num] = [];
145 
146  if ( zone_index )
147  {
148  if ( isdefined( level.visuals[zone_index] ) )
149  {
150  fx_state = ‪get_fx_state( local_client_num, state, ‪shoutcaster::is_shoutcaster(local_client_num) );
151 
152  foreach ( visual in level.visuals[zone_index] )
153  {
154  if ( !isdefined(visual.script_fxid ) )
155  continue;
156 
157  fxid = ‪get_fx( visual.script_fxid, fx_state, effects );
158 
159  if ( isdefined(visual.angles) )
160  forward = AnglesToForward( visual.angles );
161  else
162  forward = ( 0,0,0 );
163 
164  fxHandle = PlayFX( local_client_num, fxid, visual.origin, forward );
165  level.hardPointFX[local_client_num][level.hardPointFX[local_client_num].size] = fxHandle;
166  if ( isdefined( fxHandle ) )
167  {
168  if ( state == ‪KS_ALLIES )
169  {
170  SetFxTeam( local_client_num, fxHandle, "allies" );
171  }
172  else if ( state == ‪KS_AXIS )
173  {
174  SetFxTeam( local_client_num, fxHandle, "axis" );
175  }
176  else
177  {
178  SetFxTeam( local_client_num, fxHandle, "free" );
179  }
180  }
181  }
182  }
183  }
184 
185  thread ‪watch_for_team_change( local_client_num );
186 }
187 
188 function ‪hardpoint(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
189 {
190  if ( level.hardPoints.size == 0 )
191  {
192  hardpoints = ‪struct::get_array( "koth_zone_center", "targetname" );
193  foreach( point in hardpoints )
194  {
195  level.hardPoints[point.script_index] = point;
196  }
197 
198  foreach( point in level.hardPoints )
199  {
200  level.visuals[point.script_index] = ‪struct::get_array( point.target, "targetname" );
201  }
202  }
203 
204  level.current_zone[localClientNum] = newVal;
205  level.current_state[localClientNum] = 0;
206 
207  ‪setup_hardpoint_fx( localClientNum, level.current_zone[localClientNum], level.current_state[localClientNum] );
208 }
209 
210 function ‪hardpoint_state(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
211 {
212  if ( newVal != level.current_state[localClientNum] )
213  {
214  level.current_state[localClientNum] = newVal;
215  ‪setup_hardpoint_fx( localClientNum, level.current_zone[localClientNum], level.current_state[localClientNum] );
216  }
217 }
218 
219 function ‪watch_for_team_change( localClientNum )
220 {
221  level notify( "end_team_change_watch" );
222  level endon( "end_team_change_watch" );
223 
224  level waittill( "team_changed" );
225 
226  wait(0.05);
227 
228  thread ‪setup_hardpoint_fx( localClientNum, level.current_zone[localClientNum], level.current_state[localClientNum] );
229 }
‪KS_FRIENDLY
‪#define KS_FRIENDLY
Definition: koth.csc:27
‪watch_for_team_change
‪function watch_for_team_change(localClientNum)
Definition: koth.csc:219
‪hardpoint_state
‪function hardpoint_state(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: koth.csc:210
‪friend_not_foe_team
‪function friend_not_foe_team(localClientIndex, team, predicted)
Definition: util_shared.csc:1198
‪CF_CALLBACK_ZERO_ON_NEW_ENT
‪#define CF_CALLBACK_ZERO_ON_NEW_ENT
Definition: version.gsh:103
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪get_array
‪function get_array(kvp_value, kvp_key="targetname")
Definition: struct.csc:34
‪hardpoint
‪function hardpoint(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: koth.csc:188
‪KS_CONTESTED
‪#define KS_CONTESTED
Definition: koth.csc:25
‪KS_ENEMY
‪#define KS_ENEMY
Definition: koth.csc:28
‪get_shoutcaster_fx
‪function get_shoutcaster_fx(local_client_num)
Definition: koth.csc:65
‪get_color_fx
‪function get_color_fx(localClientNum, script_bundle)
Definition: _shoutcaster.csc:38
‪setup_hardpoint_fx
‪function setup_hardpoint_fx(local_client_num, zone_index, state)
Definition: koth.csc:123
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪get_fx_state
‪function get_fx_state(local_client_num, state, is_shoutcaster)
Definition: koth.csc:95
‪get_fx
‪function get_fx(fx_name, fx_state, effects)
Definition: koth.csc:118
‪KS_NEUTRAL
‪#define KS_NEUTRAL
Definition: koth.csc:22
‪is_shoutcaster_using_team_identity
‪function is_shoutcaster_using_team_identity(localClientNum)
Definition: _shoutcaster.csc:17
‪main
‪function main()
Definition: koth.csc:30
‪KS_ALLIES
‪#define KS_ALLIES
Definition: koth.csc:23
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪get_script_bundle
‪function get_script_bundle(str_type, str_name)
Definition: struct.csc:45
‪KS_AXIS
‪#define KS_AXIS
Definition: koth.csc:24
‪is_shoutcaster
‪function is_shoutcaster(localClientNum)
Definition: _shoutcaster.csc:12