X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fweapons%2Fthrowing.qc;h=01c6ac0d200634347c27d88ba2631322b8fb7c66;hb=8411ee5ab4bdefd8cd68e9ca70db39ee7c7f30ee;hp=9aaabb05bfafa8075ea63466e89ab0996ffe53b5;hpb=7e5268799e95d0dd6f2b77ed4e097b0adc755f2b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/weapons/throwing.qc b/qcsrc/server/weapons/throwing.qc index 9aaabb05b..01c6ac0d2 100644 --- a/qcsrc/server/weapons/throwing.qc +++ b/qcsrc/server/weapons/throwing.qc @@ -1,19 +1,22 @@ #include "throwing.qh" -#include "weaponsystem.qh" -#include "../resources.qh" -#include "../items.qh" -#include -#include -#include "../g_damage.qh" #include #include -#include #include +#include +#include +#include +#include #include #include -#include #include +#include +#include +#include +#include +#include +#include +#include void thrown_wep_think(entity this) { @@ -36,8 +39,8 @@ void thrown_wep_think(entity this) // returns amount of ammo used, or -1 for failure, or 0 for no ammo count float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector velo, .entity weaponentity) { - Weapon info = Weapons_from(wpn); - int ammotype = info.ammo_type; + Weapon info = REGISTRY_GET(Weapons, wpn); + Resource ammotype = info.ammo_type; entity wep = spawn(); Item_SetLoot(wep, true); @@ -46,12 +49,12 @@ float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector wep.owner = wep.enemy = own; wep.flags |= FL_TOSSED; wep.colormap = own.colormap; - wep.glowmod = weaponentity_glowmod(info, own, own.clientcolors, own.(weaponentity)); + // wep.glowmod will be set in weapon_defaultspawnfunc navigation_dynamicgoal_init(wep, false); W_DropEvent(wr_drop,own,wpn,wep,weaponentity); - if(WepSet_FromWeapon(Weapons_from(wpn)) & WEPSET_SUPERWEAPONS) + if(WepSet_FromWeapon(REGISTRY_GET(Weapons, wpn)) & WEPSET_SUPERWEAPONS) { Item_SetExpiring(wep, true); if(own.items & IT_UNLIMITED_SUPERWEAPONS) @@ -67,15 +70,20 @@ float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector }); if(superweapons <= 1) { - wep.superweapons_finished = own.superweapons_finished; - own.superweapons_finished = 0; + wep.superweapons_finished = StatusEffects_gettime(STATUSEFFECT_Superweapons, own); + StatusEffects_remove(STATUSEFFECT_Superweapons, own, STATUSEFFECT_REMOVE_CLEAR); } else { - float timeleft = own.superweapons_finished - time; + float timeleft = StatusEffects_gettime(STATUSEFFECT_Superweapons, own) - time; float weptimeleft = timeleft / superweapons; wep.superweapons_finished = time + weptimeleft; - own.superweapons_finished -= weptimeleft; + if(own.statuseffects) + { + // TODO: this doesn't explicitly enable the effect, use apply here? + own.statuseffects.statuseffect_time[STATUSEFFECT_Superweapons.m_id] -= weptimeleft; + StatusEffects_update(own); + } } } } @@ -89,7 +97,7 @@ float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector wep.pickup_anyway = true; // these are ALWAYS pickable //wa = W_AmmoItemCode(wpn); - if(ammotype == RESOURCE_NONE) + if(ammotype == RES_NONE) { return 0; } @@ -104,7 +112,7 @@ float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector GiveResource(own, ammotype, own.(weaponentity).(weapon_load[i])); own.(weaponentity).(weapon_load[i]) = -1; // schedule the weapon for reloading } - SetResourceAmount(wep, ammotype, 0); + SetResource(wep, ammotype, 0); } else if(doreduce) { @@ -116,10 +124,10 @@ float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector own.(weaponentity).(weapon_load[i]) = -1; // schedule the weapon for reloading } - float ownderammo = GetResourceAmount(own, ammotype); - float thisammo = min(ownderammo, GetResourceAmount(wep, ammotype)); - SetResourceAmount(wep, ammotype, thisammo); - SetResourceAmount(own, ammotype, ownderammo - thisammo); + float ownderammo = GetResource(own, ammotype); + float thisammo = min(ownderammo, GetResource(wep, ammotype)); + SetResource(wep, ammotype, thisammo); + SetResource(own, ammotype, ownderammo - thisammo); return thisammo; } @@ -134,11 +142,11 @@ bool W_IsWeaponThrowable(entity this, int w) if (!autocvar_g_pickup_items) return false; if (g_weaponarena) - return 0; - if(w == WEP_Null.m_id) - return false; + return false; + if (w == WEP_Null.m_id) + return false; - return (Weapons_from(w)).weaponthrowable; + return (REGISTRY_GET(Weapons, w)).weaponthrowable; } // toss current weapon @@ -147,6 +155,8 @@ void W_ThrowWeapon(entity this, .entity weaponentity, vector velo, vector delta, Weapon w = this.(weaponentity).m_weapon; if (w == WEP_Null) return; // just in case + if (time < game_starttime) + return; if(MUTATOR_CALLHOOK(ForbidThrowCurrentWeapon, this, this.(weaponentity))) return; if(!autocvar_g_weapon_throwable)