1 string W_Apply_Weaponreplace(string in)
3 float n = tokenize_console(in);
4 string out = "", replacement = "";
8 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
10 e = get_weaponinfo(j);
11 if(e.netname == argv(i))
13 replacement = e.weaponreplace;
16 if(replacement != "") { out = sprintf("%s %s", out, replacement); }
17 else if(replacement != "0") { out = sprintf("%s %s", out, replacement); }
18 else { out = sprintf("%s %s", out, argv(i)); }
20 return substring(out, 1, -1);
23 void weapon_defaultspawnfunc(float wpn)
32 if(self.classname != "droppedweapon" && self.classname != "replacedweapon")
34 e = get_weaponinfo(wpn);
36 if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
38 objerror("Attempted to spawn a mutator-blocked weapon rejected");
39 startitem_failed = TRUE;
43 s = W_Apply_Weaponreplace(e.netname);
46 MUTATOR_CALLHOOK(SetWeaponreplace);
51 startitem_failed = TRUE;
54 t = tokenize_console(s);
57 self.team = --internalteam;
59 for(i = 1; i < t; ++i)
62 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
64 e = get_weaponinfo(j);
68 copyentity(oldself, self);
69 self.classname = "replacedweapon";
70 weapon_defaultspawnfunc(j);
76 print("The weapon replace list for ", oldself.classname, " contains an unknown weapon ", s, ". Skipped.\n");
81 if(t >= 1) // always the case!
85 for(j = WEP_FIRST; j <= WEP_LAST; ++j)
87 e = get_weaponinfo(j);
96 print("The weapon replace list for ", self.classname, " contains an unknown weapon ", s, ". Skipped.\n");
102 startitem_failed = TRUE;
107 e = get_weaponinfo(wpn);
109 if(!self.respawntime)
111 if(e.weapons & WEPSET_SUPERWEAPONS)
113 self.respawntime = g_pickup_respawntime_superweapon;
114 self.respawntimejitter = g_pickup_respawntimejitter_superweapon;
118 self.respawntime = g_pickup_respawntime_weapon;
119 self.respawntimejitter = g_pickup_respawntimejitter_weapon;
123 if(e.weapons & WEPSET_SUPERWEAPONS)
124 if(!self.superweapons_finished)
125 self.superweapons_finished = autocvar_g_balance_superweapons_time;
127 // if we don't already have ammo, give us some ammo
128 if(!self.(e.current_ammo))
130 switch(e.current_ammo)
132 case ammo_shells: self.ammo_shells = cvar("g_pickup_shells_weapon"); break;
133 case ammo_nails: self.ammo_nails = cvar("g_pickup_nails_weapon"); break;
134 case ammo_rockets: self.ammo_rockets = cvar("g_pickup_rockets_weapon"); break;
135 case ammo_cells: self.ammo_cells = cvar("g_pickup_cells_weapon"); break;
136 case ammo_fuel: self.ammo_fuel = cvar("g_pickup_fuel_weapon"); break;
140 print(sprintf("defaultspawnfunc: current ammo count: %f\n", self.(e.current_ammo)));
145 for(i = 0, j = 1; i < 24; ++i, j *= 2)
149 ammofield = Item_CounterField(j);
151 self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(j), "_weapon"));
158 if(g_pickup_weapons_anyway)
159 self.pickup_anyway = TRUE;
163 // no weapon-stay on superweapons
164 if(e.weapons & WEPSET_SUPERWEAPONS)
165 f |= FL_NO_WEAPON_STAY;
167 // weapon stay isn't supported for teamed weapons
169 f |= FL_NO_WEAPON_STAY;
171 StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue);
172 if (self.modelindex) // don't precache if self was removed
173 WEP_ACTION(e.weapon, WR_INIT);