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