2 ========================================
\r
3 Custom TF/BeyondTF Tesla Coil
\r
4 ========================================
\r
5 Originally made for Custom TF
\r
6 Borrowed from Catch22's BeyondTF
\r
7 Modified by XavioR (aka avirox) for MegaTF United and Team:Nexuiz
\r
10 float () Tesla_Fire;
\r
11 float () Tesla_FindTarget;
\r
12 void () Tesla_FoundTarget;
\r
15 void () Tesla_Animate =
\r
17 if (self.owner.health <= 0 || (!self.owner))
\r
20 if (self.owner.effects == (self.owner.effects | 8))
\r
22 if (self.owner.frame > 3)
\r
23 self.owner.frame = 0;
\r
24 else if (self.owner.frame == 0)
\r
25 self.owner.frame = 1;
\r
26 else if (self.owner.frame == 1)
\r
27 self.owner.frame = 2;
\r
28 else if (self.owner.frame == 2)
\r
29 self.owner.frame = 3;
\r
33 if (self.frame_loop == 0)
\r
35 else if (self.frame_loop == 1)
\r
36 self.owner.frame = 6;
\r
37 else if (self.frame_loop == 2)
\r
38 self.owner.frame = 7;
\r
39 else if (self.frame_loop == 3)
\r
40 self.owner.frame = 8;
\r
41 else if (self.frame_loop == 4)
\r
42 self.owner.frame = 9;
\r
43 else if (self.frame_loop == 5)
\r
44 self.owner.frame = 8;
\r
45 else if (self.frame_loop == 6)
\r
46 self.owner.frame = 7;
\r
47 else if (self.frame_loop == 7)
\r
48 self.owner.frame = 6;
\r
49 else if (self.frame_loop == 8)
\r
50 self.owner.frame = 5;
\r
51 else if (self.frame_loop == 9) {
\r
52 self.owner.frame = 4;
\r
53 self.frame_loop = -1;
\r
55 self.frame_loop = self.frame_loop + 1;
\r
58 self.nextthink = time + .05;
\r
62 void () Tesla_Idle =
\r
66 self.waitmax = Tesla_Fire ();
\r
68 if ((self.waitmax == 0))
\r
70 if (Tesla_FindTarget ())
\r
76 self.effects = (self.effects - (self.effects & 8));
\r
77 self.nextthink = (time + 0.250000);
\r
80 self.think = Tesla_Idle;
\r
83 float () Tesla_FindTarget =
\r
85 local entity client;
\r
91 if ((self.tf_items & 2))
\r
93 self.origin_z = (self.origin_z - 40);
\r
97 self.origin_z = (self.origin_z + 24);
\r
102 while (((loopc < 8) && (gotone == 0)))
\r
104 client = checkclient ();
\r
105 te = find (world, classname, "bot");
\r
121 if ((client.playerclass == 0))
\r
125 if ((client.health <= 0))
\r
129 if (client.has_disconnected)
\r
135 if (((client.team_no == self.team_no) && (self.team_no != 0)))
\r
139 if (((client.undercover_team == self.team_no) && (self.team_no != 0)))
\r
141 if (!(self.tf_items & 1024))
\r
147 if ((client == self.real_owner))
\r
151 /* if (client.is_feigning) // no feigning in NTF (yet?)
\r
153 if (!(self.tf_items & 1024))
\r
158 if ((client.flags & 128))
\r
162 if ((client.items & 524288))
\r
166 if (!visible (client))
\r
170 r = vlen ((client.origin - self.origin));
\r
171 if (((self.ammo_shells == 0) && (r > 400)))
\r
175 if (((self.ammo_shells == 1) && (r > 800)))
\r
179 if (((self.ammo_shells == 2) && (r > 1200)))
\r
189 if ((self.tf_items & 2))
\r
191 self.origin_z = (self.origin_z + 40);
\r
195 self.origin_z = (self.origin_z - 24);
\r
201 if ((self.enemy == client))
\r
203 return (Tesla_Fire ());
\r
205 self.enemy = client;
\r
206 if (((self.enemy.classname != "player") && (self.enemy.classname != "bot")))
\r
208 self.enemy = self.enemy.enemy;
\r
209 if (((self.enemy.classname != "player") && (self.enemy.classname != "bot")))
\r
211 self.enemy = world;
\r
215 Tesla_FoundTarget ();
\r
219 void () Tesla_FoundTarget =
\r
221 if ((self.ammo_cells > self.waitmin))
\r
223 sound (self, 2, "weapons/guerilla_set.wav", 1, 1);
\r
225 self.effects = (self.effects | 8);
\r
226 self.goalentity = self.enemy;
\r
227 if ((self.ammo_nails <= 1))
\r
229 self.nextthink = (time + 1);
\r
233 if ((self.ammo_nails == 2))
\r
235 self.nextthink = (time + 0.500000);
\r
239 self.nextthink = (time + 1.500000);
\r
242 if ((self.enemy.modelindex == modelindex_null))
\r
244 self.nextthink = (self.nextthink + 2);
\r
248 if ((self.enemy.modelindex == modelindex_eyes))
\r
250 self.nextthink = (self.nextthink + 1.500000);
\r
253 if ((self.tf_items & 1))
\r
255 self.nextthink = (time + 0.500000);
\r
259 void () Tesla_Pain =
\r
261 self.real_owner.StatusRefreshTime = (time + 0.200000);
\r
264 void () Tesla_Die =
\r
266 sprint (self.real_owner, "Your tesla coil was destroyed.\n");
\r
267 self.real_owner.has_tesla = 0;
\r
268 self.real_owner.has_turretized_tesla = 0;
\r
269 /* ThrowGib ("progs/tgib1.mdl", -70); // use other explosion method?
\r
270 ThrowGib ("progs/tgib2.mdl", -70);
\r
271 ThrowGib ("progs/tgib3.mdl", -70);*/
\r
274 WriteCoord (4, self.origin_x);
\r
275 WriteCoord (4, self.origin_y);
\r
276 WriteCoord (4, self.origin_z);
\r
277 // multicast (self.origin, 1); // where are my scriptable particles? :(
\r
278 BecomeExplosion ();
\r
281 float () Tesla_Fire =
\r
284 local float damage;
\r
286 dir = self.enemy.origin - self.origin;
\r
287 if ((self.enemy.classname == "bot"))
\r
289 dir = (self.enemy.origin + '0 0 -35') - self.origin;
\r
295 if ((self.enemy == world))
\r
299 if (self.enemy.has_disconnected)
\r
301 self.enemy = world;
\r
304 /* if (self.enemy.is_feigning) // no feigning yet
\r
306 if (!(self.tf_items & 1024))
\r
311 if ((self.tf_items & 2))
\r
313 self.origin_z = (self.origin_z - 40);
\r
317 self.origin_z = (self.origin_z + 24);
\r
319 if (!visible (self.enemy))
\r
321 if ((self.tf_items & 2))
\r
323 self.origin_z = (self.origin_z + 40);
\r
327 self.origin_z = (self.origin_z - 24);
\r
331 self.ammo_cells = (self.ammo_cells - self.waitmin);
\r
332 if ((self.ammo_cells < 0))
\r
334 self.ammo_cells = 0;
\r
335 if ((self.tf_items & 2))
\r
337 self.origin_z = (self.origin_z + 40);
\r
341 self.origin_z = (self.origin_z - 24);
\r
343 self.enemy = world;
\r
346 self.effects = (self.effects | 8);
\r
350 WriteEntity (4, self);
\r
351 WriteCoord (4, self.origin_x);
\r
352 WriteCoord (4, self.origin_y);
\r
353 WriteCoord (4, (self.origin_z + 24));
\r
354 WriteCoord (4, self.enemy.origin_x);
\r
355 WriteCoord (4, self.enemy.origin_y);
\r
356 WriteCoord (4, self.enemy.origin_z);
\r
357 // void(entity own, vector start, vector end) te_lightning2 = #429;
\r
358 // te_lightning2(self, self.origin, self.enemy.origin);
\r
359 // multicast (self.origin, 1);
\r
360 sound (self, 1, "weapons/tesla.wav", 1, 1);
\r
361 if ((self.ammo_nails == 0))
\r
365 if ((self.ammo_nails == 1))
\r
369 if ((self.ammo_nails == 2))
\r
373 if ((self.ammo_nails == 3))
\r
378 TF_T_Damage (self.enemy, self, self.real_owner, damage, 2, 8);
\r
379 if ((self.ammo_nails <= 1))
\r
381 self.nextthink = (time + 1.500000);
\r
385 if ((self.ammo_nails == 2))
\r
387 self.nextthink = (time + 1);
\r
391 self.nextthink = (time + 2);
\r
394 if (((self.ammo_cells == 0) && (random () < 0.100000)))
\r
396 sprint (self.real_owner, "Tesla is out of cells.\n");
\r
400 if ((self.ammo_cells <= self.waitmin))
\r
402 sprint (self.real_owner, "Tesla is low on cells.\n");
\r
405 if ((self.tf_items & 2))
\r
407 self.origin_z = (self.origin_z + 40);
\r
411 self.origin_z = (self.origin_z - 24);
\r
413 if ((self.enemy.health <= 0))
\r
415 self.enemy = world;
\r
421 void () Tesla_Touch =
\r
423 if ((pointcontents (self.origin) == -6))
\r
425 sprint (self.real_owner, "Your sentry gun flew away.\n");
\r
429 if ((other.takedamage && !(self.tf_items & 2)))
\r
432 if ((((other.team_no > 0) && (other.team_no != self.real_owner.team_no)) && (other.is_undercover != 1)))
\r
434 TF_T_Damage (other, self, self.real_owner, 400, 2, 8);
\r
438 if (((self.tf_items & 2) && (self.movetype == 5)))
\r
440 if (((((((((pointcontents (self.origin) == -6) || (pointcontents ((self.origin - '0 0 10')) == -6)) || (pointcontents ((self.origin + '0 0 5')) == -6)) || (pointcontents ((self.origin + '0 0 10')) == -6)) || (pointcontents ((self.origin + '0 0 15')) == -6)) || (pointcontents ((self.origin + '0 0 20')) == -6)) || (pointcontents ((self.origin + '0 0 30')) == -6)) || (pointcontents ((self.origin + '0 0 40')) == -6)))
\r
442 sprint (self.real_owner, "Your sentry gun flew away.\n");
\r
446 if ((other == world))
\r
448 self.flags = (self.flags | 512);
\r
450 self.origin_z = (self.origin_z + 40);
\r
455 if ((other.classname == "player"))
\r
458 TF_T_Damage (other, self, self.real_owner, 400, 2, 8);
\r