예제 #1
0
    public static ILocalSpawnBuilder WithSettings(this ILocalSpawnBuilder builder, LocalSpawnSettings settings)
    {
        settings.PrefabName.Set(builder.SetPrefabName);
        settings.Enabled.Set(builder.SetEnabled);
        settings.SpawnInterval.SetNullable(builder.SetSpawnInterval);
        settings.MinLevel.Set(builder.SetMinLevel);
        settings.MaxLevel.Set(builder.SetMaxLevel);
        settings.SpawnDuringNight.Set(builder.SetSpawnDuringDay);
        settings.SpawnDuringNight.Set(builder.SetSpawnDuringNight);
        settings.SpawnInPlayerBase.Set(builder.SetSpawnInPlayerBase);
        settings.SetPatrolSpawn.Set(builder.SetPatrolSpawn);
        settings.LevelUpChance.Set(builder.SetLevelUpChance);
        settings.ConditionPlayerWithinDistance.Set(builder.SetConditionPlayerWithinDistance);
        settings.ConditionPlayerNoise.Set(builder.SetConditionPlayerNoise);

        foreach (var condition in settings.Conditions)
        {
            builder.SetCondition(condition);
        }

        foreach (var modifier in settings.Modifiers)
        {
            builder.SetModifier(modifier);
        }

        return(builder);
    }
 public static ILocalSpawnBuilder SetModifierDespawnOnConditionsInvalid(
     this ILocalSpawnBuilder builder,
     bool?conditionAllowDuringDay   = null,
     bool?conditionAllowDuringNight = null,
     List <string> conditionAllowDuringEnvironments = null)
 {
     builder.SetModifier(
         new ModifierDespawnOnConditionsInvalid(
             conditionAllowDuringDay,
             conditionAllowDuringNight,
             conditionAllowDuringEnvironments));
     return(builder);
 }
 private static void SetInfusion(ILocalSpawnBuilder builder, CllcCreatureInfusion infusion) => builder.SetModifier(new ModifierCllcInfusion(infusion));
 private static void SetInfusion(ILocalSpawnBuilder builder, string infusionName) => builder.SetModifier(new ModifierCllcInfusion(infusionName));
 private static void SetExtraEffect(ILocalSpawnBuilder builder, CllcCreatureExtraEffect extraEffect) => builder.SetModifier(new ModifierCllcExtraEffect(extraEffect));
 private static void SetExtraEffect(ILocalSpawnBuilder builder, string extraEffectName) => builder.SetModifier(new ModifierCllcExtraEffect(extraEffectName));
 private static void SetBossAffix(ILocalSpawnBuilder builder, CllcBossAffix bossAffix) => builder.SetModifier(new ModifierCllcBossAffix(bossAffix));
 private static void SetBossAffix(ILocalSpawnBuilder builder, string bossAffixName) => builder.SetModifier(new ModifierCllcBossAffix(bossAffixName));
    private static void ApplyConfigToBuilder(CreatureSpawnerConfig config, ILocalSpawnBuilder builder)
    {
        // Default
        if (config.PrefabName.Value.IsNotEmpty())
        {
            builder.SetPrefabName(config.PrefabName.Value);
        }

        builder.SetEnabled(config.Enabled.Value);
        builder.SetMaxLevel(config.LevelMax.Value);
        builder.SetMinLevel(config.LevelMin.Value);
        builder.SetLevelUpChance(config.LevelUpChance.Value);
        builder.SetSpawnInterval(TimeSpan.FromMinutes(config.RespawnTime.Value));
        builder.SetPatrolSpawn(config.SetPatrolPoint.Value);
        builder.SetSpawnDuringNight(config.SpawnAtDay.Value);
        builder.SetSpawnDuringDay(config.SpawnAtNight.Value);
        builder.SetConditionPlayerWithinDistance(config.TriggerDistance.Value);
        builder.SetConditionPlayerNoise(config.TriggerNoise.Value);
        builder.SetSpawnInPlayerBase(config.SpawnInPlayerBase.Value);

        // Modifiers
        if (config.SetFaction.Value.IsNotEmpty())
        {
            builder.SetModifier(new ModifierSetFaction(config.SetFaction.Value));
        }

        builder.SetModifierTamed(config.SetTamed.Value);
        builder.SetModifierTamedCommandable(config.SetTamedCommandable.Value);

        // Modifiers - Integrations
        Config cfg;

        {
            if (IntegrationManager.InstalledCLLC)
            {
                if (config.TryGet(CreatureSpawnerConfigCLLC.ModName, out cfg) &&
                    cfg is CreatureSpawnerConfigCLLC cllcConfig)
                {
                    if (cllcConfig.SetBossAffix.Value.IsNotEmpty())
                    {
                        builder.SetCllcModifierBossAffix(cllcConfig.SetBossAffix.Value);
                    }
                    if (cllcConfig.SetExtraEffect.Value.IsNotEmpty())
                    {
                        builder.SetCllcModifierExtraEffect(cllcConfig.SetExtraEffect.Value);
                    }
                    if (cllcConfig.SetInfusion.Value.IsNotEmpty())
                    {
                        builder.SetCllcModifierInfusion(cllcConfig.SetInfusion.Value);
                    }

                    if (cllcConfig.UseDefaultLevels.Value)
                    {
                        builder.SetModifier(new ModifierDefaultRollLevel(config.LevelMin.Value, config.LevelMax.Value, 0, config.LevelUpChance.Value));
                    }
                }
            }

            if (IntegrationManager.InstalledMobAI)
            {
                if (config.TryGet(CreatureSpawnerConfigMobAI.ModName, out cfg) &&
                    cfg is CreatureSpawnerConfigMobAI mobAIConfig)
                {
                    if (mobAIConfig.SetAI.Value.IsNotEmpty())
                    {
                        builder.SetMobAiModifier(mobAIConfig.SetAI.Value, mobAIConfig.AIConfigFile.Value);
                    }
                }
            }
        }
    }
 /// <summary>
 /// Sets a custom string on entity zdo with key "spawn_template_id".
 /// Intended for integration between mods, and detecting a modified entity.
 /// </summary>
 public static ILocalSpawnBuilder SetModifierTemplateId(this ILocalSpawnBuilder builder, string templateId)
 {
     builder.SetModifier(new ModifierSetTemplateId(templateId));
     return(builder);
 }
 public static ILocalSpawnBuilder SetModifierTamedCommandable(this ILocalSpawnBuilder builder, bool commandable)
 {
     builder.SetModifier(new ModifierSetTamedCommandable(commandable));
     return(builder);
 }
 public static ILocalSpawnBuilder SetModifierTamed(this ILocalSpawnBuilder builder, bool tamed)
 {
     builder.SetModifier(new ModifierSetTamed(tamed));
     return(builder);
 }
 public static ILocalSpawnBuilder SetModifierFaction(this ILocalSpawnBuilder builder, Character.Faction faction)
 {
     builder.SetModifier(new ModifierSetFaction(faction));
     return(builder);
 }
 public static ILocalSpawnBuilder SetModifierRelentless(this ILocalSpawnBuilder builder, bool relentless)
 {
     builder.SetModifier(new ModifierSetRelentless(relentless));
     return(builder);
 }
 private static void SetRandomLevel(ILocalSpawnBuilder builder) => builder.SetModifier(new ModifierCllcRandomLevel());
 private static void SetModifier(ILocalSpawnBuilder builder, string aiName, string mobAiConfig) => builder.SetModifier(new ModifierSetAI(aiName, mobAiConfig));
 public static ILocalSpawnBuilder SetModifierDespawnOnAlert(this ILocalSpawnBuilder builder, bool despawnOnAlert)
 {
     builder.SetModifier(new ModifierDespawnOnAlert(despawnOnAlert));
     return(builder);
 }