예제 #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 SetCllcConditionWorldLevel(this ILocalSpawnBuilder builder, int?minWorldLevel, int?maxWorldLevel)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetConditionWorldLevel(builder, minWorldLevel, maxWorldLevel);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetCllcModifierExtraEffect(this ILocalSpawnBuilder builder, CllcCreatureExtraEffect extraEffect)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetExtraEffect(builder, extraEffect);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetCllcModifierExtraEffect(this ILocalSpawnBuilder builder, string extraEffectName)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetExtraEffect(builder, extraEffectName);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetCllcModifierRandomLevel(this ILocalSpawnBuilder builder)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetRandomLevel(builder);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetMobAiModifier(this ILocalSpawnBuilder builder, string aiName, string mobAiConfig)
    {
        if (IntegrationManager.InstalledMobAI)
        {
            SetModifier(builder, aiName, mobAiConfig);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetCllcModifierInfusion(this ILocalSpawnBuilder builder, string infusionName)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetInfusion(builder, infusionName);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetCllcModifierInfusion(this ILocalSpawnBuilder builder, CllcCreatureInfusion infusion)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetInfusion(builder, infusion);
        }

        return(builder);
    }
    public static ILocalSpawnBuilder SetCllcModifierBossAffix(this ILocalSpawnBuilder builder, string bossAffixName)
    {
        if (IntegrationManager.InstalledCLLC)
        {
            SetBossAffix(builder, bossAffixName);
        }

        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, string infusionName) => builder.SetModifier(new ModifierCllcInfusion(infusionName));
 private static void SetExtraEffect(ILocalSpawnBuilder builder, CllcCreatureExtraEffect extraEffect) => builder.SetModifier(new ModifierCllcExtraEffect(extraEffect));
 /// <summary>
 /// <para>Sets global keys which must not be present for spawning to be allowed.</para>
 /// <para>
 ///     Eg., if GlobalKey.Troll, GlobalKey.Eikthyr and world has global key "defeated_eikthyr",
 ///     then this template will be disabled.
 /// </para>
 /// </summary>
 public static ILocalSpawnBuilder SetGlobalKeysRequiredMissing(this ILocalSpawnBuilder builder, IEnumerable <GlobalKey> globalKeys)
 {
     builder.SetCondition(new ConditionGlobalKeysRequiredMissing(globalKeys.Select(x => x.GetName()).ToArray()));
     return(builder);
 }
 private static void SetConditionWorldLevel(ILocalSpawnBuilder builder, int?minWorldLevel, int?maxWorldLevel) => builder.SetCondition(new ConditionWorldLevel(minWorldLevel, maxWorldLevel));
 public static ILocalSpawnBuilder SetModifierRelentless(this ILocalSpawnBuilder builder, bool relentless)
 {
     builder.SetModifier(new ModifierSetRelentless(relentless));
     return(builder);
 }
 private static void SetBossAffix(ILocalSpawnBuilder builder, string bossAffixName) => builder.SetModifier(new ModifierCllcBossAffix(bossAffixName));
 public static ILocalSpawnBuilder SetModifierDespawnOnAlert(this ILocalSpawnBuilder builder, bool despawnOnAlert)
 {
     builder.SetModifier(new ModifierDespawnOnAlert(despawnOnAlert));
     return(builder);
 }
 /// <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);
 }
 private static void SetInfusion(ILocalSpawnBuilder builder, CllcCreatureInfusion infusion) => builder.SetModifier(new ModifierCllcInfusion(infusion));
 private static void SetBossAffix(ILocalSpawnBuilder builder, CllcBossAffix bossAffix) => builder.SetModifier(new ModifierCllcBossAffix(bossAffix));
 private static void SetModifier(ILocalSpawnBuilder builder, string aiName, string mobAiConfig) => builder.SetModifier(new ModifierSetAI(aiName, mobAiConfig));
 private static void SetRandomLevel(ILocalSpawnBuilder builder) => builder.SetModifier(new ModifierCllcRandomLevel());
 /// <summary>
 /// <para>Set spawn chance based on each area.</para>
 /// <para>
 ///     Each area rolls chance pr template id once pr seed.
 ///     If the chance roll is less than listed here,
 ///     this area will never activate this template, and vice versa.
 /// </para>
 /// <para>
 ///     This allows for sitations where only some areas (eg., 10% of blackforests) will have a spawn show up.
 /// </para>
 /// </summary>
 public static ILocalSpawnBuilder SetConditionAreaSpawnChance(this ILocalSpawnBuilder builder, float areaChance, uint templateId)
 {
     builder.SetCondition(new ConditionAreaSpawnChance(areaChance, (int)templateId));
     return(builder);
 }
 /// <summary>
 /// Sets range from center of world, in which spawning is allowed.
 /// </summary>
 /// <param name="minDistance">Required distance from center.</param>
 /// <param name="maxDistance">Maximum distance from center. If null, there will be no limit.</param>
 public static ILocalSpawnBuilder SetConditionDistanceToCenter(this ILocalSpawnBuilder builder, double?minDistance = null, double?maxDistance = null)
 {
     builder.SetCondition(new ConditionDistanceToCenter(minDistance, maxDistance));
     return(builder);
 }
 private static void SetExtraEffect(ILocalSpawnBuilder builder, string extraEffectName) => builder.SetModifier(new ModifierCllcExtraEffect(extraEffectName));
 /// <summary>
 /// <para>Spawn template is only active when player is within <c>withinDistance</c> to Spawner.</para>
 /// </summary>
 public static ILocalSpawnBuilder SetConditionCloseToPlayer(this ILocalSpawnBuilder builder, float withinDistance)
 {
     builder.SetCondition(new ConditionCloseToPlayer(withinDistance));
     return(builder);
 }
 /// <summary>
 /// <para>Sets global keys which must not be present for spawning to be allowed.</para>
 /// <para>
 ///     Eg., if "KilledTroll", "defeated_eikthyr" and world has global key "defeated_eikthyr",
 ///     then this template will be disabled.
 /// </para>
 /// </summary>
 public static ILocalSpawnBuilder SetGlobalKeysRequiredMissing(this ILocalSpawnBuilder builder, params string[] globalKeys)
 {
     builder.SetCondition(new ConditionGlobalKeysRequiredMissing(globalKeys.ToArray()));
     return(builder);
 }