Advertisement
Nik

More retail-like resists/profs (l2world)

Nik
Sep 14th, 2011
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 7.33 KB | None | 0 0
  1. Index: Formulas.java
  2. ===================================================================
  3. --- Formulas.java   (revision 86)
  4. +++ Formulas.java   (working copy)
  5. @@ -2461,15 +2461,48 @@
  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. +    * @return skill stat modifier changed by the attacker's skill prof and target's skill resist.
  26. +    */
  27. +   public static double calcSkillLandRateModifier(L2Skill skill, L2Character attacker, L2Character target)
  28. +   {
  29. +       double retval = calcSkillStatModifier(skill, target);
  30. +  
  31. +       //          "-" if resistant, "+" if vulnerable         "-" for negative proficiency, "+" for positive proficiency
  32. +       double vuln = calcSkillTraitVulnerability(0, target, skill) + calcSkillTraitProficiency(0, attacker, target, skill);
  33. +      
  34. +       if (vuln == 0)
  35. +           return retval;
  36. +      
  37. +       vuln /= 100; // divide by 100 in order to get percent value.
  38. +       vuln += 1; // Since we work with percents, always add +1 to prevent 0.x values.
  39. +      
  40. +       if (vuln < 0) // If negative vulnerability (target has resist), multiply base resist with that resist.
  41. +       {
  42. +           vuln *= -1; // Make this variable positive, because its negative. We dont want to return negative double.
  43. +           retval *= vuln;
  44. +       }
  45. +       else // If positive vulnerability (target has vulnerability), divide base resist with that resist.
  46. +           retval /= vuln;
  47. +      
  48. +       return retval;
  49. +      
  50. +   }
  51. +  
  52.     public static int calcLvlDependModifier(L2Character attacker, L2Character target, L2Skill skill)
  53.     {
  54.         if (skill.getLevelDepend() == 0)
  55. @@ -2539,11 +2572,10 @@
  56.         if (target.isDebuffInvul())
  57.             return false;
  58.        
  59. -       double statModifier = calcSkillStatModifier(skill, target);
  60. +       double skillLandRateModifier = calcSkillLandRateModifier(skill, attacker, target);
  61. +       // Calculate BaseRate influenced by base stats and resists/vulnerabilities.
  62. +       int rate = (int) (value / skillLandRateModifier);
  63.        
  64. -       // Calculate BaseRate.
  65. -       int rate = (int) (value * statModifier);
  66. -      
  67.         // Add Matk/Mdef Bonus
  68.         double mAtkModifier = 0;
  69.         int ssModifier = 0;
  70. @@ -2570,28 +2602,6 @@
  71.             rate = (int) (rate * mAtkModifier);
  72.         }
  73.        
  74. -       // Resists
  75. -       double vulnModifier = calcSkillTraitVulnerability(0, target, skill);
  76. -       double profModifier = calcSkillTraitProficiency(0, attacker, target, skill);
  77. -       double res = vulnModifier + profModifier;
  78. -       double resMod = 1;
  79. -       if (res != 0)
  80. -       {
  81. -           if (res < 0)
  82. -           {
  83. -               //resMod = 1 - 0.02 * res;
  84. -               //resMod = 1 / resMod;
  85. -               resMod += Math.max(res, -95) * 0.01;
  86. -           }
  87. -           else
  88. -               //resMod = 1 + 0.02 * res;
  89. -               resMod += Math.min(res, 95) * 0.01;
  90. -          
  91. -           rate *= resMod;
  92. -       }
  93. -       else if (target.calcStat(Stats.DEBUFF_IMMUNITY, 0, null, skill) > 0 && skill.isDebuff())
  94. -           return false;
  95. -      
  96.         int elementModifier = calcElementModifier(attacker, target, skill);
  97.         rate += elementModifier;
  98.        
  99. @@ -2611,11 +2621,7 @@
  100.                     skill.getName(),
  101.                     " eff.type:", type.toString(),
  102.                     " power:", String.valueOf(value),
  103. -                   " stat:", String.format("%1.2f", statModifier),
  104. -                   " res:", String.format("%1.2f", resMod), "(",
  105. -                   String.format("%1.2f", profModifier), "/",
  106. -                   String.format("%1.2f", vulnModifier),
  107. -                   ") elem:", String.valueOf(elementModifier),
  108. +                   " landRateModif:", String.format("%1.2f", skillLandRateModifier),
  109.                     " mAtk:", String.format("%1.2f", mAtkModifier),
  110.                     " ss:", String.valueOf(ssModifier),
  111.                     " lvl:", String.valueOf(deltamod),
  112. @@ -2665,10 +2671,10 @@
  113.         }
  114.        
  115.         int value = (int) skill.getPower(isPvP, isPvE);
  116. -       double statModifier = calcSkillStatModifier(skill, target);
  117.        
  118. -       // Calculate BaseRate.
  119. -       int rate = (int) (value * statModifier);
  120. +       double skillLandRateModifier = calcSkillLandRateModifier(skill, attacker, target);
  121. +       // Calculate BaseRate influenced by base stats and resists/vulnerabilities.
  122. +       int rate = (int) (value / skillLandRateModifier);
  123.        
  124.         // Add Matk/Mdef Bonus
  125.         double mAtkModifier = 0;
  126. @@ -2696,26 +2702,6 @@
  127.             rate = (int) (rate * mAtkModifier);
  128.         }
  129.        
  130. -       // Resists
  131. -       double vulnModifier = calcSkillVulnerability(attacker, target, skill);
  132. -       double profModifier = calcSkillProficiency(skill, attacker, target);
  133. -       double res = vulnModifier + profModifier;
  134. -       double resMod = 1;
  135. -       if (res != 0)
  136. -       {
  137. -           if (res < 0)
  138. -           {
  139. -               //resMod = 1 - 0.02 * res;
  140. -               //resMod = 1 / resMod;
  141. -               resMod += Math.max(res, -95) * 0.01;
  142. -           }
  143. -           else
  144. -               //resMod = 1 + 0.02 * res;
  145. -               resMod += Math.min(res, 95) * 0.01;
  146. -          
  147. -           rate *= resMod;
  148. -       }
  149. -      
  150.         int elementModifier = calcElementModifier(attacker, target, skill);
  151.         rate += elementModifier;
  152.        
  153. @@ -2735,10 +2721,7 @@
  154.                     skill.getName(),
  155.                     " type:", skill.getSkillType().toString(),
  156.                     " power:", String.valueOf(value),
  157. -                   " stat:", String.format("%1.2f", statModifier),
  158. -                   " res:", String.format("%1.2f", resMod), "(",
  159. -                   String.format("%1.2f", profModifier), "/",
  160. -                   String.format("%1.2f", vulnModifier),
  161. +                   " landRateModif:", String.format("%1.2f", skillLandRateModifier),
  162.                     ") elem:", String.valueOf(elementModifier),
  163.                     " mAtk:", String.format("%1.2f", mAtkModifier),
  164.                     " ss:", String.valueOf(ssModifier),
  165. @@ -2775,9 +2758,11 @@
  166.             return false;
  167.        
  168.         int value = (int) skill.getPower(isPvP, isPvE);
  169. -       double statModifier = calcSkillStatModifier(skill, target);
  170. -       int rate = (int) (value * statModifier);
  171.        
  172. +       double skillLandRateModifier = calcSkillLandRateModifier(skill, attacker.getOwner(), target);
  173. +       // Calculate BaseRate influenced by base stats and resists/vulnerabilities.
  174. +       int rate = (int) (value / skillLandRateModifier);
  175. +      
  176.         // Add Matk/Mdef Bonus
  177.         double mAtkModifier = 0;
  178.         if (skill.isMagic())
  179. @@ -2791,26 +2776,6 @@
  180.             rate += (int) (mAtkModifier * 100) - 100;
  181.         }
  182.        
  183. -       // Resists
  184. -       double vulnModifier = calcSkillVulnerability(attacker.getOwner(), target, skill);
  185. -       double profModifier = calcSkillProficiency(skill, attacker.getOwner(), target);
  186. -       double res = vulnModifier + profModifier;
  187. -       double resMod = 1;
  188. -       if (res != 0)
  189. -       {
  190. -           if (res < 0)
  191. -           {
  192. -               //resMod = 1 - 0.02 * res;
  193. -               //resMod = 1 / resMod;
  194. -               resMod += Math.max(res, -95) * 0.01;
  195. -           }
  196. -           else
  197. -               //resMod = 1 + 0.02 * res;
  198. -               resMod += Math.min(res, 95) * 0.01;
  199. -          
  200. -           rate *= resMod;
  201. -       }
  202. -      
  203.         int elementModifier = calcElementModifier(attacker.getOwner(), target, skill);
  204.         rate += elementModifier;
  205.        
  206. @@ -2830,10 +2795,7 @@
  207.                     skill.getName(),
  208.                     " type:", skill.getSkillType().toString(),
  209.                     " power:", String.valueOf(value),
  210. -                   " stat:", String.format("%1.2f", statModifier),
  211. -                   " res:", String.format("%1.2f", resMod), "(",
  212. -                   String.format("%1.2f", profModifier), "/",
  213. -                   String.format("%1.2f", vulnModifier),
  214. +                   " landRateModif:", String.format("%1.2f", skillLandRateModifier),
  215.                     ") elem:", String.valueOf(elementModifier),
  216.                     " mAtk:", String.format("%1.2f", mAtkModifier),
  217.                     " lvl:", String.valueOf(deltamod),
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement