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
86 void(float tno, float scoretoadd) TeamFortress_TeamIncreaseScore;
\r
87 void(float all) TeamFortress_TeamShowScores;
\r
88 float() TeamFortress_TeamGetWinner;
\r
90 // Functions to handle entity placement when spawned
\r
91 void() TF_PlaceItem;
\r
92 void() TF_StartItem;
\r
93 void() TF_PlaceGoal;
\r
94 void() TF_StartGoal;
\r
96 // Spawn functions for all Map Entities
\r
97 float() CheckExistence;
\r
98 void() info_tfdetect;
\r
99 void() info_player_teamspawn;
\r
100 void() info_tfgoal;
\r
101 void() info_tfgoal_timer;
\r
102 void() item_tfgoal;
\r
104 // AutoDetection Function
\r
105 void(entity AD) ParseTFDetect;
\r
107 // Generic Functions
\r
108 entity(float ino) Finditem;
\r
109 entity(float gno) Findgoal;
\r
110 entity(float gno) Findteamspawn;
\r
111 void(entity Goal) InactivateGoal;
\r
112 void(entity Goal) RestoreGoal;
\r
113 void(entity Goal) RemoveGoal;
\r
114 float(entity Goal, entity Player, entity AP) IsAffectedBy;
\r
115 //void(entity Goal, entity Player, entity AP, float addb) Apply_Results;
\r
116 //float(entity Goal, entity AP) APMeetsCriteria;
\r
117 void(entity Goal) SetupRespawn;
\r
119 void(entity Goal, entity AP) DoGoalWork;
\r
120 void(entity Goal, entity AP) DoGroupWork;
\r
121 void(entity Item, entity AP) DoItemGroupWork;
\r
122 void(entity Goal, entity AP) DoTriggerWork;
\r
123 void(entity Goal, entity AP, float addb) DoResults;
\r
124 //void(entity Goal, entity Player) RemoveResults;
\r
127 void() tfgoal_touch;
\r
128 void() info_tfgoal_use;
\r
130 // Timer Goal Functions
\r
131 void() tfgoal_timer_tick;
\r
134 void() item_tfgoal_touch;
\r
135 void(entity Item, entity AP, entity Goal) tfgoalitem_GiveToPlayer;
\r
136 void(entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer;
\r
137 void() tfgoalitem_remove;
\r
138 void(entity Item) tfgoalitem_drop;
\r
139 void(entity Item) tfgoalitem_checkgoalreturn;
\r
141 void(entity Goal, entity Player, entity Item) DisplayItemStatus;
\r
143 // CTF Support Functions
\r
144 void() CTF_FlagCheck;
\r
147 void () TF_PlaceItem;
\r
148 void () TF_StartItem;
\r
149 void () TF_PlaceGoal;
\r
150 void () TF_StartGoal;
\r
151 //void () TF_PlaceCamp;
\r
152 //void () TF_StartCamp;
\r
153 void () info_tfdetect;
\r
154 //void () info_tfnocamp;
\r
155 void () info_player_teamspawn;
\r
156 void () info_tfgoal;
\r
157 void () info_tfgoal_timer;
\r
158 void () item_tfgoal;
\r
159 entity (float gno) Findgoal;
\r
160 entity (float gno) Findteamspawn;
\r
161 void (entity Goal) InactivateGoal;
\r
162 void (entity Goal) RestoreGoal;
\r
163 void (entity Goal) RemoveGoal;
\r
164 float (entity Goal,entity Player,entity AP) IsAffectedBy;
\r
165 void (entity Goal,entity Player,entity AP,float addb) Apply_Results;
\r
166 float (entity Goal,entity AP) APMeetsCriteria;
\r
167 void (entity Goal) SetupRespawn;
\r
169 void (entity Item,entity AP) DoItemGroupWork;
\r
170 void (entity Goal,entity AP) DoTriggerWork;
\r
171 void (entity Goal,entity Player) RemoveResults;
\r
172 void () info_tfgoal_use;
\r
173 void () tfgoal_timer_tick;
\r
174 void () item_tfgoal_touch;
\r
175 void () tfgoalitem_remove;
\r
176 void (entity Item) tfgoalitem_drop;
\r
177 void (entity Item) tfgoalitem_checkgoalreturn;
\r
178 void () ReturnItem;
\r
183 if ( (prematch) )// && (self.owner.items & 131072) )
\r
185 T_Damage (self.owner, self.owner, self.owner, 500);
\r
188 makevectors(self.owner.v_angle);
\r
189 setorigin(self, self.owner.origin - v_forward * 25 + '0 0 20');
\r
190 self.angles_x = self.owner.angles_z;
\r
191 self.angles_y = self.owner.angles_y + 90;
\r
192 self.angles_z = 0 - self.owner.angles_x;
\r
193 self.nextthink = time + 0.010000;
\r
194 self.think = MoveFlag;
\r
195 if (self.owner.deadflag)
\r
198 //self.movetype = 10;
\r
199 //self.velocity = '0 0 100';
\r
201 self.owner.effects = self.owner.effects - (self.owner.effects & 128);
\r
202 self.owner.effects = self.owner.effects - (self.owner.effects & 64);
\r
205 if (!(self.owner.items & 131072) && !(self.owner.items & 262144))
\r
207 self.owner.effects = self.owner.effects - (self.owner.effects & 128);
\r
208 self.owner.effects = self.owner.effects - (self.owner.effects & 64);
\r
213 void (entity Goal) UpdateAbbreviations =
\r
215 if ((Goal.has_abbreviated == 0))
\r
217 if (((Goal.g_a != 0) && (Goal.goal_activation == 0)))
\r
219 Goal.goal_activation = Goal.g_a;
\r
221 if (((Goal.g_e != 0) && (Goal.goal_effects == 0)))
\r
223 Goal.goal_effects = Goal.g_e;
\r
225 if (((Goal.g_e != 0) && (Goal.goal_effects == 0)))
\r
227 Goal.goal_effects = Goal.g_e;
\r
229 if (((Goal.h_i_g != 0) && (Goal.has_item_from_group == 0)))
\r
231 Goal.has_item_from_group = Goal.h_i_g;
\r
233 if (((Goal.hn_i_g != 0) && (Goal.hasnt_item_from_group == 0)))
\r
235 Goal.hasnt_item_from_group = Goal.hn_i_g;
\r
237 if (((Goal.r_i_g != 0) && (Goal.remove_item_group == 0)))
\r
239 Goal.remove_item_group = Goal.r_i_g;
\r
241 if (((Goal.a_s != 0) && (Goal.ammo_shells == 0)))
\r
243 Goal.ammo_shells = Goal.a_s;
\r
245 if (((Goal.a_n != 0) && (Goal.ammo_nails == 0)))
\r
247 Goal.ammo_nails = Goal.a_n;
\r
249 if (((Goal.a_r != 0) && (Goal.ammo_rockets == 0)))
\r
251 Goal.ammo_rockets = Goal.a_r;
\r
253 if (((Goal.a_c != 0) && (Goal.ammo_cells == 0)))
\r
255 Goal.ammo_cells = Goal.a_c;
\r
257 if (((Goal.rv_s_h != 0) && (Goal.remove_spawngroup == 0)))
\r
259 Goal.remove_spawngroup = Goal.rv_s_h;
\r
261 if (((Goal.rs_s_h != 0) && (Goal.restore_spawngroup == 0)))
\r
263 Goal.restore_spawngroup = Goal.rs_s_h;
\r
265 if (((Goal.rv_gr != 0) && (Goal.remove_group_no == 0)))
\r
267 Goal.remove_group_no = Goal.rv_gr;
\r
269 if (((Goal.rs_gr != 0) && (Goal.restore_group_no == 0)))
\r
271 Goal.restore_group_no = Goal.rs_gr;
\r
273 if (((Goal.rv_g != 0) && (Goal.remove_goal_no == 0)))
\r
275 Goal.remove_goal_no = Goal.rv_g;
\r
277 if (((Goal.rs_g != 0) && (Goal.restore_goal_no == 0)))
\r
279 Goal.restore_goal_no = Goal.rs_g;
\r
281 if ((Goal.t_s_h != string_null))
\r
283 Goal.team_str_home = Goal.t_s_h;
\r
285 if ((Goal.t_s_m != string_null))
\r
287 Goal.team_str_moved = Goal.t_s_m;
\r
289 if ((Goal.t_s_c != string_null))
\r
291 Goal.team_str_carried = Goal.t_s_c;
\r
293 if ((Goal.n_s_h != string_null))
\r
295 Goal.non_team_str_home = Goal.n_s_h;
\r
297 if ((Goal.n_s_m != string_null))
\r
299 Goal.non_team_str_moved = Goal.n_s_m;
\r
301 if ((Goal.n_s_c != string_null))
\r
303 Goal.non_team_str_carried = Goal.n_s_c;
\r
305 if ((Goal.b_b != string_null))
\r
307 Goal.broadcast = Goal.b_b;
\r
309 if ((Goal.b_t != string_null))
\r
311 Goal.team_broadcast = Goal.b_t;
\r
313 if ((Goal.b_n != string_null))
\r
315 Goal.non_team_broadcast = Goal.b_n;
\r
317 if ((Goal.b_o != string_null))
\r
319 Goal.owners_team_broadcast = Goal.b_o;
\r
321 if ((Goal.n_b != string_null))
\r
323 Goal.netname_broadcast = Goal.n_b;
\r
325 if ((Goal.n_t != string_null))
\r
327 Goal.netname_team_broadcast = Goal.n_t;
\r
329 if ((Goal.n_n != string_null))
\r
331 Goal.netname_non_team_broadcast = Goal.n_n;
\r
333 if ((Goal.n_o != string_null))
\r
335 Goal.netname_owners_team_broadcast = Goal.n_o;
\r
337 if ((Goal.d_t != string_null))
\r
339 Goal.team_drop = Goal.d_t;
\r
341 if ((Goal.d_n != string_null))
\r
343 Goal.non_team_drop = Goal.d_n;
\r
345 if ((Goal.d_n_t != string_null))
\r
347 Goal.netname_team_drop = Goal.d_n_t;
\r
349 if ((Goal.d_n_n != string_null))
\r
351 Goal.netname_non_team_drop = Goal.d_n_n;
\r
353 if ((flagem_checked == 0))
\r
355 if ((cvar ("temp1") & 4096))
\r
357 toggleflags = (toggleflags | 4096);
\r
359 if ((cvar ("temp1") & 8192))
\r
361 toggleflags = (toggleflags | 8192);
\r
363 flagem_checked = 1;
\r
365 if (((toggleflags & 4096) && !(toggleflags & 8192)))
\r
367 if ((((Goal.mdl == "progs/b_s_key.mdl") || (Goal.mdl == "progs/m_s_key.mdl")) || (Goal.mdl == "progs/w_s_key.mdl")))
\r
369 Goal.mdl = "progs/tf_flag.mdl";
\r
374 if ((((Goal.mdl == "progs/b_g_key.mdl") || (Goal.mdl == "progs/m_g_key.mdl")) || (Goal.mdl == "progs/w_g_key.mdl")))
\r
376 Goal.mdl = "progs/tf_flag.mdl";
\r
381 if ((toggleflags & 8192))
\r
383 if ((((Goal.mdl == "progs/b_s_key.mdl") || (Goal.mdl == "progs/m_s_key.mdl")) || (Goal.mdl == "progs/w_s_key.mdl")))
\r
385 Goal.mdl = "progs/tf_stan.mdl";
\r
390 if ((((Goal.mdl == "progs/b_g_key.mdl") || (Goal.mdl == "progs/m_g_key.mdl")) || (Goal.mdl == "progs/w_g_key.mdl")))
\r
392 Goal.mdl = "progs/tf_stan.mdl";
\r
397 if ((Goal.mdl == "progs/tf_flag.mdl"))
\r
399 Goal.mdl = "progs/tf_stan.mdl";
\r
404 Goal.has_abbreviated = 1;
\r
408 void () TF_PlaceItem =
\r
410 self.flags = 256.000000;
\r
411 self.movetype = 0.000000;
\r
412 self.velocity = '0.000000 0.000000 0.000000';
\r
413 self.oldorigin = self.origin;
\r
414 if ((self.goal_activation & 512.000000))
\r
416 self.effects = (self.effects | 8.000000);
\r
418 if ((item_list_bit == 0.000000))
\r
420 item_list_bit = 1.000000;
\r
422 self.item_list = item_list_bit;
\r
423 item_list_bit = item_list_bit * 2.000000;
\r
426 void () TF_StartItem =
\r
429 UpdateAbbreviations (self);
\r
430 self.nextthink = (time + 0.200000);
\r
431 self.think = TF_PlaceItem;
\r
432 if ((self.goal_state == 3.000000))
\r
438 void () TF_PlaceGoal =
\r
440 if ((self.classname != "info_tfgoal_timer"))
\r
442 if ((self.goal_activation & 1.000000))
\r
444 self.touch = tfgoal_touch;
\r
449 self.think = tfgoal_timer_tick;
\r
450 self.nextthink = (time + self.search_time);
\r
451 self.classname = "info_tfgoal";
\r
453 self.flags = 256.000000;
\r
454 self.movetype = 0.000000;
\r
455 self.velocity = '0.000000 0.000000 0.000000';
\r
456 self.oldorigin = self.origin;
\r
459 void () TF_StartGoal =
\r
462 UpdateAbbreviations (self);
\r
463 self.nextthink = (time + 0.200000);
\r
464 self.think = TF_PlaceGoal;
\r
465 self.use = info_tfgoal_use;
\r
466 if ((self.goal_state == 3.000000))
\r
472 float() CheckExistence =
\r
475 UpdateAbbreviations (self);
\r
476 if ((self.ex_skill_min && (skill <= self.ex_skill_min)))
\r
482 if ((self.ex_skill_max && (skill >= self.ex_skill_max)))
\r
490 /* // ORIG NETQUAKETF INFO_TFDETECT
\r
491 void () info_tfdetect =
\r
493 UpdateAbbreviations (self);
\r
497 /*void () info_tfdetect =
\r
502 UpdateAbbreviations (self);
\r
505 te = find (world,classname,"countdown");
\r
511 st = infokey (world,"time"); // Unfortunately DP Engine doesnt support this (qw funct)
\r
517 newmis.classname = "countdown";
\r
518 newmis.no_grenades_1 = 0;
\r
519 st = infokey (world,"timelimit");
\r
520 newmis.health = stof(st);
\r
521 newmis.think = review_timeleft;
\r
522 newmis.nextthink = (time + 1);
\r
525 // MESSAGE DISP CODE
\r
526 if (haltloop1 != 1)
\r
528 local string msg1timer;
\r
530 msg1timer = infokey (world, "svmsg1");
\r
531 msg1time = stof(msg1timer);
\r
535 display_message ();
\r
540 if (haltloop2 != 1)
\r
542 local string msg2timer;
\r
544 msg2timer = infokey (world, "svmsg2");
\r
545 msg2time = stof(msg2timer);
\r
549 pre_messagetimer2 ();
\r
554 if (haltloop3 != 1)
\r
556 local string msg3timer;
\r
558 msg3timer = infokey (world, "svmsg3");
\r
559 msg3time = stof(msg3timer);
\r
563 pre_messagetimer3 ();
\r
567 if (quotestart != 1) {
\r
571 // Auto Level-change fix
\r
574 /* Gold. this is the old info_tfdetect... new one is above*/
\r
575 void() info_tfdetect =
\r
577 UpdateAbbreviations(self);
\r
578 /*gold. next 6 lines are part of plexi's code for the "timeleft" command.
\r
580 newmis.classname = "countdown";
\r
581 newmis.netname = "countdown";
\r
582 newmis.no_grenades_1 = 0;
\r
583 newmis.think = review_timeleft;
\r
584 newmis.nextthink = (time + 1);*/
\r
587 void() info_player_teamspawn =
\r
590 if (CheckExistence() == 0)
\r
595 if (number_of_teams < self.team_no)
\r
597 number_of_teams = self.team_no;
\r
599 if (self.team_no <= 0)
\r
601 dprint("no team_no associated with info_player_teamspawn\n");
\r
604 if (self.items != 0)
\r
606 te = Finditem(self.items);
\r
609 dprint("info_player_teamspawn specifies a GoalItem that does not exist\n");
\r
613 if (self.team_no == 1)
\r
615 self.team_str_home = "ts1";
\r
619 if (self.team_no == 2)
\r
621 self.team_str_home = "ts2";
\r
625 if (self.team_no == 3)
\r
627 self.team_str_home = "ts3";
\r
631 if (self.team_no == 4)
\r
633 self.team_str_home = "ts4";
\r
642 self.classname = "info_player_teamspawn";
\r
643 info_player_teamspawn();
\r
646 void() info_tfgoal =
\r
648 if (CheckExistence() == 0)
\r
655 precache_model(self.mdl);
\r
656 precache_model2(self.mdl);
\r
657 setmodel(self, self.mdl);
\r
661 precache_sound(self.noise);
\r
662 precache_sound2(self.noise);
\r
666 if (self.mdl == "progs/backpack.mdl")
\r
668 precache_sound("items/backpack.wav");
\r
669 precache_sound2("items/backpack.wav");
\r
670 self.noise = "items/backpack.wav";
\r
673 precache_sound("items/protect.wav");
\r
674 precache_sound("items/protect2.wav");
\r
675 precache_sound("items/protect3.wav");
\r
676 precache_sound("items/suit.wav");
\r
677 precache_sound("items/suit2.wav");
\r
678 precache_sound("items/inv1.wav");
\r
679 precache_sound("items/inv2.wav");
\r
680 precache_sound("items/inv3.wav");
\r
681 precache_sound("items/damage.wav");
\r
682 precache_sound("items/damage2.wav");
\r
683 precache_sound("items/damage3.wav");
\r
685 if (self.goal_state == 0)
\r
687 self.goal_state = 2;
\r
689 if (self.goal_min != '0 0 0')
\r
691 setsize(self, self.goal_min, self.goal_max);
\r
695 setsize(self, '-16 -16 -24', '16 16 32');
\r
702 self.classname = "info_tfgoal";
\r
706 void() info_tfgoal_timer =
\r
708 if (CheckExistence() == 0)
\r
715 precache_model(self.mdl);
\r
716 precache_model2(self.mdl);
\r
717 setmodel(self, self.mdl);
\r
721 precache_sound(self.noise);
\r
722 precache_sound2(self.noise);
\r
724 if (self.search_time <= 0)
\r
726 dprint("Timer Goal created with no specified time.\n");
\r
730 if (self.goal_state == 0)
\r
732 self.goal_state = 2;
\r
734 setsize(self, '-16 -16 -24', '16 16 32');
\r
740 self.classname = "info_tfgoal_timer";
\r
741 info_tfgoal_timer();
\r
744 void() item_tfgoal =
\r
746 if (CheckExistence() == 0)
\r
753 precache_model(self.mdl);
\r
754 precache_model2(self.mdl);
\r
755 setmodel(self, self.mdl);
\r
760 setmodel(self, "");
\r
762 precache_sound2("items/itembk2.wav");
\r
765 precache_sound(self.noise);
\r
766 precache_sound2(self.noise);
\r
768 self.touch = item_tfgoal_touch;
\r
769 if (self.goal_state == 0)
\r
771 self.goal_state = 2;
\r
774 setorigin(self, self.origin);
\r
775 if (!(self.netname))
\r
777 self.netname = "goalitem";
\r
779 if (self.pausetime <= 0)
\r
781 self.pausetime = 60;
\r
783 if (self.delay != 0 && self.pausetime == 0)
\r
785 self.pausetime = self.delay;
\r
787 setsize(self, '-16 -16 -24', '16 16 32');
\r
791 void (entity AD) ParseTFDetect =
\r
793 if ((AD.team_broadcast != string_null))
\r
795 team_menu_string = AD.team_broadcast;
\r
797 localcmd (AD.message);
\r
798 cvar_set ("sv_maxspeed", "500");
\r
799 team1lives = AD.ammo_shells;
\r
800 team2lives = AD.ammo_nails;
\r
801 team3lives = AD.ammo_rockets;
\r
802 team4lives = AD.ammo_cells;
\r
803 if ((team1lives == 0))
\r
807 if ((team2lives == 0))
\r
811 if ((team3lives == 0))
\r
815 if ((team4lives == 0))
\r
819 /*if ((AD.hook_out == 1)) // Hook always allowed, right?
\r
823 team1maxplayers = AD.ammo_medikit;
\r
824 team2maxplayers = AD.ammo_detpack;
\r
825 team3maxplayers = AD.maxammo_medikit;
\r
826 team4maxplayers = AD.maxammo_detpack;
\r
827 if ((team1maxplayers == 0))
\r
829 team1maxplayers = 100;
\r
831 if ((team2maxplayers == 0))
\r
833 team2maxplayers = 100;
\r
835 if ((team3maxplayers == 0))
\r
837 team3maxplayers = 100;
\r
839 if ((team4maxplayers == 0))
\r
841 team4maxplayers = 100;
\r
843 illegalclasses = AD.playerclass;
\r
844 // illegalclasses = AD.class;
\r
845 illegalclasses1 = AD.maxammo_shells;
\r
846 illegalclasses2 = AD.maxammo_nails;
\r
847 illegalclasses3 = AD.maxammo_rockets;
\r
848 illegalclasses4 = AD.maxammo_cells;
\r
850 if ((illegalclasses1 == -1))
\r
852 illegalclasses1 = 0;
\r
853 civilianteams = (civilianteams | 1);
\r
855 if ((illegalclasses2 == -1))
\r
857 illegalclasses2 = 0;
\r
858 civilianteams = (civilianteams | 2);
\r
860 if ((illegalclasses3 == -1))
\r
862 illegalclasses3 = 0;
\r
863 civilianteams = (civilianteams | 4);
\r
865 if ((illegalclasses4 == -1))
\r
867 illegalclasses4 = 0;
\r
868 civilianteams = (civilianteams | 8);
\r
872 entity(float ino) Finditem =
\r
876 tg = find(world, classname, "item_tfgoal");
\r
879 if (tg.goal_no == ino)
\r
883 tg = find(tg, classname, "item_tfgoal");
\r
885 dprint("Could not find an item with a goal_no of ");
\r
892 /*entity(float gno) Findgoal = // moved to tffunctions
\r
896 tg = find(world, classname, "info_tfgoal");
\r
899 if (tg.goal_no == gno)
\r
903 tg = find(tg, classname, "info_tfgoal");
\r
905 dprint("Could not find a goal with a goal_no of ");
\r
911 entity(float gno) Findteamspawn =
\r
915 tg = find(world, classname, "info_player_teamspawn");
\r
918 if (tg.goal_no == gno)
\r
922 tg = find(tg, classname, "info_player_teamspawn");
\r
924 dprint("Could not find a Teamspawn with a goal_no of ");
\r
930 void(entity Goal) InactivateGoal =
\r
932 if (Goal.goal_state == 1)
\r
934 if (Goal.search_time == 0)
\r
938 Goal.goal_state = 2;
\r
939 if (Goal.mdl != string_null)
\r
941 setmodel(Goal, Goal.mdl);
\r
946 void(entity Goal) RestoreGoal =
\r
948 if (Goal.goal_state == 3)
\r
950 if (Goal.search_time == 0)
\r
956 Goal.nextthink = time + Goal.search_time;
\r
958 Goal.goal_state = 2;
\r
959 if (Goal.mdl != string_null)
\r
961 setmodel(Goal, Goal.mdl);
\r
966 void(entity Goal) RemoveGoal =
\r
969 Goal.goal_state = 3;
\r
970 if (Goal.mdl != string_null)
\r
972 setmodel(Goal, string_null);
\r
976 float(entity Goal, entity Player, entity AP) IsAffectedBy =
\r
979 //if (Player.playerclass == 0)
\r
980 if (Player.class == 0)
\r
984 if (Goal.goal_effects & 32)
\r
986 genv = pointcontents(Goal.origin);
\r
987 if (pointcontents(Player.origin) != genv)
\r
992 if (Goal.t_length != 0)
\r
994 if (vlen(Goal.origin - Player.origin) <= Goal.t_length)
\r
996 if (Goal.goal_effects & 16)
\r
998 traceline(Goal.origin, Player.origin, 1, Goal);
\r
999 if (trace_fraction == 1)
\r
1010 if (Goal.classname != "info_tfgoal_timer")
\r
1012 if (Goal.goal_effects & 1 && Player == AP)
\r
1016 if (Goal.goal_effects & 2 && AP.team_no == Player.team_no)
\r
1020 if (Goal.goal_effects & 4 && AP.team_no != Player.team_no)
\r
1024 if (Goal.goal_effects & 8 && Player != AP)
\r
1029 if (Goal.maxammo_shells != 0 && Player.team_no == Goal.maxammo_shells)
\r
1033 if (Goal.maxammo_nails != 0 && Player.team_no != Goal.maxammo_shells)
\r
1040 void(entity Goal, entity Player, entity AP, float addb) Apply_Results =
\r
1042 local entity oldself;
\r
1044 local entity oldte;
\r
1046 stuffcmd(Player, "bf\n");
\r
1047 if (Goal.classname == "item_tfgoal")
\r
1049 Player.item_list = Player.item_list | Goal.item_list;
\r
1053 if (Goal.count != 0)
\r
1055 if (Player.team_no > 0)
\r
1057 TeamFortress_TeamIncreaseScore(Player.team_no, Goal.count);
\r
1058 TeamFortress_TeamShowScores(2);
\r
1064 if (Player.health > 0)
\r
1066 if (Goal.health > 0)
\r
1068 T_Heal(Player, Goal.health, 0);
\r
1070 if (Goal.health < 0)
\r
1072 if (0 - Player.health > Goal.health)
\r
1074 Player.armorvalue = 0;
\r
1075 T_Damage(Player, Goal, Goal, Player.health + 1);
\r
1079 oa = Player.armorvalue;
\r
1080 Player.armorvalue = 0;
\r
1081 T_Damage(Player, Goal, Goal, 0 - Goal.health);
\r
1082 Player.armorvalue = oa;
\r
1086 if (Player.health > 0)
\r
1088 if (Goal.armortype)
\r
1091 // Player.armortype = Goal.armortype; // Armor type needs to be tweaked in this game
\r
1093 Player.armorvalue = Player.armorvalue + Goal.armorvalue;
\r
1094 if (Goal.armorclass)
\r
1096 Player.armorclass = Goal.armorclass;
\r
1098 if (Goal.gravity > 0)
\r
1100 Player.gravity = Goal.gravity;
\r
1102 Player.ammo_shells = Player.ammo_shells + Goal.ammo_shells;
\r
1103 Player.ammo_nails = Player.ammo_nails + Goal.ammo_nails;
\r
1104 Player.ammo_rockets = Player.ammo_rockets + Goal.ammo_rockets;
\r
1105 Player.ammo_cells = Player.ammo_cells + Goal.ammo_cells;
\r
1106 Player.ammo_metal = Player.ammo_metal + Goal.ammo_metal; // give metal
\r
1107 Player.ammo_medikit = Player.ammo_medikit + Goal.ammo_medikit;
\r
1108 Player.ammo_detpack = Player.ammo_detpack + Goal.ammo_detpack;
\r
1109 Player.no_grenades_1 = Player.no_grenades_1 + Goal.no_grenades_1;
\r
1110 Player.no_grenades_2 = Player.no_grenades_2 + Goal.no_grenades_2;
\r
1111 if (Player.no_grenades_1 > 4)
\r
1113 Player.no_grenades_1 = 4;
\r
1115 if (Player.no_grenades_2 > 4)
\r
1117 Player.no_grenades_2 = 4;
\r
1119 if (Player.ammo_detpack > Player.maxammo_detpack)
\r
1121 Player.ammo_detpack = Player.maxammo_detpack;
\r
1123 if (Goal.invincible_finished > 0)
\r
1125 Player.items = Player.items | 1048576;
\r
1126 Player.invincible_time = 1;
\r
1127 Player.invincible_finished = time + Goal.invincible_finished;
\r
1128 if (Goal.classname == "item_tfgoal")
\r
1130 Player.tfstate = Player.tfstate | 32;
\r
1131 Player.invincible_finished = time + 666;
\r
1134 /*if (Goal.invisible_finished > 0) // NexTF doesnt support invisibility?
\r
1136 Player.items = Player.items | 524288;
\r
1137 Player.invisible_time = 1;
\r
1138 Player.invisible_finished = time + Goal.invisible_finished;
\r
1139 if (Goal.classname == "item_tfgoal")
\r
1141 Player.tfstate = Player.tfstate | 64;
\r
1142 Player.invisible_finished = time + 666;
\r
1145 if (Goal.super_damage_finished > 0)
\r
1147 Player.items = Player.items | 4194304;
\r
1148 Player.super_time = 1;
\r
1149 Player.super_damage_finished = time + Goal.super_damage_finished;
\r
1150 if (Goal.classname == "item_tfgoal")
\r
1152 Player.tfstate = Player.tfstate | 128;
\r
1153 Player.super_damage_finished = time + 666;
\r
1156 if (Goal.radsuit_finished > 0)
\r
1158 Player.items = Player.items | 2097152;
\r
1159 Player.rad_time = 1;
\r
1160 Player.radsuit_finished = time + Goal.radsuit_finished;
\r
1161 if (Goal.classname == "item_tfgoal")
\r
1163 Player.tfstate = Player.tfstate | 256;
\r
1164 Player.radsuit_finished = time + 666;
\r
1168 Player.lives = Player.lives + Goal.lives;
\r
1169 Player.real_frags = /*Player.real_frags + */Goal.frags + Player.frags; // Fixed?
\r
1170 if (!(toggleflags & 128))
\r
1172 Player.frags = Player.real_frags;
\r
1177 TeamFortress_CheckClassStats();
\r
1178 //W_SetCurrentAmmo(); // This is automatic in nexuiz right?
\r
1181 //if (Player.playerclass == 8 && (Goal.goal_result & 16)) // In nextf, spy class is "2"
\r
1182 if (Player.class == CLASS_SPY && (Goal.goal_result & 16))
\r
1184 self.immune_to_check = time + 4;
\r
1185 //Spy_RemoveDisguise(Player); // Wazat -- help [incomplete]
\r
1187 if (Goal.items != 0 && Goal.classname != "item_tfgoal")
\r
1189 te = Finditem(Goal.items);
\r
1192 tfgoalitem_GiveToPlayer(te, Player, Goal);
\r
1195 if (Goal.axhitme != 0)
\r
1197 te = Finditem(Goal.axhitme);
\r
1198 if (te.owner == Player)
\r
1200 tfgoalitem_RemoveFromPlayer(te, Player, 1);
\r
1203 if (Goal.remove_item_group != 0)
\r
1205 te = find(world, classname, "item_tfgoal");
\r
1208 if (te.group_no == Goal.remove_item_group && te.owner == AP)
\r
1211 te = find(te, classname, "item_tfgoal");
\r
1212 tfgoalitem_RemoveFromPlayer(oldte, Player, 1);
\r
1216 te = find(te, classname, "item_tfgoal");
\r
1220 if (Goal.display_item_status1 != 0)
\r
1222 te = Finditem(Goal.display_item_status1);
\r
1225 DisplayItemStatus(Goal, Player, te);
\r
1229 sprint(Player,"Item is missing.\n");
\r
1232 if (Goal.display_item_status2 != 0)
\r
1234 te = Finditem(Goal.display_item_status2);
\r
1237 DisplayItemStatus(Goal, Player, te);
\r
1241 sprint(Player,"Item is missing.\n");
\r
1244 if (Goal.display_item_status3 != 0)
\r
1246 te = Finditem(Goal.display_item_status3);
\r
1249 DisplayItemStatus(Goal, Player, te);
\r
1253 sprint(Player,"Item is missing.\n");
\r
1256 if (Goal.display_item_status4 != 0)
\r
1258 te = Finditem(Goal.display_item_status4);
\r
1261 DisplayItemStatus(Goal, Player, te);
\r
1265 sprint(Player,"Item is missing.\n");
\r
1268 // New Team:Nexuiz function: "switch_teams" property -- switches all team-related objects to the opposite
\r
1269 // team (ie self.team_no equal to "1" is now equal to "2" and vise verse). It will not switch team items
\r
1270 // which have a "no_switch_team" property set.
\r
1271 if (Goal.switch_teams)
\r
1273 local entity t_ent;
\r
1275 t_ent = find (world,classname,"item_tfgoal");
\r
1278 if (t_ent.team_no && !t_ent.no_switch_team)
\r
1280 if (t_ent.team_no == 1)
\r
1281 t_ent.team_no = 2;
\r
1282 if (t_ent.team_no == 2)
\r
1283 t_ent.team_no = 1;
\r
1285 t_ent = find (t_ent, classname, "item_tfgoal");
\r
1287 t_ent = find (world,classname,"info_tfgoal");
\r
1290 if (t_ent.team_no && !t_ent.no_switch_team)
\r
1292 if (t_ent.team_no == 1)
\r
1293 t_ent.team_no = 2;
\r
1294 if (t_ent.team_no == 2)
\r
1295 t_ent.team_no = 1;
\r
1297 t_ent = find (t_ent, classname, "info_tfgoal");
\r
1299 t_ent = find (world,classname,"func_door");
\r
1302 if (t_ent.team_no && !t_ent.no_switch_team)
\r
1304 if (t_ent.team_no == 1)
\r
1305 t_ent.team_no = 2;
\r
1306 if (t_ent.team_no == 2)
\r
1307 t_ent.team_no = 1;
\r
1309 t_ent = find (t_ent, classname, "func_door");
\r
1311 t_ent = find (world,classname,"trigger_hurt");
\r
1314 if (t_ent.team_no && !t_ent.no_switch_team)
\r
1316 if (t_ent.team_no == 1)
\r
1317 t_ent.team_no = 2;
\r
1318 if (t_ent.team_no == 2)
\r
1319 t_ent.team_no = 1;
\r
1321 t_ent = find (t_ent, classname, "trigger_hurt");
\r
1323 t_ent = find (world,classname,"trigger_multiple");
\r
1326 if (t_ent.team_no && !t_ent.no_switch_team)
\r
1328 if (t_ent.team_no == 1)
\r
1329 t_ent.team_no = 2;t_ent.owned_by_team_no = 2;
\r
1330 if (t_ent.team_no == 2)
\r
1331 t_ent.team_no = 1;
\r
1333 t_ent = find (t_ent, classname, "trigger_multiple");
\r
1336 /*if (Player.autodiscard) //Not a function in NexTF
\r
1340 TeamFortress_Discard ();
\r
1345 void(entity Goal, entity Player) RemoveResults =
\r
1347 local entity oldself;
\r
1349 local float puinvin;
\r
1350 local float puinvis;
\r
1351 local float puquad;
\r
1352 local float purad;
\r
1353 if (Goal.classname == "item_tfgoal")
\r
1355 if (!(Player.item_list & Goal.item_list))
\r
1359 if (Goal.goal_activation & 1024)
\r
1363 Player.item_list = Player.item_list - (Player.item_list & Goal.item_list);
\r
1365 if (Goal.health > 0)
\r
1367 TF_T_Damage(Player, Goal, Goal, Goal.health, 1, 0);
\r
1369 if (Goal.health < 0)
\r
1371 T_Heal(Player, 0 - Goal.health, 0);
\r
1373 Player.lives = Player.lives - Goal.lives;
\r
1374 Player.armortype = Player.armortype - Goal.armortype;
\r
1375 Player.armorvalue = Player.armorvalue - Goal.armorvalue;
\r
1376 Player.armorclass = Player.armorclass - (Player.armorclass & Goal.armorclass);
\r
1377 Player.real_frags = Player.real_frags - Goal.frags;
\r
1378 if (!(toggleflags & 128))
\r
1380 Player.frags = Player.real_frags;
\r
1382 Player.ammo_shells = Player.ammo_shells - Goal.ammo_shells;
\r
1383 Player.ammo_nails = Player.ammo_nails - Goal.ammo_nails;
\r
1384 Player.ammo_rockets = Player.ammo_rockets - Goal.ammo_rockets;
\r
1385 Player.ammo_cells = Player.ammo_cells - Goal.ammo_cells;
\r
1386 Player.ammo_metal = Player.ammo_metal - Goal.ammo_metal; // take metal
\r
1387 Player.ammo_medikit = Player.ammo_medikit - Goal.ammo_medikit;
\r
1388 Player.ammo_detpack = Player.ammo_detpack - Goal.ammo_detpack;
\r
1389 Player.no_grenades_1 = Player.no_grenades_1 - Goal.no_grenades_1;
\r
1390 Player.no_grenades_2 = Player.no_grenades_2 - Goal.no_grenades_2;
\r
1395 te = find(world, classname, "item_tfgoal");
\r
1398 if (te.owner == Player && te != Goal)
\r
1400 if (te.invincible_finished > 0)
\r
1404 if (te.invisible_finished > 0)
\r
1408 if (te.super_damage_finished > 0)
\r
1412 if (te.radsuit_finished > 0)
\r
1417 te = find(te, classname, "item_tfgoal");
\r
1419 if (Goal.invincible_finished > 0 && !puinvin)
\r
1421 Player.tfstate = Player.tfstate - (Player.tfstate & 32);
\r
1422 Player.items = Player.items | 1048576;
\r
1423 Player.invincible_time = 1;
\r
1424 Player.invincible_finished = time + Goal.invincible_finished;
\r
1426 if (Goal.invisible_finished > 0 && !puinvis)
\r
1428 Player.tfstate = Player.tfstate - (Player.tfstate & 64);
\r
1429 Player.items = Player.items | 524288;
\r
1430 Player.invisible_time = 1;
\r
1431 Player.invisible_finished = time + Goal.invisible_finished;
\r
1433 if (Goal.super_damage_finished > 0 && !puquad)
\r
1435 Player.tfstate = Player.tfstate - (Player.tfstate & 128);
\r
1436 Player.items = Player.items | 4194304;
\r
1437 Player.super_time = 1;
\r
1438 Player.super_damage_finished = time + Goal.super_damage_finished;
\r
1440 if (Goal.radsuit_finished > 0 && !purad)
\r
1442 Player.tfstate = Player.tfstate - (Player.tfstate & 256);
\r
1443 Player.items = Player.items | 2097152;
\r
1444 Player.rad_time = 1;
\r
1445 Player.radsuit_finished = time + Goal.radsuit_finished;
\r
1449 TeamFortress_CheckClassStats();
\r
1450 //W_SetCurrentAmmo(); // automatic in nexuiz?
\r
1454 float(entity Goal, entity AP) APMeetsCriteria =
\r
1456 local float gotone;
\r
1462 if (Goal.team_no != AP.team_no)
\r
1467 if (Goal.playerclass)
\r
1469 if (Goal.playerclass != AP.playerclass)
\r
1476 if (Goal.class != AP.class)
\r
1481 if (Goal.items_allowed)
\r
1483 te = Finditem(Goal.items_allowed);
\r
1484 if (te.owner != AP)
\r
1490 if (Goal.if_goal_is_active)
\r
1492 te = Findgoal(Goal.if_goal_is_active);
\r
1493 if (te.goal_state != 1)
\r
1498 if (Goal.if_goal_is_inactive)
\r
1500 te = Findgoal(Goal.if_goal_is_inactive);
\r
1501 if (te.goal_state != 2)
\r
1506 if (Goal.if_goal_is_removed)
\r
1508 te = Findgoal(Goal.if_goal_is_removed);
\r
1509 if (te.goal_state != 3)
\r
1514 if (Goal.if_group_is_active)
\r
1516 te = find(world, classname, "info_tfgoal");
\r
1519 if (te.group_no == Goal.if_group_is_active)
\r
1521 if (te.goal_state != 1)
\r
1526 te = find(te, classname, "info_tfgoal");
\r
1529 if (Goal.if_group_is_inactive)
\r
1531 te = find(world, classname, "info_tfgoal");
\r
1534 if (te.group_no == Goal.if_group_is_inactive)
\r
1536 if (te.goal_state != 2)
\r
1541 te = find(te, classname, "info_tfgoal");
\r
1544 if (Goal.if_group_is_removed)
\r
1546 te = find(world, classname, "info_tfgoal");
\r
1549 if (te.group_no == Goal.if_group_is_removed)
\r
1551 if (te.goal_state != 3)
\r
1556 te = find(te, classname, "info_tfgoal");
\r
1559 if (Goal.if_item_has_moved)
\r
1561 te = Finditem(Goal.if_item_has_moved);
\r
1564 if (te.goal_state != 1 && te.origin == te.oldorigin)
\r
1570 if (Goal.if_item_hasnt_moved)
\r
1572 te = Finditem(Goal.if_item_hasnt_moved);
\r
1575 if (te.goal_state == 1 || te.origin != te.oldorigin)
\r
1584 if (Goal.has_item_from_group)
\r
1586 te = find(world, classname, "item_tfgoal");
\r
1587 while (te != world && !gotone)
\r
1589 if (te.group_no == Goal.has_item_from_group && te.owner == AP)
\r
1593 te = find(te, classname, "item_tfgoal");
\r
1604 void(entity Goal) SetupRespawn =
\r
1606 if (Goal.search_time != 0)
\r
1608 InactivateGoal(Goal);
\r
1609 Goal.think = tfgoal_timer_tick;
\r
1610 Goal.nextthink = time + Goal.search_time;
\r
1613 if (Goal.goal_result & 1)
\r
1618 if (Goal.wait > 0)
\r
1620 Goal.nextthink = time + Goal.wait;
\r
1621 Goal.think = DoRespawn;
\r
1626 if (Goal.wait == -1)
\r
1631 InactivateGoal(Goal);
\r
1634 void() DoRespawn =
\r
1636 RestoreGoal(self);
\r
1637 InactivateGoal(self);
\r
1640 float(entity Goal, entity AP) Activated =
\r
1642 local float APMet;
\r
1643 local float RevAct;
\r
1645 if (Goal.goal_state == 1)
\r
1649 if (Goal.goal_state == 3)
\r
1653 if (Goal.goal_state == 4)
\r
1657 APMet = APMeetsCriteria(Goal, AP);
\r
1658 if (Goal.classname == "item_tfgoal")
\r
1660 RevAct = Goal.goal_activation & 64;
\r
1664 RevAct = Goal.goal_activation & 4;
\r
1684 void(entity Goal, entity AP) DoGoalWork =
\r
1688 if (Goal.activate_goal_no != 0)
\r
1690 te = Findgoal(Goal.activate_goal_no);
\r
1693 AttemptToActivate(te, AP, Goal);
\r
1696 if (Goal.inactivate_goal_no != 0)
\r
1698 te = Findgoal(Goal.inactivate_goal_no);
\r
1701 InactivateGoal(te);
\r
1704 if (Goal.restore_goal_no != 0)
\r
1706 te = Findgoal(Goal.restore_goal_no);
\r
1712 if (Goal.remove_goal_no != 0)
\r
1714 te = Findgoal(Goal.remove_goal_no);
\r
1720 if (Goal.return_item_no != 0)
\r
1722 te = Finditem(Goal.return_item_no);
\r
1725 if (te.goal_state == 1)
\r
1727 tfgoalitem_RemoveFromPlayer(te, te.owner, 1);
\r
1731 RI.think = ReturnItem;
\r
1732 RI.nextthink = time + 0.1;
\r
1736 if (Goal.remove_spawnpoint != 0)
\r
1738 te = Findteamspawn(Goal.remove_spawnpoint);
\r
1741 te.goal_state = 3;
\r
1742 te.team_str_home = string_null;
\r
1745 if (Goal.restore_spawnpoint != 0)
\r
1747 te = Findteamspawn(Goal.restore_spawnpoint);
\r
1750 if (te.goal_state == 3)
\r
1752 te.goal_state = 2;
\r
1753 if (te.team_no == 1)
\r
1755 te.team_str_home = "ts1";
\r
1759 if (te.team_no == 2)
\r
1761 te.team_str_home = "ts2";
\r
1765 if (te.team_no == 3)
\r
1767 te.team_str_home = "ts3";
\r
1771 if (te.team_no == 4)
\r
1773 te.team_str_home = "ts4";
\r
1783 void(entity Goal, entity AP) DoGroupWork =
\r
1787 local float allset;
\r
1788 if (Goal.all_active != 0)
\r
1790 if (Goal.last_impulse == 0)
\r
1793 st = ftos(Goal.goal_no);
\r
1795 dprint(" has a .all_active specified, but no .last_impulse\n");
\r
1800 tg = find(world, classname, "info_tfgoal");
\r
1803 if (tg.group_no == Goal.all_active)
\r
1805 if (tg.goal_state != 1)
\r
1810 tg = find(tg, classname, "info_tfgoal");
\r
1814 tg = Findgoal(Goal.last_impulse);
\r
1817 DoResults(tg, AP, Goal.goal_result & 2);
\r
1822 if (Goal.activate_group_no != 0)
\r
1824 tg = find(world, classname, "info_tfgoal");
\r
1827 if (tg.group_no == Goal.activate_group_no)
\r
1829 DoResults(tg, AP, 0);
\r
1831 tg = find(tg, classname, "info_tfgoal");
\r
1834 if (Goal.inactivate_group_no != 0)
\r
1836 tg = find(world, classname, "info_tfgoal");
\r
1839 if (tg.group_no == Goal.inactivate_group_no)
\r
1841 InactivateGoal(tg);
\r
1843 tg = find(tg, classname, "info_tfgoal");
\r
1846 if (Goal.remove_group_no != 0)
\r
1848 tg = find(world, classname, "info_tfgoal");
\r
1851 if (tg.group_no == Goal.remove_group_no)
\r
1855 tg = find(tg, classname, "info_tfgoal");
\r
1858 if (Goal.restore_group_no != 0)
\r
1860 tg = find(world, classname, "info_tfgoal");
\r
1863 if (tg.group_no == Goal.restore_group_no)
\r
1867 tg = find(tg, classname, "info_tfgoal");
\r
1870 if (Goal.remove_spawngroup != 0)
\r
1872 tg = find(world, classname, "info_player_teamspawn");
\r
1875 if (tg.group_no == Goal.remove_spawngroup)
\r
1877 tg.goal_state = 3;
\r
1878 tg.team_str_home = string_null;
\r
1880 tg = find(tg, classname, "info_player_teamspawn");
\r
1883 if (Goal.restore_spawngroup != 0)
\r
1885 tg = find(world, classname, "info_player_teamspawn");
\r
1888 if (tg.group_no == Goal.restore_spawngroup)
\r
1890 tg.goal_state = 2;
\r
1891 if (tg.team_no == 1)
\r
1893 tg.team_str_home = "ts1";
\r
1897 if (tg.team_no == 2)
\r
1899 tg.team_str_home = "ts2";
\r
1903 if (tg.team_no == 3)
\r
1905 tg.team_str_home = "ts3";
\r
1909 if (tg.team_no == 4)
\r
1911 tg.team_str_home = "ts4";
\r
1917 tg = find(tg, classname, "info_player_teamspawn");
\r
1922 void(entity Item, entity AP) DoItemGroupWork =
\r
1925 local entity carrier;
\r
1926 local float allcarried;
\r
1929 if (Item.distance != 0)
\r
1931 if (Item.pain_finished == 0)
\r
1933 dprint("GoalItem ");
\r
1934 st = ftos(Item.goal_no);
\r
1936 dprint(" has a .distance specified, but no .pain_finished\n");
\r
1938 tg = find(world, classname, "item_tfgoal");
\r
1941 if (tg.group_no == Item.distance)
\r
1943 if (tg.goal_state != 1)
\r
1948 tg = find(tg, classname, "item_tfgoal");
\r
1950 if (allcarried == 1)
\r
1952 tg = Findgoal(Item.pain_finished);
\r
1955 DoResults(tg, AP, Item.goal_result & 2);
\r
1960 if (Item.speed != 0)
\r
1962 if (Item.attack_finished == 0)
\r
1964 dprint("GoalItem ");
\r
1965 st = ftos(Item.goal_no);
\r
1967 dprint(" has a .speed specified, but no .attack_finished\n");
\r
1970 tg = find(world, classname, "item_tfgoal");
\r
1973 if (tg.group_no == Item.speed)
\r
1975 if (tg.goal_state != 1)
\r
1981 if (carrier == world)
\r
1983 carrier = tg.owner;
\r
1987 if (carrier != tg.owner)
\r
1994 tg = find(tg, classname, "item_tfgoal");
\r
1996 if (allcarried == 1)
\r
1998 tg = Findgoal(Item.attack_finished);
\r
2001 DoResults(tg, AP, Item.goal_result & 2);
\r
2007 void(entity Goal, entity AP) DoTriggerWork =
\r
2010 if (Goal.killtarget)
\r
2015 t = find(t, targetname, Goal.killtarget);
\r
2020 } while (t != world);
\r
2028 t = find(t, targetname, Goal.target);
\r
2037 if (self.use != SUB_Null)
\r
2047 } while (t != world);
\r
2051 void() DelayedResult =
\r
2053 if (self.enemy.goal_state == 4)
\r
2055 DoResults(self.enemy, self.owner, self.weapon);
\r
2060 void(entity Goal, entity AP, float addb) DoResults =
\r
2064 local float winners;
\r
2066 if (Goal.goal_state == 1)
\r
2070 if (Goal.delay_time > 0 && Goal.goal_state != 4)
\r
2072 Goal.goal_state = 4;
\r
2074 te.think = DelayedResult;
\r
2075 te.nextthink = time + Goal.delay_time;
\r
2081 UpdateAbbreviations(Goal);
\r
2082 Goal.goal_state = 2;
\r
2085 if (Goal.volume == 1)
\r
2087 sound(other, 3, Goal.noise, 1, 0);
\r
2091 sound(other, 3, Goal.noise, 1, 1);
\r
2095 if (Goal.increase_team1 != 0)
\r
2097 TeamFortress_TeamIncreaseScore(1, Goal.increase_team1);
\r
2100 if (Goal.increase_team2 != 0)
\r
2102 TeamFortress_TeamIncreaseScore(2, Goal.increase_team2);
\r
2105 if (Goal.increase_team3 != 0)
\r
2107 TeamFortress_TeamIncreaseScore(3, Goal.increase_team3);
\r
2110 if (Goal.increase_team4 != 0)
\r
2112 TeamFortress_TeamIncreaseScore(4, Goal.increase_team4);
\r
2117 TeamFortress_TeamShowScores(2);
\r
2119 te = find(world, classname, "player");
\r
2120 while (te != world)
\r
2122 if (Goal.broadcast != string_null && CTF_Map == 0)
\r
2124 CenterPrint2(te, "\n\n\n", Goal.broadcast);
\r
2126 if (Goal.netname_broadcast != string_null && CTF_Map == 0)
\r
2128 sprint(te,AP.netname);
\r
2129 sprint(te,Goal.netname_broadcast);
\r
2133 if (Goal.message != string_null)
\r
2135 CenterPrint2(te, Goal.message, AP.netname);
\r
2140 if (AP.team_no == te.team_no)
\r
2142 if (Goal.owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2144 CenterPrint2(te, Goal.owners_team_broadcast, AP.netname);
\r
2148 if (Goal.team_broadcast != string_null)
\r
2150 CenterPrint2(te, Goal.team_broadcast, AP.netname);
\r
2153 if (Goal.netname_owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2155 sprint(te,AP.netname);
\r
2156 sprint(te,Goal.netname_owners_team_broadcast);
\r
2160 if (Goal.netname_team_broadcast != string_null)
\r
2162 sprint(te,AP.netname);
\r
2163 sprint(te,Goal.netname_team_broadcast);
\r
2169 if (Goal.owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2171 CenterPrint2(te, Goal.owners_team_broadcast, AP.netname);
\r
2175 if (Goal.non_team_broadcast != string_null)
\r
2177 CenterPrint2(te, Goal.non_team_broadcast, AP.netname);
\r
2180 if (Goal.netname_owners_team_broadcast != string_null && te.team_no == Goal.owned_by)
\r
2182 sprint(te,AP.netname);
\r
2183 sprint(te,Goal.netname_owners_team_broadcast);
\r
2187 if (Goal.netname_non_team_broadcast != string_null)
\r
2189 sprint(te,AP.netname);
\r
2190 sprint(te,Goal.netname_non_team_broadcast);
\r
2195 if (IsAffectedBy(Goal, te, AP))
\r
2197 if (Goal.search_time != 0 && (Goal.goal_effects & 64))
\r
2199 if (APMeetsCriteria(Goal, te))
\r
2201 Apply_Results(Goal, te, AP, addb);
\r
2206 Apply_Results(Goal, te, AP, addb);
\r
2209 te = find(te, classname, "player");
\r
2211 if (Goal.classname != "item_tfgoal")
\r
2213 Goal.goal_state = 1;
\r
2215 if (Goal.goal_result & 4)
\r
2217 TeamFortress_TeamShowScores(1);
\r
2218 winners = TeamFortress_TeamGetWinner();
\r
2219 te = find(world, classname, "player");
\r
2222 te.takedamage = 0;
\r
2224 te.velocity = '0 0 0';
\r
2225 te.avelocity = '0 0 0';
\r
2226 te = find(te, classname, "player");
\r
2229 te.nextthink = time + 5;
\r
2230 te.think = execute_changelevel;
\r
2231 // te.think = changelevel; // Wazat -- may need fixing
\r
2236 DoGroupWork(Goal, AP);
\r
2237 DoGoalWork(Goal, AP);
\r
2238 DoTriggerWork(Goal, AP);
\r
2239 if (Goal.classname == "info_tfgoal")
\r
2241 SetupRespawn(Goal);
\r
2245 void() tfgoal_touch =
\r
2247 if (!(self.goal_activation & 1))
\r
2251 if (other.classname != "player")
\r
2255 if (other.is_dead == 1) // TEMP
\r
2259 if (self.goal_state == 1)
\r
2263 AttemptToActivate(self, other, self);
\r
2266 void() info_tfgoal_use =
\r
2268 AttemptToActivate(self, activator, self);
\r
2271 void() tfgoal_timer_tick =
\r
2273 if (self.goal_state != 3)
\r
2275 if (APMeetsCriteria(self, world))
\r
2277 DoResults(self, world, 1);
\r
2281 InactivateGoal(self);
\r
2282 self.think = tfgoal_timer_tick;
\r
2283 self.nextthink = time + self.search_time;
\r
2288 void() item_tfgoal_touch =
\r
2291 if (other.is_dead == 1) // TEMP
\r
2295 if (other.classname != "player")
\r
2299 if (other.health <= 0)
\r
2303 // for flag dropping
\r
2304 if ( (self.tent == other) && (time < self.option5) )
\r
2308 if (Activated(self, other))
\r
2310 tfgoalitem_GiveToPlayer(self, other, self);
\r
2311 self.goal_state = 1;
\r
2315 if (self.else_goal != 0)
\r
2317 te = Findgoal(self.else_goal);
\r
2320 AttemptToActivate(te, other, self);
\r
2326 void(entity Item, entity AP, entity Goal) tfgoalitem_GiveToPlayer =
\r
2329 if (Item.mdl != string_null)
\r
2331 setmodel(Item, string_null);
\r
2334 if (Item.goal_activation & 1)
\r
2336 AP.effects = AP.effects | 8;
\r
2338 if (Item.goal_activation & 2)
\r
2340 TeamFortress_SetSpeed(AP);
\r
2342 if (Item.goal_activation & 512)
\r
2344 Item.effects = Item.effects - (Item.effects | 8);
\r
2347 if (Item.items & 133701)
\r
2349 AP.items = AP.items | 262144;
\r
2350 if (Item.team_no == 1)
\r
2351 AP.effects = AP.effects | EF_BLUE;
\r
2352 else if (Item.team_no == 2)
\r
2353 AP.effects = AP.effects | EF_RED;
\r
2355 newmis.owner = AP;
\r
2356 newmis.movetype = 4;
\r
2358 setsize(newmis, '0 0 0', '0 0 0');
\r
2359 newmis.angles = AP.angles;
\r
2360 newmis.nextthink = time + 0.5;
\r
2361 newmis.think = MoveFlag;
\r
2363 setmodel(newmis, Item.mdl);
\r
2364 setorigin(newmis, AP.origin);
\r
2369 if (Item.items & 131072)
\r
2371 AP.items = AP.items | 131072;
\r
2372 AP.effects = AP.effects | 64;
\r
2374 newmis.owner = AP;
\r
2375 newmis.movetype = 4;
\r
2377 setsize(newmis, '0 0 0', '0 0 0');
\r
2378 newmis.angles = AP.angles;
\r
2379 newmis.nextthink = time + 0.5;
\r
2380 newmis.think = MoveFlag;
\r
2382 setmodel(newmis, "progs/tf_flag.mdl");
\r
2383 setorigin(newmis, AP.origin);
\r
2385 if (Item.items & 262144)
\r
2387 AP.items = AP.items | 262144;
\r
2388 AP.effects = AP.effects | 128;
\r
2390 newmis.owner = AP;
\r
2391 newmis.movetype = 4;
\r
2393 setsize(newmis, '0 0 0', '0 0 0');
\r
2394 newmis.angles = AP.angles;
\r
2395 newmis.nextthink = time + 0.5;
\r
2396 newmis.think = MoveFlag;
\r
2398 setmodel(newmis, "progs/tf_flag.mdl");
\r
2399 setorigin(newmis, AP.origin);
\r
2404 if (Goal.goal_result & 8)
\r
2406 Item.goal_state = 1;
\r
2410 /* if (AP.playerclass == 8 && (Item.goal_result & 16))
\r
2412 AP.is_unabletospy = 1;
\r
2414 if (AP.class == CLASS_SPY && (Item.goal_result & 16))
\r
2416 AP.is_unabletospy = 1;
\r
2418 DoResults(Item, AP, 1);
\r
2419 DoItemGroupWork(Item, AP);
\r
2422 void() ReturnItem =
\r
2424 self.enemy.goal_state = 2;
\r
2425 self.enemy.solid = 1;
\r
2426 self.enemy.movetype = 0;
\r
2427 self.enemy.touch = item_tfgoal_touch;
\r
2428 self.enemy.origin = self.enemy.oldorigin;
\r
2429 if (self.enemy.mdl != string_null)
\r
2431 setmodel(self.enemy, self.enemy.mdl);
\r
2433 setorigin(self.enemy, self.enemy.origin);
\r
2434 //sound(self.enemy,"items/itembk2.wav", 1, 1);
\r
2435 sound (self.enemy, 2, "items/itembk2.wav", 1, 1);
\r
2436 tfgoalitem_checkgoalreturn(self.enemy);
\r
2440 void (entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer =
\r
2443 local float lighton;
\r
2444 local float slowon;
\r
2445 local float key1on;
\r
2446 local float key2on;
\r
2447 local float spyoff;
\r
2448 local entity DelayReturn;
\r
2450 if ((Item == world))
\r
2452 objerror ("error: tfgoalitem_RemoveFromPlayer(): Item == world");
\r
2460 te = find (world, classname, "item_tfgoal");
\r
2463 if (((te.owner == AP) && (te != Item)))
\r
2465 if ((te.goal_activation & 1))
\r
2469 if ((te.goal_activation & 2))
\r
2473 if ((te.items & 131072))
\r
2477 if ((te.items & 262144))
\r
2481 if ((te.goal_result & 16))
\r
2486 te = find (te, classname, "item_tfgoal");
\r
2490 if ((AP.invincible_finished > (time + 3)))
\r
2496 if ((AP.super_damage_finished > (time + 3)))
\r
2504 AP.effects = (AP.effects - (AP.effects & 8));
\r
2505 AP.effects = (AP.effects - (AP.effects & 64));
\r
2506 AP.effects = (AP.effects - (AP.effects & 128));
\r
2508 if ((Item.goal_activation & 512))
\r
2510 Item.effects = (Item.effects | 8);
\r
2514 AP.is_unabletospy = 0;
\r
2518 AP.items = (AP.items - (AP.items & 131072));
\r
2522 AP.items = (AP.items - (AP.items & 262144));
\r
2524 te = find (world, classname, "player");
\r
2525 while ((te != world))
\r
2527 if (IsAffectedBy (Item, te, AP))
\r
2529 RemoveResults (Item, te);
\r
2531 te = find (te, classname, "player");
\r
2533 if (((method == 0) || (method == 2)))
\r
2535 te = find (world, classname, "player");
\r
2536 while ((te != world))
\r
2538 if ((te.team_no == Item.owned_by))
\r
2540 if ((Item.team_drop != string_null))
\r
2542 CenterPrint2 (te, "\n\n\n", Item.team_drop);
\r
2544 if ((Item.netname_team_drop != string_null))
\r
2546 sprint (te, AP.netname);
\r
2547 sprint (te, Item.netname_team_drop);
\r
2552 if ((Item.non_team_drop != string_null))
\r
2554 CenterPrint2 (te, "\n\n\n", Item.non_team_drop);
\r
2556 if ((Item.netname_non_team_drop != string_null))
\r
2558 sprint (te, AP.netname);
\r
2559 sprint (te, Item.netname_non_team_drop);
\r
2562 te = find (te, classname, "player");
\r
2564 if ((Item.goal_activation & 8))
\r
2566 DelayReturn = spawn ();
\r
2567 DelayReturn.enemy = Item;
\r
2568 if ((method == 0))
\r
2570 DelayReturn.weapon = 0;
\r
2574 DelayReturn.weapon = 1;
\r
2576 DelayReturn.think = ReturnItem;
\r
2577 DelayReturn.nextthink = (time + 0.5);
\r
2581 if ((Item.goal_activation & 4))
\r
2583 if (((method == 2) && (Item.goal_activation & 4096)))
\r
2585 tfgoalitem_drop (Item/*, 1, AP*/);
\r
2589 tfgoalitem_drop (Item/*, 0, AP*/);
\r
2594 Item.owner = world;
\r
2596 TeamFortress_SetSpeed (AP);
\r
2600 Item.owner = world;
\r
2601 Item.flags = (Item.flags - (Item.flags & 512));
\r
2602 setsize (Item, Item.goal_min, Item.goal_max);
\r
2603 TeamFortress_SetSpeed (AP);
\r
2610 if (Item.goal_activation & 16)
\r
2612 DelayReturn = spawn();
\r
2613 DelayReturn.enemy = Item;
\r
2614 DelayReturn.think = ReturnItem;
\r
2615 DelayReturn.nextthink = time + 0.5;
\r
2616 Item.owner = world;
\r
2617 TeamFortress_SetSpeed(AP);
\r
2621 Item.owner = world;
\r
2622 TeamFortress_SetSpeed(AP);
\r
2626 objerror ("Invalid method passed into tfgoalitem_RemoveFromPlayer\n");
\r
2629 // MTF's remove from player function
\r
2630 /*void(entity Item, entity AP, float method) tfgoalitem_RemoveFromPlayer =
\r
2633 local float lighton;
\r
2634 local float slowon;
\r
2635 local float key1on;
\r
2636 local float key2on;
\r
2637 local float spyoff;
\r
2639 local entity DelayReturn;
\r
2640 if (Item == world)
\r
2642 dprint("error: tfgoalitem_RemoveFromPlayer(): Item == world");
\r
2650 te = find(world, classname, "item_tfgoal");
\r
2653 if (te.owner == AP && te != Item)
\r
2655 if (te.goal_activation & 1)
\r
2659 if (te.goal_activation & 2)
\r
2663 if (te.items & 131072)
\r
2667 if (te.items & 262144)
\r
2671 if (te.goal_result & 16)
\r
2676 te = find(te, classname, "item_tfgoal");
\r
2680 if (AP.invincible_finished > time + 3)
\r
2687 AP.effects = AP.effects - (AP.effects & 8);
\r
2689 if (Item.goal_activation & 512)
\r
2691 Item.effects = Item.effects | 8;
\r
2695 AP.is_unabletospy = 0;
\r
2699 AP.items = AP.items - (AP.items & 131072);
\r
2703 AP.items = AP.items - (AP.items & 262144);
\r
2705 te = find(world, classname, "player");
\r
2706 while (te != world)
\r
2708 if (IsAffectedBy(Item, te, AP))
\r
2710 RemoveResults(Item, te);
\r
2712 te = find(te, classname, "player");
\r
2714 if ((method == 0) || (method == 2))
\r
2716 te = find(world, classname, "player");
\r
2717 while (te != world)
\r
2719 if (te.team_no == Item.owned_by)
\r
2721 if (Item.team_drop != string_null)
\r
2723 CenterPrint2(te, "\n\n\n", Item.team_drop);
\r
2725 if (Item.netname_team_drop != string_null)
\r
2727 sprint(te,AP.netname);
\r
2728 sprint(te,Item.netname_team_drop);
\r
2733 if (Item.non_team_drop != string_null)
\r
2735 CenterPrint2(te, "\n\n\n", Item.non_team_drop);
\r
2737 if (Item.netname_non_team_drop != string_null)
\r
2739 sprint(te,AP.netname);
\r
2740 sprint(te,Item.netname_non_team_drop);
\r
2743 te = find(te, classname, "player");
\r
2745 if (Item.goal_activation & 8)
\r
2747 DelayReturn = spawn();
\r
2748 DelayReturn.enemy = Item;
\r
2749 DelayReturn.think = ReturnItem;
\r
2750 DelayReturn.nextthink = time + 0.5;
\r
2754 if (Item.goal_activation & 4)
\r
2757 tfgoalitem_drop(Item);
\r
2761 Item.owner = world;
\r
2763 TeamFortress_SetSpeed(AP);
\r
2767 Item.owner = world;
\r
2768 TeamFortress_SetSpeed(AP);
\r
2773 if (Item.goal_activation & 16)
\r
2775 DelayReturn = spawn();
\r
2776 DelayReturn.enemy = Item;
\r
2777 DelayReturn.think = ReturnItem;
\r
2778 DelayReturn.nextthink = time + 0.5;
\r
2779 Item.owner = world;
\r
2780 TeamFortress_SetSpeed(AP);
\r
2784 Item.owner = world;
\r
2785 TeamFortress_SetSpeed(AP);
\r
2789 dprint("Invalid method passed into tfgoalitem_RemoveFromPlayer\n");
\r
2792 void() tfgoalitem_dropthink =
\r
2795 self.movetype = 10; //6;
\r
2796 if (self.pausetime != 0)
\r
2798 pos = pointcontents(self.origin);
\r
2801 self.nextthink = time + self.pausetime / 4;
\r
2807 self.nextthink = time + 5;
\r
2811 if (pos == -2 || pos == -6)
\r
2813 self.nextthink = time + 2;
\r
2817 self.nextthink = time + self.pausetime;
\r
2821 self.think = tfgoalitem_remove;
\r
2825 void(entity Item) tfgoalitem_drop =
\r
2827 Item.origin = Item.owner.origin - '0 0 8';
\r
2828 //Item.velocity_z = 400;
\r
2829 //Item.velocity_x = -50 + random() * 100;
\r
2830 //Item.velocity_y = -50 + random() * 100;
\r
2831 Item.velocity_z = 1;
\r
2832 Item.velocity_x = 0;
\r
2833 Item.velocity_y = 0;
\r
2834 Item.goal_state = 2;
\r
2835 Item.movetype = 6;
\r
2837 Item.touch = item_tfgoal_touch;
\r
2838 setorigin(Item, Item.origin - '0 0 16');
\r
2839 setsize(Item, '-16 -16 0', '16 16 56');
\r
2840 if (Item.mdl != string_null)
\r
2842 setmodel(Item, Item.mdl);
\r
2844 Item.nextthink = time + 5;
\r
2845 Item.think = tfgoalitem_dropthink;
\r
2848 void() tfgoalitem_remove =
\r
2851 if (self.goal_state == 1)
\r
2855 if (self.goal_activation & 32)
\r
2858 self.touch = item_tfgoal_touch;
\r
2859 self.origin = self.oldorigin;
\r
2860 if (self.mdl != string_null)
\r
2862 setmodel(self, self.mdl);
\r
2864 setorigin(self, self.origin);
\r
2865 //sound(self,"items/itembk2.wav", 1, 1);
\r
2866 tfgoalitem_checkgoalreturn(self);
\r
2867 if (self.noise3 != string_null || self.noise4 != string_null)
\r
2869 te = find(world, classname, "player");
\r
2872 if (te.team_no == self.owned_by)
\r
2874 CenterPrint2(te, "\n\n\n", self.noise3);
\r
2878 CenterPrint2(te, "\n\n\n", self.noise4);
\r
2880 te = find(te, classname, "player");
\r
2888 void(entity Item) tfgoalitem_checkgoalreturn =
\r
2891 if (Item.impulse != 0)
\r
2893 te = Findgoal(Item.impulse);
\r
2896 te = Findgoal(Item.impulse);
\r
2899 AttemptToActivate(te, world, Item);
\r
2905 void(entity Goal, entity Player, entity Item) DisplayItemStatus =
\r
2907 if (Item.goal_state == 1)
\r
2909 if (Player.team_no == Item.owned_by)
\r
2911 sprint(Player,Goal.team_str_carried);
\r
2915 sprint(Player,Goal.non_team_str_carried);
\r
2917 sprint(Player," ");
\r
2918 if (Player == Item.owner)
\r
2920 sprint(Player," You");
\r
2924 sprint(Player,Item.owner.netname);
\r
2926 sprint(Player,".");
\r
2930 if (Item.origin != Item.oldorigin)
\r
2932 if (Player.team_no == Item.owned_by)
\r
2934 sprint(Player,Goal.team_str_moved);
\r
2938 sprint(Player,Goal.non_team_str_moved);
\r
2943 if (Player.team_no == Item.owned_by)
\r
2945 sprint(Player,Goal.team_str_home);
\r
2949 sprint(Player,Goal.non_team_str_home);
\r
2953 sprint(Player,"\n");
\r
2956 void() info_player_team1 =
\r
2959 self.classname = "info_player_teamspawn";
\r
2961 self.goal_effects = 1;
\r
2962 self.team_str_home = "ts2";
\r
2965 void() info_player_team2 =
\r
2968 self.classname = "info_player_teamspawn";
\r
2970 self.goal_effects = 1;
\r
2971 self.team_str_home = "ts1";
\r
2974 void() info_player_team3 =
\r
2977 self.classname = "info_player_teamspawn";
\r
2979 self.goal_effects = 1;
\r
2980 self.team_str_home = "ts3";
\r
2983 void() info_player_team4 =
\r
2986 self.classname = "info_player_teamspawn";
\r
2988 self.goal_effects = 1;
\r
2989 self.team_str_home = "ts4";
\r
2992 void() item_flag_team2 =
\r
2994 team2maxplayers = 4; //TEMP
\r
2997 precache_model("progs/w_s_key.mdl");
\r
2998 precache_sound("ogre/ogwake.wav");
\r
2999 precache_sound("boss2/pop2.wav");
\r
3000 self.classname = "item_tfgoal";
\r
3001 self.netname = "Team 1 Flag";
\r
3002 self.broadcast = " ÇÏÔ the enemy team's flag!\n";
\r
3003 self.deathtype = "You've got the enemy flag!\n";
\r
3004 self.noise = "ogre/ogwake.wav";
\r
3005 self.mdl = "progs/tf_flag.mdl";
\r
3007 setmodel(self, self.mdl);
\r
3009 self.goal_activation = 1 | 4 | 128 | 32 | 16 | 512;
\r
3010 self.goal_effects = 1;
\r
3011 self.pausetime = 128;
\r
3012 setsize(self, '-16 -16 -24', '16 16 32');
\r
3013 self.touch = item_tfgoal_touch;
\r
3014 self.goal_state = 2;
\r
3016 setorigin(self, self.origin);
\r
3017 self.nextthink = time + 0.2;
\r
3018 self.think = TF_PlaceItem;
\r
3020 dp.origin = self.origin;
\r
3021 dp.classname = "info_tfgoal";
\r
3022 dp.goal_activation = 1;
\r
3024 dp.items_allowed = 2;
\r
3026 dp.goal_effects = 3;
\r
3027 dp.broadcast = " ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3028 dp.message = "You ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3029 dp.noise = "boss2/pop2.wav";
\r
3030 dp.goal_result = 2;
\r
3031 dp.activate_goal_no = 5;
\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
3041 dp.origin = dp.origin;
\r
3042 dp.classname = "info_tfgoal";
\r
3043 dp.goal_effects = 1;
\r
3045 dp.goal_activation = 0;
\r
3048 dp.goal_state = 2;
\r
3049 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3050 dp.nextthink = time + 0.2;
\r
3051 dp.think = TF_PlaceGoal;
\r
3054 void() item_flag_team1 =
\r
3056 team1maxplayers = 4; //TEMP
\r
3059 precache_model("progs/tf_flag.mdl");
\r
3060 precache_sound("ogre/ogwake.wav");
\r
3061 precache_sound("boss2/pop2.wav");
\r
3062 self.classname = "item_tfgoal";
\r
3063 self.netname = "Team 2 Flag";
\r
3064 self.broadcast = " ÇÏÔ the enemy team's flag!\n";
\r
3065 self.deathtype = "You've got the enemy flag!\n";
\r
3066 self.noise = "ogre/ogwake.wav";
\r
3067 self.mdl = "progs/tf_flag.mdl";
\r
3068 setmodel(self, self.mdl);
\r
3071 self.goal_activation = 1 | 4 | 128 | 32 | 16 | 512;
\r
3072 self.goal_effects = 1;
\r
3073 self.pausetime = 128;
\r
3074 setsize(self, '-16 -16 -24', '16 16 32');
\r
3075 self.touch = item_tfgoal_touch;
\r
3076 self.goal_state = 2;
\r
3078 setorigin(self, self.origin);
\r
3079 self.nextthink = time + 0.2;
\r
3080 self.think = TF_PlaceItem;
\r
3082 dp.origin = self.origin;
\r
3083 dp.classname = "info_tfgoal";
\r
3084 dp.goal_activation = 1;
\r
3086 dp.items_allowed = 1;
\r
3088 dp.goal_effects = 3;
\r
3089 dp.broadcast = " ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3090 dp.message = "You ÃÁÐÔÕÒÅÄ the enemy flag!\n";
\r
3091 dp.noise = "boss2/pop2.wav";
\r
3092 dp.goal_result = 2;
\r
3093 dp.activate_goal_no = 6;
\r
3098 dp.goal_state = 2;
\r
3099 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3100 dp.nextthink = time + 0.2;
\r
3101 dp.think = TF_PlaceGoal;
\r
3103 dp.origin = dp.origin;
\r
3104 dp.classname = "info_tfgoal";
\r
3105 dp.goal_effects = 1;
\r
3107 dp.goal_activation = 0;
\r
3110 dp.goal_state = 2;
\r
3111 setsize(dp, '-16 -16 -24', '16 16 32');
\r
3112 dp.nextthink = time + 0.2;
\r
3113 dp.think = TF_PlaceGoal;
\r
3116 void() CTF_FlagCheck =
\r
3119 local float flagcount;
\r
3122 te = find(world, classname, "item_tfgoal");
\r
3123 while (te != world)
\r
3125 if (te.goal_no == 1)
\r
3127 pos = pointcontents(te.origin);
\r
3128 if (pos == -2 || pos == -6)
\r
3130 dprint("*****BUG*****\nFlag(s) outside world.\nPlease report this.\n");
\r
3131 te.nextthink = time + 0.2;
\r
3132 te.think = tfgoalitem_remove;
\r
3134 flagcount = flagcount + 1;
\r
3138 if (te.goal_no == 2)
\r
3140 pos = pointcontents(te.origin);
\r
3141 if (pos == -2 || pos == -6)
\r
3143 dprint("*****BUG*****\nFlag(s) outside world.\nPlease report this.\n");
\r
3144 te.nextthink = time + 0.2;
\r
3145 te.think = tfgoalitem_remove;
\r
3147 flagcount = flagcount + 1;
\r
3150 te = find(te, classname, "item_tfgoal");
\r
3152 if (flagcount != 2)
\r
3154 dprint("*****BUG*****\nFlag(s) missing.\nPlease report this.\n");
\r
3156 self.nextthink = time + 30;
\r