From: TimePath Date: Sun, 28 Aug 2016 09:57:48 +0000 (+1000) Subject: entcs: fix name changing X-Git-Tag: xonotic-v0.8.2~654 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=b87a458b1cf7c4d893cc462f2ec0b08fd8fc96c6;p=xonotic%2Fxonotic-data.pk3dir.git entcs: fix name changing --- diff --git a/qcsrc/common/ent_cs.qc b/qcsrc/common/ent_cs.qc index 32c06d9ea..17ee08e7c 100644 --- a/qcsrc/common/ent_cs.qc +++ b/qcsrc/common/ent_cs.qc @@ -1,41 +1,51 @@ #include "ent_cs.qh" -// #define PROP(public, fld, sv, cl) -#define ENTCS_NETPROPS(PROP) PROP(false, sv_entnum, {}, {}) /* sentinel */ \ - PROP(false, origin, \ +#define ENTCS_SET_NORMAL(var, x) MACRO_BEGIN \ + var = x; \ +MACRO_END + +/** the engine player name strings are mutable! */ +#define ENTCS_SET_MUTABLE_STRING(var, x) MACRO_BEGIN \ + if (var) strunzone(var); \ + var = strzone(x); \ +MACRO_END + +// #define PROP(public, fld, set, sv, cl) +#define ENTCS_NETPROPS(PROP) PROP(false, sv_entnum, ENTCS_SET_NORMAL, {}, {}) /* sentinel */ \ + PROP(false, origin, ENTCS_SET_NORMAL, \ { WriteShort(chan, this.origin.x); WriteShort(chan, this.origin.y); \ WriteShort(chan, this.origin.z); }, \ { this.has_sv_origin = true; vector v; v.x = ReadShort(); v.y = ReadShort(); v.z = ReadShort(); setorigin(this, v); }) \ \ - PROP(false, angles_y, \ + PROP(false, angles_y, ENTCS_SET_NORMAL, \ { WriteByte(chan, this.angles.y / 360 * 256); }, \ { vector v = '0 0 0'; v.y = ReadByte() / 256 * 360; this.angles = v; }) \ \ - PROP(false, health, \ + PROP(false, health, ENTCS_SET_NORMAL, \ { WriteByte(chan, bound(0, this.health / 10, 255)); /* FIXME: use a better scale? */ }, \ { this.healthvalue = ReadByte() * 10; }) \ \ - PROP(false, armorvalue, \ + PROP(false, armorvalue, ENTCS_SET_NORMAL, \ { WriteByte(chan, bound(0, this.armorvalue / 10, 255)); /* FIXME: use a better scale? */ }, \ { this.armorvalue = ReadByte() * 10; }) \ \ - PROP(true, netname, \ + PROP(true, netname, ENTCS_SET_MUTABLE_STRING, \ { WriteString(chan, this.netname); }, \ { if (this.netname) strunzone(this.netname); this.netname = strzone(ReadString()); }) \ \ - PROP(true, model, \ + PROP(true, model, ENTCS_SET_NORMAL, \ { WriteString(chan, this.model); }, \ { if (this.model) strunzone(this.model); this.model = strzone(ReadString()); }) \ \ - PROP(true, skin, \ + PROP(true, skin, ENTCS_SET_NORMAL, \ { WriteByte(chan, this.skin); }, \ { this.skin = ReadByte(); }) \ \ - PROP(true, clientcolors, \ + PROP(true, clientcolors, ENTCS_SET_NORMAL, \ { WriteByte(chan, this.clientcolors); }, \ { this.colormap = ReadByte(); }) \ \ - PROP(true, frags, \ + PROP(true, frags, ENTCS_SET_NORMAL, \ { WriteShort(chan, this.frags); }, \ { this.frags = ReadShort(); }) \ \ @@ -47,7 +57,7 @@ STATIC_INIT(ENTCS_PUBLICMASK) { int i = 0; - #define X(public, fld, sv, cl) { \ + #define X(public, fld, set, sv, cl) { \ if (public) { \ ENTCS_PUBLICMASK |= BIT(i); \ } \ @@ -77,7 +87,7 @@ WriteByte(chan, etof(player) - 1); WriteShort(chan, sf); int i = 0; - #define X(public, fld, sv, cl) { \ + #define X(public, fld, set, sv, cl) { \ if (sf & BIT(i)) { \ sv; \ } \ @@ -98,9 +108,9 @@ this.nextthink = time + 0.033333333333; // TODO: increase this to like 0.15 once the client can do smoothing entity o = this.owner; int i = 0; - #define X(public, fld, sv, cl) { \ + #define X(public, fld, set, sv, cl) { \ if (o.fld != this.fld) { \ - this.fld = o.fld; \ + set(this.fld, o.fld); \ this.SendFlags |= BIT(i); \ } \ i += 1; \ @@ -198,7 +208,7 @@ e.has_sv_origin = false; e.m_entcs_private = boolean(sf & BIT(0)); int i = 0; - #define X(public, fld, sv, cl) { \ + #define X(public, fld, set, sv, cl) { \ if (sf & BIT(i)) { \ cl; \ } \