protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryCombat>(); var statNameDamageBonus = this.StatNameDamageBonusMultiplier; var statNameSpecialEffectChance = this.StatNameSpecialEffectChanceMultiplier; var statNameDegradationRate = this.StatNameDegrationRateMultiplier; config.AddStatEffect( statNameDamageBonus, level: 10, percentBonus: 2); config.AddStatEffect( statNameDamageBonus, level: 15, percentBonus: 3); config.AddStatEffect( statNameDamageBonus, level: 20, percentBonus: 5); config.AddStatEffect( statNameSpecialEffectChance, formulaPercentBonus: level => level * 5); config.AddStatEffect( statNameDegradationRate, formulaPercentBonus: level => - level * 1); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryProduction>(); // every level bonus config.AddStatEffect( StatName.MiningSpeed, formulaPercentBonus: level => level * 2); // lvl 10 bonus config.AddFlagEffect( Flags.AdditionalYield, level: 10); // lvl 15 bonus config.AddFlagEffect( Flags.FindGemstones, level: 15); // lvl 20 bonus config.AddStatEffect( StatName.MiningSpeed, level: 20, percentBonus: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { // Since close combat weapons are inferior to ranged weapons it have special bonuses to counteract that. // (that's why we override prepare method here) config.Category = GetCategory <SkillCategoryCombat>(); var statNameDamageBonus = this.StatNameDamageBonusMultiplier; var statNameSpecialEffectChance = this.StatNameSpecialEffectChanceMultiplier; var statNameDegradationRate = this.StatNameDegrationRateMultiplier; config.AddStatEffect( statNameDamageBonus, level: 10, percentBonus: 2); config.AddStatEffect( statNameDamageBonus, level: 15, percentBonus: 3); config.AddStatEffect( statNameDamageBonus, level: 20, percentBonus: 5); config.AddStatEffect( statNameSpecialEffectChance, formulaPercentBonus: level => level * 5); config.AddStatEffect( statNameDegradationRate, formulaPercentBonus: level => - level * 1); }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryAgriculture>(); config.MaxLevel = maxLevel; config.AddStatEffect( StatName.ForagingSpeed, level: 1, percentBonus: 10); config.AddStatEffect( StatName.ForagingSpeed, formulaPercentBonus: level => level * 4); config.AddFlagEffect( Flags.AdditionalYield, level: 10); config.AddStatEffect( StatName.ForagingSpeed, level: maxLevel, percentBonus: 10); }
protected override void PrepareProtoWeaponsSkillRanged(SkillConfig config) { // faster explosion planting // unlock bonus config.AddStatEffect( StatName.ItemExplosivePlantingSpeedMultiplier, level: 1, percentBonus: 20); // every level bonus config.AddStatEffect( StatName.ItemExplosivePlantingSpeedMultiplier, formulaPercentBonus: level => level * 3); // lvl 20 bonus config.AddStatEffect( StatName.ItemExplosivePlantingSpeedMultiplier, level: 20, percentBonus: 20); // other bonuses config.AddStatEffect(this.StatNameReloadingSpeedMultiplier.Value, formulaPercentBonus: level => - level * 2); config.AddStatEffect(this.StatNameDegrationRateMultiplier, formulaPercentBonus: level => - level * 2); }
protected override void PrepareProtoWeaponsSkillRanged(SkillConfig config) { var statNameDamageBonus = this.StatNameDamageBonusMultiplier; var statNameReloadingSpeed = this.StatNameReloadingSpeedMultiplier; var statNameDegradationRate = this.StatNameDegrationRateMultiplier; config.AddStatEffect( statNameDamageBonus, level: 10, percentBonus: 2); config.AddStatEffect( statNameDamageBonus, level: 20, percentBonus: 3); if (statNameReloadingSpeed.HasValue) { config.AddStatEffect( statNameReloadingSpeed.Value, formulaPercentBonus: level => - level * 2); } config.AddStatEffect( statNameDegradationRate, formulaPercentBonus: level => - level * 2); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryTechnical>(); // Note: total effect would be +100% crafting speed (or -50% crafting duration) at level 20. config.AddStatEffect( StatName.CraftingSpeed, formulaPercentBonus: level => level * 4); config.AddStatEffect( StatName.CraftingSpeed, level: 10, percentBonus: 10); config.AddStatEffect( StatName.CraftingSpeed, level: 20, percentBonus: 10); // add 2 extra slots at lvl 15 and 10 config.AddStatEffect( StatName.CraftingQueueMaxSlotsCount, level: 5, valueBonus: 1); config.AddStatEffect( StatName.CraftingQueueMaxSlotsCount, level: 15, valueBonus: 1); CraftingMechanics.ServerNonManufacturingRecipeCrafted += ServerOnRecipeCraftedHandler; }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryPersonal>(); var statName = StatName.LearningsPointsGainMultiplier; config.AddStatEffect( statName, formulaPercentBonus: level => level); // each level +1% LP gain config.AddStatEffect( statName, level: 1, percentBonus: 5); config.AddStatEffect( statName, level: 10, percentBonus: 5); config.AddStatEffect( statName, level: 15, percentBonus: 5); config.AddStatEffect( statName, level: 20, percentBonus: 5); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryPersonal>(); // Skill effects: // each level +5 LP retained after death var statName = StatName.LearningPointsRetainedAfterDeath; config.AddStatEffect( statName, formulaValueBonus: level => level * 5); // level 10: config.AddStatEffect( statName, level: 10, valueBonus: 10); // level 15: config.AddStatEffect( statName, level: 15, valueBonus: 20); // level 20: config.AddStatEffect( statName, level: 20, valueBonus: 50); // Please note: default value is 20 LP retained after death + bonus from this skill. // At maximum level 200LP is retained after death. }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryProduction>(); // level bonus config.AddStatEffect( StatName.WoodcuttingSpeed, formulaPercentBonus: level => level * 2); // lvl 5 bonus config.AddFlagEffect( Flags.GetSapplings, level: 5); // lvl 5 bonus config.AddFlagEffect( Flags.GetExtraSapplings, level: 15); // lvl 20 bonus config.AddStatEffect( StatName.WoodcuttingSpeed, level: 20, percentBonus: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { if (IsServer) { PlayerCharacterTechnologies.ServerCharacterGainedLearningPoints += this.ServerCharacterGainedLearningPointsHandler; } config.Category = GetCategory <SkillCategoryPersonal>(); var statName = StatName.LearningsPointsGainMultiplier; config.AddStatEffect( statName, formulaPercentBonus: level => level); config.AddStatEffect( statName, level: 10, percentBonus: 5); config.AddStatEffect( statName, level: 15, percentBonus: 5); config.AddStatEffect( statName, level: 20, percentBonus: 5); }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryPersonal>(); config.MaxLevel = maxLevel; var stats = new[] { HealthMax, StaminaMax, FoodMax, WaterMax }; foreach (var statName in stats) { config.AddStatEffect( statName, formulaPercentBonus: level => level); config.AddStatEffect( statName, level: maxLevel, percentBonus: 5); } if (IsServer) { TriggerTimeInterval.ServerConfigureAndRegister( TimeSpan.FromSeconds(TimerIntervalSeconds), this.ServerTimerTick, "Skill.SurvivalAddExperience"); } }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryTechnical>(); var statName = StatName.CraftingSpeed; config.AddStatEffect( statName, level: 1, percentBonus: 10); config.AddStatEffect( statName, formulaPercentBonus: level => level * 3); config.AddStatEffect( statName, level: 10, percentBonus: 5); config.AddStatEffect( statName, level: 15, percentBonus: 10); config.AddStatEffect( statName, level: 20, percentBonus: 15); // Note: total effect would be +100% crafting speed (or -50% crafting duration) at level 20. }
protected override void PrepareProtoWeaponsSkillRanged(SkillConfig config) { config.AddStatEffect( StatName.WeaponEnergyWeaponEnergyConsumptionMultiplier, formulaPercentBonus: level => - level * 2); base.PrepareProtoWeaponsSkillRanged(config); }
protected override void PrepareProtoWeaponsSkillRanged(SkillConfig config) { config.Category = GetCategory <SkillCategoryTechnical>(); var statNameReloadingSpeed = this.StatNameReloadingSpeedMultiplier; if (statNameReloadingSpeed.HasValue) { config.AddStatEffect( statNameReloadingSpeed.Value, formulaPercentBonus: level => - level * 2); } config.AddStatEffect( StatName.VehicleFuelConsumptionRate, formulaPercentBonus: level => - level, displayTotalValue: true); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryTechnical>(); // each level +1% bonus config.AddStatEffect( StatName.TinkerTableBonus, formulaPercentBonus: level => level); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryPersonal>(); var statName = StatName.RunningStaminaConsumptionPerSecond; config.AddStatEffect( statName, level: 1, percentBonus: -5); config.AddStatEffect( statName, formulaPercentBonus: level => - 2 * level); config.AddStatEffect( statName, level: this.MaxLevel, percentBonus: -5); }
protected override void PrepareProtoWeaponsSkillRanged(SkillConfig config) { //base.PrepareProtoWeaponsSkillRanged(config); // unlock bonus config.AddStatEffect( StatName.ItemExplosivePlantingSpeedMultiplier, level: 1, percentBonus: -5); // every level bonus config.AddStatEffect( StatName.ItemExplosivePlantingSpeedMultiplier, formulaPercentBonus: level => - level * 2); // lvl 20 bonus config.AddStatEffect( StatName.ItemExplosivePlantingSpeedMultiplier, level: 20, percentBonus: -5); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryTechnical>(); // each level +2% bonus config.AddStatEffect( StatName.TinkerTableBonus, formulaPercentBonus: level => level * 2); config.AddFlagEffect( Flags.ChanceToRepairCompletely, level: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryAgriculture>(); config.MaxLevel = maxLevel; config.AddStatEffect( StatName.FishingKnowledgeLevel, formulaValueBonus: level => 5 * level, displayTotalValue: true); // improve on +1% with every level (base value is 80% see BaseFishCatchChancePercents) config.AddStatEffect( StatName.FishingSuccess, formulaPercentBonus: level => level, displayTotalValue: true); config.AddFlagEffect( Flags.FishingChanceToSaveBait, level: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryPersonal>(); config.MaxLevel = maxLevel; // 2 effects at max level: // -40% durability loss from damage taken (but not death) // -40% durability loss from time var stats = new[] { ImplantDegradationFromDamageMultiplier, ImplantDegradationSpeedMultiplier, }; foreach (var statName in stats) { config.AddStatEffect( statName, formulaPercentBonus: level => - level); config.AddStatEffect( statName, level: 10, percentBonus: -5); config.AddStatEffect( statName, level: 15, percentBonus: -5); config.AddStatEffect( statName, level: maxLevel, percentBonus: -10); } }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryTechnical>(); config.MaxLevel = maxLevel; var statName = StatName.BuildingSpeed; config.AddStatEffect( statName, level: 1, percentBonus: 10); config.AddStatEffect( statName, formulaPercentBonus: level => level * 4); config.AddStatEffect( statName, level: maxLevel, percentBonus: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryAgriculture>(); config.MaxLevel = maxLevel; // Level 1: speed of farming tasks config.AddStatEffect( StatName.FarmingTasksSpeed, level: 1, percentBonus: 10); // Level 1: plants grow speed config.AddStatEffect( StatName.FarmingPlantGrowSpeed, level: 1, percentBonus: 10); // Speed of farming tasks (such as plant gathering or watering, etc.) config.AddStatEffect( StatName.FarmingTasksSpeed, formulaPercentBonus: level => level * 4); // Plants grow speed config.AddStatEffect( StatName.FarmingPlantGrowSpeed, formulaPercentBonus: level => level * 4); // Level 10: Chance for extra yield (the effect is dependent on a particular plant, so no specific number here, it is just a flag) config.AddFlagEffect( Flags.AdditionalYield, level: 10); // Level 20: speed of farming tasks config.AddStatEffect( StatName.FarmingTasksSpeed, level: maxLevel, percentBonus: 10); // Level 20: plants grow speed config.AddStatEffect( StatName.FarmingPlantGrowSpeed, level: maxLevel, percentBonus: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { config.Category = GetCategory <SkillCategoryMisc>(); // searching speed config.AddStatEffect( StatName.SearchingSpeed, level: 1, percentBonus: 5); config.AddStatEffect( StatName.SearchingSpeed, formulaPercentBonus: level => 2 * level); config.AddStatEffect( StatName.SearchingSpeed, level: 20, percentBonus: 5); // extra loot chance config.AddStatEffect( StatName.SearchingExtraLoot, level: 1, percentBonus: 2); config.AddStatEffect( StatName.SearchingExtraLoot, formulaPercentBonus: level => level); config.AddStatEffect( StatName.SearchingExtraLoot, level: 15, percentBonus: 3); // chance to find rare items config.AddFlagEffect( Flags.ChanceToFindRareItems, level: 10); }
protected override void PrepareProtoSkill(SkillConfig config) { byte maxLevel = 20; config.Category = GetCategory <SkillCategoryAgriculture>(); config.MaxLevel = maxLevel; // extra loot chance bonus config.AddStatEffect( StatName.HuntingExtraLoot, level: 1, percentBonus: 2); config.AddStatEffect( StatName.HuntingExtraLoot, formulaPercentBonus: level => level); config.AddStatEffect( StatName.HuntingExtraLoot, level: maxLevel, percentBonus: 3); // corpse gathering speed bonus config.AddStatEffect( StatName.HuntingLootingSpeed, level: 1, percentBonus: 10); config.AddStatEffect( StatName.HuntingLootingSpeed, formulaPercentBonus: level => level * 4); config.AddStatEffect( StatName.HuntingLootingSpeed, level: maxLevel, percentBonus: 10); }