X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fwepent.qc;h=43ca6e77ef03f8c77659d0d02bf20103ea15cab5;hb=dd6465ad2648cd459a68cba3ac1123be9b0910d9;hp=44a9d71f8b428c787fe34fd53b95a589ea56a98d;hpb=a3d9634886e52c442bd9d68a86b8df77e6ed26ed;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/wepent.qc b/qcsrc/common/wepent.qc index 44a9d71f8..43ca6e77e 100644 --- a/qcsrc/common/wepent.qc +++ b/qcsrc/common/wepent.qc @@ -4,21 +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 - -.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; - // #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, \ @@ -34,16 +19,32 @@ MACRO_END { (viewmodels[this.m_wepent_slot]).activeweapon = Weapons_from(ReadByte()); }) \ \ PROP(false, m_alpha, WEPENT_SET_NORMAL, \ - { WriteByte(chan, this.m_alpha * 16); }, \ - { (viewmodels[this.m_wepent_slot]).alpha = ReadByte() / 16; }) \ + { WriteByte(chan, rint(bound(-1, 254 * this.m_alpha, 254) - -1)); }, \ + { (viewmodels[this.m_wepent_slot]).alpha = (ReadByte() + -1) / 254; }) \ \ PROP(false, vortex_charge, WEPENT_SET_NORMAL, \ { WriteByte(chan, this.vortex_charge * 16); }, \ { (viewmodels[this.m_wepent_slot]).vortex_charge = ReadByte() / 16; }) \ \ + PROP(false, okvortex_charge, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.okvortex_charge * 16); }, \ + { (viewmodels[this.m_wepent_slot]).okvortex_charge = ReadByte() / 16; }) \ + \ PROP(false, m_gunalign, WEPENT_SET_NORMAL, \ { WriteByte(chan, this.m_gunalign); }, \ { (viewmodels[this.m_wepent_slot]).m_gunalign = ReadByte(); }) \ + \ + PROP(false, porto_v_angle_held, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.porto_v_angle_held); if(this.porto_v_angle_held) { \ + WriteAngle(chan, this.porto_v_angle.x); WriteAngle(chan, this.porto_v_angle.y); \ + } }, \ + { (viewmodels[this.m_wepent_slot]).angles_held_status = ReadByte(); if((viewmodels[this.m_wepent_slot]).angles_held_status) { \ + (viewmodels[this.m_wepent_slot]).angles_held_x = ReadAngle(); (viewmodels[this.m_wepent_slot]).angles_held_y = ReadAngle(); (viewmodels[this.m_wepent_slot]).angles_held_z = 0; } \ + else { (viewmodels[this.m_wepent_slot]).angles_held = '0 0 0'; } }) \ + \ + PROP(false, tuba_instrument, WEPENT_SET_NORMAL, \ + { WriteByte(chan, this.tuba_instrument); }, \ + { (viewmodels[this.m_wepent_slot]).tuba_instrument = ReadByte(); }) \ \ /**/ @@ -72,7 +73,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; @@ -92,12 +93,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; \ @@ -106,9 +117,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 @@ -117,7 +141,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) { \ @@ -134,10 +160,7 @@ MACRO_END NET_HANDLE(ENT_CLIENT_WEPENT, bool isnew) { if (isnew) - { - make_pure(this); this.classname = "wepent_receiver"; - } return ReadWepent(this); }