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