]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/weapons/spawning.qc
Fix that last one, plus update the config- now we have spawn weapons again
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / weapons / spawning.qc
1 string W_Apply_Weaponreplace(string in)
2 {
3         float n = tokenize_console(in);
4         string out = "", s, replacement;
5         float i, j;
6         entity e;
7         for(i = 0; i < n; ++i)
8         {
9                 replacement = "";
10                 s = argv(i);
11                 
12                 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
13                 {
14                         e = get_weaponinfo(j);
15                         if(e.netname == s)
16                         {
17                                 replacement = e.weaponreplace;
18                         }
19                 }
20                 
21                 //if(replacement != "") { out = sprintf("%s %s", out, replacement); }
22                 //else if(replacement != "0") { out = sprintf("%s %s", out, replacement); }
23                 //else { out = sprintf("%s %s", out, argv(i)); }
24
25                 if(replacement == "")
26                         out = strcat(out, " ", s);
27                 else if(replacement != "0")
28                         out = strcat(out, " ", replacement);
29         }
30         return substring(out, 1, -1);
31 }
32
33 void weapon_defaultspawnfunc(float wpn)
34 {
35         entity e;
36         float t;
37         string s;
38         entity oldself;
39         float i, j;
40         float f;
41
42         if(self.classname != "droppedweapon" && self.classname != "replacedweapon")
43         {
44                 e = get_weaponinfo(wpn);
45
46                 if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
47                 {
48                         objerror("Attempted to spawn a mutator-blocked weapon rejected");
49                         startitem_failed = TRUE;
50                         return;
51                 }
52
53                 s = W_Apply_Weaponreplace(e.netname);
54                 ret_string = s;
55                 other = e;
56                 MUTATOR_CALLHOOK(SetWeaponreplace);
57                 s = ret_string;
58                 if(s == "")
59                 {
60                         remove(self);
61                         startitem_failed = TRUE;
62                         return;
63                 }
64                 t = tokenize_console(s);
65                 if(t >= 2)
66                 {
67                         self.team = --internalteam;
68                         oldself = self;
69                         for(i = 1; i < t; ++i)
70                         {
71                                 s = argv(i);
72                                 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
73                                 {
74                                         e = get_weaponinfo(j);
75                                         if(e.netname == s)
76                                         {
77                                                 self = spawn();
78                                                 copyentity(oldself, self);
79                                                 self.classname = "replacedweapon";
80                                                 weapon_defaultspawnfunc(j);
81                                                 break;
82                                         }
83                                 }
84                                 if(j > WEP_LAST)
85                                 {
86                                         print("The weapon replace list for ", oldself.classname, " contains an unknown weapon ", s, ". Skipped.\n");
87                                 }
88                         }
89                         self = oldself;
90                 }
91                 if(t >= 1) // always the case!
92                 {
93                         s = argv(0);
94                         wpn = 0;
95                         for(j = WEP_FIRST; j <= WEP_LAST; ++j)
96                         {
97                                 e = get_weaponinfo(j);
98                                 if(e.netname == s)
99                                 {
100                                         wpn = j;
101                                         break;
102                                 }
103                         }
104                         if(j > WEP_LAST)
105                         {
106                                 print("The weapon replace list for ", self.classname, " contains an unknown weapon ", s, ". Skipped.\n");
107                         }
108                 }
109                 if(wpn == 0)
110                 {
111                         remove(self);
112                         startitem_failed = TRUE;
113                         return;
114                 }
115         }
116
117         e = get_weaponinfo(wpn);
118
119         if(!self.respawntime)
120         {
121                 if(e.weapons & WEPSET_SUPERWEAPONS)
122                 {
123                         self.respawntime = g_pickup_respawntime_superweapon;
124                         self.respawntimejitter = g_pickup_respawntimejitter_superweapon;
125                 }
126                 else
127                 {
128                         self.respawntime = g_pickup_respawntime_weapon;
129                         self.respawntimejitter = g_pickup_respawntimejitter_weapon;
130                 }
131         }
132
133         if(e.weapons & WEPSET_SUPERWEAPONS)
134                 if(!self.superweapons_finished)
135                         self.superweapons_finished = autocvar_g_balance_superweapons_time;
136
137         // if we don't already have ammo, give us some ammo
138         if(!self.(e.current_ammo))
139         {
140                 switch(e.current_ammo)
141                 {
142                         case ammo_shells:  self.ammo_shells  = cvar("g_pickup_shells_weapon");  break;
143                         case ammo_nails:   self.ammo_nails   = cvar("g_pickup_nails_weapon");   break;
144                         case ammo_rockets: self.ammo_rockets = cvar("g_pickup_rockets_weapon"); break;
145                         case ammo_cells:   self.ammo_cells   = cvar("g_pickup_cells_weapon");   break;
146                         case ammo_fuel:    self.ammo_fuel    = cvar("g_pickup_fuel_weapon");    break;
147                 }
148         }
149
150         print(sprintf("defaultspawnfunc: current ammo count: %f\n", self.(e.current_ammo)));
151
152         #if 0
153         if(e.items)
154         {
155                 for(i = 0, j = 1; i < 24; ++i, j *= 2)
156                 {
157                         if(e.items & j)
158                         {
159                                 ammofield = Item_CounterField(j);
160                                 if(!self.ammofield)
161                                         self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(j), "_weapon"));
162                         }
163                 }
164         }
165         #endif
166
167         // pickup anyway
168         if(g_pickup_weapons_anyway)
169                 self.pickup_anyway = TRUE;
170
171         f = FL_WEAPON;
172
173         // no weapon-stay on superweapons
174         if(e.weapons & WEPSET_SUPERWEAPONS)
175                 f |= FL_NO_WEAPON_STAY;
176
177         // weapon stay isn't supported for teamed weapons
178         if(self.team)
179                 f |= FL_NO_WEAPON_STAY;
180
181         StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue);
182         if (self.modelindex) // don't precache if self was removed
183                 WEP_ACTION(e.weapon, WR_INIT);
184 }