float bgmtime;
+string weaponorder_byimpulse;
Porto_Init();
TrueAim_Init();
+ weaponorder_byimpulse = W_FixWeaponOrder_BuildImpulseList(W_FixWeaponOrder_ForceComplete(W_NumberWeaponOrder(cvar_string("cl_weaponpriority"))));
+
postinit = true;
}
}
void register_weapons_done()
{
- entity wi;
-
dummy_weapon_info = spawn();
dummy_weapon_info.classname = "weapon_info";
dummy_weapon_info.weapon = 0; // you can recognize dummies by this
for(i = 24; i >= 1; --i)
if(weapon_info[i-1])
weaponorder_byid = strcat(weaponorder_byid, " ", ftos(i));
-
- float imp;
- weaponorder_byimpulse = "";
- for(i = 1; i <= 24; ++i)
- {
- wi = weapon_info[i-1];
- if(wi && wi.impulse == 0)
- weaponorder_byimpulse = strcat(weaponorder_byimpulse, " ", ftos(i));
- }
- for(imp = 9; imp > 0; --imp)
- for(i = 1; i <= 24; ++i)
- {
- wi = weapon_info[i-1];
- if(wi && wi.impulse == imp)
- weaponorder_byimpulse = strcat(weaponorder_byimpulse, " ", ftos(i));
- }
-
weaponorder_byid = strzone(substring(weaponorder_byid, 1, strlen(weaponorder_byid) - 1));
- weaponorder_byimpulse = strzone(substring(weaponorder_byimpulse, 1, strlen(weaponorder_byimpulse) - 1));
}
entity get_weaponinfo(float id)
{
{
return mapPriorityList(order, W_NumberWeaponOrder_MapFunc);
}
+
+float W_FixWeaponOrder_BuildImpulseList_buf[WEP_MAXCOUNT];
+string W_FixWeaponOrder_BuildImpulseList_order;
+void W_FixWeaponOrder_BuildImpulseList_swap(float i, float j, entity pass)
+{
+ float h;
+ h = W_FixWeaponOrder_BuildImpulseList_buf[i];
+ W_FixWeaponOrder_BuildImpulseList_buf[i] = W_FixWeaponOrder_BuildImpulseList_buf[j];
+ W_FixWeaponOrder_BuildImpulseList_buf[j] = h;
+}
+float W_FixWeaponOrder_BuildImpulseList_cmp(float i, float j, entity pass)
+{
+ entity e1, e2;
+ float d;
+ e1 = get_weaponinfo(W_FixWeaponOrder_BuildImpulseList_buf[i]);
+ e2 = get_weaponinfo(W_FixWeaponOrder_BuildImpulseList_buf[j]);
+ d = mod(e1.impulse + 9, 10) - mod(e2.impulse + 9, 10);
+ if(d != 0)
+ return -d; // high impulse first!
+ return
+ strstrofs(strcat(" ", W_FixWeaponOrder_BuildImpulseList_order, " "), sprintf(" %d ", W_FixWeaponOrder_BuildImpulseList_buf[i]), 0)
+ -
+ strstrofs(strcat(" ", W_FixWeaponOrder_BuildImpulseList_order, " "), sprintf(" %d ", W_FixWeaponOrder_BuildImpulseList_buf[j]), 0)
+ ; // low char index first!
+}
+string W_FixWeaponOrder_BuildImpulseList(string o)
+{
+ float i;
+ W_FixWeaponOrder_BuildImpulseList_order = o;
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ W_FixWeaponOrder_BuildImpulseList_buf[i - WEP_FIRST] = i;
+ heapsort(WEP_LAST - WEP_FIRST + 1, W_FixWeaponOrder_BuildImpulseList_swap, W_FixWeaponOrder_BuildImpulseList_cmp, world);
+ o = "";
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ o = strcat(o, " ", ftos(W_FixWeaponOrder_BuildImpulseList_buf[i - WEP_FIRST]));
+ W_FixWeaponOrder_BuildImpulseList_order = string_null;
+ return substring(o, 1, -1);
+}
+
+string W_FixWeaponOrder_AllowIncomplete(string order)
+{
+ return W_FixWeaponOrder(order, 0);
+}
+
+string W_FixWeaponOrder_ForceComplete(string order)
+{
+ if(order == "")
+ order = W_NumberWeaponOrder(cvar_defstring("cl_weaponpriority"));
+ return W_FixWeaponOrder(order, 1);
+}
+
// variables:
string weaponorder_byid;
-string weaponorder_byimpulse;
// functions:
entity get_weaponinfo(float id);
#undef REGISTER_WEAPON
ACCUMULATE_FUNCTION(RegisterWeapons, register_weapons_done)
+
+
+string W_FixWeaponOrder(string order, float complete);
+string W_NumberWeaponOrder(string order);
+string W_NameWeaponOrder(string order);
+string W_FixWeaponOrder_BuildImpulseList(string o);
+string W_FixWeaponOrder_AllowIncomplete(string order);
+string W_FixWeaponOrder_ForceComplete(string order);
strunzone(self.netname_previous);
if(self.clientstatus)
strunzone(self.clientstatus);
+ if(self.weaponorder_byimpulse)
+ strunzone(self.weaponorder_byimpulse);
ClearPlayerSounds();
if(list == 0)
W_CycleWeapon(weaponorder_byid, -1);
else if(list == 1)
- W_CycleWeapon(weaponorder_byimpulse, -1);
+ W_CycleWeapon(self.weaponorder_byimpulse, -1);
else if(list == 2)
W_CycleWeapon(self.cvar_cl_weaponpriority, -1);
}
if(list == 0)
W_CycleWeapon(weaponorder_byid, +1);
else if(list == 1)
- W_CycleWeapon(weaponorder_byimpulse, +1);
+ W_CycleWeapon(self.weaponorder_byimpulse, +1);
else if(list == 2)
W_CycleWeapon(self.cvar_cl_weaponpriority, +1);
}
-string W_FixWeaponOrder_AllowIncomplete(string order)
-{
- return W_FixWeaponOrder(order, 0);
-}
-
-string W_FixWeaponOrder_ForceComplete(string order)
-{
- if(order == "")
- order = W_NumberWeaponOrder(cvar_string("cl_weaponpriority"));
- return W_FixWeaponOrder(order, 1);
-}
-
float w_getbestweapon(entity e)
{
return W_GetCycleWeapon(e, e.cvar_cl_weaponpriority, 0, -1, FALSE, TRUE);
.float cvar_cl_gunalign;
.float cvar_cl_noantilag;
+.string weaponorder_byimpulse;
+
void Announce(string snd);
void AnnounceTo(entity e, string snd);
}
string W_FixWeaponOrder_ForceComplete(string s);
string W_FixWeaponOrder_AllowIncomplete(string s);
-float w_getbestweapon(entity e);
+string W_FixWeaponOrder_BuildImpulseList(string s);
+string W_FixWeaponOrder_ForceComplete_AndBuildImpulseList(string wo)
+{
+ string o, s;
+ o = W_FixWeaponOrder_ForceComplete(wo);
+ if(self.weaponorder_byimpulse)
+ {
+ strunzone(self.weaponorder_byimpulse);
+ self.weaponorder_byimpulse = string_null;
+ }
+ self.weaponorder_byimpulse = strzone(W_FixWeaponOrder_BuildImpulseList(o));
+ return o;
+}
void GetCvars(float f)
{
string s;
GetCvars_handleFloat(s, f, cvar_cl_shownames, "cl_shownames");
GetCvars_handleString(s, f, cvar_g_xonoticversion, "g_xonoticversion");
GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap");
- GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete);
+ GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete_AndBuildImpulseList);
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[0], "cl_weaponpriority0", W_FixWeaponOrder_AllowIncomplete);
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[1], "cl_weaponpriority1", W_FixWeaponOrder_AllowIncomplete);
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriorities[2], "cl_weaponpriority2", W_FixWeaponOrder_AllowIncomplete);