3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 211|回复: 2
打印 上一主题 下一主题

[原创] 双点医院 这辈子也不会破产啦

[复制链接]

5

主题

134

帖子

476

积分

高级玩家

Rank: 4

贡献度
27
金元
3676
积分
476
精华
0
注册时间
2021-6-7
跳转到指定楼层
主题
发表于 2025-6-26 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nudest 于 2025-6-26 21:13 编辑

1.先来点效果图看看,负三十万的债也不能击垮我啦.

2.得负三亿的债才行.


3.负二亿九千九百九十九万九千九百九十九的债都不会提示我要完蛋啦.


4.理论上得负二十一亿四千七百四十八万三千六百四十七的债才会宣布让我破产.


要想实现这一目的,其实很简单.
首先抓关键词破产的英文bankruptcy,Dnspy搜索关键词,出现的却是public static DebugVarBool DisableBankruptcyFailure = new DebugVarBool(false);显示的却是默认关闭'禁用破产失败'.
这不就简单了,直接开启这个功能不就解决了,直接怼true就可以了.

但是我还想自定义一下.
直接右键分析DisableBankruptcyFailure,不出所料有2个函数类有关联.
1:System.Void TH20.FinanceManager::ModifyBalance(TH20.FinanceManager/ModifyBalanceParams)
2:System.Void TH20.HospitalFailState::OnBalanceUpdated(System.Int32)

那么就分析这2段代码吧.
破产判定逻辑
if (modifyParams.Amount != 0 &&
    (this._balance > this._level.Config.FailStateBalanceGameOver ||
     DebugVars.DisableBankruptcyFailure.Value))

破产条件:
当当前余额 _balance 低于或等于 _level.Config.FailStateBalanceGameOver(关卡配置的破产阈值,通常为负值如 -5000)时,游戏判定为破产。
此时拒绝所有资金变动(Amount != 0的交易不会执行),防止玩家进一步操作。

调试豁免:
DebugVars.DisableBankruptcyFailure.Value 为 true 时禁用破产机制(开发调试用),允许资金自由变动。

资金变动处理流程
this._balance = FinanceManager.AddBalance(this._balance, modifyParams.Amount);
this.OnBalanceUpdated.InvokeSafe(this._balance);
更新余额:通过 AddBalance 方法修改当前余额(未展示具体实现,应为安全加减)。
触发事件:调用 OnBalanceUpdated 事件通知系统余额变化(UI 更新等)。

收入处理逻辑
if (modifyParams.Amount > 0 && modifyParams.ConsiderAsEarned) {
    this.OnMoneyEarned.InvokeSafe(...);
    if (modifyParams.Room != null) {
        modifyParams.Room.OnRevenueEarned(...);
        this.OnMoneyEarnedInRoom.InvokeSafe(...);
    }
}
收入事件:触发 OnMoneyEarned 事件(如成就统计)。
房间关联收入:若收入来源是房间(如诊室收费),调用房间的 OnRevenueEarned 方法并触发 OnMoneyEarnedInRoom 事件(房间收入统计)。

支出处理逻辑
if (modifyParams.Amount < 0) {
    if (modifyParams.ConsiderAsRegularExpense) {
        this.OnRegularExpense.InvokeSafe(-modifyParams.Amount); // 常规支出(工资等)
    } else {
        this.OnSporadicExpense.InvokeSafe(-modifyParams.Amount); // 临时支出(建造等)
    }
}
支出分类:
常规支出(ConsiderAsRegularExpense):如员工工资,触发 OnRegularExpense 事件。
临时支出:如购买设备,触发 OnSporadicExpense 事件。

世界消息提示
if (modifyParams.InWorldMessagePosition != null) {
    this._level.InWorldMessages.ShowMessage(...);
}
可视化反馈:在指定位置(如房间)显示收入/支出的浮动文字(绿色为收入,红色为支出)。





知道了具体细节,那么需要修改的内容也就差不多明了了.
在// FinanceManager.cs - 修改现有类
1:System.Void TH20.FinanceManager::ModifyBalance(TH20.FinanceManager/ModifyBalanceParams)中修改
// 配置扩展系数 (可轻松自定义)
private const float BANKRUPTCY_THRESHOLD_MULTIPLIER = 自定义数值f; // 破产阈值扩展倍数 建议不超1000
private const float WARNING_THRESHOLD_MULTIPLIER = 自定义数值f;     // 警告阈值扩展倍数 建议不超1000

int bankruptcyThreshold = (int)(this._level.Config.FailStateBalanceGameOver * BANKRUPTCY_THRESHOLD_MULTIPLIER);
if (modifyParams.Amount != 0 && (this._balance > bankruptcyThreshold || DebugVars.DisableBankruptcyFailure.Value))


// HospitalFailState.cs - 修改现有类
2:System.Void TH20.HospitalFailState::OnBalanceUpdated(System.Int32)中修改
int warningThreshold = (int)(this._level.Config.FailStateBalanceGameOver * FinanceManager.WARNING_THRESHOLD_MULTIPLIER);
int bankruptcyThreshold = (int)(this._level.Config.FailStateBalanceGameOver * FinanceManager.BANKRUPTCY_THRESHOLD_MULTIPLIER);
if (!this._warningIssued && balance <= warningThreshold)
if (balance <= bankruptcyThreshold && !DebugVars.DisableBankruptcyFailure.Value)
if (balance > warningThreshold)


这样就大功告成了,只是可惜无法修改破产警告的具体提示内容.

希望大家多多支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

2

查看全部评分

回复

使用道具 举报

0

主题

95

帖子

174

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1740
积分
174
精华
0
注册时间
2011-7-2
舒服的沙发
发表于 2025-7-1 17:28 | 只看该作者
可以用,但是没必要,因为负债不能造建筑,相当于不能玩了。而如果建筑得当一般也不会负债太多而破产
回复 支持 反对

使用道具 举报

5

主题

134

帖子

476

积分

高级玩家

Rank: 4

贡献度
27
金元
3676
积分
476
精华
0
注册时间
2021-6-7
硬硬的板凳
 楼主| 发表于 2025-7-3 16:16 | 只看该作者
yao8113231 发表于 2025-7-1 17:28
可以用,但是没必要,因为负债不能造建筑,相当于不能玩了。而如果建筑得当一般也不会负债太多而破产 ...

容错率提高些  不影响正常游戏
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-7-11 00:11 , Processed in 0.131748 second(s), 17 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表