2 XavioR's Team Fortress Map Entities conversion
\r
5 // Things needed to be added (probably):
\r
12 .float if_item_has_moved;
\r
13 .float if_item_hasnt_moved;
\r
14 .float remove_spawnpoint;
\r
15 .float restore_spawnpoint;
\r
16 .float remove_spawngroup;
\r
17 .float restore_spawngroup;
\r
18 .float display_item_status1;
\r
19 .float display_item_status2;
\r
20 .float display_item_status3;
\r
21 .float display_item_status4;
\r
22 .string team_str_home;
\r
23 .string team_str_moved;
\r
24 .string team_str_carried;
\r
25 .string non_team_str_home;
\r
26 .string non_team_str_moved;
\r
27 .string non_team_str_carried;
\r
28 .float ex_skill_min;
\r
29 .float ex_skill_max;
\r
30 .float increase_team1;
\r
31 .float increase_team2;
\r
32 .float increase_team3;
\r
33 .float increase_team4;
\r
36 // Temp defs that need to be moved to TFDefs
\r
38 .string team_broadcast;
\r
39 .string non_team_broadcast;
\r
40 .string owners_team_broadcast;
\r
41 .string netname_broadcast;
\r
42 .string netname_team_broadcast;
\r
43 .string netname_non_team_broadcast;
\r
44 .string netname_owners_team_broadcast;
\r
46 .string non_team_drop;
\r
47 .string netname_team_drop;
\r
48 .string netname_non_team_drop;
\r
49 string team_menu_string/* = ""*/;
\r
52 float item_list_bit;
\r
54 .float dont_do_triggerwork;
\r
75 float illegalclasses/* = 0*/;
\r
76 float illegalclasses1;
\r
77 float illegalclasses2;
\r
78 float illegalclasses3;
\r
79 float illegalclasses4;
\r
80 float civilianteams;
\r
82 // Temp defs that need functions
\r
86 .float h_i_g, r_i_g, a_s, a_n, a_r, a_c, rv_s_h, rs_s_h, rv_gr, rs_gr, rs_g;
\r
88 .vector goal_min, goal_max;
\r
94 void(float tno, float scoretoadd) TeamFortress_TeamIncreaseScore;
\r
95 void(float all) TeamFortress_TeamShowScores;
\r
96 float() TeamFortress_TeamGetWinner;
\r
98 // Functions to handle entity placement when spawned
\r
99 void() TF_PlaceItem;
\r
100 void() TF_StartItem;
\r
101 void() TF_PlaceGoal;
\r
102 void() TF_StartGoal;
\r
104 // Spawn functions for all Map Entities
\r
105 float() CheckExistence;
\r
106 void() info_tfdetect;
\r
107 void() info_player_teamspawn;
\r
108 void() info_tfgoal;
\r
109 void() info_tfgoal_timer;
\r
110 void() item_tfgoal;
\r
112 // AutoDetection Function
\r
113 void(entity AD) ParseTFDetect;
\r
115 // Generic Functions
\r
116 entity(float ino) Finditem;
\r
117 entity(float gno) Findgoal;
\r
118 entity(float gno) Findteamspawn;
\r
119 void(entity Goal) InactivateGoal;
\r
120 void(entity Goal) RestoreGoal;
\r
121 void(entity Goal) RemoveGoal;
\r
122 float(entity Goal, entity Player, entity AP) IsAffectedBy;
\r
123 //void(entity Goal, entity Player, entity AP, float addb) Apply_Results;
\r
124 //float(entity Goal, entity AP) APMeetsCriteria;
\r
125 void(entity Goal) SetupRespawn;
\r
127 void(entity Goal, entity AP) DoGoalWork;
\r
128 void(entity Goal, entity AP) DoGroupWork;
\r
129 void(entity Item, entity AP) DoItemGroupWork;
\r
130 void(entity Goal, entity AP) DoTriggerWork;
\r
131 void(entity Goal, entity AP, float addb) DoResults;
\r
132 //void(entity Goal, entity Player) RemoveResults;
\r
135 void() tfgoal_touch;
\r
136 void() info_tfgoal_use;
\r
138 // Timer Goal Functions
\r
139 void() tfgoal_timer_tick;
\r
142 void() item_tfgoal_touch;
\r
143 void(entity Item, entity AP, entity Goal) tfgoalitem_GiveToPlayer;
\r
144 void(entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer;
\r
145 void() tfgoalitem_remove;
\r
146 void(entity Item) tfgoalitem_drop;
\r
147 void(entity Item) tfgoalitem_checkgoalreturn;
\r
149 void(entity Goal, entity Player, entity Item) DisplayItemStatus;
\r
151 // CTF Support Functions
\r
152 void() CTF_FlagCheck;
\r
155 void () TF_PlaceItem;
\r
156 void () TF_StartItem;
\r
157 void () TF_PlaceGoal;
\r
158 void () TF_StartGoal;
\r
159 //void () TF_PlaceCamp;
\r
160 //void () TF_StartCamp;
\r
161 void () info_tfdetect;
\r
162 //void () info_tfnocamp;
\r
163 void () info_player_teamspawn;
\r
164 void () info_tfgoal;
\r
165 void () info_tfgoal_timer;
\r
166 void () item_tfgoal;
\r
167 entity (float gno) Findgoal;
\r
168 entity (float gno) Findteamspawn;
\r
169 void (entity Goal) InactivateGoal;
\r
170 void (entity Goal) RestoreGoal;
\r
171 void (entity Goal) RemoveGoal;
\r
172 float (entity Goal,entity Player,entity AP) IsAffectedBy;
\r
173 void (entity Goal,entity Player,entity AP,float addb) Apply_Results;
\r
174 float (entity Goal,entity AP) APMeetsCriteria;
\r
175 void (entity Goal) SetupRespawn;
\r
177 void (entity Item,entity AP) DoItemGroupWork;
\r
178 void (entity Goal,entity AP) DoTriggerWork;
\r
179 void (entity Goal,entity Player) RemoveResults;
\r
180 void () info_tfgoal_use;
\r
181 void () tfgoal_timer_tick;
\r
182 void () item_tfgoal_touch;
\r
183 void () tfgoalitem_remove;
\r
184 void (entity Item) tfgoalitem_drop;
\r
185 void (entity Item) tfgoalitem_checkgoalreturn;
\r
186 void () ReturnItem;
\r
193 if ( (prematch) )// && (self.owner.items & 131072) )
\r
195 T_Damage (self.owner, self.owner, self.owner, 500);
\r
198 makevectors(self.owner.v_angle);
\r
199 setorigin(self, self.owner.origin - v_forward * 25 + '0 0 20');
\r
200 self.angles_x = self.owner.angles_z;
\r
201 self.angles_y = self.owner.angles_y + 90;
\r
202 self.angles_z = 0 - self.owner.angles_x;
\r
203 self.nextthink = time + 0.010000;
\r
204 self.think = MoveFlag;
\r
205 if (self.owner.deadflag)
\r
208 //self.movetype = 10;
\r
209 //self.velocity = '0 0 100';
\r
211 self.owner.effects = self.owner.effects - (self.owner.effects & 128);
\r
212 self.owner.effects = self.owner.effects - (self.owner.effects & 64);
\r
215 if (!(self.owner.items & 131072) && !(self.owner.items & 262144))
\r
217 self.owner.effects = self.owner.effects - (self.owner.effects & 128);
\r
218 self.owner.effects = self.owner.effects - (self.owner.effects & 64);
\r
223 void (entity Goal) UpdateAbbreviations =
\r
227 if ((Goal.has_abbreviated == 0))
\r
229 if (((Goal.g_a != 0) && (Goal.goal_activation == 0)))
\r
231 Goal.goal_activation = Goal.g_a;
\r
233 if (((Goal.g_e != 0) && (Goal.goal_effects == 0)))
\r
235 Goal.goal_effects = Goal.g_e;
\r
237 if (((Goal.g_e != 0) && (Goal.goal_effects == 0)))
\r
239 Goal.goal_effects = Goal.g_e;
\r
241 if (((Goal.h_i_g != 0) && (Goal.has_item_from_group == 0)))
\r
243 Goal.has_item_from_group = Goal.h_i_g;
\r
245 if (((Goal.hn_i_g != 0) && (Goal.hasnt_item_from_group == 0)))
\r
247 Goal.hasnt_item_from_group = Goal.hn_i_g;
\r
249 if (((Goal.r_i_g != 0) && (Goal.remove_item_group == 0)))
\r
251 Goal.remove_item_group = Goal.r_i_g;
\r
253 if (((Goal.a_s != 0) && (Goal.ammo_shells == 0)))
\r
255 Goal.ammo_shells = Goal.a_s;
\r
257 if (((Goal.a_n != 0) && (Goal.ammo_nails == 0)))
\r
259 Goal.ammo_nails = Goal.a_n;
\r
261 if (((Goal.a_r != 0) && (Goal.ammo_rockets == 0)))
\r
263 Goal.ammo_rockets = Goal.a_r;
\r
265 if (((Goal.a_c != 0) && (Goal.ammo_cells == 0)))
\r
267 Goal.ammo_cells = Goal.a_c;
\r
269 if (((Goal.rv_s_h != 0) && (Goal.remove_spawngroup == 0)))
\r
271 Goal.remove_spawngroup = Goal.rv_s_h;
\r
273 if (((Goal.rs_s_h != 0) && (Goal.restore_spawngroup == 0)))
\r
275 Goal.restore_spawngroup = Goal.rs_s_h;
\r
277 if (((Goal.rv_gr != 0) && (Goal.remove_group_no == 0)))
\r
279 Goal.remove_group_no = Goal.rv_gr;
\r
281 if (((Goal.rs_gr != 0) && (Goal.restore_group_no == 0)))
\r
283 Goal.restore_group_no = Goal.rs_gr;
\r
285 if (((Goal.rv_g != 0) && (Goal.remove_goal_no == 0)))
\r
287 Goal.remove_goal_no = Goal.rv_g;
\r
289 if (((Goal.rs_g != 0) && (Goal.restore_goal_no == 0)))
\r
291 Goal.restore_goal_no = Goal.rs_g;
\r
293 if ((Goal.t_s_h != string_null))
\r
295 Goal.team_str_home = Goal.t_s_h;
\r
297 if ((Goal.t_s_m != string_null))
\r
299 Goal.team_str_moved = Goal.t_s_m;
\r
301 if ((Goal.t_s_c != string_null))
\r
303 Goal.team_str_carried = Goal.t_s_c;
\r
305 if ((Goal.n_s_h != string_null))
\r
307 Goal.non_team_str_home = Goal.n_s_h;
\r
309 if ((Goal.n_s_m != string_null))
\r
311 Goal.non_team_str_moved = Goal.n_s_m;
\r
313 if ((Goal.n_s_c != string_null))
\r
315 Goal.non_team_str_carried = Goal.n_s_c;
\r
317 if ((Goal.b_b != string_null))
\r
319 Goal.broadcast = Goal.b_b;
\r
321 if ((Goal.b_t != string_null))
\r
323 Goal.team_broadcast = Goal.b_t;
\r
325 if ((Goal.b_n != string_null))
\r
327 Goal.non_team_broadcast = Goal.b_n;
\r
329 if ((Goal.b_o != string_null))
\r
331 Goal.owners_team_broadcast = Goal.b_o;
\r
333 if ((Goal.n_b != string_null))
\r
335 Goal.netname_broadcast = Goal.n_b;
\r
337 if ((Goal.n_t != string_null))
\r
339 Goal.netname_team_broadcast = Goal.n_t;
\r
341 if ((Goal.n_n != string_null))
\r
343 Goal.netname_non_team_broadcast = Goal.n_n;
\r
345 if ((Goal.n_o != string_null))
\r
347 Goal.netname_owners_team_broadcast = Goal.n_o;
\r
349 if ((Goal.d_t != string_null))
\r
351 Goal.team_drop = Goal.d_t;
\r
353 if ((Goal.d_n != string_null))
\r
355 Goal.non_team_drop = Goal.d_n;
\r
357 if ((Goal.d_n_t != string_null))
\r
359 Goal.netname_team_drop = Goal.d_n_t;
\r
361 if ((Goal.d_n_n != string_null))
\r
363 Goal.netname_non_team_drop = Goal.d_n_n;
\r
365 if ((flagem_checked == 0))
\r
367 if ((cvar ("temp1") & 4096))
\r
369 toggleflags = (toggleflags | 4096);
\r
371 if ((cvar ("temp1") & 8192))
\r
373 toggleflags = (toggleflags | 8192);
\r
375 flagem_checked = 1;
\r
377 if (((toggleflags & 4096) && !(toggleflags & 8192)))
\r
379 if ((((Goal.mdl == "progs/b_s_key.mdl") || (Goal.mdl == "progs/m_s_key.mdl")) || (Goal.mdl == "progs/w_s_key.mdl")))
\r
381 Goal.mdl = "progs/tf_flag.mdl";
\r
386 if ((((Goal.mdl == "progs/b_g_key.mdl") || (Goal.mdl == "progs/m_g_key.mdl")) || (Goal.mdl == "progs/w_g_key.mdl")))
\r
388 Goal.mdl = "progs/tf_flag.mdl";
\r
393 if ((toggleflags & 8192))
\r
395 if ((((Goal.mdl == "progs/b_s_key.mdl") || (Goal.mdl == "progs/m_s_key.mdl")) || (Goal.mdl == "progs/w_s_key.mdl")))
\r
397 Goal.mdl = "progs/tf_stan.mdl";
\r
402 if ((((Goal.mdl == "progs/b_g_key.mdl") || (Goal.mdl == "progs/m_g_key.mdl")) || (Goal.mdl == "progs/w_g_key.mdl")))
\r
404 Goal.mdl = "progs/tf_stan.mdl";
\r
409 if ((Goal.mdl == "progs/tf_flag.mdl"))
\r
411 Goal.mdl = "progs/tf_stan.mdl";
\r
416 Goal.has_abbreviated = 1;
\r
420 void () TF_PlaceItem =
\r
422 local float _l_10795;
\r
424 self.flags = 256.000000;
\r
425 self.movetype = 0.000000;
\r
426 self.velocity = '0.000000 0.000000 0.000000';
\r
427 self.oldorigin = self.origin;
\r
428 if ((self.goal_activation & 512.000000))
\r
430 self.effects = (self.effects | 8.000000);
\r
432 if ((item_list_bit == 0.000000))
\r
434 item_list_bit = 1.000000;
\r
436 self.item_list = item_list_bit;
\r
437 item_list_bit = item_list_bit * 2.000000;
\r
440 void () TF_StartItem =
\r
443 UpdateAbbreviations (self);
\r
444 self.nextthink = (time + 0.200000);
\r
445 self.think = TF_PlaceItem;
\r
446 if ((self.goal_state == 3.000000))
\r
452 void () TF_PlaceGoal =
\r
454 local float _l_10808;
\r
456 if ((self.classname != "info_tfgoal_timer"))
\r
458 if ((self.goal_activation & 1.000000))
\r
460 self.touch = tfgoal_touch;
\r
465 self.think = tfgoal_timer_tick;
\r
466 self.nextthink = (time + self.search_time);
\r
467 self.classname = "info_tfgoal";
\r
469 self.flags = 256.000000;
\r
470 self.movetype = 0.000000;
\r
471 self.velocity = '0.000000 0.000000 0.000000';
\r
472 self.oldorigin = self.origin;
\r
475 void () TF_StartGoal =
\r
478 UpdateAbbreviations (self);
\r
479 self.nextthink = (time + 0.200000);
\r
480 self.think = TF_PlaceGoal;
\r
481 self.use = info_tfgoal_use;
\r
482 if ((self.goal_state == 3.000000))
\r
488 float() CheckExistence =
\r
491 UpdateAbbreviations (self);
\r
492 if ((self.ex_skill_min && (skill <= self.ex_skill_min)))
\r
498 if ((self.ex_skill_max && (skill >= self.ex_skill_max)))
\r
506 /* // ORIG NETQUAKETF INFO_TFDETECT
\r
507 void () info_tfdetect =
\r
509 UpdateAbbreviations (self);
\r
513 /*void () info_tfdetect =
\r
518 UpdateAbbreviations (self);
\r
521 te = find (world,classname,"countdown");
\r
527 st = infokey (world,"time"); // Unfortunately DP Engine doesnt support this (qw funct)
\r
533 newmis.classname = "countdown";
\r
534 newmis.no_grenades_1 = 0;
\r
535 st = infokey (world,"timelimit");
\r
536 newmis.health = stof(st);
\r
537 newmis.think = review_timeleft;
\r
538 newmis.nextthink = (time + 1);
\r
541 // MESSAGE DISP CODE
\r
542 if (haltloop1 != 1)
\r
544 local string msg1timer;
\r
546 msg1timer = infokey (world, "svmsg1");
\r
547 msg1time = stof(msg1timer);
\r
551 display_message ();
\r
556 if (haltloop2 != 1)
\r
558 local string msg2timer;
\r
560 msg2timer = infokey (world, "svmsg2");
\r
561 msg2time = stof(msg2timer);
\r
565 pre_messagetimer2 ();
\r
570 if (haltloop3 != 1)
\r
572 local string msg3timer;
\r
574 msg3timer = infokey (world, "svmsg3");
\r
575 msg3time = stof(msg3timer);
\r
579 pre_messagetimer3 ();
\r
583 if (quotestart != 1) {
\r
587 // Auto Level-change fix
\r
590 /* Gold. this is the old info_tfdetect... new one is above*/
\r
591 void() info_tfdetect =
\r
593 UpdateAbbreviations(self);
\r
594 /*gold. next 6 lines are part of plexi's code for the "timeleft" command.
\r
596 newmis.classname = "countdown";
\r
597 newmis.netname = "countdown";
\r
598 newmis.no_grenades_1 = 0;
\r
599 newmis.think = review_timeleft;
\r
600 newmis.nextthink = (time + 1);*/
\r
603 void() info_player_teamspawn =
\r
606 if (CheckExistence() == 0)
\r
611 if (number_of_teams < self.team_no)
\r
613 number_of_teams = self.team_no;
\r
615 if (self.team_no <= 0)
\r
617 dprint("no team_no associated with info_player_teamspawn\n");
\r
620 if (self.items != 0)
\r
622 te = Finditem(self.items);
\r
625 dprint("info_player_teamspawn specifies a GoalItem that does not exist\n");
\r
629 if (self.team_no == 1)
\r
631 self.team_str_home = "ts1";
\r
635 if (self.team_no == 2)
\r
637 self.team_str_home = "ts2";
\r
641 if (self.team_no == 3)
\r
643 self.team_str_home = "ts3";
\r
647 if (self.team_no == 4)
\r
649 self.team_str_home = "ts4";
\r
658 self.classname = "info_player_teamspawn";
\r
659 info_player_teamspawn();
\r
662 void() info_tfgoal =
\r
664 if (CheckExistence() == 0)
\r
671 precache_model(self.mdl);
\r
672 precache_model2(self.mdl);
\r
673 setmodel(self, self.mdl);
\r
677 precache_sound(self.noise);
\r
678 precache_sound2(self.noise);
\r
682 if (self.mdl == "progs/backpack.mdl")
\r
684 precache_sound("items/backpack.wav");
\r
685 precache_sound2("items/backpack.wav");
\r
686 self.noise = "items/backpack.wav";
\r
689 precache_sound("items/protect.wav");
\r
690 precache_sound("items/protect2.wav");
\r
691 precache_sound("items/protect3.wav");
\r
692 precache_sound("items/suit.wav");
\r
693 precache_sound("items/suit2.wav");
\r
694 precache_sound("items/inv1.wav");
\r
695 precache_sound("items/inv2.wav");
\r
696 precache_sound("items/inv3.wav");
\r
697 precache_sound("items/damage.wav");
\r
698 precache_sound("items/damage2.wav");
\r
699 precache_sound("items/damage3.wav");
\r
701 if (self.goal_state == 0)
\r
703 self.goal_state = 2;
\r
705 if (self.goal_min != '0 0 0')
\r
707 setsize(self, self.goal_min, self.goal_max);
\r
711 setsize(self, '-16 -16 -24', '16 16 32');
\r
718 self.classname = "info_tfgoal";
\r
722 void() info_tfgoal_timer =
\r
724 if (CheckExistence() == 0)
\r
731 precache_model(self.mdl);
\r
732 precache_model2(self.mdl);
\r
733 setmodel(self, self.mdl);
\r
737 precache_sound(self.noise);
\r
738 precache_sound2(self.noise);
\r
740 if (self.search_time <= 0)
\r
742 dprint("Timer Goal created with no specified time.\n");
\r
746 if (self.goal_state == 0)
\r
748 self.goal_state = 2;
\r
750 setsize(self, '-16 -16 -24', '16 16 32');
\r
756 self.classname = "info_tfgoal_timer";
\r
757 info_tfgoal_timer();
\r
760 void() item_tfgoal =
\r
762 if (CheckExistence() == 0)
\r
769 precache_model(self.mdl);
\r
770 precache_model2(self.mdl);
\r
771 setmodel(self, self.mdl);
\r
776 setmodel(self, "");
\r
778 precache_sound2("items/itembk2.wav");
\r
781 precache_sound(self.noise);
\r
782 precache_sound2(self.noise);
\r
784 self.touch = item_tfgoal_touch;
\r
785 if (self.goal_state == 0)
\r
787 self.goal_state = 2;
\r
790 setorigin(self, self.origin);
\r
791 if (!(self.netname))
\r
793 self.netname = "goalitem";
\r
795 if (self.pausetime <= 0)
\r
797 self.pausetime = 60;
\r
799 if (self.delay != 0 && self.pausetime == 0)
\r
801 self.pausetime = self.delay;
\r
803 setsize(self, '-16 -16 -24', '16 16 32');
\r
807 void (entity AD) ParseTFDetect =
\r
809 if ((AD.team_broadcast != string_null))
\r
811 team_menu_string = AD.team_broadcast;
\r
813 localcmd (AD.message);
\r
814 cvar_set ("sv_maxspeed", "500");
\r
815 team1lives = AD.ammo_shells;
\r
816 team2lives = AD.ammo_nails;
\r
817 team3lives = AD.ammo_rockets;
\r
818 team4lives = AD.ammo_cells;
\r
819 if ((team1lives == 0))
\r
823 if ((team2lives == 0))
\r
827 if ((team3lives == 0))
\r
831 if ((team4lives == 0))
\r
835 /*if ((AD.hook_out == 1)) // Hook always allowed, right?
\r
839 team1maxplayers = AD.ammo_medikit;
\r
840 team2maxplayers = AD.ammo_detpack;
\r
841 team3maxplayers = AD.maxammo_medikit;
\r
842 team4maxplayers = AD.maxammo_detpack;
\r
843 if ((team1maxplayers == 0))
\r
845 team1maxplayers = 100;
\r
847 if ((team2maxplayers == 0))
\r
849 team2maxplayers = 100;
\r
851 if ((team3maxplayers == 0))
\r
853 team3maxplayers = 100;
\r
855 if ((team4maxplayers == 0))
\r
857 team4maxplayers = 100;
\r
859 // illegalclasses = AD.playerclass;
\r
860 illegalclasses = AD.class;
\r
861 illegalclasses1 = AD.maxammo_shells;
\r
862 illegalclasses2 = AD.maxammo_nails;
\r
863 illegalclasses3 = AD.maxammo_rockets;
\r
864 illegalclasses4 = AD.maxammo_cells;
\r
866 if ((illegalclasses1 == -1))
\r
868 illegalclasses1 = 0;
\r
869 civilianteams = (civilianteams | 1);
\r
871 if ((illegalclasses2 == -1))
\r
873 illegalclasses2 = 0;
\r
874 civilianteams = (civilianteams | 2);
\r
876 if ((illegalclasses3 == -1))
\r
878 illegalclasses3 = 0;
\r
879 civilianteams = (civilianteams | 4);
\r
881 if ((illegalclasses4 == -1))
\r
883 illegalclasses4 = 0;
\r
884 civilianteams = (civilianteams | 8);
\r
888 entity(float ino) Finditem =
\r
892 tg = find(world, classname, "item_tfgoal");
\r
895 if (tg.goal_no == ino)
\r
899 tg = find(tg, classname, "item_tfgoal");
\r
901 dprint("Could not find an item with a goal_no of ");
\r
908 /*entity(float gno) Findgoal = // moved to tffunctions
\r
912 tg = find(world, classname, "info_tfgoal");
\r
915 if (tg.goal_no == gno)
\r
919 tg = find(tg, classname, "info_tfgoal");
\r
921 dprint("Could not find a goal with a goal_no of ");
\r
927 entity(float gno) Findteamspawn =
\r
931 tg = find(world, classname, "info_player_teamspawn");
\r
934 if (tg.goal_no == gno)
\r
938 tg = find(tg, classname, "info_player_teamspawn");
\r
940 dprint("Could not find a Teamspawn with a goal_no of ");
\r
946 void(entity Goal) InactivateGoal =
\r
948 if (Goal.goal_state == 1)
\r
950 if (Goal.search_time == 0)
\r
954 Goal.goal_state = 2;
\r
955 if (Goal.mdl != string_null)
\r
957 setmodel(Goal, Goal.mdl);
\r
962 void(entity Goal) RestoreGoal =
\r
964 if (Goal.goal_state == 3)
\r
966 if (Goal.search_time == 0)
\r
972 Goal.nextthink = time + Goal.search_time;
\r
974 Goal.goal_state = 2;
\r
975 if (Goal.mdl != string_null)
\r
977 setmodel(Goal, Goal.mdl);
\r
982 void(entity Goal) RemoveGoal =
\r
985 Goal.goal_state = 3;
\r
986 if (Goal.mdl != string_null)
\r
988 setmodel(Goal, string_null);
\r
992 float(entity Goal, entity Player, entity AP) IsAffectedBy =
\r
995 //if (Player.playerclass == 0)
\r
996 if (Player.class == 0)
\r
1000 if (Goal.goal_effects & 32)
\r
1002 genv = pointcontents(Goal.origin);
\r
1003 if (pointcontents(Player.origin) != genv)
\r
1008 if (Goal.t_length != 0)
\r
1010 if (vlen(Goal.origin - Player.origin) <= Goal.t_length)
\r
1012 if (Goal.goal_effects & 16)
\r
1014 traceline(Goal.origin, Player.origin, 1, Goal);
\r
1015 if (trace_fraction == 1)
\r
1026 if (Goal.classname != "info_tfgoal_timer")
\r
1028 if (Goal.goal_effects & 1 && Player == AP)
\r
1032 if (Goal.goal_effects & 2 && AP.team_no == Player.team_no)
\r
1036 if (Goal.goal_effects & 4 && AP.team_no != Player.team_no)
\r
1040 if (Goal.goal_effects & 8 && Player != AP)
\r
1045 if (Goal.maxammo_shells != 0 && Player.team_no == Goal.maxammo_shells)
\r
1049 if (Goal.maxammo_nails != 0 && Player.team_no != Goal.maxammo_shells)
\r
1056 void(entity Goal, entity Player, entity AP, float addb) Apply_Results =
\r
1058 local entity oldself;
\r
1060 local entity oldte;
\r
1064 stuffcmd(Player, "bf\n");
\r
1065 if (Goal.classname == "item_tfgoal")
\r
1067 Player.item_list = Player.item_list | Goal.item_list;
\r
1071 if (Goal.count != 0)
\r
1073 if (Player.team_no > 0)
\r
1075 TeamFortress_TeamIncreaseScore(Player.team_no, Goal.count);
\r
1076 TeamFortress_TeamShowScores(2);
\r
1082 if (Player.health > 0)
\r
1084 if (Goal.health > 0)
\r
1086 T_Heal(Player, Goal.health, 0);
\r
1088 if (Goal.health < 0)
\r
1090 if (0 - Player.health > Goal.health)
\r
1092 Player.armorvalue = 0;
\r
1093 T_Damage(Player, Goal, Goal, Player.health + 1);
\r
1097 oa = Player.armorvalue;
\r
1098 Player.armorvalue = 0;
\r
1099 T_Damage(Player, Goal, Goal, 0 - Goal.health);
\r
1100 Player.armorvalue = oa;
\r
1104 if (Player.health > 0)
\r
1106 if (Goal.armortype)
\r
1109 // Player.armortype = Goal.armortype; // Armor type needs to be tweaked in this game
\r
1111 Player.armorvalue = Player.armorvalue + Goal.armorvalue;
\r
1112 if (Goal.armorclass)
\r
1114 Player.armorclass = Goal.armorclass;
\r
1116 if (Goal.gravity > 0)
\r
1118 Player.gravity = Goal.gravity;
\r
1120 Player.ammo_shells = Player.ammo_shells + Goal.ammo_shells;
\r
1121 Player.ammo_nails = Player.ammo_nails + Goal.ammo_nails;
\r
1122 Player.ammo_rockets = Player.ammo_rockets + Goal.ammo_rockets;
\r
1123 Player.ammo_cells = Player.ammo_cells + Goal.ammo_cells;
\r
1124 Player.ammo_medikit = Player.ammo_medikit + Goal.ammo_medikit;
\r
1125 Player.ammo_detpack = Player.ammo_detpack + Goal.ammo_detpack;
\r
1126 Player.no_grenades_1 = Player.no_grenades_1 + Goal.no_grenades_1;
\r
1127 Player.no_grenades_2 = Player.no_grenades_2 + Goal.no_grenades_2;
\r
1128 if (Player.no_grenades_1 > 4)
\r
1130 Player.no_grenades_1 = 4;
\r
1132 if (Player.no_grenades_2 > 4)
\r
1134 Player.no_grenades_2 = 4;
\r
1136 if (Player.ammo_detpack > Player.maxammo_detpack)
\r
1138 Player.ammo_detpack = Player.maxammo_detpack;
\r
1140 if (Goal.invincible_finished > 0)
\r
1142 Player.items = Player.items | 1048576;
\r
1143 Player.invincible_time = 1;
\r
1144 Player.invincible_finished = time + Goal.invincible_finished;
\r
1145 if (Goal.classname == "item_tfgoal")
\r
1147 Player.tfstate = Player.tfstate | 32;
\r
1148 Player.invincible_finished = time + 666;
\r
1151 /*if (Goal.invisible_finished > 0) // NexTF doesnt support invisibility?
\r
1153 Player.items = Player.items | 524288;
\r
1154 Player.invisible_time = 1;
\r
1155 Player.invisible_finished = time + Goal.invisible_finished;
\r
1156 if (Goal.classname == "item_tfgoal")
\r
1158 Player.tfstate = Player.tfstate | 64;
\r
1159 Player.invisible_finished = time + 666;
\r
1162 if (Goal.super_damage_finished > 0)
\r
1164 Player.items = Player.items | 4194304;
\r
1165 Player.super_time = 1;
\r
1166 Player.super_damage_finished = time + Goal.super_damage_finished;
\r
1167 if (Goal.classname == "item_tfgoal")
\r
1169 Player.tfstate = Player.tfstate | 128;
\r
1170 Player.super_damage_finished = time + 666;
\r
1173 if (Goal.radsuit_finished > 0)
\r
1175 Player.items = Player.items | 2097152;
\r
1176 Player.rad_time = 1;
\r
1177 Player.radsuit_finished = time + Goal.radsuit_finished;
\r
1178 if (Goal.classname == "item_tfgoal")
\r
1180 Player.tfstate = Player.tfstate | 256;
\r
1181 Player.radsuit_finished = time + 666;
\r
1185 Player.lives = Player.lives + Goal.lives;
\r
1186 Player.real_frags = /*Player.real_frags + */Goal.frags + Player.frags; // Fixed?
\r
1187 if (!(toggleflags & 128))
\r
1189 Player.frags = Player.real_frags;
\r
1194 TeamFortress_CheckClassStats();
\r
1195 //W_SetCurrentAmmo(); // This is automatic in nexuiz right?
\r
1198 //if (Player.playerclass == 8 && (Goal.goal_result & 16)) // In nextf, spy class is "2"
\r
1199 if (Player.class == 2 && (Goal.goal_result & 16))
\r
1201 self.immune_to_check = time + 4;
\r
1202 //Spy_RemoveDisguise(Player); // Wazat -- help [incomplete]
\r
1204 if (Goal.items != 0 && Goal.classname != "item_tfgoal")
\r
1206 te = Finditem(Goal.items);
\r
1209 tfgoalitem_GiveToPlayer(te, Player, Goal);
\r
1212 if (Goal.axhitme != 0)
\r
1214 te = Finditem(Goal.axhitme);
\r
1215 if (te.owner == Player)
\r
1217 tfgoalitem_RemoveFromPlayer(te, Player, 1);
\r
1220 if (Goal.remove_item_group != 0)
\r
1222 te = find(world, classname, "item_tfgoal");
\r
1225 if (te.group_no == Goal.remove_item_group && te.owner == AP)
\r
1228 te = find(te, classname, "item_tfgoal");
\r
1229 tfgoalitem_RemoveFromPlayer(oldte, Player, 1);
\r
1233 te = find(te, classname, "item_tfgoal");
\r
1237 if (Goal.display_item_status1 != 0)
\r
1239 te = Finditem(Goal.display_item_status1);
\r
1242 DisplayItemStatus(Goal, Player, te);
\r
1246 sprint(Player,"Item is missing.\n");
\r
1249 if (Goal.display_item_status2 != 0)
\r
1251 te = Finditem(Goal.display_item_status2);
\r
1254 DisplayItemStatus(Goal, Player, te);
\r
1258 sprint(Player,"Item is missing.\n");
\r
1261 if (Goal.display_item_status3 != 0)
\r
1263 te = Finditem(Goal.display_item_status3);
\r
1266 DisplayItemStatus(Goal, Player, te);
\r
1270 sprint(Player,"Item is missing.\n");
\r
1273 if (Goal.display_item_status4 != 0)
\r
1275 te = Finditem(Goal.display_item_status4);
\r
1278 DisplayItemStatus(Goal, Player, te);
\r
1282 sprint(Player,"Item is missing.\n");
\r
1285 /*if (Player.autodiscard) //Not a function in NexTF
\r
1289 TeamFortress_Discard ();
\r
1294 void(entity Goal, entity Player) RemoveResults =
\r
1296 local entity oldself;
\r
1298 local float puinvin;
\r
1299 local float puinvis;
\r
1300 local float puquad;
\r
1301 local float purad;
\r
1302 if (Goal.classname == "item_tfgoal")
\r
1304 if (!(Player.item_list & Goal.item_list))
\r
1308 if (Goal.goal_activation & 1024)
\r
1312 Player.item_list = Player.item_list - (Player.item_list & Goal.item_list);
\r
1314 if (Goal.health > 0)
\r
1316 TF_T_Damage(Player, Goal, Goal, Goal.health, 1, 0);
\r
1318 if (Goal.health < 0)
\r
1320 T_Heal(Player, 0 - Goal.health, 0);
\r
1322 Player.lives = Player.lives - Goal.lives;
\r
1323 Player.armortype = Player.armortype - Goal.armortype;
\r
1324 Player.armorvalue = Player.armorvalue - Goal.armorvalue;
\r
1325 Player.armorclass = Player.armorclass - (Player.armorclass & Goal.armorclass);
\r
1326 Player.real_frags = Player.real_frags - Goal.frags;
\r
1327 if (!(toggleflags & 128))
\r
1329 Player.frags = Player.real_frags;
\r
1331 Player.ammo_shells = Player.ammo_shells - Goal.ammo_shells;
\r
1332 Player.ammo_nails = Player.ammo_nails - Goal.ammo_nails;
\r
1333 Player.ammo_rockets = Player.ammo_rockets - Goal.ammo_rockets;
\r
1334 Player.ammo_cells = Player.ammo_cells - Goal.ammo_cells;
\r
1335 Player.ammo_medikit = Player.ammo_medikit - Goal.ammo_medikit;
\r
1336 Player.ammo_detpack = Player.ammo_detpack - Goal.ammo_detpack;
\r
1337 Player.no_grenades_1 = Player.no_grenades_1 - Goal.no_grenades_1;
\r
1338 Player.no_grenades_2 = Player.no_grenades_2 - Goal.no_grenades_2;
\r
1343 te = find(world, classname, "item_tfgoal");
\r
1346 if (te.owner == Player && te != Goal)
\r
1348 if (te.invincible_finished > 0)
\r
1352 if (te.invisible_finished > 0)
\r
1356 if (te.super_damage_finished > 0)
\r
1360 if (te.radsuit_finished > 0)
\r
1365 te = find(te, classname, "item_tfgoal");
\r
1367 if (Goal.invincible_finished > 0 && !puinvin)
\r
1369 Player.tfstate = Player.tfstate - (Player.tfstate & 32);
\r
1370 Player.items = Player.items | 1048576;
\r
1371 Player.invincible_time = 1;
\r
1372 Player.invincible_finished = time + Goal.invincible_finished;
\r
1374 if (Goal.invisible_finished > 0 && !puinvis)
\r
1376 Player.tfstate = Player.tfstate - (Player.tfstate & 64);
\r
1377 Player.items = Player.items | 524288;
\r
1378 Player.invisible_time = 1;
\r
1379 Player.invisible_finished = time + Goal.invisible_finished;
\r
1381 if (Goal.super_damage_finished > 0 && !puquad)
\r
1383 Player.tfstate = Player.tfstate - (Player.tfstate & 128);
\r
1384 Player.items = Player.items | 4194304;
\r
1385 Player.super_time = 1;
\r
1386 Player.super_damage_finished = time + Goal.super_damage_finished;
\r
1388 if (Goal.radsuit_finished > 0 && !purad)
\r
1390 Player.tfstate = Player.tfstate - (Player.tfstate & 256);
\r
1391 Player.items = Player.items | 2097152;
\r
1392 Player.rad_time = 1;
\r
1393 Player.radsuit_finished = time + Goal.radsuit_finished;
\r
1397 TeamFortress_CheckClassStats();
\r
1398 //W_SetCurrentAmmo(); // automatic in nexuiz?
\r
1402 float(entity Goal, entity AP) APMeetsCriteria =
\r
1404 local float gotone;
\r
1411 if (Goal.team_no != AP.team_no)
\r
1416 /* if (Goal.playerclass)
\r
1418 if (Goal.playerclass != AP.playerclass)
\r
1425 if (Goal.class != AP.class)
\r
1430 if (Goal.items_allowed)
\r
1432 te = Finditem(Goal.items_allowed);
\r
1433 if (te.owner != AP)
\r
1439 if (Goal.if_goal_is_active)
\r
1441 te = Findgoal(Goal.if_goal_is_active);
\r
1442 if (te.goal_state != 1)
\r
1447 if (Goal.if_goal_is_inactive)
\r
1449 te = Findgoal(Goal.if_goal_is_inactive);
\r
1450 if (te.goal_state != 2)
\r
1455 if (Goal.if_goal_is_removed)
\r
1457 te = Findgoal(Goal.if_goal_is_removed);
\r
1458 if (te.goal_state != 3)
\r
1463 if (Goal.if_group_is_active)
\r
1465 te = find(world, classname, "info_tfgoal");
\r
1468 if (te.group_no == Goal.if_group_is_active)
\r
1470 if (te.goal_state != 1)
\r
1475 te = find(te, classname, "info_tfgoal");
\r
1478 if (Goal.if_group_is_inactive)
\r
1480 te = find(world, classname, "info_tfgoal");
\r
1483 if (te.group_no == Goal.if_group_is_inactive)
\r
1485 if (te.goal_state != 2)
\r
1490 te = find(te, classname, "info_tfgoal");
\r
1493 if (Goal.if_group_is_removed)
\r
1495 te = find(world, classname, "info_tfgoal");
\r
1498 if (te.group_no == Goal.if_group_is_removed)
\r
1500 if (te.goal_state != 3)
\r
1505 te = find(te, classname, "info_tfgoal");
\r
1508 if (Goal.if_item_has_moved)
\r
1510 te = Finditem(Goal.if_item_has_moved);
\r
1513 if (te.goal_state != 1 && te.origin == te.oldorigin)
\r
1519 if (Goal.if_item_hasnt_moved)
\r
1521 te = Finditem(Goal.if_item_hasnt_moved);
\r
1524 if (te.goal_state == 1 || te.origin != te.oldorigin)
\r
1533 if (Goal.has_item_from_group)
\r
1535 te = find(world, classname, "item_tfgoal");
\r
1536 while (te != world && !gotone)
\r
1538 if (te.group_no == Goal.has_item_from_group && te.owner == AP)
\r
1542 te = find(te, classname, "item_tfgoal");
\r
1553 void(entity Goal) SetupRespawn =
\r
1555 if (Goal.search_time != 0)
\r
1557 InactivateGoal(Goal);
\r
1558 Goal.think = tfgoal_timer_tick;
\r
1559 Goal.nextthink = time + Goal.search_time;
\r
1562 if (Goal.goal_result & 1)
\r
1567 if (Goal.wait > 0)
\r
1569 Goal.nextthink = time + Goal.wait;
\r
1570 Goal.think = DoRespawn;
\r
1575 if (Goal.wait == -1)
\r
1580 InactivateGoal(Goal);
\r
1583 void() DoRespawn =
\r
1585 RestoreGoal(self);
\r
1586 InactivateGoal(self);
\r
1589 float(entity Goal, entity AP) Activated =
\r
1591 local float APMet;
\r
1592 local float RevAct;
\r
1594 if (Goal.goal_state == 1)
\r
1598 if (Goal.goal_state == 3)
\r
1602 if (Goal.goal_state == 4)
\r
1606 APMet = APMeetsCriteria(Goal, AP);
\r
1607 if (Goal.classname == "item_tfgoal")
\r
1609 RevAct = Goal.goal_activation & 64;
\r
1613 RevAct = Goal.goal_activation & 4;
\r
1633 void(entity Goal, entity AP) DoGoalWork =
\r
1637 if (Goal.activate_goal_no != 0)
\r
1639 te = Findgoal(Goal.activate_goal_no);
\r
1642 AttemptToActivate(te, AP, Goal);
\r
1645 if (Goal.inactivate_goal_no != 0)
\r
1647 te = Findgoal(Goal.inactivate_goal_no);
\r
1650 InactivateGoal(te);
\r
1653 if (Goal.restore_goal_no != 0)
\r
1655 te = Findgoal(Goal.restore_goal_no);
\r
1661 if (Goal.remove_goal_no != 0)
\r
1663 te = Findgoal(Goal.remove_goal_no);
\r
1669 if (Goal.return_item_no != 0)
\r
1671 te = Finditem(Goal.return_item_no);
\r
1674 if (te.goal_state == 1)
\r
1676 tfgoalitem_RemoveFromPlayer(te, te.owner, 1);
\r
1680 RI.think = ReturnItem;
\r
1681 RI.nextthink = time + 0.1;
\r
1685 if (Goal.remove_spawnpoint != 0)
\r
1687 te = Findteamspawn(Goal.remove_spawnpoint);
\r
1690 te.goal_state = 3;
\r
1691 te.team_str_home = string_null;
\r
1694 if (Goal.restore_spawnpoint != 0)
\r
1696 te = Findteamspawn(Goal.restore_spawnpoint);
\r
1699 if (te.goal_state == 3)
\r
1701 te.goal_state = 2;
\r
1702 if (te.team_no == 1)
\r
1704 te.team_str_home = "ts1";
\r
1708 if (te.team_no == 2)
\r
1710 te.team_str_home = "ts2";
\r
1714 if (te.team_no == 3)
\r
1716 te.team_str_home = "ts3";
\r
1720 if (te.team_no == 4)
\r
1722 te.team_str_home = "ts4";
\r
1732 void(entity Goal, entity AP) DoGroupWork =
\r
1736 local float allset;
\r
1737 if (Goal.all_active != 0)
\r
1739 if (Goal.last_impulse == 0)
\r
1742 st = ftos(Goal.goal_no);
\r
1744 dprint(" has a .all_active specified, but no .last_impulse\n");
\r
1749 tg = find(world, classname, "info_tfgoal");
\r
1752 if (tg.group_no == Goal.all_active)
\r
1754 if (tg.goal_state != 1)
\r
1759 tg = find(tg, classname, "info_tfgoal");
\r
1763 tg = Findgoal(Goal.last_impulse);
\r
1766 DoResults(tg, AP, Goal.goal_result & 2);
\r
1771 if (Goal.activate_group_no != 0)
\r
1773 tg = find(world, classname, "info_tfgoal");
\r
1776 if (tg.group_no == Goal.activate_group_no)
\r
1778 DoResults(tg, AP, 0);
\r
1780 tg = find(tg, classname, "info_tfgoal");
\r
1783 if (Goal.inactivate_group_no != 0)
\r
1785 tg = find(world, classname, "info_tfgoal");
\r
1788 if (tg.group_no == Goal.inactivate_group_no)
\r
1790 InactivateGoal(tg);
\r
1792 tg = find(tg, classname, "info_tfgoal");
\r
1795 if (Goal.remove_group_no != 0)
\r
1797 tg = find(world, classname, "info_tfgoal");
\r
1800 if (tg.group_no == Goal.remove_group_no)
\r
1804 tg = find(tg, classname, "info_tfgoal");
\r
1807 if (Goal.restore_group_no != 0)
\r
1809 tg = find(world, classname, "info_tfgoal");
\r
1812 if (tg.group_no == Goal.restore_group_no)
\r
1816 tg = find(tg, classname, "info_tfgoal");
\r
1819 if (Goal.remove_spawngroup != 0)
\r
1821 tg = find(world, classname, "info_player_teamspawn");
\r
1824 if (tg.group_no == Goal.remove_spawngroup)
\r
1826 tg.goal_state = 3;
\r
1827 tg.team_str_home = string_null;
\r
1829 tg = find(tg, classname, "info_player_teamspawn");
\r
1832 if (Goal.restore_spawngroup != 0)
\r
1834 tg = find(world, classname, "info_player_teamspawn");
\r
1837 if (tg.group_no == Goal.restore_spawngroup)
\r
1839 tg.goal_state = 2;
\r
1840 if (tg.team_no == 1)
\r
1842 tg.team_str_home = "ts1";
\r
1846 if (tg.team_no == 2)
\r
1848 tg.team_str_home = "ts2";
\r
1852 if (tg.team_no == 3)
\r
1854 tg.team_str_home = "ts3";
\r
1858 if (tg.team_no == 4)
\r
1860 tg.team_str_home = "ts4";
\r
1866 tg = find(tg, classname, "info_player_teamspawn");
\r
1871 void(entity Item, entity AP) DoItemGroupWork =
\r
1874 local entity carrier;
\r
1875 local float allcarried;
\r
1878 if (Item.distance != 0)
\r
1880 if (Item.pain_finished == 0)
\r
1882 dprint("GoalItem ");
\r
1883 st = ftos(Item.goal_no);
\r
1885 dprint(" has a .distance specified, but no .pain_finished\n");
\r
1887 tg = find(world, classname, "item_tfgoal");
\r
1890 if (tg.group_no == Item.distance)
\r
1892 if (tg.goal_state != 1)
\r
1897 tg = find(tg, classname, "item_tfgoal");
\r
1899 if (allcarried == 1)
\r
1901 tg = Findgoal(Item.pain_finished);
\r
1904 DoResults(tg, AP, Item.goal_result & 2);
\r
1909 if (Item.speed != 0)
\r
1911 if (Item.attack_finished == 0)
\r
1913 dprint("GoalItem ");
\r
1914 st = ftos(Item.goal_no);
\r
1916 dprint(" has a .speed specified, but no .attack_finished\n");
\r
1919 tg = find(world, classname, "item_tfgoal");
\r
1922 if (tg.group_no == Item.speed)
\r
1924 if (tg.goal_state != 1)
\r
1930 if (carrier == world)
\r
1932 carrier = tg.owner;
\r
1936 if (carrier != tg.owner)
\r
1943 tg = find(tg, classname, "item_tfgoal");
\r
1945 if (allcarried == 1)
\r
1947 tg = Findgoal(Item.attack_finished);
\r
1950 DoResults(tg, AP, Item.goal_result & 2);
\r
1956 void(entity Goal, entity AP) DoTriggerWork =
\r
1959 if (Goal.killtarget)
\r
1964 t = find(t, targetname, Goal.killtarget);
\r
1969 } while (t != world);
\r
1977 t = find(t, targetname, Goal.target);
\r
1986 if (self.use != SUB_Null)
\r
1996 } while (t != world);
\r
2000 void() DelayedResult =
\r
2002 if (self.enemy.goal_state == 4)
\r
2004 DoResults(self.enemy, self.owner, self.weapon);
\r
2009 void(entity Goal, entity AP, float addb) DoResults =
\r
2012 local entity oldself;
\r
2014 local float winners;
\r
2016 if (Goal.goal_state == 1)
\r
2020 if (Goal.delay_time > 0 && Goal.goal_state != 4)
\r
2022 Goal.goal_state = 4;
\r
2024 te.think = DelayedResult;
\r
2025 te.nextthink = time + Goal.delay_time;
\r
2031 UpdateAbbreviations(Goal);
\r
2032 Goal.goal_state = 2;
\r
2035 if (Goal.volume == 1)
\r
2037 sound(other, 3, Goal.noise, 1, 0);
\r
2041 sound(other, 3, Goal.noise, 1, 1);
\r
2045 if (Goal.increase_team1 != 0)
\r
2047 TeamFortress_TeamIncreaseScore(1, Goal.increase_team1);
\r
2050 if (Goal.increase_team2 != 0)
\r
2052 TeamFortress_TeamIncreaseScore(2, Goal.increase_team2);
\r
2055 if (Goal.increase_team3 != 0)
\r
2057 TeamFortress_TeamIncreaseScore(3, Goal.increase_team3);
\r
2060 if (Goal.increase_team4 != 0)
\r
2062 TeamFortress_TeamIncreaseScore(4, Goal.increase_team4);
\r
2067 TeamFortress_TeamShowScores(2);
\r
2069 te = find(world, classname, "player");
\r
2070 while (te != world)
\r
2072 if (Goal.broadcast != string_null && CTF_Map == 0)
\r
2074 CenterPrint2(te, "\n\n\n", Goal.broadcast);
\r
2076 if (Goal.netname_broadcast != string_null && CTF_Map == 0)
\r
2078 sprint(te,AP.netname);
\r
2079 sprint(te,Goal.netname_broadcast);
\r
2083 if (Goal.message != string_null)
\r
2085 CenterPrint2(te, Goal.message, AP.netname);
\r
2090 if (AP.team_no == te.team_no)
\r
2092 if (Goal.owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2094 CenterPrint2(te, Goal.owners_team_broadcast, AP.netname);
\r
2098 if (Goal.team_broadcast != string_null)
\r
2100 CenterPrint2(te, Goal.team_broadcast, AP.netname);
\r
2103 if (Goal.netname_owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2105 sprint(te,AP.netname);
\r
2106 sprint(te,Goal.netname_owners_team_broadcast);
\r
2110 if (Goal.netname_team_broadcast != string_null)
\r
2112 sprint(te,AP.netname);
\r
2113 sprint(te,Goal.netname_team_broadcast);
\r
2119 if (Goal.owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2121 CenterPrint2(te, Goal.owners_team_broadcast, AP.netname);
\r
2125 if (Goal.non_team_broadcast != string_null)
\r
2127 CenterPrint2(te, Goal.non_team_broadcast, AP.netname);
\r
2130 if (Goal.netname_owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2132 sprint(te,AP.netname);
\r
2133 sprint(te,Goal.netname_owners_team_broadcast);
\r
2137 if (Goal.netname_non_team_broadcast != string_null)
\r
2139 sprint(te,AP.netname);
\r
2140 sprint(te,Goal.netname_non_team_broadcast);
\r
2145 if (IsAffectedBy(Goal, te, AP))
\r
2147 if (Goal.search_time != 0 && (Goal.goal_effects & 64))
\r
2149 if (APMeetsCriteria(Goal, te))
\r
2151 Apply_Results(Goal, te, AP, addb);
\r
2156 Apply_Results(Goal, te, AP, addb);
\r
2159 te = find(te, classname, "player");
\r
2161 if (Goal.classname != "item_tfgoal")
\r
2163 Goal.goal_state = 1;
\r
2165 if (Goal.goal_result & 4)
\r
2167 TeamFortress_TeamShowScores(1);
\r
2168 winners = TeamFortress_TeamGetWinner();
\r
2169 te = find(world, classname, "player");
\r
2172 te.takedamage = 0;
\r
2174 te.velocity = '0 0 0';
\r
2175 te.avelocity = '0 0 0';
\r
2176 te = find(te, classname, "player");
\r
2179 te.nextthink = time + 5;
\r
2180 te.think = execute_changelevel;
\r
2181 // te.think = changelevel; // Wazat -- may need fixing
\r
2186 DoGroupWork(Goal, AP);
\r
2187 DoGoalWork(Goal, AP);
\r
2188 DoTriggerWork(Goal, AP);
\r
2189 if (Goal.classname == "info_tfgoal")
\r
2191 SetupRespawn(Goal);
\r
2195 void() tfgoal_touch =
\r
2198 if (!(self.goal_activation & 1))
\r
2202 if (other.classname != "player")
\r
2206 if (other.is_dead == 1) // TEMP
\r
2210 if (self.goal_state == 1)
\r
2214 AttemptToActivate(self, other, self);
\r
2217 void() info_tfgoal_use =
\r
2219 AttemptToActivate(self, activator, self);
\r
2222 void() tfgoal_timer_tick =
\r
2224 if (self.goal_state != 3)
\r
2226 if (APMeetsCriteria(self, world))
\r
2228 DoResults(self, world, 1);
\r
2232 InactivateGoal(self);
\r
2233 self.think = tfgoal_timer_tick;
\r
2234 self.nextthink = time + self.search_time;
\r
2239 void() item_tfgoal_touch =
\r
2243 if (other.is_dead == 1) // TEMP
\r
2247 if (other.classname != "player")
\r
2251 if (other.health <= 0)
\r
2255 // for flag dropping
\r
2256 if ( (self.tent == other) && (time < self.option5) )
\r
2260 if (Activated(self, other))
\r
2262 tfgoalitem_GiveToPlayer(self, other, self);
\r
2263 self.goal_state = 1;
\r
2267 if (self.else_goal != 0)
\r
2269 te = Findgoal(self.else_goal);
\r
2272 AttemptToActivate(te, other, self);
\r
2278 void(entity Item, entity AP, entity Goal) tfgoalitem_GiveToPlayer =
\r
2282 if (Item.mdl != string_null)
\r
2284 setmodel(Item, string_null);
\r
2287 if (Item.goal_activation & 1)
\r
2289 AP.effects = AP.effects | 8;
\r
2291 if (Item.goal_activation & 2)
\r
2293 TeamFortress_SetSpeed(AP);
\r
2295 if (Item.goal_activation & 512)
\r
2297 Item.effects = Item.effects - (Item.effects | 8);
\r
2300 if (Item.items & 133701)
\r
2302 AP.items = AP.items | 262144;
\r
2303 AP.effects = AP.effects | 128;
\r
2305 newmis.owner = AP;
\r
2306 newmis.movetype = 4;
\r
2308 setsize(newmis, '0 0 0', '0 0 0');
\r
2309 newmis.angles = AP.angles;
\r
2310 newmis.nextthink = time + 0.5;
\r
2311 newmis.think = MoveFlag;
\r
2313 setmodel(newmis, Item.mdl);
\r
2314 setorigin(newmis, AP.origin);
\r
2317 if (Item.items & 131072)
\r
2319 AP.items = AP.items | 131072;
\r
2320 AP.effects = AP.effects | 64;
\r
2322 newmis.owner = AP;
\r
2323 newmis.movetype = 4;
\r
2325 setsize(newmis, '0 0 0', '0 0 0');
\r
2326 newmis.angles = AP.angles;
\r
2327 newmis.nextthink = time + 0.5;
\r
2328 newmis.think = MoveFlag;
\r
2330 setmodel(newmis, "progs/tf_flag.mdl");
\r
2331 setorigin(newmis, AP.origin);
\r
2333 if (Item.items & 262144)
\r
2335 AP.items = AP.items | 262144;
\r
2336 AP.effects = AP.effects | 128;
\r
2338 newmis.owner = AP;
\r
2339 newmis.movetype = 4;
\r
2341 setsize(newmis, '0 0 0', '0 0 0');
\r
2342 newmis.angles = AP.angles;
\r
2343 newmis.nextthink = time + 0.5;
\r
2344 newmis.think = MoveFlag;
\r
2346 setmodel(newmis, "progs/tf_flag.mdl");
\r
2347 setorigin(newmis, AP.origin);
\r
2352 if (Goal.goal_result & 8)
\r
2354 Item.goal_state = 1;
\r
2358 /* if (AP.playerclass == 8 && (Item.goal_result & 16))
\r
2360 AP.is_unabletospy = 1;
\r
2362 if (AP.class == 2 && (Item.goal_result & 16))
\r
2364 AP.is_unabletospy = 1;
\r
2366 DoResults(Item, AP, 1);
\r
2367 DoItemGroupWork(Item, AP);
\r
2370 void() ReturnItem =
\r
2372 self.enemy.goal_state = 2;
\r
2373 self.enemy.solid = 1;
\r
2374 self.enemy.movetype = 0;
\r
2375 self.enemy.touch = item_tfgoal_touch;
\r
2376 self.enemy.origin = self.enemy.oldorigin;
\r
2377 if (self.enemy.mdl != string_null)
\r
2379 setmodel(self.enemy, self.enemy.mdl);
\r
2381 setorigin(self.enemy, self.enemy.origin);
\r
2382 //sound(self.enemy,"items/itembk2.wav", 1, 1);
\r
2383 sound (self.enemy, 2, "items/itembk2.wav", 1, 1);
\r
2384 tfgoalitem_checkgoalreturn(self.enemy);
\r
2388 void (entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer =
\r
2391 local float lighton;
\r
2392 local float slowon;
\r
2393 local float key1on;
\r
2394 local float key2on;
\r
2395 local float spyoff;
\r
2397 local entity DelayReturn;
\r
2399 if ((Item == world))
\r
2401 objerror ("error: tfgoalitem_RemoveFromPlayer(): Item == world");
\r
2409 te = find (world, classname, "item_tfgoal");
\r
2412 if (((te.owner == AP) && (te != Item)))
\r
2414 if ((te.goal_activation & 1))
\r
2418 if ((te.goal_activation & 2))
\r
2422 if ((te.items & 131072))
\r
2426 if ((te.items & 262144))
\r
2430 if ((te.goal_result & 16))
\r
2435 te = find (te, classname, "item_tfgoal");
\r
2439 if ((AP.invincible_finished > (time + 3)))
\r
2445 if ((AP.super_damage_finished > (time + 3)))
\r
2453 AP.effects = (AP.effects - (AP.effects & 8));
\r
2454 AP.effects = (AP.effects - (AP.effects & 64));
\r
2455 AP.effects = (AP.effects - (AP.effects & 128));
\r
2457 if ((Item.goal_activation & 512))
\r
2459 Item.effects = (Item.effects | 8);
\r
2463 AP.is_unabletospy = 0;
\r
2467 AP.items = (AP.items - (AP.items & 131072));
\r
2471 AP.items = (AP.items - (AP.items & 262144));
\r
2473 te = find (world, classname, "player");
\r
2474 while ((te != world))
\r
2476 if (IsAffectedBy (Item, te, AP))
\r
2478 RemoveResults (Item, te);
\r
2480 te = find (te, classname, "player");
\r
2482 if (((method == 0) || (method == 2)))
\r
2484 te = find (world, classname, "player");
\r
2485 while ((te != world))
\r
2487 if ((te.team_no == Item.owned_by))
\r
2489 if ((Item.team_drop != string_null))
\r
2491 CenterPrint2 (te, "\n\n\n", Item.team_drop);
\r
2493 if ((Item.netname_team_drop != string_null))
\r
2495 sprint (te, AP.netname);
\r
2496 sprint (te, Item.netname_team_drop);
\r
2501 if ((Item.non_team_drop != string_null))
\r
2503 CenterPrint2 (te, "\n\n\n", Item.non_team_drop);
\r
2505 if ((Item.netname_non_team_drop != string_null))
\r
2507 sprint (te, AP.netname);
\r
2508 sprint (te, Item.netname_non_team_drop);
\r
2511 te = find (te, classname, "player");
\r
2513 if ((Item.goal_activation & 8))
\r
2515 DelayReturn = spawn ();
\r
2516 DelayReturn.enemy = Item;
\r
2517 if ((method == 0))
\r
2519 DelayReturn.weapon = 0;
\r
2523 DelayReturn.weapon = 1;
\r
2525 DelayReturn.think = ReturnItem;
\r
2526 DelayReturn.nextthink = (time + 0.5);
\r
2530 if ((Item.goal_activation & 4))
\r
2532 if (((method == 2) && (Item.goal_activation & 4096)))
\r
2534 tfgoalitem_drop (Item, 1, AP);
\r
2538 tfgoalitem_drop (Item, 0, AP);
\r
2543 Item.owner = world;
\r
2545 TeamFortress_SetSpeed (AP);
\r
2549 Item.owner = world;
\r
2550 Item.flags = (Item.flags - (Item.flags & 512));
\r
2551 setsize (Item, Item.goal_min, Item.goal_max);
\r
2552 TeamFortress_SetSpeed (AP);
\r
2559 if (Item.goal_activation & 16)
\r
2561 DelayReturn = spawn();
\r
2562 DelayReturn.enemy = Item;
\r
2563 DelayReturn.think = ReturnItem;
\r
2564 DelayReturn.nextthink = time + 0.5;
\r
2565 Item.owner = world;
\r
2566 TeamFortress_SetSpeed(AP);
\r
2570 Item.owner = world;
\r
2571 TeamFortress_SetSpeed(AP);
\r
2575 objerror ("Invalid method passed into tfgoalitem_RemoveFromPlayer\n");
\r
2578 // MTF's remove from player function
\r
2579 /*void(entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer =
\r
2582 local float lighton;
\r
2583 local float slowon;
\r
2584 local float key1on;
\r
2585 local float key2on;
\r
2586 local float spyoff;
\r
2588 local entity DelayReturn;
\r
2589 if (Item == world)
\r
2591 dprint("error: tfgoalitem_RemoveFromPlayer(): Item == world");
\r
2599 te = find(world, classname, "item_tfgoal");
\r
2602 if (te.owner == AP && te != Item)
\r
2604 if (te.goal_activation & 1)
\r
2608 if (te.goal_activation & 2)
\r
2612 if (te.items & 131072)
\r
2616 if (te.items & 262144)
\r
2620 if (te.goal_result & 16)
\r
2625 te = find(te, classname, "item_tfgoal");
\r
2629 if (AP.invincible_finished > time + 3)
\r
2636 AP.effects = AP.effects - (AP.effects & 8);
\r
2638 if (Item.goal_activation & 512)
\r
2640 Item.effects = Item.effects | 8;
\r
2644 AP.is_unabletospy = 0;
\r
2648 AP.items = AP.items - (AP.items & 131072);
\r
2652 AP.items = AP.items - (AP.items & 262144);
\r
2654 te = find(world, classname, "player");
\r
2655 while (te != world)
\r
2657 if (IsAffectedBy(Item, te, AP))
\r
2659 RemoveResults(Item, te);
\r
2661 te = find(te, classname, "player");
\r
2663 if ((method == 0) || (method == 2))
\r
2665 te = find(world, classname, "player");
\r
2666 while (te != world)
\r
2668 if (te.team_no == Item.owned_by)
\r
2670 if (Item.team_drop != string_null)
\r
2672 CenterPrint2(te, "\n\n\n", Item.team_drop);
\r
2674 if (Item.netname_team_drop != string_null)
\r
2676 sprint(te,AP.netname);
\r
2677 sprint(te,Item.netname_team_drop);
\r
2682 if (Item.non_team_drop != string_null)
\r
2684 CenterPrint2(te, "\n\n\n", Item.non_team_drop);
\r
2686 if (Item.netname_non_team_drop != string_null)
\r
2688 sprint(te,AP.netname);
\r
2689 sprint(te,Item.netname_non_team_drop);
\r
2692 te = find(te, classname, "player");
\r
2694 if (Item.goal_activation & 8)
\r
2696 DelayReturn = spawn();
\r
2697 DelayReturn.enemy = Item;
\r
2698 DelayReturn.think = ReturnItem;
\r
2699 DelayReturn.nextthink = time + 0.5;
\r
2703 if (Item.goal_activation & 4)
\r
2706 tfgoalitem_drop(Item);
\r
2710 Item.owner = world;
\r
2712 TeamFortress_SetSpeed(AP);
\r
2716 Item.owner = world;
\r
2717 TeamFortress_SetSpeed(AP);
\r
2722 if (Item.goal_activation & 16)
\r
2724 DelayReturn = spawn();
\r
2725 DelayReturn.enemy = Item;
\r
2726 DelayReturn.think = ReturnItem;
\r
2727 DelayReturn.nextthink = time + 0.5;
\r
2728 Item.owner = world;
\r
2729 TeamFortress_SetSpeed(AP);
\r
2733 Item.owner = world;
\r
2734 TeamFortress_SetSpeed(AP);
\r
2738 dprint("Invalid method passed into tfgoalitem_RemoveFromPlayer\n");
\r
2741 void() tfgoalitem_dropthink =
\r
2744 self.movetype = 10; //6;
\r
2745 if (self.pausetime != 0)
\r
2747 pos = pointcontents(self.origin);
\r
2750 self.nextthink = time + self.pausetime / 4;
\r
2756 self.nextthink = time + 5;
\r
2760 if (pos == -2 || pos == -6)
\r
2762 self.nextthink = time + 2;
\r
2766 self.nextthink = time + self.pausetime;
\r
2770 self.think = tfgoalitem_remove;
\r
2774 void(entity Item) tfgoalitem_drop =
\r
2776 Item.origin = Item.owner.origin - '0 0 8';
\r
2777 //Item.velocity_z = 400;
\r
2778 //Item.velocity_x = -50 + random() * 100;
\r
2779 //Item.velocity_y = -50 + random() * 100;
\r
2780 Item.velocity_z = 1;
\r
2781 Item.velocity_x = 0;
\r
2782 Item.velocity_y = 0;
\r
2783 Item.goal_state = 2;
\r
2784 Item.movetype = 6;
\r
2786 Item.touch = item_tfgoal_touch;
\r
2787 setorigin(Item, Item.origin - '0 0 16');
\r
2788 setsize(Item, '-16 -16 0', '16 16 56');
\r
2789 if (Item.mdl != string_null)
\r
2791 setmodel(Item, Item.mdl);
\r
2793 Item.nextthink = time + 5;
\r
2794 Item.think = tfgoalitem_dropthink;
\r
2797 void() tfgoalitem_remove =
\r
2800 if (self.goal_state == 1)
\r
2804 if (self.goal_activation & 32)
\r
2807 self.touch = item_tfgoal_touch;
\r
2808 self.origin = self.oldorigin;
\r
2809 if (self.mdl != string_null)
\r
2811 setmodel(self, self.mdl);
\r
2813 setorigin(self, self.origin);
\r
2814 //sound(self,"items/itembk2.wav", 1, 1);
\r
2815 tfgoalitem_checkgoalreturn(self);
\r
2816 if (self.noise3 != string_null || self.noise4 != string_null)
\r
2818 te = find(world, classname, "player");
\r
2821 if (te.team_no == self.owned_by)
\r
2823 CenterPrint2(te, "\n\n\n", self.noise3);
\r
2827 CenterPrint2(te, "\n\n\n", self.noise4);
\r
2829 te = find(te, classname, "player");
\r
2837 void(entity Item) tfgoalitem_checkgoalreturn =
\r
2841 if (Item.impulse != 0)
\r
2843 te = Findgoal(Item.impulse);
\r
2846 te = Findgoal(Item.impulse);
\r
2849 AttemptToActivate(te, world, Item);
\r
2855 void(entity Goal, entity Player, entity Item) DisplayItemStatus =
\r
2857 if (Item.goal_state == 1)
\r
2859 if (Player.team_no == Item.owned_by)
\r
2861 sprint(Player,Goal.team_str_carried);
\r
2865 sprint(Player,Goal.non_team_str_carried);
\r
2867 sprint(Player," ");
\r
2868 if (Player == Item.owner)
\r
2870 sprint(Player," You");
\r
2874 sprint(Player,Item.owner.netname);
\r
2876 sprint(Player,".");
\r
2880 if (Item.origin != Item.oldorigin)
\r
2882 if (Player.team_no == Item.owned_by)
\r
2884 sprint(Player,Goal.team_str_moved);
\r
2888 sprint(Player,Goal.non_team_str_moved);
\r
2893 if (Player.team_no == Item.owned_by)
\r
2895 sprint(Player,Goal.team_str_home);
\r
2899 sprint(Player,Goal.non_team_str_home);
\r
2903 sprint(Player,"\n");
\r
2906 void() info_player_team1 =
\r
2909 self.classname = "info_player_teamspawn";
\r
2911 self.goal_effects = 1;
\r
2912 self.team_str_home = "ts2";
\r
2915 void() info_player_team2 =
\r
2918 self.classname = "info_player_teamspawn";
\r
2920 self.goal_effects = 1;
\r
2921 self.team_str_home = "ts1";
\r
2924 void() item_flag_team2 =
\r
2926 team2maxplayers = 4; //TEMP
\r
2929 precache_model("progs/w_s_key.mdl");
\r
2930 precache_sound("ogre/ogwake.wav");
\r
2931 precache_sound("boss2/pop2.wav");
\r
2932 self.classname = "item_tfgoal";
\r
2933 self.netname = "Team 1 Flag";
\r
2934 self.broadcast = " ÇÏÔ the enemy team's flag!\n";
\r
2935 self.deathtype = "You've got the enemy flag!\n";
\r
2936 self.noise = "ogre/ogwake.wav";
\r
2937 self.mdl = "progs/tf_flag.mdl";
\r
2939 setmodel(self, self.mdl);
\r
2941 self.goal_activation = 1 | 4 | 128 | 32 | 16 | 512;
\r
2942 self.goal_effects = 1;
\r
2943 self.pausetime = 128;
\r
2944 setsize(self, '-16 -16 -24', '16 16 32');
\r
2945 self.touch = item_tfgoal_touch;
\r
2946 self.goal_state = 2;
\r
2948 setorigin(self, self.origin);
\r
2949 self.nextthink = time + 0.2;
\r
2950 self.think = TF_PlaceItem;
\r
2952 dp.origin = self.origin;
\r
2953 dp.classname = "info_tfgoal";
\r
2954 dp.goal_activation = 1;
\r
2956 dp.items_allowed = 2;
\r
2958 dp.goal_effects = 3;
\r
2959 dp.broadcast = " ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
2960 dp.message = "You ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
2961 dp.noise = "boss2/pop2.wav";
\r
2962 dp.goal_result = 2;
\r
2963 dp.activate_goal_no = 5;
\r
2968 dp.goal_state = 2;
\r
2969 setsize(dp, '-16 -16 -24', '16 16 32');
\r
2970 dp.nextthink = time + 0.2;
\r
2971 dp.think = TF_PlaceGoal;
\r
2973 dp.origin = dp.origin;
\r
2974 dp.classname = "info_tfgoal";
\r
2975 dp.goal_effects = 1;
\r
2977 dp.goal_activation = 0;
\r
2980 dp.goal_state = 2;
\r
2981 setsize(dp, '-16 -16 -24', '16 16 32');
\r
2982 dp.nextthink = time + 0.2;
\r
2983 dp.think = TF_PlaceGoal;
\r
2986 void() item_flag_team1 =
\r
2988 team1maxplayers = 4; //TEMP
\r
2991 precache_model("progs/tf_flag.mdl");
\r
2992 precache_sound("ogre/ogwake.wav");
\r
2993 precache_sound("boss2/pop2.wav");
\r
2994 self.classname = "item_tfgoal";
\r
2995 self.netname = "Team 2 Flag";
\r
2996 self.broadcast = " ÇÏÔ the enemy team's flag!\n";
\r
2997 self.deathtype = "You've got the enemy flag!\n";
\r
2998 self.noise = "ogre/ogwake.wav";
\r
2999 self.mdl = "progs/tf_flag.mdl";
\r
3000 setmodel(self, self.mdl);
\r
3003 self.goal_activation = 1 | 4 | 128 | 32 | 16 | 512;
\r
3004 self.goal_effects = 1;
\r
3005 self.pausetime = 128;
\r
3006 setsize(self, '-16 -16 -24', '16 16 32');
\r
3007 self.touch = item_tfgoal_touch;
\r
3008 self.goal_state = 2;
\r
3010 setorigin(self, self.origin);
\r
3011 self.nextthink = time + 0.2;
\r
3012 self.think = TF_PlaceItem;
\r
3014 dp.origin = self.origin;
\r
3015 dp.classname = "info_tfgoal";
\r
3016 dp.goal_activation = 1;
\r
3018 dp.items_allowed = 1;
\r
3020 dp.goal_effects = 3;
\r
3021 dp.broadcast = " ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3022 dp.message = "You ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3023 dp.noise = "boss2/pop2.wav";
\r
3024 dp.goal_result = 2;
\r
3025 dp.activate_goal_no = 6;
\r
3030 dp.goal_state = 2;
\r
3031 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3032 dp.nextthink = time + 0.2;
\r
3033 dp.think = TF_PlaceGoal;
\r
3035 dp.origin = dp.origin;
\r
3036 dp.classname = "info_tfgoal";
\r
3037 dp.goal_effects = 1;
\r
3039 dp.goal_activation = 0;
\r
3042 dp.goal_state = 2;
\r
3043 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3044 dp.nextthink = time + 0.2;
\r
3045 dp.think = TF_PlaceGoal;
\r
3048 void() CTF_FlagCheck =
\r
3051 local float flagcount;
\r
3054 te = find(world, classname, "item_tfgoal");
\r
3055 while (te != world)
\r
3057 if (te.goal_no == 1)
\r
3059 pos = pointcontents(te.origin);
\r
3060 if (pos == -2 || pos == -6)
\r
3062 dprint("*****BUG*****\nFlag(s) outside world.\nPlease report this.\n");
\r
3063 te.nextthink = time + 0.2;
\r
3064 te.think = tfgoalitem_remove;
\r
3066 flagcount = flagcount + 1;
\r
3070 if (te.goal_no == 2)
\r
3072 pos = pointcontents(te.origin);
\r
3073 if (pos == -2 || pos == -6)
\r
3075 dprint("*****BUG*****\nFlag(s) outside world.\nPlease report this.\n");
\r
3076 te.nextthink = time + 0.2;
\r
3077 te.think = tfgoalitem_remove;
\r
3079 flagcount = flagcount + 1;
\r
3082 te = find(te, classname, "item_tfgoal");
\r
3084 if (flagcount != 2)
\r
3086 dprint("*****BUG*****\nFlag(s) missing.\nPlease report this.\n");
\r
3088 self.nextthink = time + 30;
\r