‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
laststand_shared.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\flag_shared;
4 #using scripts\shared\hud_util_shared;
5 #using scripts\shared\util_shared;
6 
7 #insert scripts\shared\shared.gsh;
8 
9 // The number of laststands in type getup that the player starts with
10 #define LASTSTAND_GETUP_COUNT_START 0
11 // Percent of the bar removed by AI damage
12 #define LASTSTAND_GETUP_BAR_DAMAGE 0.1
13 
14 
15 #namespace laststand;
16 
17 //TODO T7 - once we decide what should/shouldn't be in here, do a pass on function names to fit better with the namespace
19 {
20  if ( !‪IS_TRUE( self.no_revive_trigger ) )
21  {
22  return ( IsDefined( self.revivetrigger ) );
23  }
24  else
25  {
26  return ( ‪IS_TRUE( self.laststand ) );
27  }
28 }
29 
30 
32 {
33  num = 0;
34  players = GetPlayers();
35 
36  for ( i = 0; i < players.size; i++ )
37  {
38  if ( players[i] ‪player_is_in_laststand() )
39  {
40  num++;
41  }
42  }
43 
44  return num;
45 }
46 
48 {
49  return ( ‪player_num_in_laststand() == GetPlayers().size );
50 }
51 
53 {
54  return ( ‪player_num_in_laststand() > 0 );
55 }
56 
57 function ‪laststand_allowed( sWeapon, sMeansOfDeath, sHitLoc )
58 {
59  if( level.laststandpistol == "none" )
60  {
61  return false;
62  }
63 
64  return true;
65 }
66 
68 {
69  if( isdefined( self.suicidePrompt ) )
70  {
71  self.suicidePrompt ‪destroy();
72  }
73  self.suicidePrompt = undefined;
74 }
75 
77 {
78  self endon ( "disconnect" );
79  self endon ( "stop_revive_trigger" );
80  self endon ( "player_revived");
81  self endon ( "bled_out");
82  level ‪util::waittill_any("game_ended","stop_suicide_trigger");
84 
85  if ( IsDefined( self.suicideTextHud ) )
86  {
87  self.suicideTextHud Destroy();
88  }
89 
90  if ( IsDefined( self.suicideProgressBar ) )
91  {
92  self.suicideProgressBar ‪hud::destroyElem();
93  }
94 
95 
96 }
97 
99 {
100  self endon ( "disconnect" );
101  self endon ( "stop_revive_trigger" );
102  self ‪util::waittill_any( "bled_out","player_revived","fake_death" );
103  self ‪cleanup_suicide_hud();
104 
105  if ( IsDefined( self.suicideProgressBar ) )
106  {
107  self.suicideProgressBar ‪hud::destroyElem();
108  }
109 
110  if ( IsDefined( self.suicideTextHud ) )
111  {
112  self.suicideTextHud Destroy();
113  }
114 }
115 
116 function ‪is_facing( facee, requiredDot = 0.9 )
117 {
118  orientation = self getPlayerAngles();
119  forwardVec = anglesToForward( orientation );
120  forwardVec2D = ( forwardVec[0], forwardVec[1], 0 );
121  unitForwardVec2D = VectorNormalize( forwardVec2D );
122  toFaceeVec = facee.origin - self.origin;
123  toFaceeVec2D = ( toFaceeVec[0], toFaceeVec[1], 0 );
124  unitToFaceeVec2D = VectorNormalize( toFaceeVec2D );
125 
126  dotProduct = VectorDot( unitForwardVec2D, unitToFaceeVec2D );
127  return ( dotProduct > requiredDot ); // reviver is facing within a ~52-degree cone of the player
128 }
129 
130 
131 //*****************************************************************************
132 //*****************************************************************************
133 
134 // the text that tells players that others are in need of a revive
136 {
137  self.revive_hud = newclientHudElem( self );
138  self.revive_hud.alignX = "center";
139  self.revive_hud.alignY = "middle";
140  self.revive_hud.horzAlign = "center";
141  self.revive_hud.vertAlign = "bottom";
142  self.revive_hud.foreground = true;
143  self.revive_hud.font = "default";
144  self.revive_hud.fontScale = 1.5;
145  self.revive_hud.alpha = 0;
146  self.revive_hud.color = ( 1.0, 1.0, 1.0 );
147  self.revive_hud.hidewheninmenu = true;
148  self.revive_hud setText( "" );
149 
150  self.revive_hud.y = -148;
151 }
152 
154 {
155  assert( IsDefined( self ) );
156  assert( IsDefined( self.revive_hud ) );
157 
158  self.revive_hud.alpha = 1;
159 }
160 
161 //CODER_MOD: TOMMYK 07/13/2008
163 {
165 
166  self.revive_hud fadeOverTime( time );
167  self.revive_hud.alpha = 0;
168 }
169 
170 function ‪drawcylinder(pos, rad, height)
171 {
172  /#
173  currad = rad;
174  curheight = height;
175 
176  for (r = 0; r < 20; r++)
177  {
178  theta = r / 20 * 360;
179  theta2 = (r + 1) / 20 * 360;
180 
181  line(pos + (cos(theta) * currad, sin(theta) * currad, 0), pos + (cos(theta2) * currad, sin(theta2) * currad, 0));
182  line(pos + (cos(theta) * currad, sin(theta) * currad, curheight), pos + (cos(theta2) * currad, sin(theta2) * currad, curheight));
183  line(pos + (cos(theta) * currad, sin(theta) * currad, 0), pos + (cos(theta) * currad, sin(theta) * currad, curheight));
184  }
185  #/
186 }
187 
189 {
190  assert( level.lastStandGetupAllowed, "Lives only exist in the Laststand type GETUP." );
191 
192  if ( level.lastStandGetupAllowed && IsDefined( self.laststand_info ) && IsDefined( self.laststand_info.type_getup_lives ) )
193  {
194  return max( 0, self.laststand_info.type_getup_lives );
195  }
196 
197  return 0;
198 }
199 
201 {
202  assert( level.lastStandGetupAllowed, "Lives only exist in the Laststand type GETUP." );
203  assert( isdefined( ‪increment ), "Must specify increment true or false" );
204 
205  // Increment / Decrement lives
206  ‪increment = (isdefined( ‪increment )?‪increment:false );
207  self.laststand_info.type_getup_lives = max( 0, ( ‪increment?self.laststand_info.type_getup_lives + 1:self.laststand_info.type_getup_lives - 1 ) );
208 
209  // Notify HUD that laststand life amount has changed
210  self notify( "laststand_lives_updated" );
211 }
212 
214 {
215 /# println( "ZM >> player_getup_setup called" ); #/
216  self.laststand_info = SpawnStruct();
217  self.laststand_info.type_getup_lives = ‪LASTSTAND_GETUP_COUNT_START;
218 }
219 
221 {
222  self endon ("player_revived");
223  self endon ("disconnect");
224 
225  while(1)
226  {
227  self waittill( "damage" );
228 
229  self.laststand_info.getup_bar_value -= ‪LASTSTAND_GETUP_BAR_DAMAGE;
230 
231  if( self.laststand_info.getup_bar_value < 0 )
232  {
233  self.laststand_info.getup_bar_value = 0;
234  }
235  }
236 }
237 
239 {
240  self endon ("player_revived");
241  self endon ("disconnect");
242 
243  hudelem = NewClientHudElem( self );
244 
245  hudelem.alignX = "left";
246  hudelem.alignY = "middle";
247  hudelem.horzAlign = "left";
248  hudelem.vertAlign = "middle";
249  hudelem.x = 5;
250  hudelem.y = 170;
251  hudelem.font = "big";
252  hudelem.fontScale = 1.5;
253  hudelem.foreground = 1;
254  hudelem.hidewheninmenu = true;
255  hudelem.hidewhendead = true;
256  hudelem.sort = 2;
257  hudelem.label = &"SO_WAR_LASTSTAND_GETUP_BAR";
258 
259  self thread ‪laststand_getup_hud_destroy( hudelem );
260 
261  while( 1 )
262  {
263  hudelem SetValue( self.laststand_info.getup_bar_value );
265  }
266 }
267 
269 {
270  self ‪util::waittill_either( "player_revived", "disconnect" );
271 
272  hudelem Destroy();
273 }
274 
276 {
277  self endon ("player_revived");
278  self endon ("player_suicide");
279  self endon ("bled_out");
280 
281  trig = self.revivetrigger;
282 
283  self waittill ("disconnect");
284  if(isDefined(trig))
285  {
286  trig delete();
287  }
288 
289 }
‪laststand_allowed
‪function laststand_allowed(sWeapon, sMeansOfDeath, sHitLoc)
Definition: laststand_shared.gsc:57
‪cleanup_laststand_on_disconnect
‪function cleanup_laststand_on_disconnect()
Definition: laststand_shared.gsc:275
‪get_lives_remaining
‪function get_lives_remaining()
Definition: laststand_shared.gsc:188
‪is_facing
‪function is_facing(facee, requiredDot=0.9)
Definition: laststand_shared.gsc:116
‪laststand_getup_hud_destroy
‪function laststand_getup_hud_destroy(hudelem)
Definition: laststand_shared.gsc:268
‪player_getup_setup
‪function player_getup_setup()
Definition: laststand_shared.gsc:213
‪player_all_players_in_laststand
‪function player_all_players_in_laststand()
Definition: laststand_shared.gsc:47
‪revive_hud_create
‪function revive_hud_create()
Definition: laststand_shared.gsc:135
‪waittill_either
‪function waittill_either(msg1, msg2)
Definition: util_shared.gsc:303
‪destroyElem
‪function destroyElem()
Definition: hud_util_shared.gsc:755
‪clean_up_suicide_hud_on_bled_out
‪function clean_up_suicide_hud_on_bled_out()
Definition: laststand_shared.gsc:98
‪LASTSTAND_GETUP_BAR_DAMAGE
‪#define LASTSTAND_GETUP_BAR_DAMAGE
Definition: laststand_shared.gsc:12
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪laststand_getup_damage_watcher
‪function laststand_getup_damage_watcher()
Definition: laststand_shared.gsc:220
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪cleanup_suicide_hud
‪function cleanup_suicide_hud()
Definition: laststand_shared.gsc:67
‪LASTSTAND_GETUP_COUNT_START
‪#define LASTSTAND_GETUP_COUNT_START
Definition: laststand_shared.gsc:10
‪laststand_getup_hud
‪function laststand_getup_hud()
Definition: laststand_shared.gsc:238
‪increment
‪function increment(str_field_name, n_increment_count=1)
Definition: clientfield_shared.gsc:110
‪update_lives_remaining
‪function update_lives_remaining(increment)
Definition: laststand_shared.gsc:200
‪revive_hud_show
‪function revive_hud_show()
Definition: laststand_shared.gsc:153
‪player_any_player_in_laststand
‪function player_any_player_in_laststand()
Definition: laststand_shared.gsc:52
‪player_is_in_laststand
‪function player_is_in_laststand()
Definition: laststand_shared.gsc:18
‪player_num_in_laststand
‪function player_num_in_laststand()
Definition: laststand_shared.gsc:31
‪destroy
‪function destroy(watcher, owner)
Definition: _decoy.gsc:108
‪drawcylinder
‪function drawcylinder(pos, rad, height)
Definition: laststand_shared.gsc:170
‪revive_hud_show_n_fade
‪function revive_hud_show_n_fade(time)
Definition: laststand_shared.gsc:162
‪clean_up_suicide_hud_on_end_game
‪function clean_up_suicide_hud_on_end_game()
Definition: laststand_shared.gsc:76
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265