分享

缺氧的修改经验(自用)(总结)

 ss.cat 2021-01-23
 修改内容大部分来自各个大佬的帖子和百度贴吧,少部分原创,请见谅!
修改内容基本上本体和dlc通用,只要克雷代码不改,应该都是可行的,当前修改都已经在ex-445987版本实现。修改软件dnspy。
基础修改方法:
1:寻找物品/建筑名称代码:在OxygenNotIncluded_Data\StreamingAssets\strings下面有一个叫做strings_preinstalled_zh_klei.po的文件,这个文件是官方翻译,用记事本打开后搜索你想要修改物品的游戏内名称,比如搜索液体管道,就会出现以下代码。
msgid "<link=\"LIQUIDCONDUIT\">Liquid Pipe</link>"
msgstr "<link=\"LIQUIDCONDUIT\">液体管道</link>"
其中msgid后面跟的就是液体管道的代码,部分物品的代码与其英文翻译一致,部分不同,这是翻译问题,一般以这为准。
2:修改准则(个人建议)
只修改数据且不宜把数据修改的极端,比如直接归零,容易出现bug,部分情况例外。

3:建筑基础属性修改:
各个建筑修改:
功耗:buildingDef.EnergyConsumptionWhenActive,这句后面一般就是建筑功耗。
发热:buildingDef.ExhaustKilowattsWhenActive
        
buildingDef.SelfHeatKilowattsWhenActive
        这两句后面一般就是建筑散热,可以直接修改为0。但液冷机,气冷机最好不要改动,它们是特殊的。
消耗资源(以塑料压缩机为例)
        elementConverter.consumedElements = new ElementConverter.ConsumedElement[]
        
{
            
new ElementConverter.ConsumedElement(GameTagExtensions.Create(SimHashes.Petroleum), 0.8333333f)
        
};
0.8333333f为需求石油的量,可修改,但最好不要修改为0,会出现bug


产生资源(已修改)
        
elementConverter.outputElements = new ElementConverter.OutputElement[]
        
{
            
new ElementConverter.OutputElement(1f, SimHashes.Polypropylene, 348.15f, false, true, 0f, 0.5f, 1f, byte.MaxValue, 0),
            
new ElementConverter.OutputElement(0f, SimHashes.Steam, 473.15f, false, true, 0f, 0.5f, 1f, byte.MaxValue, 0),
            
new ElementConverter.OutputElement(0f, SimHashes.CarbonDioxide, 423.15f, false, true, 0f, 0.5f, 1f, byte.MaxValue, 0)
        
};
Polypropylene为塑料,1f为产量(可修改,可改为0),348.15f为生产温度。

至于修改建筑的需求材料和产出材料种类,不太建议修改,容易出现问题。
4:具体修改内容(均为已修改,按照游戏建筑分类来排序的)
存储箱:搜索Storage,完整结果为Storage -{},具体代码public float capacityKg = 500000f;//已修改,使用IL修改才不会报错,最好不要超过100吨。
气罐 :搜索GasReservoirConfig 具体代码storage.capacityKg  = 150,最好不要超过100吨。
水罐 :搜索LiquidReservoirConfig 具体代码 storage.capacityKg =5000,
最好不要超过100吨。

电解器:搜索ElectrolyzerConfig,已修改成氢气拥有出气口。

            buildingDef.InputConduitType = ConduitType.Liquid;
            buildingDef.UtilityInputOffset = new CellOffset(0, 0);//原有进水口

            buildingDef.OutputConduitType = ConduitType.Gas;
            buildingDef.UtilityOutputOffset = new CellOffset(1, 0);//新增出气口,只出氢气

            elementConverter.outputElements = new ElementConverter.OutputElement[]
           {
            new ElementConverter.OutputElement(0.888f, SimHashes.Oxygen, 300.15f, false, false, 0f, 1f, 1f, byte.MaxValue, 0),
            new ElementConverter.OutputElement(0.111999989f, SimHashes.Hydrogen, 300.15f, false, true, 0f, 1f, 1f, byte.MaxValue, 0)
           };//将氢气温度后面的第二个false改为true。

          ConduitDispenser conduitDispenser = go.AddOrGet<ConduitDispenser>();
          conduitDispenser.conduitType = ConduitType.Gas;
          conduitDispenser.invertElementFilter = true;
          conduitDispenser.elementFilter = new SimHashes[]
          {
            SimHashes.Oxygen
          };//新增代码,复制粘贴即可。
         Prioritizable.AddRef(go);

发电机系列



GeneratorConfig                  燃煤发电机
HydrogenGeneratorConfig     氢气发电机
ManualGeneratorConfig        人力发电机
MethaneGeneratorConfig       天燃气发电机
GeneratorWattageRating后面的数字即为发电量。
电池
BatteryMediumConfig大电池
BatterySmartConfig智能电池
battery.capacity = 40000f;//储存电量,不要超过100000
battery.joulesLostPerSecond = 0f;//电量损耗,归零即可。
电线
搜索Wire,完整结果为Wire  -{} ,具体代码
  case Wire.WattageRating.Max500:
   return 500000f;//电线负载
  case Wire.WattageRating.Max1000:
   return 500000f;//电线负载
  case Wire.WattageRating.Max2000:
   return 500000f;//电线负载
  case Wire.WattageRating.Max20000:
   return 500000f;//电线负载
  case Wire.WattageRating.Max50000:
   return 500000f;//电线负载

太阳能与蒸汽机计算方式特殊,为减少bug,不做修改,原本的已经足够使用。
冰箱:RefrigeratorConfig ,
storage.capacityKg = 1000f;//容量修改,不宜过大。
电动烤炉与燃气灶
电动烤炉:CookingStationConfig 使用水制造烤肉,也可修改为泥土,矿石等等。
ComplexRecipe.RecipeElement[] array7 = new ComplexRecipe.RecipeElement[]
        
{
            
new ComplexRecipe.RecipeElement("Water", 1f)//water是已经修改过了,可任意修改,1f为需求量
        
};
        
ComplexRecipe.RecipeElement[] array8 = new ComplexRecipe.RecipeElement[]
        
{
            
new ComplexRecipe.RecipeElement("CookedMeat", 1f, ComplexRecipe.RecipeElement.TemperatureOperation.Heated, false)
        
};//CookedMeat为烤肉,1f为产生量,

煤气灶:GourmetCookingStationConfig  使用水制造冰霜汉堡,也可修改为泥土,矿石等等。
ComplexRecipe.RecipeElement[] array11 = new ComplexRecipe.RecipeElement[]
        
{
            
new ComplexRecipe.RecipeElement("Water", 1f),//water是已经修改过了,可任意修改,1f为需求量
            
new ComplexRecipe.RecipeElement("Water", 1f),//water是已经修改过了,可任意修改,1f为需求量
            
new ComplexRecipe.RecipeElement("Water", 1f)//water是已经修改过了,可任意修改,1f为需求量
        
};
        
ComplexRecipe.RecipeElement[] array12 = new ComplexRecipe.RecipeElement[]
        
{
            
new ComplexRecipe.RecipeElement("Burger", 2f, ComplexRecipe.RecipeElement.TemperatureOperation.Heated, false)
        
};//Burger为冰霜汉堡,2f为产生量,
修改煤气灶使用氧气
// Token: 0x0400692B RID: 26923
    private Tag FUEL_TAG = new Tag("Oxygen");改为氧气
使用IL修改。
管道流速和容量
搜索game,完整结果为game -{}。
this.gasConduitFlow = new ConduitFlow(ConduitType.Gas, Grid.CellCount, this.gasConduitSystem, 10f, 1f);//气管,已修改为10千克容量,管道流速为1,这两者不宜过大
this.liquidConduitFlow = new ConduitFlow(ConduitType.Liquid, Grid.CellCount, this.liquidConduitSystem, 100f, 2f);//水管,已修改为100千克容量,管道流速为2,这两者不宜过大
液泵:LiquidPumpConfig
气泵:gasPumpConfig
修改方式相同
go.AddOrGet<Storage>().capacityKg = 200f;//泵里面储存的量,要比管道流量大。
elementConsumer.consumptionRate = 100f;//每秒抽取的量,要比管道里流量小。
elementConsumer.consumptionRadius = 4;//抽取范围,不宜过大,过大可能回抽取密封气室,液室外的的气体或液体。
其实还要修改气体,液体调节/开关阀来匹配,但感觉不是很有必要,需要者可以参照上面的方法修改。
精炼系的几种建筑修改方式基本一样,修改需求量,产量,产物温度等和上面修改煤气灶基本一致,但根据经验和实际体验,最好不要随意修改需求的产物种类,特别是金属精炼器,容易出现全局崩溃。
部分精炼系代码。
MetalRefineryConfig金属精炼机
OilRefineryConfig石油提炼机
PolymerizerConfig塑料制造机
RockCrusherConfig岩石破碎机
SupermaterialRefinery分子熔炉

医疗系的基本没修改,因为对游戏影响不是太大,需要修改的话按照上面的方法寻找代码修改即可,配药桌和煤气灶类似,按摩床直接搜索-60(每分钟降6%压力)修改即可。
家具,站台也基本没有修改,主要是娱乐建筑的士气加成我不会,有大佬知道的话可以在下面说出来。
实用类:
液体加热器
液温调节器
LiquidHeaterConfig液体加热器
LiquidConditionerConfig液温调节器
buildingDef.OverheatTemperature = 1398.15f;//过热温度,两者通用
spaceHeater.targetTemperature = 758.15f;//液体加热器加热上限,调高后可以直接炼石油和天然气。
信号系列无修改。
采掘器AutoMinerConfig
搜索AutoMiner
private static bool ValidDigCell(int cell)
    {
        return Grid.Solid[cell && !Grid.Foundation[cell && Grid.Element[cell.hardness < 150;
    }
    // Token: 0x06001702 RID: 5890 RVA: 0x00079D90 File Offset: 0x00077F90
    public static bool DigBlockingCB(int cell)
    {
        return Grid.Foundation[cell || Grid.Element[cell.hardness >= 150;
    }

这两个方法中 150 就是机器人矿工挖矿的临界硬度
深渊晶石是200硬度所以挖不了 中子物质255硬度
改成250就可以挖中子物质以下的所有了  
自动清理器:SolidTransferArmConfig
go.AddOrGet<SolidTransferArm>().pickupRange = 30;//收集范围
stationaryChoreRangeVisualizer.x = -30;
        stationaryChoreRangeVisualizer.y = -30;
        stationaryChoreRangeVisualizer.width = 61;//收集范围乘2加1
        stationaryChoreRangeVisualizer.height = 61;


运输轨道的运输上限20不会修改 ,
有大佬知道的话可以在下面说出来。

彗星,火箭,植物,药物。
建议参考这位大佬的视频小行星存量和回复速度修改
搜索SpaceDestinationTypes,下面是各个小行星存量和回复速度。

null, Db.Get().ArtifactDropRates.Good, 384000000, 383000000, 1, true));
384000000是最大存量,383000000是最小存量,1是回复速度,计算方式为1000/1=1000千克每周期。
dlc系列:
二氧化碳引擎修改
CO2EngineConfig  二氧化碳引擎
rocketEngine.maxModules = 10;//最大装载模块数,但是不要太大,火箭达到上方红区限制的话游戏回崩溃。
搜索rocketry
// Token: 0x040073D7 RID: 29655
            public static float GAS_LOW = 0.001f;//每推进一格消耗的气体量

            // Token: 0x040073D8 RID: 29656
            public static float GAS_HIGH = 0.001f;//每推进一格消耗的气体量
public static int EARLY_STRONG = 600;//二氧化碳引擎功率。


液体小货舱 LiquidCargoBaySmallConfig
气体小货舱 GasCargoBaySmallConfig
固体小货舱 CargoBaySmallConfig
cargoBay.storage.capacityKg = 500f;//货舱容量
WarpPortal复制人传送门
if (smi.master.rechargeProgress > 3000f)
    {
     this.isCharged.Set(true, smi);
     smi.master.rechargeProgress = 3000f;//原来是0,修改为3000传送门无cd。///不稳定,
有大佬知道的话可以在下面说出来。



各类泉水修改:
搜索GetEmitRate,是关于喷发率的(不更改原始喷发周期,修改单次喷发的喷发量)
float num = 600f / this.GetIterationLength();
这句中的数字600可以修改,数字越小喷发量越大
搜索GeyserGenericConfig

list.Add(new GeyserGenericConfig.GeyserPrefabParams("geyser_gas_steam_kanim", 2, 4, new GeyserConfigurator.GeyserType("steam", SimHashes.Steam, 300.15f, 1000f, 2000f, 5f, 60f, 1140f, 0.1f, 0.9f, 15000f, 135000f, 0.4f, 0.8f, 99f, "")));
steam就是蒸汽,后面是出来的温度。300.15f(已魔改过),所有的泉下面都有
dlc里的铌火山要单独修改,搜索niobiumGeyserConfig,里面有一句和上面基本一样的代码,修改方式一样。




复制人系列:
搜索mmigration  找
if (this.timeBeforeSpawn <= 0f)
沒有等待時間是1800
900就是原本的一半
小人掘不减半:搜索nDigComplete,找float num = mass * 0.5f;改为1就是不会减半
小人喜悦修改:搜索TRAITS,完整为TUNING -> TRAITS
public static float MIN_MORALE_EXCESS = 8f; //最小士气(当前士气 减 需求士气)
            // Token: 0x04005E5B RID: 24155
            public static float MAX_MORALE_EXCESS = 20f; //最大士气(当前士气 减 需求士气)
            // Token: 0x04005E5C RID: 24156
            public static float MIN_REACTION_CHANCE = 2f;//最小机率
            // Token: 0x04005E5D RID: 24157
            public static float MAX_REACTION_CHANCE = 5f;//最大机率
            // Token: 0x04005E5E RID: 24158
            public static float JOY_REACTION_DURATION = 570f;//欢迎时间
            // Token: 0x020015F9 RID: 5625
            public class SUPER_PRODUCTIVE
            {
                // Token: 0x04005E5F RID: 24159
                public static float INSTANT_SUCCESS_CHANCE = 10f;//超级生产力   (百分之10立刻完成当前任务)
            }
            // Token: 0x020015FA RID: 5626
            public class BALLOON_ARTIST
            {
                // Token: 0x04005E60 RID: 24160
                public static float MINIMUM_BALLOON_MOVESPEED = 5f;//
                // Token: 0x04005E61 RID: 24161
                public static int NUM_BALLOONS_TO_GIVE = 4;//气球艺术家 气球数
            }
            // Token: 0x020015FB RID: 5627
            public class STICKER_BOMBER
            {
                // Token: 0x04005E62 RID: 24162
                public static float TIME_PER_STICKER_BOMB = 150f;//
                // Token: 0x04005E63 RID: 24163
                public static float STICKER_DURATION = 12000f;//贴纸炸弹人 贴纸持续时间


稳定四条兴趣的小人:
搜索:GenerateAptitudes
UnityEngine.Random.Range(1, 4);将4改成5 就随机4条属性 以此内推  改12 就有11条属性    注意:图里改成12 为11条属性 那么下面修改的时候也要有11行数值,改为(4,5)就稳定有4条兴趣
搜索 APTITUDE_ATTRIBUTE_BONUSES
原本是 1 3 7  属性值原始在这三个数字随机 1条兴趣就是7 2条兴趣就是3 3条兴趣就是1,前面加了兴趣,后面就要多加一个数值。

没有缺点的小人:
搜索MinionStartingStats类  小人开局属性(包括后来打印的小人)
把BADTRAITS改为GOODTRAITS,这样开局随机的特质就都会在好特质里面找。

超级小人:
搜索DUPLICANTSTATS,完整为DUPLICANTSTATS -TUNING
public static float FULL_EXPERIENCE = 1f;   获取经验倍率 ,越大属性等级提升越快,
public static int MAX_GAINED_ATTRIBUTE_LEVEL = 20; 最大等级

小人的职业
职业需要的经验
搜索ROLES,完整为ROLES-
TUNING

public static float BASIC_ROLE_MASTERY_EXPERIENCE_REQUIRED = 250f; 获取技能点的经验。 越小越快
搜索skills,完整为skills-TUNING,public static float PASSIVE_EXPERIENCE_PORTION = 0.5f;  这就是被动经验获倍率,越大就越快




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多