游戏达人
  
- 贡献度
- 270
- 金元
- 17924
- 积分
- 2872
- 精华
- 0
- 注册时间
- 2014-11-30
|
本帖最后由 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])
{
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就不执行发射
|
|