高级玩家

- 贡献度
- 27
- 金元
- 3671
- 积分
- 475
- 精华
- 0
- 注册时间
- 2021-6-7
|
本帖最后由 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
查看全部评分
-
|