fanvalen 发表于 2021-10-26 15:41

魔改将空罐器改成手动瓶装气体装回气体管道

本帖最后由 fanvalen 于 2024-7-7 20:34 编辑

魔改的原理就是用空罐器加上气体管道出口,使空瓶不发射到周围
我在空瓶功能里设置了一个发射标志位
BottleEmptier bottleEmptier = go.AddOrGet<BottleEmptier>();
bottleEmptier.emit=false;
下面是效果和改的代码

这个是建造代码最后在tuning.buildings下添加BottleEmptierGas2,(这个要下面添加好保存了再来添加这个否则会失败)using System;
using TUNING;
using UnityEngine;


public class BottleEmptierGasConfig2 : IBuildingConfig
{
      public override BuildingDef CreateBuildingDef()
      {
                string id = "BottleEmptierGas2";
                int width = 1;
                int height = 3;
                string anim = "gas_emptying_station_kanim";
                int hitpoints = 30;
                float construction_time = 60f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER2;
                string[] refined_METALS = MATERIALS.REFINED_METALS;
                float melting_point = 1600f;
                BuildLocationRule build_location_rule = BuildLocationRule.Anywhere;
                EffectorValues tier2 = NOISE_POLLUTION.NOISY.TIER1;
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef(id, width, height, anim, hitpoints, construction_time, tier, refined_METALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER2, tier2, 0.2f);
                buildingDef.Floodable = false;
                buildingDef.AudioCategory = "Metal";
                buildingDef.Overheatable = false;
                buildingDef.PermittedRotations = PermittedRotations.FlipH;
                buildingDef.OutputConduitType = ConduitType.Gas;
                buildingDef.UtilityOutputOffset = new CellOffset(0, 1);
                return buildingDef;
      }


      public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
      {
                Prioritizable.AddRef(go);
                Storage storage = go.AddOrGet<Storage>();
                storage.storageFilters = STORAGEFILTERS.GASES;
                storage.showInUI = true;
                storage.showDescriptor = true;
                storage.capacityKg = 2000f;
                go.AddOrGet<TreeFilterable>();
                BottleEmptier bottleEmptier = go.AddOrGet<BottleEmptier>();
                bottleEmptier.isGasEmptier = true;
                bottleEmptier.emptyRate = 1000f;
                bottleEmptier.isEmit = false;
                ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Gas;
                conduitDispenser.alwaysDispense = true;
                conduitDispenser.elementFilter = null;
      }


      public override void DoPostConfigureComplete(GameObject go)
      {
      }


      public BottleEmptierGasConfig2()
      {
      }


      public const string ID = "BottleEmptierGas2";
}

先添加public bool isEmit = true;
再修改下面
BottleEmptier里找public void Emit(float dt)改成下面这样
主要就是添加判断是否发射if (base.master.isEmit){}

public void Emit(float dt)
                {
                        if (base.master.isEmit)
                        {
                              PrimaryElement firstPrimaryElement = this.GetFirstPrimaryElement();
                              if (firstPrimaryElement == null)
                              {
                                        return;
                              }
                              Storage component = base.GetComponent<Storage>();
                              float num = Mathf.Min(firstPrimaryElement.Mass, base.master.emptyRate * dt);
                              if (num <= 0f)
                              {
                                        return;
                              }
                              Tag prefabTag = firstPrimaryElement.GetComponent<KPrefabID>().PrefabTag;
                              float num2;
                              SimUtil.DiseaseInfo diseaseInfo;
                              float temperature;
                              component.ConsumeAndGetDisease(prefabTag, num, out num2, out diseaseInfo, out temperature);
                              Vector3 position = base.transform.GetPosition();
                              position.y += 1.8f;
                              bool flag = base.GetComponent<Rotatable>().GetOrientation() == Orientation.FlipH;
                              position.x += (flag ? -0.2f : 0.2f);
                              int num3 = Grid.PosToCell(position) + (flag ? -1 : 1);
                              if (Grid.Solid)
                              {
                                        num3 += (flag ? 1 : -1);
                              }
                              Element element = firstPrimaryElement.Element;
                              byte idx = element.idx;
                              if (element.IsLiquid)
                              {
                                        FallingWater.instance.AddParticle(num3, idx, num2, temperature, diseaseInfo.idx, diseaseInfo.count, true, false, false, false);
                                        return;
                              }
                              SimMessages.ModifyCell(num3, (int)idx, temperature, num2, diseaseInfo.idx, diseaseInfo.count, SimMessages.ReplaceType.None, false, -1);
                        }
                }



我设置的标志位是public bool emit = true;
在Emit功能里做了判断
true的时候执行原来的功能
false就不执行发射



fanvalen 发表于 2021-11-18 18:16

本帖最后由 fanvalen 于 2024-9-4 17:08 编辑

上面是气体装管
这个是液体装管必须要等上面的添加好了再添加这个
最后都要添加到tuning.buildings下加BottleEmptier2
using System;
using TUNING;
using UnityEngine;

// Token: 0x02002C2A RID: 11306
public class BottleEmptierConfig2 : IBuildingConfig
{
      // Token: 0x0600B020 RID: 45088
      public override BuildingDef CreateBuildingDef()
      {
                string id = "BottleEmptier2";
                int width = 1;
                int height = 3;
                string anim = "liquidator_kanim";
                int hitpoints = 30;
                float construction_time = 10f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER4;
                string[] raw_MINERALS = MATERIALS.RAW_MINERALS;
                float melting_point = 1600f;
                BuildLocationRule build_location_rule = BuildLocationRule.Anywhere;
                EffectorValues none = NOISE_POLLUTION.NONE;
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef(id, width, height, anim, hitpoints, construction_time, tier, raw_MINERALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER1, none, 0.2f);
                buildingDef.Floodable = false;
                buildingDef.AudioCategory = "Metal";
                buildingDef.Overheatable = false;
                buildingDef.PermittedRotations = PermittedRotations.FlipH;
                buildingDef.OutputConduitType = ConduitType.Liquid;
                buildingDef.UtilityOutputOffset = new CellOffset(0, 1);
                return buildingDef;
      }

      // Token: 0x0600B021 RID: 45089
      public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
      {
                Prioritizable.AddRef(go);
                Storage storage = go.AddOrGet<Storage>();
                storage.storageFilters = STORAGEFILTERS.LIQUIDS;
                storage.showInUI = true;
                storage.showDescriptor = true;
                storage.capacityKg = 2000f;
                go.AddOrGet<TreeFilterable>();
                go.AddOrGet<BottleEmptier>();
                BottleEmptier bottleEmptier = go.AddOrGet<BottleEmptier>();
                bottleEmptier.isGasEmptier = false;
                bottleEmptier.emptyRate = 1000f;
                bottleEmptier.isEmit = false;
                ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Liquid;
                conduitDispenser.alwaysDispense = true;
                conduitDispenser.elementFilter = null;
      }

      // Token: 0x0600B022 RID: 45090
      public override void DoPostConfigureComplete(GameObject go)
      {
      }

      // Token: 0x0600B023 RID: 45091
      public BottleEmptierConfig2()
      {
      }

      // Token: 0x0400B061 RID: 45153
      public const string ID = "BottleEmptier2";
}


随便VV逛逛 发表于 2021-12-31 10:04

本帖最后由 随便VV逛逛 于 2021-12-31 10:05 编辑

fanvalen 发表于 2021-11-18 18:16
上面是气体装管
这个是液体装管必须要等上面的添加好了再添加这个
最后都要添加到tuning.buildings下加Bott ...
能不能详细点介绍,在原建筑的基础上,再添加一个修改过的建筑啊BottleEmptierConfig2

fanvalen 发表于 2021-12-31 12:58

随便VV逛逛 发表于 2021-12-31 10:04
能不能详细点介绍,在原建筑的基础上,再添加一个修改过的建筑啊BottleEmptierConfig2 ...

编辑添加类把完整代码复制进去保存,再编辑找BottleEmptierConfig2

wz1 发表于 2023-4-8 07:19

is emit找不到该定义何解,以前改过一次瞎捣鼓成功了。

fanvalen 发表于 2023-4-8 08:35

wz1 发表于 2023-4-8 07:19
is emit找不到该定义何解,以前改过一次瞎捣鼓成功了。

你这也太早了,
先在核心功能里创建一个变量叫isemit
保存重新加载文件就可以访问了,否则读取不到

wz1 发表于 2023-4-8 14:54

fanvalen 发表于 2023-4-8 08:35
你这也太早了,
先在核心功能里创建一个变量叫isemit
保存重新加载文件就可以访问了,否则读取不到


感谢大佬,之前变量给BottleEmptier 里面创建了,但是好像没打对。感谢感谢

wz1 发表于 2024-8-23 00:44

这个现在还能改吗,改完发现气压服会一直充气

wz1 发表于 2024-8-23 01:57

气压服解决了,发现空瓶消耗完还会在哪duangduang动,小人不会搬运添加,可能版本问题吧,
页: [1]
查看完整版本: 魔改将空罐器改成手动瓶装气体装回气体管道