mirror of
https://github.com/Haze1337/Sound-Manager.git
synced 2025-12-08 02:48:33 +00:00
Compare commits
No commits in common. "main" and "1.0.2" have entirely different histories.
@ -1,5 +1,20 @@
|
|||||||
"Games"
|
"Games"
|
||||||
{
|
{
|
||||||
|
"#default"
|
||||||
|
{
|
||||||
|
"Addresses"
|
||||||
|
{
|
||||||
|
"CSoundscapeSystem"
|
||||||
|
{
|
||||||
|
"linux"
|
||||||
|
{
|
||||||
|
"signature" "soundscape_flush"
|
||||||
|
"read" "88"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"cstrike"
|
"cstrike"
|
||||||
{
|
{
|
||||||
"Addresses"
|
"Addresses"
|
||||||
@ -11,122 +26,52 @@
|
|||||||
"signature" "soundscape_flush"
|
"signature" "soundscape_flush"
|
||||||
"read" "93"
|
"read" "93"
|
||||||
}
|
}
|
||||||
"windows64"
|
|
||||||
{
|
|
||||||
"signature" "soundscape_flush"
|
|
||||||
"read" "107"
|
|
||||||
}
|
|
||||||
"linux"
|
|
||||||
{
|
|
||||||
"signature" "soundscape_flush"
|
|
||||||
"read" "129"
|
|
||||||
}
|
|
||||||
"linux64"
|
|
||||||
{
|
|
||||||
"signature" "soundscape_flush"
|
|
||||||
"read" "144"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
// search for "Error parsing soundscape file %s after %s" to find CSoundscapeSystem::AddSoundscapeFile. Then go to vtable that references it...
|
|
||||||
// go up two functions to find CSoundscapeSystem::FrameUpdatePostEntityThink
|
|
||||||
// then look around the middle for calls to CEnvSoundscape::UpdateForPlayer
|
|
||||||
// You can find stuff like this inside UpdateForPlayer: (which are floats)
|
|
||||||
// local_24 = 0x41200000;
|
|
||||||
// local_20 = 0x41200000;
|
|
||||||
// local_1c = 0x41200000;
|
|
||||||
// local_30 = 0xc1200000;
|
|
||||||
// local_2c = 0xc1200000;
|
|
||||||
// local_28 = 0xc1200000;
|
|
||||||
"CEnvSoundscape::UpdateForPlayer"
|
"CEnvSoundscape::UpdateForPlayer"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x55\x8B\xEC\x81\xEC\x80\x00\x00\x00\x56\x8B\xF1\x57\x8B\x7D"
|
"windows" "\x55\x8B\xEC\x81\xEC\x80\x00\x00\x00\x56\x8B\xF1\x80\xBE\x88\x03\x00\x00\x00"
|
||||||
"windows64" "\x40\x53\x56\x57\x48\x81\xEC\x10\x01\x00\x00"
|
|
||||||
"linux" "@_ZN14CEnvSoundscape15UpdateForPlayerER11ss_update_t"
|
"linux" "@_ZN14CEnvSoundscape15UpdateForPlayerER11ss_update_t"
|
||||||
"linux64" "@_ZN14CEnvSoundscape15UpdateForPlayerER11ss_update_t"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// search "CGameServer::BroadcastSound:" to find CGameServer::BroadcastSound and it includes a call to CGameClient::SendSound somewhere near the bottom
|
|
||||||
"CGameClient::SendSound"
|
"CGameClient::SendSound"
|
||||||
{
|
{
|
||||||
"library" "engine"
|
"library" "engine"
|
||||||
"windows" "\x55\x8B\xEC\x81\xEC\xCC\x00\x00\x00\x56\x8B\xF1"
|
"windows" "\x55\x8B\xEC\x81\xEC\xC8\x00\x00\x00\x56\x8B\xF1"
|
||||||
"windows64" "\x48\x89\x5C\x24\x2A\x48\x89\x74\x24\x2A\x48\x89\x7C\x24\x2A\x4C\x89\x74\x24\x2A\x55\x48\x8D\x6C\x24\x2A\x48\x81\xEC\x30\x01\x00\x00"
|
|
||||||
"linux" "@_ZN11CGameClient9SendSoundER11SoundInfo_tb"
|
"linux" "@_ZN11CGameClient9SendSoundER11SoundInfo_tb"
|
||||||
"linux64" "@_ZN11CGameClient9SendSoundER11SoundInfo_tb"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// search "cl_soundscape_flush" to find the command handler for "soundscape_flush"
|
|
||||||
"soundscape_flush"
|
"soundscape_flush"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x56\xE8\x2A\x2A\x2A\x2A\x8B\xF0\x85\xF6\x74\x2A\x8B\x16\x8B\xCE\x8B\x92\x2A\x2A\x2A\x2A\xFF\xD2\x84\xC0\x75\x2A\x33\xF6"
|
"windows" "\x56\xE8\x2A\x2A\x2A\x2A\x8B\xF0\x85\xF6\x74\x2A\x8B\x16\x8B\xCE\x8B\x92\x40\x01\x00\x00\xFF\xD2\x84\xC0\x75\x2A"
|
||||||
"windows64" "\x40\x53\x48\x83\xEC\x20\xE8\x2A\x2A\x2A\x2A\x48\x8B\xD8\x48\x85\xC0\x74\x2A\x48\x8B\x00"
|
|
||||||
"linux" "@_ZL16soundscape_flushRK8CCommand"
|
"linux" "@_ZL16soundscape_flushRK8CCommand"
|
||||||
"linux64" "@_ZL16soundscape_flushRK8CCommand"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// search "Shared activity collision" to find ActivityList_RegisterSharedActivity and the first function called inside is GetStringID
|
|
||||||
"CStringRegistry::GetStringID"
|
"CStringRegistry::GetStringID"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x55\x8B\xEC\x83\xEC\x0C\x8B\x45\x2A\x89\x4D\x2A\x53\xBB\xFF\xFF\x00\x00"
|
"windows" "\x55\x8B\xEC\x8B\x45\x08\x83\xEC\x08\x53"
|
||||||
"windows64" "\x48\x89\x5C\x24\x2A\x57\x48\x83\xEC\x30\x4C\x89\x7C\x24"
|
|
||||||
"linux" "@_ZN15CStringRegistry11GetStringIDEPKc"
|
"linux" "@_ZN15CStringRegistry11GetStringIDEPKc"
|
||||||
"linux64" "@_ZN15CStringRegistry11GetStringIDEPKc"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
{
|
{
|
||||||
// search "Replay client not found" to find CReplayServer::StartMaster and then look for the "cl_predict" string setting and grab the GetPlayerSlot offset from the next function call.
|
"AcceptInput"
|
||||||
// (windows64 probably means divide it by four 😇)
|
{
|
||||||
|
"windows" "36"
|
||||||
|
"linux" "37"
|
||||||
|
}
|
||||||
|
|
||||||
"CBaseClient::GetPlayerSlot"
|
"CBaseClient::GetPlayerSlot"
|
||||||
{
|
{
|
||||||
"windows" "14"
|
"windows" "14"
|
||||||
"windows64" "28"
|
|
||||||
"linux" "15"
|
"linux" "15"
|
||||||
"linux64" "24"
|
|
||||||
}
|
|
||||||
// find in CSoundscapeSystem::GetSoundscapeIndex
|
|
||||||
"CSoundscapeSystem::m_soundscapes"
|
|
||||||
{
|
|
||||||
"windows" "12"
|
|
||||||
"windows64" "24"
|
|
||||||
"linux" "12"
|
|
||||||
"linux64" "24"
|
|
||||||
}
|
|
||||||
"SoundInfo_t::fVolume"
|
|
||||||
{
|
|
||||||
"windows" "40"
|
|
||||||
"windows64" "44"
|
|
||||||
"linux" "40"
|
|
||||||
"linux64" "44"
|
|
||||||
}
|
|
||||||
"SoundInfo_t::bIsAmbient"
|
|
||||||
{
|
|
||||||
"windows" "85"
|
|
||||||
"windows64" "89"
|
|
||||||
"linux" "85"
|
|
||||||
"linux64" "89"
|
|
||||||
}
|
|
||||||
"ss_update_t::pCurrentSoundscape"
|
|
||||||
{
|
|
||||||
"windows" "4"
|
|
||||||
"windows64" "8"
|
|
||||||
"linux" "4"
|
|
||||||
"windows64" "8"
|
|
||||||
}
|
|
||||||
"CGameClient::thing"
|
|
||||||
{
|
|
||||||
"windows" "4"
|
|
||||||
"windows64" "8"
|
|
||||||
"linux" "4"
|
|
||||||
"windows64" "8"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -142,114 +87,54 @@
|
|||||||
"signature" "soundscape_flush"
|
"signature" "soundscape_flush"
|
||||||
"read" "94"
|
"read" "94"
|
||||||
}
|
}
|
||||||
"linux"
|
|
||||||
{
|
|
||||||
"signature" "soundscape_flush"
|
|
||||||
"read" "133"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"Signatures"
|
"Signatures"
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
Find string: Setting invalid soundscape, %s, as the
|
|
||||||
Go to function that uses this string
|
|
||||||
Go to the first xref
|
|
||||||
*/
|
|
||||||
"CEnvSoundscape::UpdateForPlayer"
|
"CEnvSoundscape::UpdateForPlayer"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x55\x8B\xEC\x83\xE4\xF0\x81\xEC\xA8\x00\x00\x00\x56\x8B\xF1\x57\x80\xBE\xDC\x03\x00\x00\x00"
|
"windows" "\x55\x8B\xEC\x83\xE4\xF0\x81\xEC\xA8\x00\x00\x00\x56\x8B\xF1\x57\x80\xBE\xDC\x03\x00\x00\x00"
|
||||||
"linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\xEC\x00\x00\x00\x8B\x5D\x08\x8B\x7D\x0C"
|
"linux" "\x55\x89\xE5\x81\xEC\xE8\x00\x00\x00\x89\x5D\xF4\x8B\x5D\x08\x89\x75\xF8\x8B\x75\x0C\x89\x7D\xFC\x80\xBB\xF4\x03\x00\x00\x00"
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Find string: reliable%s %s %d/%d/%d/%s\n
|
|
||||||
Go to function that uses this string
|
|
||||||
*/
|
|
||||||
"CGameClient::SendSound"
|
"CGameClient::SendSound"
|
||||||
{
|
{
|
||||||
"library" "engine"
|
"library" "engine"
|
||||||
"windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8B\x46\x04"
|
"windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8B\x46\x04"
|
||||||
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2C\x8B\x5D\x08\x8B\x75\x10\x8B\x03"
|
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x4C\x8B\x5D\x08\x8B\x7D\x0C\x0F\xB6\x75\x10"
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Find string: cl_soundscape_flush\n
|
|
||||||
Go to function that uses this string
|
|
||||||
*/
|
|
||||||
"soundscape_flush"
|
"soundscape_flush"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x56\xE8\x2A\x2A\x2A\x2A\x8B\xF0\x85\xF6\x74\x2A\x8B\x16\x8B\xCE\x8B\x92\x58\x01\x00\x00\xFF\xD2\x84\xC0\x75\x2A"
|
"windows" "\x56\xE8\x2A\x2A\x2A\x2A\x8B\xF0\x85\xF6\x74\x2A\x8B\x16\x8B\xCE\x8B\x92\x58\x01\x00\x00\xFF\xD2\x84\xC0\x75\x2A"
|
||||||
"linux" "\x55\x89\xE5\x53\x83\xEC\x04\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x89\xC3\x8B\x00\x8B\x80\x5C\x01\x00\x00\x3D\x2A\x2A\x2A\x2A\x75\x2A\xA1\x2A\x2A\x2A\x2A"
|
"linux" "\x55\x89\xE5\x53\x83\xEC\x14\xE8\x2A\x2A\x2A\x2A\x85\xC0\x89\xC3\x0F\x84\x2A\x2A\x2A\x2A"
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Find string: Can't find soundscape: %s\n
|
|
||||||
Go to function that uses this string
|
|
||||||
|
|
||||||
if ( !*(_DWORD *)(a1 + 964) )
|
|
||||||
return DevMsg("Found soundscape entity with no soundscape name.\n");
|
|
||||||
v1 = sub_821D00(&dword_17B5380); <<< Jump here
|
|
||||||
*(_DWORD *)(a1 + 968) = v1;
|
|
||||||
result = sub_821D20(&dword_17B5380, v1);
|
|
||||||
if ( !(_BYTE)result )
|
|
||||||
{
|
|
||||||
v3 = *(const char **)(a1 + 964);
|
|
||||||
if ( !v3 )
|
|
||||||
v3 = &nptr;
|
|
||||||
result = DevWarning("Can't find soundscape: %s\n", v3);
|
|
||||||
|
|
||||||
// ----------------------------------------------------- //
|
|
||||||
|
|
||||||
int __cdecl sub_821D00(int a1, int a2)
|
|
||||||
{
|
|
||||||
return sub_8B1670(a1 + 12, a2); << Jump here
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
"CStringRegistry::GetStringID"
|
"CStringRegistry::GetStringID"
|
||||||
{
|
{
|
||||||
"library" "server"
|
"library" "server"
|
||||||
"windows" "\x55\x8B\xEC\x8B\x45\x08\x83\xEC\x08\x56\x57\x8B\xF9\x85\xC0"
|
"windows" "\x55\x8B\xEC\x8B\x45\x08\x83\xEC\x08\x56\x57\x8B\xF9\x85\xC0"
|
||||||
"linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x2C\x8B\x55\x08\x8B\x45\x0C\x8B\x3A"
|
"linux" "\x55\xB9\xFF\xFF\xFF\xFF\x89\xE5\x56\xBE\xFF\xFF\x00\x00"
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"Offsets"
|
"Offsets"
|
||||||
{
|
{
|
||||||
|
"AcceptInput"
|
||||||
|
{
|
||||||
|
"windows" "41"
|
||||||
|
"linux" "42"
|
||||||
|
}
|
||||||
|
|
||||||
"CBaseClient::GetPlayerSlot"
|
"CBaseClient::GetPlayerSlot"
|
||||||
{
|
{
|
||||||
"windows" "16"
|
"windows" "16"
|
||||||
"linux" "17"
|
"linux" "17"
|
||||||
}
|
}
|
||||||
"CSoundscapeSystem::m_soundscapes"
|
|
||||||
{
|
|
||||||
"windows" "12"
|
|
||||||
"linux" "12"
|
|
||||||
}
|
|
||||||
"SoundInfo_t::fVolume"
|
|
||||||
{
|
|
||||||
"windows" "40"
|
|
||||||
"linux" "40"
|
|
||||||
}
|
|
||||||
"SoundInfo_t::bIsAmbient"
|
|
||||||
{
|
|
||||||
"windows" "89"
|
|
||||||
"linux" "89"
|
|
||||||
}
|
|
||||||
"ss_update_t::pCurrentSoundscape"
|
|
||||||
{
|
|
||||||
"windows" "4"
|
|
||||||
"linux" "4"
|
|
||||||
}
|
|
||||||
"CGameClient::thing"
|
|
||||||
{
|
|
||||||
"windows" "4"
|
|
||||||
"linux" "4"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ public Plugin myinfo =
|
|||||||
name = "Sound Manager",
|
name = "Sound Manager",
|
||||||
author = "Haze",
|
author = "Haze",
|
||||||
description = "",
|
description = "",
|
||||||
version = "1.0.5",
|
version = "1.0.2",
|
||||||
url = ""
|
url = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,16 +39,10 @@ Address gP_SoundscapeSystem = Address_Null;
|
|||||||
Handle gH_AcceptInput = null;
|
Handle gH_AcceptInput = null;
|
||||||
Handle gH_GetPlayerSlot = null;
|
Handle gH_GetPlayerSlot = null;
|
||||||
Handle gH_GetStringID = null;
|
Handle gH_GetStringID = null;
|
||||||
int gI_AmbientOffset = -1;
|
|
||||||
int gI_m_soundscapesOffset = -1;
|
|
||||||
int gI_VolumeOffset = -1;
|
|
||||||
int gI_CurrentSoundscapeOffset = -1;
|
|
||||||
int gI_CGameClientThing = -1;
|
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
int gI_SilentSoundScape = -1;
|
int gI_SilentSoundScape = -1;
|
||||||
char gS_WeaponID[32];
|
int gI_AmbientOffset = 0;
|
||||||
|
|
||||||
bool gB_ShouldHookShotgunShot = false;
|
bool gB_ShouldHookShotgunShot = false;
|
||||||
ArrayList gA_LoopingAmbients = null;
|
ArrayList gA_LoopingAmbients = null;
|
||||||
bool gB_EntitiesFound = false;
|
bool gB_EntitiesFound = false;
|
||||||
@ -67,11 +61,11 @@ public void OnPluginStart()
|
|||||||
gEV_Type = GetEngineVersion();
|
gEV_Type = GetEngineVersion();
|
||||||
if(gEV_Type == Engine_CSS)
|
if(gEV_Type == Engine_CSS)
|
||||||
{
|
{
|
||||||
FormatEx(gS_WeaponID, sizeof(gS_WeaponID), "m_iWeaponID");
|
gI_AmbientOffset = 85;
|
||||||
}
|
}
|
||||||
else if(gEV_Type == Engine_CSGO)
|
else if(gEV_Type == Engine_CSGO)
|
||||||
{
|
{
|
||||||
FormatEx(gS_WeaponID, sizeof(gS_WeaponID), "m_weapon");
|
gI_AmbientOffset = 89;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -161,11 +155,6 @@ public void OnClientCookiesCached(int client)
|
|||||||
{
|
{
|
||||||
gB_ShouldHookShotgunShot = true;
|
gB_ShouldHookShotgunShot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gI_Settings[client] & Mute_Soundscapes)
|
|
||||||
{
|
|
||||||
ClientCommand(client, "cl_soundscape_flush"); // maybe auth can take a long time and a soundscape slips through...
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action OnPlayerRunCmd(int client)
|
public Action OnPlayerRunCmd(int client)
|
||||||
@ -198,19 +187,7 @@ public Action OnPlayerRunCmd(int client)
|
|||||||
{
|
{
|
||||||
char sSound[PLATFORM_MAX_PATH];
|
char sSound[PLATFORM_MAX_PATH];
|
||||||
GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, PLATFORM_MAX_PATH);
|
GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, PLATFORM_MAX_PATH);
|
||||||
|
EmitSoundToClient(client, sSound, entity, SNDCHAN_STATIC, SNDLEVEL_NONE, SND_STOP, 0.0, SNDPITCH_NORMAL, _, _, _, true);
|
||||||
int channel = SNDCHAN_STATIC;
|
|
||||||
int level = SNDLEVEL_NONE;
|
|
||||||
float volume = 0.0;
|
|
||||||
int pitch = SNDPITCH_NORMAL;
|
|
||||||
char sSample[PLATFORM_MAX_PATH];
|
|
||||||
|
|
||||||
if (GetGameSoundParams(sSound, channel, level, volume, pitch, sSample, sizeof(sSample), entity))
|
|
||||||
{
|
|
||||||
sSound = sSample;
|
|
||||||
}
|
|
||||||
|
|
||||||
EmitSoundToClient(client, sSound, entity, SNDCHAN_STATIC, SNDLEVEL_NONE, SND_STOP, 0.0, 0, _, _, _, true);
|
|
||||||
|
|
||||||
if(gI_Settings[client] & Debug)
|
if(gI_Settings[client] & Debug)
|
||||||
{
|
{
|
||||||
@ -235,34 +212,9 @@ void LoadDHooks()
|
|||||||
|
|
||||||
StartPrepSDKCall_GetStringID(hGameData);
|
StartPrepSDKCall_GetStringID(hGameData);
|
||||||
HookSoundscapes(hGameData);
|
HookSoundscapes(hGameData);
|
||||||
HookAcceptInput();
|
HookAcceptInput(hGameData);
|
||||||
HookSendSound(hGameData);
|
HookSendSound(hGameData);
|
||||||
|
|
||||||
if ((gI_AmbientOffset = GameConfGetOffset(hGameData, "SoundInfo_t::bIsAmbient")) == -1)
|
|
||||||
{
|
|
||||||
SetFailState("Could not get SoundInfo_t::bIsAmbient offset");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((gI_m_soundscapesOffset = GameConfGetOffset(hGameData, "CSoundscapeSystem::m_soundscapes")) == -1)
|
|
||||||
{
|
|
||||||
SetFailState("Could not get CSoundscapeSystem::m_soundscapes offset");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((gI_VolumeOffset = GameConfGetOffset(hGameData, "SoundInfo_t::fVolume")) == -1)
|
|
||||||
{
|
|
||||||
SetFailState("Could not get SoundInfo_t::fVolume offset");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((gI_CurrentSoundscapeOffset = GameConfGetOffset(hGameData, "ss_update_t::pCurrentSoundscape")) == -1)
|
|
||||||
{
|
|
||||||
SetFailState("Could not get ss_update_t::pCurrentSoundscape");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((gI_CGameClientThing = GameConfGetOffset(hGameData, "CGameClient::thing")) == -1)
|
|
||||||
{
|
|
||||||
SetFailState("Could not get CGameClient::thing");
|
|
||||||
}
|
|
||||||
|
|
||||||
delete hGameData;
|
delete hGameData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,7 +240,7 @@ void StartPrepSDKCall_GetStringID(Handle hGameData)
|
|||||||
|
|
||||||
int GetSoundscapeIndex(const char[] sString)
|
int GetSoundscapeIndex(const char[] sString)
|
||||||
{
|
{
|
||||||
return SDKCall(gH_GetStringID, gP_SoundscapeSystem + view_as<Address>(gI_m_soundscapesOffset), sString);
|
return SDKCall(gH_GetStringID, gP_SoundscapeSystem + view_as<Address>(0xC), sString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnMapStart()
|
public void OnMapStart()
|
||||||
@ -329,7 +281,7 @@ void HookSoundscapes(Handle hGameData)
|
|||||||
struct ss_update_t
|
struct ss_update_t
|
||||||
{
|
{
|
||||||
CBasePlayer *pPlayer; Offset: 0 | Size: 4
|
CBasePlayer *pPlayer; Offset: 0 | Size: 4
|
||||||
CEnvSoundscape *pCurrentSoundscape; Offset: 4 | Size: 4
|
CEnvSoundscape pCurrentSoundscape; Offset: 4 | Size: 4
|
||||||
Vector playerPosition; Offset: 8 | Size: 12
|
Vector playerPosition; Offset: 8 | Size: 12
|
||||||
float currentDistance; Offset: 20 | Size: 4
|
float currentDistance; Offset: 20 | Size: 4
|
||||||
int traceCount; Offset: 24 | Size: 4
|
int traceCount; Offset: 24 | Size: 4
|
||||||
@ -340,12 +292,10 @@ struct ss_update_t
|
|||||||
//void CEnvSoundscape::UpdateForPlayer( ss_update_t &update )
|
//void CEnvSoundscape::UpdateForPlayer( ss_update_t &update )
|
||||||
public MRESReturn DHook_UpdateForPlayer(int pThis, Handle hParams)
|
public MRESReturn DHook_UpdateForPlayer(int pThis, Handle hParams)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
if(gI_SilentSoundScape == -1)
|
if(gI_SilentSoundScape == -1)
|
||||||
{
|
{
|
||||||
return MRES_Ignored;
|
return MRES_Ignored;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int client = DHookGetParamObjectPtrVar(hParams, 1, 0, ObjectValueType_CBaseEntityPtr);
|
int client = DHookGetParamObjectPtrVar(hParams, 1, 0, ObjectValueType_CBaseEntityPtr);
|
||||||
|
|
||||||
@ -366,7 +316,7 @@ public MRESReturn DHook_UpdateForPlayer(int pThis, Handle hParams)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DHookSetParamObjectPtrVar(hParams, 1, gI_CurrentSoundscapeOffset, ObjectValueType_CBaseEntityPtr, 0);
|
DHookSetParamObjectPtrVar(hParams, 1, 4, ObjectValueType_CBaseEntityPtr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
gI_LastSoundscape[client] = GetEntProp(client, Prop_Data, "soundscapeIndex");
|
gI_LastSoundscape[client] = GetEntProp(client, Prop_Data, "soundscapeIndex");
|
||||||
@ -375,13 +325,10 @@ public MRESReturn DHook_UpdateForPlayer(int pThis, Handle hParams)
|
|||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
//------------------------TRIGGER OUTPUTS------------------------
|
//------------------------TRIGGER OUTPUTS------------------------
|
||||||
void HookAcceptInput()
|
void HookAcceptInput(Handle hGameData)
|
||||||
{
|
{
|
||||||
Handle hGameData = LoadGameConfigFile("sdktools.games");
|
|
||||||
int offset = GameConfGetOffset(hGameData, "AcceptInput");
|
int offset = GameConfGetOffset(hGameData, "AcceptInput");
|
||||||
delete hGameData;
|
if(offset == 0)
|
||||||
|
|
||||||
if(offset == -1)
|
|
||||||
{
|
{
|
||||||
SetFailState("Failed to load \"AcceptInput\", invalid offset.");
|
SetFailState("Failed to load \"AcceptInput\", invalid offset.");
|
||||||
}
|
}
|
||||||
@ -412,13 +359,7 @@ public MRESReturn DHook_AcceptInput(int pThis, Handle hReturn, Handle hParams)
|
|||||||
char sParameter[128];
|
char sParameter[128];
|
||||||
DHookGetParamObjectPtrString(hParams, 4, 0, ObjectValueType_String, sParameter, 128);
|
DHookGetParamObjectPtrString(hParams, 4, 0, ObjectValueType_String, sParameter, 128);
|
||||||
|
|
||||||
char sExplode[1][128];
|
if(StrContains(sParameter, "play") != -1)
|
||||||
ExplodeString(sParameter, " ", sExplode, sizeof(sExplode), sizeof(sExplode[]));
|
|
||||||
|
|
||||||
if(strcmp(sExplode[0], "play") == 0
|
|
||||||
|| strcmp(sExplode[0], "playgamesound") == 0
|
|
||||||
|| strcmp(sExplode[0], "play_hrtf") == 0
|
|
||||||
|| strcmp(sExplode[0], "snd_playsounds") == 0)
|
|
||||||
{
|
{
|
||||||
if(gI_Settings[client] & Debug)
|
if(gI_Settings[client] & Debug)
|
||||||
{
|
{
|
||||||
@ -505,12 +446,12 @@ void HookSendSound(Handle hGameData)
|
|||||||
//void CGameClient::SendSound( SoundInfo_t &sound, bool isReliable )
|
//void CGameClient::SendSound( SoundInfo_t &sound, bool isReliable )
|
||||||
public MRESReturn DHook_SendSound(Address pThis, Handle hParams)
|
public MRESReturn DHook_SendSound(Address pThis, Handle hParams)
|
||||||
{
|
{
|
||||||
if(DHookGetParamObjectPtrVar(hParams, 1, gI_VolumeOffset, ObjectValueType_Float) == 0.0)
|
if(DHookGetParamObjectPtrVar(hParams, 1, 40, ObjectValueType_Float) == 0.0)
|
||||||
{
|
{
|
||||||
return MRES_Ignored;
|
return MRES_Ignored;
|
||||||
}
|
}
|
||||||
|
|
||||||
Address pIClient = pThis + view_as<Address>(gI_CGameClientThing);
|
Address pIClient = pThis + view_as<Address>(0x4);
|
||||||
int client = view_as<int>(SDKCall(gH_GetPlayerSlot, pIClient)) + 1;
|
int client = view_as<int>(SDKCall(gH_GetPlayerSlot, pIClient)) + 1;
|
||||||
|
|
||||||
if(!IsValidClient(client))
|
if(!IsValidClient(client))
|
||||||
@ -625,13 +566,6 @@ public int MenuHandler_Sounds(Menu menu, MenuAction action, int param1, int para
|
|||||||
{
|
{
|
||||||
CheckShotgunShotHook();
|
CheckShotgunShotHook();
|
||||||
}
|
}
|
||||||
else if(iOption == Mute_Soundscapes)
|
|
||||||
{
|
|
||||||
if(gI_Settings[param1] & Mute_Soundscapes)
|
|
||||||
{
|
|
||||||
ClientCommand(param1, "cl_soundscape_flush");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char sCookie[16];
|
char sCookie[16];
|
||||||
IntToString(gI_Settings[param1], sCookie, 16);
|
IntToString(gI_Settings[param1], sCookie, 16);
|
||||||
@ -710,7 +644,7 @@ public Action Hook_ShotgunShot(const char[] te_name, const int[] Players, int nu
|
|||||||
TE_WriteVector("m_vecOrigin", vTemp);
|
TE_WriteVector("m_vecOrigin", vTemp);
|
||||||
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
|
TE_WriteFloat("m_vecAngles[0]", TE_ReadFloat("m_vecAngles[0]"));
|
||||||
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
|
TE_WriteFloat("m_vecAngles[1]", TE_ReadFloat("m_vecAngles[1]"));
|
||||||
TE_WriteNum(gS_WeaponID, TE_ReadNum(gS_WeaponID));
|
TE_WriteNum("m_iWeaponID", TE_ReadNum("m_iWeaponID"));
|
||||||
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
|
TE_WriteNum("m_iMode", TE_ReadNum("m_iMode"));
|
||||||
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
|
TE_WriteNum("m_iSeed", TE_ReadNum("m_iSeed"));
|
||||||
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
|
TE_WriteNum("m_iPlayer", TE_ReadNum("m_iPlayer"));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user