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
76 // Temp defs that need functions
\r
80 .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
82 .vector goal_min, goal_max;
\r
88 void(float tno, float scoretoadd) TeamFortress_TeamIncreaseScore;
\r
89 void(float all) TeamFortress_TeamShowScores;
\r
90 float() TeamFortress_TeamGetWinner;
\r
92 // Functions to handle entity placement when spawned
\r
93 void() TF_PlaceItem;
\r
94 void() TF_StartItem;
\r
95 void() TF_PlaceGoal;
\r
96 void() TF_StartGoal;
\r
98 // Spawn functions for all Map Entities
\r
99 float() CheckExistence;
\r
100 void() info_tfdetect;
\r
101 void() info_player_teamspawn;
\r
102 void() info_tfgoal;
\r
103 void() info_tfgoal_timer;
\r
104 void() item_tfgoal;
\r
106 // AutoDetection Function
\r
107 void(entity AD) ParseTFDetect;
\r
109 // Generic Functions
\r
110 entity(float ino) Finditem;
\r
111 entity(float gno) Findgoal;
\r
112 entity(float gno) Findteamspawn;
\r
113 void(entity Goal) InactivateGoal;
\r
114 void(entity Goal) RestoreGoal;
\r
115 void(entity Goal) RemoveGoal;
\r
116 float(entity Goal, entity Player, entity AP) IsAffectedBy;
\r
117 //void(entity Goal, entity Player, entity AP, float addb) Apply_Results;
\r
118 //float(entity Goal, entity AP) APMeetsCriteria;
\r
119 void(entity Goal) SetupRespawn;
\r
121 void(entity Goal, entity AP) DoGoalWork;
\r
122 void(entity Goal, entity AP) DoGroupWork;
\r
123 void(entity Item, entity AP) DoItemGroupWork;
\r
124 void(entity Goal, entity AP) DoTriggerWork;
\r
125 void(entity Goal, entity AP, float addb) DoResults;
\r
126 //void(entity Goal, entity Player) RemoveResults;
\r
129 void() tfgoal_touch;
\r
130 void() info_tfgoal_use;
\r
132 // Timer Goal Functions
\r
133 void() tfgoal_timer_tick;
\r
136 void() item_tfgoal_touch;
\r
137 void(entity Item, entity AP, entity Goal) tfgoalitem_GiveToPlayer;
\r
138 void(entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer;
\r
139 void() tfgoalitem_remove;
\r
140 void(entity Item) tfgoalitem_drop;
\r
141 void(entity Item) tfgoalitem_checkgoalreturn;
\r
143 void(entity Goal, entity Player, entity Item) DisplayItemStatus;
\r
145 // CTF Support Functions
\r
146 void() CTF_FlagCheck;
\r
149 void () TF_PlaceItem;
\r
150 void () TF_StartItem;
\r
151 void () TF_PlaceGoal;
\r
152 void () TF_StartGoal;
\r
153 //void () TF_PlaceCamp;
\r
154 //void () TF_StartCamp;
\r
155 void () info_tfdetect;
\r
156 //void () info_tfnocamp;
\r
157 void () info_player_teamspawn;
\r
158 void () info_tfgoal;
\r
159 void () info_tfgoal_timer;
\r
160 void () item_tfgoal;
\r
161 entity (float gno) Findgoal;
\r
162 entity (float gno) Findteamspawn;
\r
163 void (entity Goal) InactivateGoal;
\r
164 void (entity Goal) RestoreGoal;
\r
165 void (entity Goal) RemoveGoal;
\r
166 float (entity Goal,entity Player,entity AP) IsAffectedBy;
\r
167 void (entity Goal,entity Player,entity AP,float addb) Apply_Results;
\r
168 float (entity Goal,entity AP) APMeetsCriteria;
\r
169 void (entity Goal) SetupRespawn;
\r
171 void (entity Item,entity AP) DoItemGroupWork;
\r
172 void (entity Goal,entity AP) DoTriggerWork;
\r
173 void (entity Goal,entity Player) RemoveResults;
\r
174 void () info_tfgoal_use;
\r
175 void () tfgoal_timer_tick;
\r
176 void () item_tfgoal_touch;
\r
177 void () tfgoalitem_remove;
\r
178 void (entity Item) tfgoalitem_drop;
\r
179 void (entity Item) tfgoalitem_checkgoalreturn;
\r
180 void () ReturnItem;
\r
187 if ( (prematch) )// && (self.owner.items & 131072) )
\r
189 T_Damage (self.owner, self.owner, self.owner, 500);
\r
192 makevectors(self.owner.v_angle);
\r
193 setorigin(self, self.owner.origin - v_forward * 25 + '0 0 20');
\r
194 self.angles_x = self.owner.angles_z;
\r
195 self.angles_y = self.owner.angles_y + 90;
\r
196 self.angles_z = 0 - self.owner.angles_x;
\r
197 self.nextthink = time + 0.010000;
\r
198 self.think = MoveFlag;
\r
199 if (self.owner.deadflag)
\r
202 //self.movetype = 10;
\r
203 //self.velocity = '0 0 100';
\r
205 self.owner.effects = self.owner.effects - (self.owner.effects & 128);
\r
206 self.owner.effects = self.owner.effects - (self.owner.effects & 64);
\r
209 if (!(self.owner.items & 131072) && !(self.owner.items & 262144))
\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
217 void (entity Goal) UpdateAbbreviations =
\r
221 if ((Goal.has_abbreviated == 0))
\r
223 if (((Goal.g_a != 0) && (Goal.goal_activation == 0)))
\r
225 Goal.goal_activation = Goal.g_a;
\r
227 if (((Goal.g_e != 0) && (Goal.goal_effects == 0)))
\r
229 Goal.goal_effects = Goal.g_e;
\r
231 if (((Goal.g_e != 0) && (Goal.goal_effects == 0)))
\r
233 Goal.goal_effects = Goal.g_e;
\r
235 if (((Goal.h_i_g != 0) && (Goal.has_item_from_group == 0)))
\r
237 Goal.has_item_from_group = Goal.h_i_g;
\r
239 if (((Goal.hn_i_g != 0) && (Goal.hasnt_item_from_group == 0)))
\r
241 Goal.hasnt_item_from_group = Goal.hn_i_g;
\r
243 if (((Goal.r_i_g != 0) && (Goal.remove_item_group == 0)))
\r
245 Goal.remove_item_group = Goal.r_i_g;
\r
247 if (((Goal.a_s != 0) && (Goal.ammo_shells == 0)))
\r
249 Goal.ammo_shells = Goal.a_s;
\r
251 if (((Goal.a_n != 0) && (Goal.ammo_nails == 0)))
\r
253 Goal.ammo_nails = Goal.a_n;
\r
255 if (((Goal.a_r != 0) && (Goal.ammo_rockets == 0)))
\r
257 Goal.ammo_rockets = Goal.a_r;
\r
259 if (((Goal.a_c != 0) && (Goal.ammo_cells == 0)))
\r
261 Goal.ammo_cells = Goal.a_c;
\r
263 if (((Goal.rv_s_h != 0) && (Goal.remove_spawngroup == 0)))
\r
265 Goal.remove_spawngroup = Goal.rv_s_h;
\r
267 if (((Goal.rs_s_h != 0) && (Goal.restore_spawngroup == 0)))
\r
269 Goal.restore_spawngroup = Goal.rs_s_h;
\r
271 if (((Goal.rv_gr != 0) && (Goal.remove_group_no == 0)))
\r
273 Goal.remove_group_no = Goal.rv_gr;
\r
275 if (((Goal.rs_gr != 0) && (Goal.restore_group_no == 0)))
\r
277 Goal.restore_group_no = Goal.rs_gr;
\r
279 if (((Goal.rv_g != 0) && (Goal.remove_goal_no == 0)))
\r
281 Goal.remove_goal_no = Goal.rv_g;
\r
283 if (((Goal.rs_g != 0) && (Goal.restore_goal_no == 0)))
\r
285 Goal.restore_goal_no = Goal.rs_g;
\r
287 if ((Goal.t_s_h != string_null))
\r
289 Goal.team_str_home = Goal.t_s_h;
\r
291 if ((Goal.t_s_m != string_null))
\r
293 Goal.team_str_moved = Goal.t_s_m;
\r
295 if ((Goal.t_s_c != string_null))
\r
297 Goal.team_str_carried = Goal.t_s_c;
\r
299 if ((Goal.n_s_h != string_null))
\r
301 Goal.non_team_str_home = Goal.n_s_h;
\r
303 if ((Goal.n_s_m != string_null))
\r
305 Goal.non_team_str_moved = Goal.n_s_m;
\r
307 if ((Goal.n_s_c != string_null))
\r
309 Goal.non_team_str_carried = Goal.n_s_c;
\r
311 if ((Goal.b_b != string_null))
\r
313 Goal.broadcast = Goal.b_b;
\r
315 if ((Goal.b_t != string_null))
\r
317 Goal.team_broadcast = Goal.b_t;
\r
319 if ((Goal.b_n != string_null))
\r
321 Goal.non_team_broadcast = Goal.b_n;
\r
323 if ((Goal.b_o != string_null))
\r
325 Goal.owners_team_broadcast = Goal.b_o;
\r
327 if ((Goal.n_b != string_null))
\r
329 Goal.netname_broadcast = Goal.n_b;
\r
331 if ((Goal.n_t != string_null))
\r
333 Goal.netname_team_broadcast = Goal.n_t;
\r
335 if ((Goal.n_n != string_null))
\r
337 Goal.netname_non_team_broadcast = Goal.n_n;
\r
339 if ((Goal.n_o != string_null))
\r
341 Goal.netname_owners_team_broadcast = Goal.n_o;
\r
343 if ((Goal.d_t != string_null))
\r
345 Goal.team_drop = Goal.d_t;
\r
347 if ((Goal.d_n != string_null))
\r
349 Goal.non_team_drop = Goal.d_n;
\r
351 if ((Goal.d_n_t != string_null))
\r
353 Goal.netname_team_drop = Goal.d_n_t;
\r
355 if ((Goal.d_n_n != string_null))
\r
357 Goal.netname_non_team_drop = Goal.d_n_n;
\r
359 if ((flagem_checked == 0))
\r
361 if ((cvar ("temp1") & 4096))
\r
363 toggleflags = (toggleflags | 4096);
\r
365 if ((cvar ("temp1") & 8192))
\r
367 toggleflags = (toggleflags | 8192);
\r
369 flagem_checked = 1;
\r
371 if (((toggleflags & 4096) && !(toggleflags & 8192)))
\r
373 if ((((Goal.mdl == "progs/b_s_key.mdl") || (Goal.mdl == "progs/m_s_key.mdl")) || (Goal.mdl == "progs/w_s_key.mdl")))
\r
375 Goal.mdl = "progs/tf_flag.mdl";
\r
380 if ((((Goal.mdl == "progs/b_g_key.mdl") || (Goal.mdl == "progs/m_g_key.mdl")) || (Goal.mdl == "progs/w_g_key.mdl")))
\r
382 Goal.mdl = "progs/tf_flag.mdl";
\r
387 if ((toggleflags & 8192))
\r
389 if ((((Goal.mdl == "progs/b_s_key.mdl") || (Goal.mdl == "progs/m_s_key.mdl")) || (Goal.mdl == "progs/w_s_key.mdl")))
\r
391 Goal.mdl = "progs/tf_stan.mdl";
\r
396 if ((((Goal.mdl == "progs/b_g_key.mdl") || (Goal.mdl == "progs/m_g_key.mdl")) || (Goal.mdl == "progs/w_g_key.mdl")))
\r
398 Goal.mdl = "progs/tf_stan.mdl";
\r
403 if ((Goal.mdl == "progs/tf_flag.mdl"))
\r
405 Goal.mdl = "progs/tf_stan.mdl";
\r
410 Goal.has_abbreviated = 1;
\r
414 void () TF_PlaceItem =
\r
416 local float _l_10795;
\r
418 self.flags = 256.000000;
\r
419 self.movetype = 0.000000;
\r
420 self.velocity = '0.000000 0.000000 0.000000';
\r
421 self.oldorigin = self.origin;
\r
422 if ((self.goal_activation & 512.000000))
\r
424 self.effects = (self.effects | 8.000000);
\r
426 if ((item_list_bit == 0.000000))
\r
428 item_list_bit = 1.000000;
\r
430 self.item_list = item_list_bit;
\r
431 item_list_bit = item_list_bit * 2.000000;
\r
434 void () TF_StartItem =
\r
437 UpdateAbbreviations (self);
\r
438 self.nextthink = (time + 0.200000);
\r
439 self.think = TF_PlaceItem;
\r
440 if ((self.goal_state == 3.000000))
\r
446 void () TF_PlaceGoal =
\r
448 local float _l_10808;
\r
450 if ((self.classname != "info_tfgoal_timer"))
\r
452 if ((self.goal_activation & 1.000000))
\r
454 self.touch = tfgoal_touch;
\r
459 self.think = tfgoal_timer_tick;
\r
460 self.nextthink = (time + self.search_time);
\r
461 self.classname = "info_tfgoal";
\r
463 self.flags = 256.000000;
\r
464 self.movetype = 0.000000;
\r
465 self.velocity = '0.000000 0.000000 0.000000';
\r
466 self.oldorigin = self.origin;
\r
469 void () TF_StartGoal =
\r
472 UpdateAbbreviations (self);
\r
473 self.nextthink = (time + 0.200000);
\r
474 self.think = TF_PlaceGoal;
\r
475 self.use = info_tfgoal_use;
\r
476 if ((self.goal_state == 3.000000))
\r
482 float() CheckExistence =
\r
485 UpdateAbbreviations (self);
\r
486 if ((self.ex_skill_min && (skill <= self.ex_skill_min)))
\r
492 if ((self.ex_skill_max && (skill >= self.ex_skill_max)))
\r
500 /* // ORIG NETQUAKETF INFO_TFDETECT
\r
501 void () info_tfdetect =
\r
503 UpdateAbbreviations (self);
\r
507 /*void () info_tfdetect =
\r
512 UpdateAbbreviations (self);
\r
515 te = find (world,classname,"countdown");
\r
521 st = infokey (world,"time"); // Unfortunately DP Engine doesnt support this (qw funct)
\r
527 newmis.classname = "countdown";
\r
528 newmis.no_grenades_1 = 0;
\r
529 st = infokey (world,"timelimit");
\r
530 newmis.health = stof(st);
\r
531 newmis.think = review_timeleft;
\r
532 newmis.nextthink = (time + 1);
\r
535 // MESSAGE DISP CODE
\r
536 if (haltloop1 != 1)
\r
538 local string msg1timer;
\r
540 msg1timer = infokey (world, "svmsg1");
\r
541 msg1time = stof(msg1timer);
\r
545 display_message ();
\r
550 if (haltloop2 != 1)
\r
552 local string msg2timer;
\r
554 msg2timer = infokey (world, "svmsg2");
\r
555 msg2time = stof(msg2timer);
\r
559 pre_messagetimer2 ();
\r
564 if (haltloop3 != 1)
\r
566 local string msg3timer;
\r
568 msg3timer = infokey (world, "svmsg3");
\r
569 msg3time = stof(msg3timer);
\r
573 pre_messagetimer3 ();
\r
577 if (quotestart != 1) {
\r
581 // Auto Level-change fix
\r
584 /* Gold. this is the old info_tfdetect... new one is above*/
\r
585 void() info_tfdetect =
\r
587 UpdateAbbreviations(self);
\r
588 /*gold. next 6 lines are part of plexi's code for the "timeleft" command.
\r
590 newmis.classname = "countdown";
\r
591 newmis.netname = "countdown";
\r
592 newmis.no_grenades_1 = 0;
\r
593 newmis.think = review_timeleft;
\r
594 newmis.nextthink = (time + 1);*/
\r
597 void() info_player_teamspawn =
\r
600 if (CheckExistence() == 0)
\r
605 if (number_of_teams < self.team_no)
\r
607 number_of_teams = self.team_no;
\r
609 if (self.team_no <= 0)
\r
611 dprint("no team_no associated with info_player_teamspawn\n");
\r
614 if (self.items != 0)
\r
616 te = Finditem(self.items);
\r
619 dprint("info_player_teamspawn specifies a GoalItem that does not exist\n");
\r
623 if (self.team_no == 1)
\r
625 self.team_str_home = "ts1";
\r
629 if (self.team_no == 2)
\r
631 self.team_str_home = "ts2";
\r
635 if (self.team_no == 3)
\r
637 self.team_str_home = "ts3";
\r
641 if (self.team_no == 4)
\r
643 self.team_str_home = "ts4";
\r
652 self.classname = "info_player_teamspawn";
\r
653 info_player_teamspawn();
\r
656 void() info_tfgoal =
\r
658 if (CheckExistence() == 0)
\r
665 precache_model(self.mdl);
\r
666 precache_model2(self.mdl);
\r
667 setmodel(self, self.mdl);
\r
671 precache_sound(self.noise);
\r
672 precache_sound2(self.noise);
\r
676 if (self.mdl == "progs/backpack.mdl")
\r
678 precache_sound("items/backpack.wav");
\r
679 precache_sound2("items/backpack.wav");
\r
680 self.noise = "items/backpack.wav";
\r
683 precache_sound("items/protect.wav");
\r
684 precache_sound("items/protect2.wav");
\r
685 precache_sound("items/protect3.wav");
\r
686 precache_sound("items/suit.wav");
\r
687 precache_sound("items/suit2.wav");
\r
688 precache_sound("items/inv1.wav");
\r
689 precache_sound("items/inv2.wav");
\r
690 precache_sound("items/inv3.wav");
\r
691 precache_sound("items/damage.wav");
\r
692 precache_sound("items/damage2.wav");
\r
693 precache_sound("items/damage3.wav");
\r
695 if (self.goal_state == 0)
\r
697 self.goal_state = 2;
\r
699 if (self.goal_min != '0 0 0')
\r
701 setsize(self, self.goal_min, self.goal_max);
\r
705 setsize(self, '-16 -16 -24', '16 16 32');
\r
712 self.classname = "info_tfgoal";
\r
716 void() info_tfgoal_timer =
\r
718 if (CheckExistence() == 0)
\r
725 precache_model(self.mdl);
\r
726 precache_model2(self.mdl);
\r
727 setmodel(self, self.mdl);
\r
731 precache_sound(self.noise);
\r
732 precache_sound2(self.noise);
\r
734 if (self.search_time <= 0)
\r
736 dprint("Timer Goal created with no specified time.\n");
\r
740 if (self.goal_state == 0)
\r
742 self.goal_state = 2;
\r
744 setsize(self, '-16 -16 -24', '16 16 32');
\r
750 self.classname = "info_tfgoal_timer";
\r
751 info_tfgoal_timer();
\r
754 void() item_tfgoal =
\r
756 if (CheckExistence() == 0)
\r
763 precache_model(self.mdl);
\r
764 precache_model2(self.mdl);
\r
765 setmodel(self, self.mdl);
\r
770 setmodel(self, "");
\r
772 precache_sound2("items/itembk2.wav");
\r
775 precache_sound(self.noise);
\r
776 precache_sound2(self.noise);
\r
778 self.touch = item_tfgoal_touch;
\r
779 if (self.goal_state == 0)
\r
781 self.goal_state = 2;
\r
784 setorigin(self, self.origin);
\r
785 if (!(self.netname))
\r
787 self.netname = "goalitem";
\r
789 if (self.pausetime <= 0)
\r
791 self.pausetime = 60;
\r
793 if (self.delay != 0 && self.pausetime == 0)
\r
795 self.pausetime = self.delay;
\r
797 setsize(self, '-16 -16 -24', '16 16 32');
\r
801 void (entity AD) ParseTFDetect =
\r
803 if ((AD.team_broadcast != string_null))
\r
805 team_menu_string = AD.team_broadcast;
\r
807 localcmd (AD.message);
\r
808 cvar_set ("sv_maxspeed", "500");
\r
809 team1lives = AD.ammo_shells;
\r
810 team2lives = AD.ammo_nails;
\r
811 team3lives = AD.ammo_rockets;
\r
812 team4lives = AD.ammo_cells;
\r
813 if ((team1lives == 0))
\r
817 if ((team2lives == 0))
\r
821 if ((team3lives == 0))
\r
825 if ((team4lives == 0))
\r
829 /*if ((AD.hook_out == 1)) // Hook always allowed, right?
\r
833 team1maxplayers = AD.ammo_medikit;
\r
834 team2maxplayers = AD.ammo_detpack;
\r
835 team3maxplayers = AD.maxammo_medikit;
\r
836 team4maxplayers = AD.maxammo_detpack;
\r
837 if ((team1maxplayers == 0))
\r
839 team1maxplayers = 100;
\r
841 if ((team2maxplayers == 0))
\r
843 team2maxplayers = 100;
\r
845 if ((team3maxplayers == 0))
\r
847 team3maxplayers = 100;
\r
849 if ((team4maxplayers == 0))
\r
851 team4maxplayers = 100;
\r
853 illegalclasses = AD.playerclass;
\r
854 // illegalclasses = AD.class;
\r
855 illegalclasses1 = AD.maxammo_shells;
\r
856 illegalclasses2 = AD.maxammo_nails;
\r
857 illegalclasses3 = AD.maxammo_rockets;
\r
858 illegalclasses4 = AD.maxammo_cells;
\r
860 if ((illegalclasses1 == -1))
\r
862 illegalclasses1 = 0;
\r
863 civilianteams = (civilianteams | 1);
\r
865 if ((illegalclasses2 == -1))
\r
867 illegalclasses2 = 0;
\r
868 civilianteams = (civilianteams | 2);
\r
870 if ((illegalclasses3 == -1))
\r
872 illegalclasses3 = 0;
\r
873 civilianteams = (civilianteams | 4);
\r
875 if ((illegalclasses4 == -1))
\r
877 illegalclasses4 = 0;
\r
878 civilianteams = (civilianteams | 8);
\r
882 entity(float ino) Finditem =
\r
886 tg = find(world, classname, "item_tfgoal");
\r
889 if (tg.goal_no == ino)
\r
893 tg = find(tg, classname, "item_tfgoal");
\r
895 dprint("Could not find an item with a goal_no of ");
\r
902 /*entity(float gno) Findgoal = // moved to tffunctions
\r
906 tg = find(world, classname, "info_tfgoal");
\r
909 if (tg.goal_no == gno)
\r
913 tg = find(tg, classname, "info_tfgoal");
\r
915 dprint("Could not find a goal with a goal_no of ");
\r
921 entity(float gno) Findteamspawn =
\r
925 tg = find(world, classname, "info_player_teamspawn");
\r
928 if (tg.goal_no == gno)
\r
932 tg = find(tg, classname, "info_player_teamspawn");
\r
934 dprint("Could not find a Teamspawn with a goal_no of ");
\r
940 void(entity Goal) InactivateGoal =
\r
942 if (Goal.goal_state == 1)
\r
944 if (Goal.search_time == 0)
\r
948 Goal.goal_state = 2;
\r
949 if (Goal.mdl != string_null)
\r
951 setmodel(Goal, Goal.mdl);
\r
956 void(entity Goal) RestoreGoal =
\r
958 if (Goal.goal_state == 3)
\r
960 if (Goal.search_time == 0)
\r
966 Goal.nextthink = time + Goal.search_time;
\r
968 Goal.goal_state = 2;
\r
969 if (Goal.mdl != string_null)
\r
971 setmodel(Goal, Goal.mdl);
\r
976 void(entity Goal) RemoveGoal =
\r
979 Goal.goal_state = 3;
\r
980 if (Goal.mdl != string_null)
\r
982 setmodel(Goal, string_null);
\r
986 float(entity Goal, entity Player, entity AP) IsAffectedBy =
\r
989 //if (Player.playerclass == 0)
\r
990 if (Player.class == 0)
\r
994 if (Goal.goal_effects & 32)
\r
996 genv = pointcontents(Goal.origin);
\r
997 if (pointcontents(Player.origin) != genv)
\r
1002 if (Goal.t_length != 0)
\r
1004 if (vlen(Goal.origin - Player.origin) <= Goal.t_length)
\r
1006 if (Goal.goal_effects & 16)
\r
1008 traceline(Goal.origin, Player.origin, 1, Goal);
\r
1009 if (trace_fraction == 1)
\r
1020 if (Goal.classname != "info_tfgoal_timer")
\r
1022 if (Goal.goal_effects & 1 && Player == AP)
\r
1026 if (Goal.goal_effects & 2 && AP.team_no == Player.team_no)
\r
1030 if (Goal.goal_effects & 4 && AP.team_no != Player.team_no)
\r
1034 if (Goal.goal_effects & 8 && Player != AP)
\r
1039 if (Goal.maxammo_shells != 0 && Player.team_no == Goal.maxammo_shells)
\r
1043 if (Goal.maxammo_nails != 0 && Player.team_no != Goal.maxammo_shells)
\r
1050 void(entity Goal, entity Player, entity AP, float addb) Apply_Results =
\r
1052 local entity oldself;
\r
1054 local entity oldte;
\r
1058 stuffcmd(Player, "bf\n");
\r
1059 if (Goal.classname == "item_tfgoal")
\r
1061 Player.item_list = Player.item_list | Goal.item_list;
\r
1065 if (Goal.count != 0)
\r
1067 if (Player.team_no > 0)
\r
1069 TeamFortress_TeamIncreaseScore(Player.team_no, Goal.count);
\r
1070 TeamFortress_TeamShowScores(2);
\r
1076 if (Player.health > 0)
\r
1078 if (Goal.health > 0)
\r
1080 T_Heal(Player, Goal.health, 0);
\r
1082 if (Goal.health < 0)
\r
1084 if (0 - Player.health > Goal.health)
\r
1086 Player.armorvalue = 0;
\r
1087 T_Damage(Player, Goal, Goal, Player.health + 1);
\r
1091 oa = Player.armorvalue;
\r
1092 Player.armorvalue = 0;
\r
1093 T_Damage(Player, Goal, Goal, 0 - Goal.health);
\r
1094 Player.armorvalue = oa;
\r
1098 if (Player.health > 0)
\r
1100 if (Goal.armortype)
\r
1103 // Player.armortype = Goal.armortype; // Armor type needs to be tweaked in this game
\r
1105 Player.armorvalue = Player.armorvalue + Goal.armorvalue;
\r
1106 if (Goal.armorclass)
\r
1108 Player.armorclass = Goal.armorclass;
\r
1110 if (Goal.gravity > 0)
\r
1112 Player.gravity = Goal.gravity;
\r
1114 Player.ammo_shells = Player.ammo_shells + Goal.ammo_shells;
\r
1115 Player.ammo_nails = Player.ammo_nails + Goal.ammo_nails;
\r
1116 Player.ammo_rockets = Player.ammo_rockets + Goal.ammo_rockets;
\r
1117 Player.ammo_cells = Player.ammo_cells + Goal.ammo_cells;
\r
1118 Player.ammo_medikit = Player.ammo_medikit + Goal.ammo_medikit;
\r
1119 Player.ammo_detpack = Player.ammo_detpack + Goal.ammo_detpack;
\r
1120 Player.no_grenades_1 = Player.no_grenades_1 + Goal.no_grenades_1;
\r
1121 Player.no_grenades_2 = Player.no_grenades_2 + Goal.no_grenades_2;
\r
1122 if (Player.no_grenades_1 > 4)
\r
1124 Player.no_grenades_1 = 4;
\r
1126 if (Player.no_grenades_2 > 4)
\r
1128 Player.no_grenades_2 = 4;
\r
1130 if (Player.ammo_detpack > Player.maxammo_detpack)
\r
1132 Player.ammo_detpack = Player.maxammo_detpack;
\r
1134 if (Goal.invincible_finished > 0)
\r
1136 Player.items = Player.items | 1048576;
\r
1137 Player.invincible_time = 1;
\r
1138 Player.invincible_finished = time + Goal.invincible_finished;
\r
1139 if (Goal.classname == "item_tfgoal")
\r
1141 Player.tfstate = Player.tfstate | 32;
\r
1142 Player.invincible_finished = time + 666;
\r
1145 /*if (Goal.invisible_finished > 0) // NexTF doesnt support invisibility?
\r
1147 Player.items = Player.items | 524288;
\r
1148 Player.invisible_time = 1;
\r
1149 Player.invisible_finished = time + Goal.invisible_finished;
\r
1150 if (Goal.classname == "item_tfgoal")
\r
1152 Player.tfstate = Player.tfstate | 64;
\r
1153 Player.invisible_finished = time + 666;
\r
1156 if (Goal.super_damage_finished > 0)
\r
1158 Player.items = Player.items | 4194304;
\r
1159 Player.super_time = 1;
\r
1160 Player.super_damage_finished = time + Goal.super_damage_finished;
\r
1161 if (Goal.classname == "item_tfgoal")
\r
1163 Player.tfstate = Player.tfstate | 128;
\r
1164 Player.super_damage_finished = time + 666;
\r
1167 if (Goal.radsuit_finished > 0)
\r
1169 Player.items = Player.items | 2097152;
\r
1170 Player.rad_time = 1;
\r
1171 Player.radsuit_finished = time + Goal.radsuit_finished;
\r
1172 if (Goal.classname == "item_tfgoal")
\r
1174 Player.tfstate = Player.tfstate | 256;
\r
1175 Player.radsuit_finished = time + 666;
\r
1179 Player.lives = Player.lives + Goal.lives;
\r
1180 Player.real_frags = /*Player.real_frags + */Goal.frags + Player.frags; // Fixed?
\r
1181 if (!(toggleflags & 128))
\r
1183 Player.frags = Player.real_frags;
\r
1188 TeamFortress_CheckClassStats();
\r
1189 //W_SetCurrentAmmo(); // This is automatic in nexuiz right?
\r
1192 //if (Player.playerclass == 8 && (Goal.goal_result & 16)) // In nextf, spy class is "2"
\r
1193 if (Player.class == 2 && (Goal.goal_result & 16))
\r
1195 self.immune_to_check = time + 4;
\r
1196 //Spy_RemoveDisguise(Player); // Wazat -- help [incomplete]
\r
1198 if (Goal.items != 0 && Goal.classname != "item_tfgoal")
\r
1200 te = Finditem(Goal.items);
\r
1203 tfgoalitem_GiveToPlayer(te, Player, Goal);
\r
1206 if (Goal.axhitme != 0)
\r
1208 te = Finditem(Goal.axhitme);
\r
1209 if (te.owner == Player)
\r
1211 tfgoalitem_RemoveFromPlayer(te, Player, 1);
\r
1214 if (Goal.remove_item_group != 0)
\r
1216 te = find(world, classname, "item_tfgoal");
\r
1219 if (te.group_no == Goal.remove_item_group && te.owner == AP)
\r
1222 te = find(te, classname, "item_tfgoal");
\r
1223 tfgoalitem_RemoveFromPlayer(oldte, Player, 1);
\r
1227 te = find(te, classname, "item_tfgoal");
\r
1231 if (Goal.display_item_status1 != 0)
\r
1233 te = Finditem(Goal.display_item_status1);
\r
1236 DisplayItemStatus(Goal, Player, te);
\r
1240 sprint(Player,"Item is missing.\n");
\r
1243 if (Goal.display_item_status2 != 0)
\r
1245 te = Finditem(Goal.display_item_status2);
\r
1248 DisplayItemStatus(Goal, Player, te);
\r
1252 sprint(Player,"Item is missing.\n");
\r
1255 if (Goal.display_item_status3 != 0)
\r
1257 te = Finditem(Goal.display_item_status3);
\r
1260 DisplayItemStatus(Goal, Player, te);
\r
1264 sprint(Player,"Item is missing.\n");
\r
1267 if (Goal.display_item_status4 != 0)
\r
1269 te = Finditem(Goal.display_item_status4);
\r
1272 DisplayItemStatus(Goal, Player, te);
\r
1276 sprint(Player,"Item is missing.\n");
\r
1279 /*if (Player.autodiscard) //Not a function in NexTF
\r
1283 TeamFortress_Discard ();
\r
1288 void(entity Goal, entity Player) RemoveResults =
\r
1290 local entity oldself;
\r
1292 local float puinvin;
\r
1293 local float puinvis;
\r
1294 local float puquad;
\r
1295 local float purad;
\r
1296 if (Goal.classname == "item_tfgoal")
\r
1298 if (!(Player.item_list & Goal.item_list))
\r
1302 if (Goal.goal_activation & 1024)
\r
1306 Player.item_list = Player.item_list - (Player.item_list & Goal.item_list);
\r
1308 if (Goal.health > 0)
\r
1310 TF_T_Damage(Player, Goal, Goal, Goal.health, 1, 0);
\r
1312 if (Goal.health < 0)
\r
1314 T_Heal(Player, 0 - Goal.health, 0);
\r
1316 Player.lives = Player.lives - Goal.lives;
\r
1317 Player.armortype = Player.armortype - Goal.armortype;
\r
1318 Player.armorvalue = Player.armorvalue - Goal.armorvalue;
\r
1319 Player.armorclass = Player.armorclass - (Player.armorclass & Goal.armorclass);
\r
1320 Player.real_frags = Player.real_frags - Goal.frags;
\r
1321 if (!(toggleflags & 128))
\r
1323 Player.frags = Player.real_frags;
\r
1325 Player.ammo_shells = Player.ammo_shells - Goal.ammo_shells;
\r
1326 Player.ammo_nails = Player.ammo_nails - Goal.ammo_nails;
\r
1327 Player.ammo_rockets = Player.ammo_rockets - Goal.ammo_rockets;
\r
1328 Player.ammo_cells = Player.ammo_cells - Goal.ammo_cells;
\r
1329 Player.ammo_medikit = Player.ammo_medikit - Goal.ammo_medikit;
\r
1330 Player.ammo_detpack = Player.ammo_detpack - Goal.ammo_detpack;
\r
1331 Player.no_grenades_1 = Player.no_grenades_1 - Goal.no_grenades_1;
\r
1332 Player.no_grenades_2 = Player.no_grenades_2 - Goal.no_grenades_2;
\r
1337 te = find(world, classname, "item_tfgoal");
\r
1340 if (te.owner == Player && te != Goal)
\r
1342 if (te.invincible_finished > 0)
\r
1346 if (te.invisible_finished > 0)
\r
1350 if (te.super_damage_finished > 0)
\r
1354 if (te.radsuit_finished > 0)
\r
1359 te = find(te, classname, "item_tfgoal");
\r
1361 if (Goal.invincible_finished > 0 && !puinvin)
\r
1363 Player.tfstate = Player.tfstate - (Player.tfstate & 32);
\r
1364 Player.items = Player.items | 1048576;
\r
1365 Player.invincible_time = 1;
\r
1366 Player.invincible_finished = time + Goal.invincible_finished;
\r
1368 if (Goal.invisible_finished > 0 && !puinvis)
\r
1370 Player.tfstate = Player.tfstate - (Player.tfstate & 64);
\r
1371 Player.items = Player.items | 524288;
\r
1372 Player.invisible_time = 1;
\r
1373 Player.invisible_finished = time + Goal.invisible_finished;
\r
1375 if (Goal.super_damage_finished > 0 && !puquad)
\r
1377 Player.tfstate = Player.tfstate - (Player.tfstate & 128);
\r
1378 Player.items = Player.items | 4194304;
\r
1379 Player.super_time = 1;
\r
1380 Player.super_damage_finished = time + Goal.super_damage_finished;
\r
1382 if (Goal.radsuit_finished > 0 && !purad)
\r
1384 Player.tfstate = Player.tfstate - (Player.tfstate & 256);
\r
1385 Player.items = Player.items | 2097152;
\r
1386 Player.rad_time = 1;
\r
1387 Player.radsuit_finished = time + Goal.radsuit_finished;
\r
1391 TeamFortress_CheckClassStats();
\r
1392 //W_SetCurrentAmmo(); // automatic in nexuiz?
\r
1396 float(entity Goal, entity AP) APMeetsCriteria =
\r
1398 local float gotone;
\r
1405 if (Goal.team_no != AP.team_no)
\r
1410 if (Goal.playerclass)
\r
1412 if (Goal.playerclass != AP.playerclass)
\r
1419 if (Goal.class != AP.class)
\r
1424 if (Goal.items_allowed)
\r
1426 te = Finditem(Goal.items_allowed);
\r
1427 if (te.owner != AP)
\r
1433 if (Goal.if_goal_is_active)
\r
1435 te = Findgoal(Goal.if_goal_is_active);
\r
1436 if (te.goal_state != 1)
\r
1441 if (Goal.if_goal_is_inactive)
\r
1443 te = Findgoal(Goal.if_goal_is_inactive);
\r
1444 if (te.goal_state != 2)
\r
1449 if (Goal.if_goal_is_removed)
\r
1451 te = Findgoal(Goal.if_goal_is_removed);
\r
1452 if (te.goal_state != 3)
\r
1457 if (Goal.if_group_is_active)
\r
1459 te = find(world, classname, "info_tfgoal");
\r
1462 if (te.group_no == Goal.if_group_is_active)
\r
1464 if (te.goal_state != 1)
\r
1469 te = find(te, classname, "info_tfgoal");
\r
1472 if (Goal.if_group_is_inactive)
\r
1474 te = find(world, classname, "info_tfgoal");
\r
1477 if (te.group_no == Goal.if_group_is_inactive)
\r
1479 if (te.goal_state != 2)
\r
1484 te = find(te, classname, "info_tfgoal");
\r
1487 if (Goal.if_group_is_removed)
\r
1489 te = find(world, classname, "info_tfgoal");
\r
1492 if (te.group_no == Goal.if_group_is_removed)
\r
1494 if (te.goal_state != 3)
\r
1499 te = find(te, classname, "info_tfgoal");
\r
1502 if (Goal.if_item_has_moved)
\r
1504 te = Finditem(Goal.if_item_has_moved);
\r
1507 if (te.goal_state != 1 && te.origin == te.oldorigin)
\r
1513 if (Goal.if_item_hasnt_moved)
\r
1515 te = Finditem(Goal.if_item_hasnt_moved);
\r
1518 if (te.goal_state == 1 || te.origin != te.oldorigin)
\r
1527 if (Goal.has_item_from_group)
\r
1529 te = find(world, classname, "item_tfgoal");
\r
1530 while (te != world && !gotone)
\r
1532 if (te.group_no == Goal.has_item_from_group && te.owner == AP)
\r
1536 te = find(te, classname, "item_tfgoal");
\r
1547 void(entity Goal) SetupRespawn =
\r
1549 if (Goal.search_time != 0)
\r
1551 InactivateGoal(Goal);
\r
1552 Goal.think = tfgoal_timer_tick;
\r
1553 Goal.nextthink = time + Goal.search_time;
\r
1556 if (Goal.goal_result & 1)
\r
1561 if (Goal.wait > 0)
\r
1563 Goal.nextthink = time + Goal.wait;
\r
1564 Goal.think = DoRespawn;
\r
1569 if (Goal.wait == -1)
\r
1574 InactivateGoal(Goal);
\r
1577 void() DoRespawn =
\r
1579 RestoreGoal(self);
\r
1580 InactivateGoal(self);
\r
1583 float(entity Goal, entity AP) Activated =
\r
1585 local float APMet;
\r
1586 local float RevAct;
\r
1588 if (Goal.goal_state == 1)
\r
1592 if (Goal.goal_state == 3)
\r
1596 if (Goal.goal_state == 4)
\r
1600 APMet = APMeetsCriteria(Goal, AP);
\r
1601 if (Goal.classname == "item_tfgoal")
\r
1603 RevAct = Goal.goal_activation & 64;
\r
1607 RevAct = Goal.goal_activation & 4;
\r
1627 void(entity Goal, entity AP) DoGoalWork =
\r
1631 if (Goal.activate_goal_no != 0)
\r
1633 te = Findgoal(Goal.activate_goal_no);
\r
1636 AttemptToActivate(te, AP, Goal);
\r
1639 if (Goal.inactivate_goal_no != 0)
\r
1641 te = Findgoal(Goal.inactivate_goal_no);
\r
1644 InactivateGoal(te);
\r
1647 if (Goal.restore_goal_no != 0)
\r
1649 te = Findgoal(Goal.restore_goal_no);
\r
1655 if (Goal.remove_goal_no != 0)
\r
1657 te = Findgoal(Goal.remove_goal_no);
\r
1663 if (Goal.return_item_no != 0)
\r
1665 te = Finditem(Goal.return_item_no);
\r
1668 if (te.goal_state == 1)
\r
1670 tfgoalitem_RemoveFromPlayer(te, te.owner, 1);
\r
1674 RI.think = ReturnItem;
\r
1675 RI.nextthink = time + 0.1;
\r
1679 if (Goal.remove_spawnpoint != 0)
\r
1681 te = Findteamspawn(Goal.remove_spawnpoint);
\r
1684 te.goal_state = 3;
\r
1685 te.team_str_home = string_null;
\r
1688 if (Goal.restore_spawnpoint != 0)
\r
1690 te = Findteamspawn(Goal.restore_spawnpoint);
\r
1693 if (te.goal_state == 3)
\r
1695 te.goal_state = 2;
\r
1696 if (te.team_no == 1)
\r
1698 te.team_str_home = "ts1";
\r
1702 if (te.team_no == 2)
\r
1704 te.team_str_home = "ts2";
\r
1708 if (te.team_no == 3)
\r
1710 te.team_str_home = "ts3";
\r
1714 if (te.team_no == 4)
\r
1716 te.team_str_home = "ts4";
\r
1726 void(entity Goal, entity AP) DoGroupWork =
\r
1730 local float allset;
\r
1731 if (Goal.all_active != 0)
\r
1733 if (Goal.last_impulse == 0)
\r
1736 st = ftos(Goal.goal_no);
\r
1738 dprint(" has a .all_active specified, but no .last_impulse\n");
\r
1743 tg = find(world, classname, "info_tfgoal");
\r
1746 if (tg.group_no == Goal.all_active)
\r
1748 if (tg.goal_state != 1)
\r
1753 tg = find(tg, classname, "info_tfgoal");
\r
1757 tg = Findgoal(Goal.last_impulse);
\r
1760 DoResults(tg, AP, Goal.goal_result & 2);
\r
1765 if (Goal.activate_group_no != 0)
\r
1767 tg = find(world, classname, "info_tfgoal");
\r
1770 if (tg.group_no == Goal.activate_group_no)
\r
1772 DoResults(tg, AP, 0);
\r
1774 tg = find(tg, classname, "info_tfgoal");
\r
1777 if (Goal.inactivate_group_no != 0)
\r
1779 tg = find(world, classname, "info_tfgoal");
\r
1782 if (tg.group_no == Goal.inactivate_group_no)
\r
1784 InactivateGoal(tg);
\r
1786 tg = find(tg, classname, "info_tfgoal");
\r
1789 if (Goal.remove_group_no != 0)
\r
1791 tg = find(world, classname, "info_tfgoal");
\r
1794 if (tg.group_no == Goal.remove_group_no)
\r
1798 tg = find(tg, classname, "info_tfgoal");
\r
1801 if (Goal.restore_group_no != 0)
\r
1803 tg = find(world, classname, "info_tfgoal");
\r
1806 if (tg.group_no == Goal.restore_group_no)
\r
1810 tg = find(tg, classname, "info_tfgoal");
\r
1813 if (Goal.remove_spawngroup != 0)
\r
1815 tg = find(world, classname, "info_player_teamspawn");
\r
1818 if (tg.group_no == Goal.remove_spawngroup)
\r
1820 tg.goal_state = 3;
\r
1821 tg.team_str_home = string_null;
\r
1823 tg = find(tg, classname, "info_player_teamspawn");
\r
1826 if (Goal.restore_spawngroup != 0)
\r
1828 tg = find(world, classname, "info_player_teamspawn");
\r
1831 if (tg.group_no == Goal.restore_spawngroup)
\r
1833 tg.goal_state = 2;
\r
1834 if (tg.team_no == 1)
\r
1836 tg.team_str_home = "ts1";
\r
1840 if (tg.team_no == 2)
\r
1842 tg.team_str_home = "ts2";
\r
1846 if (tg.team_no == 3)
\r
1848 tg.team_str_home = "ts3";
\r
1852 if (tg.team_no == 4)
\r
1854 tg.team_str_home = "ts4";
\r
1860 tg = find(tg, classname, "info_player_teamspawn");
\r
1865 void(entity Item, entity AP) DoItemGroupWork =
\r
1868 local entity carrier;
\r
1869 local float allcarried;
\r
1872 if (Item.distance != 0)
\r
1874 if (Item.pain_finished == 0)
\r
1876 dprint("GoalItem ");
\r
1877 st = ftos(Item.goal_no);
\r
1879 dprint(" has a .distance specified, but no .pain_finished\n");
\r
1881 tg = find(world, classname, "item_tfgoal");
\r
1884 if (tg.group_no == Item.distance)
\r
1886 if (tg.goal_state != 1)
\r
1891 tg = find(tg, classname, "item_tfgoal");
\r
1893 if (allcarried == 1)
\r
1895 tg = Findgoal(Item.pain_finished);
\r
1898 DoResults(tg, AP, Item.goal_result & 2);
\r
1903 if (Item.speed != 0)
\r
1905 if (Item.attack_finished == 0)
\r
1907 dprint("GoalItem ");
\r
1908 st = ftos(Item.goal_no);
\r
1910 dprint(" has a .speed specified, but no .attack_finished\n");
\r
1913 tg = find(world, classname, "item_tfgoal");
\r
1916 if (tg.group_no == Item.speed)
\r
1918 if (tg.goal_state != 1)
\r
1924 if (carrier == world)
\r
1926 carrier = tg.owner;
\r
1930 if (carrier != tg.owner)
\r
1937 tg = find(tg, classname, "item_tfgoal");
\r
1939 if (allcarried == 1)
\r
1941 tg = Findgoal(Item.attack_finished);
\r
1944 DoResults(tg, AP, Item.goal_result & 2);
\r
1950 void(entity Goal, entity AP) DoTriggerWork =
\r
1953 if (Goal.killtarget)
\r
1958 t = find(t, targetname, Goal.killtarget);
\r
1963 } while (t != world);
\r
1971 t = find(t, targetname, Goal.target);
\r
1980 if (self.use != SUB_Null)
\r
1990 } while (t != world);
\r
1994 void() DelayedResult =
\r
1996 if (self.enemy.goal_state == 4)
\r
1998 DoResults(self.enemy, self.owner, self.weapon);
\r
2003 void(entity Goal, entity AP, float addb) DoResults =
\r
2006 local entity oldself;
\r
2008 local float winners;
\r
2010 if (Goal.goal_state == 1)
\r
2014 if (Goal.delay_time > 0 && Goal.goal_state != 4)
\r
2016 Goal.goal_state = 4;
\r
2018 te.think = DelayedResult;
\r
2019 te.nextthink = time + Goal.delay_time;
\r
2025 UpdateAbbreviations(Goal);
\r
2026 Goal.goal_state = 2;
\r
2029 if (Goal.volume == 1)
\r
2031 sound(other, 3, Goal.noise, 1, 0);
\r
2035 sound(other, 3, Goal.noise, 1, 1);
\r
2039 if (Goal.increase_team1 != 0)
\r
2041 TeamFortress_TeamIncreaseScore(1, Goal.increase_team1);
\r
2044 if (Goal.increase_team2 != 0)
\r
2046 TeamFortress_TeamIncreaseScore(2, Goal.increase_team2);
\r
2049 if (Goal.increase_team3 != 0)
\r
2051 TeamFortress_TeamIncreaseScore(3, Goal.increase_team3);
\r
2054 if (Goal.increase_team4 != 0)
\r
2056 TeamFortress_TeamIncreaseScore(4, Goal.increase_team4);
\r
2061 TeamFortress_TeamShowScores(2);
\r
2063 te = find(world, classname, "player");
\r
2064 while (te != world)
\r
2066 if (Goal.broadcast != string_null && CTF_Map == 0)
\r
2068 CenterPrint2(te, "\n\n\n", Goal.broadcast);
\r
2070 if (Goal.netname_broadcast != string_null && CTF_Map == 0)
\r
2072 sprint(te,AP.netname);
\r
2073 sprint(te,Goal.netname_broadcast);
\r
2077 if (Goal.message != string_null)
\r
2079 CenterPrint2(te, Goal.message, AP.netname);
\r
2084 if (AP.team_no == te.team_no)
\r
2086 if (Goal.owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2088 CenterPrint2(te, Goal.owners_team_broadcast, AP.netname);
\r
2092 if (Goal.team_broadcast != string_null)
\r
2094 CenterPrint2(te, Goal.team_broadcast, AP.netname);
\r
2097 if (Goal.netname_owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2099 sprint(te,AP.netname);
\r
2100 sprint(te,Goal.netname_owners_team_broadcast);
\r
2104 if (Goal.netname_team_broadcast != string_null)
\r
2106 sprint(te,AP.netname);
\r
2107 sprint(te,Goal.netname_team_broadcast);
\r
2113 if (Goal.owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2115 CenterPrint2(te, Goal.owners_team_broadcast, AP.netname);
\r
2119 if (Goal.non_team_broadcast != string_null)
\r
2121 CenterPrint2(te, Goal.non_team_broadcast, AP.netname);
\r
2124 if (Goal.netname_owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2126 sprint(te,AP.netname);
\r
2127 sprint(te,Goal.netname_owners_team_broadcast);
\r
2131 if (Goal.netname_non_team_broadcast != string_null)
\r
2133 sprint(te,AP.netname);
\r
2134 sprint(te,Goal.netname_non_team_broadcast);
\r
2139 if (IsAffectedBy(Goal, te, AP))
\r
2141 if (Goal.search_time != 0 && (Goal.goal_effects & 64))
\r
2143 if (APMeetsCriteria(Goal, te))
\r
2145 Apply_Results(Goal, te, AP, addb);
\r
2150 Apply_Results(Goal, te, AP, addb);
\r
2153 te = find(te, classname, "player");
\r
2155 if (Goal.classname != "item_tfgoal")
\r
2157 Goal.goal_state = 1;
\r
2159 if (Goal.goal_result & 4)
\r
2161 TeamFortress_TeamShowScores(1);
\r
2162 winners = TeamFortress_TeamGetWinner();
\r
2163 te = find(world, classname, "player");
\r
2166 te.takedamage = 0;
\r
2168 te.velocity = '0 0 0';
\r
2169 te.avelocity = '0 0 0';
\r
2170 te = find(te, classname, "player");
\r
2173 te.nextthink = time + 5;
\r
2174 te.think = execute_changelevel;
\r
2175 // te.think = changelevel; // Wazat -- may need fixing
\r
2180 DoGroupWork(Goal, AP);
\r
2181 DoGoalWork(Goal, AP);
\r
2182 DoTriggerWork(Goal, AP);
\r
2183 if (Goal.classname == "info_tfgoal")
\r
2185 SetupRespawn(Goal);
\r
2189 void() tfgoal_touch =
\r
2192 if (!(self.goal_activation & 1))
\r
2196 if (other.classname != "player")
\r
2200 if (other.is_dead == 1) // TEMP
\r
2204 if (self.goal_state == 1)
\r
2208 AttemptToActivate(self, other, self);
\r
2211 void() info_tfgoal_use =
\r
2213 AttemptToActivate(self, activator, self);
\r
2216 void() tfgoal_timer_tick =
\r
2218 if (self.goal_state != 3)
\r
2220 if (APMeetsCriteria(self, world))
\r
2222 DoResults(self, world, 1);
\r
2226 InactivateGoal(self);
\r
2227 self.think = tfgoal_timer_tick;
\r
2228 self.nextthink = time + self.search_time;
\r
2233 void() item_tfgoal_touch =
\r
2237 if (other.is_dead == 1) // TEMP
\r
2241 if (other.classname != "player")
\r
2245 if (other.health <= 0)
\r
2249 // for flag dropping
\r
2250 if ( (self.tent == other) && (time < self.option5) )
\r
2254 if (Activated(self, other))
\r
2256 tfgoalitem_GiveToPlayer(self, other, self);
\r
2257 self.goal_state = 1;
\r
2261 if (self.else_goal != 0)
\r
2263 te = Findgoal(self.else_goal);
\r
2266 AttemptToActivate(te, other, self);
\r
2272 void(entity Item, entity AP, entity Goal) tfgoalitem_GiveToPlayer =
\r
2276 if (Item.mdl != string_null)
\r
2278 setmodel(Item, string_null);
\r
2281 if (Item.goal_activation & 1)
\r
2283 AP.effects = AP.effects | 8;
\r
2285 if (Item.goal_activation & 2)
\r
2287 TeamFortress_SetSpeed(AP);
\r
2289 if (Item.goal_activation & 512)
\r
2291 Item.effects = Item.effects - (Item.effects | 8);
\r
2294 if (Item.items & 133701)
\r
2296 AP.items = AP.items | 262144;
\r
2297 AP.effects = AP.effects | 128;
\r
2299 newmis.owner = AP;
\r
2300 newmis.movetype = 4;
\r
2302 setsize(newmis, '0 0 0', '0 0 0');
\r
2303 newmis.angles = AP.angles;
\r
2304 newmis.nextthink = time + 0.5;
\r
2305 newmis.think = MoveFlag;
\r
2307 setmodel(newmis, Item.mdl);
\r
2308 setorigin(newmis, AP.origin);
\r
2311 if (Item.items & 131072)
\r
2313 AP.items = AP.items | 131072;
\r
2314 AP.effects = AP.effects | 64;
\r
2316 newmis.owner = AP;
\r
2317 newmis.movetype = 4;
\r
2319 setsize(newmis, '0 0 0', '0 0 0');
\r
2320 newmis.angles = AP.angles;
\r
2321 newmis.nextthink = time + 0.5;
\r
2322 newmis.think = MoveFlag;
\r
2324 setmodel(newmis, "progs/tf_flag.mdl");
\r
2325 setorigin(newmis, AP.origin);
\r
2327 if (Item.items & 262144)
\r
2329 AP.items = AP.items | 262144;
\r
2330 AP.effects = AP.effects | 128;
\r
2332 newmis.owner = AP;
\r
2333 newmis.movetype = 4;
\r
2335 setsize(newmis, '0 0 0', '0 0 0');
\r
2336 newmis.angles = AP.angles;
\r
2337 newmis.nextthink = time + 0.5;
\r
2338 newmis.think = MoveFlag;
\r
2340 setmodel(newmis, "progs/tf_flag.mdl");
\r
2341 setorigin(newmis, AP.origin);
\r
2346 if (Goal.goal_result & 8)
\r
2348 Item.goal_state = 1;
\r
2352 /* if (AP.playerclass == 8 && (Item.goal_result & 16))
\r
2354 AP.is_unabletospy = 1;
\r
2356 if (AP.class == 2 && (Item.goal_result & 16))
\r
2358 AP.is_unabletospy = 1;
\r
2360 DoResults(Item, AP, 1);
\r
2361 DoItemGroupWork(Item, AP);
\r
2364 void() ReturnItem =
\r
2366 self.enemy.goal_state = 2;
\r
2367 self.enemy.solid = 1;
\r
2368 self.enemy.movetype = 0;
\r
2369 self.enemy.touch = item_tfgoal_touch;
\r
2370 self.enemy.origin = self.enemy.oldorigin;
\r
2371 if (self.enemy.mdl != string_null)
\r
2373 setmodel(self.enemy, self.enemy.mdl);
\r
2375 setorigin(self.enemy, self.enemy.origin);
\r
2376 //sound(self.enemy,"items/itembk2.wav", 1, 1);
\r
2377 sound (self.enemy, 2, "items/itembk2.wav", 1, 1);
\r
2378 tfgoalitem_checkgoalreturn(self.enemy);
\r
2382 void (entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer =
\r
2385 local float lighton;
\r
2386 local float slowon;
\r
2387 local float key1on;
\r
2388 local float key2on;
\r
2389 local float spyoff;
\r
2391 local entity DelayReturn;
\r
2393 if ((Item == world))
\r
2395 objerror ("error: tfgoalitem_RemoveFromPlayer(): Item == world");
\r
2403 te = find (world, classname, "item_tfgoal");
\r
2406 if (((te.owner == AP) && (te != Item)))
\r
2408 if ((te.goal_activation & 1))
\r
2412 if ((te.goal_activation & 2))
\r
2416 if ((te.items & 131072))
\r
2420 if ((te.items & 262144))
\r
2424 if ((te.goal_result & 16))
\r
2429 te = find (te, classname, "item_tfgoal");
\r
2433 if ((AP.invincible_finished > (time + 3)))
\r
2439 if ((AP.super_damage_finished > (time + 3)))
\r
2447 AP.effects = (AP.effects - (AP.effects & 8));
\r
2448 AP.effects = (AP.effects - (AP.effects & 64));
\r
2449 AP.effects = (AP.effects - (AP.effects & 128));
\r
2451 if ((Item.goal_activation & 512))
\r
2453 Item.effects = (Item.effects | 8);
\r
2457 AP.is_unabletospy = 0;
\r
2461 AP.items = (AP.items - (AP.items & 131072));
\r
2465 AP.items = (AP.items - (AP.items & 262144));
\r
2467 te = find (world, classname, "player");
\r
2468 while ((te != world))
\r
2470 if (IsAffectedBy (Item, te, AP))
\r
2472 RemoveResults (Item, te);
\r
2474 te = find (te, classname, "player");
\r
2476 if (((method == 0) || (method == 2)))
\r
2478 te = find (world, classname, "player");
\r
2479 while ((te != world))
\r
2481 if ((te.team_no == Item.owned_by))
\r
2483 if ((Item.team_drop != string_null))
\r
2485 CenterPrint2 (te, "\n\n\n", Item.team_drop);
\r
2487 if ((Item.netname_team_drop != string_null))
\r
2489 sprint (te, AP.netname);
\r
2490 sprint (te, Item.netname_team_drop);
\r
2495 if ((Item.non_team_drop != string_null))
\r
2497 CenterPrint2 (te, "\n\n\n", Item.non_team_drop);
\r
2499 if ((Item.netname_non_team_drop != string_null))
\r
2501 sprint (te, AP.netname);
\r
2502 sprint (te, Item.netname_non_team_drop);
\r
2505 te = find (te, classname, "player");
\r
2507 if ((Item.goal_activation & 8))
\r
2509 DelayReturn = spawn ();
\r
2510 DelayReturn.enemy = Item;
\r
2511 if ((method == 0))
\r
2513 DelayReturn.weapon = 0;
\r
2517 DelayReturn.weapon = 1;
\r
2519 DelayReturn.think = ReturnItem;
\r
2520 DelayReturn.nextthink = (time + 0.5);
\r
2524 if ((Item.goal_activation & 4))
\r
2526 if (((method == 2) && (Item.goal_activation & 4096)))
\r
2528 tfgoalitem_drop (Item, 1, AP);
\r
2532 tfgoalitem_drop (Item, 0, AP);
\r
2537 Item.owner = world;
\r
2539 TeamFortress_SetSpeed (AP);
\r
2543 Item.owner = world;
\r
2544 Item.flags = (Item.flags - (Item.flags & 512));
\r
2545 setsize (Item, Item.goal_min, Item.goal_max);
\r
2546 TeamFortress_SetSpeed (AP);
\r
2553 if (Item.goal_activation & 16)
\r
2555 DelayReturn = spawn();
\r
2556 DelayReturn.enemy = Item;
\r
2557 DelayReturn.think = ReturnItem;
\r
2558 DelayReturn.nextthink = time + 0.5;
\r
2559 Item.owner = world;
\r
2560 TeamFortress_SetSpeed(AP);
\r
2564 Item.owner = world;
\r
2565 TeamFortress_SetSpeed(AP);
\r
2569 objerror ("Invalid method passed into tfgoalitem_RemoveFromPlayer\n");
\r
2572 // MTF's remove from player function
\r
2573 /*void(entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer =
\r
2576 local float lighton;
\r
2577 local float slowon;
\r
2578 local float key1on;
\r
2579 local float key2on;
\r
2580 local float spyoff;
\r
2582 local entity DelayReturn;
\r
2583 if (Item == world)
\r
2585 dprint("error: tfgoalitem_RemoveFromPlayer(): Item == world");
\r
2593 te = find(world, classname, "item_tfgoal");
\r
2596 if (te.owner == AP && te != Item)
\r
2598 if (te.goal_activation & 1)
\r
2602 if (te.goal_activation & 2)
\r
2606 if (te.items & 131072)
\r
2610 if (te.items & 262144)
\r
2614 if (te.goal_result & 16)
\r
2619 te = find(te, classname, "item_tfgoal");
\r
2623 if (AP.invincible_finished > time + 3)
\r
2630 AP.effects = AP.effects - (AP.effects & 8);
\r
2632 if (Item.goal_activation & 512)
\r
2634 Item.effects = Item.effects | 8;
\r
2638 AP.is_unabletospy = 0;
\r
2642 AP.items = AP.items - (AP.items & 131072);
\r
2646 AP.items = AP.items - (AP.items & 262144);
\r
2648 te = find(world, classname, "player");
\r
2649 while (te != world)
\r
2651 if (IsAffectedBy(Item, te, AP))
\r
2653 RemoveResults(Item, te);
\r
2655 te = find(te, classname, "player");
\r
2657 if ((method == 0) || (method == 2))
\r
2659 te = find(world, classname, "player");
\r
2660 while (te != world)
\r
2662 if (te.team_no == Item.owned_by)
\r
2664 if (Item.team_drop != string_null)
\r
2666 CenterPrint2(te, "\n\n\n", Item.team_drop);
\r
2668 if (Item.netname_team_drop != string_null)
\r
2670 sprint(te,AP.netname);
\r
2671 sprint(te,Item.netname_team_drop);
\r
2676 if (Item.non_team_drop != string_null)
\r
2678 CenterPrint2(te, "\n\n\n", Item.non_team_drop);
\r
2680 if (Item.netname_non_team_drop != string_null)
\r
2682 sprint(te,AP.netname);
\r
2683 sprint(te,Item.netname_non_team_drop);
\r
2686 te = find(te, classname, "player");
\r
2688 if (Item.goal_activation & 8)
\r
2690 DelayReturn = spawn();
\r
2691 DelayReturn.enemy = Item;
\r
2692 DelayReturn.think = ReturnItem;
\r
2693 DelayReturn.nextthink = time + 0.5;
\r
2697 if (Item.goal_activation & 4)
\r
2700 tfgoalitem_drop(Item);
\r
2704 Item.owner = world;
\r
2706 TeamFortress_SetSpeed(AP);
\r
2710 Item.owner = world;
\r
2711 TeamFortress_SetSpeed(AP);
\r
2716 if (Item.goal_activation & 16)
\r
2718 DelayReturn = spawn();
\r
2719 DelayReturn.enemy = Item;
\r
2720 DelayReturn.think = ReturnItem;
\r
2721 DelayReturn.nextthink = time + 0.5;
\r
2722 Item.owner = world;
\r
2723 TeamFortress_SetSpeed(AP);
\r
2727 Item.owner = world;
\r
2728 TeamFortress_SetSpeed(AP);
\r
2732 dprint("Invalid method passed into tfgoalitem_RemoveFromPlayer\n");
\r
2735 void() tfgoalitem_dropthink =
\r
2738 self.movetype = 10; //6;
\r
2739 if (self.pausetime != 0)
\r
2741 pos = pointcontents(self.origin);
\r
2744 self.nextthink = time + self.pausetime / 4;
\r
2750 self.nextthink = time + 5;
\r
2754 if (pos == -2 || pos == -6)
\r
2756 self.nextthink = time + 2;
\r
2760 self.nextthink = time + self.pausetime;
\r
2764 self.think = tfgoalitem_remove;
\r
2768 void(entity Item) tfgoalitem_drop =
\r
2770 Item.origin = Item.owner.origin - '0 0 8';
\r
2771 //Item.velocity_z = 400;
\r
2772 //Item.velocity_x = -50 + random() * 100;
\r
2773 //Item.velocity_y = -50 + random() * 100;
\r
2774 Item.velocity_z = 1;
\r
2775 Item.velocity_x = 0;
\r
2776 Item.velocity_y = 0;
\r
2777 Item.goal_state = 2;
\r
2778 Item.movetype = 6;
\r
2780 Item.touch = item_tfgoal_touch;
\r
2781 setorigin(Item, Item.origin - '0 0 16');
\r
2782 setsize(Item, '-16 -16 0', '16 16 56');
\r
2783 if (Item.mdl != string_null)
\r
2785 setmodel(Item, Item.mdl);
\r
2787 Item.nextthink = time + 5;
\r
2788 Item.think = tfgoalitem_dropthink;
\r
2791 void() tfgoalitem_remove =
\r
2794 if (self.goal_state == 1)
\r
2798 if (self.goal_activation & 32)
\r
2801 self.touch = item_tfgoal_touch;
\r
2802 self.origin = self.oldorigin;
\r
2803 if (self.mdl != string_null)
\r
2805 setmodel(self, self.mdl);
\r
2807 setorigin(self, self.origin);
\r
2808 //sound(self,"items/itembk2.wav", 1, 1);
\r
2809 tfgoalitem_checkgoalreturn(self);
\r
2810 if (self.noise3 != string_null || self.noise4 != string_null)
\r
2812 te = find(world, classname, "player");
\r
2815 if (te.team_no == self.owned_by)
\r
2817 CenterPrint2(te, "\n\n\n", self.noise3);
\r
2821 CenterPrint2(te, "\n\n\n", self.noise4);
\r
2823 te = find(te, classname, "player");
\r
2831 void(entity Item) tfgoalitem_checkgoalreturn =
\r
2835 if (Item.impulse != 0)
\r
2837 te = Findgoal(Item.impulse);
\r
2840 te = Findgoal(Item.impulse);
\r
2843 AttemptToActivate(te, world, Item);
\r
2849 void(entity Goal, entity Player, entity Item) DisplayItemStatus =
\r
2851 if (Item.goal_state == 1)
\r
2853 if (Player.team_no == Item.owned_by)
\r
2855 sprint(Player,Goal.team_str_carried);
\r
2859 sprint(Player,Goal.non_team_str_carried);
\r
2861 sprint(Player," ");
\r
2862 if (Player == Item.owner)
\r
2864 sprint(Player," You");
\r
2868 sprint(Player,Item.owner.netname);
\r
2870 sprint(Player,".");
\r
2874 if (Item.origin != Item.oldorigin)
\r
2876 if (Player.team_no == Item.owned_by)
\r
2878 sprint(Player,Goal.team_str_moved);
\r
2882 sprint(Player,Goal.non_team_str_moved);
\r
2887 if (Player.team_no == Item.owned_by)
\r
2889 sprint(Player,Goal.team_str_home);
\r
2893 sprint(Player,Goal.non_team_str_home);
\r
2897 sprint(Player,"\n");
\r
2900 void() info_player_team1 =
\r
2903 self.classname = "info_player_teamspawn";
\r
2905 self.goal_effects = 1;
\r
2906 self.team_str_home = "ts2";
\r
2909 void() info_player_team2 =
\r
2912 self.classname = "info_player_teamspawn";
\r
2914 self.goal_effects = 1;
\r
2915 self.team_str_home = "ts1";
\r
2918 void() item_flag_team2 =
\r
2920 team2maxplayers = 4; //TEMP
\r
2923 precache_model("progs/w_s_key.mdl");
\r
2924 precache_sound("ogre/ogwake.wav");
\r
2925 precache_sound("boss2/pop2.wav");
\r
2926 self.classname = "item_tfgoal";
\r
2927 self.netname = "Team 1 Flag";
\r
2928 self.broadcast = " ÇÏÔ the enemy team's flag!\n";
\r
2929 self.deathtype = "You've got the enemy flag!\n";
\r
2930 self.noise = "ogre/ogwake.wav";
\r
2931 self.mdl = "progs/tf_flag.mdl";
\r
2933 setmodel(self, self.mdl);
\r
2935 self.goal_activation = 1 | 4 | 128 | 32 | 16 | 512;
\r
2936 self.goal_effects = 1;
\r
2937 self.pausetime = 128;
\r
2938 setsize(self, '-16 -16 -24', '16 16 32');
\r
2939 self.touch = item_tfgoal_touch;
\r
2940 self.goal_state = 2;
\r
2942 setorigin(self, self.origin);
\r
2943 self.nextthink = time + 0.2;
\r
2944 self.think = TF_PlaceItem;
\r
2946 dp.origin = self.origin;
\r
2947 dp.classname = "info_tfgoal";
\r
2948 dp.goal_activation = 1;
\r
2950 dp.items_allowed = 2;
\r
2952 dp.goal_effects = 3;
\r
2953 dp.broadcast = " ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
2954 dp.message = "You ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
2955 dp.noise = "boss2/pop2.wav";
\r
2956 dp.goal_result = 2;
\r
2957 dp.activate_goal_no = 5;
\r
2962 dp.goal_state = 2;
\r
2963 setsize(dp, '-16 -16 -24', '16 16 32');
\r
2964 dp.nextthink = time + 0.2;
\r
2965 dp.think = TF_PlaceGoal;
\r
2967 dp.origin = dp.origin;
\r
2968 dp.classname = "info_tfgoal";
\r
2969 dp.goal_effects = 1;
\r
2971 dp.goal_activation = 0;
\r
2974 dp.goal_state = 2;
\r
2975 setsize(dp, '-16 -16 -24', '16 16 32');
\r
2976 dp.nextthink = time + 0.2;
\r
2977 dp.think = TF_PlaceGoal;
\r
2980 void() item_flag_team1 =
\r
2982 team1maxplayers = 4; //TEMP
\r
2985 precache_model("progs/tf_flag.mdl");
\r
2986 precache_sound("ogre/ogwake.wav");
\r
2987 precache_sound("boss2/pop2.wav");
\r
2988 self.classname = "item_tfgoal";
\r
2989 self.netname = "Team 2 Flag";
\r
2990 self.broadcast = " ÇÏÔ the enemy team's flag!\n";
\r
2991 self.deathtype = "You've got the enemy flag!\n";
\r
2992 self.noise = "ogre/ogwake.wav";
\r
2993 self.mdl = "progs/tf_flag.mdl";
\r
2994 setmodel(self, self.mdl);
\r
2997 self.goal_activation = 1 | 4 | 128 | 32 | 16 | 512;
\r
2998 self.goal_effects = 1;
\r
2999 self.pausetime = 128;
\r
3000 setsize(self, '-16 -16 -24', '16 16 32');
\r
3001 self.touch = item_tfgoal_touch;
\r
3002 self.goal_state = 2;
\r
3004 setorigin(self, self.origin);
\r
3005 self.nextthink = time + 0.2;
\r
3006 self.think = TF_PlaceItem;
\r
3008 dp.origin = self.origin;
\r
3009 dp.classname = "info_tfgoal";
\r
3010 dp.goal_activation = 1;
\r
3012 dp.items_allowed = 1;
\r
3014 dp.goal_effects = 3;
\r
3015 dp.broadcast = " ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3016 dp.message = "You ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3017 dp.noise = "boss2/pop2.wav";
\r
3018 dp.goal_result = 2;
\r
3019 dp.activate_goal_no = 6;
\r
3024 dp.goal_state = 2;
\r
3025 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3026 dp.nextthink = time + 0.2;
\r
3027 dp.think = TF_PlaceGoal;
\r
3029 dp.origin = dp.origin;
\r
3030 dp.classname = "info_tfgoal";
\r
3031 dp.goal_effects = 1;
\r
3033 dp.goal_activation = 0;
\r
3036 dp.goal_state = 2;
\r
3037 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3038 dp.nextthink = time + 0.2;
\r
3039 dp.think = TF_PlaceGoal;
\r
3042 void() CTF_FlagCheck =
\r
3045 local float flagcount;
\r
3048 te = find(world, classname, "item_tfgoal");
\r
3049 while (te != world)
\r
3051 if (te.goal_no == 1)
\r
3053 pos = pointcontents(te.origin);
\r
3054 if (pos == -2 || pos == -6)
\r
3056 dprint("*****BUG*****\nFlag(s) outside world.\nPlease report this.\n");
\r
3057 te.nextthink = time + 0.2;
\r
3058 te.think = tfgoalitem_remove;
\r
3060 flagcount = flagcount + 1;
\r
3064 if (te.goal_no == 2)
\r
3066 pos = pointcontents(te.origin);
\r
3067 if (pos == -2 || pos == -6)
\r
3069 dprint("*****BUG*****\nFlag(s) outside world.\nPlease report this.\n");
\r
3070 te.nextthink = time + 0.2;
\r
3071 te.think = tfgoalitem_remove;
\r
3073 flagcount = flagcount + 1;
\r
3076 te = find(te, classname, "item_tfgoal");
\r
3078 if (flagcount != 2)
\r
3080 dprint("*****BUG*****\nFlag(s) missing.\nPlease report this.\n");
\r
3082 self.nextthink = time + 30;
\r