3 #include "weaponsystem.qh"
4 #include "../mutators/mutators_include.qh"
5 #include "../t_items.qh"
6 #include "../../common/weapons/all.qh"
8 string W_Apply_Weaponreplace(string in)
10 float n = tokenize_console(in);
11 string out = "", s, replacement;
14 for(i = 0; i < n; ++i)
19 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
21 e = get_weaponinfo(j);
24 replacement = e.weaponreplace;
29 out = strcat(out, " ", s);
30 else if(replacement != "0")
31 out = strcat(out, " ", replacement);
33 return substring(out, 1, -1);
36 void weapon_defaultspawnfunc(float wpn)
44 if(self.classname != "droppedweapon" && self.classname != "replacedweapon")
46 e = get_weaponinfo(wpn);
48 if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
50 objerror("Attempted to spawn a mutator-blocked weapon rejected");
51 startitem_failed = true;
55 s = W_Apply_Weaponreplace(e.netname);
56 MUTATOR_CALLHOOK(SetWeaponreplace, self, e, s);
61 startitem_failed = true;
64 t = tokenize_console(s);
67 self.team = --internalteam;
68 for(i = 1; i < t; ++i)
71 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
73 e = get_weaponinfo(j);
77 copyentity(this, self);
78 self.classname = "replacedweapon";
79 weapon_defaultspawnfunc(j);
85 LOG_INFO("The weapon replace list for ", this.classname, " contains an unknown weapon ", s, ". Skipped.\n");
90 if(t >= 1) // always the case!
94 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
96 e = get_weaponinfo(j);
105 LOG_INFO("The weapon replace list for ", self.classname, " contains an unknown weapon ", s, ". Skipped.\n");
111 startitem_failed = true;
116 e = get_weaponinfo(wpn);
118 if(!self.respawntime)
120 if(e.weapons & WEPSET_SUPERWEAPONS)
122 self.respawntime = g_pickup_respawntime_superweapon;
123 self.respawntimejitter = g_pickup_respawntimejitter_superweapon;
127 self.respawntime = g_pickup_respawntime_weapon;
128 self.respawntimejitter = g_pickup_respawntimejitter_weapon;
132 if(e.weapons & WEPSET_SUPERWEAPONS)
133 if(!self.superweapons_finished)
134 self.superweapons_finished = autocvar_g_balance_superweapons_time;
136 // if we don't already have ammo, give us some ammo
137 if(!self.(e.ammo_field))
141 case ammo_shells: self.ammo_shells = cvar("g_pickup_shells_weapon"); break;
142 case ammo_nails: self.ammo_nails = cvar("g_pickup_nails_weapon"); break;
143 case ammo_rockets: self.ammo_rockets = cvar("g_pickup_rockets_weapon"); break;
144 case ammo_cells: self.ammo_cells = cvar("g_pickup_cells_weapon"); break;
145 case ammo_plasma: self.ammo_plasma = cvar("g_pickup_plasma_weapon"); break;
146 case ammo_fuel: self.ammo_fuel = cvar("g_pickup_fuel_weapon"); break;
153 for(i = 0, j = 1; i < 24; ++i, j *= 2)
157 ammotype = Item_CounterField(j);
159 self.ammotype = cvar(strcat("g_pickup_", Item_CounterFieldName(j), "_weapon"));
166 if(g_pickup_weapons_anyway)
167 self.pickup_anyway = true;
171 // no weapon-stay on superweapons
172 if(e.weapons & WEPSET_SUPERWEAPONS)
173 f |= FL_NO_WEAPON_STAY;
175 // weapon stay isn't supported for teamed weapons
177 f |= FL_NO_WEAPON_STAY;
179 StartItem(strzone(e.m_model.model_str()), string_null, self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue);
180 self.item_pickupsound_ent = SND_WEAPONPICKUP;
182 if (self.modelindex) { // don't precache if self was removed
183 Weapon w = get_weaponinfo(e.weapon);