X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fwepent.qc;h=e244e7b7c9522b62848f3dc44e8567f82413a48b;hb=468b023e4b41cbd40bae363aa136b102a63fc811;hp=bb9308424c94e1e9d7ae7ebbb47bf77d1792fa1a;hpb=ecebe32dc00c4236a4050b73a9dcc9afbcddf087;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/wepent.qc b/qcsrc/common/wepent.qc index bb9308424..e244e7b7c 100644 --- a/qcsrc/common/wepent.qc +++ b/qcsrc/common/wepent.qc @@ -4,25 +4,6 @@ var = x; \ MACRO_END -/** the engine player name strings are mutable! */ -#define WEPENT_SET_MUTABLE_STRING(var, x) MACRO_BEGIN \ - if (var) strunzone(var); \ - var = strzone(x); \ -MACRO_END - -#ifdef SVQC - .int w_sv_entnum; - .Weapon w_m_switchweapon; - .Weapon w_m_switchingweapon; - .Weapon w_m_weapon; - //.float w_weapon_nextthink; - .float w_m_alpha; - .float w_vortex_charge; - .int w_m_gunalign; - .bool w_porto_v_angle_held; - .int w_tuba_instrument; -#endif - // #define PROP(public, fld, set, sv, cl) #define WEPENT_NETPROPS(PROP) PROP(false, sv_entnum, WEPENT_SET_NORMAL, {}, {}) /* sentinel */ \ PROP(false, m_switchweapon, WEPENT_SET_NORMAL, \ @@ -88,7 +69,7 @@ MACRO_END WriteHeader(chan, ENT_CLIENT_WEPENT); else WriteHeader(chan, CLIENT_WEPENT); - .entity weaponentity = this.weaponentity_fld; + .entity weaponentity = this.owner.weaponentity_fld; WriteByte(chan, weaponslot(weaponentity)); WriteShort(chan, sf); int i = 0; @@ -108,12 +89,22 @@ MACRO_END return _wepent_send(this, to, sf, MSG_ENTITY); } - void wepent_update(entity this) + void wepent_think(entity this) { + if(wasfreed(this.owner) || !this.owner) + { + delete(this); + return; + } + + this.nextthink = time; + + entity o = this.owner; + int i = 0; #define X(public, fld, set, sv, cl) { \ - if (this.w_##fld != this.fld) { \ - set(this.w_##fld, this.fld); \ + if (this.fld != o.fld) { \ + set(this.fld, o.fld); \ this.SendFlags |= BIT(i); \ } \ i += 1; \ @@ -122,9 +113,22 @@ MACRO_END #undef X } + bool wepent_customize(entity this, entity client) + { + //entity e = WaypointSprite_getviewentity(client); + .entity weaponentity = this.owner.weaponentity_fld; + return client.(weaponentity) == this.owner; + } + void wepent_link(entity wep) { - Net_LinkEntity(wep, false, 0, wepent_send); + entity e = new(wepent_sender); + e.owner = wep; + setthink(e, wepent_think); + e.nextthink = time; + //e.drawonlytoclient = wep.owner; + setcefc(e, wepent_customize); + Net_LinkEntity(e, false, 0, wepent_send); } #endif @@ -133,7 +137,9 @@ MACRO_END bool ReadWepent(entity this) { - this.m_wepent_slot = ReadByte(); + int slot = ReadByte(); + this.m_wepent_slot = slot; + viewmodels[slot].m_wepent_slot = slot; int sf = ReadShort(); int i = 0; #define X(public, fld, set, sv, cl) { \ @@ -150,10 +156,7 @@ MACRO_END NET_HANDLE(ENT_CLIENT_WEPENT, bool isnew) { if (isnew) - { - make_pure(this); this.classname = "wepent_receiver"; - } return ReadWepent(this); }