#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;
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);
WriteVector(channel, this.eent_net_location);
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!
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 && 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
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