X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fall.qc;h=7db276f66bebb8de08405a2d289c80b79eb4200e;hb=e57480382bd4cdd42b6fbe16fb72f31d136668a1;hp=2ef2d09b947d2d9e35a83baf32df90b67ed757e5;hpb=d654fd1b55e9d2de56a39fdc03ae94535aa8539b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/all.qc b/qcsrc/common/weapons/all.qc index 2ef2d09b9..7db276f66 100644 --- a/qcsrc/common/weapons/all.qc +++ b/qcsrc/common/weapons/all.qc @@ -14,7 +14,7 @@ #include "../../client/autocvars.qh" #include "../deathtypes/all.qh" #include "../../lib/csqcmodel/interpolate.qh" - #include "../movetypes/movetypes.qh" + #include "../physics/movetypes/movetypes.qh" #include "../../client/main.qh" #include "../../lib/csqcmodel/cl_model.qh" #elif defined(MENUQC) @@ -47,6 +47,9 @@ #ifndef MENUQC #include "calculations.qc" #endif +#ifdef SVQC + #include "config.qc" +#endif #define IMPLEMENTATION #include "all.inc" #undef IMPLEMENTATION @@ -101,10 +104,10 @@ string W_FixWeaponOrder(string order, float complete) } string W_NameWeaponOrder_MapFunc(string s) { - entity wi; - if (s == "0" || stof(s)) + int i = stof(s); + if (s == "0" || i) { - wi = get_weaponinfo(stof(s)); + entity wi = Weapons_from(i); if (wi != WEP_Null) return wi.netname; } return s; @@ -129,11 +132,9 @@ string W_NameWeaponOrder(string order) } string W_NumberWeaponOrder_MapFunc(string s) { - int i; if (s == "0" || stof(s)) return s; s = W_UndeprecateName(s); - for (i = WEP_FIRST; i <= WEP_LAST; ++i) - if (s == get_weaponinfo(i).netname) return ftos(i); + FOREACH(Weapons, it != WEP_Null && it.netname == s, LAMBDA(return ftos(i))); return s; } string W_NumberWeaponOrder(string order) @@ -152,17 +153,17 @@ void W_FixWeaponOrder_BuildImpulseList_swap(int i, int j, entity pass) } float W_FixWeaponOrder_BuildImpulseList_cmp(int i, int 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 = (e1.impulse + 9) % 10 - (e2.impulse + 9) % 10; + int si = W_FixWeaponOrder_BuildImpulseList_buf[i]; + Weapon e1 = Weapons_from(si); + int sj = W_FixWeaponOrder_BuildImpulseList_buf[j]; + Weapon e2 = Weapons_from(sj); + int d = (e1.impulse + 9) % 10 - (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) + sprintf(" %d ", si), 0) - strstrofs(strcat(" ", W_FixWeaponOrder_BuildImpulseList_order, " "), - sprintf(" %d ", W_FixWeaponOrder_BuildImpulseList_buf[j]), 0) + sprintf(" %d ", sj), 0) ; // low char index first! } string W_FixWeaponOrder_BuildImpulseList(string o) @@ -202,9 +203,10 @@ void W_RandomWeapons(entity e, float n) { 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); + if (remaining & WepSet_FromWeapon(Weapons_from(j))) RandomSelection_Add(NULL, j, string_null, 1, 1); + Weapon w = Weapons_from(RandomSelection_chosen_float); + result |= WepSet_FromWeapon(w); + remaining &= ~WepSet_FromWeapon(w); } e.weapons = result; } @@ -267,12 +269,8 @@ string W_Sound(string w_snd) string W_Model(string w_mdl) { string output = strcat("models/weapons/", w_mdl); -#ifdef SVQC - MUTATOR_CALLHOOK(WeaponModel, w_mdl, output); - return weapon_model_output; -#else - return output; -#endif + MUTATOR_CALLHOOK(WeaponModel, w_mdl, output); + return weapon_model_output; } #ifndef MENUQC @@ -522,11 +520,7 @@ void CL_WeaponEntity_SetModel(entity this, string name) if (this.movedir.x >= 0) { -#ifdef SVQC - int algn = this.owner.cvar_cl_gunalign; -#else - int algn = autocvar_cl_gunalign; -#endif + int algn = STAT(GUNALIGN, this.owner); vector v = this.movedir; this.movedir = shotorg_adjust(v, false, false, algn); this.view_ofs = shotorg_adjust(v, false, true, algn) - v; @@ -567,8 +561,10 @@ NET_HANDLE(wframe, bool isNew) switch (viewmodel.state) { case WS_RAISE: + viewmodel.weapon_switchdelay = activeweapon.switchdelay_raise; + break; case WS_DROP: - viewmodel.weapon_switchdelay = ReadFloat(); + viewmodel.weapon_switchdelay = activeweapon.switchdelay_drop; break; default: viewmodel.weapon_switchdelay = 0; @@ -592,19 +588,63 @@ void wframe_send(entity actor, entity weaponentity, vector a, bool restartanim) WriteByte(channel, weaponentity.state); WriteFloat(channel, weaponentity.weapon_nextthink); WriteByte(channel, weaponentity.m_alpha * 255); - Weapon w = Weapons_from(actor.weapon); - switch (weaponentity.state) +} +#endif + +REGISTER_NET_C2S(w_whereis) +#ifdef SVQC +void Weapon_whereis(Weapon this, entity cl); +NET_HANDLE(w_whereis, bool) +{ + Weapon wpn = ReadRegistered(Weapons); + if (wpn != WEP_Null) Weapon_whereis(wpn, sender); + return true; +} +#else +void w_whereis(Weapon this) +{ + int channel = MSG_C2S; + WriteHeader(channel, w_whereis); + WriteRegistered(Weapons, channel, this); +} +CLIENT_COMMAND(weapon_find, "Show spawn locations of a weapon") +{ + switch (request) { - case WS_RAISE: - WriteFloat(channel, w.switchdelay_raise); - break; - case WS_DROP: - WriteFloat(channel, w.switchdelay_drop); - break; + case CMD_REQUEST_COMMAND: + { + string s = argv(1); + if (s == "all") + { + FOREACH(Weapons, it != WEP_Null, w_whereis(it)); + return; + } + if (s == "unowned") + { + FOREACH(Weapons, it != WEP_Null && !(STAT(WEAPONS) & it.m_wepset), w_whereis(it)); + return; + } + FOREACH(Weapons, it != WEP_Null && it.netname == s, + { + w_whereis(it); + return; + }); + } + default: + { + LOG_INFOF("Incorrect parameters for ^2%s^7\n", "weapon_find"); + } + case CMD_REQUEST_USAGE: + { + LOG_INFO("\nUsage:^3 cl_cmd weapon_find weapon\n"); + LOG_INFO(" Where 'weapon' is the lowercase weapon name, 'all' or 'unowned'.\n"); + return; + } } } #endif + #endif #endif