From 0b308e9acf875b7092491ed3d4018e332a0dac8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=93=E6=A2=A6=E5=A4=A7=E5=B8=88/XMDS?= <2841824304@qq.com> Date: Tue, 11 Jun 2024 13:35:36 +0800 Subject: [PATCH] Add VC col file Size limit --- doc/III.VC.SA.LimitAdjuster.ini | 4 ++++ src/limits/Misc/CollisionSize.cpp | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/limits/Misc/CollisionSize.cpp diff --git a/doc/III.VC.SA.LimitAdjuster.ini b/doc/III.VC.SA.LimitAdjuster.ini index cd891dd..f22f5fb 100644 --- a/doc/III.VC.SA.LimitAdjuster.ini +++ b/doc/III.VC.SA.LimitAdjuster.ini @@ -65,6 +65,7 @@ WeaponModels = unlimited OutsideWorldWaterBlocks = 40 Coronas = 5000 FrameLimit = 30 +CollisionSize = 1024 MemoryAvailable = 30% [GTA3LIMITS] @@ -244,5 +245,8 @@ DebugTextKey = 0x74 ; F5 -- Use an VKEY (see http://msdn.microsoft.com/pt-br/li ; The value can be in percent if you append a '%' at the end of the number, in this situation it'll use this percentage of memory ; from the amount of physical memory available in your system. ; +; ### CollisionSize +; Maximum size of a single collision model (.col file, 1M = 1024kb) +; ; ; \ No newline at end of file diff --git a/src/limits/Misc/CollisionSize.cpp b/src/limits/Misc/CollisionSize.cpp new file mode 100644 index 0000000..9bf740b --- /dev/null +++ b/src/limits/Misc/CollisionSize.cpp @@ -0,0 +1,20 @@ +#include "LimitAdjuster.h" + +using namespace injector; + +class CollisionSizeVC : public SimpleAdjuster +{ + public: + const char* GetLimitName() { return GetGVM().IsVC() ? "CollisionSize" : nullptr; } + void ChangeLimit(int, const std::string& value) + { + // Collision size is stored in bytes, so we need to convert the input value to bytes. + int size = std::stoi(value) * 1024; + char* colbuf = new char[size](); + + WriteMemory(0x0048AAFB + 1, colbuf, true); + WriteMemory(0x0048AB30 + 1, colbuf, true); + WriteMemory(0x0048AB60 + 1, colbuf, true); + + } +} CollisionSizeVC; \ No newline at end of file