X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon.qh;h=ec6e14eb668d8ef63e33cb6aaf2577fc464033cb;hp=460d95af65e685253865e8cdd65d1abc35fd6ece;hb=HEAD;hpb=d01c567581179df7cc68bcdc8dce58efad911bc4 diff --git a/qcsrc/common/weapons/weapon.qh b/qcsrc/common/weapons/weapon.qh index 460d95af6..cf0f637f0 100644 --- a/qcsrc/common/weapons/weapon.qh +++ b/qcsrc/common/weapons/weapon.qh @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #include #ifdef SVQC @@ -44,10 +44,8 @@ CLASS(Weapon, Object) ATTRIB(Weapon, m_canonical_spawnfunc, string); /** control what happens when this weapon is spawned */ METHOD(Weapon, m_spawnfunc_hookreplace, Weapon(Weapon this, entity e)) { return this; } - /** A: WEPSET_id : WEPSET_... */ - ATTRIB(Weapon, weapons, WepSet, '0 0 0'); /** M: ammotype : main ammo type */ - ATTRIB(Weapon, ammo_type, int, RESOURCE_NONE); + ATTRIB(Weapon, ammo_type, Resource, RES_NONE); /** M: impulse : weapon impulse */ ATTRIB(Weapon, impulse, int, -1); /** M: flags : WEPSPAWNFLAG_... combined */ @@ -58,8 +56,14 @@ CLASS(Weapon, Object) ATTRIB(Weapon, wpcolor, vector, '0 0 0'); /** M: modelname : name of model (without g_ v_ or h_ prefixes) */ ATTRIB(Weapon, mdl, string, ""); +#ifdef GAMEQC /** M: model MDL_id_ITEM */ ATTRIB(Weapon, m_model, entity); + /** M: flash model MDL_id_MUZZLEFLASH */ + ATTRIB(Weapon, m_muzzlemodel, entity, MDL_Null); + /** M: flash effect EFFECT_id_MUZZLEFLASH */ + ATTRIB(Weapon, m_muzzleeffect, entity); +#endif /** M: crosshair : per-weapon crosshair: "CrosshairImage Size" */ ATTRIB(Weapon, w_crosshair, string, "gfx/crosshairmoustache"); /** A: crosshair : per-weapon crosshair size (argument two of "crosshair" field) */ @@ -72,6 +76,8 @@ CLASS(Weapon, Object) ATTRIB(Weapon, netname, string, ""); /** M: wepname : human readable name */ ATTRIB(Weapon, m_name, string, "AOL CD Thrower"); + /** M: deprecated refname : old reference name for compatibility with weapons that were renamed */ + ATTRIB(Weapon, m_deprecated_netname, string, ""); ATTRIB(Weapon, m_pickup, entity); @@ -101,7 +107,7 @@ CLASS(Weapon, Object) METHOD(Weapon, wr_playerdeath, void(Weapon this, entity actor, .entity weaponentity)) {} /** (SERVER) logic to run when weapon is lost */ METHOD(Weapon, wr_gonethink, void(Weapon this, entity actor, .entity weaponentity)) {} - /** (ALL) dump weapon cvars to config in data directory (see: sv_cmd dumpweapons) */ + /** (SERVER) dump weapon cvars to config in data directory (see: sv_cmd dumpweapons) */ METHOD(Weapon, wr_config, void(Weapon this)) {} /** (BOTH) weapon specific zoom reticle */ METHOD(Weapon, wr_zoom, bool(Weapon this, entity actor)) { @@ -112,8 +118,8 @@ CLASS(Weapon, Object) METHOD(Weapon, wr_zoomdir, bool(Weapon this)) {return false;} /** (CLIENT) weapon specific view model */ METHOD(Weapon, wr_viewmodel, string(Weapon this, entity wep)) { return string_null; } - /** (CLIENT) weapon specific glow */ - METHOD(Weapon, wr_glow, vector(Weapon this, entity actor, entity wepent)) { return '0 0 0'; } + /** (BOTH) weapon specific glow */ + METHOD(Weapon, wr_glow, vector(Weapon this, int actor_colors, entity wepent)) { return '0 0 0'; } /** (SERVER) the weapon is dropped */ METHOD(Weapon, wr_drop, void(Weapon this, entity actor, .entity weaponentity)) {} /** (SERVER) a weapon is picked up */ @@ -131,6 +137,9 @@ void weapon_defaultspawnfunc(entity this, Weapon e); #define SPAWNFUNC_WEAPON(name, weapon) \ spawnfunc(name) { weapon_defaultspawnfunc(this, weapon); } +#define SPAWNFUNC_WEAPON_COND(name, cond, wep1, wep2) \ + SPAWNFUNC_WEAPON(name, (cond ? wep1 : wep2)) + #else #define SPAWNFUNC_WEAPON(name, weapon) @@ -164,9 +173,9 @@ CLASS(WeaponPickup, Pickup) METHOD(WeaponPickup, giveTo, bool(entity this, entity item, entity player)) { bool b = Item_GiveTo(item, player); - if (b) { - LOG_TRACEF("entity %i picked up %s", player, this.m_name); - } + //if (b) { + //LOG_TRACEF("entity %i picked up %s", player, this.m_name); + //} return b; } #endif @@ -199,25 +208,30 @@ const int WEP_TYPE_MELEE_SEC = BIT(10); // secondary attack is melee swing const int WEP_FLAG_DUALWIELD = BIT(11); // weapon can be dual wielded const int WEP_FLAG_NODUAL = BIT(12); // weapon doesn't work well with dual wielding (fireball etc just explode on fire), doesn't currently prevent anything const int WEP_FLAG_PENETRATEWALLS = BIT(13); // weapon has high calibur bullets that can penetrate thick walls (WEAPONTODO) +const int WEP_FLAG_BLEED = BIT(14); // weapon pierces and causes bleeding (used for damage effects) +const int WEP_FLAG_NOTRUEAIM = BIT(15); // weapon doesn't aim directly at targets +const int WEP_FLAG_SPECIALATTACK = BIT(16); // marked as a special attack (not a true weapon), hidden from most weapon lists // variables: string weaponorder_byid; // functions: string W_FixWeaponOrder(string order, float complete); -string W_UndeprecateName(string s); string W_NameWeaponOrder(string order); string W_NumberWeaponOrder(string order); string W_FixWeaponOrder_BuildImpulseList(string o); string W_FixWeaponOrder_AllowIncomplete(entity this, string order); string W_FixWeaponOrder_ForceComplete(string order); -void W_RandomWeapons(entity e, int n); +WepSet W_RandomWeapons(entity e, WepSet remaining, int n); + +string GetAmmoPicture(Resource ammotype); + +string GetAmmoName(Resource ammotype); -string GetAmmoPicture(int ammotype); +entity GetAmmoItem(Resource ammotype); #ifdef CSQC -int GetAmmoTypeFromNum(int i); -int GetAmmoStat(int ammotype); +int GetAmmoStat(Resource ammotype); #endif string W_Sound(string w_snd);