using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CommonAPI; using CommonAPI.Systems; using CommonAPI.Systems.ModLocalization; using DSP_Battle.src.Compat; using HarmonyLib; using MoreMegaStructure; using NGPT; using NebulaAPI; using NebulaAPI.GameState; using NebulaAPI.Interfaces; using NebulaAPI.Networking; using NebulaAPI.Packets; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; using crecheng.DSPModSave; using xiaoye97; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("DSP_Battle")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("HP Inc.")] [assembly: AssemblyProduct("DSP_Battle")] [assembly: AssemblyCopyright("Copyright © HP Inc. 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a125458e-bfa2-40ee-96b3-e461903e8c67")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace DSP_Battle { public static class AssaultController { public enum EAssaultModifier { DamageResist, Evade, AdditionalArmor, ShieldDamageBuff, DropletKiller, NoExp, KineticDamageSuppressor, EnergyDamageSuppressor, BlastDamageSuppressor, MagneticDamageSuppressor, SpaceJammer, DamageBuffSteal, QuickHeal, SuperSpeed } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Response <>9__54_0; public static Response <>9__56_0; internal void b__54_0() { voidInvasionEnabled = true; } internal void b__56_0() { voidInvasionEnabled = true; } } public static bool voidInvasionEnabled = false; public static int difficulty = 2; public static List assaultHives = new List(); public static bool modifierEnabled; public static List modifier; public static bool timeChangedByRelic = false; public static int nextRollVoidEcho = 1; public static int[] expandingHives; public static int[] invincibleHives; public static int[] modifierHives; public static int[] alertHives; public static bool assaultActive; public static int quickTickHive = -1; public static int quickTickFactor = 1; public static int testLvlSet = -1; public static List oriAstroId = new List(); public static List time = new List(); public static List state = new List(); public static List level = new List(); public static int count = 0; public const int DamageReduction = 0; public const int Dodge = 1; public const int DamageToShield = 2; public const int DropletInvincible = 3; public const int AddtionalArmor = 4; public const int SpeedUp = 5; public const int HardenedStructure = 6; public static int lancerModelIndex = 285; public static int oriLancerMarchMovementSpeed = 400; public static int oriLancerMaxMovementAcceleration = 500; public static int oriLancerMaxMovementSpeed = 1500; public static int basicInhibitPoint = 1000; public static List modifierPoolEarly = new List { 0, 1, 2, 3, 5, 11 }; public static List modifierPoolMid = new List { 0, 1, 2, 3, 5, 8, 10, 11, 13 }; public static List modifierPoolLate = new List { 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13 }; public static List modifierValueMinEarly = new List { 10, 10, 3, 50, 1, 1, 30, 30, 30, 30, 1, 10, 60, 50 }; public static List modifierValueMinMid = new List { 20, 15, 30, 75, 2, 1, 100, 100, 100, 100, 1, 30, 180, 100 }; public static List modifierValueMinLate = new List { 30, 20, 120, 100, 5, 1, 300, 300, 300, 300, 1, 40, 600, 200 }; public static List modifierMaxActiveCount = new List { 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5 }; public static int modifierTypeCount = 14; public static void InitWhenLoad() { voidInvasionEnabled = false; difficulty = 2; assaultHives = new List(); expandingHives = new int[GameMain.spaceSector.maxHiveCount]; invincibleHives = new int[GameMain.spaceSector.maxHiveCount]; modifierHives = new int[GameMain.spaceSector.maxHiveCount]; alertHives = new int[GameMain.spaceSector.maxHiveCount]; modifier = new List { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; timeChangedByRelic = false; nextRollVoidEcho = 1; ClearDataArrays(); } [HarmonyPostfix] [HarmonyPatch(typeof(ThreadManager), "ProcessFrame")] public static void LogicTick(long frameCounter) { MMSCPU.BeginSample(TCFVPerformanceMonitor.MainLogic); MMSCPU.BeginSample(TCFVPerformanceMonitor.Assault); if (voidInvasionEnabled && assaultHives.Count == 0 && frameCounter % 3600 == 0) { int num = -1; bool flag = false; if (GameMain.data.dysonSpheres != null) { for (int i = 0; i < GameMain.data.dysonSpheres.Length; i++) { if (GameMain.data.dysonSpheres[i] != null && (GameMain.data.dysonSpheres[i].energyGenCurrentTick_Swarm > 0 || GameMain.data.dysonSpheres[i].energyGenCurrentTick > 0)) { flag = true; num = GameMain.data.dysonSpheres[i].starData.index; break; } } } if (flag) { InitNewAssault(); } } for (int j = 0; j < assaultHives.Count; j++) { assaultHives[j].LogicTick(); } CalcCombatState(); if (modifierEnabled && Configs.combatState == 3) { if (modifier[10] != 0) { Player mainPlayer = GameMain.mainPlayer; CombatModuleComponent val = ((mainPlayer == null) ? null : mainPlayer.mecha?.spaceCombatModule); if (val != null) { ModuleFleet[] moduleFleets = val.moduleFleets; for (int k = 0; k < moduleFleets.Length; k++) { if (moduleFleets[k].protoId != DropletFleetPatchers.fleetConfigId1 && moduleFleets[k].protoId != DropletFleetPatchers.fleetConfigId2) { moduleFleets[k].fleetEnabled = false; } } } } if (modifier[13] > 0) { SpaceSector.PrefabDescByModelIndex[lancerModelIndex].unitMarchMovementSpeed = (float)oriLancerMarchMovementSpeed * ((float)modifier[13] * 1f / 100f); SpaceSector.PrefabDescByModelIndex[lancerModelIndex].unitMaxMovementAcceleration = (float)oriLancerMaxMovementAcceleration * ((float)modifier[13] * 1f / 100f); } } PostLogicTick(frameCounter); MMSCPU.EndSample(TCFVPerformanceMonitor.Assault); MMSCPU.EndSample(TCFVPerformanceMonitor.MainLogic); } public static void PostLogicTick(long time) { bool flag = assaultHives != null && assaultHives.Count > 0; for (int i = 0; i < assaultHives.Count; i++) { if (assaultHives[i].state == EAssaultHiveState.Remove) { expandingHives[assaultHives[i].byAstroIndex] = -1; invincibleHives[assaultHives[i].byAstroIndex] = -1; modifierHives[assaultHives[i].byAstroIndex] = -1; alertHives[assaultHives[i].byAstroIndex] = -1; } else { flag = false; } } if (flag && !MP.clientBlocker) { OnAssaultEnd(); } } public static void CalcCombatState() { if (assaultHives == null || assaultHives.Count == 0) { Configs.combatState = 0; return; } bool flag = false; bool flag2 = false; bool flag3 = false; for (int i = 0; i < assaultHives.Count; i++) { if (assaultHives[i].state == EAssaultHiveState.Assault) { flag3 = true; break; } if (assaultHives[i].timeTillAssault <= 18000) { flag2 = true; } else if (assaultHives[i].state != EAssaultHiveState.End && assaultHives[i].state != EAssaultHiveState.Remove) { flag = true; } } if (flag3) { Configs.combatState = 3; } else if (flag2) { Configs.combatState = 2; } else if (flag) { Configs.combatState = 1; } } public static void ClearDataArrays() { if (expandingHives == null) { expandingHives = new int[GameMain.spaceSector.maxHiveCount]; } else { for (int i = 0; i < expandingHives.Length; i++) { expandingHives[i] = -1; } } if (invincibleHives == null) { invincibleHives = new int[GameMain.spaceSector.maxHiveCount]; } else { for (int j = 0; j < invincibleHives.Length; j++) { invincibleHives[j] = -1; } } if (modifierHives == null) { modifierHives = new int[GameMain.spaceSector.maxHiveCount]; } else { for (int k = 0; k < modifierHives.Length; k++) { modifierHives[k] = -1; } } if (alertHives == null) { alertHives = new int[GameMain.spaceSector.maxHiveCount]; } else { for (int l = 0; l < alertHives.Length; l++) { alertHives[l] = -1; } } if (modifier == null) { modifier = new List { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; } else { for (int m = 0; m < modifier.Count; m++) { modifier[m] = 0; } } bool flag = true; SpaceSector.PrefabDescByModelIndex[lancerModelIndex].unitMarchMovementSpeed = oriLancerMarchMovementSpeed; SpaceSector.PrefabDescByModelIndex[lancerModelIndex].unitMaxMovementAcceleration = oriLancerMaxMovementAcceleration; modifierEnabled = false; assaultHives.Clear(); } public static void InitNewAssault(int starIndex = -1) { if (MP.clientBlocker) { return; } if (starIndex < 0) { long num = (long)((float)((long)SkillPoints.skillLevelR[8] * 1000000L) * SkillPoints.skillValuesR[8]); List list = new List(); for (int i = 0; i < GameMain.galaxy.starCount; i++) { list.Add(0L); if (GameMain.galaxy.stars[i] == null) { continue; } PlanetData[] planets = GameMain.galaxy.stars[i].planets; for (int j = 0; j < GameMain.galaxy.stars[i].planetCount; j++) { if (planets[j] == null || planets[j].factory == null) { continue; } PlanetFactory factory = planets[j].factory; PowerSystem powerSystem = factory.powerSystem; if (powerSystem == null) { continue; } for (int k = 1; k < powerSystem.netCursor; k++) { PowerNetwork val = powerSystem.netPool[k]; if (val != null) { list[i] += val.energyServed; } } } if (list[i] * 60 <= num) { list[i] = 0L; } } long num2 = list.Sum(); if (num2 <= 0) { num2 = 1L; } List list2 = new List(); if (list.Count > 1) { list2.Add((double)list[0] * 1.0 / (double)num2); } for (int l = 1; l < list.Count; l++) { list2.Add(list2[l - 1] + (double)list[l] * 1.0 / (double)num2); } double num3 = Utils.RandDouble(); for (int m = 0; m < list2.Count; m++) { if (list2[m] >= num3) { starIndex = m; break; } } } ClearDataArrays(); if (starIndex < 0) { return; } int num4 = Configs.wavePerStar[starIndex]; int totalWave = Configs.totalWave; bool flag = totalWave % 5 == 4; int assaultTotalNum = GetAssaultTotalNum(num4); int val2 = assaultTotalNum / 1440 + 1; int val3 = Math.Min(assaultTotalNum / 1440 + 4, assaultTotalNum / 10 + 1) + 1; val3 = Math.Min(val3, 9); val2 = Math.Min(val2, 8); int num5 = Utils.RandInt(val2, val3); int num6 = assaultTotalNum / num5; int hiveLevel = GetHiveLevel(num4); for (int n = 0; n < num5; n++) { int num7 = (int)(((Utils.RandDouble() - 0.5) / 2.5 + 1.0) * (double)num6) + 1; if (num7 > 1440) { num7 = 1440; } AssaultHive assaultHive = new AssaultHive(starIndex, n, assaultHives.Count); assaultHive.assaultNumTotal = num7; assaultHive.level = Math.Min(100, hiveLevel + (flag ? 20 : 0)); assaultHive.hive.evolve.level = Math.Max(assaultHive.hive.evolve.level, assaultHive.level); float num8 = (float)Math.Max(assaultHive.level, 1) * 1f / 20f; if (num8 > 1f) { num8 = 1f + (num8 - 1f) / 4f; } assaultHive.inhibitPointsTotalInit = (int)(num8 * (float)basicInhibitPoint); assaultHive.inhibitPointsLimit = assaultHive.inhibitPointsTotalInit; if (n == num5 - 1) { assaultHive.inhibitPointsLimit = (int)((double)assaultHive.inhibitPointsLimit * 0.8) + 1; } assaultHive.time = n * 5; assaultHive.timeTillAssault = GetAssembleTime(num4) + 5 * n; assaultHive.timeTotalInit = assaultHive.timeTillAssault; if (flag) { assaultHive.isSuper = flag; assaultHive.timeTillAssault += 18000; assaultHive.timeTotalInit += 18000; } assaultHives.Add(assaultHive); } if (flag) { InitModifiers(totalWave, num4); } assaultActive = true; timeChangedByRelic = false; Configs.wavePerStar[starIndex]++; UIAssaultAlert.tipRefreshCounter = UIAssaultAlert.tipRefreshCounterResetValue; MP.Sync(EDataType.CallOnAssaultInited); } public static void InitModifiers(int waveCountTotal, int waveCountCur) { int num = waveCountTotal / 5; List list = new List(); List list2 = modifierPoolEarly; List list3 = modifierValueMinEarly; if (num >= 10) { list2 = modifierPoolLate; list3 = modifierValueMinLate; } else if (num >= 5) { list2 = modifierPoolMid; list3 = modifierValueMinMid; } for (int i = 0; i < list2.Count; i++) { list.Add(list2[i]); } int modifierCount = GetModifierCount(num); for (int j = 0; j < modifierCount; j++) { if (list.Count <= 0) { break; } int index = Utils.RandInt(0, list.Count); int index2 = list[index]; int value = Utils.RandInt(list3[index2], 2 * list3[index2] + 1); modifier[index2] = value; list.RemoveAt(index); } } public static void NotifyAssaultDetected() { if (assaultHives != null && assaultHives.Count != 0 && assaultHives[0] != null) { bool isSuper = assaultHives[0].isSuper; int starIndex = assaultHives[0].starIndex; string text = ""; if (!isSuper) { string text2 = text; string format = Localization.Translate("侦测到虚空入侵提示"); StarData obj = GameMain.galaxy.StarById(starIndex + 1); text = text2 + string.Format(format, (obj != null) ? obj.displayName : null); } else { string text3 = text; string format2 = Localization.Translate("侦测到虚空入侵提示"); StarData obj2 = GameMain.galaxy.StarById(starIndex + 1); text = text3 + string.Format(format2, (obj2 != null) ? obj2.displayName : null); text += Localization.Translate("虚空入侵额外特性提示"); text += GetModifierDesc(); } UIDialogPatch.ShowUIDialog(Localization.Translate("虚空入侵"), text); } } public static string GetModifierDesc() { string text = ""; for (int i = 0; i < modifier.Count; i++) { if (modifier[i] > 0 || (i >= 6 && i <= 9 && modifier[i] < 0)) { int value = modifier[i]; text += "\n"; text += string.Format(Localization.Translate($"额外特性描述{i}"), Math.Abs(value)); text += ""; } } return text; } public static void OnAssaultEnd() { MP.Sync(EDataType.CallOnAssaultEndSettleStart); assaultActive = false; modifierEnabled = false; if (modifier[6] < 0) { GameHistoryData history = GameMain.data.history; history.kineticDamageScale -= (float)modifier[6] * 1f / 100f; } if (modifier[7] < 0) { GameHistoryData history2 = GameMain.data.history; history2.energyDamageScale -= (float)modifier[7] * 1f / 100f; } if (modifier[8] < 0) { GameHistoryData history3 = GameMain.data.history; history3.blastDamageScale -= (float)modifier[8] * 1f / 100f; } if (modifier[9] < 0) { GameHistoryData history4 = GameMain.data.history; history4.magneticDamageScale -= (float)modifier[9] * 1f / 100f; } if (modifier[10] != 0) { Player mainPlayer = GameMain.mainPlayer; CombatModuleComponent val = ((mainPlayer == null) ? null : mainPlayer.mecha?.spaceCombatModule); if (val != null) { ModuleFleet[] moduleFleets = val.moduleFleets; for (int i = 0; i < moduleFleets.Length; i++) { if (moduleFleets[i].protoId != DropletFleetPatchers.fleetConfigId1 && moduleFleets[i].protoId != DropletFleetPatchers.fleetConfigId2) { moduleFleets[i].fleetEnabled = true; } } } } int num = 0; int num2 = 0; bool flag = false; for (int j = 0; j < assaultHives.Count; j++) { num += assaultHives[j].enemyKilled; num2 += assaultHives[j].assaultNum; if (!flag) { flag = assaultHives[j].isSuper; } } if (num2 <= 0) { num2 = 1; } float num3 = (float)num * 1f / (float)num2; if (num3 > 1f) { num3 = 1f; } int num4 = GiveReward(num3); string text = ""; text += string.Format(Localization.Translate("虚空入侵结束提示"), num, num2, num4); if (flag) { if (EventSystem.recorder != null && EventSystem.recorder.protoId > 0 && Relic.GetRelicCount() < Relic.relicHoldMax) { if (EventSystem.recorder.modifier != null) { EventSystem.recorder.modifier[4] += 50; } text = text + "\n\n" + Localization.Translate("虚空入侵结束提示元驱动解译"); } else if (EventSystem.recorder == null || EventSystem.recorder.protoId == 0) { if (Relic.GetRelicCount() <= 0) { if (EventSystem.neverStartTheFirstEvent > 0) { EventSystem.InitNewEvent(); } else { EventSystem.TransferTo(9997); EventSystem.recorder.decodeType = 24; EventSystem.recorder.decodeTimeNeed = 3600; EventSystem.recorder.decodeTimeSpend = 0; } } else { EventSystem.TransferTo(9998); } text = text + "\n\n" + Localization.Translate("虚空入侵结束提示元驱动发现"); } } UIDialogPatch.ShowUIDialog(Localization.Translate("虚空入侵结束"), text); assaultHives.Clear(); ClearDataArrays(); Configs.combatState = 0; BattleBGMController.SetWaveFinished(); } public static int GiveReward(float factor) { int totalWave = Configs.totalWave; int num = 0; num = ((totalWave < Configs.rewardSPMap.Count && totalWave >= 0) ? Configs.rewardSPMap[totalWave] : Configs.rewardSPMap.Last()); if (num > 2 && timeChangedByRelic) { num = 2; } int num2 = (int)(factor * (float)num); SkillPoints.totalPoints += num2; return num2; } public static int GetAssaultTotalNum(int waveCount) { float num = ((CombatSettings)(ref GameMain.data.history.combatSettings)).difficulty; float num2 = 4f; if (num < 0.05f) { num = 0.05f; } else if (num > num2) { num = num2; } int num3 = 36; int num4 = Configs.totalAssaultNumMap.Count - 1; int num5 = num4 - 36; int num6 = num3; if (num > 1f) { num6 += (int)(((double)num - 1.0) / ((double)num2 - 1.0) * (double)num5); } if (num6 > num4) { num6 = num4; } int num7 = ((waveCount < num6 && waveCount >= 0) ? Configs.totalAssaultNumMap[waveCount] : Configs.totalAssaultNumMap[num6]); if (num < 1f) { num7 = Math.Max((int)((float)num7 * num), 1); } if (Configs.developerMode) { Utils.Log($"dif{num}, realMaxlen{num6}, got result {num7}"); } return num7; } public static int GetHiveLevel(int waveCount) { float num = ((CombatSettings)(ref GameMain.data.history.combatSettings)).difficulty; if (num < 0.125f) { num = 0.125f; } int num2 = ((waveCount < Configs.levelMap.Count && waveCount >= 0) ? Configs.levelMap[waveCount] : Configs.levelMap.Last()); if (num < 1f) { num2 = (int)((float)num2 * num); } return num2; } public static int GetAssembleTime(int waveCount) { if (Configs.totalWave > 20) { int num = Configs.totalWave / 10; if (num > 10) { num = 10; } waveCount += num; } float num2 = ((CombatSettings)(ref GameMain.data.history.combatSettings)).difficulty; int num3 = 8 - (int)num2; if (num3 < 0) { num3 = 0; } if (num3 > 6) { num3 = 6; } int num4 = Configs.assembleTimeMap.Count - 1 - num3; if (num4 < 0) { num4 = 0; } if (num4 >= Configs.assembleTimeMap.Count) { num4 = Configs.assembleTimeMap.Count - 1; } if (DspBattlePlugin.voidInvasionMaxFrequency.Value >= 2) { num4 = Configs.assembleTimeMap.Count - 1; } if (waveCount >= num4 || waveCount < 0) { waveCount = num4; } if (DspBattlePlugin.voidInvasionMaxFrequency.Value >= 3 || waveCount == num4) { return 18000; } return Configs.assembleTimeMap[waveCount]; } public static int GetModifierCount(int superWaveCount) { int num = 0; if (superWaveCount >= modifierMaxActiveCount.Count()) { num = modifierMaxActiveCount.Last(); } else if (superWaveCount >= 0) { num = modifierMaxActiveCount[superWaveCount]; } int min = num; if (num >= 4) { min = num - 2; } else if (num >= 2) { min = num - 1; } return Utils.RandInt(min, num + 1); } public static void CheckHiveStatus(int starIndex) { for (int i = 1; i < 9; i++) { EnemyDFHiveSystem val = GameMain.spaceSector.dfHivesByAstro[starIndex * 8 + i]; if (val != null) { int instId = val.pbuilders[1].instId; Utils.Log($"instId is {instId}"); } else { Utils.Log($"null hive at{i}"); } } } public static void BuildHiveAlreadyInited(int starIndex) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) for (int i = 1; i < 9; i++) { EnemyDFHiveSystem val = GameMain.spaceSector.dfHivesByAstro[starIndex * 8 + i]; if (val == null) { continue; } ref Builder reference = ref val.pbuilders[1]; if (reference.instId <= 0) { int protoId = reference.protoId; EnemyProto val2 = ((ProtoSet)(object)LDB.enemies).Select(protoId); if (val2 != null) { EnemyData val3 = default(EnemyData); val3.protoId = (short)protoId; val3.modelIndex = (short)val2.ModelIndex; val3.astroId = val.hiveAstroId; val3.originAstroId = val.hiveAstroId; val3.owner = 0; val3.port = 0; val3.dynamic = !val2.IsBuilding; val3.isSpace = true; val3.localized = true; val3.stateFlags = 0; val3.pos = VectorLF3.op_Implicit(reference.pos); val3.rot = reference.rot; GameMain.spaceSector.AddEnemyDataWithComponents(ref val3, val, 1, false); } val.isEmpty = false; } } } public static bool hasCore(this EnemyDFHiveSystem hive) { if (hive == null) { return false; } return hive.pbuilders[1].instId > 0; } public static void BuildCore(this EnemyDFHiveSystem hive) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) if (hive == null) { return; } ref Builder reference = ref hive.pbuilders[1]; if (reference.instId <= 0) { int protoId = reference.protoId; EnemyProto val = ((ProtoSet)(object)LDB.enemies).Select(protoId); if (val != null) { EnemyData val2 = default(EnemyData); val2.protoId = (short)protoId; val2.modelIndex = (short)val.ModelIndex; val2.astroId = hive.hiveAstroId; val2.originAstroId = hive.hiveAstroId; val2.owner = 0; val2.port = 0; val2.dynamic = !val.IsBuilding; val2.isSpace = true; val2.localized = true; val2.stateFlags = 0; val2.pos = VectorLF3.op_Implicit(reference.pos); val2.rot = reference.rot; GameMain.spaceSector.AddEnemyDataWithComponents(ref val2, hive, 1, false); } hive.isEmpty = false; } } [HarmonyPrefix] [HarmonyPatch(typeof(EnemyDFHiveSystem), "InitFormations")] public static bool InitDFSHivePrePatch(ref EnemyDFHiveSystem __instance) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown __instance.forms = (EnemyFormation[])(object)new EnemyFormation[3]; __instance.forms[0] = new EnemyFormation(); __instance.forms[1] = new EnemyFormation(); __instance.forms[2] = new EnemyFormation(); __instance.forms[0].SetPortCount(1440); __instance.forms[1].SetPortCount(120); __instance.forms[2].SetPortCount(6); return false; } [HarmonyPrefix] [HarmonyPatch(typeof(EvolveData), "AddExp")] public static bool EvolveDataAddExpPrefix(ref EvolveData __instance, int _addexp) { if (__instance.level >= 100) { if (__instance.expf != 0 || __instance.expp != 0 || __instance.level != 100) { __instance.level = 100; __instance.expf = 0; __instance.expp = 0; __instance.expl = EvolveData.LevelCummulativeExp(100); } return false; } __instance.expf += _addexp; bool flag = __instance.level < 30; while (__instance.expf >= EvolveData.levelExps[__instance.level] && flag) { int num = EvolveData.levelExps.Length - 1; __instance.expf -= EvolveData.levelExps[__instance.level]; __instance.expl += EvolveData.levelExps[__instance.level]; __instance.level++; if (__instance.level >= num) { __instance.level = num; __instance.expf = 0; return false; } } return false; } [HarmonyPrefix] [HarmonyPatch(typeof(EvolveData), "AddExpPoint")] public static bool EvolveDataAddExpPointPrefix(ref EvolveData __instance, int _addexpp) { if (__instance.level >= 100) { if (__instance.expf != 0 || __instance.expp != 0 || __instance.level != 100) { __instance.level = 30; __instance.expf = 0; __instance.expp = 0; __instance.expl = EvolveData.LevelCummulativeExp(100); } return false; } if (_addexpp > 0) { __instance.expp += _addexpp; if (__instance.expp >= 10000) { __instance.expf += __instance.expp / 10000; __instance.expp %= 10000; bool flag = __instance.level < 30; while (__instance.expf >= EvolveData.levelExps[__instance.level] && flag) { int num = EvolveData.levelExps.Length - 1; __instance.expf -= EvolveData.levelExps[__instance.level]; __instance.expl += EvolveData.levelExps[__instance.level]; __instance.level++; if (__instance.level >= num) { __instance.level = num; __instance.expf = 0; __instance.expp = 0; return false; } } } } return false; } public static void TryEnableVoidInvasion() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown string text = Localization.Translate("开启虚空入侵"); string text2 = Localization.Translate("虚空入侵提示"); string text3 = Localization.Translate("否"); string text4 = Localization.Translate("是"); Response val = RegretEnable; object obj = <>c.<>9__54_0; if (obj == null) { Response val2 = delegate { voidInvasionEnabled = true; }; <>c.<>9__54_0 = val2; obj = (object)val2; } UIMessageBox.Show(text, text2, text3, text4, 1, val, (Response)obj); } public static void RegretEnable() { } public static void AskEnableVoidInvasion() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown if (!Configs.enableVoidInvasionUpdate) { return; } string text = Localization.Translate("开启虚空入侵"); string text2 = Localization.Translate("虚空入侵版本更新提示"); string text3 = Localization.Translate("否"); string text4 = Localization.Translate("是"); Response val = RegretEnable; object obj = <>c.<>9__56_0; if (obj == null) { Response val2 = delegate { voidInvasionEnabled = true; }; <>c.<>9__56_0 = val2; obj = (object)val2; } UIMessageBox.Show(text, text2, text3, text4, 1, val, (Response)obj); } public static bool CheckCasterOrTargetHasModifier(ref SkillTarget caster) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Invalid comparison between Unknown and I4 if (modifierEnabled && caster.astroId > 1000000 && (int)caster.type == 4) { int num = caster.astroId - 1000000; if (num < modifierHives.Length && modifierHives[num] >= 0) { return true; } } return false; } public static bool CheckHiveHasModifier(ref EnemyDFHiveSystem hive) { return CheckHiveHasModifier(hive.hiveAstroId); } public static bool CheckHiveHasModifier(int oriAstroId) { if (modifierEnabled && oriAstroId > 1000000) { int num = oriAstroId - 1000000; if (num < modifierHives.Length && modifierHives[num] >= 0) { return true; } } return false; } [HarmonyPostfix] [HarmonyPatch(typeof(CombatStat), "TickSkillLogic")] public static void HpRecoverBuff(ref CombatStat __instance) { if (CheckHiveHasModifier(__instance.originAstroId) && modifierEnabled && modifier[12] > 0) { __instance.hp += modifier[12] * 100 / 60; if (__instance.hp > __instance.hpMax) { __instance.hp = __instance.hpMax; } } } public static void Import(BinaryReader r) { InitWhenLoad(); if (Configs.versionWhenImporting >= 30240716) { voidInvasionEnabled = r.ReadBoolean(); difficulty = r.ReadInt32(); int num = r.ReadInt32(); for (int i = 0; i < num; i++) { AssaultHive assaultHive = new AssaultHive(0, i, i); assaultHive.Import(r); assaultHives.Add(assaultHive); } modifierEnabled = r.ReadBoolean(); int num2 = r.ReadInt32(); for (int j = 0; j < num2; j++) { int value = r.ReadInt32(); if (j < modifier.Count) { modifier[j] = value; } } timeChangedByRelic = r.ReadBoolean(); } UIEscMenuPatch.Init(); if (Configs.versionWhenImporting < 30240703) { AskEnableVoidInvasion(); } if (Configs.versionWhenImporting >= 30240716 && Configs.versionWhenImporting < 30240825) { voidInvasionEnabled = false; } if (Configs.versionWhenImporting >= 30240830) { nextRollVoidEcho = r.ReadInt32(); } } public static void Export(BinaryWriter w) { w.Write(voidInvasionEnabled); w.Write(difficulty); w.Write(assaultHives.Count); for (int i = 0; i < assaultHives.Count; i++) { assaultHives[i].Export(w); } w.Write(modifierEnabled); w.Write(modifier.Count); for (int j = 0; j < modifier.Count; j++) { w.Write(modifier[j]); } w.Write(timeChangedByRelic); w.Write(nextRollVoidEcho); } public static void IntoOtherSave() { InitWhenLoad(); } public static EnemyDFHiveSystem TryCreateNewHiveAndCore(int starIndex) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) EnemyDFHiveSystem val = GameMain.spaceSector.TryCreateNewHive(GameMain.galaxy.StarById(starIndex + 1)); if (val != null) { ref Builder reference = ref val.pbuilders[1]; if (reference.instId > 0) { return val; } int protoId = reference.protoId; EnemyProto val2 = ((ProtoSet)(object)LDB.enemies).Select(protoId); if (val2 != null) { EnemyData val3 = default(EnemyData); val3.protoId = (short)protoId; val3.modelIndex = (short)val2.ModelIndex; val3.astroId = val.hiveAstroId; val3.originAstroId = val.hiveAstroId; val3.owner = 0; val3.port = 0; val3.dynamic = !val2.IsBuilding; val3.isSpace = true; val3.localized = true; val3.stateFlags = 0; val3.pos = VectorLF3.op_Implicit(reference.pos); val3.rot = reference.rot; GameMain.spaceSector.AddEnemyDataWithComponents(ref val3, val, 1, false); } val.isEmpty = false; } return val; } } public class AssaultHive { public int listIndex; public int starIndex; public int oriAstroId; public int orbitIndex; public int byAstroIndex; public int strength; public EAssaultHiveState state; public int time; public int timeTillAssault; public int timeTotalInit; public int timeDelayedByRelic; public int level; public int oriLevel; public int assaultNumTotal; public int inhibitPoints; public int inhibitPointsLimit; public int inhibitPointsTotalInit; public bool canFullyStopped; public bool isSuper; public int enemyKilled; public EnemyDFHiveSystem hive; public bool isCreated; public static int timeDelayedMax = 72000; public static int pIndexMin = 65535; public int assembleNum => Math.Min(1440, (int)((double)assaultNum * 1.5) + 1); public int assaultNum { get { if (inhibitPoints >= inhibitPointsTotalInit || inhibitPointsTotalInit <= 0) { return 0; } return Math.Max(1, (int)((double)(assaultNumTotal * (inhibitPointsTotalInit - inhibitPoints)) * 1.0 / (double)inhibitPointsTotalInit)); } } public AssaultHive(int starIndex, int orbitIndex, int listIndex) { oriAstroId = 1000000 + starIndex * 8 + orbitIndex + 1; this.starIndex = starIndex; this.orbitIndex = orbitIndex; this.listIndex = listIndex; byAstroIndex = oriAstroId - 1000000; state = EAssaultHiveState.Idle; time = 0; timeDelayedByRelic = 0; inhibitPoints = 0; isCreated = false; isSuper = false; enemyKilled = 0; CreateOrGetHive(); } public void CreateOrGetHive() { hive = GameMain.data.spaceSector.dfHivesByAstro[byAstroIndex]; if (MP.clientBlocker) { return; } if (hive == null) { int num = 8; while (hive == null && num > 0) { GameMain.spaceSector.TryCreateNewHive(GameMain.galaxy.StarById(starIndex + 1)); hive = GameMain.data.spaceSector.dfHivesByAstro[byAstroIndex]; num--; } oriLevel = -1; } else if (hive.isAlive) { oriLevel = hive.evolve.level; } else { oriLevel = -1; } if (hive != null) { if (!hive.hasCore()) { isCreated = true; hive.BuildCore(); } if (!hive.realized) { hive.Realize(); } } else { Debug.Log((object)$"hive is null when init assault hives with {starIndex} - {listIndex}, now removing"); state = EAssaultHiveState.Remove; } } public void LogicTick() { if (hive == null) { if (!MP.clientBlocker) { state = EAssaultHiveState.Remove; time = 0; } else { Utils.Log("null hive, but not removing because you are client."); } } else if (!hive.isAlive && state != EAssaultHiveState.End && state != EAssaultHiveState.Remove) { state = EAssaultHiveState.End; time = 120; } else if (time % 120 == 0 && state != EAssaultHiveState.End && state != EAssaultHiveState.Remove) { bool flag = false; for (int i = 0; i < hive.pbuilders.Length; i++) { if (hive.pbuilders[i].instId > 0) { flag = true; break; } } if (!flag) { state = EAssaultHiveState.End; time = 120; } } switch (state) { case EAssaultHiveState.Idle: LogicTickIdle(); break; case EAssaultHiveState.Expand: LogicTickExpand(); break; case EAssaultHiveState.Assemble: LogicTickAssemble(); break; case EAssaultHiveState.Assault: LogicTickAssault(); break; case EAssaultHiveState.End: LogicTickEnd(); break; case EAssaultHiveState.Remove: LogicTickRemove(); break; } if (state == EAssaultHiveState.Idle || state == EAssaultHiveState.Expand || state == EAssaultHiveState.Assemble) { AssaultController.invincibleHives[byAstroIndex] = listIndex; } else { AssaultController.invincibleHives[byAstroIndex] = -1; } if (state == EAssaultHiveState.Idle || state == EAssaultHiveState.Expand) { AssaultController.expandingHives[byAstroIndex] = listIndex; } else { AssaultController.expandingHives[byAstroIndex] = -1; } if (state == EAssaultHiveState.Assault && AssaultController.modifierEnabled) { AssaultController.modifierHives[byAstroIndex] = listIndex; } else { AssaultController.modifierHives[byAstroIndex] = -1; } if (state == EAssaultHiveState.Assemble || state == EAssaultHiveState.Assault) { AssaultController.alertHives[byAstroIndex] = listIndex; } else { AssaultController.alertHives[byAstroIndex] = -1; } } public void LogicTickIdle() { timeTillAssault--; time--; if (hive != null) { hive.evolve.threat = 0; } if (time <= 0) { state = EAssaultHiveState.Expand; time = 5400; } } public void LogicTickExpand() { timeTillAssault--; time--; if (hive != null) { hive.evolve.threat = 0; } QuickBuild(5); hive.evolve.threat = 0; hive.evolve.waveTicks = 0; hive.evolve.waveAsmTicks = 0; if (time <= 0) { state = EAssaultHiveState.Assemble; time = timeTillAssault; if (listIndex == 0) { AssaultController.NotifyAssaultDetected(); } if (CheckIfAllHiveReachedState(EAssaultHiveState.Assemble)) { MP.Sync(EDataType.CallOnAssaultStateSwitch); } } } public void LogicTickAssemble() { if (Relic.playerIdleTime < Relic.playerIdleTimeMax) { timeTillAssault--; time--; } if (hive != null) { hive.evolve.threat = 0; } QuickAssemble(); hive.evolve.threat = 1; hive.evolve.waveTicks = 0; hive.evolve.waveAsmTicks = 0; if (time <= 0 && !MP.clientBlocker) { LaunchAssault(); state = EAssaultHiveState.Assault; if (!AssaultController.modifierEnabled && AssaultController.modifier.Sum() > 0) { AssaultController.modifierEnabled = true; } time = 0; if (AssaultController.modifierEnabled) { int num = AssaultController.modifier[6]; if (num > 0) { float num2 = (float)num * 1f / 100f; if (num2 > GameMain.data.history.kineticDamageScale) { num2 = GameMain.data.history.kineticDamageScale; } int num3 = (int)(num2 * 100f); num2 = (float)num3 * 1f / 100f; GameHistoryData history = GameMain.data.history; history.kineticDamageScale -= num2; AssaultController.modifier[6] = -num3; } num = AssaultController.modifier[7]; if (num > 0) { float num4 = (float)num * 1f / 100f; if (num4 > GameMain.data.history.energyDamageScale) { num4 = GameMain.data.history.energyDamageScale; } int num5 = (int)(num4 * 100f); num4 = (float)num5 * 1f / 100f; GameHistoryData history2 = GameMain.data.history; history2.energyDamageScale -= num4; AssaultController.modifier[7] = -num5; } num = AssaultController.modifier[8]; if (num > 0) { float num6 = (float)num * 1f / 100f; if (num6 > GameMain.data.history.blastDamageScale) { num6 = GameMain.data.history.blastDamageScale; } int num7 = (int)(num6 * 100f); num6 = (float)num7 * 1f / 100f; GameHistoryData history3 = GameMain.data.history; history3.blastDamageScale -= num6; AssaultController.modifier[8] = -num7; } num = AssaultController.modifier[9]; if (num > 0) { float num8 = (float)num * 1f / 100f; if (num8 > GameMain.data.history.magneticDamageScale) { num8 = GameMain.data.history.magneticDamageScale; } int num9 = (int)(num8 * 100f); num8 = (float)num9 * 1f / 100f; GameHistoryData history4 = GameMain.data.history; history4.magneticDamageScale -= num8; AssaultController.modifier[9] = -num9; } } if (CheckIfAllHiveReachedState(EAssaultHiveState.Assault)) { MP.Sync(EDataType.CallOnLaunchAllVoidAssault); } } if (listIndex == 0 && time > 7200 && time % 120 == 0) { StarCannonAutoFire.CheckAutoFire(); } } public void LogicTickAssault() { timeTillAssault--; time--; if (hive == null) { state = EAssaultHiveState.End; time = 120; } if (!MP.clientBlocker) { if (!hive.hasIncomingAssaultingUnit) { state = EAssaultHiveState.End; time = 120; } if (time == 1) { state = EAssaultHiveState.End; time = 120; } } } public void LogicTickEnd() { timeTillAssault--; time--; if (hive != null) { int num = 100; int num2 = hive.pbuilders.Length; int num3 = num2 / num * (time % num); int num4 = num2 / num * (time % num + 1); if (num4 > num2) { num4 = num2; } if (time % num == num - 1) { num4 = num2; } for (int i = num3; i < num4; i++) { if (Configs.developerMode) { int protoId = hive.pbuilders[i].protoId; EnemyProto val = ((ProtoSet)(object)LDB.enemies).Select(protoId); if (val != null) { PrefabDesc val2 = SpaceSector.PrefabDescByModelIndex[val.ModelIndex]; if (!val2.isDFRelay && !val2.isDFSpaceCore && !val2.isDFSpaceGammaReceiver) { } } } if (i >= pIndexMin || oriLevel < 0) { int instId = hive.pbuilders[i].instId; if (instId > 0) { KillHiveStrcuture(instId); } } } } if (hive.evolve.level > oriLevel && hive.evolve.level > 0) { hive.evolve.level--; hive.evolve.expf = 0; hive.evolve.expp = 0; } if (time <= 0) { if (hive.evolve.level > oriLevel && oriLevel >= 0) { hive.evolve.level = oriLevel; } state = EAssaultHiveState.Remove; } } public void LogicTickRemove() { } private void QuickBuild(int speedFactor) { if (hive == null) { return; } ref AnimData[] enemyAnimPool = ref hive.sector.enemyAnimPool; if (!hive.realized) { return; } int cursor = hive.cores.cursor; int cursor2 = hive.builders.cursor; EnemyBuilderComponent[] buffer = hive.builders.buffer; DFSCoreComponent[] buffer2 = hive.cores.buffer; while (speedFactor > 0) { speedFactor--; for (int i = 1; i < cursor2; i++) { ref EnemyBuilderComponent reference = ref buffer[i]; if (reference.id == i) { int enemyId = reference.enemyId; reference.energy = reference.maxEnergy; reference.matter = reference.maxMatter; ((EnemyBuilderComponent)(ref reference)).LogicTick(); if (reference.state >= 3) { ((EnemyBuilderComponent)(ref reference)).BuildLogic_Space(hive, buffer, hive.pbuilders); } if (speedFactor == 0) { ((EnemyBuilderComponent)(ref reference)).RefreshAnimation_Space(hive.pbuilders, ref enemyAnimPool[enemyId]); } } } } } private void QuickAssemble() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) EnemyFormation val = hive.forms[0]; if (val.vacancyCount > 0 && val.unitCount < assembleNum) { int num = val.AddUnit(); if (hive.isLocal && num > 0) { hive.InitiateUnitDeferred(0, num, new Vector3(0f, 0f, 0f), new Quaternion(0f, 0f, 0f, 0f), new Vector3(0f, 0f, 0f), 0); } } } private void LaunchAssault() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_062e: Unknown result type (might be due to invalid IL or missing references) //IL_0634: Invalid comparison between Unknown and I4 //IL_068b: Unknown result type (might be due to invalid IL or missing references) //IL_0690: Unknown result type (might be due to invalid IL or missing references) //IL_0691: Unknown result type (might be due to invalid IL or missing references) //IL_0693: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Invalid comparison between Unknown and I4 //IL_06f0: Unknown result type (might be due to invalid IL or missing references) //IL_06f2: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03e4: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Invalid comparison between Unknown and I4 //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Invalid comparison between Unknown and I4 //IL_0558: Unknown result type (might be due to invalid IL or missing references) //IL_055d: Unknown result type (might be due to invalid IL or missing references) //IL_05eb: Unknown result type (might be due to invalid IL or missing references) //IL_05ed: Unknown result type (might be due to invalid IL or missing references) //IL_05d1: Unknown result type (might be due to invalid IL or missing references) //IL_05d6: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_03bc: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_0526: Unknown result type (might be due to invalid IL or missing references) //IL_052d: Unknown result type (might be due to invalid IL or missing references) //IL_0535: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_053f: Unknown result type (might be due to invalid IL or missing references) if (MP.clientBlocker || hive == null) { return; } ((HatredList)(ref hive.hatredAstros)).Sort(); ref HatredTarget reference = ref hive.hatredAstros.max; bool flag = false; int num = 0; Vector3 val = Vector3.zero; Vector3 val2 = Vector3.zero; for (int i = 0; i < 8; i++) { switch (i) { case 0: reference = ref hive.hatredAstros.max; break; case 1: reference = ref hive.hatredAstros.h1; break; case 2: reference = ref hive.hatredAstros.h2; break; case 3: reference = ref hive.hatredAstros.h3; break; case 4: reference = ref hive.hatredAstros.h4; break; case 5: reference = ref hive.hatredAstros.h5; break; case 6: reference = ref hive.hatredAstros.h6; break; case 7: reference = ref hive.hatredAstros.min; break; } if (((HatredTarget)(ref reference)).isNull) { continue; } int objectId = ((HatredTarget)(ref reference)).objectId; PlanetData val3 = hive.sector.galaxy.PlanetById(objectId); if (val3 == null || (int)val3.type == 5) { continue; } PlanetFactory factory = val3.factory; if (factory == null) { continue; } PowerSystem powerSystem = factory.powerSystem; int consumerCursor = powerSystem.consumerCursor; int nodeCursor = powerSystem.nodeCursor; PowerConsumerComponent[] consumerPool = powerSystem.consumerPool; PowerNodeComponent[] nodePool = powerSystem.nodePool; EntityData[] entityPool = factory.entityPool; TurretComponent[] buffer = factory.defenseSystem.turrets.buffer; double num2 = 0.0; Vector3 val4 = Vector3.zero; if (hive._assaultPosByQuadrant == null) { hive._assaultPosByQuadrant = (Vector3[])(object)new Vector3[8]; } else { for (int j = 0; j < 8; j++) { hive._assaultPosByQuadrant[j] = Vector3.zero; } } bool flag2 = false; for (int k = 1; k < consumerCursor; k++) { ref PowerConsumerComponent reference2 = ref consumerPool[k]; if (reference2.id != k) { continue; } double num3 = 0.01; int networkId = reference2.networkId; PowerNetwork val5 = powerSystem.netPool[networkId]; ref Vector3 plugPos = ref reference2.plugPos; if (val5 != null) { long num4 = val5.energyServed / 4 + val5.energyCapacity / 80 + (long)((double)reference2.requiredEnergy * val5.consumerRatio); num3 += Math.Sqrt((double)num4 / 500000.0); int turretId = entityPool[reference2.entityId].turretId; if (turretId > 0) { ref TurretComponent reference3 = ref buffer[turretId]; if ((int)reference3.type == 5) { num3 *= 10.0; } else if ((int)reference3.type == 4) { num3 *= 100.0; } } int num5 = ((plugPos.x >= 0f) ? 1 : 0) + ((plugPos.y >= 0f) ? 2 : 0) + ((plugPos.z >= 0f) ? 4 : 0); ref Vector3 reference4 = ref hive._assaultPosByQuadrant[num5]; reference4 += plugPos * (float)num3; } if (num3 > num2) { num2 = num3; val4 = plugPos; flag2 = true; } } for (int l = 1; l < nodeCursor; l++) { ref PowerNodeComponent reference5 = ref nodePool[l]; if (reference5.id == l) { double num6 = 0.01; int networkId2 = reference5.networkId; PowerNetwork val6 = powerSystem.netPool[networkId2]; ref Vector3 powerPoint = ref reference5.powerPoint; if (val6 != null) { int powerGenId = entityPool[reference5.entityId].powerGenId; long num7 = ((powerGenId > 0) ? powerSystem.genPool[powerGenId].generateCurrentTick : 0); long num8 = (val6.energyServed / 4 + val6.energyCapacity / 80 + reference5.idleEnergyPerTick / 2 + num7 / 20) / 2; num6 += Math.Sqrt((double)num8 / 500000.0); int num9 = ((powerPoint.x >= 0f) ? 1 : 0) + ((powerPoint.y >= 0f) ? 2 : 0) + ((powerPoint.z >= 0f) ? 4 : 0); ref Vector3 reference6 = ref hive._assaultPosByQuadrant[num9]; reference6 += reference5.powerPoint * (float)num6; } if (num6 > num2) { num2 = num6; val4 = reference5.powerPoint; flag2 = true; } } } if (!flag2) { continue; } flag = true; num = ((HatredTarget)(ref reference)).objectId; float num10 = 0f; for (int m = 0; m < 8; m++) { float magnitude = ((Vector3)(ref hive._assaultPosByQuadrant[m])).magnitude; if (magnitude > num10) { num10 = magnitude; val = hive._assaultPosByQuadrant[m]; } } val2 = val4; break; } if (!flag && hive.gameData.localPlanet != null && (int)hive.gameData.localPlanet.type != 5 && hive.gameData.localPlanet.star == hive.starData) { flag = true; num = hive.gameData.localPlanet.astroId; val2 = (val = hive.sector.skillSystem.playerSkillTargetL); } if (flag) { int num11 = 5; int num12 = 100 / (num11 * 4 / 5); if (hive.evolve.waves < 3) { num12 = 1; } int num13 = 100 - num12 * num11; hive.evolve.threat = 0; hive.LaunchLancerAssault((EAggressiveLevel)20, val, val2, num, assaultNum, num12); hive.evolve.threat = 0; hive.evolve.threatshr = 0; hive.evolve.maxThreat = EvolveData.GetSpaceThreatMaxByWaves(hive.evolve.waves, (EAggressiveLevel)20); EnemyDFHiveSystem obj = hive; obj.lancerAssaultCountBase += hive.GetLancerAssaultCountIncrement((EAggressiveLevel)20); } } private void KillHiveStrcuture(int pbuilderInstId) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (!MP.clientBlocker) { CombatStat val = default(CombatStat); val.objectId = pbuilderInstId; GameMain.spaceSector.KillEnemyFinal(pbuilderInstId, ref val); } } public static bool CheckIfAllHiveReachedState(EAssaultHiveState state) { int count = AssaultController.assaultHives.Count; for (int num = count - 1; num >= 0; num--) { if (AssaultController.assaultHives[num] != null) { EAssaultHiveState eAssaultHiveState = AssaultController.assaultHives[num].state; if (eAssaultHiveState < state) { return false; } } } return true; } public void Import(BinaryReader r) { listIndex = r.ReadInt32(); starIndex = r.ReadInt32(); oriAstroId = r.ReadInt32(); orbitIndex = r.ReadInt32(); byAstroIndex = r.ReadInt32(); strength = r.ReadInt32(); state = (EAssaultHiveState)r.ReadInt32(); time = r.ReadInt32(); timeTillAssault = r.ReadInt32(); timeTotalInit = r.ReadInt32(); timeDelayedByRelic = r.ReadInt32(); level = r.ReadInt32(); oriLevel = r.ReadInt32(); assaultNumTotal = r.ReadInt32(); inhibitPoints = r.ReadInt32(); inhibitPointsLimit = r.ReadInt32(); inhibitPointsTotalInit = r.ReadInt32(); canFullyStopped = r.ReadBoolean(); isSuper = r.ReadBoolean(); enemyKilled = r.ReadInt32(); isCreated = r.ReadBoolean(); hive = GameMain.data.spaceSector.GetHiveByAstroId(oriAstroId); } public void Export(BinaryWriter w) { w.Write(listIndex); w.Write(starIndex); w.Write(oriAstroId); w.Write(orbitIndex); w.Write(byAstroIndex); w.Write(strength); w.Write((int)state); w.Write(time); w.Write(timeTillAssault); w.Write(timeTotalInit); w.Write(timeDelayedByRelic); w.Write(level); w.Write(oriLevel); w.Write(assaultNumTotal); w.Write(inhibitPoints); w.Write(inhibitPointsLimit); w.Write(inhibitPointsTotalInit); w.Write(canFullyStopped); w.Write(isSuper); w.Write(enemyKilled); w.Write(isCreated); } public void IntoOtherSave() { state = EAssaultHiveState.Remove; } } public static class AssaultHiveCreator { public static void SetStrength(this AssaultHive _this, int strength) { _this.strength = strength; } } public enum EAssaultHiveState { Idle = 0, Expand = 1, Assemble = 2, Assault = 3, End = 4, Remove = 99 } public class BattleBGMController { public static int musicState = 0; public static int musicCnt = 0; public static bool isOverriding = false; public static int currentGroup = -1; public static int lastMusic = -1; public static int currentMusic = -1; public static int nextMusic = -1; public static float fadeOutTime = 0f; public static float fadeInTime = 0f; public static string[] index2NameMap = new string[25] { "pre_1", "loop_1", "fin_1", "pre_2", "loop_2", "pre_3", "loop_3", "fin_3", "pre_4", "loop_4", "fin_4", "pre_5", "loop_5", "fin_5", "pre_6", "loop_6", "fin_6", "Track7", "Track9", "Track10", "Track39", "TrackA1", "TrackE1", "TrackU1", "TrackU2" }; public static Dictionary name2IndexMap = new Dictionary(); public static List finMusics = new List { 2, 7, 10, 13, 16 }; public static AssetBundle bgmAB; public static List battleMusics = new List(); public static List musicBPM = new List { 100f, 176f, 180f, 180f, 180f, 200f, 200f }; public static int beforeBattleBgmBeginNum = 17; public static bool nextPlayFinishMusic = false; public static int takeDamageCountdown = 0; public static float volumeBasic = 0.4f; public static float volumeFactor = 0.4f; public static void InitAudioSources() { if (!Configs.enableBattleBGM) { return; } Transform transform = GameObject.Find("Audios/BGM").transform; GameObject val = GameObject.Find("Audios/BGM/universe-1"); bgmAB = AssetBundle.LoadFromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("DSP_Battle.battlebgm")); if ((Object)(object)bgmAB == (Object)null) { Configs.enableBattleBGM = false; return; } musicCnt = index2NameMap.Length; for (int i = 0; i < index2NameMap.Length; i++) { GameObject val2 = Object.Instantiate(val, transform); ((Object)val2).name = index2NameMap[i]; AudioSource component = val2.GetComponent(); component.clip = bgmAB.LoadAsset(index2NameMap[i]); name2IndexMap.Add(index2NameMap[i], i); if (index2NameMap[i] == "fin_1") { name2IndexMap.Add("fin_2", i); } battleMusics.Add(component); } } public static void InitWhenLoad() { if (Configs.enableBattleBGM) { if (currentMusic >= 0 && currentMusic < musicCnt) { battleMusics[currentMusic].Stop(); } if (lastMusic >= 0 && lastMusic < musicCnt) { battleMusics[lastMusic].Stop(); } currentGroup = -1; lastMusic = -1; currentMusic = -1; nextMusic = -1; fadeOutTime = 0f; fadeInTime = 0f; isOverriding = false; nextPlayFinishMusic = false; takeDamageCountdown = 0; } } public static void BGMLogicUpdate() { if (!Configs.enableBattleBGM) { return; } if (Configs.combatState <= 1 || (Configs.combatState != 3 && nextPlayFinishMusic)) { if (nextPlayFinishMusic) { if (currentGroup < 0 || currentMusic < 0) { nextPlayFinishMusic = false; lastMusic = -1; currentMusic = -1; nextMusic = -1; fadeOutTime = 0f; fadeInTime = 0f; isOverriding = false; BGMController.Playback(0, 1f, 1f, (EPlaybackOrigin)0, 0f); } else if (atBarEnd(battleMusics[currentMusic].time, musicBPM[currentGroup]) && name2IndexMap.ContainsKey("fin_" + currentGroup)) { nextPlayFinishMusic = false; nextMusic = name2IndexMap["fin_" + currentGroup]; } } else if (currentMusic >= 0 && battleMusics[currentMusic].time >= battleMusics[currentMusic].clip.length - 0.05f) { lastMusic = -1; currentMusic = -1; nextMusic = -1; fadeOutTime = 0f; fadeInTime = 0f; isOverriding = false; currentGroup = Utils.RandInt(1, 7); BGMController.Playback(0, 1f, 1f, (EPlaybackOrigin)0, 0f); } } else if (Configs.combatState == 2) { if (!isOverriding) { currentGroup = Utils.RandInt(1, 7); } if (currentMusic < 0) { nextMusic = Utils.RandInt(beforeBattleBgmBeginNum, battleMusics.Count); } else if (battleMusics[currentMusic].time >= battleMusics[currentMusic].clip.length - 0.05f) { nextMusic = Utils.RandInt(beforeBattleBgmBeginNum, battleMusics.Count); if (nextMusic == currentMusic) { nextMusic = ((currentMusic + 1 < musicCnt) ? (currentMusic + 1) : (currentMusic - 1)); } } } else if (Configs.combatState == 3) { if (currentGroup < 0) { Random random = new Random(); currentGroup = random.Next(1, 7); } if (currentMusic >= beforeBattleBgmBeginNum || currentMusic < 0) { nextMusic = name2IndexMap["pre_" + currentGroup]; } else if (finMusics.Contains(currentMusic) && atBarEnd(battleMusics[currentMusic].time, musicBPM[currentGroup])) { nextMusic = name2IndexMap["loop_" + currentGroup]; } else if (index2NameMap[currentMusic][0] == 'p' && battleMusics[currentMusic].time >= battleMusics[currentMusic].clip.length - 0.05f) { nextMusic = name2IndexMap["loop_" + currentGroup]; } } if (currentMusic != nextMusic) { PlayNext(); } if (isOverriding) { if (fadeOutTime > 0f && lastMusic >= 0 && lastMusic < musicCnt) { AudioSource obj = battleMusics[lastMusic]; obj.volume -= 0.01666667f / fadeOutTime; if (battleMusics[lastMusic].volume <= 0f) { fadeOutTime = 0f; battleMusics[lastMusic].volume = 0f; battleMusics[lastMusic].loop = false; } } else if (fadeOutTime <= 0f && lastMusic >= 0 && lastMusic < musicCnt) { battleMusics[lastMusic].volume = 0f; battleMusics[lastMusic].loop = false; battleMusics[lastMusic].Stop(); } if (fadeInTime > 0f && currentMusic >= 0 && currentMusic < musicCnt) { AudioSource obj2 = battleMusics[currentMusic]; obj2.volume += 0.01666667f / fadeInTime; if (battleMusics[currentMusic].volume >= VFAudio.audioVolume * VFAudio.musicVolume * volumeFactor) { fadeOutTime = 0f; battleMusics[currentMusic].volume = VFAudio.audioVolume * VFAudio.musicVolume * volumeFactor; } } else if (fadeInTime <= 0f && currentMusic >= 0 && currentMusic < musicCnt) { AudioSource val = battleMusics[currentMusic]; val.volume = VFAudio.audioVolume * VFAudio.musicVolume * volumeFactor; } } if (takeDamageCountdown > 0) { Interlocked.Add(ref takeDamageCountdown, -1); } } [HarmonyPostfix] [HarmonyPatch(typeof(ThreadManager), "ProcessFrame")] public static void GameData_GameTick(long frameCounter) { if (frameCounter % 5 == 0L && isOverriding) { MuteGameOriBgm(); } } public static void PlayerTakeDamage() { Interlocked.Exchange(ref takeDamageCountdown, 2700); } [HarmonyPostfix] [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyPatch(/*Could not decode attribute arguments.*/)] public static void VerifyPlayerPlanetWillTakeDamage(int __result) { if (GameMain.data.localPlanet != null && __result == GameMain.data.localPlanet.id) { Interlocked.Exchange(ref takeDamageCountdown, 2700); } } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerAction_Combat), "ShootTarget")] public static void PlayerDoDamage() { Interlocked.Add(ref takeDamageCountdown, 240); if (takeDamageCountdown > 1800) { Interlocked.Exchange(ref takeDamageCountdown, 2700); } } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerAction_Combat), "Shoot_Missile")] public static void ShootMissileCompensation() { if (takeDamageCountdown < 1800) { Interlocked.Add(ref takeDamageCountdown, -30); } } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerAction_Combat), "Shoot_Cannon_Local")] public static void ShootCannonLocalCompensation() { if (takeDamageCountdown < 1800) { Interlocked.Add(ref takeDamageCountdown, -30); } } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerAction_Combat), "Shoot_Cannon_Space")] public static void ShootCannonSpaceCompensation() { if (takeDamageCountdown < 1800) { Interlocked.Add(ref takeDamageCountdown, -30); } } [HarmonyPostfix] [HarmonyPatch(typeof(BGMController), "Playback")] public static void PlaybackPostPatch(int bgmIndex, float fadeOutTime, float fadeInTime, EPlaybackOrigin origin = 0, float offset = 0f) { if (Configs.enableBattleBGM && isOverriding) { if (!BGMController.HasBGM(bgmIndex)) { bgmIndex = 0; } if ((Object)(object)BGMController.instance != (Object)null && BGMController.instance.musics != null && bgmIndex >= 0 && bgmIndex < BGMController.instance.musics.Length && (Object)(object)BGMController.instance.musics[bgmIndex] != (Object)null) { BGMController.instance.musics[bgmIndex].Stop(); } } } [HarmonyPostfix] [HarmonyPatch(typeof(BGMController), "UpdateLogic")] public static void BGMPassFilterPatch() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 if (Configs.enableBattleBGM && isOverriding && (int)UIGame.viewMode == 4) { VFListener.SetPassFilter(100f); } } public static void PlayNext(float fade = 0f) { if (nextMusic >= 0 && nextMusic < musicCnt) { if (lastMusic < 0 && (Object)(object)BGMController.instance != (Object)null && BGMController.instance.musics != null && BGMController.HasBGM(BGMController.instance.playbackIndex)) { BGMController.instance.fadeOutTimes[BGMController.instance.playbackIndex] = 1f; BGMController.instance.volsTar[BGMController.instance.playbackIndex] = 0f; } fadeOutTime = fade; fadeInTime = fade; isOverriding = true; lastMusic = currentMusic; currentMusic = nextMusic; AudioSource val = battleMusics[nextMusic]; val.time = ((currentMusic >= beforeBattleBgmBeginNum) ? 0.3f : 0f); val.Play(); val.loop = index2NameMap[currentMusic][0] == 'l'; val.volume = 0f; } } public static void SetWaveFinished() { if (currentMusic >= 0 && currentMusic < musicCnt) { battleMusics[currentMusic].loop = false; } nextPlayFinishMusic = true; } public static void MuteGameOriBgm() { if (lastMusic < 0 && (Object)(object)BGMController.instance != (Object)null && BGMController.instance.musics != null && BGMController.HasBGM(BGMController.instance.playbackIndex)) { BGMController.instance.fadeOutTimes[BGMController.instance.playbackIndex] = 0f; BGMController.instance.volsTar[BGMController.instance.playbackIndex] = 0f; } } public static bool atBarEnd(float time, float bpm) { float num = 60f / bpm * 4f; float num2 = time / num - (float)(int)(time / num); return num2 <= 0.02f || num2 >= num - 0.03f; } } internal class BattleProtos { public static int pageBias = 0; public static int UpgradeTechBegin = 6601; public const int UnlockFunctionBegin = 771; private static void RegisterString(string key, string enTrans, string cnTrans) { LocalizationModule.RegisterTranslation(key, enTrans, cnTrans, enTrans); } public static void AddProtos() { AddNormalProtos(); AddEnemyProtoAndModels(); AddSingalProtos(); } public static void AddNormalProtos() { //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_03bc: Unknown result type (might be due to invalid IL or missing references) //IL_04ad: Unknown result type (might be due to invalid IL or missing references) //IL_059e: Unknown result type (might be due to invalid IL or missing references) //IL_068f: Unknown result type (might be due to invalid IL or missing references) //IL_0780: Unknown result type (might be due to invalid IL or missing references) //IL_0871: Unknown result type (might be due to invalid IL or missing references) //IL_0962: Unknown result type (might be due to invalid IL or missing references) int num = (MoreMegaStructure.GenesisCompatibility ? (-200) : 0); int num2 = (MoreMegaStructure.GenesisCompatibility ? (-8) : 0); int num3 = 0; TechProto val = ProtoRegistry.RegisterTech(1999, "玻色子操控", "玻色子操控描述", "玻色子操控结论", "Assets/DSPBattle/bosontech", new int[0], new int[1] { 5201 }, new int[1] { 400 }, 72000L, new int[5] { 573 + num, 567 + num, 568 + num, 569 + num, 566 + num }, new Vector2((float)(65 + num2), -7f)); val.PreTechsImplicit = new int[1] { 1823 }; val.IsHiddenTech = true; val.PreItem = new int[1] { 5201 }; TechProto val2 = ProtoRegistry.RegisterTech(1998, "提供算力名称", "提供算力描述", "提供算力结论", "Assets/DSPBattle/rank10", new int[0], new int[1] { 6006 }, new int[1] { 2 }, 299792458000L, new int[0], new Vector2((float)(65 + num2), -11f)); val2.PreTechsImplicit = new int[0]; val2.IsHiddenTech = true; val2.PreItem = new int[1] { 9513 }; TechProto val3 = ProtoRegistry.RegisterTech(1997, "微型恒星能量引导", "微型恒星能量引导描述", "微型恒星能量引导结论", "icons/achievement/115", new int[1] { 1918 }, new int[1] { 5201 }, new int[1] { 400 }, 36000L, new int[0], new Vector2((float)(69 + num2), -3f)); val3.IsHiddenTech = true; val3.PreItem = new int[1] { 5201 }; ItemProto val4 = ProtoRegistry.RegisterItem(9513, "星河卫士奖章", "星河卫士奖章描述", "Assets/DSPBattle/rank10", 9998, 1, (EItemType)7, ProtoRegistry.GetDefaultIconDesc(Color.white, new Color(0.7f, 0.4f, 0.1f))); val4.UnlockKey = -2; ProtoRegistry.RegisterRecipe(382, (ERecipeType)1, 60, new int[1] { 1104 }, new int[1] { 2 }, new int[1] { 9513 }, new int[1] { 1 }, "星河卫视奖章描述", 0, 9998, "Assets/DSPBattle/rank10"); TechProto val5 = ProtoRegistry.RegisterTech(UpgradeTechBegin, "元驱动挂载点位扩展1", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr1", new int[0], new int[1] { 5201 }, new int[1] { 900 }, 72000L, new int[0], new Vector2(9f, -107f)); val5.UnlockFunctions = new int[1] { 771 }; val5.UnlockValues = new double[1] { 1.0 }; val5.Level = 1; val5.MaxLevel = 1; val5.LevelCoef1 = 0; val5.LevelCoef2 = 0; val5.PreTechsImplicit = new int[1] { 1303 }; val5.IsHiddenTech = true; val5.PreItem = new int[2] { 5201, 9513 }; TechProto val6 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 1, "元驱动挂载点位扩展2", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr2", new int[1] { UpgradeTechBegin }, new int[1] { 5201 }, new int[1] { 1800 }, 144000L, new int[0], new Vector2(13f, -107f)); val6.UnlockFunctions = new int[1] { 771 }; val6.UnlockValues = new double[1] { 1.0 }; val6.Level = 2; val6.MaxLevel = 2; val6.LevelCoef1 = 0; val6.LevelCoef2 = 0; val6.PreTechsImplicit = new int[1] { 1303 }; val6.IsHiddenTech = true; val6.PreItem = new int[2] { 5201, 9513 }; TechProto val7 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 2, "元驱动挂载点位扩展3", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr3", new int[1] { UpgradeTechBegin + 1 }, new int[1] { 5201 }, new int[1] { 3600 }, 324000L, new int[0], new Vector2(17f, -107f)); val7.UnlockFunctions = new int[1] { 771 }; val7.UnlockValues = new double[1] { 1.0 }; val7.Level = 3; val7.MaxLevel = 3; val7.LevelCoef1 = 0; val7.LevelCoef2 = 0; val7.PreTechsImplicit = new int[1] { 1303 }; val7.IsHiddenTech = true; val7.PreItem = new int[2] { 5201, 9513 }; TechProto val8 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 3, "元驱动挂载点位扩展4", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr4", new int[1] { UpgradeTechBegin + 2 }, new int[1] { 5201 }, new int[1] { 3600 }, 576000L, new int[0], new Vector2(21f, -107f)); val8.UnlockFunctions = new int[1] { 771 }; val8.UnlockValues = new double[1] { 1.0 }; val8.Level = 4; val8.MaxLevel = 4; val8.LevelCoef1 = 0; val8.LevelCoef2 = 0; val8.PreTechsImplicit = new int[1] { 1303 }; val8.IsHiddenTech = true; val8.PreItem = new int[2] { 5201, 9513 }; TechProto val9 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 4, "元驱动挂载点位扩展5", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr5", new int[1] { UpgradeTechBegin + 3 }, new int[1] { 5201 }, new int[1] { 3600 }, 900000L, new int[0], new Vector2(25f, -107f)); val9.UnlockFunctions = new int[1] { 771 }; val9.UnlockValues = new double[1] { 1.0 }; val9.Level = 5; val9.MaxLevel = 5; val9.LevelCoef1 = 0; val9.LevelCoef2 = 0; val9.PreTechsImplicit = new int[1] { 1303 }; val9.IsHiddenTech = true; val9.PreItem = new int[2] { 5201, 9513 }; TechProto val10 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 5, "元驱动挂载点位扩展6", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr6", new int[1] { UpgradeTechBegin + 4 }, new int[1] { 5201 }, new int[1] { 3600 }, 1296000L, new int[0], new Vector2(29f, -107f)); val10.UnlockFunctions = new int[1] { 771 }; val10.UnlockValues = new double[1] { 1.0 }; val10.Level = 6; val10.MaxLevel = 6; val10.LevelCoef1 = 0; val10.LevelCoef2 = 0; val10.PreTechsImplicit = new int[1] { 1303 }; val10.IsHiddenTech = true; val10.PreItem = new int[2] { 5201, 9513 }; TechProto val11 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 6, "元驱动挂载点位扩展7", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr7", new int[1] { UpgradeTechBegin + 5 }, new int[1] { 5201 }, new int[1] { 3600 }, 1764000L, new int[0], new Vector2(33f, -107f)); val11.UnlockFunctions = new int[1] { 771 }; val11.UnlockValues = new double[1] { 1.0 }; val11.Level = 7; val11.MaxLevel = 7; val11.LevelCoef1 = 0; val11.LevelCoef2 = 0; val11.PreTechsImplicit = new int[1] { 1303 }; val11.IsHiddenTech = true; val11.PreItem = new int[2] { 5201, 9513 }; TechProto val12 = ProtoRegistry.RegisterTech(UpgradeTechBegin + 7, "元驱动挂载点位扩展8", "元驱动挂载点位扩展描述", "元驱动挂载点位扩展结论", "Assets/DSPBattle/techr8", new int[1] { UpgradeTechBegin + 6 }, new int[1] { 5201 }, new int[1] { 3600 }, 2304000L, new int[0], new Vector2(37f, -107f)); val12.UnlockFunctions = new int[1] { 771 }; val12.UnlockValues = new double[1] { 1.0 }; val12.Level = 8; val12.MaxLevel = 8; val12.LevelCoef1 = 0; val12.LevelCoef2 = 0; val12.PreTechsImplicit = new int[1] { 1303 }; val12.IsHiddenTech = true; val12.PreItem = new int[2] { 5201, 9513 }; } public static void AddEnemyProtoAndModels() { bool flag = false; } public static void PostEditModelProto() { ModelProto val = ((ProtoSet)(object)LDB.models).Select(770); if (val != null) { Debug.Log((object)"\n\n\n MODEL not null\n\n\n"); val.prefabDesc.enemyProtoId = 9128; val.HpMax = 9999999; } } public static void AddTranslate() { RegisterString("轨道防御", "TCFV", "深空来敌"); RegisterString("恒星炮gm2", "Star cannon", "恒星炮"); RegisterString("水滴gm2", "Droplet", "水滴"); RegisterString("即将到来gm", "Coming soon", "即将推出"); RegisterString("恒星要塞", "Star Fortress", "恒星要塞"); RegisterString("恒星要塞描述", "Plan additional defense modules on any mega structure to strengthen the defense capabilities of the star system, and the energy to support the star fortress comes entirely from the stars. This can also save a significant amount of planetary area.", "在任何巨构上规划额外的防御模块来强化星系的防御能力,支持恒星要塞的能量完全来自于恒星。这还能节约大量地表的可建造面积。"); RegisterString("恒星要塞结论", "You have unlocked the star fortress.", "你解锁了武装巨构来构建恒星要塞的能力。"); RegisterString("玻色子操控", "Boson control", "玻色子操控"); RegisterString("玻色子操控描述", "Create powerful materials by manipulating various interacting forces.", "通过操控各种相互作用力来制造强大的材料。"); RegisterString("玻色子操控结论", "You have unlocked the Boson control.", "你解锁了玻色子操控。"); RegisterString("水滴科技描述", "A powerful Droplet controlled by the mecha.", "一个由机甲控制的强大水滴"); RegisterString("水滴科技结论", "You have unlocked the Droplet.", "你解锁了水滴技术。"); RegisterString("UI快捷键提示", "Press Backspace to hide/open this window. Press \"Ctrl\" + \"-\" to advance the attack time by 1 min.", "按下退格键开启或关闭此窗口,按下Ctrl+减号键使敌军进攻时间提前1分钟"); RegisterString("快速开局", "Fast Start", "快速开局"); RegisterString("快速开局提示", "Unlock some techs at the begining, and start with additional items.", "开局立即解锁额外科技,并提供额外物品。"); RegisterString("mod版本信息", "Current version: 3.4.23 Contact me in Discord: ckcz123#3576", "当前版本:3.4.23 欢迎加入mod交流群:" + Configs.qq); RegisterString("约gm", "about", "约"); RegisterString("小时gm", "h", "小时"); RegisterString("分gm", "m", "分"); RegisterString("秒gm", "s", "秒"); RegisterString("已歼灭gm", "Eliminated", "已歼灭"); RegisterString("已产生gm", "Total", "已产生"); RegisterString("占比gm", "Percentage", "占比"); RegisterString("游戏提示gm", "Message", "游戏提示"); RegisterString("gmRank0", "Icarus", "伊卡洛斯"); RegisterString("gmRank1", "Explorer I", "探索者 I"); RegisterString("gmRank2", "Explorer II", "探索者 II"); RegisterString("gmRank3", "Explorer III", "探索者 III"); RegisterString("gmRank4", "Pioneer I", "开拓者 I"); RegisterString("gmRank5", "Pioneer II", "开拓者 II"); RegisterString("gmRank6", "Pioneer III", "开拓者 III"); RegisterString("gmRank7", "Conqueror I", "征服者 I"); RegisterString("gmRank8", "Conqueror II", "征服者 II"); RegisterString("gmRank9", "Conqueror III", "征服者 III"); RegisterString("gmRank10", "Galaxy Guardian", "星河卫士"); RegisterString("gmRankNoColor0", "Icarus", "伊卡洛斯"); RegisterString("gmRankNoColor1", "Explorer I", "探索者 I"); RegisterString("gmRankNoColor2", "Explorer II", "探索者 II"); RegisterString("gmRankNoColor3", "Explorer III", "探索者 III"); RegisterString("gmRankNoColor4", "Pioneer I", "开拓者 I"); RegisterString("gmRankNoColor5", "Pioneer II", "开拓者 II"); RegisterString("gmRankNoColor6", "Pioneer III", "开拓者 III"); RegisterString("gmRankNoColor7", "Conqueror I", "征服者 I"); RegisterString("gmRankNoColor8", "Conqueror II", "征服者 II"); RegisterString("gmRankNoColor9", "Conqueror III", "征服者 III"); RegisterString("gmRankNoColor10", "Galaxy Guardian", "星河卫士"); RegisterString("gmRankUnlockText0", "", ""); RegisterString("gmRankUnlockText1", "Enhanced core energy generation", "获得额外的核心发电"); RegisterString("gmRankUnlockText2", "Energy shield gains 25% damage reduction", "能量盾获得25%伤害减免"); RegisterString("gmRankUnlockText3", "Walk speed increases", "步行移动速度增加"); RegisterString("gmRankUnlockText4", "Ore loss per mining operation -20%", "采矿消耗 -20%"); RegisterString("gmRankUnlockText5", "EM effect +20%", "电磁武器效果 +20%"); RegisterString("gmRankUnlockText6", "Droplets can quickly approach distant target", "水滴能够快速接近远距离的目标"); RegisterString("gmRankUnlockText7", "Ore loss per mining operation -20%\n- Calling planetary purge permission", "采矿消耗 -20%\n- 呼叫行星清洗许可"); RegisterString("gmRankUnlockText8", "Star cannon charging speed +50%", "恒星炮充能速度 +50%"); RegisterString("gmRankUnlockText9", "Droplet damage +100%", "水滴伤害 +100%"); RegisterString("gmRankUnlockText10", "Ore loss per mining operation -40%", "采矿消耗 -40%"); RegisterString("gmRankUnlockText10Add", "You are allowed to provide computing power to the COSMO Technology Ethics Committee in exchange for merit points", "你被允许向COSMO技术伦理委员会提供算力以换取功勋点数"); RegisterString("gmRankReward1", "Core power generation +1 MW", "核心发电 +1MW"); RegisterString("gmRankReward2", "Energy shield damage reduction +25%", "能量盾伤害减免 +25%"); RegisterString("gmRankReward3", "Walk speed +4 m/s", "步行移动速度 +4 m/s"); RegisterString("gmRankReward4", "Ore loss per mining operation -20%", "采矿消耗 -20%"); RegisterString("gmRankReward5", "EM effect +20%", "电磁武器效果 +20%"); RegisterString("gmRankReward6", "Droplets can quickly approach distant target", "水滴能够快速接近远距离的目标"); RegisterString("gmRankReward7", "Ore loss per mining operation -40%", "采矿消耗 -40%"); RegisterString("gmRankReward8", "Star cannon charging speed +50%", "恒星炮充能速度 +50%"); RegisterString("gmRankReward9", "Droplet damage +100%", "水滴伤害 +100%"); RegisterString("gmRankReward10", "Ore loss per mining operation -80%", "采矿消耗 -80%"); RegisterString("gmRankReward7Add", "Calling planetary purge permission", "呼叫行星清洗许可"); RegisterString("功勋阶级", "Merit Rank", "功勋阶级"); RegisterString("当前阶级", "Current Rank", "当前等级"); RegisterString("功勋点数", "Merit points", "功勋点数"); RegisterString("已解锁gm", "Unlocked", "已解锁"); RegisterString("下一功勋等级解锁", "Next rank unlocked", "下一功勋等级解锁"); RegisterString("剩余复活币", "Resurrection Coin", "剩余复活币"); RegisterString("真实伤害已启用", "❈ True damage activated", "❈真实伤害已启用"); RegisterString("伤害类型特殊", " (Special)", " (特殊)"); RegisterString("护盾承受伤害", "Shield damage taken", "护盾承受伤害"); RegisterString("护盾造成伤害", "Shield damage dealed", "护盾造成伤害"); RegisterString("护盾伤害减免与规避", "Shield dmg. alleviated / evaded", "护盾减免和规避伤害"); RegisterString("护盾战时回复", "Shield restored", "护盾战时回复"); RegisterString("水滴伤害", "Droplet damage", "水滴伤害"); RegisterString("最小发射能量", "Launch Energy Threshold", "发射能量阈值"); RegisterString("水滴发射耗能", "Launch Consumption", "发射耗能"); RegisterString("水滴工作功率", "Work Consumption", "工作功率"); RegisterString("巨构伤害", "Megastructure damage", "巨构伤害"); RegisterString("恒星要塞导弹伤害", "StarFortress Missile dmg.", "恒星要塞导弹伤害"); RegisterString("恒星要塞光矛伤害", "StarFortress LightSpear dmg.", "恒星要塞光矛伤害"); RegisterString("物质解压器科技描述", "Decoding a method from the alien matrices to build a Matter Decompressor.", "从异星矩阵中解码建造物质解压器的方法。"); RegisterString("科学枢纽科技描述", "Decoding a method from the alien matrices to build a Science Nexus.", "从异星矩阵中解码建造科学枢纽的方法。"); RegisterString("折跃场广播阵列科技描述", "Decoding a method from the alien matrices to build a Warp Field Broadcast Array.", "从异星矩阵中解码建造折跃场广播阵列的方法。"); RegisterString("星际组装厂科技描述", "Decoding a method from the alien matrices to build an Interstellar Assembly.", "从异星矩阵中解码建造星际组装厂的方法。"); RegisterString("晶体重构器科技描述", "Decoding a method from the alien matrices to build a Crystal Reconstructor.", "从异星矩阵中解码建造晶体重构器的方法。"); RegisterString("物质解压器科技结论", "You have successfully decoded the blueprint of Matter decompressor carrier rocket.", "你成功解码了物质解压器运载火箭的制造蓝图。"); RegisterString("科学枢纽科技结论", "You have successfully decoded the blueprint of Science nexus carrier rocket.", "你成功解码了科学枢纽运载火箭的制造蓝图。"); RegisterString("折跃场广播阵列科技结论", "You have successfully decoded the blueprint of Resonant generator carrier rocket.", "你成功解码了谐振发射器运载火箭的制造蓝图。"); RegisterString("星际组装厂科技结论", "You have successfully decoded the blueprint of Interstellar assembly component and its carrier rocket.", "你成功解码了星际组装厂组件和运载火箭的制造蓝图。"); RegisterString("晶体重构器科技结论", "You have successfully decoded the blueprint of Crystal reconstructor carrier rocket.", "你成功解码了晶体重构器运载火箭的制造蓝图。"); RegisterString("多功能集成组件描述gm2", "The high level of integration makes it possible to quickly assemble a variety of production building and logistics components, while occupying very little space. Can only be produced in megastructure Interstellar assembly.", "超高集成度使其可以迅速地组装成多种生产建筑和物流组件,却仅占用极小的空间。仅能在巨构星际组装厂中制作。"); RegisterString("被深空来敌mod禁止", "Banned by mod They Come From Void", "被深空来敌mod禁止"); RegisterString("发现异星圣物", "Meta-drive Interpretation Complete", "元驱动解译完毕"); RegisterString("解译异星圣物提示", "Select one decoding track from the following three to finish the interpret procedure and enable the meta driver.\nYou can use dark fog matrix to seek new decoding track with different effects.", "从以下三个亚稳态解码轨中选取一个,并完成解译的最后阶段,从而启用该元驱动。\n可以使用黑雾矩阵重随解码轨来发现新的可用效果。"); RegisterString("重新随机", "Roll", "重新随机"); RegisterString("重新随机可以长", "Re-roll", "重新随机"); RegisterString("免费", "free", "免费"); RegisterString("移除遗物", "Remove", "移除"); RegisterString("放弃解译", " Abort This +", "放弃解译 +"); RegisterString("放弃解译居中", "Abort Interpret", "放弃解译"); RegisterString("删除遗物名称", "Remove Meta Driver", "移除元驱动"); RegisterString("删除遗物描述", "Randomly remove a [common] meta-drive, and return the slot occupied by the meta-drive. \nIf there is no [common] meta-drive, then randomly remove a [rare] meta-drive.", "随机移除一个已拥有的[普通]稀有度的元驱动,并返还该元驱动所占用的元驱动槽位\n如果没有[普通]元驱动,则随机移除一个已拥有的[稀有]元驱动"); RegisterString("删除遗物确认标题", "Confirm Remove Meta Driver", "确认移除元驱动"); RegisterString("删除遗物确认警告", "This will remove {0} and return the slot occupied by the meta driver!", "这将移除元驱动 {0},并返还该元驱动所占用的槽位!"); RegisterString("成功移除!", "Meta driver removed", "成功移除元驱动"); RegisterString("已移除遗物描述", "You've removed meta driver ", "你已移除"); RegisterString("未能移除!", "No mate drive can be removed", "没有可移除的元驱动"); RegisterString("未能移除遗物描述", "No matched meta driver can be removed", "你没有稀有度匹配的元驱动可供移除"); RegisterString("未获取遗物标题", "Unknown mata drive", "未知元驱动"); RegisterString("未获取遗物描述", "This slot can place a decrypted meta driver", "此位置可供已解译的元驱动放置"); RegisterString("水滴伤害增加", "Droplet Bonus Damage", "水滴额外伤害"); RegisterString("当前加成gm", "Current bonus damage", "当前伤害加成"); RegisterString("已充能gm", "Charged", "已充能"); RegisterString("女神之怒充能中", "Wrath of Goddess Charging", "女神之怒充能中"); RegisterString("女神之怒", "† Wrath of Goddess †", "† 女神之怒 †"); RegisterString("圣物稀有度0", "Mensural", "定律级"); RegisterString("圣物稀有度1", "Framed", "框架级"); RegisterString("圣物稀有度2", "Packaged", "封装级"); RegisterString("圣物稀有度3", "Regular", "常规级"); RegisterString("圣物稀有度4", "Axiomatic", "公理级"); RegisterString("诅咒", "Editing Universal Axioms", "编辑宇宙公理"); RegisterString("诅咒描述", "Attempting to touch and edit Cosmological Axioms is extremely dangerous, every time you enable an axiomatic level meta-drive, the disrupted Cosmological Axioms will cause the Dark Fog units to gain 50% extra experience and 5% damage resistence.\nYou can not remove an axiomatic meta driver once you enable it.\n\nNegative effect: ", "尝试触碰并编辑宇宙公理是极其危险的,你每启用一个公理级的元驱动,被扰乱的宇宙公理会使黑雾单位获得的经验+50%,以及5%伤害抵抗。\n公理级元驱动无法被移除。\n\n负面效果:"); RegisterString("诅咒描述独立", "Axiomatic meta drivers have different negative effects. Besides, for each axiomatic meta driver you have, dark fog units gain 50% extra experience, and 5% damage resistence.\nYou can not remove an axiomatic meta driver once you enable it.", "公理级元驱动均具有各不相同的负面效果,且你每拥有一个公理级元驱动,所有黑雾单位获得50%经验获取加成,以及5%伤害抵抗。\n公理级元驱动无法被移除。"); RegisterString("诅咒描述短", "This meta driver can not be removed.\nDark fog units experience +50%, damage resistence +5%. ", "此元驱动无法被移除\n黑雾单位经验获取+50%,伤害抵抗+5%。"); RegisterString("负面效果警告", "Warning! This meta driver has negative effect!", "警告!此元驱动具有负面效果!"); RegisterString("已记载", "Recorded: ", "已记载:"); RegisterString("遗物名称0-0", "Swallower\n- Mensural -", "吞噬者\n- 定律级 -"); RegisterString("遗物名称0-1", "Blue Buff\n- Mensural -", "蓝buff\n- 定律级 -"); RegisterString("遗物名称0-2", "Tear of the Goddess\n- Mensural -", "女神之泪\n- 定律级 -"); RegisterString("遗物名称0-3", "The Eternal Ring\n- Mensural -", "永恒之环\n- 定律级 -"); RegisterString("遗物名称0-4", "Widowmaker\n- Mensural -", "黑百合\n- 定律级 -"); RegisterString("遗物名称0-5", "Thornmail\n- Mensural -", "虚空荆棘\n- 定律级 -"); RegisterString("遗物名称0-6", "Stars Seal\n- Mensural -", "星辰封印\n- 定律级 -"); RegisterString("遗物名称0-7", "Tearing Field\n- Mensural -", "撕裂力场\n- 定律级 -"); RegisterString("遗物名称0-8", "Void Impact\n- Mensural -", "虚空冲击\n- 定律级 -"); RegisterString("遗物名称0-9", "Holy ****?! Spatula!\n- Mensural -", "我超!铲!\n- 定律级 -"); RegisterString("遗物名称0-10", "Energy Siphon\n- Mensural -", "能量虹吸\n- 定律级 -"); RegisterString("遗物名称1-0", "Triumph\n- Framed -", "凯旋\n- 框架级 -"); RegisterString("遗物名称1-1", "Energy Cycle\n- Framed -", "能量循环\n- 框架级 -"); RegisterString("遗物名称1-2", "Power Surge\n- Framed -", "能量涌动\n- 框架级 -"); RegisterString("遗物名称1-3", "Vigilance Space\n- Framed -", "敌对海域\n- 框架级 -"); RegisterString("遗物名称1-4", "3\n- Framed -", "三体\n- 框架级 -"); RegisterString("遗物名称1-5", "Echo II\n- Framed -", "回声 II\n- 框架级 -"); RegisterString("遗物名称1-6", "Energy Burst\n- Framed -", "能量迸发\n- 框架级 -"); RegisterString("遗物名称1-7", "Activated Carbon II\n- Framed -", "活性炭 II\n- 框架级 -"); RegisterString("遗物名称1-8", "Banshee's Veil\n- Framed -", "女妖面纱\n- 框架级 -"); RegisterString("遗物名称1-9", "Knight's Vow\n- Framed -", "骑士之誓\n- 框架级 -"); RegisterString("遗物名称1-10", "True Damage\n- Framed -", "真实伤害\n- 框架级 -"); RegisterString("遗物名称1-11", "Frozen Tomb\n- Framed -", "冰封陵墓\n- 框架级 -"); RegisterString("遗物名称1-12", "Quiet Death\n- Framed -", "衰寂\n- 框架级 -"); RegisterString("遗物名称2-0", "Super Charger\n- Packaged -", "超充能器\n- 封装级 -"); RegisterString("遗物名称2-1", "Honorary Promotion\n- Packaged -", "荣誉晋升\n- 封装级 -"); RegisterString("遗物名称2-2", "Not Lose\n- Packaged -", "极限一换一\n- 封装级 -"); RegisterString("遗物名称2-3", "Echo I\n- Packaged -", "回声 I\n- 封装级 -"); RegisterString("遗物名称2-4", "Hyyyydrogen!\n- Packaged -", "听说有人缺氢\n- 封装级 -"); RegisterString("遗物名称2-5", "Hyperactivity II\n- Packaged -", "多动症 II\n- 封装级 -"); RegisterString("遗物名称2-6", "Swift Seeker\n- Packaged -", "高效索敌\n- 封装级 -"); RegisterString("遗物名称2-7", "Foe\n- Packaged -", "仇敌\n- 封装级 -"); RegisterString("遗物名称2-8", "Diraac Invrsooon\n- Packaged -", "狄拉克辶辶变\n- 封装级 -"); RegisterString("遗物名称2-9", "Light Saver II\n- Packaged -", "聚能环 II\n- 封装级 -"); RegisterString("遗物名称2-10", "Matrix Charging\n- Packaged -", "矩阵充能\n- 封装级 -"); RegisterString("遗物名称2-11", "By-product Refining\n- Packaged -", "副产物提炼\n- 封装级 -"); RegisterString("遗物名称2-12", "Last Breath\n- Packaged -", "强攻\n- 封装级 -"); RegisterString("遗物名称2-13", "Infinity Edge\n- Packaged -", "无尽之刃\n- 封装级 -"); RegisterString("遗物名称2-14", "Kleptomancy\n- Packaged -", "行窃预兆\n- 封装级 -"); RegisterString("遗物名称2-15", "Void Burst\n- Packaged -", "虚空爆发\n- 封装级 -"); RegisterString("遗物名称2-16", "Hardened Shield\n- Packaged -", "刚毅护盾\n- 封装级 -"); RegisterString("遗物名称2-17", "Aegis of the Immortal\n- Packaged -", "不朽之守护\n- 封装级 -"); RegisterString("遗物名称3-0", "Inferior Processing\n- Regular -", "劣质加工\n- 常规级 -"); RegisterString("遗物名称3-1", "Spelltheif's Edge\n- Regular -", "窃法之刃\n- 常规级 -"); RegisterString("遗物名称3-2", "Ark Reactor\n- Regular -", "方舟反应堆\n- 常规级 -"); RegisterString("遗物名称3-3", "Shepherd of Souls\n- Regular -", "掘墓人\n- 常规级 -"); RegisterString("遗物名称3-4", "Ctrl 6\n- Regular -", "装\n- 常规级 -"); RegisterString("遗物名称3-5", "Resurrection Coin\n- Regular -", "复活币\n- 常规级 -"); RegisterString("遗物名称3-6", "Upload\n- Regular -", "上传\n- 常规级 -"); RegisterString("遗物名称3-7", "Void Refraction\n- Regular -", "虚空折射\n- 常规级 -"); RegisterString("遗物名称3-8", "Matrix Rain\n- Regular -", "矩阵雨\n- 常规级 -"); RegisterString("遗物名称3-9", "Tanking\n- Regular -", "开摆\n- 常规级 -"); RegisterString("遗物名称3-10", "Hyperactivity I\n- Regular -", "多动症 I\n- 常规级 -"); RegisterString("遗物名称3-11", "Activated Carbon I\n- Regular -", "活性炭 I\n- 常规级 -"); RegisterString("遗物名称3-12", "Dynamic Giant\n- Regular -", "灵动巨物\n- 常规级 -"); RegisterString("遗物名称3-13", "Light Saver I\n- Regular -", "聚能环 I\n- 常规级 -"); RegisterString("遗物名称3-14", "Lovely motor\n- Regular -", "阳间马达\n- 常规级 -"); RegisterString("遗物名称3-15", "Super Mind\n- Regular -", "超级大脑\n- 常规级 -"); RegisterString("遗物名称3-16", "Void Lens\n- Regular -", "虚空棱镜\n- 常规级 -"); RegisterString("遗物名称3-17", "Level Up!\n- Regular -", "升级咯!\n- 常规级 -"); RegisterString("遗物名称3-18", "Secondary Hardened Shield\n- Regular -", "次级刚毅护盾\n- 常规级 -"); RegisterString("遗物名称4-0", "The Weaver\n- Axiomatic -", "编织者\n- 公理级 -"); RegisterString("遗物名称4-1", "Contract of Misfortune\n- Axiomatic -", "厄运契约\n- 公理级 -"); RegisterString("遗物名称4-2", "Crown of Rule\n- Axiomatic -", "统治之冠\n- 公理级 -"); RegisterString("遗物名称4-3", "Precision Echo\n- Axiomatic -", "精密回响\n- 公理级 -"); RegisterString("遗物名称4-4", "Enlightenment Echo\n- Axiomatic -", "启迪回响\n- 公理级 -"); RegisterString("遗物名称4-5", "Aftershock Echo\n- Axiomatic -", "余震回响\n- 公理级 -"); RegisterString("遗物名称4-6", "Rune Book\n- Axiomatic -", "符文之书\n- 公理级 -"); RegisterString("遗物名称4-7", "Void Echo\n- Axiomatic -", "虚空回响\n- 公理级 -"); RegisterString("遗物名称带颜色0-0", "Swallower [Mensural]", "吞噬者 [定律级]"); RegisterString("遗物名称带颜色0-1", "Blue Buff [Mensural]", "蓝buff [定律级]"); RegisterString("遗物名称带颜色0-2", "Tear of the Goddess [Mensural] ", "女神之泪 [定律级]"); RegisterString("遗物名称带颜色0-3", "The Eternal Ring [Mensural]", "永恒之环 [定律级]"); RegisterString("遗物名称带颜色0-4", "Widowmaker [Mensural]", "黑百合 [定律级]"); RegisterString("遗物名称带颜色0-5", "Thornmail [Mensural]", "虚空荆棘 [定律级]"); RegisterString("遗物名称带颜色0-6", "Stars Seal [Mensural]", "星辰封印 [定律级]"); RegisterString("遗物名称带颜色0-7", "Tearing Field [Mensural]", "撕裂力场 [定律级]"); RegisterString("遗物名称带颜色0-8", "Void Impact [Mensural]", "虚空冲击 [定律级]"); RegisterString("遗物名称带颜色0-9", "Holy ****?! Spatula! [Mensural]", "我超!铲! [定律级]"); RegisterString("遗物名称带颜色0-10", "Energy Siphon [Mensural]", "能量虹吸 [定律级]"); RegisterString("遗物名称带颜色1-0", "Triumph [Framed]", "凯旋 [框架级]"); RegisterString("遗物名称带颜色1-1", "Energy Cycle [Framed]", "能量循环 [框架级]"); RegisterString("遗物名称带颜色1-2", "Power Surge [Framed]", "能量涌动 [框架级]"); RegisterString("遗物名称带颜色1-3", "Vigilance Space [Framed]", "敌对海域 [框架级]"); RegisterString("遗物名称带颜色1-4", "3 [Framed]", "三体 [框架级]"); RegisterString("遗物名称带颜色1-5", "Echo II [Framed]", "回声 II [框架级]"); RegisterString("遗物名称带颜色1-6", "Energy Burst [Framed]", "能量迸发 [框架级]"); RegisterString("遗物名称带颜色1-7", "Activated Carbon II [Framed]", "活性炭 II [框架级]"); RegisterString("遗物名称带颜色1-8", "Banshee's Veil [Framed]", "女妖面纱 [框架级]"); RegisterString("遗物名称带颜色1-9", "Knight's Vow [Framed]", "骑士之誓 [框架级]"); RegisterString("遗物名称带颜色1-10", "True Damage [Framed]", "真实伤害 [框架级]"); RegisterString("遗物名称带颜色1-11", "Frozen Tomb [Framed]", "冰封陵墓 [框架级]"); RegisterString("遗物名称带颜色1-12", "Quiet Death [Framed]", "衰寂 [框架级]"); RegisterString("遗物名称带颜色1-12+", "Hide on Bush [Fakered]", "隐形的翅膀 [定律级?]"); RegisterString("遗物名称带颜色2-0", "Super Charger [Packaged]", "超充能器 [封装级]"); RegisterString("遗物名称带颜色2-1", "Honorary Promotion [Packaged]", "荣誉晋升 [封装级]"); RegisterString("遗物名称带颜色2-2", "Not Lose [Packaged]", "极限一换一 [封装级]"); RegisterString("遗物名称带颜色2-3", "Echo I [Packaged]", "回声 I [封装级]"); RegisterString("遗物名称带颜色2-4", "Hyyyydrogen! [Packaged]", "听说有人缺氢 [封装级]"); RegisterString("遗物名称带颜色2-5", "Hyperactivity II [Packaged]", "多动症 II [封装级]"); RegisterString("遗物名称带颜色2-6", "Swift Seeker [Packaged]", "高效索敌 [封装级]"); RegisterString("遗物名称带颜色2-7", "Foe [Packaged]", "仇敌 [封装级]"); RegisterString("遗物名称带颜色2-8", "Diraac Invrsooon [Packaged]", "狄拉克辶辶变 [封装级]"); RegisterString("遗物名称带颜色2-9", "Light Saver II [Packaged]", "聚能环 II [封装级]"); RegisterString("遗物名称带颜色2-10", "Matrix Charging [Packaged]", "矩阵充能 [封装级]"); RegisterString("遗物名称带颜色2-11", "By-product Refining [Packaged]", "副产物提炼 [封装级]"); RegisterString("遗物名称带颜色2-12", "Last Breath [Packaged]", "强攻 [封装级]"); RegisterString("遗物名称带颜色2-13", "Infinity Edge [Packaged]", "无尽之刃 [封装级]"); RegisterString("遗物名称带颜色2-14", "Kleptomancy [Packaged]", "行窃预兆 [封装级]"); RegisterString("遗物名称带颜色2-15", "Void Burst [Packaged]", "虚空爆发 [封装级]"); RegisterString("遗物名称带颜色2-16", "Hardened Shield [Packaged]", "刚毅护盾 [封装级]"); RegisterString("遗物名称带颜色2-17", "Aegis of the Immortal [Packaged]", "不朽之守护 [封装级]"); RegisterString("遗物名称带颜色3-0", "Inferior processing [Regular]", "劣质加工 [常规级]"); RegisterString("遗物名称带颜色3-1", "Spelltheif's Edge [Regular]", "窃法之刃 [常规级]"); RegisterString("遗物名称带颜色3-2", "Ark Reactor [Regular]", "方舟反应堆 [常规级]"); RegisterString("遗物名称带颜色3-3", "Shepherd of souls [Regular]", "掘墓人 [常规级]"); RegisterString("遗物名称带颜色3-4", "Ctrl 6 [Regular]", "装 [常规级]"); RegisterString("遗物名称带颜色3-5", "Resurrection Coin [Regular]", "复活币 [常规级]"); RegisterString("遗物名称带颜色3-6", "Upload [Regular]", "上传 [常规级]"); RegisterString("遗物名称带颜色3-7", "Void Refraction [Regular]", "虚空折射 [常规级]"); RegisterString("遗物名称带颜色3-8", "Matrix Rain [Regular]", "矩阵雨 [常规级]"); RegisterString("遗物名称带颜色3-9", "Tanking [Regular]", "开摆 [常规级]"); RegisterString("遗物名称带颜色3-10", "Hyperactivity I [Regular]", "多动症 I [常规级]"); RegisterString("遗物名称带颜色3-11", "Activated Carbon I [Regular]", "活性炭 I [常规级]"); RegisterString("遗物名称带颜色3-12", "Dynamic Giant [Regular]", "灵动巨物 [常规级]"); RegisterString("遗物名称带颜色3-13", "Light Saver I [Regular]", "聚能环 I [常规级]"); RegisterString("遗物名称带颜色3-14", "Lovely motor [Regular]", "阳间马达 [常规级]"); RegisterString("遗物名称带颜色3-15", "Super Mind [Regular]", "超级大脑 [常规级]"); RegisterString("遗物名称带颜色3-16", "Void Lens [Regular]", "虚空棱镜 [常规级]"); RegisterString("遗物名称带颜色3-17", "Level Up! [Regular]", "升级咯! [常规级]"); RegisterString("遗物名称带颜色3-18", "Secondary Hardened Shield [Regular]", "次级刚毅护盾 [常规级]"); RegisterString("遗物名称带颜色4-0", "The Weaver [Axiomatic]", "编织者 [公理级]"); RegisterString("遗物名称带颜色4-1", "Contract of Misfortune [Axiomatic]", "厄运契约 [公理级]"); RegisterString("遗物名称带颜色4-2", "Crown of Rule [Axiomatic]", "统治之冠 [公理级]"); RegisterString("遗物名称带颜色4-3", "Fatal Echo [Axiomatic]", "精密回响 [公理级]"); RegisterString("遗物名称带颜色4-4", "Enlightenment Echo [Axiomatic]", "启迪回响 [公理级]"); RegisterString("遗物名称带颜色4-5", "Aftershock Echo [Axiomatic]", "余震回响 [公理级]"); RegisterString("遗物名称带颜色4-6", "Rune Book [Axiomatic]", "符文之书 [公理级]"); RegisterString("遗物名称带颜色4-7", "Void Echo [Axiomatic]", "虚空回响 [公理级]"); RegisterString("遗物描述0-0", "Each time a certain number of dark fog units are killed, a random mega structure will be partially auto-constructed", "每击杀一定数量的黑雾单位,略微推进随机星系的巨构的建造进度"); RegisterString("遗物描述0-1", "When assembling recipes with at least 2 different materials (except when assembling antimatter fuel rods) in assembling machine or Star Assembly, every time a product is produced, one material in the first slot will be returned.", "制造厂和星际组装厂在制造原材料至少2种的配方时(反物质燃料棒的产线除外),每产出1个产物,会返还1个第1位置的原材料"); RegisterString("遗物描述0-2", "When the sorter picks products from smelter, assembling machines, chemical plants, or particle colliders, spray them with proliferator Mk.III for free", "分拣器从熔炉、制造台、化工厂和粒子对撞机取出产物时,为他们免费喷涂三级增产剂"); RegisterString("遗物描述0-3", "When calculating the energy level, the giant structure is regarded as a higher star luminosity", "巨构在计算能量水平时,视作拥有更高的恒星光度修正"); RegisterString("遗物描述0-4", "The ray receiver does not need to consume the lens to achieve the maximum output efficiency, and it will no longer be blocked at night", "射线接受器无需消耗透镜即可达到最大输出效率,且不再因背向恒星影响接收效率"); RegisterString("遗物描述0-5", "Planetary shield and Icarus' Energy Shield gain 10% damage reduction, and they return all reduced or avoided damage to the attacker as additional damage", "行星护盾和伊卡洛斯的能量盾获得10%伤害减免,且它们会将所有被护盾减免或被护盾规避的伤害全额回敬给攻击者作为额外伤害"); RegisterString("遗物描述0-6", "Each time a turret uses an ammo set to reload, do free reloading and prevent the ammo set consumption", "所有防御设施的每次消耗弹药组装填时,进行免费装填而阻止消耗弹药组"); RegisterString("遗物描述0-7", "The star system with a megastructure will deal damage (considered as additional damage) to all activated dark fog space ships in the star system, higher energy the megastucture generates, higher the damage it deals", "拥有巨构的星系在战斗时每秒会对星系中所有已激活的太空黑雾舰队造成伤害(视为额外伤害),伤害取决于巨构的能量水平"); RegisterString("遗物描述0-8", "When enemies are interfered by non-Icarus-throwing jamming capsules, they take additional damage. Jammer tower won't consume bullets after loaded.", "非投掷的干扰胶囊造成电磁干扰时,对所有命中目标造成额外伤害。干扰塔在装弹后不再消耗弹药。"); RegisterString("遗物描述0-9", "It must do something...", "它必须做点什么..."); RegisterString("遗物描述0-9实际", "You have a higher probability of getting rarer meta drivers. If the first judgment fails with any probability from other meta drivers, it can be judged again. And the hidden effects...", "你有更高的可能性获取更稀有的元驱动。任何概率初次判定失败时,可以再判定一次。以及隐藏效果..."); RegisterString("遗物描述0-10", "Every time a droplet destroys an enemy, restores 2MJ power to the Mecha, and all droplets permanently obtain 10 additional damage. ", "水滴每击杀一个敌人,为机甲回复2MJ能量,且所有水滴永久获得+10的额外伤害。"); RegisterString("遗物描述1-0", "Every time you unlock or upgrade a technology, random mega structures will be partially auto-constructed based on the tech's hash point", "每解锁或升级一个科技,依据其Hash点数消耗推进随机巨构的建造进度"); RegisterString("遗物描述1-1", "Turret supernova duration +200", "防御塔的超新星持续时间+200%"); RegisterString("遗物描述1-2", "When the planetary shield is broken, immediately restore full shield and prevent it from recharge for 10 minutes", "行星护盾被打破时,立刻回复全部的护盾,并阻止其继续充能10min"); RegisterString("遗物描述1-3", "For every 1% of mega structure's energy stolen by dark fog, space dark fog units in that star system take 3% additional damage", "巨构能量每被窃取1%,该星系的太空黑雾单位受到3%的额外伤害"); RegisterString("遗物描述1-3+", "For every 1% of mega structure's energy stolen by dark fog, space dark fog units in that star system take 3% additional damage", "巨构能量每被窃取1%,该星系的太空黑雾单位受到5%的额外伤害"); RegisterString("遗物描述1-4", "Unlock Boson control Technology immediately and give 3 droplet, droplets energy consumption -50%", "立刻解锁水滴科技,并获得3个水滴,水滴能量消耗-50%"); RegisterString("遗物描述1-4+", "Unlock Boson control Technology immediately and give 3 droplet, droplets energy consumption -60%", "立刻解锁水滴科技,并获得3个水滴,水滴能量消耗-60%"); RegisterString("遗物描述1-5", "Each time a turret uses an ammo set to reload, there is 35% chance to restore 2 identical ammo sets", "所有防御设施在装填一组弹药时,有35%概率回填两组完全相同的弹药"); RegisterString("遗物描述1-6", "When producing megastructure rockets, each output returns 2 deuteron fuel rods", "生产巨构火箭时,每个产出返还2个氘核燃料棒"); RegisterString("遗物描述1-7", "Solar sail absorption speed increases 300%, ejecting speed increases 100%", "巨构的太阳帆吸附速度提升300%,弹射器弹射太阳帆的速度提升100%"); RegisterString("遗物描述1-8", "When Icarus' Energy shield is broken, depleting the Mech's fuel chamber to instantly restore up to 100% energy shield", "伊卡洛斯的能量盾被打破时,消耗机甲燃烧室储备立刻回复最多100%的能量盾"); RegisterString("遗物描述1-9", "When an ally fleet unit is about to take damage, if Icarus' shield is charged above 50%, Icarus will take the damage instead", "我方舰队中的单位将要承受伤害时,如果伊卡洛斯的能量盾充能高于50%,则由其代为承担"); RegisterString("遗物描述1-9+", "When an ally fleet unit is about to take damage, if Icarus' shield is charged above 50%, Icarus will take the damage instead, and the damage will be reduced by 50%", "我方舰队中的单位将要承受伤害时,如果伊卡洛斯的能量盾充能高于50%,则由其代为承担,且伤害降低50%"); RegisterString("遗物描述1-10", "Ally damage will permanently ignore the armor of the dark fog unit. Won't occupy the meta driver slot", "友方伤害将永久无视黑雾单位的护甲,不占用元驱动槽位"); RegisterString("遗物描述1-11", "Greatly enhanced jamming tower's effect", "大幅强化干扰塔的效果"); RegisterString("遗物描述1-12", "If Icarus is on the planet and hold still for more than 4 min, the void assimilation countdown will stop", "伊卡洛斯在行星上保持静止超过4min后,虚空同化将停止计时"); RegisterString("遗物描述1-12+", "If Icarus is on the planet and hold still for more than 10 second, the void assimilation countdown will stop", "伊卡洛斯在行星上保持静止超过10s后,虚空同化将停止计时"); RegisterString("遗物描述2-0", "Planetary Shields gain 50% additional charge energy", "行星护盾获得50%额外的充能量"); RegisterString("遗物描述2-1", "Each time your merit rank is promoted, random mega structures will be partly auto-constructed", "每次提升功勋阶级,显著推进各巨构的建造进度"); RegisterString("遗物描述2-2", "Get merit points when allied buildings destroyed", "建筑被摧毁时,获得功勋点数"); RegisterString("遗物描述2-3", "Each time a turret uses an ammo set to reload, there is 40% chance to restore an identical ammo set", "所有防御设施在装填时有40%概率回填一组弹药"); RegisterString("遗物描述2-4", "When producing normal fuel rods, each output will returne 5 materials in the second slot", "生产常规燃料棒时,每次产出会回填5个第2位置的原材料(氢、重氢)"); RegisterString("遗物描述2-5", "Every second, if Icarus is on the planet and have moved in the previous second, you have 8% chance to obtain a multi-functional integrated component", "每过一秒,如果伊卡洛斯处于行星上并且在上一秒进行过移动,就有8%的概率获得一个多功能集成组件"); RegisterString("遗物描述2-6", "All your fleets energy consumption -40%", "战斗无人机各项能量消耗-40%"); RegisterString("遗物描述2-7", "Kinetic, energy and explosive damage +10%. Won't occupy the meta driver slot", "动能武器伤害、爆破武器伤害、能量武器伤害+10%,不占用元驱动槽位"); RegisterString("遗物描述2-8", "When decomposing critical photons, hydrogen is no longer produced, but the antimatter production increase 50%", "分解临界光子时,不再产出氢,但产出的反物质增加50%"); RegisterString("遗物描述2-9", "Star cannon's recharging speed +50%", "恒星炮充能速度+50%"); RegisterString("遗物描述2-10", "Turret supernova cooldown and charge time -50%", "防御塔的超新星冷却和蓄能时间-50%"); RegisterString("遗物描述2-11", "Smelter have 30% chance to produce an additional product", "熔炉每次产出,有30%的概率额外产出一个产物"); RegisterString("遗物描述2-12", "You gain +10% chance of critical hit", "你获得10%暴击几率"); RegisterString("遗物描述2-13", "Double any additional damage (except the bonus from technology)", "你对黑雾造成的任何额外伤害翻倍(来自科技的加成除外)"); RegisterString("遗物描述2-14", "Every time you destroy a space dark fog unit, you have chance to directly obtain an antimatter fuel rod or a space warper in the backpack", "每次击毁太空黑雾单位,有概率在背包直接获取1个反物质燃料棒或翘曲器,无视科技解锁进度"); RegisterString("遗物描述2-14+", "Every time you destroy an enemy, you have chance to directly obtain an strange annihilation fuel rod or a space warper in the backpack", "每次击毁敌军单位,根据敌人强度有概率在背包直接获取1个奇异湮灭燃料棒或翘曲器,无视科技解锁进度"); RegisterString("遗物描述2-15", "Explosive damage +10%. Won't occupy the meta driver slot", "爆破武器伤害+40%,不占用元驱动槽位"); RegisterString("遗物描述2-16", "Planetary Shield and Icarus Shield gain 20% damage reduction", "行星护盾和伊卡洛斯的护盾获得20%伤害减免"); RegisterString("遗物描述2-17", "When Icarus is about to be destroyed, restore all health and energy shields instead, then gains invincible for 30 seconds", "伊卡洛斯即将被摧毁时,转而立刻回复全部的生命值和能量盾,并获得30s的伤害免疫"); RegisterString("遗物描述2-17+", "When Icarus is about to be destroyed, restore all health and energy shields instead, then gains invincible and +1500% global damage bonus for 30 seconds", "伊卡洛斯即将被摧毁时,转而立刻回复全部的生命值和能量盾,并获得30s的伤害免疫和1500%全局伤害加成"); RegisterString("遗物描述3-0", "Solar sail life -90%, but its production amount in assembling machine +50%", "太阳帆寿命-90%,但每次产出太阳帆会额外产出1个太阳帆"); RegisterString("遗物描述3-1", "When enemy drops dark fog matrices, there is 30% chance to double them", "地面黑雾单位掉落黑雾矩阵时,有30%几率掉落双倍的黑雾矩阵"); RegisterString("遗物描述3-2", "Icarus will generate additional energy without consuming fuel, which is equivalent to 50% of the base power of the fuel generation reactor", "伊卡洛斯会不消耗燃料地持续获得额外的能量回复,相当于反应堆基础功率的50%"); RegisterString("遗物描述3-3", "Double the sand amount dropped by dark fog units", "黑雾单位掉落的沙土加倍"); RegisterString("遗物描述3-4", "Dark fog gain +100% extra experience", "黑雾获得经验+100%"); RegisterString("遗物描述3-5", "When Icarus is destroyed, give you options to use resurrection coins to redeploy or reassemble for free. Won't occupy the meta driver slot", "伊卡洛斯被毁时,可以选择消耗复活币来无消耗地重新部署或原地重组,不占用元驱动槽位"); RegisterString("遗物描述3-6", "Gain some merit points based on your current rank level. Won't occupy the meta driver slot", "获得基于当前阶级的少量功勋点数,不占用元驱动槽位"); RegisterString("遗物描述3-7", "Energy weapon damage +10%. Won't occupy the meta driver slot", "能量武器伤害+10%,不占用元驱动槽位"); RegisterString("遗物描述3-8", "Based on the unlocked matrix technology, immediately give a large number of normal matrix. Won't occupy the meta driver slot", "基于已解锁的矩阵科技,立刻获得大量普通矩阵(黑雾矩阵和宇宙矩阵除外),不会占用元驱动槽位"); RegisterString("遗物描述3-9", "When a certain number of buildings are destroyed, random mega structure will be slightly auto-constructed", "一定数量的建筑被毁时,微量推进随机星系的巨构的建造进度"); RegisterString("遗物描述3-10", "Every second, if Icaros is on the planet and have moved in the previous second, you have 3% chance to obtain a multi-functional integrated component", "每过一秒,如果伊卡洛斯处于行星上并且在上一秒进行过移动,就有3%的概率获得一个多功能集成组件"); RegisterString("遗物描述3-11", "Solar sial adsorption speed increases 100%", "巨构的太阳帆吸附速度提升100%"); RegisterString("遗物描述3-12", "Planetary shield has a 15% chance to avoid the damage", "行星护盾有15%的概率完全规避伤害"); RegisterString("遗物描述3-13", "Star cannon's recharging speed +25%", "恒星炮充能速度提高25%"); RegisterString("遗物描述3-14", "When producing electric motors or electromagnetic turbines , every time a product is produced, one magnetic coil will be returned", "生产电动机、电磁涡轮时,每生产一个产物,回填1个磁线圈作为原材料"); RegisterString("遗物描述3-15", "The research speed of Icarus mecha +400%, and research energy consumption +400%", "伊卡洛斯机甲的研究速度+400%,研究能耗同步增加"); RegisterString("遗物描述3-16", "Star cannon deals 10% additional damage", "恒星炮造成10%额外伤害"); RegisterString("遗物描述3-17", "You get 25% extra merit points", "功勋点数获取+25%"); RegisterString("遗物描述3-17+", "You get 40% extra merit points", "功勋点数获取+40%"); RegisterString("遗物描述3-18", "Planetary Shield gain 10% damage reduction", "行星护盾获得10%伤害减免"); RegisterString("遗物描述4-0", "Unlock Science Nexus immediately. The mega structure in the star system with the max luminosity in the galaxy, will be constantly auto-constructing", "立即解锁科学枢纽,星区中光度最高的恒星系的巨构会不停地自动建造"); RegisterString("遗物描述4-1", "Every time you interpret a meta driver, at least one Mensural decoding track will be available before you reroll. Reroll cost is halved", "每次解译完毕元驱动时,必然刷新一个定律级解码轨,重随消耗减半"); RegisterString("遗物描述4-2", "Each droplet fleet configuration can have 3 droplets", "每个水滴的舰队配置可放置3个水滴"); RegisterString("遗物描述4-3", "Comprehensively improve the extra products effect of proliferators", "全面提升增产剂的增产效果"); RegisterString("遗物描述4-4", "Every an enemy is destoryed, slightly advance the research progress of the current non-darkfog matrix technology for free", "每当击杀敌军单位时,无消耗地略微推进当前非黑雾矩阵科技的研究进度"); RegisterString("遗物描述4-5", "When killing a ground dark fog unit, there is 15% chance of causing a harmful electromagnetic interference from it's place", "地面黑雾单位被击杀时,有15%概率在原地引发一次具有伤害的电磁干扰"); RegisterString("遗物描述4-6", "When pick up this meta driver, permanently record the top three meta drivers that you already have, retaining their effects but no longer occupying the slot", "获取此元驱动时,将左侧栏位最顶端的三个元驱动永久保存在符文之书中,保留他们的效果但使其不再占用栏位"); RegisterString("遗物描述4-7", "Each time you click this meta driver, delay the assimilation progress of the void by 60s. Hold Ctrl and click to advance the progress instead. ", "每次点击此元驱动,立即使虚空的同化进度延缓一分钟。按住Ctrl点击则反而推进一分钟。"); RegisterString("relicTipTitle0-6", "Quick Loading", "快捷装填"); RegisterString("relicTipTitle0-10", "Upper Limit", "上限"); RegisterString("relicTipText0-10", "The upper limit is 200 at the begining. After reaching the upper limit, the mecha will automatically consume a droplet in inventory then increase the upper limit by 200. The upper limit growth is unlimited\nThe type of additional damage is is consistent with the original damage type", "加成上限初始为200,达到上限后,自动消耗背包中的一个水滴并再次提升200加成上限,提升上限的次数不受限制\n额外伤害的类型与原有伤害的类型一致"); RegisterString("relicTipTitle1-2", "Cooldown", "冷却时间"); RegisterString("relicTipText1-2", "This effect has a separate 10min cooldown for each planet", "这个效果对每个行星具有独立的10分钟的冷却时间"); RegisterString("relicTipTitle1-8", "Energy consumption", "能量消耗"); RegisterString("relicTipText1-8", "It takes twice chamber fuel's energy to recharge the shield power. If this effect is triggered repeatedly within 1 minute, the energy consumption multiplier will rapidly increase to a maximum of 20 times", "需要消耗相当于回复护盾能量2倍的燃烧室燃料。如果在1分钟内反复触发此效果,能量消耗倍率会快速增长至最高20倍"); RegisterString("relicTipTitle1-12", "Hold still", "保持静止"); RegisterString("relicTipText1-12", "Once moved, the held still time will reset", "一旦移动,保持静止的计时时间将重置"); RegisterString("relicTipTitle2-12", "Critical hit", "暴击"); RegisterString("relicTipText2-12", "Critical hit will deal 100% additional damage", "暴击会对目标造成100%额外伤害"); RegisterString("relicTipTitle2-16", "Damage reduction", "伤害减免"); RegisterString("relicTipText2-16", "If a single damage exceeds 1% of the current shield amount, it will be reduced by 80% instead", "如果单次伤害超过了当前护盾量的1%,则转而减免80%"); RegisterString("relicTipTitle2-17", "Cooldown", "冷却时间"); RegisterString("relicTipText2-17", "This effect can only be triggered once every 20 minutes", "这个效果每20分钟只能触发一次"); RegisterString("relicTipText4-0", "All other galaxies receive a negative luminosity correction", "所有其他星系获得一个负的恒星光度修正"); RegisterString("relicTipText4-1", "All meta drivers with probability, their probability is halved", "所有具有概率的效果,判定成功几率减半"); RegisterString("relicTipText4-2", "When Icarus is destroyed, downgrade your merit rank level by 1, and clear your merit points of current level", "死亡时,你降低一级功勋阶级并清空当前等级的功勋点数"); RegisterString("relicTipText4-3", "Comprehensively reduce the production speedup effect of proliferators", "全面降低增产剂的加速效果"); RegisterString("relicTipText4-4", "The amount of dark fog matrix drop is halved, and you won't obtain any dark fog matrix when you abort interpreting the decoding track\n(Hash gaining can be enhanced by the research speed technology)", "黑雾矩阵掉落减半,放弃解译元驱动的解码轨时不会获得黑雾矩阵\n(Hash点数获取量受研究速度科技加成)"); RegisterString("relicTipText4-5", "You will get 90% less merit points by killing ground dark fog units", "击杀地面黑雾单位获得的功勋点数-90%"); RegisterString("relicTipText4-6", "The required time to interpret a meta driver +10min\nCannot record meta drivers that can be interacted with by clicking", "解译元驱动的所需时间增加10分钟\n无法记载可点击交互的元驱动"); RegisterString("relicTipText4-7", "You can delay 20 minutes at most for each void invasion. The COSMO Technology Ethics Committee will dissatisfied with your behavior of taking the advantage of void power. The Void invasion wave which you used this meta driver's active effect can only earn you 2 authorization point rewards at most", "每次虚空入侵最多被延缓20分钟。COSMO技术伦理委员会不满你利用虚空力量的行为,使用过此元驱动主动效果的那次虚空入侵在结束时最多只能收到2点授权点奖励"); RegisterString("relicTipTitle0-5", "Additional damage", "额外伤害"); RegisterString("relicTipTitle0-7", "Additional damage", "额外伤害"); RegisterString("relicTipTitle0-8", "Additional damage", "额外伤害"); RegisterString("relicTipTitle1-3", "Additional damage", "额外伤害"); RegisterString("relicTipTitle2-12", "Additional damage", "额外伤害"); RegisterString("relicTipTitle2-13", "Additional damage", "额外伤害"); RegisterString("relicTipTitle3-16", "Additional damage", "额外伤害"); RegisterString("relicTipText0-5", "The type of additional damage is void damage.", "该额外伤害的类型为虚空伤害。"); RegisterString("relicTipText0-6", "After obtaining this meta driver, clicking on any turret will automatically put ONE legal ammo set in hand or found at the front of the backpack.", "获取此元驱动后,点击炮台时会自动放入1个手持或背包中找到的最靠前的合法弹药。"); RegisterString("relicTipText0-7", "The type of additional damage is energy damage. \nIf the megastructure is star cannon, then the additional damage increases 100%.", "该额外伤害的类型为能量伤害。如果巨构为恒星炮,该伤害增加100%"); RegisterString("relicTipText0-8", "Enemies take 20 EM damage. Take 30 if it is suppresing capsules.", "敌人会受到20电磁伤害,压制胶囊则转而造成30电磁伤害。"); RegisterString("relicTipText1-3", "The type of additional damage is consistent with the original damage type.", "额外伤害类型与原有的伤害的类型一致。"); RegisterString("relicTipText2-12", "The type of additional damage is consistent with the original damage type.", "额外伤害类型与原有的伤害的类型一致。"); RegisterString("relicTipText2-13", "Any additional damage described in the meta drivers will be increased.", "任何来自元驱动中所描述的额外伤害都将被增幅。"); RegisterString("relicTipText3-16", "The type of additional damage is consistent with the original damage type.", "额外伤害类型与原有的伤害的类型一致。"); RegisterString("铲子强化后字", "\n\nHas been spatulled in shiny glow", "\n\n镀上了铲亮的光芒"); RegisterString("当前倍率", "Current factor", "当前倍率"); RegisterString("剩余冷却时间gm", "Cooling down", "冷却中"); RegisterString("冷却完毕gm", "Ready", "已就绪"); RegisterString("消退于", "Fading in", "消退于"); RegisterString("显示/隐藏", "Show/Hide", "显示/隐藏"); RegisterString("模块容量", "Module Capacity", "模块容量"); RegisterString("模块容量说明", "Module capacity limits the number of defensive modules that you can build in this Star Fortress. Planning missile modules and light spear modules will consume available module capacity.\nThere are two ways to increase module capacity: \n1. Build bigger mega structure will provide more capacity; \n2. Building platform expansion modules will also increase module capacity, but the megastructure must have at least 600MW before its expansion modules work.", "模块容量决定着你可以在这个恒星要塞建造的防御性模块的数量,规划导弹模块和光矛模块都将消耗可用的模块容量,提升模块容量的方式有两个:\n1.构建更多的巨构框架和壳面将提升模块容量;\n2.在至少建造了一定能量水平的巨构后,建造平台扩展模块也会提升模块容量。"); RegisterString("组件需求", "Component points", "组件点数"); RegisterString("导弹模块", "Missile Mod.", "导弹模块"); RegisterString("导弹模块说明", "The missile module will launch special antimatter missiles to attack enemy ships in combat. The antimatter missiles it uses are independently produced by the module in a stellar environment, requiring no ground supply of ammunition, and benefiting from technology upgrade. \nUse the buttons to increase or decrease the planned number, and then launch the corresponding rocket from the ground to provide component points to gradually build the module. \nHolding 'Ctrl' to make the button 10x times.", " 导弹模块会在战斗中发射反物质导弹攻击敌舰,其使用的反物质导弹是在恒星环境下由模块自主生产的,无需地面供给弹药,且享受来自科技的加成效果。\n 使用按钮来增加或减少建造的数量,然后从地面发射对应的运载火箭提供组件点数来逐步建造模块。\n 按住Ctrl将使按钮变为10倍。"); RegisterString("光矛模块", "Lightspear Mod.", "光矛模块"); RegisterString("光矛模块说明", "The Light Spear module can fire light spears with up to 20000 damage in combat, and can be enhanced by technology upgrades just like Phase-cracking beam. Building more Light Spear modules will accelerate the charging speed of the Light Spear and thus increase the fire rate (non-linear, max 10/s). \nUse the buttons to increase or decrease the planned number, and then launch the corresponding rocket from the ground to provide component points to gradually build the module. \nHolding 'Ctrl' to make the button 10x times.", " 光矛模块会在战斗中发射伤害高达20000的光矛攻击敌舰,且享受与相位裂解光束等同的科技加成。建造更多的光矛模块会加快光矛的充能速度从而增加射速(非线性,最大10/s)。\n 使用按钮来增加或减少建造的数量,然后从地面发射对应的运载火箭提供组件点数来逐步建造模块。\n 按住Ctrl将使按钮变为10倍。"); RegisterString("平台扩展模块", "Expansion Mod.", "扩展模块"); RegisterString("平台扩展模块说明", "Each platform expansion module will provide module capacity to enable you to build large defense platforms on low completion megastructures. But the megastructure must have at least 600MW before the expansion modules can work. \nThe platform expansion modules that are already built cannot be removed.\nUse the buttons to increase or decrease the planned number, and then launch the corresponding rocket from the ground to provide component points to gradually build the module. \nHolding 'Ctrl' to make the button 10x times.", " 每个平台扩展模块会提供(而非消耗)模块容量,以便使你能在低完成度的巨构上构建大型防御平台。\n 已建成的平台扩展模块无法拆除。"); RegisterString("警告扩展模块无效", "Notice: The expansion module cannot take effect until the total energy provide by the megastructure's layers reaches 600MW.", "注意:在巨构壳层与框架能量水平总和达到一个600MW之前,扩展模块无法生效。"); RegisterString("恒星要塞容量不足警告", "The module capacity is insufficient! Please expand the mega structure or plan more expansion modules on star fortress.", "恒星要塞模块容量不足!请扩大巨构或规划更多的扩展模块。"); RegisterString("sf组件1火箭", "Missile module carrier rocket", "导弹模块组件运载火箭"); RegisterString("sf组件1火箭描述", "Use the Vertical Launching Silo to launch this rocket onto the Star Fortress, carring necessary components to build the missile module. This will fill the component points of the missile module on the Star Fortress, but it is not helpful for the construction of any mega structures.", "使用发射井发射此火箭来将构建导弹模块的必须组件发射到恒星要塞上,这会填充恒星要塞的导弹模块的组件点数,但无法推进任何巨构的建造。"); RegisterString("sf组件2火箭", "Light spear module carrier rocket", "光矛模块组件运载火箭"); RegisterString("sf组件2火箭描述", "Use the Vertical Launching Silo to launch this rocket onto the Star Fortress, carring necessary components to build the light spear module. This will fill the component points of the light spear module on the Star Fortress, but it is not helpful for the construction of any mega structures.", "使用发射井发射此火箭来将构建光矛模块的必须组件发射到恒星要塞上,这会填充恒星要塞的光矛模块的组件点数,但无法推进任何巨构的建造。"); RegisterString("sf组件3火箭", "Expansion module carrier rocket", "扩展模块组件运载火箭"); RegisterString("sf组件3火箭描述", "Use the Vertical Launching Silo to launch this rocket onto the Star Fortress, carring necessary components to build the expansion module. This will fill the component points of the expansion module on the Star Fortress, but it is not helpful for the construction of any mega structures.", "使用发射井发射此火箭来将构建扩展模块的必须组件发射到恒星要塞上,这会填充恒星要塞的扩展模块的组件点数,但无法推进任何巨构的建造。"); RegisterString("即将拆除模块标题", "Warning! Destructing modules!", "警告!即将拆除模块"); RegisterString("即将拆除模块警告", "Since the module upper limit will be less than the number of completed modules, the overflowing completed modules will be immediately removed, and the module points will be wasted. Are you sure you want to remove them?", "由于模块上限被调整后将少于已建成的模块数,溢出的已建成的模块将被立刻拆除,模块点数将被浪费。是否确认拆除?"); RegisterString("深空来敌介绍1标题", "They come from void player guide", "深空来敌玩法介绍"); RegisterString("深空来敌介绍1前字", "Nothing here for now. You can check the meta driver infomation below.", "这里暂时没有东西。你可以翻看下面的元驱动介绍。"); RegisterString("深空来敌介绍2前字", "By destroying dark fog units, you can gain experience points to promote your merit rank, and accumulate combat experience to strengthen yourself. Every time you reach the new merit rank, you will not only receive authorization points award issued by the COSMO Technology Ethics Committee, but also permanent bonus effects. Authorization points can be assigned on demand by clicking on the merit rank icon in the upper right corner, some providing bonuses for your production line, while others strengthening your combat capabilities. You can also view the bonus effect of the current rank, the experience requirements of the next level, and the bonus effect of the next level by hovering the mouse over the merit rank icon in the upper right corner. After advancing to the final rank, you will still be able to continuously earn merit points to get authorization points from the COSMO Technology Ethics Committee.\n\nExplorer I: Core power generation +1 MW\nExplorer II: Energy shield damage reduction +25%\nExplorer III: Walk speed +4 m/s\nPioneer I: Ore loss per mining operation -20%\nPioneer II: EM effect +20%\nPioneer III: Droplets can quickly approach distant target\nConqueror I: Ore loss per mining operation -20%\nConqueror II: Star cannon charging speed +50%\nConqueror III: Droplet damage +100%\nGalaxy Guardian: Ore loss per mining operation -40%", "通过击毁黑雾单位,你可以获得经验点数来提升功勋阶级,并积累战斗经验来强化自身。每次提升功勋阶级,你除了会收到由COSMO技术伦理委员会发放的授权点奖励外,还将获得固定的永久加成效果。授权点奖励可以通过点击右上角的功勋阶级图标进行按需分配,有些为你的生产线提供加成,有些则强化你的战斗能力。你也可以通过将鼠标悬停在右上角的功勋阶级图标上来查看当前等级的加成效果,下一等级的经验需求和下一等级的加成效果。在提升到最终等级后,你仍然可以不断获取功勋点数,以不断从COSMO技术伦理委员会处获取授权点奖励。\n\n探索者 I: 核心发电 +1MW\n探索者 II: 能量盾伤害减免 +25%\n探索者 III: 步行移动速度 +4 m/s\n开拓者 I: 采矿消耗 -20%\n开拓者 II: 电磁武器效果 +20%\n开拓者 III: 水滴能够快速接近远距离的目标\n征服者 I: 采矿消耗 -20%\n征服者 II: 恒星炮充能速度 +50%\n征服者 III: 水滴伤害 +100%\n星河卫士: 采矿消耗 -40%"); RegisterString("深空来敌介绍5标题", "Meta-Drive", "元驱动"); RegisterString("深空来敌介绍6标题", "Axiomatic Meta-Drive", "公理级元驱动"); ProtoRegistry.RegisterItem(9514, "水滴伤害增加", "", "Assets/DSPBattle/r0-10", 9999, 100, (EItemType)2); RegisterString("事件链窗口标题", "Meta Driver Event Chain", "元驱动事件链"); RegisterString("执行此决定你", "Choose this decision", "执行此决定"); RegisterString("需要gm", "Prerequisite:", "需要:"); RegisterString("功勋阶级达到", "Merit rank level", "功勋阶级达到"); RegisterString("伊卡洛斯被摧毁次数", "Icarus destroyed time", "伊卡洛斯被摧毁次数"); RegisterString("消灭地面黑雾", "Kill ground dark fog units", "消灭地面黑雾单位"); RegisterString("消灭太空黑雾", "Kill space dark fog units", "消灭太空黑雾单位"); RegisterString("消灭任意黑雾", "Kill dark fog units", "消灭任意黑雾单位"); RegisterString("提供物品", "Provide ", "提供 "); RegisterString("物品产量", "Produce speed of ", "物品产量:"); RegisterString("解锁任意科技", "Unlock/Upgrade any technology", "解锁/升级任意科技"); RegisterString("解锁gm", "Upgrade ", "升级"); RegisterString("至等级", " to level", "至等级"); RegisterString("消灭恒星系全部地面单位", "Kill all ground enemy in {0}{1}\n remaining:{2}", "消灭恒星系{0}的全部地面单位{1}\n 剩余 {2}"); RegisterString("数量未知gm", "unknown, please land on every planet in that star system at least once", "未知,请先降落该恒星系的所有行星至少一次"); RegisterString("数量未知gm2", "unknown, please land on the planet at least once", "未知,请先降落该行星至少一次"); RegisterString("点击以导航", " (click to navigate)", "(点击以导航)"); RegisterString("点击以导航到", "Click to navigate to {0}", "点击以导航到 {0}"); RegisterString("消灭恒星系地面单位", "Kill ground enemy in {0}: {1}/{2} {3}", "消灭恒星系{0}的地面单位 {1}/{2} {3}"); RegisterString("消灭恒星系全部太空单位", "Kill all space enemy in {0}{1}\n remaining:{2}", "消灭恒星系{0}的全部太空单位{1}\n 剩余 {2}"); RegisterString("消灭恒星系太空单位", "Kill space enemy in {0}: {1}/{2} {3}", "消灭恒星系{0}的太空单位 {1}/{2} {3}"); RegisterString("提升恒星系威胁等级", "Raise any DF space hive's threat level in {0} {1}/{2} {3}", "提升恒星系{0}的任意一个太空黑雾巢穴的威胁等级 {1}/{2} {3}"); RegisterString("肃清恒星系", "Kill all enemies in {0}{1}\n remaining:{2}", "清理恒星系{0}的全部黑雾单位{1}\n 剩余 {2}"); RegisterString("提升巨构能量水平", "In {0} star system, build megastructure with energy level {1}/{2} GW {3}", "提升{0}恒星系的巨构能量水平 {1}/{2} GW {3}"); RegisterString("任意gm", "any", "任意"); RegisterString("提升太空黑雾巢穴等级", "Any DF space hive in {0} reaches level {1}/{2} {3}", "使{0}中任意一个太空黑雾巢穴等级达到 {1}/{2} {3}"); RegisterString("消灭太空黑雾巢穴的所有单位", "Kill all enemies of {1} in {0} remaining:{2} {3}", "消灭{0}中{1}的所有单位 剩余{2} {3}"); RegisterString("消灭行星全部黑雾单位", "Kill all DF ground enemies on {0}{1}\n remaining:{2}", "消灭行星{0}上的全部地面黑雾单位{1}\n 剩余 {2}"); RegisterString("消灭行星黑雾单位", "Kill DF ground enemies on {0} {1}/{2} {3}", "消灭行星{0}上的地面黑雾单位 {1}/{2} {3}"); RegisterString("消灭行星全部黑雾基地", "Kill all DF ground bases on {0}{1}\n remaining:{2}", "消灭行星{0}上的全部地面黑雾巢穴{1}\n 剩余 {2}"); RegisterString("到达行星gm", "Arrive on planet {0} {1}", "到达行星{0} {1}"); RegisterString("已到达gm", "accomplished", "已完成"); RegisterString("这将终止序列", "End this event chain", "此事件链将终止"); RegisterString("未知后果", "Unknow consequences", "未知后果"); RegisterString("解译元驱动", "Interpret meta driver", "解译元驱动"); RegisterString("获得功勋点数", "Obtain merit points ", "获得功勋点数 "); RegisterString("失去功勋点数", "Lose merit points ", "失去功勋点数"); RegisterString("提升功勋阶级", "Upgrade merit rank ", "提升功勋阶级 "); RegisterString("降低功勋阶级", "Downgrade merit rank ", "降低功勋阶级 "); RegisterString("推进随机巨构", "Auto-constructed random megastructures construct points", "推进星区中随机巨构的建造进度"); RegisterString("本次圣物解译普通概率", "Regular decode-tracks appearing probability this time ", "本次解译出常规级解码轨的概率 "); RegisterString("本次圣物解译稀有概率", "Packaged decode-tracks appearing probability this time ", "本次解译出封装级解码轨的概率 "); RegisterString("本次圣物解译史诗概率", "Framed decode-tracks appearing probability this time ", "本次解译出框架级解码轨的概率 "); RegisterString("本次圣物解译传说概率", "Mensural decode-tracks appearing probability this time ", "本次解译出定律级解码轨的概率 "); RegisterString("本次圣物解译被诅咒的概率", "Axiomatic decode-tracks appearing probability this time ", "本次解译出公理级解码轨的概率 "); RegisterString("免费随机次数", "Decode-track free re-roll ", "本次解码轨免费随机次数 "); RegisterString("获得物品", "Obtain ", "获得 "); RegisterString("此选项将导致", "Result in:", "将导致:"); if (MoreMegaStructure.GenesisCompatibility) { RegisterString("打开解译事件链", "Open meta driver interpretation event chain ( Ctrl + ~ )", "打开元驱动解译事件链 ( Ctrl + ~ )"); } else { RegisterString("打开解译事件链", "Open meta driver interpretation event chain ( ~ )", "打开元驱动解译事件链 ( ~ )"); } RegisterString("预计剩余解译时间", "Estimated time of finishing", "预计剩余"); RegisterString("decodeType21Title", "Analyzing Log File", "正在分析日志"); RegisterString("decodeType22Title", "Trying to repair", "正在尝试修复"); RegisterString("decodeType23Title", "Repairing and Analyzing Log File", "正在修复并分析日志"); RegisterString("decodeType24Title", "Interpreting Meta Driver", "正在解译元驱动"); RegisterString("decodeType25Title", "Repairing and Interpreting Meta Driver", "正在修复并解译元驱动"); RegisterString("不朽之守护启动", " † Aegis of the Immortal † ", " † 不朽之守护 † "); RegisterString("不朽之守护就绪", "Aegis of the immortal is ready.", "不朽之守护已就绪。"); RegisterString("消耗复活币描述", " Use 1 resurrection coin without spending any meta data.", "这会消耗复活币,但不需要消耗任何元数据。"); RegisterString("使用复活币重新部署描述", "Use resurrection coin and redeploy Icarus to the initial planet?", "确认消耗复活币将伊卡洛斯重新部署至初始行星的降落点?"); RegisterString("使用复活币立刻复活描述", "Use resurrection coin to reassemble Icarus?", "确认消耗复活币将伊卡洛斯立刻原地重组?"); RegisterString("下次重新部署消耗不会增加", "Next redeployment cost won't increase.", "下次重新部署的消耗不会增加"); RegisterString("下次立刻复活消耗不会增加", "Next reassembling cost won't increase.", "下次原地重组的消耗不会增加"); RegisterString("使用元数据或复活币", "Use Metadata or Resurrect Coin", "使用 元数据 或 复活币"); RegisterString("剩余技能点", "- {0} ap not used, click to allocate ( L )", "- {0} 个授权点未使用,点击以进行分配 ( L )"); RegisterString("剩余技能点待确认", "- Ap allocation has not been confirmed ( L )", "- 有授权点分配尚未确认 ( L )"); RegisterString("技能点", "Authorization Point", "授权点"); RegisterString("已分配技能点", "Allocated", "已分配"); RegisterString("技能点描述", "The Authorization point is a reward from the COSMO Technology Ethics Committee for your contribution to maintaining the safety of the sector, and you can use the authorization point to exchange any approved Cosmic mensural modification technology from the COSMO Technology Ethics Committee, which will be immediately broadcast to your sector.\n\nYou are permitted to provide a reasonable number of universe matrices to the COSMO Technology Ethics Committee to reset the allocation of all the athorization points, but you are not allowed to do any reverse engineering of the modification technology. The COSMO Technology Ethics Committee has the right to withdraw all authorization points or activated modifications when detecting your violation.", "授权点是COSMO技术伦理委员会对你维护星区安全功绩的奖励,你可以使用授权点从COSMO技术伦理委员会处换取任何受认可的宇宙定律修正技术,这些修正将被立即广播至此星区。\n\n你被允许向COSMO技术伦理委员会提供合理数量的宇宙矩阵以重置对授权点的分配,但你被禁止对定律修正技术进行任何的逆向工程,COSMO技术伦理委员会有权在检测到你的违规行为后收回全部的授权点或已启用的修正。"); RegisterString("技能点标题", "Authorization Point Allocation", "授权点分配"); RegisterString("按下Shift分配10点说明", "Hold Shift to allocate 10 points at once\nHold Ctrl+Shift to allocate all available points", "按住Shift以一次性分配10点\n按住Ctrl+Shift以分配全部可用授权点"); RegisterString("确认分配", "Confirm", "确认"); RegisterString("撤销分配", "Withdraw", "全部撤销"); RegisterString("技能点窗口取消", "Cancel", "取消"); RegisterString("全部重置", "Reset All", "全部重置"); RegisterString("重置技能点确认标题", "Reset All", "全部重置"); RegisterString("重置技能点确认警告", "Confirm to use {0} universe matrix to reset all ap alloction? This will return all allocated authorization points.", "是否消耗{0}个宇宙矩阵以重置所有的授权点分配?这将返还全部已分配的授权点。"); RegisterString("分配技能点确认标题", "Confirm Allocation", "确认分配"); RegisterString("分配技能点确认警告", "Confirm and apply all the ap allocation?", "确认并应用所有授权点分配?"); RegisterString("skillL0", "Walk Speed", "步行速度"); RegisterString("skillL1", "Replicator Speed", "手动合成速度"); RegisterString("skillL2", "Construction Drone Count", "建设无人机数量"); RegisterString("skillL3", "Construction Drone Flight Speed", "建设无人机速度"); RegisterString("skillL4", "Ore Consumption", "采矿消耗"); RegisterString("skillL5", "Mining Speed", "采矿速度"); RegisterString("skillL6", "Proliferator Extra Product Effect", "增产剂增产效果"); RegisterString("skillL7", "Proliferator Speedup Effect", "增产剂加速效果"); RegisterString("skillL8", "Proliferator Energy Punishment", "增产剂能量惩罚"); RegisterString("skillL9", "GM-α Algorithm Weight", "GM-α算法权重"); RegisterString("skillL10", "Z7-η Algorithm Weight", "Z7-η算法权重"); RegisterString("skillR0", "Global Damage", "全局伤害"); RegisterString("skillR1", "Critical Chance", "暴击几率"); RegisterString("skillR2", "Armor penetration", "护甲穿透"); RegisterString("skillR3", "Icarus Shield Avoid", "伊卡洛斯护盾规避"); RegisterString("skillR4", "Icarus Shield Energy Efficiency", "伊卡洛斯护盾能量效率"); RegisterString("skillR5", "Planet Shield Energy Efficiency", "行星护盾能量效率"); RegisterString("skillR6", "Void Damage", "虚空伤害"); RegisterString("skillR7", "Droplet Energy Punishment", "水滴超远距耗能惩罚"); RegisterString("skillR8", "Energy Fluctuation Camouflage", "能量波动屏蔽"); RegisterString("skillL4Desc", "The mining consumption reduction effect display here already includes the effect provided by the merit rank. This effect will then multiplies with the effect provided by research.", "此处采矿消耗降低的显示数值已包含功勋阶级提供的消耗降低效果。此效果还将与科技提供的采矿消耗降低效果以乘法叠加。"); RegisterString("skillL6Desc", "This buff will be directly increased to the percentage value of Proliferator Mk.III extra product effect. Mk.I and Mk.II only enjoys a partial buff.", "此效果的数值直接增加至Mk.III型增产剂增产效果的百分比数值上,更低阶增产剂只享受部分加成。"); RegisterString("skillL7Desc", "This buff will be directly increased to the percentage value of Proliferator Mk.III speedup effect. Mk.I and Mk.II only enjoys a partial buff.", "此效果的数值直接增加至Mk.III型增产剂加速效果的百分比数值上,更低阶增产剂只享受部分加成。"); RegisterString("skillL8Desc", "This buff will be directly added to the percentage value of Proliferator Mk.III energy consumption effect. Mk.I and Mk.II only enjoys a partial buff.", "此效果的数值直接增加至Mk.III型增产剂能量消耗惩罚的百分比数值上,更低阶增产剂只享受部分加成。"); RegisterString("skillL9Desc", "The COSMO Technology Ethics Committee has expressed doubts about our request for this alternative algorithmic technology, as it hardly makes any visible improvement to the computing power of research facilities. But what they did not know was that using the GM-α algorithm to decode the meta driver could significantly increase the probability of the occurrence of the Mensural decoding track.", "COSMO技术伦理委员会对我们要求这种替代型算法技术的行为表示疑惑,因为它几乎不能对科研设施算力有任何可见的提升。但是他们不知道的是,使用GM-α算法解码元驱动可以显著提升定律级解码轨的出现概率。"); RegisterString("skillL10Desc", "The COSMO Technology Ethics Committee has expressed doubts about our request for this alternative algorithmic technology, as it hardly makes any visible improvement to the computing power of research facilities. But what they did not know was that using the Z7-η algorithm to decode the meta driver could significantly increase the probability of the occurrence of the Mensural decoding track.", "COSMO技术伦理委员会对我们要求这种替代型算法技术的行为表示疑惑,因为它几乎不能对科研设施算力有任何可见的提升。但是他们不知道的是,使用Z7-η算法解码元驱动可以显著提升框架级解码轨的出现概率。"); RegisterString("skillR0Desc", "The global damage bonus is multiplied with other damage bonuses. Takes effect on all allied attack.", "全局伤害加成将与其他的伤害加成以乘法叠加。对所有友方攻击生效。"); RegisterString("skillR1Desc", "Allied attacks has a critical hit chance, dealing 100% additional damage.", "友方攻击有概率暴击,造成100%的额外伤害。"); RegisterString("skillR2Desc", "Allied attacks can ignore a fixed amount of armor, and the value that penetrates beyond the target's armor can also increase damage.", "你的伤害可以无视固定数值的护甲,护甲穿透超出目标护甲的部分也可以继续增加伤害。"); RegisterString("skillR3Desc", "Icarus' Energy shield will have a chance to avoid the damage.", "伊卡洛斯的能量盾将有概率直接规避一次伤害。"); RegisterString("skillR4Desc", "Increasing the energy efficiency will increase the amount of damage the shield can take per unit of energy. But this will not be considered as damage reduction.", "提升护盾能量效率将提高每单位能量的护盾可以承受的伤害总量。但这不会被视为伤害减免。"); RegisterString("skillR5Desc", "Increasing the energy efficiency will increase the amount of damage the shield can take per unit of energy. But this will not be considered as damage reduction.", "提升护盾的能量效率将提高每单位能量的行星护盾可以承受的伤害总量。但这不会被视为伤害减免。"); RegisterString("skillR6Desc", "Gain a bonus when dealing void damage.", "友方造成虚空类型的伤害时,该伤害获得加成。"); RegisterString("skillR7Desc", "Droplets have a 10x energy consumption penalty when manually summoned to attack units beyond 1AU. This reduces that penalty.\nDoes not affect the energy consumption of attacking within 1AU.", "水滴在手动召唤以攻击1AU以外的单位时,将有10倍的能量消耗惩罚,此项可以将该惩罚降低。\n不影响1AU以内的耗能。"); RegisterString("skillR8Desc", "If the sum of the power grids' energy generation on all planets in a star system is lower than the energy fluctuation camouflage value, that star system will not be assimilated or invaded by the void. \nNote: If the star system has surviving dark fog hives, the normal dark fog hive may still launch an attack.", "如果一个恒星系内所有行星上的电网实际功率总和低于能量波动屏蔽值,该星系将不会招致虚空同化及入侵。\n注意:如果该星系有存留的黑雾巢穴,普通黑雾巢穴仍然可以发起进攻。"); RegisterString("星河卫士奖章", "Galaxy Guardian's Medal", "星河卫士勋章"); RegisterString("星河卫士奖章描述", "This is a medal given to you by the COSMO Technology Ethics Committee for your contribution to the sector, with your name engraved on it. The COSMO Technology Ethics Committee claims that the medal is extremely expensive and rare, and suggests you not to expose it to carbon dioxide, oxygen and water at the same time.", "这是COSMO技术伦理委员会为奖励你对星区做出的贡献而为你颁发的勋章,上面刻有你的名字。COSMO技术伦理委员会声称该奖章造价昂贵、极其稀有,并建议你不要使其同时接触到二氧化碳、氧气和水。"); RegisterString("提供算力名称", "Incorporated into the COSMO architecture", "并入COSMO架构"); RegisterString("提供算力描述", "Provide area computing power to the COSMO Technology Ethics Committee by Incorporate all research facilities into the COSMO architecture. In addition, this protocol requires universe matrices to ensure that each section can efficiently handle the hash collision problem in the COSMO main-net. During the process of researching this technology, you will continue to earn merit points.", "通过将所有科研设施并入COSMO架构来为COSMO技术伦理委员会提供星区算力,这还需要消耗一定的宇宙矩阵来保证每个星区能高效处理主网内的散列碰撞问题。研究此科技的过程中,你会持续获得功勋点数。"); RegisterString("提供算力结论", "This protocol allows unlimited progress and is automatically added to the end of the queue", "此项科技允许无限进行,已自动添加到队列末尾"); RegisterString("版本更迭补偿", "Version change compensation", "版本更迭补偿"); RegisterString("遗物4-5补偿说明", "Since the effect of the meta driver [Aftershock Echo] has been changed, you received a compensation from the void: you can immediately interpret a new meta driver, and a free resurrection coin. ", "由于[余震回响]元驱动的效果被更改,你收到了一个来自虚空的补偿:可以立刻解译一个新的元驱动,并获得一个复活币。"); RegisterString("PF深空来敌", "TCFV", "深空来敌"); RegisterString("PF入侵逻辑", "Invasion Logic", "入侵逻辑"); RegisterString("PF元驱动", "Meta drivers", "元驱动"); RegisterString("PF工厂重写", "Factory Rewrite", "工厂重写"); RegisterString("PF伤害逻辑", "Damage Logic", "伤害逻辑"); RegisterString("PF击杀逻辑", "Kill Logic", "击杀逻辑"); RegisterString("PF弹道重写", "Ballistic Rewrite", "弹道重写"); RegisterString("PF水滴", "Droplets", "水滴"); RegisterString("PF事件链", "Event System", "事件链"); RegisterString("PF深空绘制调用", "Draw Call", "绘制调用"); RegisterString("虚空入侵扩张中", "Expanding {0:D2}:{1:D2}", "扩张中 {0:D2}:{1:D2}"); RegisterString("虚空入侵集结中", "Assimilating {0:D2}:{1:D2}", "同化中 {0:D2}:{1:D2}"); RegisterString("虚空入侵进攻中", "{2} incoming", "{2}艘战舰袭来"); RegisterString("虚空入侵进攻中计时", "Invasion {0:D2}:{1:D2}", "正在入侵 {0:D2}:{1:D2}"); RegisterString("虚空入侵数量", "Est. {0} Vessels", "预估数量 {0}"); RegisterString("削弱入侵标题", "Weaken the Invasion", "削弱入侵"); RegisterString("削弱入侵内容", "When the dark fog is in the process of assimilation, the continuous projection of void energy makes it almost impossible for conventional weapons to damage the dark fog units. Only by using the star cannon can we ignore the protection of void energy, and damage the hive even during the assimilation process, thereby weakening the upcoming invasion intensity. \nOnce assimilation process is complete, the void will redirect its energy towards maintaining complete control over the dark fog, which also significantly reduces the dark fog's protection from the void. This means that only after they initiate the invasion can they be damaged by conventional weapon. Nevertheless, as the attack becomes stronger, the void's damage reduction protection can be retained up to 75% (in the late stages of the game).", "当黑雾正处在被同化的进程中时,持续的虚空能量投射使得常规武器几乎无法伤害到这些黑雾单位。只有动用恒星炮才可以无视虚空能量的庇护并在同化进程中对巢穴造成伤害,以此削弱即将到来的入侵强度。\n一旦同化完成,虚空会将能量转而用于维持对黑雾的完全控制,这会使得黑雾失去一部分来自虚空的保护,这意味着其只有在发起入侵时才可以被常规武器伤害。尽管如此,随着进攻越来越强大,来自虚空的保护最多可以被保留75%伤害减免效果(在游戏的终末期)。"); RegisterString("开启虚空入侵", "Enable Void Invasion", "开启虚空入侵"); RegisterString("已开启虚空入侵", "Void Invasion Enabled", "虚空入侵已启用"); RegisterString("非黑雾模式", "Dark Fog Not Available", "黑雾势力未启用"); RegisterString("虚空入侵", "Void Invasion", "虚空入侵"); RegisterString("虚空入侵提示", "Enabling Void Invasion will result in periodic and increasingly powerful dark fog invasions, and resisting invasion will earn you additional rewards.\nThe intensity upper limit of the void invasion in late game will be affected by the dark fog difficulty,\nand that intensity upper limit will reach the maximum when the dark fog difficulty is larger than 4.0.\n\nWarning: Once you enabled the void invasion, you cannot disable it.", "启用虚空入侵会导致星区周期性地受到越来越强大的黑雾进攻,抵抗进攻也将获得额外奖励。\n游戏后期虚空入侵的强度的上限会受黑雾难度系数影响,在黑雾系数达到4.0以上后,后期入侵的强度将达到最大。\n\n警告:一旦开启虚空入侵,此选项无法被关闭。"); RegisterString("虚空入侵版本更新提示", "They Come From Void has updated. There is a new mode available now. Enabling Void Invasion will result in periodic and increasingly powerful dark fog invasions, and resisting invasion will earn you additional rewards.\nNote: The intensity upper limit of the void invasion in late game will be affected by the dark fog difficulty. Once you enabled the void invasion, you cannot disable it.\nWill you enable it now?\n\n( You can also enable it later in Esc Menu. )", "深空来敌已更新虚空入侵模式,启用虚空入侵会导致星区周期性地受到越来越强大的黑雾进攻,抵抗进攻也将获得额外奖励。\n注意:游戏后期虚空入侵的强度的上限会受黑雾难度系数影响,一旦开启虚空入侵,此选项无法被关闭。\n是否立即启用?\n\n(你也可以稍后在Esc菜单中启用虚空入侵。)"); RegisterString("侦测到虚空入侵提示", "Void rift detected. Void is attempting to assimilate dark fog to \ninvade {0}.\n", "探测到虚空裂隙,虚空正在尝试同化黑雾以\n入侵{0}。\n"); RegisterString("虚空入侵额外特性提示", "Overload of void energy projection detected, which will give assimilated dark fog additional properties. They will:", "侦测到过载的虚空能量投射使得被同化的黑雾获得了额外特性,它们将:"); RegisterString("虚空入侵结束", "Invasion Ended", "入侵结束"); RegisterString("虚空入侵结束提示", "The Void is no longer able to maintain the connection, and all dark fog units have broken away from assimilation.\n{0}/{1} vessels has been destroyed.\nThe COSMO Technology Ethics Committee has awarded you {2} authorization points for your contribution to the peace maintenance of the sector.", "虚空已无法继续维持连接,所有黑雾单位已脱离了同化。\n{0}/{1}艘敌舰已被消灭。\nCOSMO技术伦理委员为奖励你对维护星区和平和贡献,向你发放了{2}授权点。"); RegisterString("虚空入侵结束提示元驱动解译", "Since the strong void energy projection reveals the expansion point of some cosmological axioms, the next time you interpret an meta driver, there will be a greater probability of discovering Axiomatic decoding tracks.", "由于强大的虚空能量投射揭示了部分宇宙公理的扩展点位,下次解译元驱动时,将有更大概率发现公理级解码轨。"); RegisterString("虚空入侵结束提示元驱动发现", "A complete meta driver signal was detected at the void connection break. It has been added to the meta-driver interpretation event chain.", "在虚空连接的断裂出侦测到完整的元驱动信号,已添加到元驱动解译事件链。"); RegisterString("额外特性描述0", "Gain {0}% damage reduction", "获得{0}%伤害减免"); RegisterString("额外特性描述1", "Have {0}% probability of fully dodging an attack", "有{0}%的概率完全闪避一次伤害"); RegisterString("额外特性描述2", "Gain {0} extra armor", "获得{0}额外护甲"); RegisterString("额外特性描述3", "Deal +{0}% extra damage to planetary shields", "对行星护盾造成+{0}%额外伤害"); RegisterString("额外特性描述4", "When killed by a droplet, there is a {0}% probability of destroying that droplet", "被水滴击杀时,有{0}%概率摧毁该水滴"); RegisterString("额外特性描述5", "Procvide no merit points when killed", "在死亡时不提供功勋点数"); RegisterString("额外特性描述6", "Reduces {0}% kinetic weapon damage in the whole sector", "削弱全星区的{0}%动能武器伤害"); RegisterString("额外特性描述7", "Reduces {0}% energy weapon damage in the whole sector", "削弱全星区的{0}%能量武器伤害"); RegisterString("额外特性描述8", "Reduces {0}% blast weapon damage in the whole sector", "削弱全星区的{0}%爆破武器伤害"); RegisterString("额外特性描述9", "Reduces {0}% magnetic weapon damage in the whole sector", "削弱全星区的{0}%电磁武器伤害"); RegisterString("额外特性描述10", "Incapacitated Icarus' space fleet (except for droplets)", "使伊卡洛斯的太空舰队无法作战(水滴除外)"); RegisterString("额外特性描述11", "Deal extra damage equal to {0}% of your maximum damage type bonus", "造成额外伤害,等同于你最高伤害类型加成的{0}%"); RegisterString("额外特性描述12", "Gain {0}/s extra health regeneration", "获得{0}/s额外生命回复"); RegisterString("额外特性描述13", "Gain +{0}% sailing speed", "获得+{0}%航行速度加成"); RegisterString("额外特性描述14", "", ""); RegisterString("引导太阳轰炸标题", "Guide Solar Bombardment", "引导太阳轰炸"); RegisterString("引导太阳轰炸描述", "Icarus consumes core energy to stimulate and guide the energy of stars, and uses itself as a beacon to bombard the surrounding surface.\nThe energy consumption that maintains stellar energy guidance will rapidly increase over time. When the mecha energy is below 10%, it will no longer be able to maintain the solar bombardment.\nClick again to stop the solar bombardment.\n[cooling down 2:00]", "伊卡洛斯消耗自身的能量来引导恒星级能量,并以自身作为信标,向周围的地表进行太阳轰炸。\n若持续开启,维持恒星能量引导的机甲耗能速度会迅速增长。当机甲能量低于10%时将无法继续引导。\n再次点击可以提前停止太阳轰炸。\n[冷却时间2:00]"); RegisterString("呼叫行星清洗标题", "Call For Planetary Purge", "呼叫行星清洗"); RegisterString("呼叫行星清洗描述", "Pay 1 authorization point to request an orbital purge of the current planetary surface and low altitude from the COSMO Technology Ethics Committee.\n[cooldown time 0:45]", "支付1授权点,向COSMO技术伦理委员会请求一次针对当前行星地表和低空的轨道清洗。\n[冷却时间0:45]"); RegisterString("授权点不足警告", "Insufficient authorization points!", "授权点不足!"); RegisterString("启动行星清洗警告", "Warning! Planetary purge incoming!", "警告!行星清洗来袭!"); RegisterString("启动太阳轰炸警告", "Guiding Solar Bombardment!", "正在引导太阳轰炸!"); RegisterString("引导太阳轰炸", "Guide Solar Bombardment", "引导太阳轰炸"); RegisterString("太阳轰炸已终止", "Solar Bombardment Terminated!", "太阳轰炸已终止!"); RegisterString("只能在行星上启动", "Warning: You can only launch this skill on a planet!", "警告:只能在行星上启动!"); RegisterString("引导太阳轰炸耗能", " - Guide Solar Bombardment", " - 引导太阳轰炸"); RegisterString("水滴耗能", " - Droplet", " - 水滴"); RegisterString("微型恒星能量引导", "Micro stellar energy guidance", "微型恒星能量引导"); RegisterString("微型恒星能量引导描述", "After successfully achieving a technological breakthrough in stellar energy guidance, a possibility of miniaturizing it has emerged. Perhaps Icarus can use its own energy to deflect and stimulate local stellar energy, making it possible for Icarus itself to guide the solar bombardment.", "在成功取得了恒星能量引导的技术突破之后,一个将其微型化的可能出现了。或许伊卡洛斯可以使用自身的能量输出来偏折并激发局部的恒星能量,这将使得伊卡洛斯自行引导太阳轰炸成为可能。"); RegisterString("微型恒星能量引导结论", "You have unlocked the ability to guide solar bombardment.", "你解锁了引导太阳轰炸的能力。"); RegisterString("元驱动栏位数量", "Meta driver slots", "元驱动槽位"); RegisterString("元驱动挂载点位扩展1", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展2", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展3", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展4", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展5", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展6", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展7", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展8", "Meta driver mounting point extension", "元驱动挂载点位扩展"); RegisterString("元驱动挂载点位扩展描述", "Can hold more meta drivers.\nWhen viewing the meta driver on the left, use the mouse scroll wheel to page.\nWarning: Research on this technology is considered extreme provocation by the COSMO Technology Ethics Committee, and they will impose extremely severe penalties for such behavior.", "可以持有更多数量的元驱动。\n在左侧查看元驱动时,使用鼠标滚轮翻页。\n警告:研究此技术被COSMO技术伦理委员会认为是极端的挑衅行为,COSMO技术伦理委员会会对该行为处以极其严厉的处罚。"); RegisterString("元驱动挂载点位扩展结论", "Meta driver slots +1", "元驱动槽位 +1"); RegisterString("COSMO技术伦理委员会警告", "Warning from COSMO Technology Ethics Committee", "COSMO技术伦理委员会的警告"); RegisterString("COSMO技术伦理委员会惩罚", "Due to your provocative behavior, the COSMO Technology Ethics Committee has deducted your {0} authorization points and stripped you of all your merit levels.", "由于你的挑衅行为,COSMO技术伦理委员会扣除了你{0}授权点,并剥夺了你全部的功勋级别。"); RegisterString("警告红色gm", "Warning", "警告"); RegisterString("研究元驱动挂载点位时警告", "The COSMO Technology Ethics Committee WARNS YOU:\nIf you persist in researching this technology, the committee will strip you of all merit levels and deduct 100 authorization points!", "COSMO技术伦理委员会警告你:\n若你一意孤行,坚持研究该科技,委员会将剥夺你全部的功勋级别,并扣除你100授权点。"); RegisterString("明白gm", "I Understood", "了解"); RegisterString("新年快乐", "Happy New Year!", "新年快乐!"); RegisterString("新年快乐标题", "Happy New Year", "新年快乐"); RegisterString("新年礼物内容", "To celebrate the New Year, the COSMO Technology Ethics Committee has awarded you 100 authorization points.", "为庆祝新年,COSMO技术伦理委员会向你发放了100授权点奖励。"); RegisterString("恒星炮自动开火", "Star cannon auto fire", "恒星炮自动开火"); RegisterString("恒星炮自动开火说明", "When the void invasion is detected, if the star cannon has cooled down and fully charged, it will automatically attempt to fire at the star system.\nAutomatic firing will not set any priority.", "当虚空入侵被检测到后,如果恒星炮已冷却并充能完毕,将自动尝试向该星系开火。\n自动开火不会设定任何优先级。"); } public static void AddSingalProtos() { } public static void EditProtossWhenLoad() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown ItemProto val = ((ProtoSet)(object)LDB.items).Select(9511); if (val != null) { val.DescFields = new int[6] { 81, 82, 80, 59, 11, 1 }; val.prefabDesc = new PrefabDesc(); ref PrefabDesc prefabDesc = ref val.prefabDesc; prefabDesc.craftUnitMaxMovementSpeed = 30000f; prefabDesc.workEnergyPerTick = 500000L; StorageComponent.itemIsFighter[9511] = true; } } public static void UnlockTutorials(int i = -1) { if (i == -1) { for (int j = 42; j <= 44; j++) { GameMain.history.UnlockTutorial(j); } } else { GameMain.history.UnlockTutorial(i); } } [HarmonyPostfix] [HarmonyPatch(typeof(GameHistoryData), "UnlockTechFunction")] public static void UnlockTechFunctionPatch(int func, double value, int level) { if (func == 771) { Relic.CheckMaxRelic(); Relic.PunishmenWhenUnlockRelicSlot(); } } [HarmonyPostfix] [HarmonyPatch(typeof(TechProto), "UnlockFunctionText")] public static void UnlockFunctionTextPatch(ref TechProto __instance, ref string __result) { string text = ""; bool flag = false; for (int i = 0; i < __instance.UnlockFunctions.Length; i++) { int num = __instance.UnlockFunctions[i]; double num2 = __instance.UnlockValues[i]; int num3 = (int)((num2 > 0.0) ? (num2 + 0.5) : (num2 - 0.5)); int num4 = num; int num5 = num4; if (num5 == 771) { text = text + Localization.Translate("元驱动栏位数量") + " +" + num3; flag = true; } if (i < __instance.UnlockFunctions.Length - 1) { text += "\r\n"; } } if (flag) { if (__result.Length > 0) { __result = __result + "\r\n" + text; } else { __result = text; } } } public static void InitEventProtos() { EventSystem.protos = new Dictionary(); EventSystem.alterProtos = new Dictionary>(); int num = 1001; EventProto eventProto = new EventProto(num); eventProto.SetRequest(new int[0], new int[0]); eventProto.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto.SetDecision(1, new int[0], new int[2] { 19997, 24 }, new int[2] { 0, 600 }); EventSystem.protos.Add(num, eventProto); RegisterString("ept" + num, "What ...... is This?", "这是……什么?"); RegisterString("epd" + num, "The analysis module stumbled upon a meta-drive with a self-interpretive system from the wreckage of the dark fog units, which appears to contain a high-dimensional API that efficiently uses the underlying physical logic of the universe, but its specific function has not yet been confirmed. Fortunately, its self-interpreting system was preserved so well that it only needed to connect to Icarus' research hub to decode it directly.", "分析模块从黑雾基地的残骸中偶然发现了一个带有自解译系统的元驱动,这种驱动似乎载有高效利用宇宙底层物理逻辑的高维API,但目前还无法确定它的具体功能。幸运的是,它带有的自解译系统被保留得相当完好,只需要连接伊卡洛斯的研究中枢就可以直接对其进行解码。"); RegisterString("epdt" + num + "-0", "Don't connect", "不要连接"); RegisterString("epdt" + num + "-1", "Connect it!", "连接它!"); int num2 = 1002; EventProto eventProto2 = new EventProto(num2); eventProto2.SetRequest(new int[0], new int[0]); eventProto2.SetDecision(0, new int[0], new int[2] { -1, 25201 }, new int[2] { 0, 100 }); eventProto2.SetDecision(1, new int[0], new int[2] { 12, 21 }, new int[2] { 0, 1800 }); EventSystem.protos.Add(num2, eventProto2); RegisterString("ept" + num2, "Discover Traces of Potential Meta-Drive", "发现潜在的元驱动"); RegisterString("epd" + num2, "Traces of high-dimensional API calls were found in the log files of the dark fog wreckage, which may indicate the existence of a cosmic meta-drive. But the entity that records the log file is extremely unstable, and analyzing the log file will destroy its physical structure and make it no longer usable. Or Icarus could choose to compile this log file with high-dimensional information directly into physical dark fog matrices in its storage.", "在黑雾残骸的日志文件中发现了高维API的调用痕迹,这可能预示着宇宙元驱动的存在。但记载日志文件的实体极其不稳定,分析日志文件将破坏其物理结构,使其不再可用。或者伊卡洛斯可以选择将这个载有高维信息的日志文件在其存储体中直接编译为实体黑雾矩阵。"); RegisterString("epdt" + num2 + "-0", "Compile it directly into the matrix", "将日志文件直接编译为矩阵"); RegisterString("epdt" + num2 + "-1", "Analyze log file", "分析日志文件"); int num3 = 2001; EventProto eventProto3 = new EventProto(num3); eventProto3.SetRequest(new int[1] { 1 }, new int[1] { 300 }); eventProto3.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto3.SetDecision(1, new int[1], new int[2] { 19999, 25 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num3, eventProto3); RegisterString("ept" + num3, "Log Analysis", "分析日志"); RegisterString("epd" + num3, "The analysis module completes the destructive analysis of the log and finds that the carrier itself is the meta-driven materialization matrix. Fortunately, with its remnant self-interpreting system, Icarus might be able to try to fix the meta-drive and make it interpretable, but this would need some necessary materials.", "分析模块完成了对日志的破坏性分析,发现其载体本身就是元驱动的实体化矩阵。幸运的是,借助其残存的自解译系统,伊卡洛斯或许可以尝试修复元驱动,使其变得可以被解译,但这将消耗一些必要的材料。"); RegisterString("epdt" + num3 + "-0", "Abort repairing", "放弃修复"); RegisterString("epdt" + num3 + "-1", "Attempt to repair", "尝试修复"); int num4 = 2002; EventProto eventProto4 = new EventProto(num4); eventProto4.SetRequest(new int[1] { 400 }, new int[1]); eventProto4.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto4.SetDecision(1, new int[1], new int[1] { 18101 }, new int[1]); EventSystem.protos.Add(num4, eventProto4); RegisterString("ept" + num4, "Log Analysis", "分析日志"); RegisterString("epd" + num4, "The analysis module completed a destructive analysis of the log, which vaguely pointed to a planet, perhaps probing that planet could find traces of the meta-drive.", "分析模块完成了对日志的破坏性分析,日志模糊地指向了一个行星,或许探测该行星可以找到元驱动的痕迹。"); RegisterString("epdt" + num4 + "-0", "Abort searching", "放弃搜寻"); RegisterString("epdt" + num4 + "-1", "Search on the planet", "在行星上搜寻"); int num5 = 2003; EventProto eventProto5 = new EventProto(num5); eventProto5.SetRequest(new int[1] { 9999 }, new int[1] { 100 }); eventProto5.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto5.SetDecision(1, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 1800 }); EventSystem.protos.Add(num5, eventProto5); RegisterString("ept" + num5, "Log Analysis", "分析日志"); RegisterString("epd" + num5, "The analysis module completed a destructive analysis of the log, which, strangely enough, indicates that the meta-drive appeared to be encoded in disembodied form on energy fluctuations throughout the sector and is reacted to the disintegration of the dark fog units. Every time a dark fog unit is destroyed, it will trigger regular fluctuations encoded in the entire star region, and the analysis module may be able to find a way to interpret the drive by learning a large amount of regular fluctuation data. Once the sample size is large enough, Icarus can start the interpretation procedure.", "分析模块完成了对日志的破坏性分析,奇怪的是,这个驱动似乎是以无实体的形式被编码在整个星区的能量波动上的,并且对黑雾单位的解体过程有反应。每当有黑雾单位被摧毁,都会激发整个星区编码的规律性波动,分析模块或许可以通过学习大量的规律性波动数据来寻找解译驱动的方法。一旦样本量足够,伊卡洛斯就可以启动解译程序。"); RegisterString("epdt" + num5 + "-0", "Abort", "放弃解译"); RegisterString("epdt" + num5 + "-1", "Run interpretation procedure", "执行解译程序"); int num6 = 2004; EventProto eventProto6 = new EventProto(num6); eventProto6.SetRequest(new int[2] { 11305, 30000 }, new int[2] { 50, 1 }); eventProto6.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto6.SetDecision(1, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 28800 }); eventProto6.SetDecision(2, new int[1] { 1 }, new int[2] { 19999, 24 }, new int[2] { 0, 1200 }); EventSystem.protos.Add(num6, eventProto6); RegisterString("ept" + num6, "Log Analysis", "分析日志"); RegisterString("epd" + num6, "The analysis module completed the destructive analysis of the logs and easily located the meta-drive interpretation site, which Icarus needed to synchronize the compiled physical rules with the understandable code structure during the research. Alternatively, quantum chips can be used directly to assist interpretation, but this will take a longer time.", "分析模块完成了对日志的破坏性分析,并轻松定位了元驱动的解译位点,伊卡洛斯需要在研究过程中将编译在内的物理规则与可理解的代码结构进行同步,来完成解译过程。或者,也可以直接使用量子芯片辅助解译,但这将花费较长的时间。"); RegisterString("epdt" + num6 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num6 + "-1", "Use quantum chip to support the interpretation", "使用量子芯片解译"); RegisterString("epdt" + num6 + "-2", "Sync physical rules", "同步物理规则"); int num7 = 2101; EventProto eventProto7 = new EventProto(num7); eventProto7.SetRequest(new int[1] { 1 }, new int[1] { 300 }); eventProto7.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto7.SetDecision(1, new int[1], new int[2] { 19999, 25 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num7, eventProto7); RegisterString("ept" + num7, "Log Analysis", "分析日志"); RegisterString("epd" + num7, "The analysis module completes the destructive analysis of the log and finds that the carrier itself is the meta-driven materialization matrix. Fortunately, with its remnant self-interpreting system, Icarus might be able to try to fix the meta-drive and make it interpretable, but this would need some necessary materials.", "分析模块完成了对日志的破坏性分析,发现其载体本身就是元驱动的实体化矩阵。幸运的是,借助其残存的自解译系统,伊卡洛斯或许可以尝试修复元驱动,使其变得可以被解译,但这将消耗一些必要的材料。"); RegisterString("epdt" + num7 + "-0", "Abort repairing", "放弃修复"); RegisterString("epdt" + num7 + "-1", "Attempt to repair", "尝试修复"); int num8 = 2102; EventProto eventProto8 = new EventProto(num8); eventProto8.SetRequest(new int[1] { 400 }, new int[1]); eventProto8.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto8.SetDecision(1, new int[1], new int[1] { 18101 }, new int[1]); EventSystem.protos.Add(num8, eventProto8); RegisterString("ept" + num8, "Log Analysis", "分析日志"); RegisterString("epd" + num8, "The analysis module completed a destructive analysis of the log, which vaguely pointed to a planet, perhaps probing that planet could find traces of the meta-drive.", "分析模块完成了对日志的破坏性分析,日志模糊地指向了一个行星,或许探测该行星可以找到元驱动的痕迹。"); RegisterString("epdt" + num8 + "-0", "Abort searching", "放弃搜寻"); RegisterString("epdt" + num8 + "-1", "Search on the planet", "在行星上搜寻"); int num9 = 2103; EventProto eventProto9 = new EventProto(num9); eventProto9.SetRequest(new int[1] { 9999 }, new int[1] { 100 }); eventProto9.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto9.SetDecision(1, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 1800 }); EventSystem.protos.Add(num9, eventProto9); RegisterString("ept" + num9, "Log Analysis", "分析日志"); RegisterString("epd" + num9, "The analysis module completed a destructive analysis of the log, which, strangely enough, indicates that the meta-drive appeared to be encoded in disembodied form on energy fluctuations throughout the sector and is reacted to the disintegration of the dark fog units. Every time a dark fog unit is destroyed, it will trigger regular fluctuations encoded in the entire star region, and the analysis module may be able to find a way to interpret the drive by learning a large amount of regular fluctuation data. Once the sample size is large enough, Icarus can start the interpretation procedure.", "分析模块完成了对日志的破坏性分析,奇怪的是,这个驱动似乎是以无实体的形式被编码在整个星区的能量波动上的,并且对黑雾单位的解体过程有反应。每当有黑雾单位被摧毁,都会激发整个星区编码的规律性波动,分析模块或许可以通过学习大量的规律性波动数据来寻找解译驱动的方法。一旦样本量足够,伊卡洛斯就可以启动解译程序。"); RegisterString("epdt" + num9 + "-0", "Abort", "放弃解译"); RegisterString("epdt" + num9 + "-1", "Run interpretation procedure", "执行解译程序"); int num10 = 2104; EventProto eventProto10 = new EventProto(num10); eventProto10.SetRequest(new int[2] { 11305, 30000 }, new int[2] { 50, 1 }); eventProto10.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto10.SetDecision(1, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 28800 }); eventProto10.SetDecision(2, new int[1] { 1 }, new int[2] { 19999, 24 }, new int[2] { 0, 1200 }); EventSystem.protos.Add(num10, eventProto10); RegisterString("ept" + num10, "Log Analysis", "分析日志"); RegisterString("epd" + num10, "The analysis module completed the destructive analysis of the logs and easily located the meta-drive interpretation site, which Icarus needed to synchronize the compiled physical rules with the understandable code structure during the research. Alternatively, quantum chips can be used directly to assist interpretation, but this will take a longer time.", "分析模块完成了对日志的破坏性分析,并轻松定位了元驱动的解译位点,伊卡洛斯需要在研究过程中将编译在内的物理规则与可理解的代码结构进行同步,来完成解译过程。或者,也可以直接使用量子芯片辅助解译,但这将花费较长的时间。"); RegisterString("epdt" + num10 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num10 + "-1", "Use quantum chip to support the interpretation", "使用量子芯片解译"); RegisterString("epdt" + num10 + "-2", "Sync physical rules", "同步物理规则"); int num11 = 2201; EventProto eventProto11 = new EventProto(num11); eventProto11.SetRequest(new int[1] { 1 }, new int[1] { 400 }); eventProto11.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto11.SetDecision(1, new int[1], new int[2] { 13, 23 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num11, eventProto11); RegisterString("ept" + num11, "Log Analysis", "分析日志"); RegisterString("epd" + num11, "The analysis module found that the physical storage structure where the logs were recorded had been severely damaged, but the damage appeared to be reversible. Before performing the analysis, you first need to provide some necessary materials to repair the log.", "分析模块发现记载日志的物理存储结构已经受到了严重的损伤,不过该损伤似乎是可逆的。在执行分析之前,首先需要提供一些必要的材料来修复日志。"); RegisterString("epdt" + num11 + "-0", "Abort repairing", "放弃修复"); RegisterString("epdt" + num11 + "-1", "Attempt to repair and analyze", "尝试修复并分析"); int num12 = 2202; EventProto eventProto12 = new EventProto(num12); eventProto12.SetRequest(new int[1] { 300 }, new int[1]); eventProto12.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto12.SetDecision(1, new int[1], new int[2] { 13, 21 }, new int[2] { 0, 1800 }); EventSystem.protos.Add(num12, eventProto12); RegisterString("ept" + num12, "Log Analysis", "分析日志"); RegisterString("epd" + num12, "The analysis module found that the log itself was highly encrypted by rapidly changing the ciphertext in the time dimension. Obviously, maintaining the encryption required energy supply. Icarus easily pinpointed the energy as coming from a dark fog base on the ground on a planet. If all the dark fog bases on the planet are destroyed and all the core drillers are removed, the decryption and analysis of logs should be performed.", "分析模块发现了日志本身被高度加密了,加密的方式是通过在时间维度上快速改变密文实现的,显然,维持该加密需要能量的供给。伊卡洛斯轻易地定位到了这个能量来自于某个行星上的地面黑雾巢穴。如果摧毁并填埋该行星上的全部黑雾基地,应该就可以执行日志的解密与分析程序了。"); RegisterString("epdt" + num12 + "-0", "Abort decryption", "放弃解密"); RegisterString("epdt" + num12 + "-1", "Decryption and analyze", "解密并分析"); int num13 = 2203; EventProto eventProto13 = new EventProto(num13); eventProto13.SetRequest(new int[1] { 300 }, new int[1]); eventProto13.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto13.SetDecision(1, new int[1], new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num13, eventProto13); RegisterString("ept" + num13, "Log Analysis", "分析日志"); RegisterString("epd" + num13, "The analysis module completes the destructive analysis of the logs, and the physical entities driven by the data indicators are scattered and stored in the ground dark fog base on a planet. Destroying all the dark fog bases and remove all the core drillers on the planet will retrieve the driving entities for further interpretation.", "分析模块完成了对日志的破坏性分析,数据指示元驱动的物理实体被分散保存在某行星上的地面黑雾基地中。摧毁并填埋该行星上的全部黑雾基地就可以取回驱动实体,以便进行下一步的解译了。"); RegisterString("epdt" + num13 + "-0", "Abort", "放弃搜寻"); RegisterString("epdt" + num13 + "-1", "Retrieve meta driver", "取回元驱动"); int num14 = 2204; EventProto eventProto14 = new EventProto(num14); eventProto14.SetRequest(new int[1] { 89999 }, new int[1] { 1000 }); eventProto14.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto14.SetDecision(1, new int[1], new int[2] { 13, 21 }, new int[2] { 0, 1800 }); EventSystem.protos.Add(num14, eventProto14); RegisterString("ept" + num14, "Log Analysis", "分析日志"); RegisterString("epd" + num14, "The analysis module found that the log entity appeared to be sealed in high dimensional space by an unknown energy, and Icarus was unable to detect any information. However, it may be possible to break this energy barrier with the help of stellar energies, which requires the help of mega structures.", "分析模块发现日志实体似乎被一股未知的能量密封在高维空间中,伊卡洛斯无法探查到任何信息。不过,借助恒星级别的能量或许能打破该能量屏障,这需要巨构的帮助。"); RegisterString("epdt" + num14 + "-0", "Abort analyze", "放弃分析"); RegisterString("epdt" + num14 + "-1", "Break the energy barrier and analyze", "打破能量屏障并分析"); int num15 = 2301; EventProto eventProto15 = new EventProto(num15); eventProto15.SetRequest(new int[2] { 1, 1 }, new int[2] { 500, 500 }); eventProto15.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto15.SetDecision(1, new int[1], new int[2] { 13, 23 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num15, eventProto15); RegisterString("ept" + num15, "Log Analysis", "分析日志"); RegisterString("epd" + num15, "The analysis module found that the physical storage structure where the logs were recorded had been severely damaged, but the damage appeared to be reversible. Before performing the analysis, you first need to provide some necessary materials to repair the log.", "分析模块发现记载日志的物理存储结构已经受到了严重的损伤,不过该损伤似乎是可逆的。在执行分析之前,首先需要提供一些必要的材料来修复日志。"); RegisterString("epdt" + num15 + "-0", "Abort repairing", "放弃修复"); RegisterString("epdt" + num15 + "-1", "Attempt to repair and analyze", "尝试修复并分析"); int num16 = 2302; EventProto eventProto16 = new EventProto(num16); eventProto16.SetRequest(new int[1] { 200 }, new int[1]); eventProto16.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto16.SetDecision(1, new int[1], new int[2] { 13, 21 }, new int[2] { 0, 3600 }); EventSystem.protos.Add(num16, eventProto16); RegisterString("ept" + num16, "Log Analysis", "分析日志"); RegisterString("epd" + num16, "The analysis module found that the log itself was highly encrypted by rapidly changing the ciphertext in the time dimension. Obviously, maintaining the encryption required energy supply. Icarus easily pinpointed the energy as coming from a ground-based dark fog unit on a planet. If all ground dark fog units on the planet are destroyed, log decryption and analysis should be performed.", "分析模块发现了日志本身被高度加密了,加密的方式是通过在时间维度上快速改变密文实现的,显然,维持该加密需要能量的供给。伊卡洛斯轻易地定位到了这个能量来自于某个行星上的地面黑雾单位。如果摧毁了该行星上全部的地面黑雾单位,应该就可以执行日志的解密与分析程序了。"); RegisterString("epdt" + num16 + "-0", "Abort decryption", "放弃解密"); RegisterString("epdt" + num16 + "-1", "Decryption and analyze", "解密并分析"); int num17 = 2303; EventProto eventProto17 = new EventProto(num17); eventProto17.SetRequest(new int[1] { 5 }, new int[1] { 50 }); eventProto17.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto17.SetDecision(1, new int[1], new int[2] { 13, 21 }, new int[2] { 0, 7200 }); EventSystem.protos.Add(num17, eventProto17); RegisterString("ept" + num17, "Log Analysis", "分析日志"); RegisterString("epd" + num17, "The analysis module found that the analysis log was encrypted with a high-level mechanical live key, which could not be decrypted and analyzed without obtaining the full key. However, dark fog units carrying key fragments have been found near a star in the galaxy, and if enough space dark fog units are destroyed, a complete mechanical live key may be obtained.", "分析模块发现,分析日志被一种高阶的机械活体密钥加密了,如果不获取完整的密钥,便无法解密并分析。不过,星区中的某个恒星附近发现了携带密钥片段的黑雾单位,若能摧毁足够多的太空黑雾单位,或许就能获取完整的机械活体密钥。"); RegisterString("epdt" + num17 + "-0", "Abort decryption", "放弃解密"); RegisterString("epdt" + num17 + "-1", "Decryption and analyze", "解密并分析"); int num18 = 2304; EventProto eventProto18 = new EventProto(num18); eventProto18.SetRequest(new int[1] { 89999 }, new int[1] { 10000 }); eventProto18.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto18.SetDecision(1, new int[1], new int[2] { 13, 21 }, new int[2] { 0, 3600 }); EventSystem.protos.Add(num18, eventProto18); RegisterString("ept" + num18, "Log Analysis", "分析日志"); RegisterString("epd" + num18, "The analysis module found that the log entity appeared to be sealed in high dimensional space by an unknown energy, and Icarus was unable to detect any information. However, it may be possible to break this energy barrier with the help of stellar energies, which requires the help of mega structures.", "分析模块发现日志实体似乎被一股未知的能量密封在高维空间中,伊卡洛斯无法探查到任何信息。不过,借助恒星级别的能量或许能打破该能量屏障,这需要巨构的帮助。"); RegisterString("epdt" + num18 + "-0", "Abort analyze", "放弃分析"); RegisterString("epdt" + num18 + "-1", "Break the energy barrier and analyze", "打破能量屏障并分析"); int num19 = 3201; EventProto eventProto19 = new EventProto(num19); eventProto19.SetRequest(new int[1] { 1 }, new int[1] { 300 }); eventProto19.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto19.SetDecision(1, new int[1], new int[2] { 19999, 25 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num19, eventProto19); RegisterString("ept" + num19, "Log Analysis", "分析日志"); RegisterString("epd" + num19, "The analysis module completes the destructive analysis of the log and finds that the carrier itself is the meta-driven materialization matrix. Fortunately, with its remnant self-interpreting system, Icarus might be able to try to fix the meta-drive and make it interpretable, but this would need some necessary materials.", "分析模块完成了对日志的破坏性分析,发现其载体本身就是元驱动的实体化矩阵。幸运的是,借助其残存的自解译系统,伊卡洛斯或许可以尝试修复元驱动,使其变得可以被解译,但这将消耗一些必要的材料。"); RegisterString("epdt" + num19 + "-0", "Abort repairing", "放弃修复"); RegisterString("epdt" + num19 + "-1", "Attempt to repair", "尝试修复"); int num20 = 3202; EventProto eventProto20 = new EventProto(num20); eventProto20.SetRequest(new int[1] { 400 }, new int[1]); eventProto20.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto20.SetDecision(1, new int[1], new int[1] { 18101 }, new int[1]); EventSystem.protos.Add(num20, eventProto20); RegisterString("ept" + num20, "Log Analysis", "分析日志"); RegisterString("epd" + num20, "The analysis module completed a destructive analysis of the log, which vaguely pointed to a planet, perhaps probing that planet could find traces of the meta-drive.", "分析模块完成了对日志的破坏性分析,日志模糊地指向了一个行星,或许探测该行星可以找到元驱动的痕迹。"); RegisterString("epdt" + num20 + "-0", "Abort searching", "放弃搜寻"); RegisterString("epdt" + num20 + "-1", "Search on the planet", "在行星上搜寻"); int num21 = 3203; EventProto eventProto21 = new EventProto(num21); eventProto21.SetRequest(new int[1] { 9999 }, new int[1] { 150 }); eventProto21.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto21.SetDecision(1, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 1800 }); EventSystem.protos.Add(num21, eventProto21); RegisterString("ept" + num21, "Log Analysis", "分析日志"); RegisterString("epd" + num21, "The analysis module completed a destructive analysis of the log, which, strangely enough, indicates that the meta-drive appeared to be encoded in disembodied form on energy fluctuations throughout the sector and is reacted to the disintegration of the dark fog units. Every time a dark fog unit is destroyed, it will trigger regular fluctuations encoded in the entire star region, and the analysis module may be able to find a way to interpret the drive by learning a large amount of regular fluctuation data. Once the sample size is large enough, Icarus can start the interpretation procedure.", "分析模块完成了对日志的破坏性分析,这个驱动似乎是以无实体的形式被编码在整个星区的能量波动上的,并且对黑雾单位的解体过程有反应。每当有黑雾单位被摧毁,都会激发整个星区编码的规律性波动,分析模块或许可以通过学习大量的规律性波动数据来寻找解译驱动的方法。一旦样本量足够,伊卡洛斯就可以启动解译程序。"); RegisterString("epdt" + num21 + "-0", "Abort", "放弃解译"); RegisterString("epdt" + num21 + "-1", "Run interpretation procedure", "执行解译程序"); int num22 = 3204; EventProto eventProto22 = new EventProto(num22); eventProto22.SetRequest(new int[2] { 11305, 30000 }, new int[2] { 80, 1 }); eventProto22.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto22.SetDecision(1, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 28800 }); eventProto22.SetDecision(2, new int[1] { 1 }, new int[2] { 19999, 24 }, new int[2] { 0, 1200 }); EventSystem.protos.Add(num22, eventProto22); RegisterString("ept" + num22, "Log Analysis", "分析日志"); RegisterString("epd" + num22, "The analysis module completed the destructive analysis of the logs and easily located the meta-drive interpretation site, which Icarus needed to synchronize the compiled physical rules with the understandable code structure during the research. Alternatively, quantum chips can be used directly to assist interpretation, but this will take a longer time.", "分析模块完成了对日志的破坏性分析,并轻松定位了元驱动的解译位点,伊卡洛斯需要在研究过程中将编译在内的物理规则与可理解的代码结构进行同步,来完成解译过程。或者,也可以直接使用量子芯片辅助解译,但这将花费较长的时间。"); RegisterString("epdt" + num22 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num22 + "-1", "Use quantum chip to support the interpretation", "使用量子芯片解译"); RegisterString("epdt" + num22 + "-2", "Sync physical rules", "同步物理规则"); int num23 = 3301; EventProto eventProto23 = new EventProto(num23); eventProto23.SetRequest(new int[2] { 100, 100 }, new int[2] { 100, 0 }); eventProto23.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto23.SetDecision(1, new int[1], new int[3] { 14, 6, 7 }, new int[3] { 0, -25, -25 }); eventProto23.SetDecision(2, new int[1] { 1 }, new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num23, eventProto23); RegisterString("ept" + num23, "Log Analysis", "分析日志"); RegisterString("epd" + num23, "The analysis module completed the destructive analysis of the log and found that the specific positioning of the meta driver pointed to a space dark fog hive. It seems that the meta driver's data was distributed stored in multiple units and nodes belonging to the space dark fog hive. If you want to retrieve the complete meta driver, all units and structures of the dark fog hive, including the relay station, must be destroyed. Alternatively, Icarus attempts to decode as soon as it has acquired enough meta-drive data, but incomplete data will cause the final decoding track to be insufficiently separated, resulting in a large amount of redundant code, which will reduce the probability of finding higher-level APIs.", "分析模块完成了对日志的破坏性分析,发现元驱动的具体定位指向了一个太空黑雾巢穴,似乎元驱动的数据被分布式存储在了属于该太空黑雾巢穴的多个单位和节点中,如果想取回完整的元驱动,必须消灭该黑雾巢穴所有的单位和结构,包括中继站。或者,在伊卡洛斯获取了足够多的元驱动相关数据时立刻尝试进行解译,但不完整的数据会导致最终的解码轨分离得不够彻底,使得解码轨包含大量冗余代码,这会降低找到更高阶API的概率。"); RegisterString("epdt" + num23 + "-0", "Abort searching", "放弃搜寻"); RegisterString("epdt" + num23 + "-1", "Retrieve partial meta driver", "取回部分元驱动"); RegisterString("epdt" + num23 + "-2", "Retrieve meta driver", "取回元驱动"); int num24 = 3302; EventProto eventProto24 = new EventProto(num24); eventProto24.SetRequest(new int[1] { 9 }, new int[1] { 15 }); eventProto24.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto24.SetDecision(1, new int[1], new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num24, eventProto24); RegisterString("ept" + num24, "Log Analysis", "分析日志"); RegisterString("epd" + num24, "The analysis module completed a destructive analysis of the log, which mentioned that the meta driver data would appear in the higher order units of a star system, and if Icarus could increase the level of the dark fog hive in space of the star system, the analysis module should be able to find enough meta driver data.", "分析模块完成了对日志的破坏性分析,日志提到了元驱动的数据会出现在某恒星系高阶单位中,如果能够提升该恒星系太空黑雾巢穴的等级,伊卡洛斯应该就能找到足够的元驱动数据。"); RegisterString("epdt" + num24 + "-0", "Abort searching", "放弃搜寻"); RegisterString("epdt" + num24 + "-1", "Retrieve meta driver", "取回元驱动"); int num25 = 3303; EventProto eventProto25 = new EventProto(num25); eventProto25.SetRequest(new int[3] { 9999, 9996, 11305 }, new int[3] { 400, 3, 500 }); eventProto25.SetDecision(0, new int[0], new int[2] { -1, 25201 }, new int[2] { 0, 800 }); eventProto25.SetDecision(1, new int[1] { 2 }, new int[1] { 14 }, new int[1]); eventProto25.SetDecision(2, new int[1] { 1 }, new int[1] { 14 }, new int[1]); eventProto25.SetDecision(3, new int[1], new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num25, eventProto25); RegisterString("ept" + num25, "Log Analysis", "分析日志"); RegisterString("epd" + num25, "The analysis log appears to have non-mechanical emotional tendencies from lower order life, and in the course of its destructive analysis, the analysis module finds biological emotions similar to fear, compassion, excitement, and curiosity. Obviously, pure log files do not carry the need for complex emotional coding. The analysis module supposes that the log itself carries meta driver information. Unfortunately, the personality of the log securely protects its own data, which cannot be read directly by the analysis module. We can try to kill its own kind to make it fear, so we can find a loophole for aggressive decryption. Or you can use its sympathy to lower its guard, or you can try to divert its attention by using lots of complex objects to arouse its curiosity. It seems willing to offer you some thanks if you give up this intrusion.", "这个分析日志似乎拥有来自低阶生命的非机械的情感倾向,分析模块在对其进行破坏性分析的过程中,发现了类似于恐惧、同情、兴奋和好奇的生物情感。显然,单纯的日志文件没有承载复杂情感编码的需要。分析模块推测日志本身就携带着元驱动信息。但不幸的是,日志的人格牢牢地保护着自身的数据,分析模块无法直接读取。我们可以尝试杀死他的同类来让它恐惧,从而找到漏洞进行攻击性破译。或者利用它的同情降低它的戒备,还可以尝试使用大量的复杂物体引起它的好奇来试图转移其注意。如果放弃对它的入侵,它似乎愿意为我们提供一些感谢。"); RegisterString("epdt" + num25 + "-0", "Abort", "放弃"); RegisterString("epdt" + num25 + "-1", "Distract it", "分散它的注意力"); RegisterString("epdt" + num25 + "-2", "Arouse its sympathy", "引起它的同情"); RegisterString("epdt" + num25 + "-3", "Make it afraid", "让它恐惧"); int num26 = 3304; EventProto eventProto26 = new EventProto(num26); eventProto26.SetRequest(new int[2] { 9995, 15201 }, new int[2] { 10, 1000 }); eventProto26.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto26.SetDecision(1, new int[1], new int[2] { 14, 8 }, new int[2] { 0, 100 }); eventProto26.SetDecision(2, new int[1] { 1 }, new int[1] { 14 }, new int[1]); eventProto26.SetDecision(3, new int[0], new int[2] { 14, 2 }, new int[2] { 0, -1 }); EventSystem.protos.Add(num26, eventProto26); RegisterString("ept" + num26, "Log Analysis", "分析日志"); RegisterString("epd" + num26, "Your attempt to exploit the laws of higher dimensional COSMO physics has been discovered by the COSMO Technology Ethics Committee, who have warned you that you must immediately terminate the relevant action. We can ignore their warnings and continue to acquire meta-drive data, but that could have consequences, or stop violating cosmic conventions.", "你尝试利用高维宇宙物理法则的违规行为已被COSMO技术伦理委员会发现,他们警告你必须立刻终止相关行动。我们可以无视他们的警告,继续获取元驱动数据,但这可能会带来后果,或者停止违反宇宙公约的行为。"); RegisterString("epdt" + num26 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num26 + "-1", "Warn the COSMO Technology Ethics Committee not to meddle", "警告COSMO技术伦理委员会不要多管闲事"); RegisterString("epdt" + num26 + "-2", "Bribe the COSMO Technology Ethics Committee", "贿赂COSMO技术伦理委员会"); RegisterString("epdt" + num26 + "-3", "Ignore them", "无视他们"); int num27 = 3401; EventProto eventProto27 = new EventProto(num27); eventProto27.SetRequest(new int[1] { 5 }, new int[1]); eventProto27.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto27.SetDecision(1, new int[1], new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num27, eventProto27); RegisterString("ept" + num27, "Log Analysis", "分析日志"); RegisterString("epd" + num27, "The analysis module completed the destructive analysis of the log, and found that the specific positioning of the meta-drive pointed to a star system, and it seemed that the meta-drive data was distributed stored in all the space dark fog ships and hives belonging to that star system, and we had to destroy all the space dark fog units of the star system to obtain the complete meta-drive.", "分析模块完成了对日志的破坏性分析,发现元驱动的具体定位指向了一个恒星系,似乎元驱动的数据被分布式存储在了属于该星系的所有太空黑雾单位和巢穴中,我们不得不消灭该星系的全部太空黑雾单位来获取完整的元驱动。"); RegisterString("epdt" + num27 + "-0", "Abort searching", "放弃搜寻"); RegisterString("epdt" + num27 + "-1", "Retrieve meta driver", "取回元驱动"); int num28 = 3402; EventProto eventProto28 = new EventProto(num28); eventProto28.SetRequest(new int[1] { 89999 }, new int[1] { 30000 }); eventProto28.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto28.SetDecision(1, new int[1], new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num28, eventProto28); RegisterString("ept" + num28, "Log Analysis", "分析日志"); RegisterString("epd" + num28, "The analysis module completed a destructive analysis of the log, which showed that the meta-drive was actually enclosed in the star by the dark fog, although it is not known how they did it, but this stellar operation carried out by mechanical creatures can apparently be cracked by stellar energy. Using enough stellar energy should be able to snatch the meta driver out of the star in the form of quantum wave fluctuations.", "分析模块完成了对日志的破坏性分析,日志显示,元驱动居然被黑雾封闭在了恒星之中,尽管不知道他们是如何做到的,但是这种由机械生物进行的恒星级操作显然可以通过恒星级的能量破解。使用足够的恒星能量应该能够将元驱动以量子波涨落的形式从恒星中攫取出来。"); RegisterString("epdt" + num28 + "-0", "Abort", "放弃搜寻"); RegisterString("epdt" + num28 + "-1", "Retrieve meta driver", "取回元驱动"); int num29 = 3403; EventProto eventProto29 = new EventProto(num29); eventProto29.SetRequest(new int[3] { 9999, 9996, 11305 }, new int[3] { 500, 5, 600 }); eventProto29.SetDecision(0, new int[0], new int[2] { -1, 25201 }, new int[2] { 0, 800 }); eventProto29.SetDecision(1, new int[1] { 2 }, new int[1] { 14 }, new int[1]); eventProto29.SetDecision(2, new int[1] { 1 }, new int[1] { 14 }, new int[1]); eventProto29.SetDecision(3, new int[1], new int[1] { 14 }, new int[1]); EventSystem.protos.Add(num29, eventProto29); RegisterString("ept" + num29, "Log Analysis", "分析日志"); RegisterString("epd" + num29, "The analysis log appears to have non-mechanical emotional tendencies from lower order life, and in the course of its destructive analysis, the analysis module finds biological emotions similar to fear, compassion, excitement, and curiosity. Obviously, pure log files do not carry the need for complex emotional coding. The analysis module supposes that the log itself carries meta driver information. Unfortunately, the personality of the log securely protects its own data, which cannot be read directly by the analysis module. We can try to kill its own kind to make it fear, so we can find a loophole for aggressive decryption. Or you can use its sympathy to lower its guard, or you can try to divert its attention by using lots of complex objects to arouse its curiosity. It seems willing to offer you some thanks if you give up this intrusion.", "这个分析日志似乎拥有来自低阶生命的非机械的情感倾向,分析模块在对其进行破坏性分析的过程中,发现了类似于恐惧、同情、兴奋和好奇的生物情感。显然,单纯的日志文件没有承载复杂情感编码的需要。分析模块推测日志本身就携带着元驱动信息。但不幸的是,日志的人格牢牢地保护着自身的数据,分析模块无法直接读取。我们可以尝试杀死他的同类来让它恐惧,从而找到漏洞进行攻击性破译。或者利用它的同情降低它的戒备,还可以尝试使用大量的复杂物体引起它的好奇来试图转移其注意。如果放弃对它的入侵,它似乎愿意为我们提供一些感谢。"); RegisterString("epdt" + num29 + "-0", "Abort", "放弃"); RegisterString("epdt" + num29 + "-1", "Distract it", "分散它的注意力"); RegisterString("epdt" + num29 + "-2", "Arouse its sympathy", "引起它的同情"); RegisterString("epdt" + num29 + "-3", "Make it afraid", "让它恐惧"); int num30 = 3404; EventProto eventProto30 = new EventProto(num30); eventProto30.SetRequest(new int[2] { 9995, 15201 }, new int[2] { 10, 1000 }); eventProto30.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto30.SetDecision(1, new int[1], new int[2] { 14, 8 }, new int[2] { 0, 100 }); eventProto30.SetDecision(2, new int[1] { 1 }, new int[1] { 14 }, new int[1]); eventProto30.SetDecision(3, new int[0], new int[2] { 14, 2 }, new int[2] { 0, -1 }); EventSystem.protos.Add(num30, eventProto30); RegisterString("ept" + num30, "Log Analysis", "分析日志"); RegisterString("epd" + num30, "Your attempt to exploit the laws of higher dimensional COSMO physics has been discovered by the COSMO Technology Ethics Committee, who have warned you that you must immediately terminate the relevant action. We can ignore their warnings and continue to acquire meta-drive data, but that could have consequences, or stop violating cosmic conventions.", "你尝试利用高维宇宙物理法则的违规行为已被COSMO技术伦理委员会发现,他们警告你必须立刻终止相关行动。我们可以无视他们的警告,继续获取元驱动数据,但这可能会带来后果,或者停止违反宇宙公约的行为。"); RegisterString("epdt" + num30 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num30 + "-1", "Warn the COSMO Technology Ethics Committee not to meddle", "警告COSMO技术伦理委员会不要多管闲事"); RegisterString("epdt" + num30 + "-2", "Bribe the COSMO Technology Ethics Committee", "贿赂COSMO技术伦理委员会"); RegisterString("epdt" + num30 + "-3", "Ignore them", "无视他们"); int num31 = 4201; EventProto eventProto31 = new EventProto(num31); eventProto31.SetRequest(new int[1] { 19486 }, new int[1] { 10 }); eventProto31.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto31.SetDecision(1, new int[0], new int[4] { 19999, 24, 6, 7 }, new int[4] { 0, 10800, -25, -50 }); eventProto31.SetDecision(2, new int[1], new int[2] { 19999, 24 }, new int[2] { 0, 36000 }); EventSystem.protos.Add(num31, eventProto31); RegisterString("ept" + num31, "Search for Meta-Drive", "搜寻元驱动"); RegisterString("epd" + num31, "The meta-drive was recovered from the wreckage of the dark fog units, but it was partially damaged, and Icarus could now interpret it directly, but it could cause the final decoding track to be insufficiently separated and contain a lot of redundant code, which would reduce the probability of finding higher-level APIs. Alternatively, Icarus could use a quantum computer to predict missing source code during interpretation, which would circumvent this potential risk.", "元驱动被从黑雾巢穴的废墟中找到,不过已经部分损坏,伊卡洛斯现在可以直接对其进行解译,但可能导致最终的解码轨分离得不够彻底,使得解码轨包含大量冗余代码,这会降低找到更高阶API的概率。或者,伊卡洛斯可以借助量子计算机在解译的过程中预测缺失的源代码,这将规避这种潜在风险。"); RegisterString("epdt" + num31 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num31 + "-1", "Run interpretation procedure directly", "直接解译"); RegisterString("epdt" + num31 + "-2", "Use quantum computer to predict missing source codes", "使用量子计算机预测缺失的源代码"); int num32 = 4301; EventProto eventProto32 = new EventProto(num32); eventProto32.SetRequest(new int[1] { 19486 }, new int[1] { 100 }); eventProto32.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto32.SetDecision(1, new int[0], new int[3] { 19998, 6, 7 }, new int[3] { 0, -25, -50 }); eventProto32.SetDecision(2, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num32, eventProto32); RegisterString("ept" + num32, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num32, "The meta-drive was successfully retrieved, but it was partially damaged, and Icarus could now interpret it directly, but it could cause the final decoding track to be insufficiently separated and contain a lot of redundant code, which would reduce the probability of finding higher-level APIs. Alternatively, Icarus could use a quantum computer to predict missing source code during interpretation, which would circumvent this potential risk.", "元驱动被成功获取,不过已经部分损坏,伊卡洛斯现在可以直接对其进行解译,但可能导致最终的解码轨分离得不够彻底,使得解码轨包含大量冗余代码,这会降低找到更高阶API的概率。或者,伊卡洛斯可以借助量子计算机在解译的过程中预测缺失的源代码,这将规避这种潜在风险。"); RegisterString("epdt" + num32 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num32 + "-1", "Run interpretation procedure directly", "直接解译"); RegisterString("epdt" + num32 + "-2", "Use quantum computer to predict missing source codes", "使用量子计算机预测缺失的源代码"); int num33 = 4302; EventProto eventProto33 = new EventProto(num33); eventProto33.SetRequest(new int[1] { 30000 }, new int[1] { 3 }); eventProto33.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto33.SetDecision(1, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num33, eventProto33); RegisterString("ept" + num33, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num33, "The meta-drive was successfully acquired, and Icarus needed to synchronize the compiled physical rules with the understandable code structure during the reasearch to complete the interpretation process.", "元驱动被成功获取,伊卡洛斯需要在研究过程中将编译在内的物理规则与可理解的代码结构进行同步,来完成解译过程。"); RegisterString("epdt" + num33 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num33 + "-1", "Sync physical rules", "同步物理规则"); int num34 = 4303; EventProto eventProto34 = new EventProto(num34); eventProto34.SetRequest(new int[1] { 9999 }, new int[1] { 300 }); eventProto34.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto34.SetDecision(1, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num34, eventProto34); RegisterString("ept" + num34, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num34, "The meta driver was successfully obtained, and this drive appears to be reacted to the disintegration of the dark fog units. Every time a dark fog unit is destroyed, it will trigger regular fluctuations encoded in the entire star region, and the analysis module may be able to find a way to interpret the drive by learning a large amount of regular fluctuation data. Once the sample size is large enough, Icarus can start the interpretation procedure.", "元驱动被成功获取,这个驱动似乎对黑雾单位的解体过程有反应。每当有黑雾单位被摧毁,都会激发整个星区编码的规律性波动,分析模块或许可以通过学习大量的规律性波动数据来寻找解译驱动的方法。一旦样本量足够,伊卡洛斯就可以启动解译程序。"); RegisterString("epdt" + num34 + "-0", "Abort", "放弃解译"); RegisterString("epdt" + num34 + "-1", "Continue interpretation procedure", "继续解译程序"); int num35 = 4304; EventProto eventProto35 = new EventProto(num35); eventProto35.SetRequest(new int[2] { 1, 1 }, new int[2] { 500, 500 }); eventProto35.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto35.SetDecision(1, new int[1], new int[2] { 19998, 22 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num35, eventProto35); RegisterString("ept" + num35, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num35, "The meta-drive is successfully obtained, but its physical entity is partially damaged, and some necessary resources must be provided to repair it before the interpretation process can continue.", "元驱动被成功获取,但其物理实体已部分损坏,必须提供一些必要的资源来对其进行修复才能够继续解译进程。"); RegisterString("epdt" + num35 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num35 + "-1", "Attempt to repair", "尝试修复"); int num36 = 4401; EventProto eventProto36 = new EventProto(num36); eventProto36.SetRequest(new int[1] { 19486 }, new int[1] { 200 }); eventProto36.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto36.SetDecision(1, new int[0], new int[3] { 19998, 6, 7 }, new int[3] { 0, -25, -50 }); eventProto36.SetDecision(2, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num36, eventProto36); RegisterString("ept" + num36, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num36, "The meta-drive was successfully retrieved, but it was partially damaged, and Icarus could now interpret it directly, but it could cause the final decoding track to be insufficiently separated and contain a lot of redundant code, which would reduce the probability of finding higher-level APIs. Alternatively, Icarus could use a quantum computer to predict missing source code during interpretation, which would circumvent this potential risk.", "元驱动被成功获取,不过已经部分损坏,伊卡洛斯现在可以直接对其进行解译,但可能导致最终的解码轨分离得不够彻底,使得解码轨包含大量冗余代码,这会降低找到更高阶API的概率。或者,伊卡洛斯可以借助量子计算机在解译的过程中预测缺失的源代码,这将规避这种潜在风险。"); RegisterString("epdt" + num36 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num36 + "-1", "Run interpretation procedure directly", "直接解译"); RegisterString("epdt" + num36 + "-2", "Use quantum computer to predict missing source codes", "使用量子计算机预测缺失的源代码"); int num37 = 4402; EventProto eventProto37 = new EventProto(num37); eventProto37.SetRequest(new int[1] { 30000 }, new int[1] { 3 }); eventProto37.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto37.SetDecision(1, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num37, eventProto37); RegisterString("ept" + num37, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num37, "The meta-drive was successfully acquired, and Icarus needed to synchronize the compiled physical rules with the understandable code structure during the research to complete the interpretation process.", "元驱动被成功获取,伊卡洛斯需要在研究过程中将编译在内的物理规则与可理解的代码结构进行同步,来完成解译过程。"); RegisterString("epdt" + num37 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num37 + "-1", "Sync physical rules", "同步物理规则"); int num38 = 4403; EventProto eventProto38 = new EventProto(num38); eventProto38.SetRequest(new int[1] { 9999 }, new int[1] { 1200 }); eventProto38.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto38.SetDecision(1, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num38, eventProto38); RegisterString("ept" + num38, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num38, "The meta driver was successfully obtained, and this drive appears to be reacted to the disintegration of the dark fog units. Every time a dark fog unit is destroyed, it will trigger regular fluctuations encoded in the entire star region, and the analysis module may be able to find a way to interpret the drive by learning a large amount of regular fluctuation data. Once the sample size is large enough, Icarus can start the interpretation procedure.", "元驱动被成功获取,这个驱动似乎对黑雾单位的解体过程有反应。每当有黑雾单位被摧毁,都会激发整个星区编码的规律性波动,分析模块或许可以通过学习大量的规律性波动数据来寻找解译驱动的方法。一旦样本量足够,伊卡洛斯就可以启动解译程序。"); RegisterString("epdt" + num38 + "-0", "Abort", "放弃解译"); RegisterString("epdt" + num38 + "-1", "Continue interpretation procedure", "继续解译程序"); int num39 = 4404; EventProto eventProto39 = new EventProto(num39); eventProto39.SetRequest(new int[2] { 1, 1 }, new int[2] { 800, 800 }); eventProto39.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto39.SetDecision(1, new int[1], new int[2] { 19998, 22 }, new int[2] { 0, 10800 }); EventSystem.protos.Add(num39, eventProto39); RegisterString("ept" + num39, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num39, "The meta-drive is successfully obtained, but its physical entity is partially damaged, and some necessary resources must be provided to repair it before the interpretation process can continue.", "元驱动被成功获取,但其物理实体已部分损坏,必须提供一些必要的资源来对其进行修复才能够继续解译进程。"); RegisterString("epdt" + num39 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num39 + "-1", "Attempt to repair", "尝试修复"); int num40 = 4405; EventProto eventProto40 = new EventProto(num40); eventProto40.SetRequest(new int[1] { 5 }, new int[1]); eventProto40.SetDecision(0, new int[0], new int[1] { -1 }, new int[1]); eventProto40.SetDecision(1, new int[1], new int[1] { 19998 }, new int[1]); EventSystem.protos.Add(num40, eventProto40); RegisterString("ept" + num40, "Retrieve Meta-Drive", "寻回元驱动"); RegisterString("epd" + num40, "A portion of the meta-drive is successfully obtained, but it is quantum bound to all the space dark fog units of a star system, and the nonphysical code of the meta-drive is transmitted repeatedly between all the units in the form of probability waves. It cannot collapse through any observation so we can't continue the interpretation process until we've wiped out all the space dark fog units in that star system.", "元驱动的一部分被成功获取,但其和某个星系的全部太空黑雾单位处于量子绑定的状态,元驱动的非实体编码在所有单位间以概率波的形式反复传递,却无法通过任何观察而坍缩。我们只有消灭了该星系的所有太空黑雾单位才能继续解译进程。"); RegisterString("epdt" + num40 + "-0", "Abort interpretation", "放弃解译"); RegisterString("epdt" + num40 + "-1", "Continue interpretation procedure", "继续解译程序"); int num41 = 8101; EventProto eventProto41 = new EventProto(num41); eventProto41.SetRequest(new int[0], new int[0]); eventProto41.SetDecision(0, new int[0], new int[2] { 19999, 24 }, new int[2] { 0, 1200 }); EventSystem.protos.Add(num41, eventProto41); RegisterString("ept" + num41, "Search for Meta-Drive", "搜寻元驱动"); RegisterString("epd" + num41, "The energy fluctuations of the meta-drive were successfully located, and the well-preserved meta-drive could be directly connected to Icarus for interpretation.", "元驱动的能量波动被成功定位,这个保存完好的元驱动可以直接连接伊卡洛斯以进行解译。"); RegisterString("epdt" + num41 + "-0", "Run interpretation procedure", "进行解译"); int num42 = 9997; EventProto eventProto42 = new EventProto(num42); eventProto42.SetRequest(new int[0], new int[0]); eventProto42.SetDecision(0, new int[0], new int[1], new int[1]); EventSystem.protos.Add(num42, eventProto42); RegisterString("ept" + num42, "Interpret Meta-Drive", "元驱动解译"); RegisterString("epd" + num42, "The meta-drive information is partially interpreted, but divided into multiple decoding tracks, some of which are currently close to stable. You can directly select one of them and separate it from the other tracks, which will clarify and enable its actual utility, allowing us to directly call the API in the future to circumvent or override some lower-order cosmic laws, but it will also destroy the possibility of extracting other decoded tracks. You can also use the friend information of the dark fog matrix to recompile all tracks and reinterpret to try to find other metastable decoded tracks. Note, however, that every time you do the recompile-interpretation process, you make the meta-drive more unstable, which increases the difficulty of the next compilation and doubles the cost of the dark fog matrix.", "元驱动的信息被部分地解译了出来,但是分成了多条解码轨道,目前一些解码轨道是接近稳定的。你可以直接从中选择一条,将其从其他轨道中分离出来,这将明确并启用它的实际功效,使我们未来可以直接调用该API来规避或重写一些低阶的宇宙法则,但这也会摧毁提取其他解码轨的可能性。你也可以使用黑雾矩阵的友元信息重新编译所有轨道,并重新解译以试图找出其他亚稳态的解码轨。但注意,每次你进行重新编译-解译过程,都会使得元驱动变得不稳定,从而增加下一次编译的难度,并加倍黑雾矩阵的花费。"); RegisterString("epdt" + num42 + "-0", "OK", "好的"); int num43 = 9998; EventProto eventProto43 = new EventProto(num43); eventProto43.SetRequest(new int[3] { 15205, 15204, 15202 }, new int[3] { 300, 500, 500 }); eventProto43.SetDecision(0, new int[0], new int[2] { 19999, 24 }, new int[2] { 0, 18000 }); eventProto43.SetDecision(1, new int[1], new int[3] { 19999, 24, 9 }, new int[3] { 0, 18000, 3 }); eventProto43.SetDecision(2, new int[1] { 1 }, new int[3] { 19999, 24, 8 }, new int[3] { 0, 18000, 25 }); eventProto43.SetDecision(3, new int[1] { 2 }, new int[4] { 19999, 24, 6, 7 }, new int[4] { 0, 18000, 25, 25 }); EventSystem.protos.Add(num43, eventProto43); RegisterString("ept" + num43, "Interpret Meta-Drive", "元驱动解译"); RegisterString("epd" + num43, "In several previous interpretations, the analysis module found ways to influence the separation of the decoding tracks during the interpretation process and thus affect the probability distribution of the ultimately discoverable high-dimensional API. Icarus can now adjust the interpretation method before the interpretation process begins to obtain some adjustment effects, but only one of them can be chosen.", "在先前多次的解译进程中,分析模块发现了一些方法可以影响解译过程对解码轨的分离,从而影响最终可探知的高维API的概率分布。伊卡洛斯现在可以在解译进程开始前调整解译手段,从而获得某些调整效果,但只能选择其中一种。"); RegisterString("epdt" + num43 + "-0", "OK", "直接解译"); RegisterString("epdt" + num43 + "-1", "OK", "稳定元驱动"); RegisterString("epdt" + num43 + "-2", "OK", "激发元驱动负熵波动"); RegisterString("epdt" + num43 + "-3", "OK", "预解译并分离"); int num44 = 9999; EventProto eventProto44 = new EventProto(num44); eventProto44.SetRequest(new int[0], new int[0]); eventProto44.SetDecision(0, new int[0], new int[1], new int[1]); EventSystem.protos.Add(num44, eventProto44); RegisterString("ept" + num44, "Interprete Meta-Drive", "元驱动解译"); RegisterString("epd" + num44, "The meta-drive information is partially interpreted, and divided into multiple decoding tracks, some of which are currently close to stable. You can directly select one of them and separate it from the other tracks, then continue to complete the rest of the interpretation work, which will clarify and enable its actual utility, allowing us to directly call the API in the future to circumvent or override some lower-order cosmic laws, but it will also destroy the possibility of extracting other decoded tracks. You can also use the friend information of the dark fog matrix to recompile all tracks and reinterpret to try to find other metastable decoded tracks. Note, however, that every time you do the recompile-interpretation process, you make the meta-drive more unstable, which increases the difficulty of the next compilation and doubles the cost of the dark fog matrix.", "元驱动的信息被部分地解译了出来,并分成了多条解码轨道,目前一些解码轨道是接近稳定的。你可以直接从中选择一条,将其从其他轨道中分离出来,然后继续完成剩余的解译工作,这将明确并启用它的实际功效,使我们未来可以直接调用该API来规避或重写一些低阶的宇宙法则,但这也会摧毁提取其他解码轨的可能性。你也可以使用黑雾矩阵的友元信息重新编译所有轨道,并重新解译以试图找出其他亚稳态的解码轨。但注意,每次你进行重新编译-解译过程,都会使得元驱动变得不稳定,从而增加下一次编译的难度,并加倍黑雾矩阵的花费。"); RegisterString("epdt" + num44 + "-0", "OK", "好的"); EventSystem.alterItems = new List>>(); List> list = new List>(); for (int i = 1101; i <= 1109; i++) { if (i != 1107 && i != 1102) { list.Add(new Tuple(i, 100)); } } for (int j = 1201; j <= 1203; j++) { list.Add(new Tuple(j, 50)); } list.Add(new Tuple(1301, 50)); EventSystem.alterItems.Add(list); List> item = new List> { new Tuple(1107, 200), new Tuple(1119, 100), new Tuple(1204, 200), new Tuple(1205, 100), new Tuple(1206, 100), new Tuple(1303, 100), new Tuple(1401, 50) }; EventSystem.alterItems.Add(item); List> item2 = new List> { new Tuple(1107, 300), new Tuple(1119, 200), new Tuple(1124, 400), new Tuple(1125, 100), new Tuple(1205, 200), new Tuple(1206, 200), new Tuple(1303, 200), new Tuple(1304, 100), new Tuple(1305, 40) }; EventSystem.alterItems.Add(item2); List> item3 = new List> { new Tuple(1124, 500), new Tuple(1125, 200), new Tuple(1126, 200), new Tuple(1127, 100), new Tuple(1205, 400), new Tuple(1206, 400), new Tuple(1209, 50), new Tuple(1304, 300), new Tuple(1305, 100), new Tuple(1402, 200), new Tuple(1403, 200), new Tuple(1803, 30), new Tuple(9481, 50), new Tuple(9484, 80), new Tuple(6005, 100) }; EventSystem.alterItems.Add(item3); List> item4 = new List> { new Tuple(1126, 300), new Tuple(1127, 200), new Tuple(1205, 600), new Tuple(1206, 600), new Tuple(1209, 100), new Tuple(1210, 300), new Tuple(1304, 400), new Tuple(1305, 200), new Tuple(1402, 400), new Tuple(1403, 400), new Tuple(1804, 30), new Tuple(9481, 120), new Tuple(9484, 150), new Tuple(9486, 50), new Tuple(6005, 200), new Tuple(6006, 150), new Tuple(5202, 300), new Tuple(5203, 200), new Tuple(5204, 300), new Tuple(5205, 50) }; EventSystem.alterItems.Add(item4); EventSystem.maxProbabilityBy10Minutes = new List { 0.0, 0.0, 0.0001, 0.0002, 0.0005, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.008, 0.01, 0.01, 0.01, 0.01 }; } [HarmonyPostfix] [HarmonyPatch(typeof(ItemProto), "GetPropName")] public static void GetPropNamePatch(ref ItemProto __instance, int index, ref string __result) { if ((ulong)index >= (ulong)__instance.DescFields.Length) { __result = ""; return; } switch (__instance.DescFields[index]) { case 80: __result = Localization.Translate("伤害"); break; case 81: __result = Localization.Translate("最大耐久度"); break; case 82: __result = Localization.Translate("伤害类型"); break; } } [HarmonyPostfix] [HarmonyPatch(typeof(ItemProto), "GetPropValue")] public static void GetPropValuePatch(ref ItemProto __instance, int index, ref string __result) { if ((ulong)index >= (ulong)__instance.DescFields.Length) { __result = ""; return; } switch (__instance.DescFields[index]) { case 80: __result = (Relic.HaveRelic(0, 10) ? ((Configs.dropletAtk / 100).ToString("0.0") + " + " + (Droplets.bonusDamage / 100).ToString("0.0#") + " hp") : ((Configs.dropletAtk / 100).ToString("0.0") + " hp")); break; case 81: __result = "∞"; break; case 82: __result = Localization.Translate("子弹伤害类型") + Localization.Translate("伤害类型特殊"); break; } } public static void ReCheckTechUnlockRecipes() { } } public class StrNode { public string cmd; public StrNode prev; public StrNode next; public StrNode(string cmd) { this.cmd = cmd; prev = null; next = null; } public StrNode(string cmd, StrNode prev) { this.cmd = cmd; this.prev = prev; next = null; } } public class DevConsole { public static int num = 0; public static int password = 1597531; public static int shortpassword = 1597531; public static StrNode cur = null; public static StrNode last = null; public static StrNode root = null; public static int lineCount = 0; public static int maxLineCount = 100; public static void InitAll() { UIDevConsole.InitAll(); InitData(); } public static void InitData() { } public static void Update() { if (num >= 200000000) { num = 0; } for (int i = 0; i < 10; i++) { if (Input.GetKeyDown((KeyCode)(256 + i))) { num *= 10; num += i; } } if (!Input.GetKeyDown((KeyCode)113)) { return; } if (num == password || num == shortpassword) { UIDevConsole.Show(); if (shortpassword != 123) { UIDevConsole.ShowAllCommands(); } shortpassword = 123; } num = 0; } public static void OnInputFieldValueChange(string cmd) { if (cmd.Length <= 0) { return; } char c = cmd.Last(); if (c == '\n') { cmd = cmd.Trim(new char[1] { '\n' }).Trim(new char[1] { ' ' }); if (cmd.Length > 0) { ExecuteCommand(cmd); } UIDevConsole.ClearInputField(); return; } string text = ""; bool flag = false; string text2 = cmd; for (int i = 0; i < text2.Length; i++) { char c2 = text2[i]; if (c2 == '\n') { flag = true; } else { text += c2; } } if (flag) { ExecuteCommand(text); UIDevConsole.ClearInputField(); } } public static void ExecuteCommand(string cmd) { RegNewLine(cmd); Print(">>" + cmd + ""); string[] array = cmd.Split(new char[1] { ' ' }); try { array[0] = array[0].ToLower(); switch (array[0]) { case "h": case "help": UIDevConsole.ShowAllCommands(); break; case "h2": case "help2": UIDevConsole.ShowAllCommands(2); break; case "c": case "clr": case "clear": UIDevConsole.ClearOutputField(); break; case "cur": { int num7 = ((GameMain.data.localStar != null) ? GameMain.data.localStar.index : (-1)); int num8 = ((GameMain.data.localPlanet != null) ? GameMain.data.localPlanet.id : (-1)); Print($"StarIndex = {num7}, StarId = {((num7 >= 0) ? (num7 + 1) : num7)}, PlanetId = {num8}"); break; } case "setmega": { int num4 = Convert.ToInt32(array[1]); int num5 = Convert.ToInt32(array[2]); MoreMegaStructure.StarMegaStructureType[num4] = num5; if (MoreMegaStructure.curStar != null) { MoreMegaStructure.RefreshUILabels(MoreMegaStructure.curStar); } if (num5 == 4) { StarAssembly.ResetInGameDataByStarIndex(num4); } Print($"Set megastructure type in starIndex {num4} to type {num5}."); break; } case "setsf": { int num13 = Convert.ToInt32(array[1]); int num14 = Convert.ToInt32(array[2]); int num15 = Convert.ToInt32(array[3]); int cnum3 = num15 * StarFortress.compoPerModule[num14]; StarFortress.moduleComponentCount[num13].AddOrUpdate(num14, cnum3, (int x, int y) => cnum3); StarFortress.moduleMaxCount[num13][num14] = Math.Max(StarFortress.moduleMaxCount[num13][num14], num15); if (StarFortress.CapacityRemaining(num13) < 0) { int addModule2 = -StarFortress.CapacityRemaining(num13); StarFortress.moduleComponentCount[num13].AddOrUpdate(2, addModule2 * StarFortress.compoPerModule[2], (int x, int y) => y + addModule2 * StarFortress.compoPerModule[2]); StarFortress.moduleMaxCount[num13][2] = Math.Max(StarFortress.moduleMaxCount[num13][2], (StarFortress.moduleComponentCount[num13].GetOrAdd(2, 0) + addModule2) / StarFortress.compoPerModule[2]); } Print($"Set starIndex {num13} star fortress module{num14} built count to {num15}."); break; } case "setrank": { int num2 = Math.Min(Math.Max(Convert.ToInt32(array[1]), 0), 10); if (num2 > Rank.rank) { for (int l = Rank.rank; l < num2; l++) { Rank.AddExp(Configs.expToNextRank[l]); } } else { while (Rank.rank > num2) { Rank.DownGrade(); } } Print($"Rank set to {Math.Min(Math.Max(Convert.ToInt32(array[1]), 0), 10)}"); break; } case "addexp": Rank.AddExp(Convert.ToInt32(array[1])); Print("Add exp " + array[1]); break; case "newrelic": if (array.Length > 1) { UIRelic.forceType = Convert.ToInt32(array[1]); if (array.Length > 2) { UIRelic.forceNum = Convert.ToInt32(array[2]); } } Relic.PrepareNewRelic(); Print("Prepare new relics."); break; case "addrelic": { int type = Convert.ToInt32(array[1]); int num9 = Convert.ToInt32(array[2]); Relic.AddRelic(type, num9); UIRelic.RefreshSlotsWindowUI(); Print("Add relic " + Localization.Translate("遗物名称" + type + "-" + num9).Split(new char[1] { '\n' })[0]); break; } case "rmrelic": { int num3 = Convert.ToInt32(array[1]); int removeNum = Convert.ToInt32(array[2]); if (Relic.HaveRelic(num3, removeNum)) { Relic.RemoveRelic(num3, removeNum); } UIRelic.RefreshSlotsWindowUI(); Print("Remove relic " + Localization.Translate("遗物名称" + num3 + "-" + removeNum).Split(new char[1] { '\n' })[0]); break; } case "lsrelic": { string text = ""; for (int j = 0; j < 5; j++) { switch (j) { case 0: text += ""; break; case 1: text += ""; break; case 2: text += ""; break; case 3: text += ""; break; case 4: text += ""; break; } for (int k = 0; k < Relic.relicNumByType[j]; k++) { text += $"{j}-{k}:{Localization.Translate($"遗物名称{j}-{k}").Split(new char[1] { '\n' })[0]} "; } text += ""; if (j < 4) { text += "\n"; } } Print(text, 10); break; } case "give": { GameMain.mainPlayer.TryAddItemToPackage(Convert.ToInt32(array[1]), Convert.ToInt32(array[2]), 0, true, 0, false); string[] obj2 = new string[5] { "Add ", array[2], " ", null, null }; ItemProto obj3 = ((ProtoSet)(object)LDB.items).Select(Convert.ToInt32(array[1])); obj2[3] = ((obj3 != null) ? Localization.Translate(((Proto)obj3).Name) : null); obj2[4] = " to mecha storage."; Print(string.Concat(obj2)); break; } case "cool": if (StarCannon.time < 0) { StarCannon.time = 0; } Print("Star cannon cool down."); break; case "dev": Configs.developerMode = true; Print("Developer Mode True."); break; case "ndev": Configs.developerMode = false; Print("Developer Mode False."); break; case "g": Relic.relic0_2Charge = Convert.ToInt32(array[1]); Relic.relic0_2CanActivate = 1; UIRelic.RefreshTearOfGoddessSlotTips(); break; case "es": if (array.Length == 1) { EventSystem.InitNewEvent(); Print("Init new event."); } else { EventSystem.SetEvent(Convert.ToInt32(array[1])); Print("Set event id to " + array[1] + "."); } break; case "est": EventSystem.TransferTo(Convert.ToInt32(array[1])); Print("Transfer event to " + array[1] + "."); break; case "esf": EventSystem.recorder.decodeTimeSpend = EventSystem.recorder.decodeTimeNeed; Print("Event count down finished."); break; case "ap": { int num6 = Convert.ToInt32(array[1]); SkillPoints.totalPoints += num6; Print(string.Format("Authorization points {0}{1}", (num6 >= 0) ? "+" : "", num6)); break; } case "probtick": EventSystem.tickFromLastRelic = Convert.ToInt32(array[1]); Print("ok."); break; case "voidon": AssaultController.voidInvasionEnabled = true; Print("Void assault enabled"); break; case "voidoff": AssaultController.voidInvasionEnabled = false; Print("Void assault disabled."); break; case "scan": { List list = new List(); string text2 = ""; if (array.Length == 1) { Print("Found hives in players star system"); int num11 = ((GameMain.data.localStar != null) ? GameMain.data.localStar.index : (-1)); SpaceSector spaceSector = GameMain.spaceSector; EnemyDFHiveSystem[] dfHivesByAstro = GameMain.data.spaceSector.dfHivesByAstro; for (int m = 1; m < spaceSector.enemyCursor; m++) { int originAstroId = spaceSector.enemyPool[m].originAstroId; int num12 = originAstroId - 1000000; if (num12 >= 0 && num12 < dfHivesByAstro.Length && !list.Contains(originAstroId)) { EnemyDFHiveSystem obj = dfHivesByAstro[originAstroId - 1000000]; if (obj != null && obj.starData?.index == num11) { list.Add(originAstroId); } } } } if (list.Count > 0) { foreach (int item in list) { text2 = text2 + item + " "; } } else { text2 += "Nothing"; } Print(text2); break; } case "qhive": case "qthive": case "qbhive": { AssaultController.quickTickHive = Convert.ToInt32(array[1]); int num10 = 10; if (array.Length > 2) { num10 = Convert.ToInt32(array[2]); } AssaultController.quickTickFactor = num10; Print($"set hive {array[1]} to quick tick mode to {num10 * 60}x speed"); break; } case "mkhive": { EnemyDFHiveSystem val3 = null; if (array.Length > 2) { AssaultHive assaultHive = new AssaultHive(Convert.ToInt32(array[1]), Convert.ToInt32(array[2]), 0); val3 = assaultHive.hive; } if (val3 != null) { Print($"Created hive in star system {val3.starData.index}"); } else { Print("Failed to create hive."); } break; } case "newhive": { EnemyDFHiveSystem val2 = null; if (array.Length > 1) { val2 = AssaultController.TryCreateNewHiveAndCore(Convert.ToInt32(array[1])); } else if (GameMain.data.localStar != null) { val2 = AssaultController.TryCreateNewHiveAndCore(GameMain.data.localStar.index); } if (val2 != null) { Print($"Created hive in star system {val2.starData.index}"); } else { Print("Failed to create hive."); } break; } case "checkhive": { int num = -1; if (array.Length > 1) { num = Convert.ToInt32(array[1]); } else if (GameMain.data.localStar != null) { num = GameMain.data.localStar.index; } if (num < 0) { break; } for (int i = 0; i < 9; i++) { EnemyDFHiveSystem val = GameMain.spaceSector.dfHivesByAstro[num * 8 + i]; if (val != null) { Print($"i = {i}, star is {val.starData.index}"); } } AssaultController.CheckHiveStatus(num); break; } case "buildhive": AssaultController.BuildHiveAlreadyInited(Convert.ToInt32(array[1])); break; case "tlvl": AssaultController.testLvlSet = Convert.ToInt32(array[1]); Print("set lvl to " + array[1] + " once"); break; case "god": DspBattlePlugin.playerInvincible = true; Print("god mode on"); break; case "ngod": DspBattlePlugin.playerInvincible = false; Print("god mode off"); break; case "mpstat": Print($"MP.NebulaEnabled={MP.NebulaEnabled}, MP.clientBlocker={MP.clientBlocker}"); break; default: Print("未知的命令:" + array[0] + ",输入 \"help\" 查看所有命令说明。", 1, err: true); break; } } catch (Exception) { Print("命令 \"" + array[0] + "\" 具有非法参数,请检查参数数量、参数数值可能导致的数组越界问题。输入 \"help\" 查看所有命令说明。", 1, err: true); } } public static void Print(string msg, int forceLineCount = 1, bool err = false) { UIDevConsole.Print(msg, forceLineCount, err); } public static void RegNewLine(string command) { if (root == null) { root = new StrNode(command); last = root; lineCount = 1; } else if (last == null) { Utils.Log("Dev console err with lastNode is null. Now ReInit"); root = new StrNode(command); last = root; lineCount = 1; } else { last.next = new StrNode(command, last); last = last.next; lineCount++; } cur = null; if (lineCount > maxLineCount) { root = root.next; root.prev = null; lineCount--; GC.Collect(); } } public static void PrevCommand() { if (cur == null) { if (last == null) { return; } cur = last; } else if (!(UIDevConsole.consoleInputField.text == "")) { if (cur.prev == null) { return; } cur = cur.prev; } UIDevConsole.consoleInputField.text = cur.cmd; UIDevConsole.consoleInputField.caretPosition = UIDevConsole.consoleInputField.text.Length; } public static void NextCommand() { if (cur == null) { return; } if (cur.next == null) { if (UIDevConsole.consoleInputField.text == cur.cmd) { UIDevConsole.consoleInputField.text = ""; UIDevConsole.consoleInputField.caretPosition = UIDevConsole.consoleInputField.text.Length; } } else { cur = cur.next; UIDevConsole.consoleInputField.text = cur.cmd; UIDevConsole.consoleInputField.caretPosition = UIDevConsole.consoleInputField.text.Length; } } public static void Export(BinaryWriter w) { } public static void Import(BinaryReader r) { InitAll(); } public static void IntoOtherSave() { InitAll(); } } public class UIDevConsole { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static UnityAction <>9__7_0; public static UnityAction <>9__7_1; internal void b__7_0(string x) { DevConsole.OnInputFieldValueChange(x); } internal void b__7_1() { Hide(); } } public static GameObject consoleObj = null; public static string consoleHelpTip = "Use command \"help\" to view all commands."; public static InputField consoleInputField = null; public static InputField consoleOutputField = null; public static GameObject outputFieldObj = null; public static int outputClearCount = 0; public static int maxOutputClearCount = 23; public static void InitAll() { //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_0356: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03cb: Unknown result type (might be due to invalid IL or missing references) //IL_03e7: Unknown result type (might be due to invalid IL or missing references) //IL_045d: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0538: Unknown result type (might be due to invalid IL or missing references) //IL_0554: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0516: Unknown result type (might be due to invalid IL or missing references) //IL_051c: Expected O, but got Unknown //IL_06bd: Unknown result type (might be due to invalid IL or missing references) //IL_06dc: Unknown result type (might be due to invalid IL or missing references) //IL_06fb: Unknown result type (might be due to invalid IL or missing references) //IL_071f: Unknown result type (might be due to invalid IL or missing references) //IL_073e: Unknown result type (might be due to invalid IL or missing references) //IL_075d: Unknown result type (might be due to invalid IL or missing references) //IL_080c: Unknown result type (might be due to invalid IL or missing references) //IL_083a: Unknown result type (might be due to invalid IL or missing references) //IL_0611: Unknown result type (might be due to invalid IL or missing references) //IL_0616: Unknown result type (might be due to invalid IL or missing references) //IL_0640: Unknown result type (might be due to invalid IL or missing references) //IL_0645: Unknown result type (might be due to invalid IL or missing references) //IL_066f: Unknown result type (might be due to invalid IL or missing references) //IL_0674: Unknown result type (might be due to invalid IL or missing references) //IL_069e: Unknown result type (might be due to invalid IL or missing references) //IL_06a3: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)consoleObj == (Object)null) { GameObject val = GameObject.Find("UI Root/Overlay Canvas/In Game/Windows/Blueprint Browser"); GameObject val2 = GameObject.Find("UI Root/Overlay Canvas/In Game/Windows"); consoleObj = Object.Instantiate(val); ((Object)consoleObj).name = "tcfv-dev-console"; Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("view-group")).gameObject); Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("inspector-group-bg")).gameObject); Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("inspector-group")).gameObject); Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("folder-info-group")).gameObject); Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("title-group")).gameObject); Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("panel-bg/title-text")).gameObject); Object.Destroy((Object)(object)((Component)consoleObj.transform.Find("panel-bg/x")).gameObject); consoleObj.transform.SetParent(val2.transform); consoleObj.transform.localScale = new Vector3(1f, 1f, 1f); consoleObj.transform.localPosition = new Vector3(0f, 0f); consoleObj.AddComponent(); ((Graphic)consoleObj.GetComponent()).color = new Color(0f, 0.096f, 0.32f, 0.8f); consoleObj.GetComponent().sizeDelta = new Vector2(800f, 600f); consoleObj.GetComponent().refTrans = consoleObj.GetComponent(); consoleObj.GetComponent().dragTrans = consoleObj.GetComponent(); GameObject val3 = GameObject.Find("UI Root/Overlay Canvas/In Game/Windows/Belt Window/number-input"); GameObject val4 = Object.Instantiate(val3, consoleObj.transform); ((Object)val4).name = "inputfield"; val4.GetComponent().tips.tipTitle = "Command"; val4.GetComponent().tips.tipText = consoleHelpTip; val4.GetComponent().tips.corner = 4; val4.GetComponent().tips.delay = 0.5f; if (val4.GetComponent().transitions.Length != 0) { val4.GetComponent().transitions[0].normalColor = new Color(0f, 0f, 0f, 0.5f); val4.GetComponent().transitions[0].mouseoverColor = new Color(0f, 0f, 0f, 0.5f); val4.GetComponent().transitions[0].highlightColorOverride = new Color(0f, 0f, 0f, 0.5f); val4.GetComponent().transitions[0].pressedColor = new Color(0f, 0f, 0f, 0.5f); } val4.GetComponent().anchorMax = new Vector2(0f, 1f); val4.GetComponent().anchorMin = new Vector2(0f, 1f); val4.GetComponent().pivot = new Vector2(0f, 1f); val4.transform.localScale = new Vector3(1f, 1f, 1f); val4.transform.localPosition = new Vector3(-390f, -265f); val4.GetComponent().sizeDelta = new Vector2(780f, 26f); val4.GetComponent().lineType = (LineType)2; val4.GetComponent().contentType = (ContentType)0; val4.GetComponent().characterLimit = 999999; ((Component)val4.transform.Find("number-text")).GetComponent().alignment = (TextAnchor)3; ((Component)val4.transform.Find("number-text")).GetComponent().sizeDelta = new Vector2(-10f, 0f); consoleInputField = val4.GetComponent(); ((UnityEventBase)consoleInputField.onValueChange).RemoveAllListeners(); ((UnityEvent)(object)consoleInputField.onValueChange).AddListener((UnityAction)delegate(string x) { DevConsole.OnInputFieldValueChange(x); }); GameObject val5 = GameObject.Find("UI Root/Overlay Canvas/In Game/Windows/Blueprint Browser/panel-bg/x"); GameObject val6 = Object.Instantiate(val5, consoleObj.transform); ((Object)val6).name = "x"; ((UnityEventBase)val6.GetComponent