fanvalen 发表于 2021-10-27 13:25

dnspy创意修改集合

本帖最后由 fanvalen 于 2023-9-10 12:18 编辑

密码:3dm
火箭修改墙 空间大小 速度 飞行距离 载重 高度
https://bbs.blacksheepgame.com/thread-6234395-1-1.html
娱乐设备使用时间修改
https://bbs.blacksheepgame.com/thread-6234730-1-1.html
温控三件套
https://bbs.blacksheepgame.com/thread-6235776-1-1.html
魔改空瓶空罐
https://bbs.blacksheepgame.com/thread-6226335-1-1.html
反熵逆天
https://bbs.blacksheepgame.com/thread-6237208-1-1.html
供给传送
https://bbs.blacksheepgame.com/thread-6237376-1-1.html
辐射强度
https://bbs.blacksheepgame.com/thread-6237767-1-1.html
小动物喂食加强
https://bbs.blacksheepgame.com/thread-6238134-1-1.html
技能点溢出解决
https://bbs.blacksheepgame.com/thread-6239127-1-1.html
基础过热温度提高+材料过热温度附加值
https://bbs.blacksheepgame.com/thread-6239284-1-1.html
小人基础属性
https://bbs.blacksheepgame.com/thread-6245146-1-1.html
小人技能点
https://bbs.blacksheepgame.com/thread-6245767-1-1.html
无限穿送门
https://bbs.blacksheepgame.com/thread-6246966-1-1.html
建筑重叠建造
https://bbs.blacksheepgame.com/thread-6247327-1-1.html
研究经验改大
https://bbs.blacksheepgame.com/thread-6247802-1-1.html
太空服加防辐射
https://bbs.blacksheepgame.com/thread-6248856-1-1.html
辐射粒子加快获得
https://bbs.blacksheepgame.com/thread-6249956-1-1.html
整合的dll仅支持v490405版
https://bbs.blacksheepgame.com/thread-6251113-1-1.html

全建筑可左右镜像(已修正可用)
https://bbs.blacksheepgame.com/thread-6286300-1-1.html
米虱木加农民呵护buff
https://bbs.blacksheepgame.com/thread-6294535-1-1.html
果虫甲虫照料效果提升翻倍
https://bbs.blacksheepgame.com/thread-6294855-1-1.html
工程师打的芯片效果翻倍
https://bbs.blacksheepgame.com/thread-6295791-1-1.html
太阳能超变修改
https://bbs.blacksheepgame.com/thread-6296055-1-1.html
树鼠种植规则修改
https://bbs.blacksheepgame.com/thread-6296335-1-1.html
学一个技能得100士气
https://bbs.blacksheepgame.com/thread-6298929-1-1.html
压力喜悦反应固定
https://bbs.blacksheepgame.com/thread-6317612-1-1.html
低版打开高板存档
https://bbs.blacksheepgame.com/thread-6319382-1-1.html
允许挖中子
https://bbs.blacksheepgame.com/thread-6322170-1-1.html
永不完蛋
https://bbs.blacksheepgame.com/thread-6323492-1-1.html
孵化检测buff输出信号,用于省电控制发热
https://bbs.blacksheepgame.com/thread-6324395-1-1.html
海绵擦水无限制
https://bbs.blacksheepgame.com/thread-6325517-1-1.html
无人操作全自动
https://bbs.blacksheepgame.com/thread-6325557-1-1.html
增删小人特质
https://bbs.blacksheepgame.com/thread-6325684-1-1.html
自动炼油机
https://bbs.blacksheepgame.com/thread-6325721-1-1.html
超大范围挖建隔墙隔块操作
https://bbs.blacksheepgame.com/thread-6325967-1-1.html
种子掉落概率+变异+数量
https://bbs.blacksheepgame.com/thread-6326679-1-1.html
氧齿蕨效率提高
https://bbs.blacksheepgame.com/thread-6326691-1-1.html
土星动物捕草提高
https://bbs.blacksheepgame.com/thread-6326736-1-1.html
打印门无限重置
https://bbs.blacksheepgame.com/thread-6327025-1-1.html
天然气发电机烧高硫
https://bbs.blacksheepgame.com/thread-6327280-1-1.html
保留更多的存档数量
https://bbs.blacksheepgame.com/thread-6327812-1-1.html
钻头挖掘和小行星恢复速度
https://bbs.blacksheepgame.com/thread-6329210-1-1.html
限流阀无需小人摸+流量最小
https://bbs.blacksheepgame.com/thread-6329611-1-1.html
分诊床秒回血
https://bbs.blacksheepgame.com/thread-6332142-1-1.html
野生植物周期比种植还少
https://bbs.blacksheepgame.com/thread-6332336-1-1.html
乔木变异
https://bbs.blacksheepgame.com/thread-6333693-1-1.html
反应堆相关
https://bbs.blacksheepgame.com/thread-6334104-1-1.html
望远镜在家看超远
https://bbs.blacksheepgame.com/thread-6334780-1-1.html
星际发射
https://bbs.blacksheepgame.com/thread-6335075-1-1.html
打印门更多选择小人减少
https://bbs.blacksheepgame.com/thread-6335510-1-1.html
辐射蜂巢
https://bbs.blacksheepgame.com/thread-6335839-1-1.html
巨型电池计算总平均功率
https://bbs.blacksheepgame.com/thread-6336683-1-1.html
时空裂缝开启器制造即时陨石
https://bbs.blacksheepgame.com/thread-6338671-1-1.html
跨星系输电的电池
https://bbs.blacksheepgame.com/thread-6339044-1-1.html
气压服装备加属性等级
https://bbs.blacksheepgame.com/thread-6340917-1-1.html
无限埋葬的墓碑
https://bbs.blacksheepgame.com/thread-6341678-1-1.html
梦境合成各种需求变小,添加在菜单中可随地造
https://bbs.blacksheepgame.com/thread-6343838-1-1.html
小动物衍变器太远了我要搬回家
https://bbs.blacksheepgame.com/thread-6343997-1-1.html
野生动物每天一个蛋
https://bbs.blacksheepgame.com/thread-6344314-1-1.html
无需睡觉的小人(黑心老板)
https://bbs.blacksheepgame.com/thread-6344402-1-1.html
解除火箭建造数量限制
https://bbs.blacksheepgame.com/thread-6344413-1-1.html
吐出更多co2,消耗更多的卡路里提高难度
https://bbs.blacksheepgame.com/thread-6344662-1-1.html
1人开局
https://bbs.blacksheepgame.com/thread-6345141-1-1.html
早晚控制时间控制
https://bbs.blacksheepgame.com/thread-6345151-1-1.html

打印舱&迷你舱拆迁和建造
https://bbs.blacksheepgame.com/thread-6348269-1-1.html
解锁皮肤
https://bbs.blacksheepgame.com/thread-6390185-1-1.html
地址调谐
https://bbs.blacksheepgame.com/thread-6390526-1-1.html
香料研磨增加
https://bbs.blacksheepgame.com/thread-6393050-1-1.html
陨石不砸坏
https://bbs.blacksheepgame.com/thread-6395452-1-1.html
电话信号增强任意点都可以搜到所有信号
https://bbs.blacksheepgame.com/thread-6400598-1-1.html
成就要求更改
https://bbs.blacksheepgame.com/thread-6402304-1-1.html
流星无伤不结块
https://bbs.blacksheepgame.com/thread-6409076-1-1.html
电池满电变能量棒,妈妈再也不怕浪费电力了
https://bbs.blacksheepgame.com/thread-6410064-1-1.html
梦境睡衣不减运动和体力
https://bbs.blacksheepgame.com/thread-6410304-1-1.html
打印门刷出的物品和条件
https://bbs.blacksheepgame.com/thread-6421104-1-1.html
田鼠拉屎不结块
https://bbs.blacksheepgame.com/thread-6423166-1-1.html
沙滩椅可恢复体力
https://bbs.blacksheepgame.com/thread-6425128-1-1.html
哈奇来种植
https://bbs.blacksheepgame.com/thread-6425936-1-1.html
技能重置移除坏特质
https://bbs.blacksheepgame.com/thread-6426256-1-1.html
手送气液到库
https://bbs.blacksheepgame.com/thread-6427180-1-1.html
核废料辐射加大
https://bbs.blacksheepgame.com/thread-6428280-1-1.html
小人辐射抗性
https://bbs.blacksheepgame.com/thread-6430948-1-1.html
攻击力100
https://bbs.blacksheepgame.com/thread-6434210-1-1.html
调谐数量不限
https://bbs.blacksheepgame.com/thread-6437278-1-1.html
阳光的亮度
https://bbs.blacksheepgame.com/thread-6437687-1-1.html
咸乳相关建筑和白嫖石
https://bbs.blacksheepgame.com/thread-6442501-1-1.html
玻璃烧金属变熔融液
https://bbs.blacksheepgame.com/thread-6445671-1-1.html
碎片堆容量增大
https://bbs.blacksheepgame.com/thread-6449109-1-1.html
氧气面罩和气压服手送氧气瓶
https://bbs.blacksheepgame.com/thread-6450346-1-1.html
蛋的堆叠
https://bbs.blacksheepgame.com/thread-6452042-1-1.html
dlc火箭发射受阻
https://bbs.blacksheepgame.com/thread-6452796-1-1.html




fanvalen 发表于 2021-10-27 13:46

本帖最后由 fanvalen 于 2023-11-9 21:17 编辑

直接改吸顶灯无需电力就会发出300的辐射50的圆形范围,建造位置不受墙影响,也就是说可以凭空造
顺便给灯加强了一下,光的强度4w,范围99 形状圆形
懂的拿走代码,不懂别问我
CeilingLightConfig 下的
public override BuildingDef CreateBuildingDef()里
改BuildLocationRule build_location_rule = BuildLocationRule.OnCeiling;为 BuildLocationRule build_location_rule = BuildLocationRule.Anywhere;
作用是任意位置建造lightShapePreview.lux = 1800;
                lightShapePreview.radius = 8f;
                lightShapePreview.shape = global::LightShape.Cone;
改为
lightShapePreview.lux = 40000;
                lightShapePreview.radius = 99f;
                lightShapePreview.shape = global::LightShape.Circle;
提高亮度扩大范围形状为圆

下面是辐射关键代码
在public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)下添加
RadiationEmitter radiationEmitter = go.AddComponent<RadiationEmitter>();
                radiationEmitter.emitType = RadiationEmitter.RadiationEmitterType.Constant;
                radiationEmitter.radiusProportionalToRads = false;
                radiationEmitter.emitRadiusX = 50;
                radiationEmitter.emitRadiusY = radiationEmitter.emitRadiusX;
                radiationEmitter.emitRads = 45f;
                radiationEmitter.emissionOffset = new Vector3(0f, 0f, 0f);
这里还要改一个才能保证灯的光生效
public override void DoPostConfigureComplete(GameObject go)下的
light2D.Range = 8f;
light2D.shape = global::LightShape.Cone;
light2D.Lux = 1800;
改为
light2D.Range = 99f;
light2D.shape = global::LightShape.Circle;
light2D.Lux = 40000;



fanvalen 发表于 2021-10-27 13:48

本帖最后由 fanvalen 于 2023-11-9 21:18 编辑

更正由于受植物影响我加了层区分结果导致游戏人物卡住不动,
现在我更正为buildingDef.ObjectLayer = ObjectLayer.AttachableBuilding;//建筑附属
using System;
using TUNING;
using UnityEngine;

public class LadderConfig2 : IBuildingConfig
{
      public override BuildingDef CreateBuildingDef()
      {
                string id = "PropLadder";
                int width = 1;
                int height = 1;
                string anim = "ladder_poi_kanim";
                int hitpoints = 10;
                float construction_time = 10f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER2;
                string[] all_MINERALS = MATERIALS.ALL_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, all_MINERALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER0, none, 0.2f);
                BuildingTemplates.CreateLadderDef(buildingDef);
                buildingDef.Floodable = false;
                buildingDef.Overheatable = false;
                buildingDef.Entombable = false;
                buildingDef.AudioCategory = "Metal";
                buildingDef.AudioSize = "small";
                buildingDef.BaseTimeUntilRepair = -1f;
                buildingDef.DragBuild = true;
                buildingDef.ObjectLayer = ObjectLayer.AttachableBuilding;
                return buildingDef;
      }
      public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
      {
                GeneratedBuildings.MakeBuildingAlwaysOperational(go);
                Ladder ladder = go.AddOrGet<Ladder>();
                ladder.upwardsMovementSpeedMultiplier = 10f;
                ladder.downwardsMovementSpeedMultiplier = 10f;
                go.AddOrGet<AnimTileable>();
      }
      public override void DoPostConfigureComplete(GameObject go)
      {
      }
      public LadderConfig2()
      {
      }
      public const string ID = "PropLadder";
}


这是效果


我们来修复这个错误的提示
找到strings.buildings.prefabs
搜索propladder
添加一个effect

出来了


    public class PROPLADDER
    {
      public PROPLADDER()
      {
      }
      static PROPLADDER()
      {
      }
      public static LocString NAME = "Ladder";

      public static LocString DESC = "A hard plastic ladder.";

      public static LocString EFFECT = "move fast and beautiful.";
    }
当然你还可以在zh.po里对这个进行汉化





fanvalen 发表于 2021-10-27 14:09

本帖最后由 fanvalen 于 2023-11-9 21:19 编辑

造一个只吸单种气体的气泵using System;
using TUNING;
using UnityEngine;

// Token: 0x02002C1F RID: 11295
public class GasPumpConfig3 : IBuildingConfig
{
      // Token: 0x0600AFCF RID: 45007 RVA: 0x0033ACF8 File Offset: 0x00338EF8
      public override BuildingDef CreateBuildingDef()
      {
                string id = "GasPump3";
                int width = 2;
                int height = 2;
                string anim = "pumpgas_kanim";
                int hitpoints = 30;
                float construction_time = 30f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER1;
                string[] all_METALS = MATERIALS.ALL_METALS;
                float melting_point = 1600f;
                BuildLocationRule build_location_rule = BuildLocationRule.Anywhere;
                EffectorValues tier2 = NOISE_POLLUTION.NOISY.TIER2;
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef(id, width, height, anim, hitpoints, construction_time, tier, all_METALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER1, tier2, 0.2f);
                buildingDef.RequiresPowerInput = true;
                buildingDef.PermittedRotations = PermittedRotations.FlipH;
                buildingDef.EnergyConsumptionWhenActive = 240f;
                buildingDef.ExhaustKilowattsWhenActive = 0f;
                buildingDef.SelfHeatKilowattsWhenActive = 0f;
                buildingDef.OutputConduitType = ConduitType.Gas;
                buildingDef.Floodable = false;
                buildingDef.ViewMode = OverlayModes.GasConduits.ID;
                buildingDef.AudioCategory = "Metal";
                buildingDef.PowerInputOffset = new CellOffset(0, 1);
                buildingDef.UtilityOutputOffset = new CellOffset(1, 1);
                buildingDef.LogicInputPorts = LogicOperationalController.CreateSingleInputPortList(new CellOffset(0, 1));
                GeneratedBuildings.RegisterWithOverlay(OverlayScreen.GasVentIDs, "GasPump3");
                return buildingDef;
      }

      // Token: 0x0600AFD0 RID: 45008 RVA: 0x0033ADEC File Offset: 0x00338FEC
      public override void DoPostConfigureComplete(GameObject go)
      {
                go.AddOrGet<LogicOperationalController>();
                go.GetComponent<KPrefabID>().AddTag(RoomConstraints.ConstraintTags.IndustrialMachinery, false);
                go.AddOrGet<LoopingSounds>();
                go.AddOrGet<EnergyConsumer>();
                go.AddOrGet<Pump>();
                go.AddOrGet<Storage>().capacityKg = 100000f;
                ElementConsumer elementConsumer = go.AddOrGet<ElementConsumer>();
                elementConsumer.elementToConsume = SimHashes.CarbonDioxide;
                elementConsumer.consumptionRate = 100000f;
                elementConsumer.storeOnConsume = true;
                elementConsumer.showInStatusPanel = false;
                elementConsumer.consumptionRadius = 99;
                ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Gas;
                conduitDispenser.alwaysDispense = true;
                conduitDispenser.elementFilter = null;
                go.AddOrGetDef<OperationalController.Def>();
                go.GetComponent<KPrefabID>().AddTag(GameTags.OverlayBehindConduits, false);
      }

      // Token: 0x0600AFD1 RID: 45009 RVA: 0x00085210 File Offset: 0x00083410
      public GasPumpConfig3()
      {
      }

      // Token: 0x0400AF91 RID: 44945
      public const string ID = "GasPump3";
}



另外我要问一下
用复选框


go.AddOrGet<TreeFilterable>();或者go.AddOrGet<Filterable>();得到这样一个 SimHashes.CarbonDioxide;
单一元素不可改就是麻烦

由于是新增了文字描述没有添加稍后再改

fanvalen 发表于 2021-10-27 14:48

这是一个脱盐器,增加了自动丢盐的功能,以后不需要小人去空盐了
顺便做了一个判断,原来的里面始终会残留一点盐水,现在不会残留了,残留了盐水拆的时候总是漏液
maxmass是控制转化的速度的,这里是10千克没秒,原来是5千克,管道老堵塞
这游戏说好的质量守恒结果有的地方就不行失望
using System;
using TUNING;
using UnityEngine;

// Token: 0x020009D7 RID: 2519
public class DesalinatorConfig : IBuildingConfig
{
        // Token: 0x06002F32 RID: 12082 RVA: 0x0011D238 File Offset: 0x0011B438
        public override BuildingDef CreateBuildingDef()
        {
                string id = "Desalinator";
                int width = 4;
                int height = 3;
                string anim = "desalinator_kanim";
                int hitpoints = 30;
                float construction_time = 10f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER3;
                string[] raw_METALS = MATERIALS.RAW_METALS;
                float melting_point = 1600f;
                BuildLocationRule build_location_rule = BuildLocationRule.OnFloor;
                EffectorValues tier2 = NOISE_POLLUTION.NOISY.TIER1;
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef(id, width, height, anim, hitpoints, construction_time, tier, raw_METALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER0, tier2, 0.2f);
                buildingDef.RequiresPowerInput = true;
                buildingDef.EnergyConsumptionWhenActive = 480f;
                buildingDef.SelfHeatKilowattsWhenActive = 8f;
                buildingDef.ExhaustKilowattsWhenActive = 0f;
                buildingDef.InputConduitType = ConduitType.Liquid;
                buildingDef.OutputConduitType = ConduitType.Liquid;
                buildingDef.Floodable = false;
                buildingDef.ViewMode = OverlayModes.LiquidConduits.ID;
                buildingDef.AudioCategory = "Metal";
                buildingDef.UtilityInputOffset = new CellOffset(-1, 0);
                buildingDef.UtilityOutputOffset = new CellOffset(0, 0);
                buildingDef.PermittedRotations = PermittedRotations.FlipH;
                return buildingDef;
        }

        // Token: 0x06002F33 RID: 12083 RVA: 0x0011D2F4 File Offset: 0x0011B4F4
        public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
        {
                go.GetComponent<KPrefabID>().AddTag(RoomConstraints.ConstraintTags.IndustrialMachinery, false);
                Storage storage = go.AddOrGet<Storage>();
                storage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage);
                storage.showInUI = true;
                go.AddOrGet<Desalinator>().maxSalt = 10000f;
                var maxmass=10f;
                if(storage.capacityKG<maxmass)
                {
                        maxmass=storage.capacityKG;
                }
                ElementConverter elementConverter = go.AddComponent<ElementConverter>();
                elementConverter.consumedElements = new ElementConverter.ConsumedElement[]
                {
                        new ElementConverter.ConsumedElement(new Tag("SaltWater"), maxmass)
                };
                elementConverter.outputElements = new ElementConverter.OutputElement[]
                {
                        new ElementConverter.OutputElement(maxmass*0.93f, SimHashes.Water, 0f, false, true, 0f, 0.5f, 0.75f, byte.MaxValue, 0),
                        new ElementConverter.OutputElement(maxmass*0.07f, SimHashes.Salt, 0f, false, true, 0f, 0.5f, 0.25f, byte.MaxValue, 0)
                };
                ElementConverter elementConverter2 = go.AddComponent<ElementConverter>();
                elementConverter2.consumedElements = new ElementConverter.ConsumedElement[]
                {
                        new ElementConverter.ConsumedElement(new Tag("Brine"), maxmass)
                };
                elementConverter2.outputElements = new ElementConverter.OutputElement[]
                {
                        new ElementConverter.OutputElement(maxmass*0.7f, SimHashes.Water, 0f, false, true, 0f, 0.5f, 0.75f, byte.MaxValue, 0),
                        new ElementConverter.OutputElement(maxmass*0.3f, SimHashes.Salt, 0f, false, true, 0f, 0.5f, 0.25f, byte.MaxValue, 0)
                };
                DesalinatorWorkableEmpty desalinatorWorkableEmpty = go.AddOrGet<DesalinatorWorkableEmpty>();
                desalinatorWorkableEmpty.workTime = 0.1f;
                desalinatorWorkableEmpty.workLayer = Grid.SceneLayer.BuildingFront;
                ElementDropper elementDropper = go.AddComponent<ElementDropper>();
                elementDropper.emitMass = 800f;
                elementDropper.emitTag = new Tag("Salt");
                elementDropper.emitOffset = new Vector3(0f, 1f, 0f);
               
                ConduitConsumer conduitConsumer = go.AddOrGet<ConduitConsumer>();
                conduitConsumer.conduitType = ConduitType.Liquid;
                conduitConsumer.consumptionRate = 100f;
                conduitConsumer.capacityKG = 200f;
                conduitConsumer.capacityTag = GameTags.AnyWater;
                conduitConsumer.forceAlwaysSatisfied = true;
                conduitConsumer.wrongElementResult = ConduitConsumer.WrongElementResult.Store;
                ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Liquid;
                conduitDispenser.invertElementFilter = true;
                conduitDispenser.elementFilter = new SimHashes[]
                {
                        SimHashes.SaltWater,
                        SimHashes.Brine
                };
                Prioritizable.AddRef(go);
        }

        // Token: 0x06002F34 RID: 12084 RVA: 0x0001C8BB File Offset: 0x0001AABB
        public override void DoPostConfigurePreview(BuildingDef def, GameObject go)
        {
                base.DoPostConfigurePreview(def, go);
        }

        // Token: 0x06002F35 RID: 12085 RVA: 0x0001C8C5 File Offset: 0x0001AAC5
        public override void DoPostConfigureUnderConstruction(GameObject go)
        {
                base.DoPostConfigureUnderConstruction(go);
        }

        // Token: 0x06002F36 RID: 12086 RVA: 0x00009769 File Offset: 0x00007969
        public override void DoPostConfigureComplete(GameObject go)
        {
                go.AddOrGetDef<PoweredActiveController.Def>().showWorkingStatus = true;
        }

        // Token: 0x04001FCD RID: 8141
        public const string ID = "Desalinator";

        // Token: 0x04001FCE RID: 8142
        private const ConduitType CONDUIT_TYPE = ConduitType.Liquid;

        // Token: 0x04001FCF RID: 8143
        private const float INPUT_RATE = 5f;

        // Token: 0x04001FD0 RID: 8144
        private const float SALT_WATER_TO_SALT_OUTPUT_RATE = 0.35f;

        // Token: 0x04001FD1 RID: 8145
        private const float SALT_WATER_TO_CLEAN_WATER_OUTPUT_RATE = 4.65f;

        // Token: 0x04001FD2 RID: 8146
        private const float BRINE_TO_SALT_OUTPUT_RATE = 1.5f;

        // Token: 0x04001FD3 RID: 8147
        private const float BRINE_TO_CLEAN_WATER_OUTPUT_RATE = 3.5f;
}

fanvalen 发表于 2021-10-27 15:01

本帖最后由 fanvalen 于 2023-11-9 21:20 编辑

这是一个罐装器自动丢出瓶装气体 20kg一丢 支持8种常见气体using System;
using TUNING;
using UnityEngine;


public class GasBottlerConfig : IBuildingConfig
{
   
      public override BuildingDef CreateBuildingDef()
      {
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef("GasBottler", 3, 2, "gas_bottler_kanim", 100, 120f, BUILDINGS.CONSTRUCTION_MASS_KG.TIER4, MATERIALS.ANY_BUILDABLE, 800f, BuildLocationRule.OnFloor, BUILDINGS.DECOR.PENALTY.TIER1, NOISE_POLLUTION.NOISY.TIER0, 0.2f);
                buildingDef.InputConduitType = ConduitType.Gas;
                buildingDef.Floodable = false;
                buildingDef.ViewMode = OverlayModes.GasConduits.ID;
                buildingDef.AudioCategory = "HollowMetal";
                buildingDef.UtilityInputOffset = new CellOffset(0, 0);
                GeneratedBuildings.RegisterWithOverlay(OverlayScreen.GasVentIDs, "GasBottler");
                return buildingDef;
      }

   
      public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
      {
                Storage storage = BuildingTemplates.CreateDefaultStorage(go, false);
                storage.showDescriptor = true;
                storage.storageFilters = STORAGEFILTERS.GASES;
                storage.capacityKg = 100000f;
                storage.allowItemRemoval = false;
                go.AddOrGet<DropAllWorkable>();
                GasBottler gasBottler = go.AddOrGet<GasBottler>();
                gasBottler.storage = storage;
                gasBottler.workTime = 9f;

                ConduitConsumer conduitConsumer = go.AddOrGet<ConduitConsumer>();
                conduitConsumer.storage = storage;
                conduitConsumer.conduitType = ConduitType.Gas;
                conduitConsumer.ignoreMinMassCheck = true;
                conduitConsumer.forceAlwaysSatisfied = true;
                conduitConsumer.alwaysConsume = true;
                conduitConsumer.capacityKG = storage.capacityKg;
                conduitConsumer.keepZeroMassObject = false;
               
                ElementDropper elementDropper = go.AddComponent<ElementDropper>();
                elementDropper.emitMass = 20f;
                elementDropper.emitTag = new Tag("gas");
                elementDropper.emitOffset = new Vector3(0f, 1f, 0f);
               
      }

      
      public override void DoPostConfigureComplete(GameObject go)
      {
                go.GetComponent<KPrefabID>().AddTag(GameTags.OverlayBehindConduits, false);
      }

      
      public const string ID = "GasBottler";

   
      private const ConduitType CONDUIT_TYPE = ConduitType.Gas;

   
      private const int WIDTH = 3;

      
      private const int HEIGHT = 2;
}


随便VV逛逛 发表于 2021-10-27 17:41

好东西,楼主费心了

随便VV逛逛 发表于 2021-10-27 17:43

问下大神,遗迹马赛克砖怎么添加啊

fanvalen 发表于 2021-10-27 21:06

随便VV逛逛 发表于 2021-10-27 17:43
问下大神,遗迹马赛克砖怎么添加啊

这个简单
首先TilePOIConfig中
把buildingDef.DebugOnly = true;改成false
然后tuning.buildings中添加TilePOI 这个建筑有点怪在菜单图标和网格砖一样名字不一样
遗迹墙PropGravitasLabWall
遗迹窗PropGravitasLabWindow
横向窗PropGravitasLabWindowHorizontal
这些都是添加tuning.buildings,具体位置看上图 base下面

随便VV逛逛 发表于 2021-10-27 22:05

本帖最后由 随便VV逛逛 于 2021-10-27 22:52 编辑

fanvalen 发表于 2021-10-27 21:06
这个简单
首先TilePOIConfig中
把buildingDef.DebugOnly = true;改成false

谢谢大神,就是为了好看。我琢磨下;P


确定如你所说,图标一样,造出来是马塞克砖。是不是还有什么代码没改的

随便VV逛逛 发表于 2021-10-27 22:46

fanvalen 发表于 2021-10-27 21:06
这个简单
首先TilePOIConfig中
把buildingDef.DebugOnly = true;改成false


是不是要修改建筑图标啊,图标在哪个文档里啊?大神

fanvalen 发表于 2021-10-27 23:03

随便VV逛逛 发表于 2021-10-27 22:46
是不是要修改建筑图标啊,图标在哪个文档里啊?大神

估计是因为不常用的,所以没有图标所以用了一个其他的图标占用

随便VV逛逛 发表于 2021-10-27 23:09

fanvalen 发表于 2021-10-27 23:03
估计是因为不常用的,所以没有图标所以用了一个其他的图标占用

游戏本体的建筑图标在哪个文档里啊?大神能找找吗?我找了好久都找不到

fanvalen 发表于 2021-10-28 00:14

随便VV逛逛 发表于 2021-10-27 23:09
游戏本体的建筑图标在哪个文档里啊?大神能找找吗?我找了好久都找不到
...

图标需要另外的软件来看了
名字叫assetStudioGUI
打开.assets文件找,一般texture2d类型就是图形文件了

随便VV逛逛 发表于 2021-10-28 00:35

fanvalen 发表于 2021-10-28 00:14
图标需要另外的软件来看了
名字叫assetStudioGUI
打开.assets文件找,一般texture2d类型就是图形文件了


好的,我去弄个软件看看。大神,能不能把建筑添加排气管或排液管啊?比如电解器两排气管的代码。别人的MOD看不懂不会用,只会照着在原文代码里改

fanvalen 发表于 2021-10-28 16:15

随便VV逛逛 发表于 2021-10-28 00:35
好的,我去弄个软件看看。大神,能不能把建筑添加排气管或排液管啊?比如电解器两排气管的代码。别人的MO ...

这个问题有点难,只是添加一个管道出口简单,但是要把散发的气体链接到管道里就不简单,这涉及更改底层。我另一个贴就是改底层的现在还没解决。如果你有mod发我一份我研究一下他们是怎么改的 可以的话放网盘

随便VV逛逛 发表于 2021-10-28 16:46

fanvalen 发表于 2021-10-28 16:15
这个问题有点难,只是添加一个管道出口简单,但是要把散发的气体链接到管道里就不简单,这涉及更改底层。 ...

就是两个不好添加。

随便VV逛逛 发表于 2021-10-28 16:46

本帖最后由 随便VV逛逛 于 2021-10-28 16:48 编辑

随便VV逛逛 发表于 2021-10-28 16:46
就是两个不好添加。
加++++++++++++++++

fanvalen 发表于 2021-10-29 14:33

本帖最后由 fanvalen 于 2021-10-30 00:14 编辑

随便VV逛逛 发表于 2021-10-28 16:46
加++++++++++++++++
你给的那个mod我昨天看了一下,作者自己写了一个方法,然后补丁到指定的建筑上,还做了保存记录和重加载。写的方法原理没搞懂,

我自己想了一下用游戏现有的功能做
首先添加两个管道出口,这个都是现有的
第一个
buildingDef.OutputConduitType = ConduitType.Gas;
buildingDef.UtilityOutputOffset = new CellOffset(0, 1);
第二个加在DoPostConfigureComplete
go.AddComponent<ConduitSecondaryOutput>().portInfo = new ConduitPortInfo(ConduitType.Gas, new CellOffset(1, 1));


我在楼下成功实现将气体传输到管道里,
比mod方法简单但是没有实现气体分离 不过都是小事 加个过滤器就好

fanvalen 发表于 2021-10-30 00:11

电解器直接管道收集气体了不在四处逸散,虽然没有实现气体分离但是也算一种改进

using System;
using TUNING;
using UnityEngine;

// Token: 0x0200008A RID: 138
public class ElectrolyzerConfig : IBuildingConfig
{
        // Token: 0x06000218 RID: 536
        public override BuildingDef CreateBuildingDef()
        {
                string id = "Electrolyzer";
                int width = 2;
                int height = 2;
                string anim = "electrolyzer_kanim";
                int hitpoints = 30;
                float construction_time = 30f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER3;
                string[] all_METALS = MATERIALS.ALL_METALS;
                float melting_point = 800f;
                BuildLocationRule build_location_rule = BuildLocationRule.OnFloor;
                EffectorValues tier2 = NOISE_POLLUTION.NOISY.TIER3;
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef(id, width, height, anim, hitpoints, construction_time, tier, all_METALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER1, tier2, 0.2f);
                buildingDef.RequiresPowerInput = true;
                buildingDef.PowerInputOffset = new CellOffset(1, 0);
                buildingDef.EnergyConsumptionWhenActive = 120f;
                buildingDef.ExhaustKilowattsWhenActive = 0.25f;
                buildingDef.SelfHeatKilowattsWhenActive = 1f;
                buildingDef.ViewMode = OverlayModes.Oxygen.ID;
                buildingDef.AudioCategory = "HollowMetal";
                buildingDef.InputConduitType = ConduitType.Liquid;
                buildingDef.UtilityInputOffset = new CellOffset(0, 0);
                buildingDef.LogicInputPorts = LogicOperationalController.CreateSingleInputPortList(new CellOffset(1, 1));
                buildingDef.OutputConduitType = ConduitType.Gas;
                buildingDef.UtilityOutputOffset = new CellOffset(1, 1);
                return buildingDef;
        }

        // Token: 0x06000219 RID: 537
        public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
        {
                CellOffset cellOffset = new CellOffset(0, 1);
                go.GetComponent<KPrefabID>().AddTag(RoomConstraints.ConstraintTags.IndustrialMachinery, false);
                Electrolyzer electrolyzer = go.AddOrGet<Electrolyzer>();
                electrolyzer.maxMass = 1.8f;
                electrolyzer.hasMeter = true;
                electrolyzer.emissionOffset = cellOffset;
                ConduitConsumer conduitConsumer = go.AddOrGet<ConduitConsumer>();
                conduitConsumer.conduitType = ConduitType.Liquid;
                conduitConsumer.consumptionRate = 1f;
                conduitConsumer.capacityTag = ElementLoader.FindElementByHash(SimHashes.Water).tag;
                conduitConsumer.wrongElementResult = ConduitConsumer.WrongElementResult.Dump;
                Storage storage = go.AddOrGet<Storage>();
                storage.capacityKg = 10f;
                storage.showInUI = true;
                ElementConverter elementConverter = go.AddOrGet<ElementConverter>();
                elementConverter.consumedElements = new ElementConverter.ConsumedElement[]
                {
                        new ElementConverter.ConsumedElement(new Tag("Water"), 1f)
                };
                elementConverter.outputElements = new ElementConverter.OutputElement[]
                {
                        new ElementConverter.OutputElement(0.888f, SimHashes.Oxygen, 343.15f, false, true, (float)cellOffset.x, (float)cellOffset.y, 1f, byte.MaxValue, 0),
                        new ElementConverter.OutputElement(0.11199999f, SimHashes.Hydrogen, 343.15f, false, true, (float)cellOffset.x, (float)cellOffset.y, 1f, byte.MaxValue, 0)
                };
                Prioritizable.AddRef(go);
                ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Gas;
                conduitDispenser.alwaysDispense = true;
                conduitDispenser.elementFilter = null;
        }

        // Token: 0x0600021A RID: 538
        public override void DoPostConfigureComplete(GameObject go)
        {
                go.AddOrGet<LogicOperationalController>();
                go.AddOrGetDef<PoweredActiveController.Def>();
        }

        // Token: 0x0600021B RID: 539 RVA: 0x000038B5 File Offset: 0x00001AB5
        public ElectrolyzerConfig()
        {
        }

        // Token: 0x04000140 RID: 320
        public const string ID = "Electrolyzer";

        // Token: 0x04000141 RID: 321
        public const float WATER2OXYGEN_RATIO = 0.888f;

        // Token: 0x04000142 RID: 322
        public const float OXYGEN_TEMPERATURE = 343.15f;
}


经过我的仔细阅读代码发现new ElementConverter.OutputElement中有一个是控制气体是存储还是散发再加上管道出口成功实现


fanvalen 发表于 2021-10-30 00:39

本帖最后由 fanvalen 于 2021-10-30 00:40 编辑

发电机也是同类原理这里以煤炭发电机为列
using System;
using TUNING;
using UnityEngine;

// Token: 0x020002A6 RID: 678
public class GeneratorConfig : IBuildingConfig
{
      // Token: 0x06000A0B RID: 2571
      public override BuildingDef CreateBuildingDef()
      {
                string id = "Generator";
                int width = 3;
                int height = 3;
                string anim = "generatorphos_kanim";
                int hitpoints = 100;
                float construction_time = 120f;
                float[] tier = BUILDINGS.CONSTRUCTION_MASS_KG.TIER5;
                string[] all_METALS = MATERIALS.ALL_METALS;
                float melting_point = 2400f;
                BuildLocationRule build_location_rule = BuildLocationRule.OnFloor;
                EffectorValues tier2 = NOISE_POLLUTION.NOISY.TIER5;
                BuildingDef buildingDef = BuildingTemplates.CreateBuildingDef(id, width, height, anim, hitpoints, construction_time, tier, all_METALS, melting_point, build_location_rule, BUILDINGS.DECOR.PENALTY.TIER2, tier2, 0.2f);
                buildingDef.GeneratorWattageRating = 600f;
                buildingDef.GeneratorBaseCapacity = 20000f;
                buildingDef.ExhaustKilowattsWhenActive = 8f;
                buildingDef.SelfHeatKilowattsWhenActive = 1f;
                buildingDef.RequiresPowerOutput = true;
                buildingDef.PowerOutputOffset = new CellOffset(0, 0);
                buildingDef.ViewMode = OverlayModes.Power.ID;
                buildingDef.AudioCategory = "HollowMetal";
                buildingDef.AudioSize = "large";
                buildingDef.LogicInputPorts = LogicOperationalController.CreateSingleInputPortList(new CellOffset(0, 0));
                buildingDef.OutputConduitType = ConduitType.Gas;
                buildingDef.UtilityOutputOffset = new CellOffset(0, 1);
                return buildingDef;
      }

      // Token: 0x06000A0C RID: 2572
      public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
      {
                go.GetComponent<KPrefabID>().AddTag(RoomConstraints.ConstraintTags.IndustrialMachinery, false);
                EnergyGenerator energyGenerator = go.AddOrGet<EnergyGenerator>();
                energyGenerator.formula = EnergyGenerator.CreateSimpleFormula(SimHashes.Carbon.CreateTag(), 1f, 600f, SimHashes.CarbonDioxide, 0.02f, true, new CellOffset(1, 2), 383.15f);
                energyGenerator.meterOffset = Meter.Offset.Behind;
                energyGenerator.SetSliderValue(50f, 0);
                energyGenerator.powerDistributionOrder = 9;
                Storage storage = go.AddOrGet<Storage>();
                storage.capacityKg = 600f;
                go.AddOrGet<LoopingSounds>();
                Prioritizable.AddRef(go);
                ManualDeliveryKG manualDeliveryKG = go.AddOrGet<ManualDeliveryKG>();
                manualDeliveryKG.SetStorage(storage);
                manualDeliveryKG.requestedItemTag = new Tag("Coal");
                manualDeliveryKG.capacity = storage.capacityKg;
                manualDeliveryKG.refillMass = 100f;
                manualDeliveryKG.choreTypeIDHash = Db.Get().ChoreTypes.PowerFetch.IdHash;
                Tinkerable.MakePowerTinkerable(go);
                ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Gas;
                conduitDispenser.alwaysDispense = true;
                conduitDispenser.elementFilter = null;
      }

      // Token: 0x06000A0D RID: 2573 RVA: 0x00008849 File Offset: 0x00006A49
      public override void DoPostConfigureComplete(GameObject go)
      {
                go.AddOrGet<LogicOperationalController>();
                go.AddOrGetDef<PoweredActiveController.Def>();
      }

      // Token: 0x06000A0E RID: 2574 RVA: 0x00008859 File Offset: 0x00006A59
      public GeneratorConfig()
      {
      }

      // Token: 0x040006D1 RID: 1745
      public const string ID = "Generator";

      // Token: 0x040006D2 RID: 1746
      private const float COAL_BURN_RATE = 1f;

      // Token: 0x040006D3 RID: 1747
      private const float COAL_CAPACITY = 600f;

      // Token: 0x040006D4 RID: 1748
      public const float CO2_OUTPUT_TEMPERATURE = 383.15f;
}

随便VV逛逛 发表于 2021-10-30 04:28

fanvalen 发表于 2021-10-30 00:39
发电机也是同类原理这里以煤炭发电机为列

666点赞!我是琢磨了好久,没搞出来。你这才一天就出来了,厉害

随便VV逛逛 发表于 2021-10-30 04:37

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

大神有没有兴趣再玩点新东西;P
利用这个现有的遗迹双开大门,来实现电梯的功能。参照DLC的小人传送接收装置代码,并且添加到建造栏。

我正在弄这个自动贩卖机,想让它无中生有多种食物,并保鲜冷藏不腐烂,信号控制掉落,多次使用

虽然有点异想天开了,但我发现现在乐趣不在玩游戏,而在改游戏。哈哈

fanvalen 发表于 2021-10-30 16:28

随便VV逛逛 发表于 2021-10-30 04:37
大神有没有兴趣再玩点新东西
利用这个现有的遗迹双开大门,来实现电梯的功能。参照DLC的小人传送接收装置 ...

电梯是不会做的(电梯只能上下还需要通道和小人运输机差不多),做个传送门吧这个工程量有点大,基本算是重写功能了,
但是传送门又有一个问题,如果是走到门那就传送了,则无法走到门的另一侧。
如果是点击传送那么又非常麻烦
还有一个问题就是是否双向传送的问题,单向就要两对个建筑才能来回,双向只需一对,如果一对多或任意门互传
这游戏传送原理很简单,先把小人隐藏,播放传送动画完毕后设置小人的坐标到另一端位置,再显示小人,至于如何获取坐标就需要参数获取。


最后就是你是夜猫子吗凌晨4-5点还来回复

随便VV逛逛 发表于 2021-10-30 16:33

fanvalen 发表于 2021-10-30 00:11
电解器直接管道收集气体了不在四处逸散,虽然没有实现气体分离但是也算一种改进




我就只添加了一个出口,和改了两个false,别的没动

随便VV逛逛 发表于 2021-10-30 16:35

fanvalen 发表于 2021-10-30 16:28
电梯是不会做的(电梯只能上下还需要通道和小人运输机差不多),做个传送门吧这个工程量有点大,基本算是 ...

不懂的太多,在网上找编程教程呢。;P

随便VV逛逛 发表于 2021-10-30 16:37

随便VV逛逛 发表于 2021-10-30 16:35
不懂的太多,在网上找编程教程呢。

如果只做传送门,照搬DLC里的小人发射器估计可行;P

fanvalen 发表于 2021-10-30 16:37

随便VV逛逛 发表于 2021-10-30 16:33
我就只添加了一个出口,和改了两个false,别的没动

ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
                conduitDispenser.conduitType = ConduitType.Gas;
                conduitDispenser.alwaysDispense = true;
                conduitDispenser.elementFilter = null;这个你要加不然不会走管道
这个就是管道出去的意思

fanvalen 发表于 2021-10-30 16:38

随便VV逛逛 发表于 2021-10-30 16:35
不懂的太多,在网上找编程教程呢。

我是看b站unity3d入门教程
可以的话再学点c#的语言

fanvalen 发表于 2021-10-30 16:44

随便VV逛逛 发表于 2021-10-30 16:37
如果只做传送门,照搬DLC里的小人发射器估计可行

那个不行我去看了代码,它要获取两个世界的worldID,如果是同一个世界不会传送,不然同一个世界既有发射也有接收,就是短距离传送了
我还看了太空员舱的传送代码也是要两个世界ID
页: [1] 2 3 4
查看完整版本: dnspy创意修改集合