]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/engineer.c
git-svn-id: svn://svn.icculus.org/nexuiz/trunk@736 f962a42d-fe04-0410-a3ab-8c8b0445ebaa
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / engineer.c
1 .float option, opton5;\r
2 .float has_mine;\r
3 void () MagnetMineTouch;\r
4 void () MagTimer;\r
5 void () RemoveMagnetMine;\r
6 \r
7 void () SUB_NULL;\r
8 \r
9 // move to tfdefs:\r
10 void () TeamFortress_FinishedBuilding;\r
11 void () lvl1_sentry_stand;\r
12 void (float tno, entity ignore, string st) teamsprint;\r
13 .entity real_owner;\r
14 .entity oldenemy;\r
15 .float current_weapon;\r
16 .float waitmin;\r
17 .float waitmax;\r
18 .void(entity attacker, float damage) th_pain;\r
19 \r
20 //temp\r
21 void (entity bld) CheckBelowBuilding;\r
22 void (entity gunhead) CheckSentry;\r
23 void () Sentry_Rotate;\r
24 float () Sentry_FindTarget;\r
25 void () Sentry_FoundTarget;\r
26 void () Sentry_HuntTarget;\r
27 void () Sentry_Pain;\r
28 void () Sentry_Die;\r
29 \r
30 void EngineerSpecial()\r
31 {\r
32         //      sprint(self, "Not done yet\n"); \r
33         // this is gonna contain build menu eventually\r
34 };\r
35 \r
36 /*==========================\r
37  TF Engineer Build Function\r
38  =========================*/\r
39 void(entity gunhead) CheckSentry = \r
40 {\r
41         local vector dist;\r
42         local entity gunbase;\r
43         gunbase = gunhead.trigger_field;\r
44         dist = gunbase.origin - gunhead.origin;\r
45         if (vlen(dist) > 15)\r
46         {\r
47                 bprint(self.real_owner.netname);\r
48                 bprint("'s sentry gun malfunctioned\n");\r
49                 Sentry_Die();\r
50         }\r
51 };\r
52 \r
53 void () TeamFortress_EngineerBuild =\r
54 {\r
55         local entity te;\r
56 \r
57         if ((self.is_building == 0))\r
58         {\r
59 //              if ((((self.ammo_cells < 100) && (self.has_dispenser == 0)) && (self.has_sentry == 0)))\r
60 //              {\r
61 //                      CenterPrint (self, "You don't have enough metal to \nbuild anything.\n\n");\r
62 //                      return;\r
63 //              }\r
64                 self.current_menu = 15;\r
65                 self.menu_count = 25;\r
66         }\r
67         else\r
68         {\r
69                 if ((self.is_building == 1))\r
70                 {\r
71                         sprint (self, "You stop building.\n");\r
72                         self.pausetime = 0;\r
73                         self.tfstate = (self.tfstate - (self.tfstate & 65536));\r
74                         TeamFortress_SetSpeed (self);\r
75                         te = find (world, netname, "build_timer");\r
76                         while (te)\r
77                         {\r
78                                 if ((te.owner == self))\r
79                                 {\r
80                                         dremove (te);\r
81                                         te = world;\r
82                                 }\r
83                                 else\r
84                                 {\r
85                                         te = find (te, netname, "build_timer");\r
86                                 }\r
87                         }\r
88                         self.is_building = 0;\r
89 //                      self.current_weapon = self.weapon;              // add function to make weapon disappear?\r
90                         W_SetCurrentAmmo ();\r
91                 }\r
92         }\r
93 };\r
94 \r
95 float(entity obj, entity builder) CheckArea = \r
96 {\r
97         local vector src;\r
98         local vector end;\r
99         local float pos;\r
100         pos = pointcontents(obj.origin);\r
101         if (pos == -2 || pos == -6)\r
102         {\r
103                 return TF_FLARE_LIT;\r
104         }\r
105         src_x = obj.origin_x + obj.maxs_x + 16;\r
106         src_y = obj.origin_y + obj.maxs_y + 16;\r
107         src_z = obj.origin_z + obj.maxs_z + 16;\r
108         pos = pointcontents(src);\r
109         if (pos == -2 || pos == -6)\r
110         {\r
111                 return TF_FLARE_LIT;\r
112         }\r
113         end_x = obj.origin_x + obj.mins_x - 16;\r
114         end_y = obj.origin_y + obj.mins_y - 16;\r
115         end_z = obj.origin_z + obj.mins_z - 16;\r
116         traceline(src, end, TF_FLARE_OFF, obj);\r
117         if (trace_fraction != TF_FLARE_OFF)\r
118         {\r
119                 return TF_FLARE_LIT;\r
120         }\r
121         pos = pointcontents(end);\r
122         if (pos == -2 || pos == -6)\r
123         {\r
124                 return TF_FLARE_LIT;\r
125         }\r
126         src_x = obj.origin_x + obj.mins_x - 16;\r
127         src_y = obj.origin_y + obj.maxs_y + 16;\r
128         src_z = obj.origin_z + obj.maxs_z + 16;\r
129         pos = pointcontents(src);\r
130         if (pos == -2 || pos == -6)\r
131         {\r
132                 return TF_FLARE_LIT;\r
133         }\r
134         end_x = obj.origin_x + obj.maxs_x + 16;\r
135         end_y = obj.origin_y + obj.mins_y - 16;\r
136         end_z = obj.origin_z + obj.mins_z - 16;\r
137         traceline(src, end, TF_FLARE_OFF, obj);\r
138         if (trace_fraction != TF_FLARE_OFF)\r
139         {\r
140                 return TF_FLARE_LIT;\r
141         }\r
142         pos = pointcontents(end);\r
143         if (pos == -2 || pos == -6)\r
144         {\r
145                 return TF_FLARE_LIT;\r
146         }\r
147         traceline(builder.origin, obj.origin, TF_FLARE_OFF, builder);\r
148         if (trace_fraction != TF_FLARE_OFF)\r
149         {\r
150                 return TF_FLARE_LIT;\r
151         }\r
152         return TF_FLARE_OFF;\r
153 };\r
154 \r
155 void(float objtobuild) TeamFortress_Build = \r
156 {\r
157         local float btime;\r
158         local entity te;\r
159         local vector tmp1;\r
160         local vector tmp2;\r
161         newmis = spawn();\r
162         makevectors(self.v_angle);\r
163         v_forward_z = TF_FLARE_LIT;\r
164         v_forward = normalize(v_forward) * 64;\r
165         newmis.origin = self.origin + v_forward;\r
166         if (objtobuild == TF_FLARE_OFF)\r
167         {\r
168                 if (self.has_dispenser)\r
169                 {\r
170                         sprint(self, "You can only have one dispenser.\nTry dismantling your old one.\n");\r
171                         return;\r
172                 }\r
173                 tmp1 = '-16 -16 0';\r
174                 tmp2 = '16 16 24';\r
175                 newmis.mdl = "progs/dispencr.mdl";\r
176                 newmis.netname = "dispenser";\r
177                 btime = time + 2;\r
178         }\r
179         else\r
180         {\r
181                 if (objtobuild == 2)\r
182                 {\r
183                         if (self.has_sentry)\r
184                         {\r
185                                 sprint(self, "You can only have one sentry gun.\nTry dismantling your old one.\n");\r
186                                 return;\r
187                         }\r
188                         tmp1 = '-16 -16 0';\r
189                         tmp2 = '16 16 48';\r
190 //                      newmis.mdl = "progs/turrbase.mdl";\r
191                         newmis.mdl = "models/sentry/turr1_base.md3";\r
192                         newmis.scale = .75;\r
193                         newmis.netname = "sentrygun";\r
194 //                      btime = time + 5;\r
195                         btime = .1;\r
196                 }\r
197                 if ((objtobuild == 3))\r
198                 {\r
199                         if (self.has_tesla)\r
200                         {\r
201                                 sprint (self, "You can only have one tesla gun\n");\r
202                                 return;\r
203                         }\r
204                         tmp1 = '-16 -16 0';\r
205                         tmp2 = '16 16 48';\r
206                         newmis.mdl = "progs/newtesla.mdl";\r
207 \r
208                         newmis.netname = "tesla";\r
209                         btime = (time + 7);\r
210                 }\r
211 // Begin telepad 1\r
212                 if (objtobuild == 5)\r
213                 {\r
214                         if (self.has_teleporter >= 2)\r
215                         {\r
216                                 sprint(self, "You can only have 2 teleporters.\nTry dismantling an old one.\n");\r
217                  dremove(newmis);\r
218                                 return;\r
219                         }\r
220                         tmp1 = '-16 -16 0';\r
221                         tmp2 = '16 16 4';\r
222                         newmis.mdl = "progs/telepad.mdl";\r
223                         newmis.netname = "teleporter";\r
224         \r
225                         btime = time + 3;\r
226                 }\r
227 // End telepad 1\r
228         }\r
229         if (CheckArea(newmis, self) == TF_FLARE_LIT)\r
230         {\r
231                 sprint(self, "Not enough room to build here\n");\r
232                 dremove(newmis);\r
233                 return;\r
234         }\r
235         self.is_building = TF_FLARE_OFF;\r
236         self.immune_to_check = time + 10;\r
237 //      self.maxspeed = TF_FLARE_LIT;                   // make sure player cant move\r
238         self.tfstate = self.tfstate | 65536;\r
239 /*      self.weapon = self.current_weapon;              // get rid of player's weapon model\r
240         self.current_weapon = TF_FLARE_LIT;\r
241         self.weaponmodel = "";\r
242         self.weaponframe = TF_FLARE_LIT;*/\r
243 //      TeamFortress_SetSpeed(self);                    // hmm? player cant move?\r
244         newmis.owner = self;\r
245         newmis.classname = "timer";\r
246         newmis.netname = "build_timer";\r
247         newmis.nextthink = btime;\r
248         newmis.think = TeamFortress_FinishedBuilding;\r
249         newmis.colormap = self.colormap;\r
250         newmis.weapon = objtobuild;\r
251         newmis.angles_y = anglemod(self.angles_y + 180);\r
252         newmis.velocity = '0 0 8';\r
253         newmis.movetype = 6;\r
254         newmis.solid = 2;\r
255         setmodel(newmis, newmis.mdl);\r
256         setsize(newmis, tmp1, tmp2);\r
257         setorigin(newmis, newmis.origin);\r
258         newmis.flags = newmis.flags - (newmis.flags & 512);\r
259 \r
260         DoReload (5, (btime - time));           // Engineer build function shared with reload one\r
261                                                                                 // 5 is for building, btime minus time is for build time\r
262 };\r
263 \r
264 void(entity bld) CheckBelowBuilding = \r
265 {\r
266         local vector below;\r
267         below = bld.origin;\r
268         if (bld.classname == "detpack")\r
269         {\r
270                 below_z = below_z - 8;\r
271         }\r
272         else\r
273         {\r
274                 below_z = below_z - 24;\r
275         }\r
276         traceline(bld.origin, below, TF_FLARE_OFF, bld);\r
277         if (trace_fraction == TF_FLARE_OFF)\r
278         {\r
279                 bld.movetype = 6;\r
280                 bld.flags = bld.flags - (bld.flags & 512);\r
281         }\r
282 };\r
283 \r
284 void() TeamFortress_FinishedBuilding = \r
285 {\r
286         local entity oldself;\r
287         local vector source;\r
288 \r
289         if (self.owner.is_building != TF_FLARE_OFF)\r
290         {\r
291                 return;\r
292         }\r
293         oldself = self;\r
294         self = self.owner;\r
295         oldself.owner = world;\r
296         oldself.real_owner = self;\r
297         self.is_building = TF_FLARE_LIT;\r
298         self.tfstate = self.tfstate - (self.tfstate & 65536);\r
299         self.current_weapon = self.weapon;\r
300         self.StatusRefreshTime = time + 0.1;\r
301         TeamFortress_SetSpeed(self);\r
302 /*      if (oldself.weapon == TF_FLARE_OFF)\r
303         {\r
304                 self.has_dispenser = TF_FLARE_OFF;\r
305                 sprint(self, "You finish building the dispenser.\n");\r
306                 teamsprint(self.team_no, self, self.netname);\r
307                 teamsprint(self.team_no, self, " has built a Dispenser.\n");\r
308                 self.ammo_cells = self.ammo_cells - 100;\r
309                 oldself.classname = "building_dispenser";\r
310                 oldself.netname = "dispenser";\r
311                 oldself.blocked = T_Dispenser;\r
312                 oldself.touch = T_Dispenser;\r
313                 oldself.max_health = 150;\r
314                 oldself.health = 150;\r
315                 oldself.think = DispenserThink;\r
316                 oldself.nextthink = time + 5;\r
317                 oldself.th_die = Dispenser_Die;\r
318                 oldself.mdl = "progs/dispencr.mdl";\r
319                 oldself.team_no = self.team_no;\r
320                 oldself.real_owner = self;\r
321                 oldself.colormap = self.colormap;\r
322                 oldself.takedamage = 2;\r
323                 oldself.owner = world;\r
324                 oldself.movetype = 6;\r
325                 oldself.velocity = '0 0 8';\r
326                 oldself.flags = oldself.flags - (oldself.flags & 512);\r
327                 oldself.ammo_shells = ceil(self.ammo_shells * 0.25);\r
328                 oldself.ammo_nails = ceil(self.ammo_nails * 0.25);\r
329                 oldself.ammo_rockets = ceil(self.ammo_rockets * 0.25);\r
330                 oldself.ammo_cells = ceil(self.ammo_cells * 0.25);\r
331                 oldself.armorvalue = ceil(self.armorvalue * 0.25);\r
332                 self.ammo_shells = ceil(self.ammo_shells * 0.75);\r
333                 self.ammo_nails = ceil(self.ammo_nails * 0.75);\r
334                 self.ammo_rockets = ceil(self.ammo_rockets * 0.75);\r
335                 self.ammo_cells = ceil(self.ammo_cells * 0.75);\r
336                 self.armorvalue = ceil(self.armorvalue * 0.75);\r
337                 oldself.solid = 2;\r
338                 setmodel(oldself, oldself.mdl);\r
339                 //setsize(oldself, '-8 -8 0', '8 8 24');gold. commented out.. plexi's idea :j\r
340                 setorigin(oldself, oldself.origin);\r
341         }\r
342         else\r
343         {*/\r
344                 if (oldself.weapon == 2)\r
345                 {\r
346                         local entity barrel;\r
347                         barrel = spawn();\r
348 //                      barrel.mdl = "models/sentry/turr1_base.md3";\r
349                         barrel.mdl = "models/sentry/turr1_barrel.md3";\r
350                         barrel.scale = .75;\r
351                         barrel.solid = 2;\r
352 \r
353 //                      barrel.angles_x = barrel.angles_x - 70;\r
354 \r
355 //                      barrel.angles_z = barrel.angles_z - 90;\r
356 /*                      barrel.angles_x = TF_FLARE_LIT;\r
357                         barrel.angles_y = oldself.angles_y;\r
358                         barrel.angles_z = TF_FLARE_LIT;*/\r
359 //                      barrel.movetype = 4;\r
360 //                      barrel.movetype = MOVETYPE_FOLL`OW;\r
361                         barrel.yaw_speed = 10;\r
362 //                      barrel.angles_z = barrel.angles_z - 45;\r
363                         setmodel(barrel, barrel.mdl);\r
364 //                      setsize(barrel, '-16 -16 0', '16 16 48');               // temp //'d\r
365 //                      setorigin(barrel, oldself.origin + '0 0 8');\r
366                         setorigin(barrel, '0 0 0');\r
367                         \r
368 \r
369                         self.has_sentry = TF_FLARE_OFF;\r
370                         sprint(self, "You finish building the sentry gun.\n");\r
371                         teamsprint(self.team_no, self, self.netname);\r
372                         teamsprint(self.team_no, self, " has built a Sentry Gun.\n");\r
373                         oldself.classname = "building_sentrygun_base";\r
374                         oldself.netname = "sentry gun";\r
375                         oldself.takedamage = TF_FLARE_LIT;\r
376                         oldself.th_die = Sentry_Die;\r
377                         self.ammo_cells = self.ammo_cells - 130;\r
378                         setsize(oldself, '-16 -16 0', '16 16 4');\r
379                         newmis = spawn();\r
380                         newmis.classname = "building_sentrygun";\r
381                         newmis.health = 150;\r
382                         newmis.max_health = newmis.health;\r
383                         newmis.weapon = TF_FLARE_OFF;\r
384                         newmis.th_die = Sentry_Die;\r
385                         newmis.th_pain = Sentry_Pain;\r
386 //                      newmis.mdl = "progs/turrgun.mdl";\r
387                         newmis.mdl = "models/sentry/turr1_body.md3";\r
388                         newmis.scale = .75;\r
389                         sound(oldself, 3, "weapons/tnkatck4.wav", TF_FLARE_OFF, TF_FLARE_OFF);\r
390                         newmis.solid = 2;\r
391                         setmodel(newmis, newmis.mdl);\r
392                         setsize(newmis, '-16 -16 0', '16 16 48');\r
393                         setorigin(newmis, oldself.origin + '0 0 8');\r
394                         newmis.real_owner = oldself.real_owner;\r
395                         newmis.trigger_field = oldself;\r
396                         oldself.oldenemy = newmis;\r
397                         newmis.movetype = 4;\r
398                         oldself.colormap = self.colormap;\r
399                         newmis.colormap = self.colormap;\r
400                         newmis.takedamage = 2;\r
401                         newmis.velocity = '0 0 -8';\r
402                         newmis.flags = newmis.flags - (newmis.flags & 512);\r
403                         oldself.flags = oldself.flags - (oldself.flags & 512);\r
404                         newmis.team_no = self.team_no;\r
405                         newmis.think = lvl1_sentry_stand;\r
406                         newmis.nextthink = time + 0.5;\r
407                         newmis.yaw_speed = 10;\r
408                         newmis.heat = TF_FLARE_LIT;\r
409                         newmis.angles_x = TF_FLARE_LIT;\r
410 //                      newmis.angles_y = oldself.angles_y;\r
411                         newmis.angles_y = oldself.angles_y;\r
412                         newmis.angles_z = TF_FLARE_LIT;\r
413                         newmis.waitmin = anglemod(newmis.angles_y - 50);\r
414                         newmis.waitmax = anglemod(newmis.angles_y + 50);\r
415                         if (newmis.waitmin > newmis.waitmax)\r
416                         {\r
417                                 newmis.waitmin = newmis.waitmax;\r
418                                 newmis.waitmax = anglemod(newmis.angles_y - 50);\r
419                         }\r
420                         newmis.ammo_shells = 25;\r
421                         newmis.maxammo_shells = 100;\r
422                         newmis.maxammo_rockets = 20;\r
423 \r
424                         newmis.barrel_ent = barrel;\r
425 \r
426 //                      setattachment(newmis, oldself, "tag_base_body");\r
427                         setattachment(barrel, newmis, "tag_body_barrel");\r
428 \r
429 \r
430                 }/*\r
431                 else\r
432                 {\r
433 //tesla\r
434                         if ((oldself.weapon == 3))\r
435                         {\r
436                                 self.has_tesla = TF_FLARE_OFF;\r
437                                 sprint (self, "You finish building the tesla coil.\n");\r
438                                 teamsprint (self.team_no, self, self.netname);\r
439                                 teamsprint (self.team_no, self, " has built a tesla.\n");\r
440                                 sound (oldself, 3, "weapons/guerilla_set.wav", TF_FLARE_OFF, TF_FLARE_OFF);\r
441                                 oldself.classname = "building_tesla";\r
442                                 oldself.netname = "tesla";\r
443                                 oldself.takedamage = 2;\r
444                                 oldself.solid = 2;\r
445                                 oldself.th_die = Tesla_Die;\r
446                                 oldself.th_pain = Tesla_Pain;\r
447                                 self.ammo_cells = (self.ammo_cells - 150);\r
448                                 oldself.health = 200;\r
449                                 oldself.movetype = 6;\r
450                                 oldself.colormap = self.colormap;\r
451                                 oldself.velocity = '0 0 -8';\r
452                                 oldself.avelocity = '0 0 0';\r
453                                 oldself.flags = (oldself.flags - (oldself.flags & 512));\r
454                                 oldself.team_no = self.team_no;\r
455                                 oldself.think = Tesla_Idle;\r
456 //                              oldself.think = tsla_on1;\r
457                                 oldself.nextthink = (time + 2);\r
458 //                              oldself.nextthink = time + 0.1;\r
459 //                              oldself.has_holo = time + 2; // next Tesla_Idle run\r
460                                 oldself.touch = Tesla_Touch;\r
461                                 oldself.enemy = world;\r
462                                 oldself.maxammo_shells = TF_FLARE_LIT;\r
463                                 oldself.maxammo_nails = TF_FLARE_LIT;\r
464                                 oldself.maxammo_rockets = TF_FLARE_LIT;\r
465                                 oldself.max_health = 100;\r
466                                 oldself.ammo_cells = 50;\r
467                                 oldself.tf_items = TF_FLARE_LIT;\r
468                                 if (!(self.weapons_carried & 8))\r
469                                 {\r
470                                         oldself.ammo_shells = 2;\r
471                                         oldself.ammo_nails = 2;\r
472                                         oldself.ammo_rockets = TF_FLARE_OFF;\r
473                                         oldself.currentammo = 5;\r
474                                         oldself.max_health = 200;\r
475                                         oldself.ammo_cells = 120;\r
476                                 }\r
477 //                              oldself.colormap = self.colormap; // Custom TF ColorMap\r
478 //                              oldself.job = 0; // Custom TF Animations timing\r
479                                 oldself.health = oldself.max_health;\r
480                                 oldself.waitmin = ((oldself.ammo_shells + 2) * (oldself.ammo_nails + 2));\r
481                                 oldself.waitmax = TF_FLARE_LIT;\r
482 // 4 upgrades!\r
483                                 if (infokey(world, "balancedtesla") == "1") {\r
484                                 oldself.currentammo = 2; }\r
485                         }\r
486 // TELEPAD 2 BEGIN\r
487         if (oldself.weapon == 5)\r
488         {\r
489                 self.has_teleporter = (self.has_teleporter + 1);\r
490                 sprint (self, "You finish building the Teleporter Pad.\n");\r
491 \r
492 //        teamprefixsprint(self.team_no,self); //- OfN\r
493 \r
494         teamsprint(self.team_no, self, self.netname);\r
495                 teamsprint(self.team_no, self, " has built a Teleporter Pad.\n");\r
496                 sound (oldself, 3, "weapons/guerset.wav", 1, 1);\r
497 \r
498                 self.ammo_cells = self.ammo_cells - 90;\r
499 \r
500                 // Create the teleporter\r
501                 oldself.classname = "building_teleporter";\r
502                 oldself.netname = "teleporter";\r
503 //              oldself.blocked = Teleporter_touch;             // Actual touch function\r
504                 oldself.touch = Teleporter_touch;\r
505                 oldself.max_health = 300;\r
506                 oldself.health = 300;\r
507                 oldself.th_die = Teleporter_Die;                // Death function\r
508                 oldself.mdl = "progs/telepad.mdl";              // Actual mdl\r
509                 oldself.team_no = self.team_no;\r
510                 oldself.maxammo_cells = 200;    //CH Max of 20 teleports\r
511                 oldself.ammo_cells = 100;       //CH start not at full\r
512 \r
513                 oldself.real_owner = self;                      // The Engineer owns this item\r
514                 oldself.colormap = self.colormap;       // Set the Color\r
515                 oldself.takedamage = 2;\r
516                 oldself.owner = world;\r
517                 oldself.movetype = 6;\r
518                 oldself.velocity = '0 0 8';\r
519                 oldself.flags = oldself.flags - (oldself.flags & 512);\r
520 \r
521                 oldself.solid = 2;\r
522                 setmodel(oldself, oldself.mdl);\r
523                 setsize (oldself, '-16 -16 0', '16 16 4');\r
524                 setorigin(oldself, oldself.origin + '0 0 8'); //CH does jump\r
525 \r
526                 oldself.heat = 4; //dont come on for 4 seconds\r
527                 oldself.think = Teleporter_heat_think;\r
528                 oldself.nextthink = time + 1;\r
529                 oldself.spawnflags = 4; //CH cause extensive checks for height\r
530 \r
531                 oldself.is_malfunctioning = 0;\r
532                 oldself.all_active=0; // OfN - reset HACKER improvements\r
533                 }\r
534 // TELEPAD 2 END\r
535                 }\r
536         }*/\r
537         W_SetCurrentAmmo();\r
538 };\r
539 \r
540 \r
541 \r
542 \r
543 \r
544 void () Drop_Magnetic_Mine =\r
545 {\r
546         if (self.has_mine == 1)\r
547         {\r
548                 sprint (self, "Hey, one mine at a time!\n");\r
549                 return;\r
550         }\r
551 \r
552         local entity item;\r
553 \r
554         item = spawn ();\r
555         item.team_no = self.team_no;\r
556         item.owner = self;\r
557         item.classname = "drop1";\r
558         item.origin = (self.origin - '0 0 -10');\r
559 \r
560 //      item.angles_x = 360;\r
561 \r
562         item.angles_y = 45;\r
563         item.flags = 256;\r
564 //      item.solid = 2;\r
565         item.solid = SOLID_TRIGGER;\r
566         item.movetype = 6;\r
567 \r
568         item.velocity = '0 0 1';\r
569         setsize (item, '-1 -1 0', '1 1 6');\r
570 \r
571         item.nextthink = (time + 180);\r
572 \r
573         item.touch = MagnetMineTouch;\r
574         setmodel (item, "models/magmine/magnetmine.md3");\r
575         item.scale = .35;\r
576 \r
577         item.think = RemoveMagnetMine;\r
578 \r
579         item.pausetime = time + 2;\r
580         self.has_mine = 1;\r
581         sprint(self, "You set a Mag Mine!\n");\r
582 }\r
583 \r
584 void EngineerGrenade(float req)\r
585 {\r
586         if(req == WR_GRENADE1)\r
587         {\r
588                 if(W_ThrowGrenade(W_ArmorGrenade))\r
589                         self.grenade_time = time + cvar("g_balance_grenade_armor_refire");\r
590         }\r
591         else if(req == WR_GRENADE2)\r
592         {\r
593                 Drop_Magnetic_Mine();\r
594                 self.grenade_time = time + 2;\r
595         }\r
596 }\r
597 \r
598 void EngineerPreThink()\r
599 {\r
600 }\r
601 \r
602 void EngineerPostThink()\r
603 {\r
604 }\r
605 \r
606 void BecomeEngineer(float portion)\r
607 {\r
608         self.max_health = cvar("g_balance_class_engineer_health") * portion;\r
609 \r
610         self.max_armor = cvar("g_balance_class_engineer_armor") * portion;\r
611 \r
612         self.mass = cvar("g_balance_class_engineer_mass");\r
613 \r
614         SetPlayerSpeed(self);\r
615 \r
616         self.items = IT_WEP1 | IT_WEP2 | IT_WEP3 | IT_WEP4;\r
617         self.switchweapon = WEP2;\r
618         self.ammo_shells = floor(20 * portion);\r
619         self.ammo_nails = floor(20 * portion);\r
620         self.ammo_rockets = floor(1 * portion);\r
621         self.ammo_cells = floor(0 * portion);\r
622         self.playerclass = 9;           // TF P.C.\r
623         SetMaxAmmoFor (32);\r
624 }\r
625 \r
626 // Magnetic Mine\r
627 void () RemoveMagnetMine =\r
628 {\r
629         sprint (self.owner, "Your Mag Mine is gone...\n");\r
630         self.owner.has_mine = 0;\r
631         dremove (self);\r
632         return;\r
633 };\r
634 \r
635 void () MagTimer =\r
636 {\r
637         local entity theowner;\r
638         local string st;\r
639 \r
640         theowner = self.owner;\r
641         theowner.option5 = (theowner.option5 - .5);\r
642         st = ftos (theowner.option5);\r
643 //      sound (theowner, 0, "ambient/100hzhum.wav", 1, 1);              // find new wav! :o\r
644         theowner.origin = self.origin;\r
645         CenterPrint2 (theowner, "You are stuck on a mag mine!\n", st);\r
646         if ((theowner.option5 < 2))\r
647         {\r
648                 theowner.option5 = 0;\r
649                 sprint (theowner.enemy, "Your Mag Mine died...\n");\r
650                 theowner.enemy.has_mine = 0;\r
651                 remove (self);\r
652                 return;\r
653         }\r
654         self.nextthink = (time + .5);\r
655 };\r
656 \r
657 void () MagMineActivate =\r
658 {\r
659         if ((other.option == 0))\r
660         {\r
661                 self.owner.has_mine = 1;\r
662                 newmis = spawn ();\r
663                 newmis.classname = "timer";\r
664                 newmis.netname = " FlashTimer";\r
665                 newmis.team_no = self.owner.team_no;\r
666                 newmis.owner = other;\r
667                 other.enemy = self.owner;\r
668                 newmis.think = MagTimer;\r
669                 newmis.nextthink = (time + 1);\r
670                 newmis.origin = other.origin;\r
671         }\r
672         other.option5 = (floor ((other.armorvalue * .25)) + 3);\r
673         if ((other.option5 > 15))\r
674         {\r
675                 other.option5 = 15;\r
676         }\r
677 };\r
678 \r
679 void () RemoveDudMine =\r
680 {\r
681         dremove(self);\r
682 }\r
683 \r
684 void () MagnetMineTouch =\r
685 {\r
686         local float isgood;\r
687         local entity isnearplayer;\r
688         \r
689         isnearplayer = findradius (self.origin, 10);\r
690         while (isnearplayer)\r
691         {\r
692                 if ((isnearplayer.classname == "player"))\r
693                 {\r
694                         isgood = 1;\r
695 //                      bprint (isnearplayer.classname);\r
696 //                      bprint ("\n");\r
697 //                      return;\r
698                 }\r
699                 isnearplayer = isnearplayer.chain;\r
700         }\r
701         if (isgood != 1)\r
702                 return;\r
703 \r
704         if ((self.pausetime > time))\r
705         {\r
706                 return;\r
707         }\r
708         if ((other.classname != "player"))\r
709         {\r
710                 return;\r
711         }\r
712         if ((other.health <= 0))\r
713         {\r
714                 return;\r
715         }\r
716 //      if ((other.is_undercover == 1))         //temp  - add function!!\r
717 //      {\r
718 //              return;\r
719 //      }\r
720         if ((other.team_no == self.owner.team_no))\r
721         {\r
722                 return;\r
723         }\r
724         if ((other.classname == "player"))\r
725         {\r
726                 MagMineActivate ();\r
727                 sprint (other, "You stepped on a Magnetic Mine! :(\n");\r
728                 sprint (self.owner, "Your Magnet Mine worked!\n");\r
729                 self.pausetime = (time + 5);\r
730         }\r
731         self.touch = SUB_NULL;\r
732         self.effects = EF_BRIGHTFIELD | EF_ADDITIVE;\r
733         self.think = RemoveDudMine;\r
734         self.nextthink = (time + 15);\r
735 //      dremove (self);\r
736 };