From 7f867221168daad378786e4335fd73c3d4445ff4 Mon Sep 17 00:00:00 2001
From: r-ex <67599507+r-ex@users.noreply.github.com>
Date: Wed, 20 Oct 2021 17:04:21 +0100
Subject: [PATCH] changed paint hook for logsystem and fixed some issue (#58)
* changed paint hook
* Update gameclasses.cpp
* fixed vector issue with logsystem (i think)
---
r5dev/include/hooks.h | 10 +++++++---
r5dev/include/patterns.h | 6 +++---
r5dev/r5dev.vcxproj | 2 +-
r5dev/r5dev.vcxproj.filters | 6 +++---
r5dev/src/cenginevgui.cpp | 29 +++++++++++++++++++++++++++++
r5dev/src/cfpspanel.cpp | 15 ---------------
r5dev/src/gameclasses.cpp | 3 ++-
r5dev/src/hooks/hooks.cpp | 6 +++---
r5dev/src/logsystem.cpp | 18 +++++++++++++-----
9 files changed, 61 insertions(+), 34 deletions(-)
create mode 100644 r5dev/src/cenginevgui.cpp
delete mode 100644 r5dev/src/cfpspanel.cpp
diff --git a/r5dev/include/hooks.h b/r5dev/include/hooks.h
index f5af6b96..2e37e077 100644
--- a/r5dev/include/hooks.h
+++ b/r5dev/include/hooks.h
@@ -127,10 +127,16 @@ namespace Hooks
extern FrameUpdateFn originalFrameUpdate;
#pragma endregion
+#pragma region CEngineVGui
+ int CEngineVGui_Paint(void* thisptr, int mode);
+
+ using CEngineVGui_PaintFn = int(*)(void*, int);
+ extern CEngineVGui_PaintFn originalCEngineVGui_Paint;
+#pragma endregion
+
#pragma region Other
int MSG_EngineError(char* fmt, va_list args);
bool LoadPlaylist(const char* playlist);
- void CFPSPanel_Paint(void* thisptr);
using MSG_EngineErrorFn = int(*)(char*, va_list);
extern MSG_EngineErrorFn originalMSG_EngineError;
@@ -138,8 +144,6 @@ namespace Hooks
using LoadPlaylistFn = bool(*)(const char*);
extern LoadPlaylistFn originalLoadPlaylist;
- using CFPSPanel_PaintFn = void(*)(void*);
- extern CFPSPanel_PaintFn originalCFPSPanel_Paint;
#pragma endregion
void InstallHooks();
diff --git a/r5dev/include/patterns.h b/r5dev/include/patterns.h
index f6182a38..e1c7d70d 100644
--- a/r5dev/include/patterns.h
+++ b/r5dev/include/patterns.h
@@ -150,9 +150,9 @@ namespace
FUNC_AT_ADDRESS(addr_KeyValues_FindKey, void*(*)(void*, const char*, bool), r5_patterns.PatternSearch("40 56 57 41 57 48 81 EC ?? ?? ?? ?? 45").GetPtr());
#pragma endregion
-#pragma region CFPSPanel
- /*0x14074A230*/
- FUNC_AT_ADDRESS(addr_CFPSPanel_Paint, void(*)(void*), r5_patterns.PatternSearch("48 8B C4 55 56 41 55 48 8D A8 ? ? ? ?").GetPtr());
+#pragma region CEngineVGui
+ /*0x140283FD0*/
+ FUNC_AT_ADDRESS(addr_CEngineVGui_Paint, int(*)(void*, int), r5_patterns.PatternSearch("41 55 41 56 48 83 EC 78 44 8B EA").GetPtr());
#pragma endregion
diff --git a/r5dev/r5dev.vcxproj b/r5dev/r5dev.vcxproj
index 5c04ce0a..2102780c 100644
--- a/r5dev/r5dev.vcxproj
+++ b/r5dev/r5dev.vcxproj
@@ -372,7 +372,7 @@ if not EXIST $(SolutionDir)r5net\lib\$(Configuration)\r5net.lib (
-
+
Use
pch.h
diff --git a/r5dev/r5dev.vcxproj.filters b/r5dev/r5dev.vcxproj.filters
index 8e2d1748..ed4a00fa 100644
--- a/r5dev/r5dev.vcxproj.filters
+++ b/r5dev/r5dev.vcxproj.filters
@@ -112,7 +112,7 @@
{a2663195-c4f2-4d5f-8d65-cfed54976e4c}
-
+
{10a22c13-763e-4054-bf6a-8f4b61697520}
@@ -219,8 +219,8 @@
hooks\src\cmatsystemsurface
-
- hooks\src\cfpspanel
+
+ hooks\src\cenginevgui
r5-sdk\src
diff --git a/r5dev/src/cenginevgui.cpp b/r5dev/src/cenginevgui.cpp
new file mode 100644
index 00000000..9b888f3e
--- /dev/null
+++ b/r5dev/src/cenginevgui.cpp
@@ -0,0 +1,29 @@
+#include "pch.h"
+#include "hooks.h"
+#include "logsystem.h"
+
+namespace Hooks
+{
+ CEngineVGui_PaintFn originalCEngineVGui_Paint = nullptr;
+}
+
+int Hooks::CEngineVGui_Paint(void* thisptr, int mode)
+{
+ int result = originalCEngineVGui_Paint(thisptr, mode);
+
+ static void* g_pMatSystemSurface = MemoryAddress(0x14D40B3B0).RCast();
+ static auto RenderStart = MemoryAddress(0x14053EFC0).RCast();
+ static auto RenderEnd = MemoryAddress(0x14053F1B0).RCast();
+
+ if (mode == 1 || mode == 2)
+ {
+ RenderStart(g_pMatSystemSurface);
+
+ g_LogSystem.Update();
+
+ RenderEnd();
+ }
+
+
+ return result;
+}
\ No newline at end of file
diff --git a/r5dev/src/cfpspanel.cpp b/r5dev/src/cfpspanel.cpp
deleted file mode 100644
index 7aa209de..00000000
--- a/r5dev/src/cfpspanel.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "pch.h"
-#include "hooks.h"
-#include "logsystem.h"
-
-namespace Hooks
-{
- CFPSPanel_PaintFn originalCFPSPanel_Paint = nullptr;
-}
-
-void Hooks::CFPSPanel_Paint(void* thisptr)
-{
- originalCFPSPanel_Paint(thisptr);
-
- g_LogSystem.Update();
-}
\ No newline at end of file
diff --git a/r5dev/src/gameclasses.cpp b/r5dev/src/gameclasses.cpp
index 26008da9..fb84fac5 100644
--- a/r5dev/src/gameclasses.cpp
+++ b/r5dev/src/gameclasses.cpp
@@ -414,6 +414,7 @@ namespace GameGlobals
void* BanIDConCommand = CreateCustomConCommand("banid", "Bans a client from the Server via originID, userID or IP | Usage: banid (originID/ipAddress/userID)", 0, CustomCommandVariations::BanID_Callback, nullptr);
ConVar* DrawConsoleOverlayConVar = CreateCustomConVar("cl_drawconsoleoverlay", "0", 0, "Draw the console overlay at the top of the screen", false, 0.f, false, 0.f, nullptr, nullptr);
+ ConVar* ConsoleOverlayLinesConVar = CreateCustomConVar("cl_consoleoverlay_lines", "3", 0, "Number of lines of console output to draw", false, 1.f, false, 50.f, nullptr, nullptr);
}
void* CreateCustomConCommand(const char* name, const char* helpString, int flags, void* callback, void* callbackAfterExecution)
@@ -528,4 +529,4 @@ const char* KeyValues::GetName()
{
return GameGlobals::KeyValuesSystem->GetStringForSymbol(MAKE_3_BYTES_FROM_1_AND_2(m_iKeyNameCaseSensitive, m_iKeyNameCaseSensitive2));
}
-#pragma endregion
\ No newline at end of file
+#pragma endregion
diff --git a/r5dev/src/hooks/hooks.cpp b/r5dev/src/hooks/hooks.cpp
index c2a20187..5c2c8611 100644
--- a/r5dev/src/hooks/hooks.cpp
+++ b/r5dev/src/hooks/hooks.cpp
@@ -59,7 +59,7 @@ void Hooks::InstallHooks()
// Hook Utility functions
MH_CreateHook(addr_MSG_EngineError, &Hooks::MSG_EngineError, reinterpret_cast(&originalMSG_EngineError));
MH_CreateHook(addr_LoadPlaylist, &Hooks::LoadPlaylist, reinterpret_cast(&originalLoadPlaylist));
- MH_CreateHook(addr_CFPSPanel_Paint, &Hooks::CFPSPanel_Paint, reinterpret_cast(&originalCFPSPanel_Paint));
+ MH_CreateHook(addr_CEngineVGui_Paint, &Hooks::CEngineVGui_Paint, reinterpret_cast(&originalCEngineVGui_Paint));
///////////////////////////////////////////////////////////////////////////////
// Hook WinAPI
@@ -122,7 +122,7 @@ void Hooks::InstallHooks()
// Enabled Utility hooks
MH_EnableHook(addr_MSG_EngineError);
MH_EnableHook(addr_LoadPlaylist);
- MH_EnableHook(addr_CFPSPanel_Paint);
+ MH_EnableHook(addr_CEngineVGui_Paint);
}
void Hooks::RemoveHooks()
@@ -176,7 +176,7 @@ void Hooks::RemoveHooks()
// Unhook Utility functions
MH_RemoveHook(addr_MSG_EngineError);
MH_RemoveHook(addr_LoadPlaylist);
- MH_RemoveHook(addr_CFPSPanel_Paint);
+ MH_RemoveHook(addr_CEngineVGui_Paint);
///////////////////////////////////////////////////////////////////////////////
// Unhook CBaseFileSystem functions.
diff --git a/r5dev/src/logsystem.cpp b/r5dev/src/logsystem.cpp
index 7f5564d9..7eb327d1 100644
--- a/r5dev/src/logsystem.cpp
+++ b/r5dev/src/logsystem.cpp
@@ -19,8 +19,13 @@ void LogSystem::Update()
if (GameGlobals::Cvar->FindVar("cl_drawconsoleoverlay")->m_iValue < 1)
return;
- if (i < LOGSYSTEM_LINES_TO_SHOW) {
+ if (i < GameGlobals::Cvar->FindVar("cl_consoleoverlay_lines")->m_iValue)
+ {
+ if (i >= m_vLogs.size())
+ {
+ break;
+ }
float fadepct = fminf(float(m_vLogs[i].Ticks) / 64.f, 1.0);
float ptc = (int)ceilf( fadepct * 255.f);
@@ -32,6 +37,10 @@ void LogSystem::Update()
MemoryAddress(0x140547900).RCast()(g_pMatSystemSurface, 0x13, fontHeight, 10, y, color[0], color[1], color[2], alpha, m_vLogs[i].Message.c_str());
}
+ else {
+ m_vLogs.erase(m_vLogs.begin());
+ continue;
+ }
m_vLogs[i].Ticks--;
}
@@ -48,9 +57,6 @@ void LogSystem::AddLog(LogType_t type, std::string message)
log.Message = message;
log.Type = type;
log.Ticks = 1024;
- if (m_vLogs.size() > LOGSYSTEM_LINES_TO_SHOW-1) {
- m_vLogs.erase(m_vLogs.begin());
- }
m_vLogs.push_back(log);
}
@@ -64,5 +70,7 @@ std::array LogSystem::GetLogColorForType(LogType_t type) {
return { 117, 116, 139 };
case LogType_t::SCRIPT_UI:
return { 197, 160, 177 };
+ default:
+ return { 255, 255, 255 };
}
-}
\ No newline at end of file
+}