Advertisement
Nik

More retail-like resists/profs [Freya]

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