X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fitems.qc;h=19173079fa0f1b1b198323c3d6a1b1f7c61e8b7f;hb=6a28c11c8abd729c7f95ad7050d204aa2453d2ff;hp=3ddf8099f51c0736471859939a61b79b97e21df6;hpb=5a682c6eb030594b9cc2cf652dd5ab98475095db;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/items.qc b/qcsrc/common/items.qc index 3ddf8099f..19173079f 100644 --- a/qcsrc/common/items.qc +++ b/qcsrc/common/items.qc @@ -2,13 +2,80 @@ entity weapon_info[WEP_MAXCOUNT]; entity dummy_weapon_info; -void register_weapon(float id, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname) +#if WEP_MAXCOUNT > 72 +# error Kein Weltraum links auf dem Gerät +#endif + +WepSet WepSet_FromWeapon(float a) { + a -= WEP_FIRST; +#if WEP_MAXCOUNT > 24 + if(a >= 24) { + a -= 24; +#if WEP_MAXCOUNT > 48 + if(a >= 24) { + a -= 24; + return '0 0 1' * power2of(a); + } +#endif + return '0 1 0' * power2of(a); + } +#endif + return '1 0 0' * power2of(a); +} +#ifdef SVQC +void WepSet_AddStat() +{ + addstat(STAT_WEAPONS, AS_INT, weapons_x); +#if WEP_MAXCOUNT > 24 + addstat(STAT_WEAPONS2, AS_INT, weapons_y); +#if WEP_MAXCOUNT > 48 + addstat(STAT_WEAPONS3, AS_INT, weapons_z); +#endif +#endif +} +void WriteWepSet(float dst, WepSet w) +{ +#if WEP_MAXCOUNT > 48 + WriteInt72_t(dst, w); +#elif WEP_MAXCOUNT > 24 + WriteInt48_t(dst, w); +#else + WriteInt24_t(dst, w_x); +#endif +} +#endif +#ifdef CSQC +WepSet WepSet_GetFromStat() +{ + WepSet w = '0 0 0'; + w_x = getstati(STAT_WEAPONS); +#if WEP_MAXCOUNT > 24 + w_y = getstati(STAT_WEAPONS2); +#if WEP_MAXCOUNT > 48 + w_z = getstati(STAT_WEAPONS3); +#endif +#endif + return w; +} +WepSet ReadWepSet() +{ +#if WEP_MAXCOUNT > 48 + return ReadInt72_t(); +#elif WEP_MAXCOUNT > 24 + return ReadInt48_t(); +#else + return ReadInt24_t() * '1 0 0'; +#endif +} +#endif + +void register_weapon(float id, WepSet bit, float(float) func, float ammotype, float i, float weapontype, float pickupbasevalue, string modelname, string shortname, string wname) { entity e; weapon_info[id - 1] = e = spawn(); e.classname = "weapon_info"; e.weapon = id; - e.weapons = power2of(id - WEP_FIRST); + e.weapons = bit; e.netname = shortname; e.message = wname; e.items = ammotype; @@ -41,9 +108,9 @@ void register_weapons_done() 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.weapons = '0 0 0'; dummy_weapon_info.netname = ""; - dummy_weapon_info.message = "@!#%'n Tuba"; + dummy_weapon_info.message = "AOL CD Thrower"; dummy_weapon_info.items = 0; dummy_weapon_info.weapon_func = w_null; dummy_weapon_info.mdl = ""; @@ -154,3 +221,31 @@ string W_FixWeaponOrder_ForceComplete(string order) return W_FixWeaponOrder(order, 1); } +void W_RandomWeapons(entity e, float n) +{ + float i, j; + WepSet remaining; + WepSet result; + remaining = e.weapons; + result = '0 0 0'; + for(i = 0; i < n; ++i) + { + RandomSelection_Init(); + for(j = WEP_FIRST; j <= WEP_LAST; ++j) + if(remaining & WepSet_FromWeapon(j)) + RandomSelection_Add(world, j, string_null, 1, 1); + result |= WepSet_FromWeapon(RandomSelection_chosen_float); + remaining &= ~WepSet_FromWeapon(RandomSelection_chosen_float); + } + e.weapons = result; +} + +string W_Name(float weaponid) +{ + return (get_weaponinfo(weaponid)).message; +} + +float W_AmmoItemCode(float wpn) +{ + return (get_weaponinfo(wpn)).items & IT_AMMO; +}