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
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
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
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
34 // stuff that still needs a function
\r
35 float number_of_teams; // Number of teams == IMPORTANT
\r
37 // Color/Teamchange cheat detection (using DP functions instead of tf)
\r
38 void (entity ent, float colors) setcolor;
\r
40 void SV_ChangeTeam(float color)
\r
42 // if (self.playerclass == 8) // Spies can change team color right?
\r
44 if (self.team_no == 1 && color != 13)
\r
46 setcolor(self, 13,13);
\r
48 if (self.team_no == 2 && color != 4)
\r
50 setcolor(self, 4,4);
\r
51 // stuffcmd(self, "color 4\n");
\r
56 void(entity targ, entity attacker) ClientObituary =
\r
58 ClientObituary(targ,attacker); // TEMP -- SOON I WILL ADD REAL DEATH MESSAGES
\r
61 void () DoTFAliases =
\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
72 void (entity tempent) dremove =
\r
74 if ((tempent == world))
\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
81 if ((tempent.is_removed == 1.000000))
\r
85 tempent.is_removed = 1.000000;
\r
89 entity (float gno) Findgoal =
\r
94 tg = find (world, classname, "info_tfgoal");
\r
97 if ((tg.goal_no == gno))
\r
101 tg = find (tg, classname, "info_tfgoal");
\r
103 dprint ("Could not find a goal with a goal_no of ");
\r
110 void(entity Goal, entity AP, entity ActivatingGoal) AttemptToActivate =
\r
114 if (Activated(Goal, AP))
\r
116 if (ActivatingGoal == Goal)
\r
118 DoResults(Goal, AP, TF_FLARE_OFF);
\r
122 if (ActivatingGoal != world)
\r
124 DoResults(Goal, AP, ActivatingGoal.goal_result & 2);
\r
128 DoResults(Goal, AP, TF_FLARE_LIT);
\r
134 if (Goal.else_goal != TF_FLARE_LIT)
\r
136 te = Findgoal(Goal.else_goal);
\r
139 AttemptToActivate(te, AP, ActivatingGoal);
\r
145 void (entity p) TeamFortress_SetSpeed =
\r
151 stuffcmd (p, "cl_movespeedkey 1\n");
\r
152 if ((p.tfstate & 65536))
\r
156 stuffcmd (p, "m_forward 0\n");
\r
157 stuffcmd (p, "m_side 0\n");
\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
169 stuffcmd (p, "m_forward 1\n");
\r
170 stuffcmd (p, "m_side 0.8\n");
\r
173 if ((p.class == 1)) //scout speed
\r
175 p.maxfbspeed = 450;
\r
176 p.maxstrafespeed = 450;
\r
180 if ((p.class == 2.1)) // No sniper in nextf
\r
182 p.maxfbspeed = 300;
\r
183 p.maxstrafespeed = 300;
\r
187 if ((p.class == 4)) //soldier speed
\r
189 p.maxfbspeed = 240;
\r
190 p.maxstrafespeed = 240;
\r
194 if ((p.class == 4.1)) // No demoman in nextf
\r
196 p.maxfbspeed = 280;
\r
197 p.maxstrafespeed = 280;
\r
201 if ((p.class == 16)) // Medic Speed
\r
203 p.maxfbspeed = 320;
\r
204 p.maxstrafespeed = 320;
\r
208 if ((p.class == 6.1)) // No HWGuy in nextf
\r
210 p.maxfbspeed = 230;
\r
211 p.maxstrafespeed = 230;
\r
215 if ((p.class == 8)) // Pyro Speed
\r
217 p.maxfbspeed = 300;
\r
218 p.maxstrafespeed = 300;
\r
222 if ((p.class == 11)) // Wazat -- We need a Civ class
\r
224 p.maxfbspeed = 240;
\r
225 p.maxstrafespeed = 240;
\r
229 if ((p.class == 2)) // Spy Speed
\r
231 p.maxfbspeed = 300;
\r
232 p.maxstrafespeed = 300;
\r
236 if ((p.class == 32)) // Engineer Speed
\r
238 p.maxfbspeed = 300;
\r
239 p.maxstrafespeed = 300;
\r
243 if ((p.class == 0)) // No class
\r
245 p.maxfbspeed = 320;
\r
246 p.maxstrafespeed = 320;
\r
260 te = find (world, classname, "item_tfgoal");
\r
261 while (((te != world) && (tf == 0)))
\r
263 if ((te.owner == p))
\r
265 if ((te.goal_activation & 2))
\r
268 p.maxfbspeed = (p.maxfbspeed / 2);
\r
269 p.maxstrafespeed = (p.maxstrafespeed / 2);
\r
272 te = find (te, classname, "item_tfgoal");
\r
274 if ((p.tfstate & 32768))
\r
276 p.maxfbspeed = (p.maxfbspeed / 2);
\r
277 p.maxstrafespeed = (p.maxstrafespeed / 2);
\r
279 /* (p.leg_damage) // No leg damage if no snipers, eh?
\r
281 if ((p.leg_damage > 6))
\r
285 p.maxfbspeed = (p.maxfbspeed * ((10 - p.leg_damage) / 10));
\r
286 p.maxstrafespeed = ((p.maxstrafespeed * (10 - p.leg_damage)) / 10);
\r
288 if ((p.tfstate & 2048))
\r
290 if ((p.maxfbspeed > 80))
\r
294 if ((p.maxstrafespeed > 80))
\r
296 p.maxstrafespeed = 80;
\r
299 sp = ftos (p.maxfbspeed);
\r
300 stuffcmd (p, "cl_backspeed ");
\r
302 stuffcmd (p, "\n");
\r
303 stuffcmd (p, "cl_forwardspeed ");
\r
305 stuffcmd (p, "\n");
\r
306 sp = ftos (p.maxstrafespeed);
\r
307 stuffcmd (p, "cl_sidespeed ");
\r
309 stuffcmd (p, "\n");
\r
312 float (entity Retriever, float AmmoType) TeamFortress_GetMaxAmmo =
\r
314 if ((AmmoType == 256))
\r
316 return (Retriever.maxammo_shells);
\r
320 if ((AmmoType == 512))
\r
322 return (Retriever.maxammo_nails);
\r
326 if ((AmmoType == 2048))
\r
328 return (Retriever.maxammo_cells);
\r
332 if ((AmmoType == 1024))
\r
334 return (Retriever.maxammo_rockets);
\r
338 if ((AmmoType == 4))
\r
340 return (Retriever.maxammo_medikit);
\r
344 if ((AmmoType == 131072))
\r
346 return (Retriever.maxammo_detpack);
\r
353 dprint ("Error in TeamFortress_GetMaxAmmo()\n");
\r
354 dprint ("Invalid ammo type passed.\n");
\r
358 void () TeamFortress_CheckClassStats =
\r
360 // Wazat - Implement your armor system here, eh?
\r
361 /* if ((self.armortype > self.armor_allowed))
\r
363 self.armortype = self.armor_allowed;
\r
365 if ((self.armorvalue > self.max_armor))
\r
367 self.armorvalue = self.max_armor;
\r
369 if ((self.armortype < 0))
\r
371 self.armortype = 0;
\r
373 if ((self.armorvalue < 0))
\r
375 self.armorvalue = 0;
\r
377 if ((self.ammo_shells > TeamFortress_GetMaxAmmo (self, 256)))
\r
379 self.ammo_shells = TeamFortress_GetMaxAmmo (self, 256);
\r
381 if ((self.ammo_shells < 0))
\r
383 self.ammo_shells = 0;
\r
385 if ((self.ammo_nails > TeamFortress_GetMaxAmmo (self, 512)))
\r
387 self.ammo_nails = TeamFortress_GetMaxAmmo (self, 512);
\r
389 if ((self.ammo_nails < 0))
\r
391 self.ammo_nails = 0;
\r
393 if ((self.ammo_rockets > (TeamFortress_GetMaxAmmo (self, 1024) * 3)))
\r
395 self.ammo_rockets = (TeamFortress_GetMaxAmmo (self, 1024) * 3);
\r
397 if ((self.ammo_rockets < 0))
\r
399 self.ammo_rockets = 0;
\r
401 if ((self.ammo_cells > TeamFortress_GetMaxAmmo (self, 2048)))
\r
403 self.ammo_cells = TeamFortress_GetMaxAmmo (self, 2048);
\r
405 if ((self.ammo_cells < 0))
\r
407 self.ammo_cells = 0;
\r
409 if ((self.ammo_medikit > TeamFortress_GetMaxAmmo (self, 4)))
\r
411 self.ammo_medikit = TeamFortress_GetMaxAmmo (self, 4);
\r
413 if ((self.ammo_medikit < 0))
\r
415 self.ammo_medikit = 0;
\r
417 if ((self.ammo_detpack > TeamFortress_GetMaxAmmo (self, 131072)))
\r
419 self.ammo_detpack = TeamFortress_GetMaxAmmo (self, 131072);
\r
421 if ((self.ammo_detpack < 0))
\r
423 self.ammo_detpack = 0;
\r
425 if ((self.no_grenades_1 < 0))
\r
427 self.no_grenades_1 = 0;
\r
429 if ((self.no_grenades_2 < 0))
\r
431 self.no_grenades_2 = 0;
\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
436 // TF_T_Damage (self, world, world, (self.max_health - self.health), 0, 256);
\r
438 if ((self.health < 0))
\r
440 T_Heal (self, (self.health - self.health), 0);
\r
442 self.items = (self.items - (self.items & ((8192 | 16384) | 32768)));
\r
443 if ((self.armortype >= 0.8))
\r
445 self.items = (self.items | 32768);
\r
449 if ((self.armortype >= 0.6))
\r
451 self.items = (self.items | 16384);
\r
455 if ((self.armortype >= 0.3))
\r
457 self.items = (self.items | 8192);
\r
461 weapon_action(self.weapon, WR_UPDATECOUNTS); // update ammo now
\r
464 // TF Get Score Frags
\r
465 float (float tno) TeamFortress_TeamGetScoreFrags =
\r
467 if (((toggleflags & 128) || (toggleflags & 2048)))
\r
471 return (team1score);
\r
475 return (team2score);
\r
479 return (team3score);
\r
483 return (team4score);
\r
490 return (team1frags);
\r
494 return (team2frags);
\r
498 return (team3frags);
\r
502 return (team4frags);
\r
508 // TF Get Team Winner
\r
509 float () TeamFortress_TeamGetWinner =
\r
513 local float highest;
\r
514 local float highestteam;
\r
519 while ((i < (number_of_teams + 1)))
\r
521 j = TeamFortress_TeamGetScoreFrags (i);
\r
529 return (highestteam);
\r
532 // TF Score Increaser
\r
533 void (float tno, float scoretoadd) TeamFortress_TeamIncreaseScore =
\r
537 if (((tno == 0) || (scoretoadd == 0)))
\r
543 team1score = (team1score + scoretoadd);
\r
547 team2score = (team2score + scoretoadd);
\r
551 team3score = (team3score + scoretoadd);
\r
555 team4score = (team4score + scoretoadd);
\r
557 if (((toggleflags & 128) || (toggleflags & 2048)))
\r
559 e = find (world, classname, "player");
\r
562 if ((e.team_no == tno))
\r
564 e.frags = TeamFortress_TeamGetScore (tno);
\r
566 e = find (e, classname, "player");
\r
571 // Returns Team Color Name (String)
\r
572 string (float tno) TeamFortress_TeamGetColorString =
\r
576 col = TeamFortress_TeamGetColor (tno);
\r
615 return ("DarkPurple");
\r
623 return ("DarkGreen");
\r
629 return ("DarkBlue");
\r
633 float (float tno) TeamFortress_TeamIsCivilian =
\r
639 if ((civilianteams & 1))
\r
648 if ((civilianteams & 2))
\r
657 if ((civilianteams & 4))
\r
664 if ((civilianteams & 8))
\r
675 // You use a different method of handling this tho Wazat?
\r
676 void () TeamFortress_ChangeClass =
\r
678 /*local entity spot;
\r
683 if ((self.playerclass != 0))
\r
685 if (((deathmatch != 3) && (cb_prematch_time < time)))
\r
689 if (TeamFortress_TeamIsCivilian (self.team_no))
\r
691 sprint (self, "You cannot change class.\n");
\r
694 if (!IsLegalClass ((self.impulse - 100)))
\r
696 sprint (self, "Your team cannot play that class.\n");
\r
697 TeamFortress_DisplayLegalClasses ();
\r
700 if (((spy_off == 1) && ((self.impulse - 100) == 8)))
\r
702 sprint (self, "The spy class has been disabled on the server by the administrator.\n");
\r
705 self.nextpc = (self.impulse - 100);
\r
706 sprint (self, "After dying, you will return as a ");
\r
707 TeamFortress_PrintClassName (self, self.nextpc, (self.tfstate & 8));
\r
708 self.immune_to_check = (time + 10);
\r
711 if ((teamplay && (self.team_no == 0)))
\r
713 if ((toggleflags & 64))
\r
715 if ((TeamFortress_TeamPutPlayerInTeam () == 0))
\r
722 sprint (self, "You must join a team first. \n");
\r
723 sprint (self, "use imin1, imin2, imin3, or imin4\n");
\r
727 if ((self.lives == 0))
\r
729 sprint (self, "You have no lives left.\n");
\r
732 if ((!IsLegalClass ((self.impulse - 100)) && (self.impulse != 1)))
\r
734 sprint (self, "You cannot play that playerclass on this map. \n");
\r
735 TeamFortress_DisplayLegalClasses ();
\r
738 if (((spy_off == 1) && ((self.impulse - 100) == 8)))
\r
740 sprint (self, "The spy class has been disabled on the server by the administrator.\n");
\r
743 if ((self.impulse != 1))
\r
745 self.playerclass = (self.impulse - 100);
\r
749 self.playerclass = 11;
\r
752 self.takedamage = 2;
\r
754 self.flags = (8 | 512);
\r
755 self.waterlevel = 0;
\r
756 self.air_finished = (time + 12);
\r
758 self.pausetime = 0;
\r
759 spot = SelectSpawnPoint ();
\r
760 self.origin = (spot.origin + '0 0 1');
\r
761 self.angles = spot.angles;
\r
763 setmodel (self, string_null);
\r
764 modelindex_null = self.modelindex;
\r
765 setmodel (self, "progs/eyes.mdl");
\r
766 modelindex_eyes = self.modelindex;
\r
767 setmodel (self, "progs/player.mdl");
\r
768 modelindex_player = self.modelindex;
\r
769 setsize (self, '-16 -16 -24', '16 16 32');
\r
770 self.view_ofs = '0 0 22';
\r
772 if ((deathmatch || coop))
\r
774 makevectors (self.angles);
\r
775 spawn_tfog ((self.origin + (v_forward * 20)));
\r
777 if ((self.playerclass == 10))
\r
779 sprint (self, "Random Playerclass.\n");
\r
780 self.tfstate = (self.tfstate | 8);
\r
781 self.playerclass = (1 + floor ((random () * (10 - 1))));
\r
783 if (((spot.classname == "info_player_teamspawn") && (cb_prematch_time < time)))
\r
785 if ((spot.items != 0))
\r
787 te = Finditem (spot.items);
\r
790 tfgoalitem_GiveToPlayer (te, self, self);
\r
792 if (!(spot.goal_activation & 1))
\r
799 CenterPrint (self, spot.message);
\r
800 if (!(spot.goal_activation & 2))
\r
802 spot.message = string_null;
\r
805 if ((spot.activate_goal_no != 0))
\r
807 te = Findgoal (spot.activate_goal_no);
\r
810 AttemptToActivate (te, self, spot);
\r
813 if ((spot.goal_effects == 1))
\r
815 spot.classname = "deadpoint";
\r
816 spot.team_str_home = string_null;
\r
817 spot.nextthink = (time + 1);
\r
818 spot.think = SUB_Remove;
\r
821 spot = find (world, classname, "player");
\r
824 if (((spot.team_no == self.team_no) && (spot != self)))
\r
826 sprint (spot, 2, self.netname);
\r
827 sprint (spot, 2, " is playing as a ");
\r
828 TeamFortress_PrintClassName (spot, self.playerclass, (self.tfstate & 8));
\r
830 spot = find (spot, classname, "player");
\r
832 TeamFortress_PrintClassName (self, self.playerclass, (self.tfstate & 8));
\r
833 TeamFortress_SetEquipment ();
\r
834 TeamFortress_SetHealth ();
\r
835 TeamFortress_SetSpeed (self);
\r
836 TeamFortress_SetSkin (self);
\r
839 sprint (self, "\n\nCEASE FIRE MODE\n");
\r
840 self.immune_to_check = (time + 10);
\r
841 self.tfstate = (self.tfstate | 65536);
\r
842 TeamFortress_SetSpeed (self);
\r
846 // Show what class each member of the team is -- NEEDS AN IMPULSE CALL FUNCTION
\r
847 void (entity Player) TeamFortress_TeamShowMemberClasses =
\r
853 e = find (world, classname, "player");
\r
856 if ((((e.team_no == Player.team_no) || (e.team_no == 0)) && (e != Player)))
\r
858 if ((e.model != string_null))
\r
863 sprint (self, "The other members of your team are:\n");
\r
865 sprint (Player, e.netname);
\r
866 sprint (Player, " : ");
\r
867 // TeamFortress_PrintClassName (Player, e.playerclass, (e.tfstate & 8));
\r
868 TeamFortress_PrintClassName (Player, e.class, (e.tfstate & 8));
\r
871 e = find (e, classname, "player");
\r
875 sprint (Player, "There are no other players on your team.\n");
\r
879 // Returns class name value
\r
880 string (float pc) TeamFortress_GetClassName =
\r
882 if ((pc == 1)) // Scout is class 1 (normal)
\r
890 return ("Sniper"); // Player Class 2 is Spy in NexTF -- no Snipers
\r
894 if ((pc == 4)) // Player Class 4 is soldier in NexTF
\r
896 return ("Soldier");
\r
900 if ((pc == 4.1)) // No DemoMan in NexTF
\r
902 return ("Demolitions Man");
\r
908 return ("Combat Medic"); // Medic is Class 16 in NexTF
\r
914 return ("Heavy Weapons Guy"); // No HWGuy in NexTF
\r
920 return ("Pyro"); // Pyro is class 8 in NexTF
\r
926 return ("Spy"); // Spy is class 2 in NexTF
\r
932 return ("Engineer"); // Engineer is class 32 in nextf
\r
936 if ((pc == 11)) // Wazat- we need to make civ class
\r
938 return ("Civilian");
\r
944 return ("Observer");
\r
948 if ((pc == 10)) // Wazat- we need to add "random class" feature
\r
950 return ("Random Playerclass");
\r
965 // Prints the classname using TeamFortress_GetClassName function
\r
966 void (entity Viewer, float pc, float rpc) TeamFortress_PrintClassName =
\r
970 st = TeamFortress_GetClassName (pc);
\r
971 sprint (Viewer, st);
\r
974 sprint (Viewer, " (Random)");
\r
976 sprint (Viewer, "\n");
\r
979 // Returns Team Color Value
\r
980 // This is causing crashes in bringit -- I will attempt to fix
\r
981 float (float tno) TeamFortress_TeamGetColor =
\r
1002 // Returns Team Score Value
\r
1003 float (float tno) TeamFortress_TeamGetScore =
\r
1007 return (team1score);
\r
1011 return (team2score);
\r
1015 return (team3score);
\r
1019 return (team4score);
\r
1025 float (float tno) TeamFortress_TeamGetLives =
\r
1029 return (team1lives);
\r
1033 return (team2lives);
\r
1037 return (team3lives);
\r
1041 return (team4lives);
\r
1046 // Show Team Scores
\r
1047 void (float all) TeamFortress_TeamShowScores =
\r
1056 while ((i <= number_of_teams))
\r
1058 if ((TeamFortress_TeamGetColor (i) > 0))
\r
1060 j = TeamFortress_TeamGetScore (i);
\r
1061 st = TeamFortress_TeamGetColorString (i);
\r
1078 while ((i <= number_of_teams))
\r
1080 if ((TeamFortress_TeamGetColor (i) > 0))
\r
1088 sprint (self, "Team ");
\r
1097 sprint (self, st);
\r
1105 sprint (self, " (");
\r
1107 st = TeamFortress_TeamGetColorString (i);
\r
1114 sprint (self, st);
\r
1122 sprint (self, ") : ");
\r
1124 j = TeamFortress_TeamGetScore (i);
\r
1132 sprint (self, st);
\r
1140 sprint (self, "\n");
\r
1147 // Get Number Of Players On Team
\r
1148 float (float tno) TeamFortress_TeamGetNoPlayers =
\r
1150 local float size_team;
\r
1151 local entity search;
\r
1153 search = find (world, classname, "player");
\r
1154 while ((search != world))
\r
1156 if ((search.team_no == tno))
\r
1158 size_team = (size_team + 1);
\r
1160 search = find (search, classname, "player");
\r
1162 return (size_team);
\r
1165 // Get general number of players
\r
1166 float () TeamFortress_GetNoPlayers =
\r
1169 local entity search;
\r
1171 search = find (world, classname, "player");
\r
1172 while ((search != world))
\r
1174 if ((search.netname != string_null))
\r
1176 nump = (nump + 1);
\r
1178 search = find (search, classname, "player");
\r
1183 // Get max players for a team
\r
1184 float (float tno) TeamFortress_TeamGetMaxPlayers =
\r
1188 return (team1maxplayers);
\r
1192 return (team2maxplayers);
\r
1196 return (team3maxplayers);
\r
1200 return (team4maxplayers);
\r
1205 // Set The Team Color
\r
1206 void (float tno) TeamFortress_TeamSetColor =
\r
1230 // Set The Team Number
\r
1231 float (float tno) TeamFortress_TeamSet =
\r
1236 if ((teamplay < 1))
\r
1238 sprint (self, "Teamplay is not On, so FortressTeams are inactive.\n");
\r
1241 if (((tno > number_of_teams) && (number_of_teams != 0)))
\r
1243 sprint (self, "There can be only ");
\r
1244 st = ftos (number_of_teams);
\r
1245 sprint (self, st);
\r
1246 sprint (self, " teams on this map.\nTry again\n");
\r
1249 if ((self.team_no > 0))
\r
1251 sprint (self, "You're already in Team No ");
\r
1252 st = ftos (self.team_no);
\r
1253 sprint (self, st);
\r
1254 sprint (self, ".\n");
\r
1257 tc = TeamFortress_TeamGetNoPlayers (tno);
\r
1258 if ((tc >= TeamFortress_TeamGetMaxPlayers (tno)))
\r
1260 sprint (self, "That team is full. Pick another.\n");
\r
1263 if ((TeamFortress_TeamGetColor (tno) == 0))
\r
1265 TeamFortress_TeamSetColor (tno);
\r
1266 if ((TeamFortress_TeamGetColor (tno) == 0))
\r
1268 sprint (self, "You can't start a new team with your color, since another ");
\r
1269 sprint (self, "already using that color. Change your pants color, then try again.\n");
\r
1272 bprint (self.netname);
\r
1273 bprint (" has started Team No ");
\r
1277 self.immune_to_check = (time + 10);
\r
1278 if (((toggleflags & 128) || (toggleflags & 2048)))
\r
1280 self.frags = TeamFortress_TeamGetScore (tno);
\r
1282 stuffcmd (self, "color ");
\r
1283 tc = (TeamFortress_TeamGetColor (tno) - 1);
\r
1285 stuffcmd (self, st);
\r
1286 stuffcmd (self, "\n");
\r
1287 self.team_no = tno;
\r
1288 self.lives = TeamFortress_TeamGetLives (tno);
\r
1289 //if ((self.playerclass == 0))
\r
1290 if ((self.class == 0))
\r
1292 if (TeamFortress_TeamIsCivilian (self.team_no))
\r
1295 TeamFortress_ChangeClass ();
\r
1300 bprint (self.netname);
\r
1301 bprint (" has joined Team No ");
\r
1305 stuffcmd (self, "color ");
\r
1306 tc = (TeamFortress_TeamGetColor (tno) - 1);
\r
1308 stuffcmd (self, st);
\r
1309 stuffcmd (self, "\n");
\r
1310 self.team_no = tno;
\r
1311 self.immune_to_check = (time + 10);
\r
1312 self.lives = TeamFortress_TeamGetLives (tno);
\r
1313 if (((toggleflags & 128) || (toggleflags & 2048)))
\r
1315 self.frags = TeamFortress_TeamGetScore (tno);
\r
1317 TeamFortress_TeamShowMemberClasses (self);
\r
1318 //if ((self.playerclass == 0))
\r
1319 if ((self.class == 0))
\r
1321 if (TeamFortress_TeamIsCivilian (self.team_no))
\r
1324 TeamFortress_ChangeClass ();
\r
1330 // Get team score (used in conjunction with autoteam..)
\r
1331 float (float tno) TeamFortress_GetRealScore =
\r
1334 local float total;
\r
1336 te = find (world, classname, "player");
\r
1339 if (te.team_no == tno)
\r
1341 total = total + te.real_frags;
\r
1343 te = find (te, classname, "player");
\r
1348 // Find best team for player (autoteam?)
\r
1349 float() TeamFortress_TeamPutPlayerInTeam =
\r
1353 local float score1;
\r
1354 local float score2;
\r
1356 local float lowest;
\r
1357 local float likely_team;
\r
1360 likely_team = random() * number_of_teams;
\r
1361 likely_team = ceil(likely_team);
\r
1362 if (likely_team == 0)
\r
1364 likely_team = number_of_teams;
\r
1368 while (i < number_of_teams + 1)
\r
1370 j = TeamFortress_TeamGetNoPlayers(i);
\r
1374 if (TeamFortress_TeamGetMaxPlayers(i) > j)
\r
1380 // pablo. fancier autoteam for even teams.
\r
1381 else if (j == lowest)
\r
1384 if (TeamFortress_TeamGetMaxPlayers(i) > j)
\r
1386 score1 = TeamFortress_GetRealScore(i);
\r
1387 score2 = TeamFortress_GetRealScore(likely_team);
\r
1389 if ( score1 < score2 )
\r
1393 else if (score1 == score2)
\r
1395 if (random() > 0.5)
\r
1405 return TeamFortress_TeamSet(likely_team);
\r
1408 // Remove item_tfgoal timers
\r
1409 void() TeamFortress_RemoveTimers =
\r
1412 // self.leg_damage = 0; // No Snipers
\r
1413 // self.is_undercover = 0; // I think this function is called in PlayerKill
\r
1414 // self.is_building = 0; // To Be Added ?
\r
1415 // self.building = world; // To Be Added ?
\r
1416 if (self.tfstate & 2048)
\r
1418 self.tfstate = self.tfstate - 2048;
\r
1419 TeamFortress_SetSpeed(self);
\r
1422 te = find(world, classname, "timer");
\r
1423 while (te != world)
\r
1425 if (te.owner == self)
\r
1428 te = find(world, classname, "timer");
\r
1432 te = find(te, classname, "timer");
\r
1435 te = find(world, classname, "item_tfgoal");
\r
1438 if (te.owner == self)
\r
1440 if (!(te.goal_activation & 256))
\r
1442 tfgoalitem_RemoveFromPlayer(te, self, 0);
\r
1444 if (CTF_Map == 1 && te.goal_no == 1)
\r
1446 bprint(self.netname);
\r
1447 bprint(" ÌÏÓÔ the ÂÌÕÅ flag!\n");
\r
1451 if (CTF_Map == 1 && te.goal_no == 2)
\r
1453 bprint(self.netname);
\r
1454 bprint(" ÌÏÓÔ the ÒÅÄ flag!\n");
\r
1458 te = find(te, classname, "item_tfgoal");
\r
1460 te = find(world, classname, "detpack");
\r
1463 if (te.weaponmode == 1 && te.enemy == self)
\r
1465 te.weaponmode = 0;
\r
1467 te = find(te, classname, "detpack");
\r
1469 // TeamFortress_DetonatePipebombs(); gold. this is the old code for removing pipebombs on quitting. new one written by pablo is below.
\r
1470 // NO PIPEBOMBS IN NEXTF
\r
1471 /* te = find(world, classname, "pipebomb");
\r
1472 while (te != world)
\r
1474 if(te.owner == self)
\r
1476 decrement_team_pipebombs(self.team_no);
\r
1477 deathmsg = te.weapon;
\r
1479 T_RadiusDamage(te, self, 120, world);
\r
1482 WriteCoord(4, te.origin_x);
\r
1483 WriteCoord(4, te.origin_y);
\r
1484 WriteCoord(4, te.origin_z);
\r
1485 multicast(te.origin, TF_FLARE_OFF);
\r
1488 te = find(te, classname, "pipebomb");
\r
1490 // stuffcmd(self, "v_idlescale 0\n");
\r
1491 // stuffcmd(self, "v_cshift 0 0 0 0\n");
\r
1492 // self.item_list = 0; // To Be Added?
\r
1493 // self.FlashTime = 0;
\r
1494 CenterPrint(self, "\n");
\r
1495 self.menu_count = 25; // Menu Stuff - important
\r
1496 self.current_menu = 1; ////
\r
1500 // TF's Become Explosion
\r
1501 void() BecomeExplosion =
\r
1507 void(string halias, float himpulse1, float himpulse2) TeamFortress_Alias =
\r
1510 stuffcmd(self, "alias ");
\r
1511 stuffcmd(self, halias);
\r
1512 stuffcmd(self, " \"impulse ");
\r
1513 imp = ftos(himpulse1);
\r
1514 stuffcmd(self, imp);
\r
1515 if (himpulse2 != 0)
\r
1517 stuffcmd(self, ";wait; impulse ");
\r
1518 imp = ftos(himpulse2);
\r
1519 stuffcmd(self, imp);
\r
1521 stuffcmd(self, "\"\n");
\r
1524 // XavioR's new TF reload function
\r
1525 void (float o, float m, void () g) weapon_thinkf;
\r
1526 void () Reload_Restore_Weapon =
\r
1528 self.owner.weaponentity.pos1 = '0 0 0';
\r
1529 self.owner.weaponentity.lip = PLAYER_WEAPONSELECTION_SPEED;
\r
1533 void (float rweapon, float amount) DoReload =
\r
1535 local float rtime;
\r
1537 if (self.reload_time > time)
\r
1542 weapon_action(self.weapon, WR_UPDATECOUNTS); // update ammo now
\r
1543 sprint(self, "Reloading...\n");
\r
1544 if (rweapon == 2) // CryLink (flak cannon)
\r
1546 rtime = (amount * .80);
\r
1547 self.clip_crylink = CLIP_MAX_CRYLINK;
\r
1549 if (rweapon == 3) // Rocket launcher
\r
1551 rtime = (amount * 1.30);
\r
1552 self.clip_rockets = 4;
\r
1554 if (rweapon == 4) // Pipe Grenade Launcher
\r
1556 rtime = (amount * 1.05);
\r
1557 self.clip_pipegrenades = 6;
\r
1560 self.weaponentity.pos1 = PLAYER_WEAPONSELECTION_RANGE;
\r
1561 self.weaponentity.lip = PLAYER_WEAPONSELECTION_SPEED;
\r
1563 newmis.owner = self;
\r
1564 newmis.think = Reload_Restore_Weapon;
\r
1565 newmis.nextthink = time + rtime;
\r
1566 self.reload_time = time + rtime;
\r
1570 void (entity pl, string s1, string s2) CenterPrint2 =
\r
1572 centerprint (pl, s1, s2);
\r
1573 pl.StatusRefreshTime = (time + 1.5);
\r