本帖最后由 fanvalen 于 2024-7-7 21:47 编辑
TemporalTearOpenerConfig//时空裂缝开启器
首先我们将这个工具添加到菜单方便点击建造,
在tuning.buildings下氧气栏添加"TemporalTearOpener"
new PlanScreen.PlanInfo(new HashedString("Oxygen"), false, new List<string>
我们稍微对它的需求进行改造一下(完全脱离原来配置)
TemporalTearOpenerConfig.ConfigureBuildingTemplate
highEnergyParticleStorage.capacity = 1000f;//粒子储存量,改成10000可好
def.numParticlesToOpen = 10000f;//充满需要的粒子,改成9个可好,为啥是9个,10个飞行过程中会随飞行距离减少
def.consumeRate = 5f;//粒子充能速度,可以不动
go.GetComponent<Deconstructable>().allowDeconstruction = false;//是否允许拆除,false改true就是可拆了
我们都知道这货需要5个打印出才能激活
EstablishColonies public static int BASE_COUNT = 5;//殖民地数量需求,改成1个可好 此时可以发射一次了,此后每天此时都会下陨石。 这没满足我的需求啊,只能发射一次 不是想要的时候就会有陨石, 好吧我们弄个重复的 我们将 this.opening_tear_finish.PlayAnim("working_pst").Enter(delegate(TemporalTearOpener.Instance smi)
{
smi.OpenTemporalTear();
}); 改成 this.opening_tear_finish.PlayAnim("working_pst").Enter(delegate(TemporalTearOpener.Instance smi)
{
smi.OpenTemporalTear();
smi.GoTo(this.charging);//重置动画
}); 好了发射光束后就会恢复原始状态 现在可以重复发射光束了但是陨石没有了啊,为啥,因为裂缝开启了嘛 我们需要到ClusterPOIManager.OpenTemporalTear里更改 在这个下面添加 if (!this.m_temporalTear.Get().IsOpen())
{
this.m_temporalTear.Get().Open();
ClusterManager.Instance.GetWorld(openerWorldId).GetSMI<GameplaySeasonManager.Instance>().StartNewSeason(Db.Get().GameplaySeasons.TemporalTearMeteorShowers);
} 添加ClusterManager.Instance.GetWorld(openerWorldId).GetSMI<GameplaySeasonManager.Instance>().StartNewSeason(Db.Get().GameplaySeasons.TemporalTearMeteorShowers);
此时再发射就会下陨石了,但是不止发射的时候下,后面每天此时都下,为啥,因为发射一次就添加一个下陨石的任务,这不行啊无限发射后面全天都下陨石就问你怕不怕
所以我们需要把任务移除
GameplaySeasonManager.Update 需要在foreach之前添加this.activeSeasons.Clear(); 好了这个移除把开启裂缝的陨石雨也给移除了 但是还有一个问题没解决 就是开火按钮不会消失也不会再充能 所以在public void OpenTemporalTear()下添加 this.m_particlesConsumed = 0f;//重置充能 这次就会在发射后再次进入充能,满100%才可以再此发射 然后这个陨石只掉富勒烯岩石尘埃,那能不能落点其他陨石呢,答案是可以的 GameplayEvents找到this.MeteorShowerFullereneEvent 改成 this.MeteorShowerFullereneEvent = base.Add(new MeteorShowerEvent(id4, duration4, secondsPerMeteor4, new MathUtil.MinMax(1f, 1f), secondsBombardmentOn).AddMeteor(CopperCometConfig.ID, 1f).AddMeteor(GoldCometConfig.ID, 2f).AddMeteor(IronCometConfig.ID, 1f).AddMeteor(FullereneCometConfig.ID, 6f).AddMeteor(RockCometConfig.ID, 1f).AddMeteor(DustCometConfig.ID, 1f)); 添加金铁铜等陨石。至于牛陨石和小吃陨石就不要了,需要的自行在附近找来添加 当以上都不满足你,准备来点没有的陨石,列如钨陨石,铌陨石,石墨,刚,....等等 那我们就要构建一个新的陨石创建一个新类
using System;
using STRINGS;
using UnityEngine;
public class TungstenCometConfig : IEntityConfig
{
public string[] GetDlcIds()
{
return DlcManager.AVAILABLE_ALL_VERSIONS;
}
public GameObject CreatePrefab()
{
GameObject gameObject = EntityTemplates.CreateEntity(TungstenCometConfig.ID, UI.SPACEDESTINATIONS.COMETS.IRONCOMET.NAME, true);
gameObject.AddOrGet<SaveLoadRoot>();
gameObject.AddOrGet<LoopingSounds>();
Comet comet = gameObject.AddOrGet<Comet>();
comet.massRange = new Vector2(3f, 20f);
comet.temperatureRange = new Vector2(323.15f, 423.15f);
comet.explosionOreCount = new Vector2I(2, 4);
comet.entityDamage = 15;
comet.totalTileDamage = 0.5f;
comet.splashRadius = 1;
comet.impactSound = "Meteor_Medium_Impact";
comet.flyingSoundID = 1;
comet.explosionEffectHash = SpawnFXHashes.MeteorImpactMetal;
PrimaryElement primaryElement = gameObject.AddOrGet<PrimaryElement>();
primaryElement.SetElement(SimHashes.Tungsten, true);
primaryElement.Temperature = (comet.temperatureRange.x + comet.temperatureRange.y) / 2f;
KBatchedAnimController kbatchedAnimController = gameObject.AddOrGet<KBatchedAnimController>();
kbatchedAnimController.AnimFiles = new KAnimFile[]
{
Assets.GetAnim("meteor_metal_kanim")
};
kbatchedAnimController.isMovable = true;
kbatchedAnimController.initialAnim = "fall_loop";
kbatchedAnimController.initialMode = KAnim.PlayMode.Loop;
kbatchedAnimController.visibilityType = KAnimControllerBase.VisibilityType.OffscreenUpdate;
gameObject.AddOrGet<KCircleCollider2D>().radius = 0.5f;
gameObject.transform.localScale = new Vector3(0.6f, 0.6f, 1f);
gameObject.AddTag(GameTags.Comet);
return gameObject;
}
public void OnPrefabInit(GameObject go)
{
}
public void OnSpawn(GameObject go)
{
}
public TungstenCometConfig()
{
}
// Note: this type is marked as 'beforefieldinit'.
static TungstenCometConfig()
{
}
public static string ID = "TungstenComet";
}
最后我们还的使用 this.MeteorShowerFullereneEvent = base.Add(new MeteorShowerEvent(id4, duration4, secondsPerMeteor4, new MathUtil.MinMax(1f, 1f), secondsBombardmentOn).AddMeteor(CopperCometConfig.ID, 1f).AddMeteor(GoldCometConfig.ID, 2f).AddMeteor(IronCometConfig.ID, 1f).AddMeteor(FullereneCometConfig.ID, 6f).AddMeteor(RockCometConfig.ID, 1f).AddMeteor(DustCometConfig.ID, 1f).AddMeteor(TungstenCometConfig.ID, 1f));//TungstenCometConfig就添加在最后以便区分 需要多少彗星添加多少彗星类自行构造
陨石持续时间 float duration4 = 30f;//30秒
|