手动装 vs 模力盒一键装
- 下载 93 KB 压缩包并解压
- 如有前置 Mod,先按各自说明安装并核对版本
- 将解压后的文件放入该游戏的 Mod 目录(通常在游戏安装目录下,具体位置可参考游戏社区说明)
- 启动游戏确认生效;部分 Mod 还需额外启动参数或加载器
- 卸载:自己记住放了哪些文件,逐个删除
Mod 介绍见下方「详情」。
- 点上方 「下载模力盒 · 一键安装 Mod」装好一打开就直接来到这个 Mod
- 点 「一键安装」下载、解压、放目录、前置,全部自动完成,不用找任何文件夹
- 从模力盒 「启动游戏」,进游戏就能看到不想要了关掉开关就回原版;另外还有一键还原,随时回到干净的游戏目录
前置 Mod
必需 1 · 可选 0 · 模力盒安装时会自动提示
角色金钱的任何正向变化都会乘以配置数值。
轮询频率是脚本检查金钱变化的频率。默认是 100ms;如果设为 0,则会在每个 tick 时检查。
需要:https://www.dev-c.com/gtav/scripthookv/
源码:
剧透
#include "....\inc\main.h"
#include "script.h"
#include <windows.h>
#include <string>
const Hash SP0_TOTAL_CASH = 0x324C31D;
const Hash SP1_TOTAL_CASH = 0x44BD6982;
const Hash SP2_TOTAL_CASH = 0x8D75047D;
const Hash SP0_TOTAL_CASH_EARNED = 0xEC4F6A3C;
const Hash SP1_TOTAL_CASH_EARNED = 0x652EC70D;
const Hash SP2_TOTAL_CASH_EARNED = 0x63D3C8A1;
const Hash SP0_MONEY_TOTAL_SPENT = 0xD8DDE3AC;
const Hash SP1_MONEY_TOTAL_SPENT = 0x82F04461;
const Hash SP2_MONEY_TOTAL_SPENT = 0x5E1032A2;
const int MAX_CASH = 2147483647;
float MONEY_MULTIPLIER = 3.0f;
int POLL_RATE = 100;
// core logic
int last[3] = { 0, 0, 0 };
void InitLastValues() // prevents multiplying money when loading a save file
{
int temp = 0;
STATS::STAT_GET_INT(SP0_TOTAL_CASH, &temp, -1);
last[0] = temp;
STATS::STAT_GET_INT(SP1_TOTAL_CASH, &temp, -1);
last[1] = temp;
STATS::STAT_GET_INT(SP2_TOTAL_CASH, &temp, -1);
last[2] = temp;
}
Hash stats[3] =
{
SP0_TOTAL_CASH,
SP1_TOTAL_CASH,
SP2_TOTAL_CASH
};
Hash earnedStats[3] =
{
SP0_TOTAL_CASH_EARNED,
SP1_TOTAL_CASH_EARNED,
SP2_TOTAL_CASH_EARNED
};
Hash spentStats[3] =
{
SP0_MONEY_TOTAL_SPENT,
SP1_MONEY_TOTAL_SPENT,
SP2_MONEY_TOTAL_SPENT
};
float ReadFloatINI(const char* section, const char* key, float def, const char* file)
{
char buf[64];
GetPrivateProfileStringA(section, key, "", buf, sizeof(buf), file);
if (!buf[0]) return def;
return (float)atof(buf);
}
int ReadIntINI(const char* section, const char* key, int def, const char* file)
{
return GetPrivateProfileIntA(section, key, def, file);
}
void CreateINIIfMissing(const std::string& path)
{
FILE* f = fopen(path.c_str(), "r");
if (f)
{
fclose(f);
return;
}
FILE* out = fopen(path.c_str(), "w");
if (!out) return;
fprintf(out,
"[MoneyMultiplier]\n"
"Multiplier=3.0\n"
"PollRateMs=100\n");
fclose(out);
}
void LoadConfig()
{
char path[MAX_PATH];
GetModuleFileNameA(NULL, path, MAX_PATH);
std::string ini = path;
ini = ini.substr(0, ini.find_last_of("\/")) + "\MoneyMultiplier.ini";
CreateINIIfMissing(ini);
MONEY_MULTIPLIER = ReadFloatINI("MoneyMultiplier", "Multiplier", 3.0f, ini.c_str());
POLL_RATE = ReadIntINI("MoneyMultiplier", "PollRateMs", 100, ini.c_str());
}
void Process(int i, Hash stat, int& lastVal)
{
int current = 0;
STATS::STAT_GET_INT(stat, ¤t, -1);
if (current < 0)
current = 0;
// === TIGHT RESET PROTECTION ===
if (lastVal >= MAX_CASH && current == 0)
{
current = MAX_CASH;
STATS::STAT_SET_INT(stat, current, 1);
// Just read spent, do not modify it in any way
int spent = 0;
STATS::STAT_GET_INT(spentStats*, &spent, -1);*
// Calculate earned without any capping or clamping
long long earned = (long long)current + (long long)spent;
STATS::STAT_SET_INT(earnedStats, (int)earned, 1);**
lastVal = current;
return;
}
int diff = current - lastVal;
if (diff > 0)
{
long long bonus = (long long)(diff * (MONEY_MULTIPLIER - 1.0f));
long long newValue = (long long)current + bonus;
if (newValue > MAX_CASH)
newValue = MAX_CASH;
current = (int)newValue;
STATS::STAT_SET_INT(stat, current, 1);
// Just read spent, no changes
int spent = 0;
STATS::STAT_GET_INT(spentStats, &spent, -1);**
long long earned = (long long)current + (long long)spent;
STATS::STAT_SET_INT(earnedStats, (int)earned, 1);**
lastVal = current;
return;
}
lastVal = current;
}
void ScriptMain()
{
InitLastValues(); // IMPORTANT FIX
LoadConfig();
while (true)
{
Process(0, stats[0], last[0]);
Process(1, stats[1], last[1]);
Process(2, stats[2], last[2]);
WAIT(POLL_RATE);
}
}
文件信息
- 最新版本
- 1.1.1
- 文件大小
- 93 KB (95,183 字节)
- 文件更新
- 2026-10-17
- 首次发布
- 2026-05-09
- 安装方式
- ● 模力盒一键安装






