自由存档人

创作者: inlecebra
已更新:2025-07-15 02:32:48
578KB

关于此 MOD

在自由人模式中,死亡即退出游戏,且角色进度与物品将永久丢失。
在《雇佣兵》游戏中,一直想做些冒险操作,又怕丢进度或装备?这个模组就是为你准备的。它能在你角色死亡时自动关闭游戏,通过读取代码,在“玩家存活”检测执行前跳出,避免存档。

这是基于游戏当前Steam版本3.230.0编写的代码。
你可以前往主菜单,进入设置选项,查看屏幕底部的当前《杀手》游戏版本。 

如果您使用的是Epic版本或其他版本的游戏,可能需要使用自定义代码(我允许您自行修改)。我会尽力在此处同步Steam版本的最新内容。 

首次运行时,强烈建议在“自由职业者”模式下测试,确保你身上没有不想损失的东西。唯一稳妥的办法就是亲自试一次。 

该文件是一个独立的exe程序,不依赖SMF或其他框架。它由AHK脚本编译而成,原始代码如下: 

# 持续
定时器,检查生命值,100
; === 从settings.ini加载已保存设置 ===
读取设置(savedUseCustom),从settings.ini的[Config]节读取UseCustom值,默认0
IniRead, savedCustomAddr, settings.ini, Config, CustomAddr, hitman3.exe+2287CFC
useCustom := savedUseCustom
customAddr := savedCustomAddr
defaultOffset := 0x2287CFC
; === 使用定位控件的GUI设置 ===
GUI_HealthDisplay = "等待中..."
启用脚本
GUI,添加复选框,vUseCustomAddr gToggleCustom x10 y60,使用自定义地址(如无法使用)
UI中显示为按钮,对应中文应为: [?] 信息
GUI,添加,编辑框,vCustomAddr x10 y85 w140,%customAddr%
Gui, 添加, 按钮, gSaveSettings x10 y115 w100, 保存设置
游戏版本
3.230.0
GUI,显示,, HMSS
if (useCustom)
    GUI控制,启用,自定义地址
否则
    Gui控件,禁用,自定义地址
返回
; === 切换复选框逻辑 ===
开关自定义
GuiControlGet, useCustom,, UseCustomAddr
if (useCustom) {
    GuiControl,, CustomAddr, hitman3.exe+
    GuiControl, 启用, CustomAddr
} else { } 否则 {
    GUI控件,,自定义地址,hitman3.exe+2287CFC
    GUI控件,禁用,自定义地址
}
返回
; === 存档按钮逻辑 ===
保存设置:
GuiControlGet, useCustom,, UseCustomAddr
GuiControlGet, customAddr,, CustomAddr
IniWrite, %useCustom%, settings.ini, Config, UseCustom
IniWrite, %customAddr%, settings.ini, Config, CustomAddr
已保存
返回
; === 信息按钮逻辑 ===
显示信息:
GUI,信息:新
GUI,信息:+始终置顶 +工具窗口
GUI,信息:添加,文本,宽600 行20, 
(
启动《杀手》。在主菜单中,打开Cheat Engine,扫描【未知初始值】。
2. 存入物品,在自由模式中死亡。当死亡界面出现时,扫描【已变更数值】。
3. 当你重新加载安全屋后,再次扫描[已变更的数值]。
4. 重新加载进入自由佣兵任务并存活后,四处移动并反复扫描[未变数值]约20次。
5. 在自由模式中死亡,并在死亡结算界面扫描到0。
6. 返回安全屋加载完成后,再次扫描即可获得1。
7. 慢慢滚动地址列表,直到找到绿色的地址。
8. 你可以重复步骤5和6来进一步缩小范围,不过通常第一个绿色地址就是目标地址。
9. 输入地址并保存设置,这样在重新加载程序时会记住你的设定。 
注意:如果《杀手》在启动时或游戏过程中随机退出,说明您使用了错误的自定义地址。
)
Gui, Info:Add, Button, gCloseInfo, 确定
界面,信息:显示,,如何查找isAlive生命值地址
返回
关闭信息
GUI,信息:销毁
返回
; === 生命值检测逻辑 ===
检查生命值
processName := "《杀手3》.exe"
`GuiControlGet, useCustom,, UseCustomAddr`
GuiControlGet, customInput,, CustomAddr
if (useCustom && customInput != "") {
    ; 尝试解析偏移部分
    如果 (RegExMatch(customInput, "i)^\s*hitman3\.exe\+([0-9A-Fa-f]+)\s*$", match)) {
        offset := "0x" . match1
    } else if (RegExMatch(customInput, "i)^\s*0x[0-9A-Fa-f]+\s*$", match)) {
        偏移 := 自定义输入
    } else {
        控件设置,, 生命值显示, 无效地址格式
        返回
    }
} 否则 {
    偏移 := 默认偏移
}
health := ReadStaticAddress(processName, offset)
切换脚本
GuiControlGet, enableScript,, EnableScript
if (enableScript) { 如果(启用脚本){
if (health = -1) {
    GUI控件,。, 生命显示, 未找到ID或杀手已关闭
    返回
}
if (health == 0) {
    进程关闭,%processName%
    GUI控制,生命显示,关闭杀手
否则如果(生命值 == 1 或 生命值 == 16843009)
    GUI控件,健康显示,ID值匹配。
} 否则 {
    GUI控制:血量显示 无效ID,数值 %health% 并非 1
}
} else {
    界面控件,,生命值显示,脚本已暂停。
}
返回
; === 记忆读取功能 ===
ReadStaticAddress(进程名, 偏移量)
    处理中,已存在,%procName%
    pid := ErrorLevel
    if (!pid)
        返回 -1
    hProcess := DllCall("OpenProcess", "UInt", 0x10, "Int", 0, "UInt", pid, "Ptr")
    如果 (!hProcess)
        返回 -1
    hModule := 0x140000000 ; hitman3.exe 基址假定为静态
    ; 如有必要,将字符串转换为数字
    if (IsObject(offset)) {
        地址 := hModule + 偏移
    } 否则 {
        address := hModule + (offset + 0) ; 确保数值
    }
    VarSetCapacity(buf, 4, 0)
    if (!DllCall("ReadProcessMemory", "Ptr", hProcess, "Ptr", address, "Ptr", &buf, "UInt", 4, "Ptr", 0)) {
        DllCall("CloseHandle", "Ptr", hProcess)
        返回-1
    }
    result := NumGet(buf, 0, "Int")
    DllCall("CloseHandle", "Ptr", hProcess)
    返回结果
}
GUI关闭
退出应用

杀手:暗杀世界 的热门 MOD

探索适用于 杀手:暗杀世界 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 杀手:暗杀世界 的全部潜力 — 今天就探索这些顶级 MOD!