From 9d30563145a2788c8a9ff1aeb4f8fe37221f3446 Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 12 Sep 2015 11:26:27 +0000 Subject: [PATCH] Config to ignore NPC stat formulas. --- trunk/dist/game/config/NPC.ini | 20 ++++-- trunk/java/com/l2jserver/Config.java | 4 ++ .../gameserver/model/stats/Formulas.java | 67 ++++++++++--------- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/trunk/dist/game/config/NPC.ini b/trunk/dist/game/config/NPC.ini index 1478644c5b..1c66adcc48 100644 --- a/trunk/dist/game/config/NPC.ini +++ b/trunk/dist/game/config/NPC.ini @@ -73,6 +73,7 @@ MinNPCLevelForMagicPenalty = 78 # Default: unknown SkillChancePenaltyForLvLDifferences = 2.5, 3.0, 3.25, 3.5 + # --------------------------------------------------------------------------- # Monsters # --------------------------------------------------------------------------- @@ -93,6 +94,7 @@ SpoiledCorpseExtendTime = 10 # Default: 2000 CorpseConsumeSkillAllowedTimeBeforeDecay = 2000 + # --------------------------------------------------------------------------- # Guards # --------------------------------------------------------------------------- @@ -125,6 +127,7 @@ MaximumSlotsForPet = 12 PetHpRegenMultiplier = 100 PetMpRegenMultiplier = 100 + # --------------------------------------------------------------------------- # Raid Bosses # --------------------------------------------------------------------------- @@ -178,6 +181,11 @@ RaidChaosTime = 10 GrandChaosTime = 10 MinionChaosTime = 10 +# It removes STR,CON... bonuses. +# With this npcs will use the stats given directly from the xml. +IgnoreNpcStatFormulas = True + + # --------------------------------------------------------------------------- # Drops # --------------------------------------------------------------------------- @@ -193,25 +201,25 @@ UseDeepBlueDropRulesRaid = True # The min and max level difference used for level gap calculation # this is only for how many levels higher the player is than the monster # Default: 8 -DropAdenaMinLevelDifference=8 +DropAdenaMinLevelDifference = 8 # Default: 15 -DropAdenaMaxLevelDifference=15 +DropAdenaMaxLevelDifference = 15 # This is the minimum level gap chance meaning for 10 that the monster will have 10% chance # to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference # Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits # Default: 10 -DropAdenaMinLevelGapChance=10 +DropAdenaMinLevelGapChance = 10 # The min and max level difference used for level gap calculation # this is only for how many levels higher the player is than the monster # Default: 5 -DropItemMinLevelDifference=5 +DropItemMinLevelDifference = 5 # Default: 10 -DropItemMaxLevelDifference=10 +DropItemMaxLevelDifference = 10 # This is the minimum level gap chance meaning for 10 that the monster will have 10% chance # to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference # Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits # Default: 10 -DropItemMinLevelGapChance=10 \ No newline at end of file +DropItemMinLevelGapChance = 10 diff --git a/trunk/java/com/l2jserver/Config.java b/trunk/java/com/l2jserver/Config.java index eba11d8044..0994df4b92 100644 --- a/trunk/java/com/l2jserver/Config.java +++ b/trunk/java/com/l2jserver/Config.java @@ -111,6 +111,7 @@ public final class Config public static final String CHAT_FILTER_FILE = "./config/chatfilter.txt"; public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.ini"; public static final String GEODATA_FILE = "./config/GeoData.ini"; + // -------------------------------------------------- // L2J Variable Definitions // -------------------------------------------------- @@ -897,6 +898,7 @@ public final class Config public static int DROP_ITEM_MIN_LEVEL_DIFFERENCE; public static int DROP_ITEM_MAX_LEVEL_DIFFERENCE; public static double DROP_ITEM_MIN_LEVEL_GAP_CHANCE; + public static boolean IGNORE_NPC_STAT_FORMULAS; // -------------------------------------------------- // PvP Settings @@ -2089,6 +2091,8 @@ public final class Config DROP_ITEM_MAX_LEVEL_DIFFERENCE = NPC.getInt("DropItemMaxLevelDifference", 10); DROP_ITEM_MIN_LEVEL_GAP_CHANCE = NPC.getDouble("DropItemMinLevelGapChance", 10); + IGNORE_NPC_STAT_FORMULAS = NPC.getBoolean("IgnoreNpcStatFormulas", true); + // Load Rates L2Properties file (if exists) final PropertiesParser RatesSettings = new PropertiesParser(RATES_CONFIG_FILE); diff --git a/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java b/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java index ac09b29b1d..20b59488c6 100644 --- a/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java +++ b/trunk/java/com/l2jserver/gameserver/model/stats/Formulas.java @@ -116,29 +116,41 @@ public final class Formulas { Calculator[] std = new Calculator[Stats.NUM_STATS]; - std[Stats.MAX_HP.ordinal()] = new Calculator(); - std[Stats.MAX_HP.ordinal()].addFunc(FuncMaxHpMul.getInstance()); - - std[Stats.MAX_MP.ordinal()] = new Calculator(); - std[Stats.MAX_MP.ordinal()].addFunc(FuncMaxMpMul.getInstance()); - - std[Stats.POWER_ATTACK.ordinal()] = new Calculator(); - std[Stats.POWER_ATTACK.ordinal()].addFunc(FuncPAtkMod.getInstance()); - - std[Stats.MAGIC_ATTACK.ordinal()] = new Calculator(); - std[Stats.MAGIC_ATTACK.ordinal()].addFunc(FuncMAtkMod.getInstance()); - - std[Stats.POWER_DEFENCE.ordinal()] = new Calculator(); - std[Stats.POWER_DEFENCE.ordinal()].addFunc(FuncPDefMod.getInstance()); - - std[Stats.MAGIC_DEFENCE.ordinal()] = new Calculator(); - std[Stats.MAGIC_DEFENCE.ordinal()].addFunc(FuncMDefMod.getInstance()); - - std[Stats.CRITICAL_RATE.ordinal()] = new Calculator(); - std[Stats.CRITICAL_RATE.ordinal()].addFunc(FuncAtkCritical.getInstance()); - - std[Stats.MCRITICAL_RATE.ordinal()] = new Calculator(); - std[Stats.MCRITICAL_RATE.ordinal()].addFunc(FuncMAtkCritical.getInstance()); + if (!Config.IGNORE_NPC_STAT_FORMULAS) + { + std[Stats.MAX_HP.ordinal()] = new Calculator(); + std[Stats.MAX_HP.ordinal()].addFunc(FuncMaxHpMul.getInstance()); + + std[Stats.MAX_MP.ordinal()] = new Calculator(); + std[Stats.MAX_MP.ordinal()].addFunc(FuncMaxMpMul.getInstance()); + + std[Stats.POWER_ATTACK.ordinal()] = new Calculator(); + std[Stats.POWER_ATTACK.ordinal()].addFunc(FuncPAtkMod.getInstance()); + + std[Stats.MAGIC_ATTACK.ordinal()] = new Calculator(); + std[Stats.MAGIC_ATTACK.ordinal()].addFunc(FuncMAtkMod.getInstance()); + + std[Stats.POWER_DEFENCE.ordinal()] = new Calculator(); + std[Stats.POWER_DEFENCE.ordinal()].addFunc(FuncPDefMod.getInstance()); + + std[Stats.MAGIC_DEFENCE.ordinal()] = new Calculator(); + std[Stats.MAGIC_DEFENCE.ordinal()].addFunc(FuncMDefMod.getInstance()); + + std[Stats.CRITICAL_RATE.ordinal()] = new Calculator(); + std[Stats.CRITICAL_RATE.ordinal()].addFunc(FuncAtkCritical.getInstance()); + + std[Stats.MCRITICAL_RATE.ordinal()] = new Calculator(); + std[Stats.MCRITICAL_RATE.ordinal()].addFunc(FuncMAtkCritical.getInstance()); + + std[Stats.POWER_ATTACK_SPEED.ordinal()] = new Calculator(); + std[Stats.POWER_ATTACK_SPEED.ordinal()].addFunc(FuncPAtkSpeed.getInstance()); + + std[Stats.MAGIC_ATTACK_SPEED.ordinal()] = new Calculator(); + std[Stats.MAGIC_ATTACK_SPEED.ordinal()].addFunc(FuncMAtkSpeed.getInstance()); + + std[Stats.MOVE_SPEED.ordinal()] = new Calculator(); + std[Stats.MOVE_SPEED.ordinal()].addFunc(FuncMoveSpeed.getInstance()); + } std[Stats.ACCURACY_COMBAT.ordinal()] = new Calculator(); std[Stats.ACCURACY_COMBAT.ordinal()].addFunc(FuncAtkAccuracy.getInstance()); @@ -146,15 +158,6 @@ public final class Formulas std[Stats.EVASION_RATE.ordinal()] = new Calculator(); std[Stats.EVASION_RATE.ordinal()].addFunc(FuncAtkEvasion.getInstance()); - std[Stats.POWER_ATTACK_SPEED.ordinal()] = new Calculator(); - std[Stats.POWER_ATTACK_SPEED.ordinal()].addFunc(FuncPAtkSpeed.getInstance()); - - std[Stats.MAGIC_ATTACK_SPEED.ordinal()] = new Calculator(); - std[Stats.MAGIC_ATTACK_SPEED.ordinal()].addFunc(FuncMAtkSpeed.getInstance()); - - std[Stats.MOVE_SPEED.ordinal()] = new Calculator(); - std[Stats.MOVE_SPEED.ordinal()].addFunc(FuncMoveSpeed.getInstance()); - std[Stats.ACCURACY_MAGIC.ordinal()] = new Calculator(); std[Stats.ACCURACY_MAGIC.ordinal()].addFunc(FuncMatkAccuracy.getInstance());