* Please note that {@link PositionableObject} values are only set if the object
@@ -127,6 +127,13 @@ public class Item extends PositionableObject {
return templateID;
}
+ /**
+ * @return the templateID
+ */
+ public ItemTemplate getTemplate() {
+ return templateID.getTemplate();
+ }
+
/**
* @return the ownerID
*/
diff --git a/src/main/java/com/l2jserver/model/world/actor/calculator/ActorCalculator.java b/src/main/java/com/l2jserver/model/world/actor/calculator/ActorCalculator.java
index 2765d4e13..cf40c7544 100644
--- a/src/main/java/com/l2jserver/model/world/actor/calculator/ActorCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/actor/calculator/ActorCalculator.java
@@ -16,13 +16,17 @@
*/
package com.l2jserver.model.world.actor.calculator;
-import com.l2jserver.util.calculator.SimpleCalculator;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.util.calculator.Calculator;
+import com.l2jserver.util.calculator.ComplexCalculator;
/**
* @author Rogiel
*/
-public class ActorCalculator extends SimpleCalculator
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator MP_BONUS_CALCULATOR = new MaximumMPBonusCalculator();
+ private static final ActorFormula MP_BONUS_FORMULA = new MaximumMPBonusCalculator();
/**
* The calculator for run speed bonus
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator RUN_SPEED_BONUS_CALCULATOR = new RunSpeedBonusCalculator();
+ private static final ActorFormula RUN_SPEED_BONUS_FORMULA = new RunSpeedBonusCalculator();
/**
* The calculator for walk speed bonus
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator WALK_SPEED_BONUS_CALCULATOR = new WalkSpeedBonusCalculator();
+ private static final ActorFormula WALK_SPEED_BONUS_FORMULA = new WalkSpeedBonusCalculator();
/**
* The calculator base physical attack
@@ -75,28 +75,28 @@ public abstract class ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator PHYSICAL_ATTACK_SPEED_BONUS_CALCULATOR = new PhysicalAttackSpeedBonusCalculator();
+ private static final ActorFormula PHYSICAL_ATTACK_SPEED_BONUS_FORMULA = new PhysicalAttackSpeedBonusCalculator();
/**
* The calculator base physical attack critical rate
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator PHYSICAL_CRITICAL_RATE_BONUS_CALCULATOR = new PhysicalCriticalRateBonusCalculator();
+ private static final ActorFormula PHYSICAL_CRITICAL_RATE_BONUS_FORMULA = new PhysicalCriticalRateBonusCalculator();
/**
* The calculator base physical defense
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator PHYSICAL_DEFENSE_BONUS_CALCULATOR = new PhysicalDefenseBonusCalculator();
+ private static final ActorFormula PHYSICAL_DEFENSE_BONUS_FORMULA = new PhysicalDefenseBonusCalculator();
/**
* The calculator base magical attack
@@ -104,28 +104,28 @@ public abstract class ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator MAGICAL_ATTACK_SPEED_BONUS_CALCULATOR = new MagicalAttackSpeedBonusCalculator();
+ private static final ActorFormula MAGICAL_ATTACK_SPEED_BONUS_FORMULA = new MagicalAttackSpeedBonusCalculator();
/**
* The calculator base magical attack critical rate
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator MAGICAL_CRITICAL_RATE_BONUS_CALCULATOR = new MagicalCriticalRateBonusCalculator();
+ private static final ActorFormula MAGICAL_CRITICAL_RATE_BONUS_FORMULA = new MagicalCriticalRateBonusCalculator();
/**
* The calculator base magical defense
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator MAGICAL_DEFENSE_BONUS_CALCULATOR = new MagicalDefenseBonusCalculator();
+ private static final ActorFormula MAGICAL_DEFENSE_BONUS_FORMULA = new MagicalDefenseBonusCalculator();
/**
* The calculator base attack accuracy
@@ -133,52 +133,27 @@ public abstract class ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final ActorCalculator ATTACK_EVASION_BONUS_CALCULATOR = new AttackEvasionBonusCalculator();
+ private static final ActorFormula ATTACK_EVASION_BONUS_FORMULA = new AttackEvasionBonusCalculator();
- /**
- * The list of calculators for this character
- *
- * It is safe to use an array since this number cannot be changed in
- * runtime, it would be required to be able to change the {@link StatType}
- * enum. Also, an full-sized array is created because this way we don't need
- * to change the array size very often. A bit of memory is "lost", but the
- * speed gain is much higher.
- */
@SuppressWarnings("unchecked")
- private final SimpleCalculator
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_MP_CALCULATOR = new CharacterBaseMPCalculator();
+ private static final CharacterFormula BASE_MP_FORMULA = new CharacterBaseMPCalculator();
/**
* The calculator for base maximum CP
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_CP_CALCULATOR = new CharacterBaseCPCalculator();
+ private static final CharacterFormula BASE_CP_FORMULA = new CharacterBaseCPCalculator();
/**
* The calculator for base intelligence
@@ -96,42 +99,42 @@ public class CharacterStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_STR_CALCULATOR = new CharacterBaseStrengthCalculator();
+ private static final CharacterFormula BASE_STR_FORMULA = new CharacterBaseStrengthCalculator();
/**
* The calculator for base concentration
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_CON_CALCULATOR = new CharacterBaseConcentrationCalculator();
+ private static final CharacterFormula BASE_CON_FORMULA = new CharacterBaseConcentrationCalculator();
/**
* The calculator for base mentality
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_MEN_CALCULATOR = new CharacterBaseMentalityCalculator();
+ private static final CharacterFormula BASE_MEN_FORMULA = new CharacterBaseMentalityCalculator();
/**
* The calculator for base dexterity
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_DEX_CALCULATOR = new CharacterBaseDexterityCalculator();
+ private static final CharacterFormula BASE_DEX_FORMULA = new CharacterBaseDexterityCalculator();
/**
* The calculator for base witness
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_WIT_CALCULATOR = new CharacterBaseWitnessCalculator();
+ private static final CharacterFormula BASE_WIT_FORMULA = new CharacterBaseWitnessCalculator();
/**
* The calculator for base run speed
@@ -139,14 +142,14 @@ public class CharacterStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_WALK_SPEED_CALCULATOR = new CharacterBaseWalkSpeedCalculator();
+ private static final CharacterFormula BASE_WALK_SPEED_FORMULA = new CharacterBaseWalkSpeedCalculator();
/**
* The calculator base physical attack
@@ -154,28 +157,28 @@ public class CharacterStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_PHYSICAL_ATTACK_SPEED_CALCULATOR = new CharacterBasePhysicalAttackSpeedCalculator();
+ private static final CharacterFormula BASE_PHYSICAL_ATTACK_SPEED_FORMULA = new CharacterBasePhysicalAttackSpeedCalculator();
/**
* The calculator base physical attack critical rate
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_PHYSICAL_CRITICAL_RATE_CALCULATOR = new CharacterBasePhysicalCriticalRateCalculator();
+ private static final CharacterFormula BASE_PHYSICAL_CRITICAL_RATE_FORMULA = new CharacterBasePhysicalCriticalRateCalculator();
/**
* The calculator base physical defense
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_PHYSICAL_DEFENSE_CALCULATOR = new CharacterBasePhysicalDefenseCalculator();
+ private static final CharacterFormula BASE_PHYSICAL_DEFENSE_FORMULA = new CharacterBasePhysicalDefenseCalculator();
/**
* The calculator base magical attack
@@ -183,28 +186,28 @@ public class CharacterStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_MAGICAL_ATTACK_SPEED_CALCULATOR = new CharacterBaseMagicalAttackSpeedCalculator();
+ private static final CharacterFormula BASE_MAGICAL_ATTACK_SPEED_FORMULA = new CharacterBaseMagicalAttackSpeedCalculator();
/**
* The calculator base magical attack critical rate
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_MAGICAL_CRITICAL_RATE_CALCULATOR = new CharacterBaseMagicalCriticalRateCalculator();
+ private static final CharacterFormula BASE_MAGICAL_CRITICAL_RATE_FORMULA = new CharacterBaseMagicalCriticalRateCalculator();
/**
* The calculator base magical defense
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_MAGICAL_DEFENSE_CALCULATOR = new CharacterBaseMagicalDefenseCalculator();
+ private static final CharacterFormula BASE_MAGICAL_DEFENSE_FORMULA = new CharacterBaseMagicalDefenseCalculator();
/**
* The calculator base attack accuracy
@@ -212,14 +215,14 @@ public class CharacterStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator BASE_ATTACK_EVASION_CALCULATOR = new CharacterBaseAttackEvasionCalculator();
+ private static final CharacterFormula BASE_ATTACK_EVASION_FORMULA = new CharacterBaseAttackEvasionCalculator();
// BONUS
/**
@@ -228,7 +231,7 @@ public class CharacterStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator MP_ADD_CALCULATOR = new MaximumMPAddCalculator();
+ private static final CharacterFormula MP_ADD_FORMULA = new MaximumMPAddCalculator();
/**
* The calculator for CP add
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final CharacterCalculator CP_ADD_CALCULATOR = new MaximumCPAddCalculator();
+ private static final CharacterFormula CP_ADD_FORMULA = new MaximumCPAddCalculator();
/**
* The character
*/
private final L2Character character;
+ private static final CharacterCalculator calculator = new CharacterCalculator(
+ StatType.class);
+
/**
* Creates a new {@link CharacterStats} and adds default calculators
*
@@ -267,44 +273,12 @@ public class CharacterStats extends ActorStats
* Another important note is that calculators should perform calculations as
* fast as possible.
@@ -66,14 +68,14 @@ public class NPCStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_MP_CALCULATOR = new NPCBaseMPCalculator();
+ private static final NPCFormula BASE_MP_FORMULA = new NPCBaseMPCalculator();
/**
* The calculator for base intelligence
@@ -81,42 +83,42 @@ public class NPCStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_STR_CALCULATOR = new NPCBaseStrengthCalculator();
+ private static final NPCFormula BASE_STR_FORMULA = new NPCBaseStrengthCalculator();
/**
* The calculator for base concentration
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_CON_CALCULATOR = new NPCBaseConcentrationCalculator();
+ private static final NPCFormula BASE_CON_FORMULA = new NPCBaseConcentrationCalculator();
/**
* The calculator for base mentality
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_MEN_CALCULATOR = new NPCBaseMentalityCalculator();
+ private static final NPCFormula BASE_MEN_FORMULA = new NPCBaseMentalityCalculator();
/**
* The calculator for base dexterity
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_DEX_CALCULATOR = new NPCBaseDexterityCalculator();
+ private static final NPCFormula BASE_DEX_FORMULA = new NPCBaseDexterityCalculator();
/**
* The calculator for base witness
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_WIT_CALCULATOR = new NPCBaseWitnessCalculator();
+ private static final NPCFormula BASE_WIT_FORMULA = new NPCBaseWitnessCalculator();
/**
* The calculator for base run speed
@@ -124,14 +126,14 @@ public class NPCStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_WALK_SPEED_CALCULATOR = new NPCBaseWalkSpeedCalculator();
+ private static final NPCFormula BASE_WALK_SPEED_FORMULA = new NPCBaseWalkSpeedCalculator();
/**
* The calculator base physical attack
@@ -139,28 +141,28 @@ public class NPCStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_PHYSICAL_ATTACK_SPEED_CALCULATOR = new NPCBasePhysicalAttackSpeedCalculator();
+ private static final NPCFormula BASE_PHYSICAL_ATTACK_SPEED_FORMULA = new NPCBasePhysicalAttackSpeedCalculator();
/**
* The calculator base physical attack critical rate
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_PHYSICAL_CRITICAL_RATE_CALCULATOR = new NPCBasePhysicalCriticalRateCalculator();
+ private static final NPCFormula BASE_PHYSICAL_CRITICAL_RATE_FORMULA = new NPCBasePhysicalCriticalRateCalculator();
/**
* The calculator base physical defense
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_PHYSICAL_DEFENSE_CALCULATOR = new NPCBasePhysicalDefenseCalculator();
+ private static final NPCFormula BASE_PHYSICAL_DEFENSE_FORMULA = new NPCBasePhysicalDefenseCalculator();
/**
* The calculator base magical attack
@@ -168,28 +170,28 @@ public class NPCStats extends ActorStats
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_MAGICAL_ATTACK_SPEED_CALCULATOR = new NPCBaseMagicalAttackSpeedCalculator();
+ private static final NPCFormula BASE_MAGICAL_ATTACK_SPEED_FORMULA = new NPCBaseMagicalAttackSpeedCalculator();
/**
* The calculator base magical attack critical rate
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_MAGICAL_CRITICAL_RATE_CALCULATOR = new NPCBaseMagicalCriticalRateCalculator();
+ private static final NPCFormula BASE_MAGICAL_CRITICAL_RATE_FORMULA = new NPCBaseMagicalCriticalRateCalculator();
/**
* The calculator base magical defense
*
* This calculator does not store any state and thus is safe to be
* shared.
*/
- private static final NPCCalculator BASE_MAGICAL_DEFENSE_CALCULATOR = new NPCBaseMagicalDefenseCalculator();
+ private static final NPCFormula BASE_MAGICAL_DEFENSE_FORMULA = new NPCBaseMagicalDefenseCalculator();
/**
* The calculator base evasion
@@ -197,51 +199,56 @@ public class NPCStats extends ActorStats
+ * Once a new function is added, sorting will be performed automatically.
+ *
+ * @param order
+ * the operation order, starting at 0.
+ * @param function
+ * the operation
+ */
+ public void add(Function
+ * Once a new function is added, sorting will be performed automatically.
+ *
+ * @param order
+ * the operation order, starting at 0.
+ * @param function
+ * the operation
+ */
+ public void add(Function
+ * Once a new function is added, sorting will be performed automatically.
+ *
+ * @param order
+ * the operation order, starting at 0.
+ * @param function
+ * the operation
+ */
+ public void addNoSort(Function
+ * This method will heuristically search for nested calculators.
+ *
+ * @param calculator
+ * the calculator
+ */
+ @SuppressWarnings("unchecked")
+ public void importFunctions(Calculator
+ * This method will heuristically search for nested calculators.
+ *
+ * @param calculator
+ * the calculator
+ */
+ @SuppressWarnings("unchecked")
+ public void removeFunctions(Calculator
@@ -39,4 +39,6 @@ public interface Function
- * Once a new function is added, sorting will be performed automatically.
- *
- * @param order
- * the operation order, starting at 0.
- * @param function
- * the operation
- */
- public void add(Function super T> function) {
- functions = Arrays.copyOf(functions, functions.length + 1);
- functions[functions.length - 1] = function;
- Arrays.sort(functions, FunctionOrderComparator.SHARED_INSTANCE);
- }
-
- /**
- * Imports all functions from the given calculator. This is useful
- * to preserve right calculation ordering but changes to original
- * calculator will no reflect in this one.
- *
- * This method will heuristically search for nested calculators.
- *
- * @param calculator
- * the calculator
- */
- public void importFunctions(SimpleCalculator super T> calculator) {
- for (final Function super T> function : calculator.functions) {
- if (function instanceof SimpleCalculator) {
- importFunctions((SimpleCalculator super T>) function);
- } else {
- add(function);
- }
- }
- }
-
- /**
- * Removes all imported functions from the given calculator.
- *
- * This method will heuristically search for nested calculators.
- *
- * @param calculator
- * the calculator
- */
- public void removeFunctions(SimpleCalculator super T> calculator) {
- for (final Function super T> function : calculator.functions) {
- if (function instanceof SimpleCalculator) {
- removeFunctions((SimpleCalculator super T>) function);
- } else {
- // TODO
- // remove(function);
- }
- }
- }
-
- @Override
- public double calculate(T ctx, double value) {
- for (final Function super T> function : functions) {
+ public double calculate(V v, T ctx, double value) {
+ if (v != this.value)
+ return value;
+ for (final Function
- *
* @author Rogiel
*/
-public class ModulusFunction extends AbstractDoubleFunction|chain value|
- *
* return c.getTemplate().getBaseMP();
@@ -30,14 +30,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseMPCalculator extends CharacterCalculator {
+public class CharacterBaseMPCalculator extends CharacterFormula {
public CharacterBaseMPCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- public double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseBaseMP();
- }
- });
+ super(0x000, StatType.MAX_MP);
+ }
+
+ @Override
+ public double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseBaseMP();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackCalculator.java
index a7ac57808..cc930bab6 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base magical attack
@@ -31,14 +31,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseMagicalAttackCalculator extends CharacterCalculator {
+public class CharacterBaseMagicalAttackCalculator extends CharacterFormula {
public CharacterBaseMagicalAttackCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseMagicalAttack();
- }
- });
+ super(0x000, StatType.MAGIC_ATTACK);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseMagicalAttack();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackSpeedCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackSpeedCalculator.java
index 1bc10bf72..7a2d5eec7 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackSpeedCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalAttackSpeedCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the base magical attack speed
@@ -30,14 +30,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseMagicalAttackSpeedCalculator extends CharacterCalculator {
+public class CharacterBaseMagicalAttackSpeedCalculator extends CharacterFormula {
public CharacterBaseMagicalAttackSpeedCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseMagicalAttackSpeed();
- }
- });
+ super(0x000, StatType.MAGIC_ATTACK_SPEED);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseMagicalAttackSpeed();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalCriticalRateCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalCriticalRateCalculator.java
index 9bdeaa203..70a8fcb4c 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalCriticalRateCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalCriticalRateCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the base magical attack critical rate
@@ -32,14 +32,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
* @author Rogiel
*/
public class CharacterBaseMagicalCriticalRateCalculator extends
- CharacterCalculator {
+ CharacterFormula {
public CharacterBaseMagicalCriticalRateCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseCritical();
- }
- });
+ super(0x000, StatType.MCRITICAL_RATE);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseCritical();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalDefenseCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalDefenseCalculator.java
index 2b94ac8d5..82405930f 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalDefenseCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMagicalDefenseCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base magical defense.
@@ -41,14 +41,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseMagicalDefenseCalculator extends CharacterCalculator {
+public class CharacterBaseMagicalDefenseCalculator extends CharacterFormula {
public CharacterBaseMagicalDefenseCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseMagicalDefense();
- }
- });
+ super(0x000, StatType.MAGIC_DEFENSE);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseMagicalDefense();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMentalityCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMentalityCalculator.java
index 1e04bd18b..4f5970dc5 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMentalityCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseMentalityCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base mentality
@@ -30,14 +30,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseMentalityCalculator extends CharacterCalculator {
+public class CharacterBaseMentalityCalculator extends CharacterFormula {
public CharacterBaseMentalityCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseMentality();
- }
- });
+ super(0x000, StatType.STAT_MEN);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseMentality();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackCalculator.java
index 759b667e6..03915e319 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base physical attack
@@ -32,14 +32,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBasePhysicalAttackCalculator extends CharacterCalculator {
+public class CharacterBasePhysicalAttackCalculator extends CharacterFormula {
public CharacterBasePhysicalAttackCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBasePhysicalAttack();
- }
- });
+ super(0x000, StatType.POWER_ATTACK);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBasePhysicalAttack();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackSpeedCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackSpeedCalculator.java
index 1fc6b9eec..e0545cb9f 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackSpeedCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalAttackSpeedCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base physical attack speed
@@ -32,14 +32,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
* @author Rogiel
*/
public class CharacterBasePhysicalAttackSpeedCalculator extends
- CharacterCalculator {
+ CharacterFormula {
public CharacterBasePhysicalAttackSpeedCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBasePhysicalAttackSpeed();
- }
- });
+ super(0x000, StatType.POWER_ATTACK_SPEED);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBasePhysicalAttackSpeed();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalCriticalRateCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalCriticalRateCalculator.java
index f7188dc23..255001947 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalCriticalRateCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalCriticalRateCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base critical rate
@@ -33,14 +33,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
* @author Rogiel
*/
public class CharacterBasePhysicalCriticalRateCalculator extends
- CharacterCalculator {
+ CharacterFormula {
public CharacterBasePhysicalCriticalRateCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseCritical();
- }
- });
+ super(0x000, StatType.CRITICAL_RATE);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseCritical();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalDefenseCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalDefenseCalculator.java
index d5b58b3fe..c5039acf4 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalDefenseCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBasePhysicalDefenseCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base physical defense
@@ -43,14 +43,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBasePhysicalDefenseCalculator extends CharacterCalculator {
+public class CharacterBasePhysicalDefenseCalculator extends CharacterFormula {
public CharacterBasePhysicalDefenseCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBasePhysicalDefense();
- }
- });
+ super(0x000, StatType.POWER_DEFENSE);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBasePhysicalDefense();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseRunSpeedCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseRunSpeedCalculator.java
index ab0305276..19c667e52 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseRunSpeedCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseRunSpeedCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base run speed
@@ -31,14 +31,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseRunSpeedCalculator extends CharacterCalculator {
+public class CharacterBaseRunSpeedCalculator extends CharacterFormula {
public CharacterBaseRunSpeedCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseRunSpeed();
- }
- });
+ super(0x000, StatType.RUN_SPEED);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseRunSpeed();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseStrengthCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseStrengthCalculator.java
index c349b965a..0a81d5dda 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseStrengthCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseStrengthCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base strength
@@ -30,14 +30,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseStrengthCalculator extends CharacterCalculator {
+public class CharacterBaseStrengthCalculator extends CharacterFormula {
public CharacterBaseStrengthCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseStrength();
- }
- });
+ super(0x000, StatType.STAT_STR);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseStrength();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWalkSpeedCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWalkSpeedCalculator.java
index 52efdf32d..ab963a59c 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWalkSpeedCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWalkSpeedCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base walk speed
@@ -31,14 +31,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseWalkSpeedCalculator extends CharacterCalculator {
+public class CharacterBaseWalkSpeedCalculator extends CharacterFormula {
public CharacterBaseWalkSpeedCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseWalkSpeed();
- }
- });
+ super(0x000, StatType.WALK_SPEED);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseWalkSpeed();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWitnessCalculator.java b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWitnessCalculator.java
index 509f81655..791ddad26 100644
--- a/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWitnessCalculator.java
+++ b/src/main/java/com/l2jserver/model/world/character/calculator/base/CharacterBaseWitnessCalculator.java
@@ -18,8 +18,8 @@ package com.l2jserver.model.world.character.calculator.base;
import com.l2jserver.model.template.CharacterTemplate;
import com.l2jserver.model.world.L2Character;
-import com.l2jserver.model.world.character.calculator.CharacterCalculator;
-import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunction;
+import com.l2jserver.model.world.actor.stat.StatType;
+import com.l2jserver.model.world.character.calculator.CharacterFormula;
/**
* Calculates the character base witness
@@ -30,14 +30,13 @@ import com.l2jserver.model.world.character.calculator.CharacterCalculatorFunctio
*
* @author Rogiel
*/
-public class CharacterBaseWitnessCalculator extends CharacterCalculator {
+public class CharacterBaseWitnessCalculator extends CharacterFormula {
public CharacterBaseWitnessCalculator() {
- super(new CharacterCalculatorFunction(0x000) {
- @Override
- protected double calculate(L2Character c, CharacterTemplate t,
- double value) {
- return t.getBaseWitness();
- }
- });
+ super(0x000, StatType.STAT_WIT);
+ }
+
+ @Override
+ protected double calculate(L2Character c, CharacterTemplate t, double value) {
+ return t.getBaseWitness();
}
}
diff --git a/src/main/java/com/l2jserver/model/world/npc/NPCStats.java b/src/main/java/com/l2jserver/model/world/npc/NPCStats.java
index ff2f6a506..557a511fb 100644
--- a/src/main/java/com/l2jserver/model/world/npc/NPCStats.java
+++ b/src/main/java/com/l2jserver/model/world/npc/NPCStats.java
@@ -17,10 +17,12 @@
package com.l2jserver.model.world.npc;
import com.l2jserver.model.world.NPC;
+import com.l2jserver.model.world.actor.calculator.ActorCalculator;
import com.l2jserver.model.world.actor.stat.ActorStats;
import com.l2jserver.model.world.actor.stat.StatType;
import com.l2jserver.model.world.npc.calculator.NPCCalculator;
import com.l2jserver.model.world.npc.calculator.NPCCalculatorContext;
+import com.l2jserver.model.world.npc.calculator.NPCFormula;
import com.l2jserver.model.world.npc.calculator.base.NPCBaseAttackEvasionCalculator;
import com.l2jserver.model.world.npc.calculator.base.NPCBaseConcentrationCalculator;
import com.l2jserver.model.world.npc.calculator.base.NPCBaseDexterityCalculator;
@@ -46,11 +48,11 @@ import com.l2jserver.util.calculator.SimpleCalculator;
* This class is responsible for calculating the real NPC stats. The real stats
* vary from the values from the templates, also, skills and items equipped can
* change those values. Once an buff is applied, a new calculator is
- * {@link SimpleCalculator#importFunctions(SimpleCalculator) imported} and their functions
- * are added to this class calculator. Once the skill effect has past away, all
- * the functions that were imported are now
- * {@link SimpleCalculator#removeFunctions(SimpleCalculator) removed} and the calculator
- * return to its original state.
+ * {@link SimpleCalculator#importFunctions(SimpleCalculator) imported} and their
+ * functions are added to this class calculator. Once the skill effect has past
+ * away, all the functions that were imported are now
+ * {@link SimpleCalculator#removeFunctions(SimpleCalculator) removed} and the
+ * calculator return to its original state.
*
- *
* @author Rogiel
+ *
*/
-public class NegateFunction extends AbstractDoubleFunction-chain value
- *
- *
* @author Rogiel
+ *
*/
-public class PercentFunction extends MultiplicationFunction {
- /**
- * The value
- */
- public PercentFunction(int order, double value) {
- super(order, value / 100);
- }
+public interface Calculatorchain value *
- * (value / 100)
- *
- * @author Rogiel
- */
-public class DivisionFunction extends AbstractDoubleFunctionchain value /
- * value
- *
- * @author Rogiel
- */
-public class MultiplicationFunction extends AbstractDoubleFunctionchain value *
- * value
- *
- * @author Rogiel
- */
-public class SubtractFunction extends AbstractDoubleFunctionchain value -
- * value
- *
- * @author Rogiel
- */
-public class SumFunction extends AbstractDoubleFunctionchain value +
- * value