X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fitems.qc;h=37ffb25e7c3cff3b49e3581dc69a179048483212;hb=551f9bb17fc380e5f067f655a973c12249a1fa0b;hp=e9ff4452a8f22eddc788e18c8b65a13eef0ca593;hpb=0e7ed909bffb4ff21f0c68d163edfc17487e380a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/items.qc b/qcsrc/common/items.qc index e9ff4452a..37ffb25e7 100644 --- a/qcsrc/common/items.qc +++ b/qcsrc/common/items.qc @@ -26,46 +26,27 @@ float w_null(float dummy) } 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 dummy_weapon_info.weapons = 0; // you can recognize dummies by this too - dummy_weapon_info.netname = "@!#%'n Tuba"; + dummy_weapon_info.netname = ""; + dummy_weapon_info.message = "@!#%'n Tuba"; dummy_weapon_info.items = 0; dummy_weapon_info.weapon_func = w_null; dummy_weapon_info.mdl = ""; dummy_weapon_info.model = ""; dummy_weapon_info.spawnflags = 0; + dummy_weapon_info.model2 = ""; dummy_weapon_info.impulse = -1; dummy_weapon_info.bot_pickupbasevalue = 0; - dummy_weapon_info.model2 = ""; float i; - weaponpriority_hudselector_0 = ""; + weaponorder_byid = ""; for(i = 24; i >= 1; --i) if(weapon_info[i-1]) - weaponpriority_hudselector_0 = strcat(weaponpriority_hudselector_0, " ", ftos(i)); - - float imp; - weaponpriority_hudselector_1 = ""; - for(i = 1; i <= 24; ++i) - { - wi = weapon_info[i-1]; - if(wi && wi.impulse == 0) - weaponpriority_hudselector_1 = strcat(weaponpriority_hudselector_1, " ", ftos(i)); - } - for(imp = 9; imp > 0; --imp) - for(i = 1; i <= 24; ++i) - { - wi = weapon_info[i-1]; - if(wi && wi.impulse == imp) - weaponpriority_hudselector_1 = strcat(weaponpriority_hudselector_1, " ", ftos(i)); - } - - weaponpriority_hudselector_0 = strzone(substring(weaponpriority_hudselector_0, 1, strlen(weaponpriority_hudselector_0) - 1)); - weaponpriority_hudselector_1 = strzone(substring(weaponpriority_hudselector_1, 1, strlen(weaponpriority_hudselector_1) - 1)); + weaponorder_byid = strcat(weaponorder_byid, " ", ftos(i)); + weaponorder_byid = strzone(substring(weaponorder_byid, 1, strlen(weaponorder_byid) - 1)); } entity get_weaponinfo(float id) { @@ -110,3 +91,54 @@ string W_NumberWeaponOrder(string order) { 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); +} +