Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LCC v1.1.2
plugins/LCC.dll
Decompiled a day ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using LCC.Core; using LCC.Effects; using LCC.UI; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")] [assembly: AssemblyCompany("LCC")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+09196009381654267cc9be2836d4ac677cefda7b")] [assembly: AssemblyProduct("LCC")] [assembly: AssemblyTitle("LCC")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace LCC { public static class ValConfig { public static ConfigEntry<bool> LeechEnabled = null; public static ConfigEntry<string> LeechAllowedTypes = null; public static ConfigEntry<float> LeechHealRatio = null; public static ConfigEntry<bool> LeechChatEnabled = null; public static ConfigEntry<bool> VenomEnabled = null; public static ConfigEntry<string> VenomAllowedTypes = null; public static ConfigEntry<bool> VenomChatEnabled = null; public static ConfigEntry<float> VenomDamage = null; public static ConfigEntry<bool> OpportunistEnabled = null; public static ConfigEntry<string> OpportunistAllowedTypes = null; public static ConfigEntry<bool> OpportunistChatEnabled = null; public static ConfigEntry<bool> WolfMasterEnabled = null; public static ConfigEntry<string> WolfMasterAllowedTypes = null; public static ConfigEntry<bool> WolfMasterChatEnabled = null; public static ConfigEntry<int> WolfMasterCount = null; public static ConfigEntry<float> WolfMasterCastTime = null; public static ConfigEntry<float> WolfMasterCommandInterval = null; public static ConfigEntry<float> WolfMasterRespawnInterval = null; public static ConfigEntry<float> WolfMasterHealthPercent = null; public static ConfigEntry<float> WolfMasterDamagePercent = null; public static ConfigEntry<float> WolfMasterFollowDistance = null; public static ConfigEntry<float> WolfMasterAttackSpeed = null; public static ConfigEntry<float> WolfMasterAttackCooldown = null; public static ConfigEntry<float> WolfMasterMoveSpeed = null; public static ConfigEntry<float> WolfMasterRetreatHeal = null; public static ConfigEntry<bool> BloodHunterEnabled = null; public static ConfigEntry<string> BloodHunterAllowedTypes = null; public static ConfigEntry<bool> BloodHunterChatEnabled = null; public static ConfigEntry<float> BloodHunterHuntPct = null; public static ConfigEntry<float> BloodHunterExecutePct = null; public static ConfigEntry<float> BloodHunterMoveMul = null; public static ConfigEntry<float> BloodHunterDamageMul = null; public static ConfigEntry<float> BloodHunterStaminaPct = null; public static ConfigEntry<float> BloodHunterSearchRange = null; public static ConfigEntry<bool> LastStandEnabled = null; public static ConfigEntry<string> LastStandAllowedTypes = null; public static ConfigEntry<float> LastStandHealthRatio = null; public static ConfigEntry<float> LastStandCastTime = null; public static ConfigEntry<float> LastStandExplodeRadius = null; public static ConfigEntry<float> LastStandExplodeDamageMul = null; public static ConfigEntry<bool> LastStandChatEnabled = null; public static ConfigEntry<bool> PackEnabled = null; public static ConfigEntry<string> PackAllowedTypes = null; public static ConfigEntry<float> PackDamagePerMember = null; public static ConfigEntry<float> PackSpeedPerMember = null; public static ConfigEntry<int> PackMaxBonus = null; public static ConfigEntry<bool> PackChatEnabled = null; public static ConfigEntry<bool> CurseEnabled = null; public static ConfigEntry<string> CurseAllowedTypes = null; public static ConfigEntry<float> CurseInterval = null; public static ConfigEntry<float> CurseDuration = null; public static ConfigEntry<int> CurseMaxStacks = null; public static ConfigEntry<float> CurseMarkDuration = null; public static ConfigEntry<float> CurseStackInterval = null; public static ConfigEntry<float> CurseTauntStackInterval = null; public static ConfigEntry<float> CurseTauntRange = null; public static ConfigEntry<bool> CurseChatEnabled = null; public static ConfigEntry<bool> DarkJudgeEnabled = null; public static ConfigEntry<string> DarkJudgeAllowedTypes = null; public static ConfigEntry<float> DarkJudgeInterval = null; public static ConfigEntry<float> DarkJudgeDuration = null; public static ConfigEntry<float> DarkJudgeRange = null; public static ConfigEntry<float> DarkJudgeVisionDistance = null; public static ConfigEntry<float> DarkJudgePenaltyPercent = null; public static ConfigEntry<bool> DarkJudgeChatEnabled = null; public static ConfigEntry<bool> AmaterasuEnabled = null; public static ConfigEntry<string> AmaterasuAllowedTypes = null; public static ConfigEntry<float> AmaterasuInterval = null; public static ConfigEntry<int> AmaterasuMinionCount = null; public static ConfigEntry<float> AmaterasuHealInterval = null; public static ConfigEntry<float> AmaterasuHealPercent = null; public static ConfigEntry<int> AmaterasuBoomToBreak = null; public static ConfigEntry<float> AmaterasuBoomRadius = null; public static ConfigEntry<float> AmaterasuBreakHealthPercent = null; public static ConfigEntry<bool> AmaterasuChatEnabled = null; public static ConfigEntry<bool> DuelEnabled = null; public static ConfigEntry<string> DuelAllowedTypes = null; public static ConfigEntry<float> DuelTriggerHealth = null; public static ConfigEntry<float> DuelAttackSpeedMult = null; public static ConfigEntry<float> DuelCooldownMult = null; public static ConfigEntry<float> DuelMoveSpeedMult = null; public static ConfigEntry<bool> DuelChatEnabled = null; public static ConfigEntry<bool> ArenaEnabled = null; public static ConfigEntry<string> ArenaAllowedTypes = null; public static ConfigEntry<string> ArenaTriggerHealths = null; public static ConfigEntry<float> ArenaRadius = null; public static ConfigEntry<float> ArenaBoundaryInset = null; public static ConfigEntry<float> ArenaPullDistance = null; public static ConfigEntry<float> ArenaPullTime = null; public static ConfigEntry<float> ArenaCountdown = null; public static ConfigEntry<float> ArenaDuration = null; public static ConfigEntry<float> ArenaBossScale = null; public static ConfigEntry<float> ArenaFenceHeight = null; public static ConfigEntry<int> ArenaFenceCount = null; public static ConfigEntry<float> ArenaCooldownMult = null; public static ConfigEntry<float> ArenaAttackSpeedMult = null; public static ConfigEntry<float> ArenaShieldHeightScale = null; public static ConfigEntry<bool> ArenaChatEnabled = null; public static ConfigEntry<bool> ThiefEnabled = null; public static ConfigEntry<string> ThiefAllowedTypes = null; public static ConfigEntry<float> ThiefMoveSpeedMult = null; public static ConfigEntry<float> ThiefDamageMult = null; public static ConfigEntry<float> ThiefAttackSpeedMult = null; public static ConfigEntry<float> ThiefCooldownMult = null; public static ConfigEntry<float> ThiefFleeDuration = null; public static ConfigEntry<bool> ThiefChatEnabled = null; public static ConfigEntry<float> ThiefStealChance = null; public static ConfigEntry<bool> FireApostleEnabled = null; public static ConfigEntry<string> FireApostleAllowedTypes = null; public static ConfigEntry<float> FireApostleDamageMult = null; public static ConfigEntry<bool> IceApostleEnabled = null; public static ConfigEntry<string> IceApostleAllowedTypes = null; public static ConfigEntry<float> IceApostleSpeedPerLayer = null; public static ConfigEntry<int> IceApostleMaxLayers = null; public static ConfigEntry<float> IceApostleScanRadius = null; public static ConfigEntry<float> IceApostleScanInterval = null; public static ConfigEntry<bool> TwinBladeEnabled = null; public static ConfigEntry<string> TwinBladeAllowedTypes = null; public static ConfigEntry<float> TwinBladeAttackSpeedMult = null; public static ConfigEntry<float> TwinBladeDamageMult = null; public static ConfigEntry<bool> PoisonApostleEnabled = null; public static ConfigEntry<string> PoisonApostleAllowedTypes = null; public static ConfigEntry<bool> MartyrEnabled = null; public static ConfigEntry<string> MartyrAllowedTypes = null; public static ConfigEntry<float> MartyrFuseTime = null; public static ConfigEntry<float> MartyrTriggerRange = null; public static ConfigEntry<float> MartyrBlastRadius = null; public static ConfigEntry<float> MartyrDamageMult = null; public static ConfigEntry<bool> VoidEnabled = null; public static ConfigEntry<string> VoidAllowedTypes = null; public static ConfigEntry<bool> TimeHunterEnabled = null; public static ConfigEntry<string> TimeHunterAllowedTypes = null; public static ConfigEntry<float> TimeHunterTeleportRadius = null; public static ConfigEntry<float> TimeHunterInterval = null; public static ConfigEntry<float> TimeHunterExecuteInterval = null; public static ConfigEntry<float> TimeHunterExecuteSpeedMult = null; public static ConfigEntry<float> TimeHunterExecuteStepInterval = null; public static ConfigEntry<bool> SunApostleEnabled = null; public static ConfigEntry<string> SunApostleAllowedTypes = null; public static ConfigEntry<float> SunApostleAttackMult = null; public static ConfigEntry<float> SunApostleHealthMult = null; public static ConfigEntry<float> SunApostleRegenPerSec = null; public static ConfigEntry<float> SunApostleMoveSpeedMult = null; public static ConfigEntry<float> SunApostleAttackSpeedMult = null; public static ConfigEntry<float> SunApostleCooldownMult = null; public static ConfigEntry<float> SunApostleScaleMult = null; public static ConfigEntry<float> SunApostleNightAttackMult = null; public static ConfigEntry<float> SunApostleNightHealthMult = null; public static ConfigEntry<bool> NightApostleEnabled = null; public static ConfigEntry<string> NightApostleAllowedTypes = null; public static ConfigEntry<float> NightApostleAttackMult = null; public static ConfigEntry<float> NightApostleHealthMult = null; public static ConfigEntry<float> NightApostleRegenPerSec = null; public static ConfigEntry<float> NightApostleMoveSpeedMult = null; public static ConfigEntry<float> NightApostleAttackSpeedMult = null; public static ConfigEntry<float> NightApostleCooldownMult = null; public static ConfigEntry<float> NightApostleScaleMult = null; public static ConfigEntry<float> NightApostleDayAttackMult = null; public static ConfigEntry<float> NightApostleDayHealthMult = null; public static ConfigEntry<bool> SoulEnabled = null; public static ConfigEntry<string> SoulAllowedTypes = null; public static ConfigEntry<float> SoulDownDelay = null; public static ConfigEntry<float> SoulReviveRange = null; public static ConfigEntry<int> SoulMinCount = null; public static ConfigEntry<bool> SoulChatEnabled = null; public static ConfigEntry<bool> StarControlEnabled = null; public static ConfigEntry<float> StarChanceRegular = null; public static ConfigEntry<float> StarChanceMiniboss = null; public static ConfigEntry<float> StarChanceBoss = null; public static ConfigEntry<int> StarMinLevelRegular = null; public static ConfigEntry<int> StarMinLevelMiniboss = null; public static ConfigEntry<int> StarMinLevelBoss = null; public static ConfigEntry<int> StarMaxLevelRegular = null; public static ConfigEntry<int> StarMaxLevelMiniboss = null; public static ConfigEntry<int> StarMaxLevelBoss = null; public static ConfigEntry<float> StarHealthPerStar = null; public static ConfigEntry<float> StarDamagePerStar = null; public static ConfigEntry<float> StarMovePerStar = null; public static ConfigEntry<float> StarAttackSpeedPerStar = null; public static ConfigEntry<float> StarCooldownPerStar = null; public static ConfigEntry<float> StarBodySizePerStar = null; public static ConfigEntry<float> GlobalHealthMulRegular = null; public static ConfigEntry<float> GlobalHealthMulMiniboss = null; public static ConfigEntry<float> GlobalHealthMulBoss = null; public static ConfigEntry<float> GlobalDamageMulRegular = null; public static ConfigEntry<float> GlobalDamageMulMiniboss = null; public static ConfigEntry<float> GlobalDamageMulBoss = null; public static ConfigEntry<float> GlobalMoveMulRegular = null; public static ConfigEntry<float> GlobalMoveMulMiniboss = null; public static ConfigEntry<float> GlobalMoveMulBoss = null; public static ConfigEntry<float> GlobalAttackSpeedMulRegular = null; public static ConfigEntry<float> GlobalAttackSpeedMulMiniboss = null; public static ConfigEntry<float> GlobalAttackSpeedMulBoss = null; public static ConfigEntry<float> GlobalCooldownMulRegular = null; public static ConfigEntry<float> GlobalCooldownMulMiniboss = null; public static ConfigEntry<float> GlobalCooldownMulBoss = null; public static ConfigEntry<float> SenseMulRegular = null; public static ConfigEntry<float> SenseMulMiniboss = null; public static ConfigEntry<float> SenseMulBoss = null; public static ConfigEntry<float> ChaseMulRegular = null; public static ConfigEntry<float> ChaseMulMiniboss = null; public static ConfigEntry<float> ChaseMulBoss = null; public static ConfigEntry<float> EnhanceChanceRegular = null; public static ConfigEntry<float> EnhanceChanceMiniboss = null; public static ConfigEntry<float> EnhanceChanceBoss = null; public static ConfigEntry<float> EnhanceDetachChance = null; public static ConfigEntry<int> LeechWeight = null; public static ConfigEntry<int> VenomWeight = null; public static ConfigEntry<int> OpportunistWeight = null; public static ConfigEntry<int> WolfMasterWeight = null; public static ConfigEntry<int> BloodHunterWeight = null; public static ConfigEntry<int> LastStandWeight = null; public static ConfigEntry<int> PackWeight = null; public static ConfigEntry<int> CurseWeight = null; public static ConfigEntry<int> DarkJudgeWeight = null; public static ConfigEntry<int> AmaterasuWeight = null; public static ConfigEntry<int> DuelWeight = null; public static ConfigEntry<int> ArenaWeight = null; public static ConfigEntry<int> ThiefWeight = null; public static ConfigEntry<int> SoulWeight = null; public static ConfigEntry<int> EnrageWeight = null; public static ConfigEntry<int> SwiftWeight = null; public static ConfigEntry<int> RegenWeight = null; public static ConfigEntry<int> ElementalShieldWeight = null; public static ConfigEntry<int> ElementalHealWeight = null; public static ConfigEntry<int> ElementalReflectWeight = null; public static ConfigEntry<int> BalancedWeight = null; public static ConfigEntry<int> ReflectWeight = null; public static ConfigEntry<int> ShareWeight = null; public static ConfigEntry<int> AuthorityWeight = null; public static ConfigEntry<int> AssassinWeight = null; public static ConfigEntry<int> PriestWeight = null; public static ConfigEntry<int> DevourWeight = null; public static ConfigEntry<int> DesperateWeight = null; public static ConfigEntry<int> CharmWeight = null; public static ConfigEntry<int> ParasiteWeight = null; public static ConfigEntry<int> ManavoidWeight = null; public static ConfigEntry<int> ShadowWeight = null; public static ConfigEntry<int> TwinWeight = null; public static ConfigEntry<int> RoninWeight = null; public static ConfigEntry<int> ChaosWeight = null; public static ConfigEntry<int> LuckyWeight = null; public static ConfigEntry<int> FireApostleWeight = null; public static ConfigEntry<int> IceApostleWeight = null; public static ConfigEntry<int> TwinBladeWeight = null; public static ConfigEntry<int> PoisonApostleWeight = null; public static ConfigEntry<int> MartyrWeight = null; public static ConfigEntry<int> VoidWeight = null; public static ConfigEntry<int> TimeHunterWeight = null; public static ConfigEntry<int> SunApostleWeight = null; public static ConfigEntry<int> NightApostleWeight = null; public static ConfigEntry<int> FlurryWeight = null; public static ConfigEntry<bool> ManavoidEnabled = null; public static ConfigEntry<string> ManavoidAllowedTypes = null; public static ConfigEntry<float> ManavoidInterval = null; public static ConfigEntry<float> ManavoidRange = null; public static ConfigEntry<float> ManavoidDuration = null; public static ConfigEntry<bool> ManavoidChatEnabled = null; public static ConfigEntry<bool> ShadowEnabled = null; public static ConfigEntry<string> ShadowAllowedTypes = null; public static ConfigEntry<float> ShadowLowHpThreshold = null; public static ConfigEntry<float> ShadowSearchRange = null; public static ConfigEntry<float> ShadowBreakDamage = null; public static ConfigEntry<float> ShadowRehideDelay = null; public static ConfigEntry<bool> ShadowChatEnabled = null; public static ConfigEntry<float> PriestSiphonRange = null; public static ConfigEntry<float> PriestSiphonLockDuration = null; public static ConfigEntry<bool> TwinEnabled = null; public static ConfigEntry<string> TwinAllowedTypes = null; public static ConfigEntry<float> TwinDeadDiff = null; public static ConfigEntry<float> TwinReviveDelay = null; public static ConfigEntry<bool> TwinChatEnabled = null; public static ConfigEntry<bool> RoninEnabled = null; public static ConfigEntry<string> RoninAllowedTypes = null; public static ConfigEntry<float> RoninAttackInterval = null; public static ConfigEntry<float> RoninAnimSpeed = null; public static ConfigEntry<float> RoninDamageMul = null; public static ConfigEntry<bool> ChaosEnabled = null; public static ConfigEntry<string> ChaosAllowedTypes = null; public static ConfigEntry<bool> LuckyEnabled = null; public static ConfigEntry<string> LuckyAllowedTypes = null; public static ConfigEntry<float> LuckyMin = null; public static ConfigEntry<float> LuckyMax = null; public static ConfigEntry<bool> FlurryEnabled = null; public static ConfigEntry<string> FlurryAllowedTypes = null; public static ConfigEntry<float> FlurryMinSpeed = null; public static ConfigEntry<float> FlurryMaxSpeed = null; public static ConfigEntry<bool> EnableModLogging = null; public static ConfigEntry<bool> EnableDebugLogging = null; public static ConfigEntry<bool> CenterTextMaster = null; public static ConfigEntry<bool> BubbleMaster = null; public static ConfigEntry<bool> LootBoostEnabled = null; public static ConfigEntry<float> LootChancePerStar = null; public static ConfigEntry<float> LootChancePerEnhance = null; public static ConfigEntry<float> LootChanceCap = null; public static ConfigEntry<int> LootAmountPerStar = null; public static ConfigEntry<int> LootRareBonus = null; public static ConfigEntry<bool> LootStackEnabled = null; public static ConfigEntry<int> LootMaxPerItem = null; public static ConfigEntry<int> LootStarMultCap = null; public static ConfigEntry<bool> EnrageEnabled = null; public static ConfigEntry<string> EnrageAllowedTypes = null; public static ConfigEntry<float> EnrageHealthThreshold = null; public static ConfigEntry<float> EnrageDuration = null; public static ConfigEntry<float> EnrageAttackCooldownMul = null; public static ConfigEntry<float> EnrageAttackSpeedMul = null; public static ConfigEntry<float> EnrageMoveSpeedMul = null; public static ConfigEntry<bool> EnrageChatEnabled = null; public static ConfigEntry<bool> SwiftEnabled = null; public static ConfigEntry<string> SwiftAllowedTypes = null; public static ConfigEntry<float> SwiftMoveSpeedMul = null; public static ConfigEntry<float> SwiftAttackCooldownMul = null; public static ConfigEntry<bool> RegenEnabled = null; public static ConfigEntry<string> RegenAllowedTypes = null; public static ConfigEntry<float> RegenOutOfCombatDelay = null; public static ConfigEntry<float> RegenHealPercent = null; public static ConfigEntry<bool> ElementalEnabled = null; public static ConfigEntry<string> ElementalAllowedTypes = null; public static ConfigEntry<float> ElementalInterval = null; public static ConfigEntry<float> ElementalWarnAhead = null; public static ConfigEntry<bool> ElementalHealEnabled = null; public static ConfigEntry<string> ElementalHealAllowedTypes = null; public static ConfigEntry<bool> ElementalReflectEnabled = null; public static ConfigEntry<string> ElementalReflectAllowedTypes = null; public static ConfigEntry<bool> BalancedEnabled = null; public static ConfigEntry<string> BalancedAllowedTypes = null; public static ConfigEntry<float> BalancedInterval = null; public static ConfigEntry<float> BalancedWindow = null; public static ConfigEntry<float> BalancedReduceStart = null; public static ConfigEntry<float> BalancedReduceStep = null; public static ConfigEntry<float> BalancedIncreaseStep = null; public static ConfigEntry<float> BalancedIncreaseCap = null; public static ConfigEntry<float> BalancedWarnAhead = null; public static ConfigEntry<bool> ReflectEnabled = null; public static ConfigEntry<string> ReflectAllowedTypes = null; public static ConfigEntry<float> ReflectInterval = null; public static ConfigEntry<float> ReflectDuration = null; public static ConfigEntry<float> ReflectWarnAhead = null; public static ConfigEntry<bool> ReflectChatEnabled = null; public static ConfigEntry<bool> ShareEnabled = null; public static ConfigEntry<string> ShareAllowedTypes = null; public static ConfigEntry<int> ShareMinSame = null; public static ConfigEntry<bool> ShareChatEnabled = null; public static ConfigEntry<float> ShareChatCooldown = null; public static ConfigEntry<bool> AuthorityEnabled = null; public static ConfigEntry<string> AuthorityAllowedTypes = null; public static ConfigEntry<float> AuthorityReviveDelay = null; public static ConfigEntry<float> AuthorityLeaderHealthMul = null; public static ConfigEntry<float> AuthorityLeaderScaleMul = null; public static ConfigEntry<int> AuthorityMinMembers = null; public static ConfigEntry<bool> AuthorityChatEnabled = null; public static ConfigEntry<bool> AssassinEnabled = null; public static ConfigEntry<string> AssassinAllowedTypes = null; public static ConfigEntry<bool> AssassinChatEnabled = null; public static ConfigEntry<bool> PriestEnabled = null; public static ConfigEntry<string> PriestAllowedTypes = null; public static ConfigEntry<bool> PriestChatEnabled = null; public static ConfigEntry<float> PriestCastTime = null; public static ConfigEntry<float> PriestCommandInterval = null; public static ConfigEntry<float> PriestRange = null; public static ConfigEntry<float> PriestAttackMul = null; public static ConfigEntry<float> PriestSpeedMul = null; public static ConfigEntry<float> PriestDefenseReduce = null; public static ConfigEntry<bool> DevourEnabled = null; public static ConfigEntry<string> DevourAllowedTypes = null; public static ConfigEntry<bool> DevourChatEnabled = null; public static ConfigEntry<float> DevourTriggerPct = null; public static ConfigEntry<float> DevourRange = null; public static ConfigEntry<float> DevourHealPct = null; public static ConfigEntry<float> DevourStatPct = null; public static ConfigEntry<float> DevourSizeMul = null; public static ConfigEntry<float> DevourPullTime = null; public static ConfigEntry<bool> DesperateEnabled = null; public static ConfigEntry<string> DesperateAllowedTypes = null; public static ConfigEntry<bool> DesperateChatEnabled = null; public static ConfigEntry<float> DesperateTriggerPct = null; public static ConfigEntry<float> DesperateAttackSpeedMul = null; public static ConfigEntry<float> DesperateMoveSpeedMul = null; public static ConfigEntry<float> DesperateKillHealPct = null; public static ConfigEntry<bool> CharmEnabled = null; public static ConfigEntry<string> CharmAllowedTypes = null; public static ConfigEntry<bool> CharmChatEnabled = null; public static ConfigEntry<float> CharmInterval = null; public static ConfigEntry<float> CharmDuration = null; public static ConfigEntry<float> CharmRange = null; public static ConfigEntry<float> CharmCastTime = null; public static ConfigEntry<bool> ParasiteEnabled = null; public static ConfigEntry<string> ParasiteAllowedTypes = null; public static ConfigEntry<bool> ParasiteChatEnabled = null; public static ConfigEntry<float> ParasiteCastTime = null; public static ConfigEntry<float> ParasiteInterval = null; public static ConfigEntry<float> ParasiteDuration = null; private static readonly AcceptableValueList<string> AllowedTypesOptions = new AcceptableValueList<string>(new string[7] { "小怪", "小boss", "boss", "小怪,小boss", "小怪,boss", "小boss,boss", "小怪,小boss,boss" }); private static ConfigEntry<T> Bind<T>(ConfigFile config, string section, string key, T def, string desc) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown return config.Bind<T>(section, key, def, new ConfigDescription(desc, (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes(section, key, desc) })); } private static ConfigEntry<string> BindAllowed(ConfigFile config, string section, string def, string desc) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown return config.Bind<string>(section, "适用类型", def, new ConfigDescription(desc, (AcceptableValueBase)(object)AllowedTypesOptions, new object[1] { new ConfigurationManagerAttributes(section, "适用类型", desc) })); } public static void Init(ConfigFile config) { EnableModLogging = Bind(config, "1-通用", "模组日志开关", def: true, "是否启用模组日志输出\ntrue: 输出\nfalse: 关闭(警告和错误日志始终显示)"); EnableDebugLogging = Bind(config, "1-通用", "调试日志开关", def: false, "是否启用详细调试日志\ntrue: 输出\nfalse: 只输出普通日志"); CenterTextMaster = Bind(config, "1-通用", "屏幕中间文字总开关", def: true, "是否允许屏幕中央弹出怪物相关提示\ntrue: 允许(仅 Boss 级怪物会弹,小怪/小Boss 不弹)\nfalse: 关闭全部中央文字(各词条小开关仍独立生效)"); BubbleMaster = Bind(config, "1-通用", "怪物头顶气泡总开关", def: true, "是否允许怪物头顶显示台词气泡\ntrue: 允许\nfalse: 关闭全部头顶气泡(各词条小开关仍独立生效)"); StarControlEnabled = Bind(config, "2-星级控制", "星级控制开关", def: true, "是否启用星级控制(按概率随机调整怪物星级,配合每星成长与全局属性生效)"); StarChanceRegular = Bind(config, "2-星级控制", "普通怪升星概率", 0.15f, "普通怪触发星级 roll 的概率(未触发保持原版生成星级)"); StarChanceMiniboss = Bind(config, "2-星级控制", "小Boss升星概率", 0.3f, "小Boss触发星级 roll 的概率(未触发保持原版生成星级)"); StarChanceBoss = Bind(config, "2-星级控制", "Boss升星概率", 0.1f, "Boss触发星级 roll 的概率(未触发保持原版生成星级)"); StarMinLevelRegular = Bind(config, "2-星级控制", "普通怪最低等级", 1, "普通怪触发后随机的最低等级(level = 星级+1,1 = 无星)"); StarMinLevelMiniboss = Bind(config, "2-星级控制", "小Boss最低等级", 1, "小Boss触发后随机的最低等级(level = 星级+1,1 = 无星)"); StarMinLevelBoss = Bind(config, "2-星级控制", "Boss最低等级", 1, "Boss触发后随机的最低等级(level = 星级+1,1 = 无星)"); StarMaxLevelRegular = Bind(config, "2-星级控制", "普通怪最高等级", 3, "普通怪触发后随机的最高等级(3 = 2星)"); StarMaxLevelMiniboss = Bind(config, "2-星级控制", "小Boss最高等级", 3, "小Boss触发后随机的最高等级(3 = 2星)"); StarMaxLevelBoss = Bind(config, "2-星级控制", "Boss最高等级", 2, "Boss触发后随机的最高等级(2 = 1星)"); StarHealthPerStar = Bind(config, "3-每星成长", "每星血量系数", 1f, "每升 1 星的血量成长(当前血量 = 基础血量 × (1 + (星级-1) × 系数);1 = 与原版一致每星翻倍)"); StarDamagePerStar = Bind(config, "3-每星成长", "每星伤害系数", 0.5f, "每升 1 星的伤害成长(伤害倍率 = 1 + (星级-1) × 系数;0.5 = 与原版一致每星 +50%)"); StarMovePerStar = Bind(config, "3-每星成长", "每星移速系数", 0f, "每升 1 星的移速成长(0 = 星级不影响移速;0.05 = 每星 +5%)"); StarAttackSpeedPerStar = Bind(config, "3-每星成长", "每星攻速系数", 0f, "每升 1 星的攻速成长(0 = 星级不影响攻速;0.05 = 每星 +5% 攻击动画速度)"); StarCooldownPerStar = Bind(config, "3-每星成长", "每星冷却系数", 0f, "每升 1 星的攻击冷却成长(0 = 星级不影响冷却;0.05 = 每星冷却缩短 5%,攻得更快)"); StarBodySizePerStar = Bind(config, "3-每星成长", "每星体型增幅", 0.1f, "每升 1 星的体型增幅(体型倍率 = 1 + (星级-1) × 系数;0.1 = 每星 +10%;0 = 星级不影响体型,与词条体型仍会叠加)"); GlobalHealthMulRegular = Bind(config, "4-全局属性", "普通怪血量倍率", 1f, "普通怪最终血量倍率(1 = 不变,与原版星级缩放叠加)"); GlobalHealthMulMiniboss = Bind(config, "4-全局属性", "小Boss血量倍率", 1f, "小Boss最终血量倍率(1 = 不变,与原版星级缩放叠加)"); GlobalHealthMulBoss = Bind(config, "4-全局属性", "Boss血量倍率", 1f, "Boss最终血量倍率(1 = 不变,与原版星级缩放叠加)"); GlobalDamageMulRegular = Bind(config, "4-全局属性", "普通怪伤害倍率", 1f, "普通怪最终伤害倍率(1 = 不变,与原版星级伤害成长叠加)"); GlobalDamageMulMiniboss = Bind(config, "4-全局属性", "小Boss伤害倍率", 1f, "小Boss最终伤害倍率(1 = 不变,与原版星级伤害成长叠加)"); GlobalDamageMulBoss = Bind(config, "4-全局属性", "Boss伤害倍率", 1f, "Boss最终伤害倍率(1 = 不变,与原版星级伤害成长叠加)"); GlobalMoveMulRegular = Bind(config, "4-全局属性", "普通怪移速倍率", 1f, "普通怪最终移速倍率(1 = 不变)"); GlobalMoveMulMiniboss = Bind(config, "4-全局属性", "小Boss移速倍率", 1f, "小Boss最终移速倍率(1 = 不变)"); GlobalMoveMulBoss = Bind(config, "4-全局属性", "Boss移速倍率", 1f, "Boss最终移速倍率(1 = 不变)"); GlobalAttackSpeedMulRegular = Bind(config, "4-全局属性", "普通怪攻速倍率", 1f, "普通怪最终攻速倍率(1 = 不变)"); GlobalAttackSpeedMulMiniboss = Bind(config, "4-全局属性", "小Boss攻速倍率", 1f, "小Boss最终攻速倍率(1 = 不变)"); GlobalAttackSpeedMulBoss = Bind(config, "4-全局属性", "Boss攻速倍率", 1f, "Boss最终攻速倍率(1 = 不变)"); GlobalCooldownMulRegular = Bind(config, "4-全局属性", "普通怪冷却倍率", 1f, "普通怪攻击冷却倍率(1 = 不变;0.8 = 冷却缩短 20%,攻得更快)"); GlobalCooldownMulMiniboss = Bind(config, "4-全局属性", "小Boss冷却倍率", 1f, "小Boss攻击冷却倍率(1 = 不变;0.8 = 冷却缩短 20%,攻得更快)"); GlobalCooldownMulBoss = Bind(config, "4-全局属性", "Boss冷却倍率", 1f, "Boss攻击冷却倍率(1 = 不变;0.8 = 冷却缩短 20%,攻得更快)"); SenseMulRegular = Bind(config, "5-攻击欲望", "普通怪感知倍率", 1f, "普通怪感知距离倍率(视野/听觉,>1 更早发现玩家)"); SenseMulMiniboss = Bind(config, "5-攻击欲望", "小Boss感知倍率", 1f, "小Boss感知距离倍率(视野/听觉,>1 更早发现玩家)"); SenseMulBoss = Bind(config, "5-攻击欲望", "Boss感知倍率", 1f, "Boss感知距离倍率(视野/听觉,>1 更早发现玩家)"); ChaseMulRegular = Bind(config, "5-攻击欲望", "普通怪追击倍率", 1f, "普通怪追击距离倍率(仅对设置了追击距离上限的怪物生效,>1 追更远)"); ChaseMulMiniboss = Bind(config, "5-攻击欲望", "小Boss追击倍率", 1f, "小Boss追击距离倍率(仅对设置了追击距离上限的怪物生效,>1 追更远)"); ChaseMulBoss = Bind(config, "5-攻击欲望", "Boss追击倍率", 1f, "Boss追击距离倍率(仅对设置了追击距离上限的怪物生效,>1 追更远)"); EnhanceChanceRegular = Bind(config, "6-强化系统", "普通怪强化概率", 0.25f, "普通怪获得强化的概率(0-1,0.25 表示 25% 的普通怪随机获得一种强化,其余无强化)"); EnhanceChanceMiniboss = Bind(config, "6-强化系统", "小Boss强化概率", 0.4f, "小Boss获得强化的概率(0-1,0.4 表示 40% 的小Boss随机获得一种强化)"); EnhanceChanceBoss = Bind(config, "6-强化系统", "Boss强化概率", 0.6f, "Boss获得强化的概率(0-1,0.6 表示 60% 的 Boss 随机获得一种强化)"); EnhanceDetachChance = Bind(config, "6-强化系统", "脱队单体判定概率", 0.5f, "小队强化(生命共享/生命权柄)中多于最低保留人数的非头目成员,按此概率判定是否脱离小队强化、改为单体强化"); LeechWeight = Bind(config, "6-强化系统", "吸血权重", 1, "吸血在抽取池中的出现权重(越大越常出现,0 = 不出现)"); VenomWeight = Bind(config, "6-强化系统", "毒爪权重", 1, "毒爪在抽取池中的出现权重(越大越常出现,0 = 不出现)"); OpportunistWeight = Bind(config, "6-强化系统", "机会主义者权重", 1, "机会主义者在抽取池中的出现权重(越大越常出现,0 = 不出现)"); WolfMasterWeight = Bind(config, "6-强化系统", "训狼大师权重", 1, "训狼大师在抽取池中的出现权重(越大越常出现,0 = 不出现)"); BloodHunterWeight = Bind(config, "6-强化系统", "血猎人权重", 1, "血猎人在抽取池中的出现权重(越大越常出现,0 = 不出现)"); LastStandWeight = Bind(config, "6-强化系统", "临终反扑权重", 1, "临终反扑在抽取池中的出现权重(越大越常出现,0 = 不出现)"); PackWeight = Bind(config, "6-强化系统", "集群之力权重", 1, "集群之力在抽取池中的出现权重(越大越常出现,0 = 不出现)"); CurseWeight = Bind(config, "6-强化系统", "诅咒之躯权重", 1, "诅咒之躯在抽取池中的出现权重(越大越常出现,0 = 不出现)"); DarkJudgeWeight = Bind(config, "6-强化系统", "黑暗审判权重", 1, "黑暗审判在抽取池中的出现权重(越大越常出现,0 = 不出现)"); AmaterasuWeight = Bind(config, "6-强化系统", "天照权重", 1, "天照在抽取池中的出现权重(越大越常出现,0 = 不出现)"); DuelWeight = Bind(config, "6-强化系统", "死斗权重", 1, "死斗在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ArenaWeight = Bind(config, "6-强化系统", "疯狂角斗场权重", 1, "疯狂角斗场在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ThiefWeight = Bind(config, "6-强化系统", "盗贼权重", 1, "盗贼在抽取池中的出现权重(越大越常出现,0 = 不出现)"); SoulWeight = Bind(config, "6-强化系统", "魂返权重", 1, "魂返在抽取池中的出现权重(越大越常出现,0 = 不出现)"); EnrageWeight = Bind(config, "6-强化系统", "狂暴权重", 1, "狂暴在抽取池中的出现权重(越大越常出现,0 = 不出现)"); SwiftWeight = Bind(config, "6-强化系统", "迅捷权重", 1, "迅捷在抽取池中的出现权重(越大越常出现,0 = 不出现)"); RegenWeight = Bind(config, "6-强化系统", "再生之躯权重", 1, "再生之躯在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ElementalShieldWeight = Bind(config, "6-强化系统", "元素之躯-庇权重", 1, "元素之躯-庇在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ElementalHealWeight = Bind(config, "6-强化系统", "元素之躯-愈权重", 1, "元素之躯-愈在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ElementalReflectWeight = Bind(config, "6-强化系统", "元素之躯-逆权重", 1, "元素之躯-逆在抽取池中的出现权重(越大越常出现,0 = 不出现)"); BalancedWeight = Bind(config, "6-强化系统", "均衡之体权重", 1, "均衡之体在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ReflectWeight = Bind(config, "6-强化系统", "反弹权重", 1, "反弹在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ShareWeight = Bind(config, "6-强化系统", "生命共享权重", 1, "生命共享在抽取池中的出现权重(越大越常出现,0 = 不出现)"); AuthorityWeight = Bind(config, "6-强化系统", "生命权柄权重", 1, "生命权柄在抽取池中的出现权重(越大越常出现,0 = 不出现)"); AssassinWeight = Bind(config, "6-强化系统", "刺客权重", 1, "刺客在抽取池中的出现权重(越大越常出现,0 = 不出现)"); PriestWeight = Bind(config, "6-强化系统", "大祭司权重", 1, "大祭司在抽取池中的出现权重(越大越常出现,0 = 不出现)"); DevourWeight = Bind(config, "6-强化系统", "吞噬权重", 1, "吞噬在抽取池中的出现权重(越大越常出现,0 = 不出现)"); DesperateWeight = Bind(config, "6-强化系统", "背水一战权重", 1, "背水一战在抽取池中的出现权重(越大越常出现,0 = 不出现)"); CharmWeight = Bind(config, "6-强化系统", "魅惑权重", 1, "魅惑在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ParasiteWeight = Bind(config, "6-强化系统", "寄生权重", 1, "寄生在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ManavoidWeight = Bind(config, "6-强化系统", "禁魔领域权重", 1, "禁魔领域在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ShadowWeight = Bind(config, "6-强化系统", "阴影杀手权重", 1, "阴影杀手在抽取池中的出现权重(越大越常出现,0 = 不出现)"); TwinWeight = Bind(config, "6-强化系统", "双子星权重", 1, "双子星在抽取池中的出现权重(越大越常出现,0 = 不出现)"); RoninWeight = Bind(config, "6-强化系统", "流浪武士权重", 1, "流浪武士在抽取池中的出现权重(越大越常出现,0 = 不出现)"); ChaosWeight = Bind(config, "6-强化系统", "混沌行者权重", 1, "混沌行者在抽取池中的出现权重(越大越常出现,0 = 不出现)"); LuckyWeight = Bind(config, "6-强化系统", "幸运教徒权重", 1, "幸运教徒在抽取池中的出现权重(越大越常出现,0 = 不出现)"); FireApostleWeight = Bind(config, "6-强化系统", "火之使徒权重", 1, "火之使徒在抽取池中的出现权重(越大越常出现,0 = 不出现)"); IceApostleWeight = Bind(config, "6-强化系统", "冰之使徒权重", 1, "冰之使徒在抽取池中的出现权重(越大越常出现,0 = 不出现)"); TwinBladeWeight = Bind(config, "6-强化系统", "双刀流权重", 1, "双刀流在抽取池中的出现权重(越大越常出现,0 = 不出现)"); PoisonApostleWeight = Bind(config, "6-强化系统", "毒之使徒权重", 1, "毒之使徒在抽取池中的出现权重(越大越常出现,0 = 不出现)"); MartyrWeight = Bind(config, "6-强化系统", "死士权重", 1, "死士在抽取池中的出现权重(越大越常出现,0 = 不出现)"); VoidWeight = Bind(config, "6-强化系统", "虚化权重", 1, "虚化在抽取池中的出现权重(越大越常出现,0 = 不出现)"); TimeHunterWeight = Bind(config, "6-强化系统", "时空猎人权重", 1, "时空猎人在抽取池中的出现权重(越大越常出现,0 = 不出现)"); SunApostleWeight = Bind(config, "6-强化系统", "太阳使徒权重", 1, "太阳使徒在抽取池中的出现权重(越大越常出现,0 = 不出现)"); NightApostleWeight = Bind(config, "6-强化系统", "黑夜使徒权重", 1, "黑夜使徒在抽取池中的出现权重(越大越常出现,0 = 不出现)"); FlurryWeight = Bind(config, "6-强化系统", "乱舞一通权重", 1, "乱舞一通在抽取池中的出现权重(越大越常出现,0 = 不出现)"); LootBoostEnabled = Bind(config, "7-掉落调整", "掉落加成总开关", def: true, "是否启用强化怪掉落加成(按星级与词条提升掉落概率,并增加掉落数量)\ntrue: 启用\nfalse: 关闭,完全走原版掉落"); LootChancePerStar = Bind(config, "7-掉落调整", "每星掉落概率加成", 0.2f, "每多一星,所有掉落项概率额外提升的倍率(0.2 = +20%/星)\n注意:原版已按 2^(星级) 放大掉落概率与数量,此处为额外叠加"); LootChancePerEnhance = Bind(config, "7-掉落调整", "词条掉落概率加成", 0.5f, "怪物带强化词条时,所有掉落项概率额外提升的倍率(0.5 = +50%)"); LootChanceCap = Bind(config, "7-掉落调整", "掉落概率封顶", 1f, "掉落项基础概率提升后的封顶值(1 = 100%),避免概率>1 破坏原版伪掉落判定"); LootAmountPerStar = Bind(config, "7-掉落调整", "每星额外掉落数量", 0, "每个掉落项实际掉出时,数量额外增加 星级 × 此值(对所有掉落项生效)\n0 = 不额外增加(默认,与原版一致)\n例:填 2,2 星怪每种掉落物多掉 4 个"); LootRareBonus = Bind(config, "7-掉落调整", "稀有物数量加成", 0, "稀有物实际掉出时额外增加的个数(在「每星额外掉落数量」之上再叠加)\n稀有物 = 掉落表中概率最低者(并列全算),并列多个时再取数量最少者\n0 = 不增加(默认,避免高星怪稀有物泛滥)"); LootStackEnabled = Bind(config, "7-掉落调整", "堆叠掉落开关", def: true, "怪物死亡时把同类掉落合并成堆\n原因:原版对每个单位都生成一个掉落物 GameObject,数量大时会明显卡顿\ntrue: 堆叠掉落(拾取时一次拿一整堆)\nfalse: 走原版逐个掉落"); LootMaxPerItem = Bind(config, "7-掉落调整", "单个物品掉落上限", 20, "同一怪物掉落表中,每种物品各自的掉落数量上限(超出直接截断,互不影响)\n用于压制高星怪单个物品掉出一大堆,又不会像总量上限那样把正常物品一起削减\n0 = 不限制(仍受原版硬编码单项 100 封顶)"); LootStarMultCap = Bind(config, "7-掉落调整", "星级掉落倍率上限", 4, "原版按 2^(星级) 同时放大掉落概率与数量(2 星=×4,3 星=×8),此值给该倍率封顶以压平高星曲线\n4 = 3 星及以上按 2 星(×4)计算(默认)\n8 = 保留 3 星原版倍率\n1 = 完全取消星级放大\n0 = 不限制"); ManavoidEnabled = Bind(config, "8-禁魔领域", "是否启用", def: true, "是否启用禁魔领域效果(周期性光波使玩家禁魔)"); ManavoidAllowedTypes = BindAllowed(config, "8-禁魔领域", "小boss,boss", "适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); ManavoidInterval = Bind(config, "8-禁魔领域", "光波间隔", 8f, "两次光波的间隔秒数"); ManavoidRange = Bind(config, "8-禁魔领域", "作用半径", 6f, "光波的作用半径(米)"); ManavoidDuration = Bind(config, "8-禁魔领域", "禁魔持续", 5f, "禁魔状态的持续秒数(期间魔力锁定为 0)"); ManavoidChatEnabled = Bind(config, "8-禁魔领域", "文本提示", def: true, "施放时是否显示头顶台词"); ShadowEnabled = Bind(config, "8-阴影杀手", "是否启用", def: true, "是否启用阴影杀手效果(蛰伏隐身/破隐 200%/重新蛰伏)"); ShadowAllowedTypes = BindAllowed(config, "8-阴影杀手", "小怪,小boss", "适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); ShadowLowHpThreshold = Bind(config, "8-阴影杀手", "低血阈值", 0.4f, "低血目标的血量比例阈值(低于此值才会被狩猎)"); ShadowSearchRange = Bind(config, "8-阴影杀手", "探测半径", 20f, "蛰伏时探测低血目标的半径(米)"); ShadowBreakDamage = Bind(config, "8-阴影杀手", "破隐伤害倍率", 2f, "破隐后首次攻击的伤害倍率(200% = 2)"); ShadowRehideDelay = Bind(config, "8-阴影杀手", "重新蛰伏间隔", 60f, "破隐后重新进入蛰伏的秒数"); ShadowChatEnabled = Bind(config, "8-阴影杀手", "文本提示", def: true, "破隐时是否显示头顶台词"); PriestSiphonRange = Bind(config, "8-大祭司", "耐力虹吸半径", 8f, "耐力虹吸的作用半径(米)"); PriestSiphonLockDuration = Bind(config, "8-大祭司", "体力锁定持续", 3f, "耐力虹吸后玩家体力锁定的秒数"); TwinEnabled = Bind(config, "8-双子星", "是否启用", def: true, "是否启用双子星效果(分裂成一对/生命链接/双死才死)"); TwinAllowedTypes = BindAllowed(config, "8-双子星", "小怪,小boss", "适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); TwinDeadDiff = Bind(config, "8-双子星", "双死血量差", 0.1f, "双死判定的血量百分比差阈值(两只差≤此值同时濒死才真死)"); TwinReviveDelay = Bind(config, "8-双子星", "复活延迟", 2f, "单只先死时的复活延迟秒数"); TwinChatEnabled = Bind(config, "8-双子星", "文本提示", def: true, "分裂时是否显示头顶台词"); RoninEnabled = Bind(config, "8-流浪武士", "是否启用", def: true, "是否启用流浪武士效果(快攻/加速/增伤)"); RoninAllowedTypes = BindAllowed(config, "8-流浪武士", "小怪,小boss", "适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); RoninAttackInterval = Bind(config, "8-流浪武士", "最短攻击间隔", 0.1f, "冷却最短的攻击间隔秒数"); RoninAnimSpeed = Bind(config, "8-流浪武士", "攻击动画倍率", 1.3f, "攻击动画速度倍率(1.3 = 加快 30%)"); RoninDamageMul = Bind(config, "8-流浪武士", "伤害倍率", 1.5f, "攻击伤害倍率(1.5 = +50%)"); ChaosEnabled = Bind(config, "8-混沌行者", "是否启用", def: true, "是否启用混沌行者效果(每次攻击随机切换伤害类型)"); ChaosAllowedTypes = BindAllowed(config, "8-混沌行者", "小怪,小boss", "适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); LuckyEnabled = Bind(config, "8-幸运教徒", "是否启用", def: true, "是否启用幸运教徒效果(伤害 -1000%~+1000% 浮动)"); LuckyAllowedTypes = BindAllowed(config, "8-幸运教徒", "小怪,小boss", "适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); LuckyMin = Bind(config, "8-幸运教徒", "浮动下限", -10f, "伤害浮动下限(-10 = -1000%,负值给敌人回血)"); LuckyMax = Bind(config, "8-幸运教徒", "浮动上限", 10f, "伤害浮动上限(10 = +1000%)"); FlurryEnabled = Bind(config, "8-乱舞一通", "是否启用", def: true, "是否启用乱舞一通效果(每次攻击的攻击动画速度在区间内随机选择,忽快忽慢难以预判)"); FlurryAllowedTypes = BindAllowed(config, "8-乱舞一通", "小怪,小boss", "乱舞一通适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); FlurryMinSpeed = Bind(config, "8-乱舞一通", "攻速下限", 0.4f, "每次攻击攻速倍率下限(0.4 = 40%,攻击动画变慢)"); FlurryMaxSpeed = Bind(config, "8-乱舞一通", "攻速上限", 2f, "每次攻击攻速倍率上限(2 = 200%,攻击动画翻倍)"); LeechEnabled = Bind(config, "8-吸血", "是否启用", def: true, "是否启用吸血效果(攻击时回复自身生命)"); LeechAllowedTypes = BindAllowed(config, "8-吸血", "小怪", "吸血适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); LeechHealRatio = Bind(config, "8-吸血", "吸血比例", 0.5f, "造成伤害时回复自身该比例的伤害值(0.5 表示回复 50%)"); LeechChatEnabled = Bind(config, "8-吸血", "文本开关", def: true, "吸血触发时是否显示头顶气泡(提示玩家一波爆发秒杀,别打持久战)"); VenomEnabled = Bind(config, "8-毒爪", "是否启用", def: true, "是否启用毒爪效果(攻击附带中毒)"); VenomAllowedTypes = BindAllowed(config, "8-毒爪", "小怪", "毒爪适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); VenomChatEnabled = Bind(config, "8-毒爪", "文本开关", def: true, "毒爪命中时是否显示头顶气泡(提示玩家备好解毒剂)"); VenomDamage = Bind(config, "8-毒爪", "中毒总伤害", 20f, "单次命中注入的原版毒素持续伤害总量(>0 才生效,SE 按秒逐段扣除)"); OpportunistEnabled = Bind(config, "8-机会主义者", "是否启用", def: true, "是否启用机会主义者效果(攻击破防目标时重置所有攻击冷却、取消迂回,直接衔接下一次攻击)"); OpportunistAllowedTypes = BindAllowed(config, "8-机会主义者", "小怪", "机会主义者适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); OpportunistChatEnabled = Bind(config, "8-机会主义者", "文本开关", def: true, "破防时是否显示头顶嘲讽(提示玩家别硬格挡)"); WolfMasterEnabled = Bind(config, "8-训狼大师", "是否启用", def: true, "是否启用训狼大师效果(生成时召唤狼群,周期下达指令,狼死亡后补员)"); WolfMasterAllowedTypes = BindAllowed(config, "8-训狼大师", "小怪,小boss", "训狼大师适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); WolfMasterChatEnabled = Bind(config, "8-训狼大师", "文本开关", def: true, "召唤/补员/下达指令时是否显示头顶气泡"); WolfMasterCount = Bind(config, "8-训狼大师", "狼数量", 3, "训狼大师召唤的狼群满员数量"); WolfMasterCastTime = Bind(config, "8-训狼大师", "施法时长", 1f, "召唤或下指令时怪物停止移动攻击的秒数(施法动画)"); WolfMasterCommandInterval = Bind(config, "8-训狼大师", "指令间隔", 15f, "怪物周期下达指令(进攻/防守/撤退)的间隔秒数"); WolfMasterRespawnInterval = Bind(config, "8-训狼大师", "补员间隔", 10f, "狼被击杀后重新召唤一只的间隔秒数"); WolfMasterHealthPercent = Bind(config, "8-训狼大师", "生命比例", 0.4f, "狼的生命值为怪物的比例(星级倍率后再乘)"); WolfMasterDamagePercent = Bind(config, "8-训狼大师", "攻击比例", 0.4f, "狼的攻击伤害为怪物的比例"); WolfMasterFollowDistance = Bind(config, "8-训狼大师", "跟随距离", 4f, "防守/撤退指令下狼跟随怪物时允许的最大距离(超出则拉近)"); WolfMasterAttackSpeed = Bind(config, "8-训狼大师", "战斗攻速倍率", 1.3f, "战斗指令下狼攻击动画速度倍率(1.3 = 加快 30%)"); WolfMasterAttackCooldown = Bind(config, "8-训狼大师", "战斗冷却倍率", 0.7f, "战斗指令下狼攻击冷却倍率(0.7 = 缩减 30%)"); WolfMasterMoveSpeed = Bind(config, "8-训狼大师", "战斗移速倍率", 1.3f, "战斗指令下狼移动速度倍率(1.3 = 加快 30%)"); WolfMasterRetreatHeal = Bind(config, "8-训狼大师", "撤退回血比例", 0.01f, "撤退指令下狼与怪物每秒回复的生命值比例(0.01 = 每秒 1%)"); BloodHunterEnabled = Bind(config, "8-血猎人", "是否启用", def: true, "血猎人强化总开关"); BloodHunterAllowedTypes = BindAllowed(config, "8-血猎人", "小怪,小boss", "允许生成血猎人的怪物类型(Regular,Miniboss,Boss 逗号分隔)"); BloodHunterChatEnabled = Bind(config, "8-血猎人", "文本开关", def: true, "狩猎进入/击杀气泡与玩家被狩猎的屏幕提示"); BloodHunterHuntPct = Bind(config, "8-血猎人", "狩猎生命阈值", 0.2f, "周围敌对目标生命低于此比例时进入狩猎状态(0.2 = 20%),目标恢复到此比例以上则退出"); BloodHunterExecutePct = Bind(config, "8-血猎人", "处决生命阈值", 0.05f, "狩猎状态下攻击目标生命低于此比例时一击必杀(0.05 = 5%)"); BloodHunterMoveMul = Bind(config, "8-血猎人", "移速倍率", 1.5f, "狩猎状态下移动速度倍率(1.5 = +50%)"); BloodHunterDamageMul = Bind(config, "8-血猎人", "伤害倍率", 1.5f, "狩猎状态下造成伤害的倍率(1.5 = +50%)"); BloodHunterStaminaPct = Bind(config, "8-血猎人", "玩家耐力阈值", 0.5f, "狩猎目标为玩家时:耐力低于此比例取消迂回一直进攻,否则正常逻辑(0.5 = 50%)"); BloodHunterSearchRange = Bind(config, "8-血猎人", "搜索半径", 15f, "进入狩猎状态时搜索周围敌对目标的范围(米)"); LastStandEnabled = Bind(config, "8-临终反扑", "是否启用", def: true, "是否启用临终反扑效果(濒死吟唱自爆)"); LastStandAllowedTypes = BindAllowed(config, "8-临终反扑", "小怪", "临终反扑适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); LastStandHealthRatio = Bind(config, "8-临终反扑", "濒死血量比例", 0.2f, "血量低于该比例进入吟唱自爆(0-1)"); LastStandCastTime = Bind(config, "8-临终反扑", "吟唱时长", 3f, "血量低于阈值后原地吟唱时长(秒),期间停止移动攻击,吟唱结束爆炸自杀"); LastStandExplodeRadius = Bind(config, "8-临终反扑", "爆炸半径", 5f, "爆炸伤害范围半径(米)"); LastStandExplodeDamageMul = Bind(config, "8-临终反扑", "爆炸伤害倍率", 3f, "爆炸伤害 = 怪物正常攻击伤害 × 该倍率(3 = 300%)"); LastStandChatEnabled = Bind(config, "8-临终反扑", "文本开关", def: true, "进入吟唱时是否显示头顶气泡(提示玩家躲开)"); PackEnabled = Bind(config, "8-集群之力", "是否启用", def: true, "是否启用集群之力效果(同种越多越强)"); PackAllowedTypes = BindAllowed(config, "8-集群之力", "小怪", "集群之力适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); PackDamagePerMember = Bind(config, "8-集群之力", "每只伤害加成", 0.15f, "同 zone 同种存活每多一只,伤害倍率 +0.15(第 2 只起算)"); PackSpeedPerMember = Bind(config, "8-集群之力", "每只移速加成", 0.05f, "同 zone 同种存活每多一只,移速倍率 +0.05(第 2 只起算)"); PackMaxBonus = Bind(config, "8-集群之力", "加成上限只数", 4, "加成的同类只数上限(封顶,防止数量无限叠加)"); PackChatEnabled = Bind(config, "8-集群之力", "文本开关", def: true, "成员较多时是否显示头顶气泡(提示玩家先削减数量)"); CurseEnabled = Bind(config, "8-诅咒之躯", "是否启用", def: true, "是否启用诅咒之躯效果(受击给攻击者叠诅咒层数)"); CurseAllowedTypes = BindAllowed(config, "8-诅咒之躯", "小怪,小boss", "诅咒之躯适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); CurseInterval = Bind(config, "8-诅咒之躯", "诅咒状态间隔", 30f, "进入诅咒状态的间隔秒数(战斗中才计时,脱战冻结)"); CurseDuration = Bind(config, "8-诅咒之躯", "诅咒状态持续", 8f, "诅咒状态持续秒数(期间不攻击只追击,嘲讽附近玩家近战攻击转向自身)"); CurseMaxStacks = Bind(config, "8-诅咒之躯", "层数上限", 5, "诅咒层数上限,叠满后目标直接死亡"); CurseMarkDuration = Bind(config, "8-诅咒之躯", "诅咒标记持续", 15f, "诅咒标记持续秒数,超时层数清零(玩家 SE 栏显示倒计时)"); CurseStackInterval = Bind(config, "8-诅咒之躯", "叠层间隔", 2f, "同一攻击者两次叠层的最小间隔秒数(防止连击快速叠满)"); CurseTauntStackInterval = Bind(config, "8-诅咒之躯", "嘲讽叠层间隔", 1f, "嘲讽期间攻击叠诅咒的最小间隔秒数(比普通叠层间隔更短,被锁定的玩家叠层更快)"); CurseTauntRange = Bind(config, "8-诅咒之躯", "嘲讽范围", 4f, "诅咒状态期间,该范围内玩家发起攻击会被嘲讽强制转向诅咒怪(米)"); CurseChatEnabled = Bind(config, "8-诅咒之躯", "文本开关", def: true, "诅咒状态期间是否持续发出挑衅文本气泡(提示玩家别靠近)"); DarkJudgeEnabled = Bind(config, "8-黑暗审判", "是否启用", def: true, "是否启用黑暗审判效果(周期对周围玩家施加审判)"); DarkJudgeAllowedTypes = BindAllowed(config, "8-黑暗审判", "boss,小boss", "黑暗审判适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); DarkJudgeInterval = Bind(config, "8-黑暗审判", "施加间隔", 30f, "战斗状态下每隔多少秒对周围玩家施加一次黑暗审判"); DarkJudgeDuration = Bind(config, "8-黑暗审判", "审判持续", 8f, "黑暗审判持续秒数(期间玩家视野受限、静止持续扣血)"); DarkJudgeRange = Bind(config, "8-黑暗审判", "施加范围", 8f, "黑暗审判的施加范围(米)"); DarkJudgeVisionDistance = Bind(config, "8-黑暗审判", "视野可见距离", 12f, "审判期间玩家能看到的最近距离(米),远处被暗雾吞没"); DarkJudgePenaltyPercent = Bind(config, "8-黑暗审判", "静止扣血百分比", 0.03f, "审判期间玩家静止后每秒损失最大生命的百分比(0.03 表示每秒 3%,移动即停,无视护甲)"); DarkJudgeChatEnabled = Bind(config, "8-黑暗审判", "文本开关", def: true, "施加审判时是否在怪物头顶显示宣告气泡(提示玩家保持移动)"); AmaterasuEnabled = Bind(config, "8-天照", "是否启用", def: true, "是否启用天照效果(周期进入天照状态召唤小怪,杀小怪破盾)"); AmaterasuAllowedTypes = BindAllowed(config, "8-天照", "boss", "天照适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); AmaterasuInterval = Bind(config, "8-天照", "进入间隔", 60f, "战斗状态下每隔多少秒尝试进入天照状态"); AmaterasuMinionCount = Bind(config, "8-天照", "小怪数量", 5, "进入天照时在周围生成的主怪缩小版小怪数量"); AmaterasuHealInterval = Bind(config, "8-天照", "回血间隔", 5f, "天照期间每多少秒回复一次生命"); AmaterasuHealPercent = Bind(config, "8-天照", "回血比例", 0.05f, "天照期间每次回复最大生命的比例(0.05 表示每次回 5%)"); AmaterasuBoomToBreak = Bind(config, "8-天照", "护盾承受爆炸次数", 4, "天照护盾可承受的小怪爆炸次数(每次爆炸 -1,归零破盾;默认 4 次破盾)"); AmaterasuBoomRadius = Bind(config, "8-天照", "爆炸范围", 12f, "小怪死亡爆炸的半径(米),天照 boss 在爆炸范围内才降低护盾耐久(把小怪引远击杀可避免破盾)"); AmaterasuBreakHealthPercent = Bind(config, "8-天照", "破盾扣血比例", 0.1f, "护盾被打破时扣除最大生命的比例(0.10 表示扣 10%)"); AmaterasuChatEnabled = Bind(config, "8-天照", "文本开关", def: true, "进入天照/破盾/满血退出的气泡文本(提示玩家杀小怪破盾)"); DuelEnabled = Bind(config, "8-死斗", "是否启用", def: true, "是否启用死斗效果(boss 生命低于触发线后进入死斗,标记目标死斗)"); DuelAllowedTypes = BindAllowed(config, "8-死斗", "boss,小boss", "死斗适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); DuelTriggerHealth = Bind(config, "8-死斗", "触发血量比例", 0.15f, "生命低于该比例(0.15 表示 15%)时进入死斗状态"); DuelAttackSpeedMult = Bind(config, "8-死斗", "攻速倍率", 2f, "死斗期间攻击速度倍率(2 表示攻速 +100%,攻击动画加速)"); DuelCooldownMult = Bind(config, "8-死斗", "攻击冷却倍率", 0.5f, "死斗期间攻击冷却倍率(0.5 表示攻击间隔减半,冷却 -50%)"); DuelMoveSpeedMult = Bind(config, "8-死斗", "移动速度倍率", 1.3f, "死斗期间移动速度倍率(1.3 表示移速 +30%)"); DuelChatEnabled = Bind(config, "8-死斗", "文本开关", def: true, "进入死斗/死斗标记的气泡文本(提示玩家被锁定、无法传送)"); ArenaEnabled = Bind(config, "8-疯狂角斗场", "是否启用", def: true, "是否启用疯狂角斗场效果(boss 生命降至触发档位时生成角斗场护罩,强制目标一对一决斗)"); ArenaAllowedTypes = BindAllowed(config, "8-疯狂角斗场", "boss", "疯狂角斗场适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); ArenaTriggerHealths = Bind(config, "8-疯狂角斗场", "触发血量档位", "0.75,0.5,0.25", "触发角斗场的血量比例档位(逗号分隔,从高到低,每档一场决斗;决斗中掉到下一档不会触发)"); ArenaRadius = Bind(config, "8-疯狂角斗场", "角斗场半径", 15f, "角斗场铺平地面半径(米),地面整平范围;护罩/围栏边界在此基础上内缩(见边界内缩量),保证圈内全是平地"); ArenaBoundaryInset = Bind(config, "8-疯狂角斗场", "边界内缩量", 2f, "护罩/围栏半径相对铺平地面的内缩距离(米),边界小于平地范围,玩家在边界内活动不会卡在未铺平的地形上"); ArenaPullDistance = Bind(config, "8-疯狂角斗场", "拉人距离", 3f, "开启决斗时把目标玩家拉到 boss 前方该身位(米),拉取过程有可见拖拽轨迹"); ArenaPullTime = Bind(config, "8-疯狂角斗场", "拉取施法时长", 1.5f, "拉取施法时长(秒),期间 boss 原地吟唱停止攻击移动,目标玩家被可见轨迹拉向 boss"); ArenaCountdown = Bind(config, "8-疯狂角斗场", "倒计时秒数", 3f, "拉取到位后 3 秒倒计时(怪物原地待机,给玩家拉开距离的时间)"); ArenaDuration = Bind(config, "8-疯狂角斗场", "决斗时长", 60f, "决斗持续秒数,到时或目标死亡则取消护罩、地形复原"); ArenaBossScale = Bind(config, "8-疯狂角斗场", "boss体型缩放", 0.6f, "决斗期间 boss 体型缩放(0.6 = 缩小为 60%,决斗结束恢复)"); ArenaFenceHeight = Bind(config, "8-疯狂角斗场", "围栏高度", 0.8f, "角斗场边缘矮围栏高度(米),标示角斗场边界并防止滑出"); ArenaFenceCount = Bind(config, "8-疯狂角斗场", "围栏立柱数量", 40, "围栏立柱数量(沿平台边缘均匀分布,越多越密集)"); ArenaCooldownMult = Bind(config, "8-疯狂角斗场", "攻击冷却倍率", 0.2f, "决斗期间 boss 攻击冷却倍率(0.2 表示冷却降低 80%、攻击频率大幅提高,决斗结束恢复)"); ArenaAttackSpeedMult = Bind(config, "8-疯狂角斗场", "攻击动画速度倍率", 1.5f, "决斗期间 boss 攻击动画速度倍率(1.5 表示攻击动画提速 50%,只影响攻击动作,决斗结束恢复)"); ArenaShieldHeightScale = Bind(config, "8-疯狂角斗场", "护罩高度拉伸", 2f, "护罩高度拉伸倍数(2 表示比默认高度拉高一倍,护罩直径与铺平平地直径一致)"); ArenaChatEnabled = Bind(config, "8-疯狂角斗场", "文本开关", def: true, "进入决斗宣告/倒计时/结束的气泡文本"); ThiefEnabled = Bind(config, "8-盗贼", "是否启用", def: true, "是否启用盗贼效果(攻击命中玩家偷取背包未装备物品,击杀掉落归还)"); ThiefAllowedTypes = BindAllowed(config, "8-盗贼", "小怪,小boss", "盗贼适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); ThiefMoveSpeedMult = Bind(config, "8-盗贼", "移速倍率", 1.4f, "盗贼移速倍率(1.4 表示移速提高 40%)"); ThiefDamageMult = Bind(config, "8-盗贼", "攻击伤害倍率", 0.6f, "盗贼攻击伤害倍率(0.6 表示攻击伤害降低 40%)"); ThiefAttackSpeedMult = Bind(config, "8-盗贼", "偷取前攻速倍率", 1.5f, "偷到前攻击欲望阶段攻击动画速度倍率(1.5 = 动画提速 50%,只影响攻击动作)"); ThiefCooldownMult = Bind(config, "8-盗贼", "偷取前冷却倍率", 0.3f, "偷到前攻击欲望阶段攻击冷却倍率(0.3 = 冷却降低 70%,疯狂连击)"); ThiefFleeDuration = Bind(config, "8-盗贼", "逃跑持续秒数", 8f, "偷到后逃跑持续秒数,之后贪念再生、恢复攻击继续偷"); ThiefChatEnabled = Bind(config, "8-盗贼", "文本开关", def: true, "偷到/逃跑/贪念恢复的气泡文本"); ThiefStealChance = Bind(config, "8-盗贼", "偷取概率", 1f, "攻击命中造成实际伤害时偷取背包的概率(1 = 100% 必偷,0.5 = 50%,0 = 从不偷取)"); FireApostleEnabled = Bind(config, "8-火之使徒", "是否启用", def: true, "是否启用火之使徒效果(高火伤抗性、攻击全转火元素灼烧、灼烧伤害提高)"); FireApostleAllowedTypes = BindAllowed(config, "8-火之使徒", "小怪,小boss", "火之使徒适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); FireApostleDamageMult = Bind(config, "8-火之使徒", "灼烧伤害倍率", 2f, "攻击全转火后灼烧 DOT 伤害倍率(2 = 灼烧总量翻倍;倍率只影响灼烧持续伤害总量,不受目标火抗影响)"); IceApostleEnabled = Bind(config, "8-冰之使徒", "是否启用", def: true, "是否启用冰之使徒效果(高冰伤抗性、攻击全转冰元素减速、按冰冻目标数量叠加双速)"); IceApostleAllowedTypes = BindAllowed(config, "8-冰之使徒", "小怪,小boss", "冰之使徒适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); IceApostleSpeedPerLayer = Bind(config, "8-冰之使徒", "每层双速加成", 0.1f, "每有一个被冰冻的目标,移速与攻速各提升的比例(0.1 = 每层 +10%)"); IceApostleMaxLayers = Bind(config, "8-冰之使徒", "最大叠加层数", 5, "双速加成的最大层数(5 层 = 上限 +50%),超过按该值封顶"); IceApostleScanRadius = Bind(config, "8-冰之使徒", "检测半径", 20f, "冰冻目标检测半径(米),范围内被冰冻的目标计入双速加成层数"); IceApostleScanInterval = Bind(config, "8-冰之使徒", "检测间隔", 1f, "冰冻目标扫描间隔秒数(1 = 每秒检测一次,层数变化才更新双速,防抖动)"); TwinBladeEnabled = Bind(config, "8-双刀流", "是否启用", def: true, "是否启用双刀流效果(攻击动画加快 + 每次攻击伤害翻倍模拟连续两刀)"); TwinBladeAllowedTypes = BindAllowed(config, "8-双刀流", "小怪,小boss", "双刀流适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); TwinBladeAttackSpeedMult = Bind(config, "8-双刀流", "攻速动画倍率", 1.5f, "攻击动画速度倍率(1.5 = 攻击动作加快 50%,只影响动作速度不影响攻击频率)"); TwinBladeDamageMult = Bind(config, "8-双刀流", "伤害倍率", 2f, "总伤害倍率:每次攻击打出两段伤害(两个伤害数字),单段 = 原伤害 × 该倍率 ÷ 2(2 = 每段都是原伤害,两段合计翻倍)"); PoisonApostleEnabled = Bind(config, "8-毒之使徒", "是否启用", def: true, "是否启用毒之使徒效果(高毒伤抗性、攻击全转毒元素、命中引爆目标剩余毒素伤害并重新施加)"); PoisonApostleAllowedTypes = BindAllowed(config, "8-毒之使徒", "小怪,小boss", "毒之使徒适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); MartyrEnabled = Bind(config, "8-死士", "是否启用", def: true, "是否启用死士效果(不攻击直冲目标,接近后两秒前摇自爆,造成自身最大生命值的范围伤害后自杀)"); MartyrAllowedTypes = BindAllowed(config, "8-死士", "小怪,小boss", "死士适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); MartyrFuseTime = Bind(config, "8-死士", "前摇秒数", 2f, "接近目标后自爆前摇时长(秒),前摇期间无敌且站定,结束后爆炸"); MartyrTriggerRange = Bind(config, "8-死士", "触发距离", 3f, "与目标距离小于该值(米)时进入自爆前摇"); MartyrBlastRadius = Bind(config, "8-死士", "爆炸半径", 5f, "自爆 AOE 爆炸半径(米),范围内所有玩家受到伤害"); MartyrDamageMult = Bind(config, "8-死士", "自爆伤害倍率", 1f, "自爆伤害 = 怪物最大生命值 × 该倍率(1 = 造成自身最大生命值伤害)"); VoidEnabled = Bind(config, "8-虚化", "是否启用", def: true, "是否启用虚化效果(非攻击时虚化:关闭碰撞无碰撞可穿墙、免疫伤害,攻击动画期间实体化可被攻击)"); VoidAllowedTypes = BindAllowed(config, "8-虚化", "小怪", "虚化适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); TimeHunterEnabled = Bind(config, "8-时空猎人", "是否启用", def: true, "是否启用时空猎人效果(每次攻击前瞬移到目标背后发动攻击,远程怪保持远距)"); TimeHunterAllowedTypes = BindAllowed(config, "8-时空猎人", "小怪", "时空猎人适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); TimeHunterTeleportRadius = Bind(config, "8-时空猎人", "瞬移半径", 20f, "目标进入该半径(米)内时触发瞬移,超出则正常追击"); TimeHunterInterval = Bind(config, "8-时空猎人", "瞬移冷却", 3f, "两次瞬移的最小间隔(秒),防止连续背袭"); TimeHunterExecuteInterval = Bind(config, "8-时空猎人", "时空斩杀冷却", 30f, "时空斩杀触发间隔(秒):以目标为中心 6 方位依次瞬移攻击,优先于普通瞬移"); TimeHunterExecuteSpeedMult = Bind(config, "8-时空猎人", "时空斩杀攻速", 3f, "时空斩杀期间攻击速度倍率(1 = 原速;3 = 加快 200% 即三倍速)"); TimeHunterExecuteStepInterval = Bind(config, "8-时空猎人", "时空斩杀步进间隔", 0.6f, "每次瞬移攻击的间隔(秒),上一次攻击未完成会自动等待"); SunApostleEnabled = Bind(config, "8-太阳使徒", "是否启用", def: true, "是否启用太阳使徒效果(白天随昼夜曲线渐变增益,正午达到巅峰:攻击/生命上限×5、每秒回10%最大生命、移速攻速+100%、冷却缩减90%、体型增大100%、只进攻不迂回;黑夜弱化:攻击与生命上限-25%、只迂回不进攻)"); SunApostleAllowedTypes = BindAllowed(config, "8-太阳使徒", "小怪,小boss", "太阳使徒适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); SunApostleAttackMult = Bind(config, "8-太阳使徒", "正午攻击倍率", 5f, "正午时攻击伤害倍率(5 = 攻击力500%,随昼夜强度渐变,黑夜最低为黑夜攻击倍率)"); SunApostleHealthMult = Bind(config, "8-太阳使徒", "正午生命上限倍率", 5f, "正午时最大生命倍率(5 = 生命上限500%,随昼夜强度渐变;降上限时超出部分按原版规则扣除)"); SunApostleRegenPerSec = Bind(config, "8-太阳使徒", "正午回复每秒比例", 0.1f, "正午时每秒回复最大生命的比例(0.1 = 每秒回复10%,即2%基准×500%;回复量随昼夜强度渐变)"); SunApostleMoveSpeedMult = Bind(config, "8-太阳使徒", "正午移速倍率", 2f, "正午时移动速度倍率(2 = 移速+100%,随昼夜强度渐变,黑夜不降移速)"); SunApostleAttackSpeedMult = Bind(config, "8-太阳使徒", "正午攻速倍率", 2f, "正午时攻击动画速度倍率(2 = 攻速+100%,随昼夜强度渐变,黑夜不降攻速)"); SunApostleCooldownMult = Bind(config, "8-太阳使徒", "正午冷却倍率", 0.1f, "正午时攻击冷却倍率(0.1 = 冷却缩减90%,随昼夜强度渐变,黑夜不降冷却)"); SunApostleScaleMult = Bind(config, "8-太阳使徒", "正午体型倍率", 2f, "正午时体形缩放倍率(2 = 体型增大100%,随昼夜强度渐变,黑夜恢复原体型)"); SunApostleNightAttackMult = Bind(config, "8-太阳使徒", "黑夜攻击倍率", 0.75f, "黑夜时攻击伤害倍率(0.75 = 攻击力-25%)"); SunApostleNightHealthMult = Bind(config, "8-太阳使徒", "黑夜生命上限倍率", 0.75f, "黑夜时最大生命倍率(0.75 = 生命上限-25%)"); NightApostleEnabled = Bind(config, "8-黑夜使徒", "是否启用", def: true, "是否启用黑夜使徒效果(与太阳使徒相反:黑夜随昼夜曲线渐变增益,午夜达到巅峰:攻击/生命上限×5、每秒回10%最大生命、移速攻速+100%、冷却缩减90%、体型增大100%、只进攻不迂回;白天弱化:攻击与生命上限-25%、只迂回不进攻)"); NightApostleAllowedTypes = BindAllowed(config, "8-黑夜使徒", "小怪,小boss", "黑夜使徒适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); NightApostleAttackMult = Bind(config, "8-黑夜使徒", "午夜攻击倍率", 5f, "午夜时攻击伤害倍率(5 = 攻击力500%,随昼夜强度渐变,白天最低为白天攻击倍率)"); NightApostleHealthMult = Bind(config, "8-黑夜使徒", "午夜生命上限倍率", 5f, "午夜时最大生命倍率(5 = 生命上限500%,随昼夜强度渐变;降上限时超出部分按原版规则扣除)"); NightApostleRegenPerSec = Bind(config, "8-黑夜使徒", "午夜回复每秒比例", 0.1f, "午夜时每秒回复最大生命的比例(0.1 = 每秒回复10%,即2%基准×500%;回复量随昼夜强度渐变)"); NightApostleMoveSpeedMult = Bind(config, "8-黑夜使徒", "午夜移速倍率", 2f, "午夜时移动速度倍率(2 = 移速+100%,随昼夜强度渐变,白天不降移速)"); NightApostleAttackSpeedMult = Bind(config, "8-黑夜使徒", "午夜攻速倍率", 2f, "午夜时攻击动画速度倍率(2 = 攻速+100%,随昼夜强度渐变,白天不降攻速)"); NightApostleCooldownMult = Bind(config, "8-黑夜使徒", "午夜冷却倍率", 0.1f, "午夜时攻击冷却倍率(0.1 = 冷却缩减90%,随昼夜强度渐变,白天不降冷却)"); NightApostleScaleMult = Bind(config, "8-黑夜使徒", "午夜体型倍率", 2f, "午夜时体形缩放倍率(2 = 体型增大100%,随昼夜强度渐变,白天恢复原体型)"); NightApostleDayAttackMult = Bind(config, "8-黑夜使徒", "白天攻击倍率", 0.75f, "白天时攻击伤害倍率(0.75 = 攻击力-25%)"); NightApostleDayHealthMult = Bind(config, "8-黑夜使徒", "白天生命上限倍率", 0.75f, "白天时最大生命倍率(0.75 = 生命上限-25%)"); SoulEnabled = Bind(config, "8-魂返", "是否启用", def: true, "是否启用魂返效果(死亡倒地后可能灵魂回归复活)"); SoulAllowedTypes = BindAllowed(config, "8-魂返", "小怪", "魂返适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); SoulDownDelay = Bind(config, "8-魂返", "倒地时长", 5f, "死亡后倒地秒数,到时判定复活(周围有同种怪)或真正死亡"); SoulReviveRange = Bind(config, "8-魂返", "复活检测范围", 5f, "倒地后周围多少米内有同种正常存活怪则灵魂回归复活"); SoulMinCount = Bind(config, "8-魂返", "保底魂返数量", 2, "强化赋予时周围含自己在内至少存在的带魂返同种怪数量,不足时自动生成补足"); SoulChatEnabled = Bind(config, "8-魂返", "文本开关", def: true, "倒地呼救/复活宣言气泡(提示玩家附近还有同类就能复活)"); EnrageEnabled = Bind(config, "8-狂暴", "是否启用", def: true, "是否启用 Boss 狂暴机制"); EnrageAllowedTypes = BindAllowed(config, "8-狂暴", "boss", "狂暴适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); EnrageHealthThreshold = Bind(config, "8-狂暴", "触发血量比例", 0.3f, "Boss 血量低于该比例时触发狂暴(0-1)"); EnrageDuration = Bind(config, "8-狂暴", "持续时间", 300f, "狂暴持续时间(秒)"); EnrageAttackCooldownMul = Bind(config, "8-狂暴", "攻击冷却倍率", 0.5f, "狂暴期间攻击冷却倍率(0.5 表示冷却减半)"); EnrageAttackSpeedMul = Bind(config, "8-狂暴", "攻击速度倍率", 1.5f, "狂暴期间攻击动画速度倍率(1.5 表示攻速提升 50%)"); EnrageMoveSpeedMul = Bind(config, "8-狂暴", "移动速度倍率", 1.5f, "狂暴期间移动速度倍率(1.5 表示移速提升 50%)"); EnrageChatEnabled = Bind(config, "8-狂暴", "狂暴文本开关", def: true, "狂暴触发时是否在 Boss 头顶显示嘲讽气泡文本(提示玩家应对办法)"); SwiftEnabled = Bind(config, "8-迅捷", "是否启用", def: true, "是否启用迅捷效果"); SwiftAllowedTypes = BindAllowed(config, "8-迅捷", "小怪", "迅捷适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); SwiftMoveSpeedMul = Bind(config, "8-迅捷", "移动速度倍率", 1.3f, "迅捷移动速度倍率"); SwiftAttackCooldownMul = Bind(config, "8-迅捷", "攻击冷却倍率", 0.8f, "迅捷攻击冷却倍率"); RegenEnabled = Bind(config, "8-再生之躯", "是否启用", def: true, "是否启用再生之躯效果"); RegenAllowedTypes = BindAllowed(config, "8-再生之躯", "小boss", "再生之躯适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); RegenOutOfCombatDelay = Bind(config, "8-再生之躯", "脱战延迟", 5f, "脱战多少秒后开始回血"); RegenHealPercent = Bind(config, "8-再生之躯", "回复百分比", 0.02f, "每秒回复最大生命值的百分比(0.02 表示每秒 2%)"); ElementalEnabled = Bind(config, "8-元素之躯-庇", "是否启用", def: true, "是否启用元素之躯-庇(免疫当前元素伤害)"); ElementalAllowedTypes = BindAllowed(config, "8-元素之躯-庇", "boss,小boss", "元素之躯-庇适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); ElementalInterval = Bind(config, "8-元素之躯", "切换间隔", 180f, "元素之躯(三种变体共用)每隔多少秒随机切换到另一个元素"); ElementalWarnAhead = Bind(config, "8-元素之躯", "预告提前秒数", 10f, "元素之躯(三种变体共用)切换前多少秒在头顶显示预告气泡"); ElementalHealEnabled = Bind(config, "8-元素之躯-愈", "是否启用", def: true, "是否启用元素之躯-愈(当前元素伤害转为治疗)"); ElementalHealAllowedTypes = BindAllowed(config, "8-元素之躯-愈", "boss,小boss", "元素之躯-愈适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); ElementalReflectEnabled = Bind(config, "8-元素之躯-逆", "是否启用", def: true, "是否启用元素之躯-逆(当前元素伤害反弹给攻击者)"); ElementalReflectAllowedTypes = BindAllowed(config, "8-元素之躯-逆", "boss,小boss", "元素之躯-逆适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); BalancedEnabled = Bind(config, "8-均衡之体", "是否启用", def: true, "是否启用均衡之体效果"); BalancedAllowedTypes = BindAllowed(config, "8-均衡之体", "boss,小boss", "均衡之体适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); BalancedInterval = Bind(config, "8-均衡之体", "状态切换间隔", 60f, "每隔多少秒切换减伤态/增伤态"); BalancedWindow = Bind(config, "8-均衡之体", "连续窗口", 5f, "多少秒内的攻击视为连续伤害(超过则重置连击计数)"); BalancedReduceStart = Bind(config, "8-均衡之体", "减伤态首击倍率", 1.2f, "减伤态第一击的伤害倍率(默认 1.2 即 120%)"); BalancedReduceStep = Bind(config, "8-均衡之体", "减伤态每击递减", 0.2f, "减伤态每连续一击倍率递减量,最低降到 0(免疫)"); BalancedIncreaseStep = Bind(config, "8-均衡之体", "增伤态每击递增", 0.1f, "增伤态每连续一击倍率递增量(鼓励高频攻击)"); BalancedIncreaseCap = Bind(config, "8-均衡之体", "增伤态倍率上限", 2f, "增伤态倍率上限(默认 2.0 即 200%)"); BalancedWarnAhead = Bind(config, "8-均衡之体", "预告提前秒数", 5f, "形态切换前多少秒在头顶显示预告气泡"); ReflectEnabled = Bind(config, "8-反弹", "是否启用", def: true, "是否启用反弹效果"); ReflectAllowedTypes = BindAllowed(config, "8-反弹", "boss,小boss", "反弹适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); ReflectInterval = Bind(config, "8-反弹", "进入间隔秒数", 30f, "战斗状态下每隔多少秒进入一次反弹状态"); ReflectDuration = Bind(config, "8-反弹", "反弹持续秒数", 8f, "反弹状态持续多少秒"); ReflectWarnAhead = Bind(config, "8-反弹", "预告提前秒数", 3f, "进入反弹状态前多少秒在头顶显示预告气泡"); ReflectChatEnabled = Bind(config, "8-反弹", "文本开关", def: true, "反弹预告气泡与玩家被反弹的屏幕提示"); ShareEnabled = Bind(config, "8-生命共享", "是否启用", def: true, "是否启用生命共享效果"); ShareAllowedTypes = BindAllowed(config, "8-生命共享", "小怪,小boss", "生命共享适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); ShareMinSame = Bind(config, "8-生命共享", "同类最少数量", 2, "小队内同种类存活数量 ≥ 该值才激活生命共享(至少两只同类才能互相回复)"); ShareChatEnabled = Bind(config, "8-生命共享", "交流文本开关", def: true, "是否启用怪物受伤嘲讽气泡文本(提示玩家逐个击杀)"); ShareChatCooldown = Bind(config, "8-生命共享", "嘲讽冷却秒数", 15f, "受伤嘲讽的最短间隔(秒),防止连续攻击刷屏"); AuthorityEnabled = Bind(config, "8-生命权柄", "是否启用", def: true, "是否启用生命权柄效果"); AuthorityAllowedTypes = BindAllowed(config, "8-生命权柄", "小怪,小boss", "生命权柄适用怪物类型,逗号分隔(Regular/Miniboss/Boss),可配置多个类型"); AuthorityReviveDelay = Bind(config, "8-生命权柄", "倒地复活延迟", 5f, "头目存活时,小怪被击杀倒地多少秒后满血复活"); AuthorityLeaderHealthMul = Bind(config, "8-生命权柄", "头目生命倍率", 1.5f, "头目最大生命倍率(1.5 表示生命值+50%)"); AuthorityLeaderScaleMul = Bind(config, "8-生命权柄", "头目体型倍率", 1.2f, "头目体型放大倍率(1.2 表示体型+20%)"); AuthorityMinMembers = Bind(config, "8-生命权柄", "最少小怪数量", 3, "头目外至少多少只小怪才成立小队(不足不触发倒地复活/头目强化)"); AuthorityChatEnabled = Bind(config, "8-生命权柄", "交流文本开关", def: true, "是否启用小怪/头目的交流气泡文本"); AssassinEnabled = Bind(config, "8-刺客", "是否启用", def: true, "是否启用刺客效果(进攻时隐身,发动攻击时现身)"); AssassinAllowedTypes = BindAllowed(config, "8-刺客", "小怪,小boss", "刺客适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); AssassinChatEnabled = Bind(config, "8-刺客", "文本开关", def: true, "刺客是否显示头顶文本(目前无专属文本,保留开关备用)"); PriestEnabled = Bind(config, "8-大祭司", "是否启用", def: true, "是否启用大祭司效果(周期下达指令,光环强化周围同阵营怪物)"); PriestAllowedTypes = BindAllowed(config, "8-大祭司", "boss,小boss", "大祭司适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); PriestChatEnabled = Bind(config, "8-大祭司", "文本开关", def: true, "大祭司下达指令时是否显示头顶气泡"); PriestCastTime = Bind(config, "8-大祭司", "施法时长", 1f, "下达指令时大祭司停止移动攻击的秒数(施法动画)"); PriestCommandInterval = Bind(config, "8-大祭司", "指令间隔", 20f, "大祭司周期下达指令(攻击/移速/防御)的间隔秒数"); PriestRange = Bind(config, "8-大祭司", "光环范围", 15f, "大祭司光环影响周围同阵营怪物的范围(米)"); PriestAttackMul = Bind(config, "8-大祭司", "攻击指令伤害倍率", 1.3f, "攻击指令下友军怪物造成的伤害倍率(1.3 = +30%)"); PriestSpeedMul = Bind(config, "8-大祭司", "移速指令移速倍率", 1.3f, "移速指令下友军怪物的移动速度倍率(1.3 = +30%)"); PriestDefenseReduce = Bind(config, "8-大祭司", "防御指令减伤比例", 0.3f, "防御指令下友军怪物受到的伤害减免比例(0.3 = 减伤 30%)"); DevourEnabled = Bind(config, "8-吞噬", "是否启用", def: true, "是否启用吞噬效果(生命低于阈值时吞噬周围友军生物,属性叠加)"); DevourAllowedTypes = BindAllowed(config, "8-吞噬", "小怪,小boss", "吞噬适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); DevourChatEnabled = Bind(config, "8-吞噬", "文本开关", def: true, "吞噬发动时是否显示头顶气泡"); DevourTriggerPct = Bind(config, "8-吞噬", "触发生命阈值", 0.1f, "生命低于该比例时触发吞噬(0.10 = 10%)"); DevourRange = Bind(config, "8-吞噬", "吞噬范围", 10f, "吞噬周围友军生物的范围(米)"); DevourHealPct = Bind(config, "8-吞噬", "吞噬回血比例", 0.2f, "每吞噬一个友军回复最大生命的比例(0.2 = 20%)"); DevourStatPct = Bind(config, "8-吞噬", "属性加成比例", 0.4f, "每吞噬一个友军,最大生命/攻击伤害/攻速 +40%,攻击冷却 -40%(0.4 = 40%)"); DevourSizeMul = Bind(config, "8-吞噬", "体型增大倍率", 1.1f, "每吞噬一个友军体型增大的倍率(1.1 = +10%,可叠加)"); DevourPullTime = Bind(config, "8-吞噬", "拉取动画时长", 1f, "拉取被吞噬者到身边的动画时长(秒),期间被吞噬者被拖向吞噬者后消失(无尸体掉落)"); DesperateEnabled = Bind(config, "8-背水一战", "是否启用", def: true, "是否启用背水一战效果(生命低于阈值进入狂暴,只有攻击行为,击杀目标回血退出)"); DesperateAllowedTypes = BindAllowed(config, "8-背水一战", "小怪,小boss", "背水一战适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); DesperateChatEnabled = Bind(config, "8-背水一战", "文本开关", def: true, "进入/退出背水一战时是否显示头顶气泡"); DesperateTriggerPct = Bind(config, "8-背水一战", "触发生命阈值", 0.2f, "生命低于该比例时触发背水一战(0.2 = 20%)"); DesperateAttackSpeedMul = Bind(config, "8-背水一战", "攻速倍率", 1.5f, "背水一战期间攻击动画速度倍率(1.5 = +50%)"); DesperateMoveSpeedMul = Bind(config, "8-背水一战", "移速倍率", 1.5f, "背水一战期间移动速度倍率(1.5 = +50%)"); DesperateKillHealPct = Bind(config, "8-背水一战", "击杀回血比例", 0.5f, "背水一战期间成功击杀目标后回复最大生命的比例(0.5 = 50%)"); CharmEnabled = Bind(config, "8-魅惑", "是否启用", def: true, "是否启用魅惑效果(周期施放,强制范围内敌对生物互相攻击)"); CharmAllowedTypes = BindAllowed(config, "8-魅惑", "boss,小boss", "魅惑适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); CharmChatEnabled = Bind(config, "8-魅惑", "文本开关", def: true, "施放魅惑时怪物头顶气泡与玩家被魅惑的屏幕提示"); CharmInterval = Bind(config, "8-魅惑", "施放间隔", 30f, "战斗中每隔多少秒尝试施放一次魅惑"); CharmDuration = Bind(config, "8-魅惑", "持续时长", 8f, "魅惑持续秒数,到时解除(期间被魅惑者无法操作、自动攻击)"); CharmRange = Bind(config, "8-魅惑", "魅惑范围", 15f, "魅惑影响范围内敌对生物的范围(米)"); CharmCastTime = Bind(config, "8-魅惑", "施法时长", 1f, "施放魅惑时怪物停止移动攻击的秒数(施法动画)"); ParasiteEnabled = Bind(config, "8-寄生", "是否启用", def: true, "是否启用寄生效果(周期施法,给攻击目标施加寄生状态替怪物承受伤害)"); ParasiteAllowedTypes = BindAllowed(config, "8-寄生", "小怪,小boss", "寄生适用怪物类型,逗号分隔(Regular/Miniboss/Boss)"); ParasiteChatEnabled = Bind(config, "8-寄生", "文本开关", def: true, "施放寄生时怪物头顶气泡与玩家被寄生的提示"); ParasiteCastTime = Bind(config, "8-寄生", "施法时长", 1f, "施放寄生时怪物停止移动攻击的秒数(施法动画)"); ParasiteInterval = Bind(config, "8-寄生", "触发间隔", 90f, "每间隔多少秒尝试施放一次寄生"); ParasiteDuration = Bind(config, "8-寄生", "寄生持续时长", 15f, "寄生状态持续秒数,期间目标替怪物承受全部伤害"); } } public static class BubbleSpeech { public const float CullDistance = 40f; private const float PlayerCheckRadius = 50f; public static bool PlayerNearby(Character c) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) float num = 2500f; Vector3 position = ((Component)c).transform.position; foreach (Player allPlayer in Player.GetAllPlayers()) { if (!((Object)(object)allPlayer == (Object)null) && !((Character)allPlayer).IsDead()) { Vector3 val = ((Component)allPlayer).transform.position - position; if (((Vector3)(ref val)).sqrMagnitude <= num) { return true; } } } return false; } public static void Say(Character c, string text, float ttl = 4f) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (ValConfig.BubbleMaster.Value && !((Object)(object)Chat.instance == (Object)null) && PlayerNearby(c)) { Chat.instance.SetNpcText(((Component)c).gameObject, Vector3.up * 2.5f, 40f, ttl, "", text, false); } } public static void Center(Character? c, string text) { if (ValConfig.CenterTextMaster.Value && !((Object)(object)c == (Object)null) && CreatureClassifier.Classify(c) == EnemyType.Boss && !((Object)(object)MessageHud.instance == (Object)null) && !((Object)(object)Player.m_localPlayer == (Object)null) && PlayerNearby(c)) { MessageHud.instance.ShowMessage((MessageType)2, text, 0, (Sprite)null, false, true); } } public static string Pick(string[] keys) { return L10n.T(keys[Random.Range(0, keys.Length)]); } } [BepInPlugin("lanlng_LCC", "懒濑:LCC", "1.1.2")] public class MonsterEnhance : BaseUnityPlugin { public static MonsterEnhance Instance { get; private set; } private void Awake() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) Instance = this; ValConfig.Init(((BaseUnityPlugin)this).Config); L10n.Init(); if (ValConfig.EnableModLogging.Value) { ((BaseUnityPlugin)this).Logger.LogInfo((object)("LCC 本地化词条已加载:语言 " + L10n.Lang + "(目录 " + L10n.LangDir + ")")); } ConfigSync.Init(((BaseUnityPlugin)this).Logger); EnhanceManager.Init(); new Harmony("lanlng_LCC").PatchAll(); TestCommands.Register(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"欢迎使用懒濑的LCC mod"); } } public static class TestCommands { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static ConsoleEvent <>9__0_0; public static ConsoleEvent <>9__0_1; internal void <Register>b__0_0(ConsoleEventArgs args) { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) if (args.Length < 3) { args.Context.AddString(L10n.T("lcc.cmd.test.usage")); return; } Player localPlayer = Player.m_localPlayer; ZNetScene instance = ZNetScene.instance; if ((Object)(object)instance == (Object)null) { return; } GameObject prefab = instance.GetPrefab(args[1]); if ((Object)(object)prefab == (Object)null) { args.Context.AddString(L10n.T("lcc.cmd.prefab_missing", args[1])); return; } Vector3 val = Vector3.zero; bool flag = false; if ((Object)(object)localPlayer != (Object)null) { val = ((Component)localPlayer).transform.position; flag = true; } else { foreach (ZNetPeer peer in ZNet.instance.GetPeers()) { if (peer != null && peer.IsReady()) { val = peer.GetRefPos(); flag = true; break; } } } if (!flag) { args.Context.AddString(L10n.T("lcc.cmd.no_player")); return; } string text = args[2].ToLower(); int num = 1; if (text == "share") { num = ValConfig.ShareMinSame.Value; } else if (text == "authority") { num = ValConfig.AuthorityMinMembers.Value + 1; } string text2 = "lcc_test_" + Random.Range(10000, 99999); for (int i = 0; i < num; i++) { Vector3 val2 = val + Vector3.up + new Vector3(Random.Range(-1.5f, 1.5f) + (float)i * 0.6f, 0f, Random.Range(-1.5f, 1.5f)); ZNetView component = Object.Instantiate<GameObject>(prefab, val2, Quaternion.identity).GetComponent<ZNetView>(); if (!((Object)(object)component != (Object)null) || !component.IsValid()) { continue; } component.GetZDO().Set("LCC_enhance", text); if (text == "authority") { component.GetZDO().Set("LCC_squad_id", text2); if (i == 0) { component.GetZDO().Set("LCC_authority_leader", true); } } component.LoadFields(); } args.Context.AddString(L10n.T("lcc.cmd.test.spawned", num, ((Object)prefab).name, text)); } internal void <Register>b__0_1(ConsoleEventArgs args) { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown if ((Object)(object)ZNet.instance == (Object)null || !ZNet.instance.IsServer()) { args.Context.AddString(L10n.T("lcc.cmd.refresh.server_only")); return; } int num = 0; foreach (Character allCharacter in Character.GetAllCharacters()) { if (!((Object)(object)allCharacter == (Object)null) && !allCharacter.IsPlayer() && !allCharacter.IsBoss() && allCharacter.IsMonsterFaction(Time.time)) { allCharacter.Damage(new HitData(1E+10f)); num++; } } int num2 = 0; foreach (SpawnSystem instance in SpawnSystem.m_instances) { ZNetView nview = instance.m_nview; ZDO val = ((nview != null) ? nview.GetZDO() : null); if (val == null) { continue; } foreach (SpawnSystemList spawnList in instance.m_spawnLists) { for (int i = 0; i < spawnList.m_spawners.Count; i++) { if (!((Object)(object)spawnList.m_spawners[i]?.m_prefab == (Object)null)) { int stableHashCode = StringExtensionMethods.GetStableHashCode("b_" + ((Object)spawnList.m_spawners[i].m_prefab).name + (i + 1)); val.Set(stableHashCode, 0L); num2++; } } } } args.Context.AddString(L10n.T("lcc.cmd.refresh.done", num, num2)); } } public static void Register() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown string text = L10n.T("lcc.cmd.test.desc"); object obj = <>c.<>9__0_0; if (obj == null) { ConsoleEvent val = delegate(ConsoleEventArgs args) { //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) if (args.Length < 3) { args.Context.AddString(L10n.T("lcc.cmd.test.usage")); } else { Player localPlayer = Player.m_localPlayer; ZNetScene instance = ZNetScene.instance; if (!((Object)(object)instance == (Object)null)) { GameObject prefab = instance.GetPrefab(args[1]); if ((Object)(object)prefab == (Object)null) { args.Context.AddString(L10n.T("lcc.cmd.prefab_missing", args[1])); } else { Vector3 val3 = Vector3.zero; bool flag = false; if ((Object)(object)localPlayer != (Object)null) { val3 = ((Component)localPlayer).transform.position; flag