Fix `sv_alltalk 1` (broken originally by respawn changes) (#291)
* fix sv_alltalk 1 (broken originally by respawn changes) * nvm i forgor to commit literally the main file * fix formatting * unsure why this was buidling but it shouldn't've been? fix build errors regardless * remove duplicate alltalk.cpp * add (experimental) potentially less jank patch * (now working) better patch for checking if alltalk is enabled * oops put a z in it boo womp * fixup formatting
This commit is contained in:
parent
06221fab6b
commit
7720e51493
|
@ -522,6 +522,7 @@
|
|||
<ClCompile Include="scripts\server\miscserverfixes.cpp" />
|
||||
<ClCompile Include="scripts\server\miscserverscript.cpp" />
|
||||
<ClCompile Include="scripts\server\scriptuserinfo.cpp" />
|
||||
<ClCompile Include="server\alltalk.cpp" />
|
||||
<ClCompile Include="server\auth\bansystem.cpp" />
|
||||
<ClCompile Include="server\auth\serverauthentication.cpp" />
|
||||
<ClCompile Include="server\buildainfile.cpp" />
|
||||
|
|
|
@ -1435,6 +1435,9 @@
|
|||
<ClCompile Include="dedicated\dedicatedlogtoclient.cpp">
|
||||
<Filter>Source Files\dedicated</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="server\alltalk.cpp">
|
||||
<Filter>Source Files\server</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MASM Include="audio_asm.asm">
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
#include "core/convar/convar.h"
|
||||
#include "engine/r2engine.h"
|
||||
|
||||
size_t __fastcall ShouldAllowAlltalk()
|
||||
{
|
||||
// this needs to return a 64 bit integer where 0 = true and 1 = false
|
||||
static ConVar* Cvar_sv_alltalk = R2::g_pCVar->FindVar("sv_alltalk");
|
||||
if (Cvar_sv_alltalk->GetBool())
|
||||
return 0;
|
||||
|
||||
// lobby should default to alltalk, otherwise don't allow it
|
||||
return strcmp(R2::g_pGlobals->m_pMapName, "mp_lobby");
|
||||
}
|
||||
|
||||
ON_DLL_LOAD_RELIESON("engine.dll", ServerAllTalk, ConVar, (CModule module))
|
||||
{
|
||||
// replace strcmp function called in CClient::ProcessVoiceData with our own code that calls ShouldAllowAllTalk
|
||||
MemoryAddress base = module.Offset(0x1085FA);
|
||||
|
||||
base.Patch("48 B8"); // mov rax, 64 bit int
|
||||
// (uint8_t*)&ShouldAllowAlltalk doesn't work for some reason? need to make it a uint64 first
|
||||
uint64_t pShouldAllowAllTalk = reinterpret_cast<uint64_t>(ShouldAllowAlltalk);
|
||||
base.Offset(0x2).Patch((uint8_t*)&pShouldAllowAllTalk, 8);
|
||||
base.Offset(0xA).Patch("FF D0"); // call rax
|
||||
|
||||
// nop until compare (test eax, eax)
|
||||
base.Offset(0xC).NOP(0x7);
|
||||
}
|
Loading…
Reference in New Issue