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

注册 登录

QQ登录

只需一步,快速开始

查看: 1847|回复: 1
打印 上一主题 下一主题

[原创] 区别对待植物和空调的作用的改法

[复制链接]

11

主题

55

帖子

86

积分

初级玩家

Rank: 2

贡献度
6
金元
621
积分
86
精华
0
注册时间
2021-10-1
跳转到指定楼层
主题
发表于 2021-10-5 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    论坛里看到有大大修改植物空调的范围和效果的改法, 是修改 TH20.HospitalAttributeMap 类的
    private void ModifyMapAttribute(RoomItem roomItem, float radiusInCells, float value)
    {
        Vector3 worldPosition = roomItem.WorldPosition;
        radiusInCells *= 10f;                             植物空调作用范围 10 倍
        value *= 10f;                                   植物空调效果 10 倍
        ...
    }



    这个改法当然有效,但是个人改下来的效果并不理想。对植物来说, 范围越大效果越强,当然很理想。但是空调就不一样了,范围大了固然是好,但是作用强了就不灵了。举个例子,12×9那么大的空间放个暖气,结果冷热效果图里看到大红的一片,放员工进去一会儿就显示“太热了”。
    那么只改范围不改效果可行不?
    植物多放几棵问题不大,但是空调又回到老问题了,要在数量和摆放位置上纠结半天。此外在一些特殊的需要的地方,例如研究所,如果摆了超级计算机的话,冷气不强力可不行。
   为此我最终找到了可以自由修改的位置, TH20.RoomModifierMapAttribute 类,里面有2个函数 Apply 和 Refresh。下面就直接给修改后的代码了
    public void Apply(RoomItem roomItem, FloorPlan floorPlan)
    {
        float attributeValue = this.GetAttributeValue(roomItem);
        float attributeRadius = this._radiusInCells;
        if (this._attribute == HospitalAttributeMap.Attribute.Temperature)   // 和环境温度有关的, 如暖气和冷气
        {
            attributeRadius *= 10f;                            // 作用范围扩大 10 倍                           
            if (attributeValue < 0f)                           // 值小于0是冷气, 否则大于0是暖气(不建议改动暖气效果
            {
                if (roomItem.Definition.GetCost() == 200)            // 小型空调组 $100, 大型空调组 $200, 冰雕 $300, 研究所摆的一般都是大型空调,改强力点
                {
                    attributeValue *= 2f;                     // 大型空调组效果加强 2 倍
                }
            }
        }
        else if (this._attribute == HospitalAttributeMap.Attribute.Attractiveness) // 这是吸引力有关(如植物、雕像)
        {
            attributeRadius *= 10f;                           // 作用范围扩大 10 倍
            attributeValue *= 10f;                           // 效果加强 10 倍
        }
        floorPlan.WorldState.HospitalAttributeMaps[(int)this._attribute].AddMapAttribute(roomItem, attributeRadius, attributeValue);  // 注意这行红字的地方和原来不一样,注意改掉
    }
   // Refresh 函数对应着上面修改, 只牵涉效果数值
    public void Refresh(RoomItem roomItem, FloorPlan floorPlan)
    {
        float attributeValue = this.GetAttributeValue(roomItem);
        if (this._attribute == HospitalAttributeMap.Attribute.Temperature)
        {
            if (attributeValue < 0f)
            {
                if (roomItem.Definition.GetCost() == 200)
                {
                    attributeValue *= 2f;
                }
            }
        }
        else if (this._attribute == HospitalAttributeMap.Attribute.Attractiveness)
        {
            attributeValue *= 10f;
        }
        floorPlan.WorldState.HospitalAttributeMaps[(int)this._attribute].RefreshMapAttribute(roomItem, attributeValue);
    }
   
   用的工具是 dnSpy v6.0.5
   修改的游戏版本是 1.17.41111, 其他版本没试过
         
          ps: 修改完后进游戏,之前摆放的效果不会改变,因为之前的 HospitalMapAttribute 已经被存储下来了;新摆放的东西才能看出修改后的效果
   
回复

使用道具 举报

2

主题

118

帖子

307

积分

高级玩家

Rank: 4

贡献度
0
金元
3069
积分
307
精华
0
注册时间
2015-7-3
舒服的沙发
发表于 2021-12-27 15:52 | 只看该作者
之前我跟lz遇到同样的问题 要么冷要么热 哈哈哈够呛
参照你修改的数值进游戏重新玩果然有效。。。

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-31 22:58 , Processed in 0.028259 second(s), 16 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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