X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Feffects%2Fall.qc;h=1fade55cf0407e59bfcb2735ffb75ccd1a289be5;hp=af41054e31c1c40c462ce041a2cc540fa1c570be;hb=90d9f7c775306324957323d53d5a4ad995d999e3;hpb=b945d959784e5b249c66aea4f3326d8ae048f1cd diff --git a/qcsrc/common/effects/all.qc b/qcsrc/common/effects/all.qc index af41054e3..1fade55cf 100644 --- a/qcsrc/common/effects/all.qc +++ b/qcsrc/common/effects/all.qc @@ -4,25 +4,18 @@ REGISTER_NET_TEMP(net_effect) #ifdef CSQC NET_HANDLE(net_effect, bool isNew) { - int net_name = (Effects_COUNT >= 255) ? ReadShort() : ReadByte(); + int net_name = (REGISTRY_COUNT(Effects) >= 255) ? ReadShort() : ReadByte(); - entity eff = Effects_from(net_name); + entity eff = REGISTRY_GET(Effects, net_name); vector vel = '0 0 0'; int eff_cnt = 1; bool eff_trail = eff.eent_eff_trail; - vector v; - v_x = ReadCoord(); - v_y = ReadCoord(); - v_z = ReadCoord(); + vector v = ReadVector(); bool use_vel = ReadByte(); if(use_vel) - { - vel_x = ReadCoord(); - vel_y = ReadCoord(); - vel_z = ReadCoord(); - } + vel = ReadVector(); if(!eff_trail) eff_cnt = ReadByte(); @@ -41,20 +34,16 @@ bool Net_Write_Effect(entity this, entity client, int sf) int channel = MSG_ONE; msg_entity = client; WriteHeader(channel, net_effect); - (Effects_COUNT >= 255) + (REGISTRY_COUNT(Effects) >= 255) ? WriteShort(channel, this.m_id) : WriteByte(channel, this.m_id); - WriteCoord(channel, this.eent_net_location_x); - WriteCoord(channel, this.eent_net_location_y); - WriteCoord(channel, this.eent_net_location_z); + WriteVector(channel, this.eent_net_location); // attempt to save a tiny bit more bandwidth by not sending velocity if it isn't set if(this.eent_net_velocity) { WriteByte(channel, true); - WriteCoord(channel, this.eent_net_velocity_x); - WriteCoord(channel, this.eent_net_velocity_y); - WriteCoord(channel, this.eent_net_velocity_z); + WriteVector(channel, this.eent_net_velocity); } else { WriteByte(channel, false); } @@ -62,7 +51,7 @@ bool Net_Write_Effect(entity this, entity client, int sf) return true; } -void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt) +void Send_Effect_Except(entity eff, vector eff_loc, vector eff_vel, int eff_cnt, entity ignore) { if(!eff) { return; } if(!eff.eent_eff_trail && !eff_cnt) { return; } // effect has no count! @@ -75,10 +64,15 @@ void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt) net_eff.eent_net_count = eff_cnt; net_eff.eent_eff_trail = eff.eent_eff_trail; - FOREACH_CLIENT(IS_REAL_CLIENT(it), Net_Write_Effect(net_eff, it, 0)); + FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != ignore && !(IS_SPEC(it) && it.enemy == ignore), Net_Write_Effect(net_eff, it, 0)); delete(net_eff); } +void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt) +{ + Send_Effect_Except(eff, eff_loc, eff_vel, eff_cnt, NULL); +} + void Send_Effect_(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt) { // problem with this is, we might not have all the available effects for it @@ -86,7 +80,7 @@ void Send_Effect_(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt) Send_Effect(it, eff_loc, eff_vel, eff_cnt); return; }); - // revert to engine handling + // revert to engine handling TODO: send the effect name and draw it on the client side? not as light on networking, but resolves the use of server side effects __pointparticles(_particleeffectnum(eff_name), eff_loc, eff_vel, eff_cnt); } #endif