Advertisement
Nik

More retail-like resists/profs [Freya]

Nik
Sep 28th, 2011
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 7.62 KB | None | 0 0
  1. Index: Formulas.java
  2. ===================================================================
  3. --- Formulas.java   (revision 4950)
  4. +++ Formulas.java   (working copy)
  5. @@ -2444,15 +2444,55 @@
  6.         return multiplier;
  7.     }
  8.    
  9. +   /**
  10. +    * This method is used as <b>divider</b> for the skill's base power.
  11. +    * @return statBonus value for this skill's saveVs
  12. +    */
  13.     public static double calcSkillStatModifier(L2Skill skill, L2Character target)
  14.     {
  15.         final BaseStats saveVs = skill.getSaveVs();
  16.         if (saveVs == null)
  17.             return 1;
  18.        
  19. -       return 1 / saveVs.calcBonus(target);
  20. +       return saveVs.calcBonus(target);
  21.     }
  22.    
  23. +   /**
  24. +    * This method is used as <b>divider</b> for the skill's base power.
  25. +    * @param skill : the skill which is used for calculations
  26. +    * @param effect : the EffectTemplate (if we calculate an effect from the skill) which is used for calculations. Leave null if we dont calc skill effect.
  27. +    * @return skill stat modifier changed by the attacker's skill prof and target's skill resist.
  28. +    */
  29. +   public static double calcSkillLandRateModifier(L2Skill skill, EffectTemplate effect, L2Character attacker, L2Character target)
  30. +   {
  31. +       double retval = calcSkillStatModifier(skill, target);
  32. +       double vuln = 0;
  33. +       if (effect == null)// "-" if resistant, "+" if vulnerable   "-" for negative proficiency, "+" for positive proficiency
  34. +           vuln = calcSkillVulnerability(attacker, target, skill) + calcSkillProficiency(skill, attacker, target);
  35. +       else
  36. +           vuln = calcSkillTypeVulnerability(0, target, effect.effectType) + calcSkillTypeProficiency(0, attacker, target, effect.effectType);
  37. +      
  38. +       if (vuln == 0)
  39. +           return retval;
  40. +      
  41. +       if (vuln < 0) // If negative vulnerability (target has resist), multiply base resist with that resist.
  42. +       {
  43. +           vuln *= -1; // Make this variable positive, because its negative. We dont want to return negative double.
  44. +           vuln /= 100; // divide by 100 in order to get percent value.
  45. +           vuln += 1; // Since we work with percents, always add +1 to prevent 0.x values.
  46. +           retval *= vuln;
  47. +       }
  48. +       else // If positive vulnerability (target has vulnerability), divide base resist with that resist.
  49. +       {
  50. +           vuln /= 100; // divide by 100 in order to get percent value.
  51. +           vuln += 1; // Since we work with percents, always add +1 to prevent 0.x values.
  52. +           retval /= vuln;
  53. +       }
  54. +      
  55. +       return retval;
  56. +      
  57. +   }
  58. +  
  59.     public static int calcLvlDependModifier(L2Character attacker, L2Character target, L2Skill skill)
  60.     {
  61.         if (skill.getLevelDepend() == 0)
  62. @@ -2523,11 +2563,10 @@
  63.             return false;
  64.         }
  65.        
  66. -       double statModifier = calcSkillStatModifier(skill, target);
  67. +       double skillLandRateModifier = calcSkillLandRateModifier(skill, effect, attacker, target);
  68. +       // Calculate BaseRate influenced by base stats and resists/vulnerabilities.
  69. +       int rate = (int) (value / skillLandRateModifier);
  70.        
  71. -       // Calculate BaseRate.
  72. -       int rate = (int) (value * statModifier);
  73. -      
  74.         // Add Matk/Mdef Bonus
  75.         double mAtkModifier = 0;
  76.         int ssModifier = 0;
  77. @@ -2550,27 +2589,6 @@
  78.             rate = (int) (rate * mAtkModifier);
  79.         }
  80.        
  81. -       // Resists
  82. -       double vulnModifier = calcSkillTypeVulnerability(0, target, type);
  83. -       double profModifier = calcSkillTypeProficiency(0, attacker, target, type);
  84. -       double res = vulnModifier + profModifier;
  85. -       double resMod = 1;
  86. -       if (res != 0)
  87. -       {
  88. -           if (res < 0)
  89. -           {
  90. -               resMod = 1 - 0.075 * res;
  91. -               resMod = 1 / resMod;
  92. -           }
  93. -           else
  94. -               resMod = 1 + 0.02 * res;
  95. -          
  96. -           rate *= resMod;
  97. -       }
  98. -      
  99. -       int elementModifier = calcElementModifier(attacker, target, skill);
  100. -       rate += elementModifier;
  101. -      
  102.         //lvl modifier.
  103.         int deltamod = calcLvlDependModifier(attacker, target, skill);
  104.         rate += deltamod;
  105. @@ -2587,11 +2605,7 @@
  106.                     skill.getName(),
  107.                     " eff.type:", type.toString(),
  108.                     " power:", String.valueOf(value),
  109. -                   " stat:", String.format("%1.2f", statModifier),
  110. -                   " res:", String.format("%1.2f", resMod), "(",
  111. -                   String.format("%1.2f", profModifier), "/",
  112. -                   String.format("%1.2f", vulnModifier),
  113. -                   ") elem:", String.valueOf(elementModifier),
  114. +                   " landRateModif:", String.format("%1.2f", skillLandRateModifier),
  115.                     " mAtk:", String.format("%1.2f", mAtkModifier),
  116.                     " ss:", String.valueOf(ssModifier),
  117.                     " lvl:", String.valueOf(deltamod),
  118. @@ -2628,10 +2642,10 @@
  119.         }
  120.        
  121.         int value = (int) skill.getPower(isPvP);
  122. -       double statModifier = calcSkillStatModifier(skill, target);
  123.        
  124. -       // Calculate BaseRate.
  125. -       int rate = (int) (value * statModifier);
  126. +       double skillLandRateModifier = calcSkillLandRateModifier(skill, null, attacker, target);
  127. +       // Calculate BaseRate influenced by base stats and resists/vulnerabilities.
  128. +       int rate = (int) (value / skillLandRateModifier);
  129.        
  130.         // Add Matk/Mdef Bonus
  131.         double mAtkModifier = 0;
  132. @@ -2655,24 +2669,6 @@
  133.             rate = (int) (rate * mAtkModifier);
  134.         }
  135.        
  136. -       // Resists
  137. -       double vulnModifier = calcSkillVulnerability(attacker, target, skill);
  138. -       double profModifier = calcSkillProficiency(skill, attacker, target);
  139. -       double res = vulnModifier + profModifier;
  140. -       double resMod = 1;
  141. -       if (res != 0)
  142. -       {
  143. -           if (res < 0)
  144. -           {
  145. -               resMod = 1 - 0.075 * res;
  146. -               resMod = 1 / resMod;
  147. -           }
  148. -           else
  149. -               resMod = 1 + 0.02 * res;
  150. -          
  151. -           rate *= resMod;
  152. -       }
  153. -      
  154.         int elementModifier = calcElementModifier(attacker, target, skill);
  155.         rate += elementModifier;
  156.        
  157. @@ -2692,10 +2688,7 @@
  158.                     skill.getName(),
  159.                     " type:", skill.getSkillType().toString(),
  160.                     " power:", String.valueOf(value),
  161. -                   " stat:", String.format("%1.2f", statModifier),
  162. -                   " res:", String.format("%1.2f", resMod), "(",
  163. -                   String.format("%1.2f", profModifier), "/",
  164. -                   String.format("%1.2f", vulnModifier),
  165. +                   " landRateModif:", String.format("%1.2f", skillLandRateModifier),
  166.                     ") elem:", String.valueOf(elementModifier),
  167.                     " mAtk:", String.format("%1.2f", mAtkModifier),
  168.                     " ss:", String.valueOf(ssModifier),
  169. @@ -2724,9 +2717,11 @@
  170.             return false;
  171.        
  172.         int value = (int) skill.getPower(target instanceof L2Playable);
  173. -       double statModifier = calcSkillStatModifier(skill, target);
  174. -       int rate = (int) (value * statModifier);
  175.        
  176. +       double skillLandRateModifier = calcSkillLandRateModifier(skill, null, attacker.getOwner(), target);
  177. +       // Calculate BaseRate influenced by base stats and resists/vulnerabilities.
  178. +       int rate = (int) (value / skillLandRateModifier);      
  179. +      
  180.         // Add Matk/Mdef Bonus
  181.         double mAtkModifier = 0;
  182.         if (skill.isMagic())
  183. @@ -2740,24 +2735,6 @@
  184.             rate += (int) (mAtkModifier * 100) - 100;
  185.         }
  186.        
  187. -       // Resists
  188. -       double vulnModifier = calcSkillVulnerability(attacker.getOwner(), target, skill);
  189. -       double profModifier = calcSkillProficiency(skill, attacker.getOwner(), target);
  190. -       double res = vulnModifier + profModifier;
  191. -       double resMod = 1;
  192. -       if (res != 0)
  193. -       {
  194. -           if (res < 0)
  195. -           {
  196. -               resMod = 1 - 0.075 * res;
  197. -               resMod = 1 / resMod;
  198. -           }
  199. -           else
  200. -               resMod = 1 + 0.02 * res;
  201. -          
  202. -           rate *= resMod;
  203. -       }
  204. -      
  205.         int elementModifier = calcElementModifier(attacker.getOwner(), target, skill);
  206.         rate += elementModifier;
  207.        
  208. @@ -2777,10 +2754,7 @@
  209.                     skill.getName(),
  210.                     " type:", skill.getSkillType().toString(),
  211.                     " power:", String.valueOf(value),
  212. -                   " stat:", String.format("%1.2f", statModifier),
  213. -                   " res:", String.format("%1.2f", resMod), "(",
  214. -                   String.format("%1.2f", profModifier), "/",
  215. -                   String.format("%1.2f", vulnModifier),
  216. +                   " landRateModif:", String.format("%1.2f", skillLandRateModifier),
  217.                     ") elem:", String.valueOf(elementModifier),
  218.                     " mAtk:", String.format("%1.2f", mAtkModifier),
  219.                     " lvl:", String.valueOf(deltamod),
  220.  
  221.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement