diff --git a/src/core/managers/entity_manager.cpp b/src/core/managers/entity_manager.cpp index 63baae441..0f8bed1cb 100644 --- a/src/core/managers/entity_manager.cpp +++ b/src/core/managers/entity_manager.cpp @@ -313,9 +313,9 @@ void DetourFireOutputInternal(CEntityIOOutput* const pThis, } } -SndOpEventGuid_t EntityEmitSoundFilter(IRecipientFilter& filter, uint32 ent, const char* pszSound, float flVolume, float flPitch) +SndOpEventGuid_t EntityEmitSoundFilter(CBitRecipientFilter& filter, uint32 ent, const char* pszSound, float flVolume, float flPitch) { - if (true) + if (!CBaseEntity_EmitSoundFilter) { CSSHARP_CORE_ERROR("[EntityManager][EmitSoundFilter] - Failed to emit a sound. Signature for \'CBaseEntity_EmitSoundFilter\' is " "not found. The latest update may have broken it."); @@ -325,7 +325,7 @@ SndOpEventGuid_t EntityEmitSoundFilter(IRecipientFilter& filter, uint32 ent, con EmitSound_t params; params.m_pSoundName = pszSound; params.m_flVolume = flVolume; - params.m_nPitch = flPitch; + params.m_nPitch = flPitch; // not working, can't fix, i think the game abandon it return CBaseEntity_EmitSoundFilter(filter, ent, params); } diff --git a/src/core/managers/entity_manager.h b/src/core/managers/entity_manager.h index 1fba43bc9..6664bf7c4 100644 --- a/src/core/managers/entity_manager.h +++ b/src/core/managers/entity_manager.h @@ -232,10 +232,29 @@ struct SndOpEventGuid_t { SoundEventGuid_t m_nGuid; uint64 m_hStackHash; + uint64 pad; // size might be incorrect }; -inline SndOpEventGuid_t(FASTCALL* CBaseEntity_EmitSoundFilter)(IRecipientFilter& filter, CEntityIndex ent, const EmitSound_t& params); +class CBitRecipientFilter +{ + public: + CBitRecipientFilter() : m_Recipients(0), m_bInitMessage(false), m_nBufType(BUF_RELIABLE) {} + CBitRecipientFilter(uint64 recipients) : m_Recipients(recipients), m_bInitMessage(false), m_nBufType(BUF_RELIABLE) {} + virtual ~CBitRecipientFilter() {} + virtual bool IsInitMessage() { return m_bInitMessage; } + virtual NetChannelBufType_t GetType() { return m_nBufType; } + virtual uint64* GetRecipients() { return &m_Recipients; } + + void AddRecipientsFromMask(uint64 mask) { m_Recipients = mask; } + + private: + uint64 m_Recipients; + NetChannelBufType_t m_nBufType; + bool m_bInitMessage; +}; + +inline SndOpEventGuid_t(FASTCALL* CBaseEntity_EmitSoundFilter)(CBitRecipientFilter& filter, CEntityIndex ent, const EmitSound_t& params); SndOpEventGuid_t -EntityEmitSoundFilter(IRecipientFilter& filter, uint32 ent, const char* pszSound, float flVolume = 1.0f, float flPitch = 1.0f); +EntityEmitSoundFilter(CBitRecipientFilter& filter, uint32 ent, const char* pszSound, float flVolume = 1.0f, float flPitch = 1.0f); } // namespace counterstrikesharp diff --git a/src/scripting/natives/natives_entities.cpp b/src/scripting/natives/natives_entities.cpp index b4116c24c..a5b501d8d 100644 --- a/src/scripting/natives/natives_entities.cpp +++ b/src/scripting/natives/natives_entities.cpp @@ -266,7 +266,7 @@ SoundEventGuid_t EmitSoundFilter(ScriptContext& script_context) auto volume = script_context.GetArgument(3); auto pitch = script_context.GetArgument(4); - CRecipientFilter filter{}; + CBitRecipientFilter filter{}; filter.AddRecipientsFromMask(filtermask); SndOpEventGuid_t ret = EntityEmitSoundFilter(filter, ent, sound, volume, pitch);