4 if(!self.special_active)
\r
6 self.special_active = 0;
\r
7 ResetPlayerModel(self);
\r
16 if(self.health <= cvar("g_balance_spy_cloak_min_health"))
\r
18 sprint(self, "not healthy enough\n");
\r
22 self.health = self.health - cvar("g_balance_spy_cloak_cost_start");
\r
26 self.special_active = 1;
\r
27 self.special_time = time;
\r
32 if(self.special_active)
\r
40 void SpyGrenade(float req)
\r
43 if(req == WR_GRENADE1)
\r
45 if( W_ThrowGrenade(W_NailGrenade) )
\r
46 self.grenade_time = time + cvar("g_balance_grenade_nail_refire");
\r
48 else if(req == WR_GRENADE2)
\r
53 void SpyCloakFlicker(entity pl)
\r
55 if(pl.class != CLASS_SPY)
\r
57 if(!pl.special_active)
\r
60 pl.alpha = bound(0.001, pl.alpha + 0.3 + random()*0.2, 1);
\r
65 local vector m1, m2;
\r
66 local float desired_alpha, spd, min_health;
\r
68 if(self.special_active) // am I cloaked?
\r
70 min_health = cvar("g_balance_spy_cloak_min_health");
\r
71 if(self.health < min_health || self.onfire != world || self.poison_damage)
\r
77 spd = vlen(self.velocity);
\r
78 spd = spd - self.speed*1.15; // spy can stay cloaked up to his max speed (plus some extra to keep from flickering on slopes), but any faster and he starts to show...
\r
83 desired_alpha = bound(0,
\r
84 cvar("g_balance_spy_move_alpha")*spd / self.speed,
\r
85 cvar("g_balance_spy_move_alpha_max"));
\r
89 // adjust alpha to reflect new value
\r
90 if(self.alpha < desired_alpha)
\r
91 self.alpha = bound(0.001, self.alpha + 0.1, 1);
\r
92 else if(self.alpha > desired_alpha)
\r
93 self.alpha = bound(0.001, self.alpha - 0.1, 1);
\r
95 // take health/armor cost
\r
96 self.health = bound(min_health,
\r
97 self.health - cvar("g_balance_spy_cloak_cost_upkeeph") * frametime,
\r
99 // take health/armor cost
\r
100 self.armorvalue = bound(0,
\r
101 self.armorvalue - cvar("g_balance_spy_cloak_cost_upkeepa") * frametime,
\r
104 if(self.health <= min_health)
\r
111 self.special_time = time + 0.1;
\r
113 // if I'm fully cloaked, set my model to nothing
\r
114 if(self.alpha < 0.01 && self.model != "")
\r
118 setmodel (self, "");
\r
119 setsize (self, m1, m2);
\r
121 else if(self.alpha > 0.01 && self.model == "")
\r
123 ResetPlayerModel(self);
\r
126 self.alpha = bound(0.001, self.alpha, 1.0);
\r
128 // also cloak weapons
\r
129 self.weaponentity.alpha = 1 - 0.5*(1 - self.alpha);//self.alpha + 0.1;
\r
130 self.exteriorweaponentity.alpha = self.alpha; //self.weaponentity.alpha;
\r
134 if(self.alpha != 0)// && self.alpha != 1)
\r
135 {// not fully visible yet, keep phasing back in
\r
136 self.alpha = self.alpha + 0.1;
\r
137 self.weaponentity.alpha = 1 - (1 - self.alpha)*0.5;
\r
139 self.alpha = self.weaponentity.alpha = 0;
\r
142 // self.weaponentity.alpha = 0;
\r
147 /* if(self.special_active) // am I cloaked?
\r
149 if(self.health < 10)
\r
153 else if(self.model != "" && self.special_time <= time)
\r
154 {// not fully cloaked yet, but working on it
\r
155 self.alpha = self.alpha - 0.1;
\r
156 self.weaponentity.alpha = 1 - (1 - self.alpha)*0.5;//self.alpha + 0.1;
\r
157 self.special_time = time + 0.1;
\r
158 if(self.alpha < 0.1)
\r
162 setmodel (self, "");
\r
163 setsize (self, m1, m2);
\r
164 self.special_time = time + 1;
\r
167 else if(self.special_time <= time)
\r
168 {// fully cloaked, take health cost
\r
169 self.alpha = self.weaponentity.alpha = 0.25;
\r
170 self.special_time = time + 1;
\r
172 // reduce health & armor while cloaked
\r
173 self.health = self.health - 2;//3;
\r
174 if(self.armorvalue > 2)//3)
\r
175 self.armorvalue = self.armorvalue - 2;//3;
\r
180 if(self.alpha != 0 && self.alpha != 1)
\r
181 {// not fully visible yet, keep phasing back in
\r
182 self.alpha = self.alpha + 0.1;
\r
183 self.weaponentity.alpha = 1 - (1 - self.alpha)*0.5;
\r
188 self.weaponentity.alpha = 0;
\r
191 self.exteriorweaponentity.alpha = self.weaponentity.alpha;*/
\r
194 void SpyPostThink()
\r
198 void BecomeSpy(float portion)
\r
200 self.max_health = cvar("g_balance_class_spy_health") * portion;
\r
202 self.max_armor = cvar("g_balance_class_spy_armor") * portion;
\r
204 self.mass = cvar("g_balance_class_spy_mass");
\r
206 SetPlayerSpeed(self);
\r
208 self.items = IT_WEP1 | IT_WEP2 | IT_WEP3 | IT_WEP4;
\r
209 self.switchweapon = WEP2;
\r
210 self.ammo_shells = floor(20 * portion);
\r
211 self.ammo_nails = floor(50 * portion);
\r
212 self.ammo_rockets = floor(3 * portion);
\r
213 self.ammo_cells = floor(0 * portion);
\r
214 self.playerclass = TF_CLASS_SPY; // TF P.C.
\r
216 // fixme: also have off-hand grenade, different for each class
\r
217 // where to do that?
\r
220 /*void () Switch_View_Think =
\r
222 if (self.health < 1)
\r
224 self.owner.view_ofs = self.view_ofs * self.health;
\r
226 self.health = self.health - 1;
\r
227 self.nextthink = time;
\r
231 void (vector vchange) Switch_View =
\r
233 local entity viewchanger;
\r
234 local vector changevec;
\r
236 changevec = ((self.view_ofs - vchange) * .10);
\r
238 viewchanger = spawn();
\r
239 viewchanger.think = Switch_View_Think;
\r
240 viewchanger.nextthink = time;
\r
241 viewchanger.owner = self;
\r
242 viewchanger.view_ofs = changevec;
\r
243 viewchanger.health = 10;
\r
246 void () Switch_View_Think =
\r
248 if (time > self.button1 + self.health)
\r
250 self.owner.view_ofs = self.owner.view_ofs - ((self.view_ofs * frametime) * (1 / self.health));
\r
251 self.nextthink = time;
\r
253 void (vector vchange, float change_spd) Switch_View =
\r
255 local entity viewchanger;
\r
256 local vector changevec;
\r
257 changevec = self.view_ofs - vchange;
\r
258 viewchanger = spawn();
\r
259 viewchanger.think = Switch_View_Think;
\r
260 viewchanger.nextthink = time;
\r
261 viewchanger.owner = self;
\r
262 viewchanger.view_ofs = changevec;
\r
263 viewchanger.health = change_spd;
\r
264 viewchanger.button1 = time;
\r
268 void () TeamNexuiz_Feign =
\r
270 if (self.playerclass != TF_CLASS_SPY)
\r
272 if ((self.reload_time + .25) > time)
\r
274 if (self.health <= 0)
\r
276 if (!(self.flags & FL_ONGROUND))
\r
278 sprint(self, "You cannot feign mid-air\n");
\r
281 local entity at_spot;
\r
284 self.velocity = '0 0 0';
\r
285 if (self.is_feigning == 1)
\r
287 at_spot = findradius(self.origin, 64); // search for someone to make sure no-one is standing on
\r
288 intgr = 1; //// the player when he tries to get up
\r
289 while (at_spot != world)
\r
291 if (at_spot.classname == "player" && at_spot.is_dead != 1 && at_spot != self)
\r
295 at_spot = at_spot.chain;
\r
299 sprint(self, "You can't get up while someone is standing on you.\n");
\r
304 self.is_feigning = 0;
\r
305 setsize(self, PL_MIN, PL_MAX);
\r
306 Switch_View(PL_VIEW_OFS, .3);
\r
307 TeamNexuiz_GunUp();
\r
312 self.is_feigning = 1;
\r
313 TeamFortress_ThrowGrenade(); // Toss any primed grenades while feigning
\r
314 setsize(self, '-16 -16 -24', '16 16 5');
\r
315 Switch_View(PL_FEIGN_VIEW_OFS, .3);
\r
316 TeamNexuiz_GunDown();
\r