初级玩家

- 贡献度
- 6
- 金元
- 621
- 积分
- 86
- 精华
- 0
- 注册时间
- 2021-10-1
|
论坛里看到有大大修改植物空调的范围和效果的改法, 是修改 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 已经被存储下来了;新摆放的东西才能看出修改后的效果
|
|