#include "globalsound.qh"
-#include "../../ent_cs.qh"
+#include <common/ent_cs.qh>
#ifdef IMPLEMENTATION
- #include "../../animdecide.qh"
+ #include <common/animdecide.qh>
#ifdef SVQC
- #include "../../../server/cl_player.qh"
+ #include <server/cl_player.qh>
#endif
REGISTER_NET_TEMP(globalsound)
REGISTER_NET_TEMP(playersound)
+ string GlobalSound_sample(string pair, float r);
+
#ifdef SVQC
+ /** Use new sound handling. TODO: use when sounds play correctly on clients */
+ bool autocvar_g_debug_globalsounds = false;
/**
* @param from the source entity, its position is sent
* @param gs the global sound def
{
assert(IS_PLAYER(from), eprint(from));
if (channel == MSG_ONE && !IS_REAL_CLIENT(msg_entity)) return;
+ if (!autocvar_g_debug_globalsounds) {
+ string sample = GlobalSound_sample(gs.m_globalsoundstr, r);
+ switch (channel) {
+ case MSG_ONE:
+ soundto(channel, from, chan, sample, vol, atten);
+ break;
+ case MSG_ALL:
+ _sound(from, chan, sample, vol, atten);
+ break;
+ }
+ return;
+ }
WriteHeader(channel, globalsound);
WriteByte(channel, gs.m_id);
WriteByte(channel, r * 255);
{
assert(IS_PLAYER(from), eprint(from));
if (channel == MSG_ONE && !IS_REAL_CLIENT(msg_entity)) return;
+ if (!autocvar_g_debug_globalsounds) {
+ UpdatePlayerSounds(from);
+ string s = from.(ps.m_playersoundfld);
+ string sample = GlobalSound_sample(s, r);
+ switch (channel) {
+ case MSG_ONE:
+ soundto(channel, from, chan, sample, vol, atten);
+ break;
+ case MSG_ALL:
+ _sound(from, chan, sample, vol, atten);
+ break;
+ }
+ return;
+ }
WriteHeader(channel, playersound);
WriteByte(channel, ps.m_id);
WriteByte(channel, r * 255);
}
#endif
- string GlobalSound_sample(string pair, float r);
-
#ifdef CSQC
NET_HANDLE(globalsound, bool isnew)
fclose(fh);
}
- #ifdef CSQC
+ //#ifdef CSQC
.string GetPlayerSoundSampleField(string type)
{
void ClearPlayerSounds(entity this)
{
- FOREACH(PlayerSounds, true, LAMBDA(
+ FOREACH(PlayerSounds, true, {
.string fld = it.m_playersoundfld;
if (this.(fld))
- {
- strunzone(this.(fld));
- this.(fld) = string_null;
- }
- ));
+ {
+ strunzone(this.(fld));
+ this.(fld) = string_null;
+ }
+ });
}
bool LoadPlayerSounds(entity this, string f, bool strict)
LoadPlayerSounds(this, get_model_datafilename(this.model, 0, "sounds"), true);
}
- #endif
+ //#endif
#ifdef SVQC
- bool autocvar_g_debug_globalsounds;
-
void _GlobalSound(entity this, entity gs, entity ps, string sample, int chan, int voicetype, bool fake)
{
if (gs == NULL && ps == NULL && sample == "") return;
+ if(this.classname == "body") return;
float r = random();
if (sample != "") sample = GlobalSound_sample(sample, r);
switch (voicetype)
if (fake) { msg_entity = this; X(); }
else
{
- FOR_EACH_REALCLIENT(msg_entity)
- {
- if (!teamplay || msg_entity.team == this.team) X();
- }
+ FOREACH_CLIENT(IS_REAL_CLIENT(it) && (!teamplay || msg_entity.team == this.team), LAMBDA(
+ msg_entity = it;
+ X();
+ ));
}
#undef X
break;
case VOICETYPE_TAUNT:
{
if (voicetype == VOICETYPE_AUTOTAUNT) if (!sv_autotaunt) { break; }else {}
- else if (IS_PLAYER(this) && this.deadflag == DEAD_NO) animdecide_setaction(this, ANIMACTION_TAUNT,
+ else if (IS_PLAYER(this) && !IS_DEAD(this)) animdecide_setaction(this, ANIMACTION_TAUNT,
true);
if (!sv_taunt) break;
if (autocvar_sv_gentle) break;
}
else
{
- FOR_EACH_REALCLIENT(msg_entity)
- {
+ FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(
+ msg_entity = it;
X();
- }
+ ));
}
#undef X
break;
}
else
{
- if (gs)
- {
- if(autocvar_g_debug_globalsounds)
- globalsound(MSG_ALL, this, gs, r, chan, VOL_BASE, ATTEN_NORM);
- else
- _sound(this, chan, GlobalSound_sample(gs.m_globalsoundstr, r), VOL_BASE, ATTEN_NORM);
- }
+ if (gs) globalsound(MSG_ALL, this, gs, r, chan, VOL_BASE, ATTEN_NORM);
else if (ps) playersound(MSG_ALL, this, ps, r, chan, VOL_BASE, ATTEN_NORM);
else _sound(this, chan, sample, VOL_BASE, ATTEN_NORM);
}