]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tffunctions.c
Fixed GUI menu flicker and added support to select Yellow and Green (pink in GUI...
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / tffunctions.c
1 // TF fucntions\r
2 .float goal_no;         // goal number - pair with defs file\r
3 .float goal_result; // pair with defs\r
4 .float else_goal;       // not sure\r
5 .float goal_result;\r
6 .float is_removed;      // entity is removed?\r
7 float (entity _p_10934, entity _p_10935) Activated;\r
8 float (float tno) TeamFortress_TeamGetScore;\r
9 float (float tno) TeamFortress_TeamGetColor;\r
10 void (entity _p_10980, entity _p_10981, float _p_10982) DoResults; //< - score increase thing\r
11 void (entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer;\r
12 void(entity client, string s) CenterPrint = #73;\r
13 \r
14 // misc stuff (move to TFDefs file)\r
15 entity newmis;          // This is what tf uses for spawning entities\r
16 .float has_disconnected;        //has the player disconnected?\r
17 .float no_grenades_1;\r
18 .float no_grenades_2;\r
19 .float no_grenades_3;\r
20 .float pausetime;       // not sure\r
21 float team1lives;\r
22 float team2lives;\r
23 float team3lives;\r
24 float team4lives;\r
25 float team1maxplayers;\r
26 float team2maxplayers;\r
27 float team3maxplayers;\r
28 float team4maxplayers;\r
29 float team1advantage;\r
30 float team2advantage;\r
31 float team3advantage;\r
32 float team4advantage;\r
33 \r
34 // stuff that still needs a function\r
35 float number_of_teams; // Number of teams == IMPORTANT\r
36 \r
37 // Color/Teamchange cheat detection (using DP functions instead of tf)\r
38 void (entity ent, float colors) setcolor;\r
39 \r
40 void SV_ChangeTeam(float color)\r
41 {\r
42 //      if (self.playerclass == 8)              // Spies can change team color right?\r
43 //              return;\r
44         if (self.team_no == 1 && color != 13)\r
45         {\r
46                 setcolor(self, 13,13);\r
47         }\r
48         if (self.team_no == 2 && color != 4)\r
49         {\r
50                 setcolor(self, 4,4);\r
51         }\r
52         if (self.team_no == 3 && color != 12)\r
53         {\r
54                 setcolor(self, 12,12);\r
55         }\r
56         if (self.team_no == 4 && color != 11)\r
57         {\r
58                 setcolor(self, 11,11);\r
59         }\r
60 };\r
61 \r
62 \r
63 void(entity targ, entity attacker) ClientObituary =\r
64 {\r
65         ClientObituary(targ,attacker);          // TEMP -- SOON I WILL ADD REAL DEATH MESSAGES\r
66 };\r
67 \r
68 void () DoTFAliases =\r
69 {\r
70                 TeamFortress_Alias("primeone", 150, TF_FLARE_LIT);\r
71                 TeamFortress_Alias("primetwo", 151, TF_FLARE_LIT);\r
72                 TeamFortress_Alias("throwgren", 152, TF_FLARE_LIT);\r
73                 TeamFortress_Alias("+gren1", 150, TF_FLARE_LIT);\r
74                 TeamFortress_Alias("+gren2", 151, TF_FLARE_LIT);\r
75                 TeamFortress_Alias("-gren1", 152, TF_FLARE_LIT);\r
76                 TeamFortress_Alias("-gren2", 152, TF_FLARE_LIT);\r
77 };\r
78 \r
79 void (entity tempent) dremove =\r
80 {\r
81         if ((tempent == world))\r
82         {\r
83                 dprint ("***BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG***\n");\r
84                 dprint ("WORLD has nearly been removed. Don't worry\n");\r
85                 dprint ("***BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG***\n");\r
86                 return;\r
87         }\r
88         if ((tempent.is_removed == 1.000000))\r
89         {\r
90                 return;\r
91         }\r
92         tempent.is_removed = 1.000000;\r
93         remove (tempent);\r
94 };\r
95 \r
96 entity (float gno) Findgoal =\r
97 {\r
98         local entity tg;\r
99         local string st;\r
100 \r
101         tg = find (world, classname, "info_tfgoal");\r
102         while (tg)\r
103         {\r
104                 if ((tg.goal_no == gno))\r
105                 {\r
106                         return (tg);\r
107                 }\r
108                 tg = find (tg, classname, "info_tfgoal");\r
109         }\r
110         dprint ("Could not find a goal with a goal_no of ");\r
111         st = ftos (gno);\r
112         dprint (st);\r
113         dprint (".\n");\r
114         //return (tg);\r
115 };\r
116 \r
117 void(entity Goal, entity AP, entity ActivatingGoal) AttemptToActivate = \r
118 {\r
119         local entity te;\r
120         local string st;\r
121         if (Activated(Goal, AP))\r
122         {\r
123                 if (ActivatingGoal == Goal)\r
124                 {\r
125                         DoResults(Goal, AP, TF_FLARE_OFF);\r
126                 }\r
127                 else\r
128                 {\r
129                         if (ActivatingGoal != world)\r
130                         {\r
131                                 DoResults(Goal, AP, ActivatingGoal.goal_result & 2);\r
132                         }\r
133                         else\r
134                         {\r
135                                 DoResults(Goal, AP, TF_FLARE_LIT);\r
136                         }\r
137                 }\r
138         }\r
139         else\r
140         {\r
141                 if (Goal.else_goal != TF_FLARE_LIT)\r
142                 {\r
143                         te = Findgoal(Goal.else_goal);\r
144                         if (te)\r
145                         {\r
146                                 AttemptToActivate(te, AP, ActivatingGoal);\r
147                         }\r
148                 }\r
149         }\r
150 };\r
151 \r
152 void (entity p) TeamFortress_SetSpeed =\r
153 {\r
154         local string sp;\r
155         local float tf;\r
156         local entity te;\r
157 \r
158         stuffcmd (p, "cl_movespeedkey 1\n");\r
159         if ((p.tfstate & 65536))\r
160         {\r
161                 if ((0 == 1))\r
162                 {\r
163                         stuffcmd (p, "m_forward 0\n");\r
164                         stuffcmd (p, "m_side 0\n");\r
165                 }\r
166                 p.velocity = '0 0 0';\r
167                 stuffcmd (p, "cl_backspeed 0\n");\r
168                 stuffcmd (p, "cl_forwardspeed 0\n");\r
169                 stuffcmd (p, "cl_sidespeed 0\n");\r
170                 return;\r
171         }\r
172         else\r
173         {\r
174                 if ((0 == 1))\r
175                 {\r
176                         stuffcmd (p, "m_forward 1\n");\r
177                         stuffcmd (p, "m_side 0.8\n");\r
178                 }\r
179         }\r
180         if ((p.class == 1))             //scout speed\r
181         {\r
182                 p.maxfbspeed = 450;\r
183                 p.maxstrafespeed = 450;\r
184         }\r
185         else\r
186         {\r
187                 if ((p.class == 2.1))                   // No sniper in nextf\r
188                 {\r
189                         p.maxfbspeed = 300;\r
190                         p.maxstrafespeed = 300;\r
191                 }\r
192                 else\r
193                 {\r
194                         if ((p.class == 4))             //soldier speed\r
195                         {\r
196                                 p.maxfbspeed = 240;\r
197                                 p.maxstrafespeed = 240;\r
198                         }\r
199                         else\r
200                         {\r
201                                 if ((p.class == 4.1))           // No demoman in nextf\r
202                                 {\r
203                                         p.maxfbspeed = 280;\r
204                                         p.maxstrafespeed = 280;\r
205                                 }\r
206                                 else\r
207                                 {\r
208                                         if ((p.class == 16))            // Medic Speed\r
209                                         {\r
210                                                 p.maxfbspeed = 320;\r
211                                                 p.maxstrafespeed = 320;\r
212                                         }\r
213                                         else\r
214                                         {\r
215                                                 if ((p.class == 6.1))           // No HWGuy in nextf\r
216                                                 {\r
217                                                         p.maxfbspeed = 230;\r
218                                                         p.maxstrafespeed = 230;\r
219                                                 }\r
220                                                 else\r
221                                                 {\r
222                                                         if ((p.class == 8))             // Pyro Speed\r
223                                                         {\r
224                                                                 p.maxfbspeed = 300;\r
225                                                                 p.maxstrafespeed = 300;\r
226                                                         }\r
227                                                         else\r
228                                                         {\r
229                                                                 if ((p.class == 11))            // Wazat -- We need a Civ class\r
230                                                                 {\r
231                                                                         p.maxfbspeed = 240;\r
232                                                                         p.maxstrafespeed = 240;\r
233                                                                 }\r
234                                                                 else\r
235                                                                 {\r
236                                                                         if ((p.class == 2))             // Spy Speed\r
237                                                                         {\r
238                                                                                 p.maxfbspeed = 300;\r
239                                                                                 p.maxstrafespeed = 300;\r
240                                                                         }\r
241                                                                         else\r
242                                                                         {\r
243                                                                                 if ((p.class == 32))            // Engineer Speed\r
244                                                                                 {\r
245                                                                                         p.maxfbspeed = 300;\r
246                                                                                         p.maxstrafespeed = 300;\r
247                                                                                 }\r
248                                                                                 else\r
249                                                                                 {\r
250                                                                                         if ((p.class == 0))             // No class\r
251                                                                                         {\r
252                                                                                                 p.maxfbspeed = 320;\r
253                                                                                                 p.maxstrafespeed = 320;\r
254                                                                                                 return;\r
255                                                                                         }\r
256                                                                                 }\r
257                                                                         }\r
258                                                                 }\r
259                                                         }\r
260                                                 }\r
261                                         }\r
262                                 }\r
263                         }\r
264                 }\r
265         }\r
266         tf = 0;\r
267         te = find (world, classname, "item_tfgoal");\r
268         while (((te != world) && (tf == 0)))\r
269         {\r
270                 if ((te.owner == p))\r
271                 {\r
272                         if ((te.goal_activation & 2))\r
273                         {\r
274                                 tf = 1;\r
275                                 p.maxfbspeed = (p.maxfbspeed / 2);\r
276                                 p.maxstrafespeed = (p.maxstrafespeed / 2);\r
277                         }\r
278                 }\r
279                 te = find (te, classname, "item_tfgoal");\r
280         }\r
281         if ((p.tfstate & 32768))\r
282         {\r
283                 p.maxfbspeed = (p.maxfbspeed / 2);\r
284                 p.maxstrafespeed = (p.maxstrafespeed / 2);\r
285         }\r
286         /* (p.leg_damage)                       // No leg damage if no snipers, eh?\r
287         {\r
288                 if ((p.leg_damage > 6))\r
289                 {\r
290                         p.leg_damage = 6;\r
291                 }\r
292                 p.maxfbspeed = (p.maxfbspeed * ((10 - p.leg_damage) / 10));\r
293                 p.maxstrafespeed = ((p.maxstrafespeed * (10 - p.leg_damage)) / 10);\r
294         }*/\r
295         if ((p.tfstate & 2048))\r
296         {\r
297                 if ((p.maxfbspeed > 80))\r
298                 {\r
299                         p.maxfbspeed = 80;\r
300                 }\r
301                 if ((p.maxstrafespeed > 80))\r
302                 {\r
303                         p.maxstrafespeed = 80;\r
304                 }\r
305         }\r
306         sp = ftos (p.maxfbspeed);\r
307         stuffcmd (p, "cl_backspeed ");\r
308         stuffcmd (p, sp);\r
309         stuffcmd (p, "\n");\r
310         stuffcmd (p, "cl_forwardspeed ");\r
311         stuffcmd (p, sp);\r
312         stuffcmd (p, "\n");\r
313         sp = ftos (p.maxstrafespeed);\r
314         stuffcmd (p, "cl_sidespeed ");\r
315         stuffcmd (p, sp);\r
316         stuffcmd (p, "\n");\r
317 };\r
318 \r
319 float (entity Retriever, float AmmoType) TeamFortress_GetMaxAmmo =\r
320 {\r
321         if ((AmmoType == 256))\r
322         {\r
323                 return (Retriever.maxammo_shells);\r
324         }\r
325         else\r
326         {\r
327                 if ((AmmoType == 512))\r
328                 {\r
329                         return (Retriever.maxammo_nails);\r
330                 }\r
331                 else\r
332                 {\r
333                         if ((AmmoType == 2048))\r
334                         {\r
335                                 return (Retriever.maxammo_cells);\r
336                         }\r
337                         else\r
338                         {\r
339                                 if ((AmmoType == 1024))\r
340                                 {\r
341                                         return (Retriever.maxammo_rockets);\r
342                                 }\r
343                                 else\r
344                                 {\r
345                                         if ((AmmoType == 4))\r
346                                         {\r
347                                                 return (Retriever.maxammo_medikit);\r
348                                         }\r
349                                         else\r
350                                         {\r
351                                                 if ((AmmoType == 131072))\r
352                                                 {\r
353                                                         return (Retriever.maxammo_detpack);\r
354                                                 }\r
355                                         }\r
356                                 }\r
357                         }\r
358                 }\r
359         }\r
360         dprint ("Error in TeamFortress_GetMaxAmmo()\n");\r
361         dprint ("Invalid ammo type passed.\n");\r
362         return (0);\r
363 };\r
364 \r
365 void () TeamFortress_CheckClassStats =\r
366 {\r
367 //              Wazat - Implement your armor system here, eh?\r
368 /*      if ((self.armortype > self.armor_allowed))\r
369         {\r
370                 self.armortype = self.armor_allowed;\r
371         }*/\r
372         if ((self.armorvalue > self.max_armor))\r
373         {\r
374                 self.armorvalue = self.max_armor;\r
375         }\r
376         if ((self.armortype < 0))\r
377         {\r
378                 self.armortype = 0;\r
379         }\r
380         if ((self.armorvalue < 0))\r
381         {\r
382                 self.armorvalue = 0;\r
383         }\r
384         if ((self.ammo_shells > TeamFortress_GetMaxAmmo (self, 256)))\r
385         {\r
386                 self.ammo_shells = TeamFortress_GetMaxAmmo (self, 256);\r
387         }\r
388         if ((self.ammo_shells < 0))\r
389         {\r
390                 self.ammo_shells = 0;\r
391         }\r
392         if ((self.ammo_nails > TeamFortress_GetMaxAmmo (self, 512)))\r
393         {\r
394                 self.ammo_nails = TeamFortress_GetMaxAmmo (self, 512);\r
395         }\r
396         if ((self.ammo_nails < 0))\r
397         {\r
398                 self.ammo_nails = 0;\r
399         }\r
400         if ((self.ammo_rockets > (TeamFortress_GetMaxAmmo (self, 1024) * 3)))\r
401         {\r
402                 self.ammo_rockets = (TeamFortress_GetMaxAmmo (self, 1024) * 3);\r
403         }\r
404         if ((self.ammo_rockets < 0))\r
405         {\r
406                 self.ammo_rockets = 0;\r
407         }\r
408         if ((self.ammo_cells > TeamFortress_GetMaxAmmo (self, 2048)))\r
409         {\r
410                 self.ammo_cells = TeamFortress_GetMaxAmmo (self, 2048);\r
411         }\r
412         if ((self.ammo_cells < 0))\r
413         {\r
414                 self.ammo_cells = 0;\r
415         }\r
416         if ((self.ammo_medikit > TeamFortress_GetMaxAmmo (self, 4)))\r
417         {\r
418                 self.ammo_medikit = TeamFortress_GetMaxAmmo (self, 4);\r
419         }\r
420         if ((self.ammo_medikit < 0))\r
421         {\r
422                 self.ammo_medikit = 0;\r
423         }\r
424         if ((self.ammo_detpack > TeamFortress_GetMaxAmmo (self, 131072)))\r
425         {\r
426                 self.ammo_detpack = TeamFortress_GetMaxAmmo (self, 131072);\r
427         }\r
428         if ((self.ammo_detpack < 0))\r
429         {\r
430                 self.ammo_detpack = 0;\r
431         }\r
432         if ((self.no_grenades_1 < 0))\r
433         {\r
434                 self.no_grenades_1 = 0;\r
435         }\r
436         if ((self.no_grenades_2 < 0))\r
437         {\r
438                 self.no_grenades_2 = 0;\r
439         }\r
440 //              NexTF uses auto-rot, so there's no need for this function.\r
441 //      if (((self.health > self.max_health) && !(self.items & 65536)))\r
442 //      {\r
443 //              TF_T_Damage (self, world, world, (self.max_health - self.health), 0, 256);\r
444 //      }\r
445         if ((self.health < 0))\r
446         {\r
447                 T_Heal (self, (self.health - self.health), 0);\r
448         }\r
449         self.items = (self.items - (self.items & ((8192 | 16384) | 32768)));\r
450         if ((self.armortype >= 0.8))\r
451         {\r
452                 self.items = (self.items | 32768);\r
453         }\r
454         else\r
455         {\r
456                 if ((self.armortype >= 0.6))\r
457                 {\r
458                         self.items = (self.items | 16384);\r
459                 }\r
460                 else\r
461                 {\r
462                         if ((self.armortype >= 0.3))\r
463                         {\r
464                                 self.items = (self.items | 8192);\r
465                         }\r
466                 }\r
467         }\r
468         weapon_action(self.weapon, WR_UPDATECOUNTS); // update ammo now\r
469 };\r
470 \r
471 // TF Get Score Frags\r
472 float (float tno) TeamFortress_TeamGetScoreFrags =\r
473 {\r
474         if (((toggleflags & 128) || (toggleflags & 2048)))\r
475         {\r
476                 if ((tno == 1))\r
477                 {\r
478                         return (team1score);\r
479                 }\r
480                 if ((tno == 2))\r
481                 {\r
482                         return (team2score);\r
483                 }\r
484                 if ((tno == 3))\r
485                 {\r
486                         return (team3score);\r
487                 }\r
488                 if ((tno == 4))\r
489                 {\r
490                         return (team4score);\r
491                 }\r
492         }\r
493         else\r
494         {\r
495                 if ((tno == 1))\r
496                 {\r
497                         return (team1frags);\r
498                 }\r
499                 if ((tno == 2))\r
500                 {\r
501                         return (team2frags);\r
502                 }\r
503                 if ((tno == 3))\r
504                 {\r
505                         return (team3frags);\r
506                 }\r
507                 if ((tno == 4))\r
508                 {\r
509                         return (team4frags);\r
510                 }\r
511         }\r
512         return (0);\r
513 };\r
514 \r
515 // TF Get Team Winner\r
516 float () TeamFortress_TeamGetWinner =\r
517 {\r
518         local float i;\r
519         local float j;\r
520         local float highest;\r
521         local float highestteam;\r
522 \r
523         i = 1;\r
524         highest = 0;\r
525         highestteam = 0;\r
526         while ((i < (number_of_teams + 1)))\r
527         {\r
528                 j = TeamFortress_TeamGetScoreFrags (i);\r
529                 if ((j > highest))\r
530                 {\r
531                         highest = j;\r
532                         highestteam = i;\r
533                 }\r
534                 i = (i + 1);\r
535         }\r
536         return (highestteam);\r
537 };\r
538 \r
539 // TF Score Increaser\r
540 void (float tno, float scoretoadd) TeamFortress_TeamIncreaseScore =\r
541 {\r
542         local entity e;\r
543 \r
544         if (((tno == 0) || (scoretoadd == 0)))\r
545         {\r
546                 return;\r
547         }\r
548         if ((tno == 1))\r
549         {\r
550                 team1score = (team1score + scoretoadd);\r
551         }\r
552         if ((tno == 2))\r
553         {\r
554                 team2score = (team2score + scoretoadd);\r
555         }\r
556         if ((tno == 3))\r
557         {\r
558                 team3score = (team3score + scoretoadd);\r
559         }\r
560         if ((tno == 4))\r
561         {\r
562                 team4score = (team4score + scoretoadd);\r
563         }\r
564         if (((toggleflags & 128) || (toggleflags & 2048)))\r
565         {\r
566                 e = find (world, classname, "player");\r
567                 while (e)\r
568                 {\r
569                         if ((e.team_no == tno))\r
570                         {\r
571                                 e.frags = TeamFortress_TeamGetScore (tno);\r
572                         }\r
573                         e = find (e, classname, "player");\r
574                 }\r
575         }\r
576 };\r
577 \r
578 // Returns Team Color Name (String)\r
579 string (float tno) TeamFortress_TeamGetColorString =\r
580 {\r
581         local float col;\r
582 \r
583         col = TeamFortress_TeamGetColor (tno);\r
584         if ((col == 1))\r
585         {\r
586                 return ("White");\r
587         }\r
588         if ((col == 2))\r
589         {\r
590                 return ("Brown");\r
591         }\r
592         if ((col == 3))\r
593         {\r
594                 return ("Blue");\r
595         }\r
596         if ((col == 4))\r
597         {\r
598                 return ("Green");\r
599         }\r
600         if ((col == 5))\r
601         {\r
602                 return ("Red");\r
603         }\r
604         if ((col == 6))\r
605         {\r
606                 return ("Tan");\r
607         }\r
608         if ((col == 7))\r
609         {\r
610                 return ("Pink");\r
611         }\r
612         if ((col == 8))\r
613         {\r
614                 return ("Orange");\r
615         }\r
616         if ((col == 9))\r
617         {\r
618                 return ("Purple");\r
619         }\r
620         if ((col == 10))\r
621         {\r
622                 return ("DarkPurple");\r
623         }\r
624         if ((col == 11))\r
625         {\r
626                 return ("Grey");\r
627         }\r
628         if ((col == 12))\r
629         {\r
630                 return ("DarkGreen");\r
631         }\r
632         if ((col == 13))\r
633         {\r
634                 return ("Yellow");\r
635         }\r
636         return ("DarkBlue");\r
637 };\r
638 \r
639 // Is civilian?\r
640 float (float tno) TeamFortress_TeamIsCivilian =\r
641 {\r
642         local entity te;\r
643 \r
644         if ((tno == 1))\r
645         {\r
646                 if ((civilianteams & 1))\r
647                 {\r
648                         return (1);\r
649                 }\r
650         }\r
651         else\r
652         {\r
653                 if ((tno == 2))\r
654                 {\r
655                         if ((civilianteams & 2))\r
656                         {\r
657                                 return (1);\r
658                         }\r
659                 }\r
660                 else\r
661                 {\r
662                         if ((tno == 3))\r
663                         {\r
664                                 if ((civilianteams & 4))\r
665                                 {\r
666                                         return (1);\r
667                                 }\r
668                         }\r
669                         else\r
670                         {\r
671                                 if ((civilianteams & 8))\r
672                                 {\r
673                                         return (1);\r
674                                 }\r
675                         }\r
676                 }\r
677         }\r
678         return (0);\r
679 };\r
680 \r
681 // Change Class\r
682 //              You use a different method of handling this tho Wazat?\r
683 void () TeamFortress_ChangeClass;\r
684 /*void () TeamFortress_ChangeClass =\r
685 {\r
686         local entity spot;\r
687         local entity te;\r
688         local float tc;\r
689         local string st;\r
690 \r
691         if ((self.playerclass != 0))\r
692         {\r
693                 if (((deathmatch != 3) && (cb_prematch_time < time)))\r
694                 {\r
695                         return;\r
696                 }\r
697                 if (TeamFortress_TeamIsCivilian (self.team_no))\r
698                 {\r
699                         sprint (self, "You cannot change class.\n");\r
700                         return;\r
701                 }\r
702                 if (!IsLegalClass ((self.impulse - 100)))\r
703                 {\r
704                         sprint (self, "Your team cannot play that class.\n");\r
705                         TeamFortress_DisplayLegalClasses ();\r
706                         return;\r
707                 }\r
708                 if (((spy_off == 1) && ((self.impulse - 100) == 8)))\r
709                 {\r
710                         sprint (self, "The spy class has been disabled on the server by the administrator.\n");\r
711                         return;\r
712                 }\r
713                 self.nextpc = (self.impulse - 100);\r
714                 sprint (self, "After dying, you will return as a ");\r
715                 TeamFortress_PrintClassName (self, self.nextpc, (self.tfstate & 8));\r
716                 self.immune_to_check = (time + 10);\r
717                 return;\r
718         }\r
719         if ((teamplay && (self.team_no == 0)))\r
720         {\r
721                 if ((toggleflags & 64))\r
722                 {\r
723                         if ((TeamFortress_TeamPutPlayerInTeam () == 0))\r
724                         {\r
725                                 return;\r
726                         }\r
727                 }\r
728                 else\r
729                 {\r
730                         sprint (self, "You must join a team first. \n");\r
731                         sprint (self, "use imin1, imin2, imin3, or imin4\n");\r
732                         return;\r
733                 }\r
734         }\r
735         if ((self.lives == 0))\r
736         {\r
737                 sprint (self, "You have no lives left.\n");\r
738                 return;\r
739         }\r
740         if ((!IsLegalClass ((self.impulse - 100)) && (self.impulse != 1)))\r
741         {\r
742                 sprint (self, "You cannot play that playerclass on this map. \n");\r
743                 TeamFortress_DisplayLegalClasses ();\r
744                 return;\r
745         }\r
746         if (((spy_off == 1) && ((self.impulse - 100) == 8)))\r
747         {\r
748                 sprint (self, "The spy class has been disabled on the server by the administrator.\n");\r
749                 return;\r
750         }\r
751         if ((self.impulse != 1))\r
752         {\r
753                 self.playerclass = (self.impulse - 100);\r
754         }\r
755         else\r
756         {\r
757                 self.playerclass = 11;\r
758         }\r
759         self.nextpc = 0;\r
760         self.takedamage = 2;\r
761         self.movetype = 3;\r
762         self.flags = (8 | 512);\r
763         self.waterlevel = 0;\r
764         self.air_finished = (time + 12);\r
765         self.solid = 3;\r
766         self.pausetime = 0;\r
767         spot = SelectSpawnPoint ();\r
768         self.origin = (spot.origin + '0 0 1');\r
769         self.angles = spot.angles;\r
770         self.fixangle = 1;\r
771         setmodel (self, string_null);\r
772         modelindex_null = self.modelindex;\r
773         setmodel (self, "progs/eyes.mdl");\r
774         modelindex_eyes = self.modelindex;\r
775         setmodel (self, "progs/player.mdl");\r
776         modelindex_player = self.modelindex;\r
777         setsize (self, '-16 -16 -24', '16 16 32');\r
778         self.view_ofs = '0 0 22';\r
779         player_stand1 ();\r
780         if ((deathmatch || coop))\r
781         {\r
782                 makevectors (self.angles);\r
783                 spawn_tfog ((self.origin + (v_forward * 20)));\r
784         }\r
785         if ((self.playerclass == 10))\r
786         {\r
787                 sprint (self, "Random Playerclass.\n");\r
788                 self.tfstate = (self.tfstate | 8);\r
789                 self.playerclass = (1 + floor ((random () * (10 - 1))));\r
790         }\r
791         if (((spot.classname == "info_player_teamspawn") && (cb_prematch_time < time)))\r
792         {\r
793                 if ((spot.items != 0))\r
794                 {\r
795                         te = Finditem (spot.items);\r
796                         if (te)\r
797                         {\r
798                                 tfgoalitem_GiveToPlayer (te, self, self);\r
799                         }\r
800                         if (!(spot.goal_activation & 1))\r
801                         {\r
802                                 spot.items = 0;\r
803                         }\r
804                 }\r
805                 if (spot.message)\r
806                 {\r
807                         CenterPrint (self, spot.message);\r
808                         if (!(spot.goal_activation & 2))\r
809                         {\r
810                                 spot.message = string_null;\r
811                         }\r
812                 }\r
813                 if ((spot.activate_goal_no != 0))\r
814                 {\r
815                         te = Findgoal (spot.activate_goal_no);\r
816                         if (te)\r
817                         {\r
818                                 AttemptToActivate (te, self, spot);\r
819                         }\r
820                 }\r
821                 if ((spot.goal_effects == 1))\r
822                 {\r
823                         spot.classname = "deadpoint";\r
824                         spot.team_str_home = string_null;\r
825                         spot.nextthink = (time + 1);\r
826                         spot.think = SUB_Remove;\r
827                 }\r
828         }\r
829         spot = find (world, classname, "player");\r
830         while (spot)\r
831         {\r
832                 if (((spot.team_no == self.team_no) && (spot != self)))\r
833                 {\r
834                         sprint (spot, 2, self.netname);\r
835                         sprint (spot, 2, " is playing as a ");\r
836                         TeamFortress_PrintClassName (spot, self.playerclass, (self.tfstate & 8));\r
837                 }\r
838                 spot = find (spot, classname, "player");\r
839         }\r
840         TeamFortress_PrintClassName (self, self.playerclass, (self.tfstate & 8));\r
841         TeamFortress_SetEquipment ();\r
842         TeamFortress_SetHealth ();\r
843         TeamFortress_SetSpeed (self);\r
844         TeamFortress_SetSkin (self);\r
845         if (cease_fire)\r
846         {\r
847                 sprint (self, "\n\nCEASE FIRE MODE\n");\r
848                 self.immune_to_check = (time + 10);\r
849                 self.tfstate = (self.tfstate | 65536);\r
850                 TeamFortress_SetSpeed (self);\r
851         }\r
852 };*/\r
853 \r
854 // Show what class each member of the team is -- NEEDS AN IMPULSE CALL FUNCTION\r
855 void (entity Player) TeamFortress_TeamShowMemberClasses =\r
856 {\r
857         local entity e;\r
858         local float found;\r
859 \r
860         found = 0;\r
861         e = find (world, classname, "player");\r
862         while (e)\r
863         {\r
864                 if ((((e.team_no == Player.team_no) || (e.team_no == 0)) && (e != Player)))\r
865                 {\r
866                         if ((e.model != string_null))\r
867                         {\r
868                                 if (!found)\r
869                                 {\r
870                                         found = 1;\r
871                                         sprint (self, "The other members of your team are:\n");\r
872                                 }\r
873                                 sprint (Player, e.netname);\r
874                                 sprint (Player, " : ");\r
875 //                              TeamFortress_PrintClassName (Player, e.playerclass, (e.tfstate & 8));\r
876                                 TeamFortress_PrintClassName (Player, e.class, (e.tfstate & 8));\r
877                         }\r
878                 }\r
879                 e = find (e, classname, "player");\r
880         }\r
881         if (!found)\r
882         {\r
883                 sprint (Player, "There are no other players on your team.\n");\r
884         }\r
885 };\r
886 \r
887 // Returns class name value\r
888 string (float pc) TeamFortress_GetClassName =\r
889 {\r
890         if ((pc == 1))                  // Scout is class 1 (normal)\r
891         {\r
892                 return ("Scout");\r
893         }\r
894         else\r
895         {\r
896                 if ((pc == 2.1))\r
897                 {\r
898                         return ("Sniper");              // Player Class 2 is Spy in NexTF -- no Snipers\r
899                 }\r
900                 else\r
901                 {\r
902                         if ((pc == 4))                          // Player Class 4 is soldier in NexTF\r
903                         {\r
904                                 return ("Soldier");\r
905                         }\r
906                         else\r
907                         {\r
908                                 if ((pc == 4.1))                        // No DemoMan in NexTF\r
909                                 {\r
910                                         return ("Demolitions Man");\r
911                                 }\r
912                                 else\r
913                                 {\r
914                                         if ((pc == 16))\r
915                                         {\r
916                                                 return ("Combat Medic");                // Medic is Class 16 in NexTF\r
917                                         }\r
918                                         else\r
919                                         {\r
920                                                 if ((pc == 6.1))\r
921                                                 {\r
922                                                         return ("Heavy Weapons Guy");           // No HWGuy in NexTF\r
923                                                 }\r
924                                                 else\r
925                                                 {\r
926                                                         if ((pc == 8))\r
927                                                         {\r
928                                                                 return ("Pyro");                // Pyro is class 8 in NexTF\r
929                                                         }\r
930                                                         else\r
931                                                         {\r
932                                                                 if ((pc == 2))\r
933                                                                 {\r
934                                                                         return ("Spy");                 // Spy is class 2 in NexTF\r
935                                                                 }\r
936                                                                 else\r
937                                                                 {\r
938                                                                         if ((pc == 32))\r
939                                                                         {\r
940                                                                                 return ("Engineer");            // Engineer is class 32 in nextf\r
941                                                                         }\r
942                                                                         else\r
943                                                                         {\r
944                                                                                 if ((pc == 11))                 // Wazat- we need to make civ class\r
945                                                                                 {\r
946                                                                                         return ("Civilian");\r
947                                                                                 }\r
948                                                                                 else\r
949                                                                                 {\r
950                                                                                         if ((pc == 0))\r
951                                                                                         {\r
952                                                                                                 return ("Observer");\r
953                                                                                         }\r
954                                                                                         else\r
955                                                                                         {\r
956                                                                                                 if ((pc == 10))                 // Wazat- we need to add "random class" feature\r
957                                                                                                 {\r
958                                                                                                         return ("Random Playerclass");\r
959                                                                                                 }\r
960                                                                                         }\r
961                                                                                 }\r
962                                                                         }\r
963                                                                 }\r
964                                                         }\r
965                                                 }\r
966                                         }\r
967                                 }\r
968                         }\r
969                 }\r
970         }\r
971 };\r
972 \r
973 // Prints the classname using TeamFortress_GetClassName function\r
974 void (entity Viewer, float pc, float rpc) TeamFortress_PrintClassName =\r
975 {\r
976         local string st;\r
977 \r
978         st = TeamFortress_GetClassName (pc);\r
979         sprint (Viewer, st);\r
980         if ((rpc != 0))\r
981         {\r
982                 sprint (Viewer, " (Random)");\r
983         }\r
984         sprint (Viewer, "\n");\r
985 };\r
986 \r
987 // Returns Team Color Value\r
988 //                              This is causing crashes in bringit -- I will attempt to fix\r
989 float (float tno) TeamFortress_TeamGetColor =\r
990 {\r
991         if ((tno == 1))\r
992         {\r
993                 return (14);\r
994         }\r
995         if ((tno == 2))\r
996         {\r
997                 return (5);\r
998         }\r
999         if ((tno == 3))\r
1000         {\r
1001                 return (13);\r
1002         }\r
1003         if ((tno == 4))\r
1004         {\r
1005                 return (12);\r
1006         }\r
1007         return (0);\r
1008 };\r
1009 \r
1010 // Returns Team Score Value\r
1011 float (float tno) TeamFortress_TeamGetScore =\r
1012 {\r
1013         if ((tno == 1))\r
1014         {\r
1015                 return (team1score);\r
1016         }\r
1017         if ((tno == 2))\r
1018         {\r
1019                 return (team2score);\r
1020         }\r
1021         if ((tno == 3))\r
1022         {\r
1023                 return (team3score);\r
1024         }\r
1025         if ((tno == 4))\r
1026         {\r
1027                 return (team4score);\r
1028         }\r
1029         return (0);\r
1030 };\r
1031 \r
1032 // Get Team Lives\r
1033 float (float tno) TeamFortress_TeamGetLives =\r
1034 {\r
1035         if ((tno == 1))\r
1036         {\r
1037                 return (team1lives);\r
1038         }\r
1039         if ((tno == 2))\r
1040         {\r
1041                 return (team2lives);\r
1042         }\r
1043         if ((tno == 3))\r
1044         {\r
1045                 return (team3lives);\r
1046         }\r
1047         if ((tno == 4))\r
1048         {\r
1049                 return (team4lives);\r
1050         }\r
1051         return (0);\r
1052 };\r
1053 \r
1054 // Show Team Scores\r
1055 void (float all) TeamFortress_TeamShowScores =\r
1056 {\r
1057         local string st;\r
1058         local float i;\r
1059         local float j;\r
1060 \r
1061         i = 1;\r
1062         if ((all == 2))\r
1063         {\r
1064                 while ((i <= number_of_teams))\r
1065                 {\r
1066                         if ((TeamFortress_TeamGetColor (i) > 0))\r
1067                         {\r
1068                                 j = TeamFortress_TeamGetScore (i);\r
1069                                 st = TeamFortress_TeamGetColorString (i);\r
1070 //                              bprint (st);\r
1071 //                              bprint (": ");\r
1072                                 bprint (st);\r
1073                                 bprint (": ");\r
1074                                 st = ftos (j);\r
1075                                 //bprint (st);\r
1076                                 //bprint (" ");\r
1077                                 bprint (st);\r
1078                                 bprint (" ");\r
1079                         }\r
1080                         i = (i + 1);\r
1081                 }\r
1082 //              bprint ("\n");\r
1083                 bprint ("\n");\r
1084                 return;\r
1085         }\r
1086         while ((i <= number_of_teams))\r
1087         {\r
1088                 if ((TeamFortress_TeamGetColor (i) > 0))\r
1089                 {\r
1090                         if (all)\r
1091                         {\r
1092                                 bprint ("Team ");\r
1093                         }\r
1094                         else\r
1095                         {\r
1096                                 sprint (self, "Team ");\r
1097                         }\r
1098                         st = ftos (i);\r
1099                         if (all)\r
1100                         {\r
1101                                 bprint (st);\r
1102                         }\r
1103                         else\r
1104                         {\r
1105                                 sprint (self, st);\r
1106                         }\r
1107                         if (all)\r
1108                         {\r
1109                                 bprint (" (");\r
1110                         }\r
1111                         else\r
1112                         {\r
1113                                 sprint (self, " (");\r
1114                         }\r
1115                         st = TeamFortress_TeamGetColorString (i);\r
1116                         if (all)\r
1117                         {\r
1118                                 bprint (st);\r
1119                         }\r
1120                         else\r
1121                         {\r
1122                                 sprint (self, st);\r
1123                         }\r
1124                         if (all)\r
1125                         {\r
1126                                 bprint (") : ");\r
1127                         }\r
1128                         else\r
1129                         {\r
1130                                 sprint (self, ") : ");\r
1131                         }\r
1132                         j = TeamFortress_TeamGetScore (i);\r
1133                         st = ftos (j);\r
1134                         if (all)\r
1135                         {\r
1136                                 bprint (st);\r
1137                         }\r
1138                         else\r
1139                         {\r
1140                                 sprint (self, st);\r
1141                         }\r
1142                         if (all)\r
1143                         {\r
1144                                 bprint ("\n");\r
1145                         }\r
1146                         else\r
1147                         {\r
1148                                 sprint (self, "\n");\r
1149                         }\r
1150                 }\r
1151                 i = (i + 1);\r
1152         }\r
1153 };\r
1154 \r
1155 // Get Number Of Players On Team\r
1156 float (float tno) TeamFortress_TeamGetNoPlayers =\r
1157 {\r
1158         local float size_team;\r
1159         local entity search;\r
1160 \r
1161         search = find (world, classname, "player");\r
1162         while ((search != world))\r
1163         {\r
1164                 if ((search.team_no == tno))\r
1165                 {\r
1166                         size_team = (size_team + 1);\r
1167                 }\r
1168                 search = find (search, classname, "player");\r
1169         }\r
1170         return (size_team);\r
1171 };\r
1172 \r
1173 // Get general number of players\r
1174 float () TeamFortress_GetNoPlayers =\r
1175 {\r
1176         local float nump;\r
1177         local entity search;\r
1178 \r
1179         search = find (world, classname, "player");\r
1180         while ((search != world))\r
1181         {\r
1182                 if ((search.netname != string_null))\r
1183                 {\r
1184                         nump = (nump + 1);\r
1185                 }\r
1186                 search = find (search, classname, "player");\r
1187         }\r
1188         return (nump);\r
1189 };\r
1190 \r
1191 // Get max players for a team\r
1192 float (float tno) TeamFortress_TeamGetMaxPlayers =\r
1193 {\r
1194         if ((tno == 1))\r
1195         {\r
1196                 return (team1maxplayers);\r
1197         }\r
1198         if ((tno == 2))\r
1199         {\r
1200                 return (team2maxplayers);\r
1201         }\r
1202         if ((tno == 3))\r
1203         {\r
1204                 return (team3maxplayers);\r
1205         }\r
1206         if ((tno == 4))\r
1207         {\r
1208                 return (team4maxplayers);\r
1209         }\r
1210         return (0);\r
1211 };\r
1212 \r
1213 // Set The Team Color\r
1214 void (float tno) TeamFortress_TeamSetColor =\r
1215 {\r
1216         if ((tno == 1))\r
1217         {\r
1218                 team1col = 14;\r
1219                 return;\r
1220         }\r
1221         if ((tno == 2))\r
1222         {\r
1223                 team2col = 5;\r
1224                 return;\r
1225         }\r
1226         if ((tno == 3))\r
1227         {\r
1228                 team3col = 13;\r
1229                 return;\r
1230         }\r
1231         if ((tno == 4))\r
1232         {\r
1233                 team4col = 12;\r
1234                 return;\r
1235         }\r
1236 };\r
1237 \r
1238 // Set The Team Number\r
1239 float (float tno) TeamFortress_TeamSet =\r
1240 {\r
1241         local string st;\r
1242         local float tc;\r
1243 \r
1244         if ((teamplay < 1))\r
1245         {\r
1246                 sprint (self, "Teamplay is not On, so FortressTeams are inactive.\n");\r
1247                 return (0);\r
1248         }\r
1249         if (((tno > number_of_teams) && (number_of_teams != 0)))\r
1250         {\r
1251                 sprint (self, "There can be only ");\r
1252                 st = ftos (number_of_teams);\r
1253                 sprint (self, st);\r
1254                 sprint (self, " teams on this map.\nTry again\n");\r
1255                 return (0);\r
1256         }\r
1257         if ((self.team_no > 0))\r
1258         {\r
1259                 sprint (self, "You're already in Team No ");\r
1260                 st = ftos (self.team_no);\r
1261                 sprint (self, st);\r
1262                 sprint (self, ".\n");\r
1263                 return (0);\r
1264         }\r
1265         tc = TeamFortress_TeamGetNoPlayers (tno);\r
1266         if ((tc >= TeamFortress_TeamGetMaxPlayers (tno)))\r
1267         {\r
1268                 sprint (self, "That team is full. Pick another.\n");\r
1269                 return (0);\r
1270         }\r
1271         if ((TeamFortress_TeamGetColor (tno) == 0))\r
1272         {\r
1273                 TeamFortress_TeamSetColor (tno);\r
1274                 if ((TeamFortress_TeamGetColor (tno) == 0))\r
1275                 {\r
1276                         sprint (self, "You can't start a new team with your color, since another ");\r
1277                         sprint (self, "already using that color. Change your pants color, then try again.\n");\r
1278                         return (0);\r
1279                 }\r
1280                 bprint (self.netname);\r
1281                 bprint (" has started Team No ");\r
1282                 st = ftos (tno);\r
1283                 bprint (st);\r
1284                 bprint (".\n");\r
1285                 self.immune_to_check = (time + 10);\r
1286                 if (((toggleflags & 128) || (toggleflags & 2048)))\r
1287                 {\r
1288                         self.frags = TeamFortress_TeamGetScore (tno);\r
1289                 }\r
1290                 stuffcmd (self, "color ");\r
1291                 tc = (TeamFortress_TeamGetColor (tno) - 1);\r
1292                 st = ftos (tc);\r
1293                 stuffcmd (self, st);\r
1294                 stuffcmd (self, "\n");\r
1295                 self.team_no = tno;\r
1296                 self.lives = TeamFortress_TeamGetLives (tno);\r
1297                 //if ((self.playerclass == 0))\r
1298                 if ((self.class == 0))\r
1299                 {\r
1300                         if (TeamFortress_TeamIsCivilian (self.team_no))\r
1301                         {\r
1302                                 self.impulse = 1;\r
1303                                 TeamFortress_ChangeClass ();\r
1304                         }\r
1305                 }\r
1306                 return (1);\r
1307         }\r
1308         bprint (self.netname);\r
1309         bprint (" has joined Team No ");\r
1310         st = ftos (tno);\r
1311         bprint (st);\r
1312         bprint (".\n");\r
1313         stuffcmd (self, "color ");\r
1314         tc = (TeamFortress_TeamGetColor (tno) - 1);\r
1315         st = ftos (tc);\r
1316         stuffcmd (self, st);\r
1317         stuffcmd (self, "\n");\r
1318         self.team_no = tno;\r
1319         self.immune_to_check = (time + 10);\r
1320         self.lives = TeamFortress_TeamGetLives (tno);\r
1321         if (((toggleflags & 128) || (toggleflags & 2048)))\r
1322         {\r
1323                 self.frags = TeamFortress_TeamGetScore (tno);\r
1324         }\r
1325         TeamFortress_TeamShowMemberClasses (self);\r
1326         //if ((self.playerclass == 0))\r
1327         if ((self.class == 0))\r
1328         {\r
1329                 if (TeamFortress_TeamIsCivilian (self.team_no))\r
1330                 {\r
1331                         self.impulse = 1;\r
1332                         TeamFortress_ChangeClass ();\r
1333                 }\r
1334         }\r
1335         return (1);\r
1336 };\r
1337 \r
1338 // Get team score (used in conjunction with autoteam..)\r
1339 float (float tno) TeamFortress_GetRealScore =\r
1340 {\r
1341         local entity te;\r
1342         local float total;\r
1343 \r
1344         te = find (world, classname, "player");\r
1345         while (te)\r
1346         {\r
1347                 if (te.team_no == tno)\r
1348                 {                       \r
1349                         total = total + te.real_frags;\r
1350                 }\r
1351                 te = find (te, classname, "player");\r
1352         }\r
1353         return total;\r
1354 }\r
1355 \r
1356 // Find best team for player (autoteam?)\r
1357 float() TeamFortress_TeamPutPlayerInTeam = \r
1358 {\r
1359         local float i;\r
1360         local float j;\r
1361         local float score1;\r
1362         local float score2;\r
1363 \r
1364         local float lowest;\r
1365         local float likely_team;\r
1366 \r
1367         i = 1;\r
1368         likely_team = random() * number_of_teams;\r
1369         likely_team = ceil(likely_team);\r
1370         if (likely_team == 0)\r
1371         {\r
1372                 likely_team = number_of_teams;\r
1373         }\r
1374 \r
1375         lowest = 33;\r
1376         while (i < number_of_teams + 1)\r
1377         {\r
1378                 j = TeamFortress_TeamGetNoPlayers(i);\r
1379                 \r
1380                 if (j < lowest)\r
1381                 {\r
1382                         if (TeamFortress_TeamGetMaxPlayers(i) > j)\r
1383                         {\r
1384                                 lowest = j;\r
1385                                 likely_team = i;\r
1386                         }\r
1387                 }\r
1388                 // pablo. fancier autoteam for even teams.\r
1389                 else if (j == lowest)\r
1390                 {\r
1391                         \r
1392                         if (TeamFortress_TeamGetMaxPlayers(i) > j)\r
1393                         {\r
1394                                 score1 = TeamFortress_GetRealScore(i);\r
1395                                 score2 = TeamFortress_GetRealScore(likely_team);\r
1396 \r
1397                                 if ( score1 < score2 )\r
1398                                 {\r
1399                                         likely_team = i;\r
1400                                 }\r
1401                                 else if (score1 == score2)\r
1402                                 {\r
1403                                         if (random() > 0.5)\r
1404                                         {\r
1405                                                 likely_team = i;\r
1406                                         }\r
1407                                 }\r
1408                         }\r
1409                 }\r
1410                 //\r
1411                 i = i + 1;\r
1412         }\r
1413         return TeamFortress_TeamSet(likely_team);\r
1414 };\r
1415 \r
1416 // Remove item_tfgoal timers\r
1417 void() TeamFortress_RemoveTimers = \r
1418 {\r
1419         local entity te;\r
1420 //      self.leg_damage = 0;            // No Snipers\r
1421 //      self.is_undercover = 0;         // I think this function is called in PlayerKill\r
1422 //      self.is_building = 0;           // To Be Added ?\r
1423 //      self.building = world;          // To Be Added ?\r
1424         if (self.tfstate & 2048)\r
1425         {\r
1426                 self.tfstate = self.tfstate - 2048;\r
1427                 TeamFortress_SetSpeed(self);\r
1428                 self.heat = 0;\r
1429         }\r
1430         te = find(world, classname, "timer");\r
1431         while (te != world)\r
1432         {\r
1433                 if (te.owner == self)\r
1434                 {\r
1435                         dremove(te);\r
1436                         te = find(world, classname, "timer");\r
1437                 }\r
1438                 else\r
1439                 {\r
1440                         te = find(te, classname, "timer");\r
1441                 }\r
1442         }\r
1443         te = find(world, classname, "item_tfgoal");\r
1444         while (te)\r
1445         {\r
1446                 if (te.owner == self)\r
1447                 {\r
1448                         if (!(te.goal_activation & 256))\r
1449                         {\r
1450                                 tfgoalitem_RemoveFromPlayer(te, self, 0);\r
1451                         }\r
1452                         if (CTF_Map == 1 && te.goal_no == 1)\r
1453                         {\r
1454                                 bprint(self.netname);\r
1455                                 bprint(" ÌÏÓÔ the ÂÌÕÅ flag!\n");\r
1456                         }\r
1457                         else\r
1458                         {\r
1459                                 if (CTF_Map == 1 && te.goal_no == 2)\r
1460                                 {\r
1461                                         bprint(self.netname);\r
1462                                         bprint(" ÌÏÓÔ the ÒÅÄ flag!\n");\r
1463                                 }\r
1464                         }\r
1465                 }\r
1466                 te = find(te, classname, "item_tfgoal");\r
1467         }\r
1468         te = find(world, classname, "detpack");\r
1469         while (te)\r
1470         {\r
1471                 if (te.weaponmode == 1 && te.enemy == self)\r
1472                 {\r
1473                         te.weaponmode = 0;\r
1474                 }\r
1475                 te = find(te, classname, "detpack");\r
1476         }\r
1477 //      TeamFortress_DetonatePipebombs(); gold. this is the old code for removing pipebombs on quitting.  new one written by pablo is below.\r
1478         // NO PIPEBOMBS IN NEXTF\r
1479 /*      te = find(world, classname, "pipebomb");\r
1480         while (te != world)\r
1481         {\r
1482                 if(te.owner == self)\r
1483                 {\r
1484                         decrement_team_pipebombs(self.team_no);\r
1485                         deathmsg = te.weapon;\r
1486                         te.weapon = 10;\r
1487                         T_RadiusDamage(te, self, 120, world);\r
1488                         WriteByte(4, 23);\r
1489                         WriteByte(4, 3);\r
1490                         WriteCoord(4, te.origin_x);\r
1491                         WriteCoord(4, te.origin_y);\r
1492                         WriteCoord(4, te.origin_z);\r
1493                         multicast(te.origin, TF_FLARE_OFF);\r
1494                         dremove(te);\r
1495                 }\r
1496         te = find(te, classname, "pipebomb");\r
1497         }*/\r
1498 //      stuffcmd(self, "v_idlescale 0\n");\r
1499 //      stuffcmd(self, "v_cshift 0 0 0 0\n");\r
1500 //      self.item_list = 0;                     // To Be Added?\r
1501 //      self.FlashTime = 0;\r
1502         CenterPrint(self, "\n");\r
1503         self.menu_count = 25;           // Menu Stuff - important\r
1504         self.current_menu = 1;          ////\r
1505         self.impulse = 0;\r
1506 };\r
1507 \r
1508 // TF's Become Explosion\r
1509 void() BecomeExplosion = \r
1510 {\r
1511         dremove(self);\r
1512 };\r
1513 \r
1514 // TF Alias Maker\r
1515 void(string halias, float himpulse1, float himpulse2) TeamFortress_Alias = \r
1516 {\r
1517         local string imp;\r
1518         stuffcmd(self, "alias ");\r
1519         stuffcmd(self, halias);\r
1520         stuffcmd(self, " \"impulse ");\r
1521         imp = ftos(himpulse1);\r
1522         stuffcmd(self, imp);\r
1523         if (himpulse2 != 0)\r
1524         {\r
1525                 stuffcmd(self, ";wait; impulse ");\r
1526                 imp = ftos(himpulse2);\r
1527                 stuffcmd(self, imp);\r
1528         }\r
1529         stuffcmd(self, "\"\n");\r
1530 };\r
1531 \r
1532 float (float tno) TeamFortress_TeamGetIllegalClasses =\r
1533 {\r
1534         if ((tno == 1))\r
1535         {\r
1536                 return (illegalclasses1);\r
1537         }\r
1538         if ((tno == 2))\r
1539         {\r
1540                 return (illegalclasses2);\r
1541         }\r
1542         if ((tno == 3))\r
1543         {\r
1544                 return (illegalclasses3);\r
1545         }\r
1546         if ((tno == 4))\r
1547         {\r
1548                 return (illegalclasses4);\r
1549         }\r
1550         return (0);\r
1551 };\r
1552 \r
1553 // Check if legal class\r
1554 float (float pc) IsLegalClass =\r
1555 {\r
1556         local float bit;\r
1557 \r
1558 /*      if (((spy_off == 1) && (pc == 8)))\r
1559         {\r
1560                 return (0);\r
1561         }*/\r
1562         if ((pc == 1))\r
1563         {\r
1564                 bit = 1;\r
1565         }\r
1566         else\r
1567         {\r
1568                 if ((pc == 2))\r
1569                 {\r
1570                         bit = 2;\r
1571                 }\r
1572                 else\r
1573                 {\r
1574                         if ((pc == 3))\r
1575                         {\r
1576                                 bit = 4;\r
1577                         }\r
1578                         else\r
1579                         {\r
1580                                 if ((pc == 4))\r
1581                                 {\r
1582                                         bit = 8;\r
1583                                 }\r
1584                                 else\r
1585                                 {\r
1586                                         if ((pc == 5))\r
1587                                         {\r
1588                                                 bit = 16;\r
1589                                         }\r
1590                                         else\r
1591                                         {\r
1592                                                 if ((pc == 6))\r
1593                                                 {\r
1594                                                         bit = 32;\r
1595                                                 }\r
1596                                                 else\r
1597                                                 {\r
1598                                                         if ((pc == 7))\r
1599                                                         {\r
1600                                                                 bit = 64;\r
1601                                                         }\r
1602                                                         else\r
1603                                                         {\r
1604                                                                 if ((pc == 8))\r
1605                                                                 {\r
1606                                                                         bit = 256;\r
1607                                                                 }\r
1608                                                                 else\r
1609                                                                 {\r
1610                                                                         if ((pc == 9))\r
1611                                                                         {\r
1612                                                                                 bit = 512;\r
1613                                                                         }\r
1614                                                                         else\r
1615                                                                         {\r
1616                                                                                 if ((pc == 10))\r
1617                                                                                 {\r
1618                                                                                         bit = 128;\r
1619                                                                                 }\r
1620                                                                         }\r
1621                                                                 }\r
1622                                                         }\r
1623                                                 }\r
1624                                         }\r
1625                                 }\r
1626                         }\r
1627                 }\r
1628         }\r
1629         if (((illegalclasses & bit) || (TeamFortress_TeamGetIllegalClasses (self.team_no) & bit)))\r
1630         {\r
1631                 return (0);\r
1632         }\r
1633         return (1);\r
1634 };\r
1635 \r
1636 // Display legal classes for map\r
1637 void () TeamFortress_DisplayLegalClasses =\r
1638 {\r
1639         local float gotone;\r
1640         local float ill;\r
1641 \r
1642         sprint (self, "Legal Classes for your team are:\n");\r
1643         gotone = 0;\r
1644         ill = TeamFortress_TeamGetIllegalClasses (self.team_no);\r
1645         if ((!(illegalclasses & 1) && !(ill & 1)))\r
1646         {\r
1647                 if (gotone)\r
1648                 {\r
1649                         sprint (self, ", ");\r
1650                 }\r
1651                 gotone = 1;\r
1652                 sprint (self, "Scout");\r
1653         }\r
1654         if ((!(illegalclasses & 2) && !(ill & 2)))\r
1655         {\r
1656                 if (gotone)\r
1657                 {\r
1658                         sprint (self, ", ");\r
1659                 }\r
1660                 gotone = 1;\r
1661                 sprint (self, "Sniper");\r
1662         }\r
1663         if ((!(illegalclasses & 4) && !(ill & 4)))\r
1664         {\r
1665                 if (gotone)\r
1666                 {\r
1667                         sprint (self, ", ");\r
1668                 }\r
1669                 gotone = 1;\r
1670                 sprint (self, "Soldier");\r
1671         }\r
1672         if ((!(illegalclasses & 8) && !(ill & 8)))\r
1673         {\r
1674                 if (gotone)\r
1675                 {\r
1676                         sprint (self, ", ");\r
1677                 }\r
1678                 gotone = 1;\r
1679                 sprint (self, "Demolitions Man");\r
1680         }\r
1681         if ((!(illegalclasses & 16) && !(ill & 16)))\r
1682         {\r
1683                 if (gotone)\r
1684                 {\r
1685                         sprint (self, ", ");\r
1686                 }\r
1687                 gotone = 1;\r
1688                 sprint (self, "Combat Medic");\r
1689         }\r
1690         if ((!(illegalclasses & 32) && !(ill & 32)))\r
1691         {\r
1692                 if (gotone)\r
1693                 {\r
1694                         sprint (self, ", ");\r
1695                 }\r
1696                 gotone = 1;\r
1697                 sprint (self, "Heavy Weapons Guy");\r
1698         }\r
1699         if ((!(illegalclasses & 64) && !(ill & 64)))\r
1700         {\r
1701                 if (gotone)\r
1702                 {\r
1703                         sprint (self, ", ");\r
1704                 }\r
1705                 gotone = 1;\r
1706                 sprint (self, "Pyro");\r
1707         }\r
1708         if ((!(illegalclasses & 256) && !(ill & 256)))\r
1709         {\r
1710                 if (gotone)\r
1711                 {\r
1712                         sprint (self, ", ");\r
1713                 }\r
1714                 gotone = 1;\r
1715                 sprint (self, "Spy");\r
1716         }\r
1717         if ((!(illegalclasses & 512) && !(ill & 512)))\r
1718         {\r
1719                 if (gotone)\r
1720                 {\r
1721                         sprint (self, ", ");\r
1722                 }\r
1723                 gotone = 1;\r
1724                 sprint (self, "Engineer");\r
1725         }\r
1726         if ((!(illegalclasses & 128) && !(ill & 128)))\r
1727         {\r
1728                 if (gotone)\r
1729                 {\r
1730                         sprint (self, ", ");\r
1731                 }\r
1732                 gotone = 1;\r
1733                 sprint (self, "RandomPC");\r
1734         }\r
1735         sprint (self, "\n");\r
1736 };\r
1737 \r
1738 // TF class change/select function\r
1739 void() TeamFortress_ChangeClass = \r
1740 {\r
1741         local entity spot;\r
1742         local entity te;\r
1743         local float tc;\r
1744         local string st;\r
1745 \r
1746         self.impulse += 100;            //temp\r
1747 \r
1748         if (self.playerclass != 0)\r
1749         {\r
1750 //              if (deathmatch != 3)\r
1751 //              {\r
1752 //                      return;\r
1753 //              }\r
1754                 if (TeamFortress_TeamIsCivilian(self.team_no))\r
1755                 {\r
1756                         sprint(self, "You cannot change class.\n");\r
1757                         return;\r
1758                 }\r
1759                 if (!IsLegalClass(self.impulse - 100))\r
1760                 {\r
1761                         sprint(self, "Your team cannot play that class.\n");\r
1762                         TeamFortress_DisplayLegalClasses();\r
1763                         return;\r
1764                 }\r
1765 /*              tc = IsRestrictedClass(self.impulse - 100);                     // TBA ADD THIS FUNCTION\r
1766                 if (tc != 0)\r
1767                 {\r
1768                         if (tc > 0)\r
1769                         {\r
1770                                 sprint(self, "That class is restricted to ");\r
1771                                 st = ftos(tc);\r
1772                                 sprint(self, st);\r
1773                                 sprint(self, " per team.\n");\r
1774                         }\r
1775                         else\r
1776                         {\r
1777                                 sprint(self, "That class is disabled.\n");\r
1778                         }\r
1779                         return;\r
1780                 }*/\r
1781                 self.nextpc = self.impulse - 100;\r
1782                 sprint(self, "After dying, you will return as a ");\r
1783                 TeamFortress_PrintClassName(self, self.nextpc, self.tfstate & 8);\r
1784                 self.immune_to_check = time + 10;\r
1785                 return;\r
1786         }\r
1787 /*if (teamplay && self.team_no == 0)            //handled in cmd function\r
1788         {\r
1789                 if (toggleflags & 64)\r
1790                 {\r
1791                         if (TeamFortress_TeamPutPlayerInTeam() == 0)\r
1792                         {\r
1793                                 return;\r
1794                         }\r
1795                 }\r
1796                 else\r
1797                 {\r
1798                         sprint(self, "You must join a team first. \n");\r
1799                         sprint(self, "use imin1, imin2, imin3, or imin4\n");\r
1800                         return;\r
1801                 }\r
1802         }*/\r
1803         if (self.lives == 0)\r
1804         {\r
1805                 sprint(self, "You have no lives left.\n");\r
1806                 return;\r
1807         }\r
1808         if (!IsLegalClass(self.impulse - 100) && self.impulse != 1)\r
1809         {\r
1810                 sprint(self, "You cannot play that playerclass on this map. \n");\r
1811                 TeamFortress_DisplayLegalClasses();\r
1812                 return;\r
1813         }\r
1814 \r
1815 /*      tc = IsRestrictedClass(self.impulse - 100);                     // TBA\r
1816         if (tc != 0)\r
1817         {\r
1818                 if (tc > 0)\r
1819                 {\r
1820                         sprint(self, "That class is restricted to ");\r
1821                         st = ftos(tc);\r
1822                         sprint(self, st);\r
1823                         sprint(self, " per team.\n");\r
1824                 }\r
1825                 else\r
1826                 {\r
1827                         sprint(self, "That class is disabled.\n");\r
1828                 }\r
1829                 return;\r
1830         }*/\r
1831         if (self.impulse != 1)\r
1832         {\r
1833                 self.playerclass = self.impulse - 100;\r
1834         }\r
1835         else\r
1836         {\r
1837                 self.playerclass = 11;\r
1838         }\r
1839         if (self.playerclass == 10)\r
1840         {               \r
1841                 sprint(self, "Random Playerclass.\n");\r
1842                 self.tfstate = self.tfstate | 8;\r
1843 /*              tc = 1 + floor(random() * (10 - 1));\r
1844                 while (IsRestrictedClass(tc) != 0)\r
1845                 {\r
1846                         tc = 1 + floor(random() * (10 - 1));\r
1847                 }*/\r
1848 //              self.playerclass = tc;\r
1849                 self.playerclass = 10;\r
1850                 ChooseRandomClass();\r
1851         }\r
1852         //ftos(TeamFortress_TeamGetIllegalClasses (self.team_no) & bit)\r
1853 \r
1854         PutClientInServer ();           //temp\r
1855 };\r
1856 \r
1857 // XavioR's new TF reload function\r
1858 void (float o, float m, void () g) weapon_thinkf;\r
1859 void () Reload_Restore_Weapon =\r
1860 {\r
1861         if (self.owner.weaponentity.pos1 != '0 0 0')\r
1862         {\r
1863                 self.owner.weaponentity.pos1 = '0 0 0';\r
1864                 self.owner.weaponentity.lip = PLAYER_WEAPONSELECTION_SPEED;\r
1865         }\r
1866 };\r
1867 \r
1868 void (float rweapon, float amount) DoReload =\r
1869 {\r
1870         local float rtime;\r
1871 \r
1872         if (self.reload_time > time)\r
1873                 return;\r
1874         if (amount == 0)\r
1875                 return;\r
1876 \r
1877         weapon_action(self.weapon, WR_UPDATECOUNTS); // update ammo now\r
1878         if (rweapon != 5)\r
1879                 sprint(self, "Reloading...\n");\r
1880 \r
1881         if (rweapon == 2)               // CryLink (flak cannon)\r
1882         {\r
1883                 rtime = (amount * .80);\r
1884                 self.clip_crylink = CLIP_MAX_CRYLINK;\r
1885         }\r
1886         if (rweapon == 3)               // Rocket launcher\r
1887         {\r
1888                 rtime = (amount * 1.30);\r
1889                 self.clip_rockets = 4;\r
1890         }\r
1891         if (rweapon == 4)               // Pipe Grenade Launcher\r
1892         {\r
1893                 rtime = (amount * 1.05);\r
1894                 self.clip_pipegrenades = 6;\r
1895         }\r
1896         if (rweapon == 5)               // Building something... (senrtry gun, tesla, etc.)\r
1897         {\r
1898                 rtime = amount;\r
1899         }\r
1900 \r
1901         self.weaponentity.pos1 = PLAYER_WEAPONSELECTION_RANGE;\r
1902         self.weaponentity.lip = PLAYER_WEAPONSELECTION_SPEED;\r
1903         newmis = spawn();\r
1904         newmis.owner = self;\r
1905         newmis.think = Reload_Restore_Weapon;\r
1906         newmis.nextthink = time + rtime;\r
1907         if (rweapon != 5)\r
1908                 self.reload_time = time + rtime;\r
1909 };\r
1910 \r
1911 // Xavior's self.playerclass to self.class conversion\r
1912 string(string s1, ...) strcat;\r
1913 void () Do_TFClass_Conversion =\r
1914 {\r
1915         local float cl;\r
1916         local string cst;\r
1917 \r
1918         if (self.respawn_as_new_class > 0)\r
1919         {\r
1920                 self.playerclass = self.respawn_as_new_class;\r
1921                 self.respawn_as_new_class = 0;\r
1922                 return;\r
1923         }\r
1924 \r
1925         if (self.playerclass == TF_CLASS_SCOUT) {\r
1926                 self.class = CLASS_SCOUT;\r
1927                 cst = "scout"; }\r
1928         if (self.playerclass == TF_CLASS_SOLDIER) {\r
1929                 self.class = CLASS_SOLDIER;\r
1930                 cst = "soldier"; }\r
1931         if (self.playerclass == TF_CLASS_MEDIC) {\r
1932                 self.class = CLASS_MEDIC;\r
1933                 cst = "medic"; }\r
1934         if (self.playerclass == TF_CLASS_PYRO) {\r
1935                 self.class = CLASS_PYRO;\r
1936                 cst = "pyro"; }\r
1937         if (self.playerclass == TF_CLASS_SPY) {\r
1938                 self.class = CLASS_SPY;\r
1939                 cst = "spy"; }\r
1940         if (self.playerclass == TF_CLASS_ENGINEER) {\r
1941                 self.class = CLASS_ENGINEER;\r
1942                 cst = "engineer"; }\r
1943         if (self.playerclass == TF_CLASS_RANDOM || self.tfstate == self.tfstate | 8) {\r
1944                 cst = ChooseRandomClass(); }\r
1945         // Note to self: add Random and Civilian\r
1946 \r
1947         cl = GetPlayerClass();\r
1948 \r
1949         if (!self.class == cl)\r
1950         {\r
1951                 if (cst == "engineer")\r
1952                 {\r
1953                         self.playermodel = strcat("models/class/",cst,"_other.zym");\r
1954                 }\r
1955                 else\r
1956                 {\r
1957                         self.playermodel = strcat("models/class/",cst,"_mechanical.zym");\r
1958                 }\r
1959         }\r
1960         SetPlayerSpeed(self);\r
1961 };\r
1962 \r
1963 // XavioR's Random Class select\r
1964 string () ChooseRandomClass =\r
1965 {\r
1966         local float choose;\r
1967         local float good;\r
1968 \r
1969         while (good < 1)\r
1970         {\r
1971                 choose = (1 + floor ((random () * (10 - 1))));\r
1972                 if (IsLegalClass(choose) && choose != TF_CLASS_SNIPER && choose != TF_CLASS_DEMOMAN && choose != TF_CLASS_HWGUY)\r
1973                 {\r
1974                         good = 1;\r
1975 //                      sprint (self, ftos(choose));\r
1976 //                      sprint (self, "\n");\r
1977                         if (choose == TF_CLASS_SCOUT) {\r
1978                                 self.class = CLASS_SCOUT;\r
1979                                 return ("scout"); }\r
1980                         if (choose == TF_CLASS_SOLDIER) {\r
1981                                 self.class = CLASS_SOLDIER;\r
1982                                 return ("soldier"); }\r
1983                         if (choose == TF_CLASS_PYRO) {\r
1984                                 self.class = CLASS_PYRO;\r
1985                                 return ("pyro"); }\r
1986                         if (choose == TF_CLASS_ENGINEER) {\r
1987                                 self.class = CLASS_ENGINEER;\r
1988                                 return ("engineer"); }\r
1989                         if (choose == TF_CLASS_MEDIC) {\r
1990                                 self.class = CLASS_MEDIC;\r
1991                                 return ("medic"); }\r
1992                         if (choose == TF_CLASS_SPY) {\r
1993                                 self.class = CLASS_SPY;\r
1994                                 return ("spy"); }\r
1995                 }\r
1996         }\r
1997 };\r
1998 \r
1999 // Nail projectile and blood\r
2000 float current_yaw;\r
2001 float (float fl) anglemod =\r
2002 {\r
2003         while (fl >= 360)\r
2004         {\r
2005                 fl = fl - 360;\r
2006         }\r
2007         while (fl < 0)\r
2008         {\r
2009                 fl = fl + 360;\r
2010         }\r
2011         return (fl);\r
2012 };\r
2013 \r
2014 vector () wall_velocity =\r
2015 {\r
2016         local vector vel;\r
2017 \r
2018         vel = normalize (self.velocity);\r
2019         vel = normalize (((vel + (v_up * (random () - 0.5))) + (v_right * (random () - 0.5))));\r
2020         vel = (vel + (2 * trace_plane_normal));\r
2021         vel = (vel * 200);\r
2022         return (vel);\r
2023 };\r
2024 \r
2025 void (vector org, float damage) SpawnBlood =\r
2026 {\r
2027         particle (org, '0 0 0', 73, (damage * 2));\r
2028 };\r
2029 \r
2030 void (float damage) spawn_touchblood =\r
2031 {\r
2032         local vector vel;\r
2033 \r
2034         vel = (wall_velocity () * 0.2);\r
2035         SpawnBlood ((self.origin + (vel * 0.01)), damage);\r
2036 };\r
2037 \r
2038 void () superspike_touch =\r
2039 {\r
2040         local float ndmg;\r
2041 \r
2042 /*      if (self.voided)                                // temp?\r
2043         {\r
2044                 return;\r
2045         }\r
2046         self.voided = 1;*/\r
2047         if (other == self.owner)\r
2048         {\r
2049                 return;\r
2050         }\r
2051         if (other.solid == 1)\r
2052         {\r
2053                 return;\r
2054         }\r
2055         if (pointcontents (self.origin) == -6)\r
2056         {\r
2057                 dremove (self);\r
2058                 return;\r
2059         }\r
2060         if (other.takedamage)\r
2061         {\r
2062                 spawn_touchblood (18);\r
2063                 deathmsg = self.weapon;\r
2064                 if ((deathmsg == 9))\r
2065                 {\r
2066                         ndmg = 13;\r
2067                 }\r
2068                 else\r
2069                 {\r
2070                         ndmg = 26;\r
2071                 }\r
2072                 if (self.owner.classname == "grenade")\r
2073                 {\r
2074                         TF_T_Damage (other, self, self.owner.owner, ndmg, 2, 2);\r
2075                 }\r
2076                 else\r
2077                 {\r
2078                         TF_T_Damage (other, self, self.owner, ndmg, 2, 2);\r
2079                 }\r
2080         }\r
2081         else\r
2082         {\r
2083                 WriteByte (0, 23);\r
2084                 WriteByte (0, 1);\r
2085                 WriteCoord (0, self.origin_x);\r
2086                 WriteCoord (0, self.origin_y);\r
2087                 WriteCoord (0, self.origin_z);\r
2088         }\r
2089         dremove (self);\r
2090 };\r
2091 \r
2092 void () spike_touch =\r
2093 {\r
2094         local float flt;\r
2095 \r
2096         if (other.solid == 1)\r
2097         {\r
2098                 return;\r
2099         }\r
2100         if (pointcontents (self.origin) == -6)\r
2101         {\r
2102                 dremove (self);\r
2103                 return;\r
2104         }\r
2105         if (other.takedamage)\r
2106         {\r
2107                 spawn_touchblood (9);\r
2108                 deathmsg = self.weapon;\r
2109                 if (self.owner.classname == "grenade")\r
2110                 {\r
2111                         TF_T_Damage (other, self, self.owner.owner, 9, 2, 2);\r
2112                 }\r
2113                 else\r
2114                 {\r
2115                         TF_T_Damage (other, self, self.owner, 9, 2, 2);\r
2116                 }\r
2117         }\r
2118         else\r
2119         {\r
2120                 WriteByte (4, 23);\r
2121                 if ((self.classname == "wizspike"))\r
2122                 {\r
2123                         WriteByte (4, 7);\r
2124                 }\r
2125                 else\r
2126                 {\r
2127                         if ((self.classname == "knightspike"))\r
2128                         {\r
2129                                 WriteByte (4, 8);\r
2130                         }\r
2131                         else\r
2132                         {\r
2133                                 WriteByte (4, 0);\r
2134                         }\r
2135                 }\r
2136                 WriteCoord (4, self.origin_x);\r
2137                 WriteCoord (4, self.origin_y);\r
2138                 WriteCoord (4, self.origin_z);\r
2139         }\r
2140         dremove (self);\r
2141 };\r
2142 \r
2143 void(vector org) te_gunshot;\r
2144 float   EF_ADDITIVE/*     = 32*/;\r
2145 void () ChangeModelTime =\r
2146 {\r
2147         if (self.owner)\r
2148                 setmodel (self.owner, self.classname);\r
2149         dremove(self);\r
2150 };\r
2151 \r
2152 void (entity ent, string st, float wait_time) soonmodel =\r
2153 {\r
2154         local entity x;\r
2155         x = spawn ();\r
2156         x.classname = st;\r
2157         x.owner = ent;\r
2158         x.nextthink = time + wait_time;\r
2159         x.think = ChangeModelTime;\r
2160 };\r
2161 \r
2162 .float scale;\r
2163 \r
2164 void (vector vect_a, vector vect_b) launch_spike =\r
2165 {\r
2166         local entity e;                 // bullet trail\r
2167 \r
2168         newmis = spawn ();\r
2169         newmis.owner = self;\r
2170         newmis.movetype = 9;\r
2171         newmis.solid = 2;\r
2172         newmis.angles = vectoangles (vect_b);\r
2173         newmis.touch = spike_touch;\r
2174         newmis.weapon = 3;\r
2175         newmis.classname = "spike";\r
2176         newmis.think = SUB_Remove;\r
2177         newmis.nextthink = (time + 3);\r
2178         if (deathmsg != 9)\r
2179         {\r
2180                 setmodel (newmis, "models/plasmatrail.mdl");\r
2181         }\r
2182         setsize (newmis, '0 0 0', '0 0 0');\r
2183         setorigin (newmis, vect_a);\r
2184         newmis.velocity = (vect_b * 2000);\r
2185 \r
2186                 e = spawn();\r
2187                 e.owner = self;\r
2188                 e.movetype = MOVETYPE_FLY;\r
2189                 e.solid = SOLID_NOT;\r
2190                 e.think = SUB_Remove;\r
2191                 e.nextthink = time + vlen(trace_endpos - self.origin) / 6000;\r
2192                 e.velocity = vect_b * 4000;\r
2193                 e.angles = vectoangles (vect_b);\r
2194                 e.scale = .3;\r
2195 //              soonmodel (e, "models/tracer.mdl", .1);\r
2196                 setmodel (e, "models/tracer.mdl");\r
2197                 setsize (e, '0 0 0', '0 0 0');\r
2198                 setorigin (e, vect_a);\r
2199                 e.effects = e.effects | EF_ADDITIVE;\r
2200 };\r
2201 \r
2202 // TF's Ammo-Updater\r
2203 void () W_SetCurrentAmmo =\r
2204 {\r
2205         weapon_action(self.weapon, WR_UPDATECOUNTS);\r
2206 };\r
2207 \r
2208 // TF Team Sprint\r
2209 void (float tno, entity ignore, string st) teamsprint =\r
2210 {\r
2211         local entity te;\r
2212 \r
2213         if ((tno == 0))\r
2214         {\r
2215                 return;\r
2216         }\r
2217         te = find (world, classname, "player");\r
2218         while (te)\r
2219         {\r
2220                 if (((te.team_no == tno) && (te != ignore)))\r
2221                 {\r
2222                         sprint (te, st);\r
2223                 }\r
2224                 te = find (te, classname, "player");\r
2225         }\r
2226 };\r
2227 \r
2228 // CENTERPRINT\r
2229 void (entity pl, string s1, string s2) CenterPrint2 =\r
2230 {\r
2231         centerprint (pl, s1, s2);\r
2232         pl.StatusRefreshTime = (time + 1.5);\r
2233 };\r
2234 \r
2235 // another ammo check caleld by the menu system. I dont know exactly what function this is for. - XavioR\r
2236 void(entity p) bound_other_ammo = \r
2237 {\r
2238         if (p.ammo_shells > TeamFortress_GetMaxAmmo(p, 256))\r
2239         {\r
2240                 p.ammo_shells = TeamFortress_GetMaxAmmo(p, 256);\r
2241         }\r
2242         if (p.ammo_nails > TeamFortress_GetMaxAmmo(p, 512))\r
2243         {\r
2244                 p.ammo_nails = TeamFortress_GetMaxAmmo(p, 512);\r
2245         }\r
2246         if (p.ammo_rockets > TeamFortress_GetMaxAmmo(p, 1024))\r
2247         {\r
2248                 p.ammo_rockets = TeamFortress_GetMaxAmmo(p, 1024);\r
2249         }\r
2250         if (p.ammo_cells > TeamFortress_GetMaxAmmo(p, 2048))\r
2251         {\r
2252                 p.ammo_cells = TeamFortress_GetMaxAmmo(p, 2048);\r
2253         }\r
2254 /*      if (p.ammo_medikit > p.maxammo_medikit)                         // addme\r
2255         {\r
2256                 p.ammo_medikit = p.maxammo_medikit;\r
2257         }*/\r
2258         if (p.armorvalue > p.maxarmor)\r
2259         {\r
2260                 p.armorvalue = p.max_armor;\r
2261         }\r
2262         if (p.no_grenades_1 > 4)\r
2263         {\r
2264                 p.no_grenades_1 = 4;\r
2265         }\r
2266         if (p.no_grenades_2 > 4)\r
2267         {\r
2268                 p.no_grenades_2 = 4;\r
2269         }\r
2270 };