All pastes #54014 Raw Edit

skill success formul

public text v1 · immutable
#54014 ·published 2006-05-07 13:18 UTC
rendered paste body
Index: D:/workspace/GameServer/java/net/sf/l2j/gameserver/model/actor/stat/CharStat.java
===================================================================
--- D:/workspace/GameServer/java/net/sf/l2j/gameserver/model/actor/stat/CharStat.java	(revision 1584)
+++ D:/workspace/GameServer/java/net/sf/l2j/gameserver/model/actor/stat/CharStat.java	(working copy)
@@ -349,4 +349,21 @@
 
     /** Return the WIT of the L2Character (base+modifier). */
     public final int getWIT() { return (int)calcStat(Stats.STAT_WIT, getActiveChar().getTemplate().baseWIT, null, null); }
+    
+// ===========================================================================================================================================================
+    
+    public int getSleepRes() { return (int)calcStat(Stats.SLEEP_RES, getActiveChar().getTemplate().baseSleepRes, null, null); }
+    public int getMuteRes() { return (int)calcStat(Stats.MUTE_RES, getActiveChar().getTemplate().baseMuteRes, null, null); }
+    public int getRootRes() { return (int)calcStat(Stats.ROOT_RES, getActiveChar().getTemplate().baseRootRes, null, null); }
+    public int getStunRes() { return (int)calcStat(Stats.STUN_RES, getActiveChar().getTemplate().baseStunRes, null, null); }
+    public int getBleedRes() { return (int)calcStat(Stats.BLEED_RES, getActiveChar().getTemplate().baseBleedRes, null, null); }
+    public int getPoisonRes() { return (int)calcStat(Stats.POISON_RES, getActiveChar().getTemplate().basePoisonRes, null, null); }
+    public int getMovementRes() { return (int)calcStat(Stats.MOVEMENT_RES, getActiveChar().getTemplate().baseMovementRes, null, null); }
+    public int getFearRes() { return (int)calcStat(Stats.FEAR_RES,  getActiveChar().getTemplate().baseFearRes, null, null); }
+    public int getConfusionRes() { return (int)calcStat(Stats.CONFUSION_RES, getActiveChar().getTemplate().baseConfusionRes, null, null); }
+    public int getAggressionRes() { return (int)calcStat(Stats.AGGRESSION_RES, getActiveChar().getTemplate().baseAggressionRes, null, null); }   
+    public int getDarknessRes() { return (int)calcStat(Stats.DARK_RES, getActiveChar().getTemplate().baseDarkRes, null, null); }
+    public int getSacredRes() { return (int)calcStat(Stats.SACRED_RES, getActiveChar().getTemplate().baseSacredRes, null, null); }
+
+// ===========================================================================================================================================================    
 }
Index: D:/workspace/GameServer/java/net/sf/l2j/gameserver/model/L2Character.java
===================================================================
--- D:/workspace/GameServer/java/net/sf/l2j/gameserver/model/L2Character.java	(revision 1584)
+++ D:/workspace/GameServer/java/net/sf/l2j/gameserver/model/L2Character.java	(working copy)
@@ -4500,8 +4500,22 @@
 	public final int getWalkSpeed() { return getStat().getWalkSpeed(); }
 	public int getWIT() { return getStat().getWIT(); }
 	// =========================================================
+
+	public double getSleepRes() { return getStat().getSleepRes(); }
+	public double getMuteRes() { return getStat().getMuteRes(); }
+	public double getRootRes() { return getStat().getRootRes(); }
+	public double getStunRes() { return getStat().getStunRes(); }
+	public double getBleedRes() { return getStat().getBleedRes(); }
+	public double getPoisonRes() { return getStat().getPoisonRes(); }
+	public double getMovementRes() { return getStat().getMovementRes(); }
+	public double getFearRes() { return getStat().getFearRes(); }
+	public double getConfusionRes() { return getStat().getConfusionRes(); }
+	public double getAggressionRes() { return getStat().getAggressionRes(); }   
+	public double getDarknessRes() { return getStat().getDarknessRes(); }
+	public double getSacredRes() { return getStat().getSacredRes(); }
+	   
+//	 ===========================================================================================================================================================   	
 	
-	
 	// =========================================================
 	// Status - NEED TO REMOVE ONCE L2CHARTATUS IS COMPLETE
 	// Method - Public
Index: D:/workspace/GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java
===================================================================
--- D:/workspace/GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java	(revision 1584)
+++ D:/workspace/GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java	(working copy)
@@ -1111,6 +1111,8 @@
 	
 	public boolean calcSkillSuccessOld(L2Character player, L2Character target, L2Skill skill, boolean ss, boolean sps, boolean bss )
 	{
+		if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("l2jc"))
+				return calcL2jCSkillSuccess(player, target, skill);
 		if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("alt") ||
 				Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("true"))
 			return calcAltSkillSuccess(player, target, skill);
@@ -1354,6 +1356,8 @@
 	
 	public boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, boolean ss, boolean sps, boolean bss)
 	{
+		if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("l2jc"))
+			return calcL2jCSkillSuccess(attacker, target, skill);
 		if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("alt") || Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("true"))
 			return calcAltSkillSuccess(attacker, target, skill);
 		
@@ -1482,7 +1486,180 @@
 		if (check > rate) success = false;
 		return success;
 	}
+//	 =============================================================================================================================================================
+	public boolean calcL2jCSkillSuccess(L2Character player, L2Character target, L2Skill skill)
+    {
 
+// =============================================================================================================================================================        
+// check the skill level, type, power of the player
+        SkillType type = skill.getSkillType();
+        double maxLevel = ((SkillTable.getInstance().getMaxLevel(skill.getId(),skill.getLevel())) / 55);
+        double skillLevel = (skill.getLevel() * maxLevel * 0.5);
+        double skillPower = (skill.getPower() * 0.01);
+// =============================================================================================================================================================
+// setting the variables for success calculation        
+        boolean success = false;
+        double rate = 1;
+        int check = Rnd.get(100);
+// =============================================================================================================================================================        
+// check the level difference between player and target
+            double LEVEL = 0;
+            int plvl = player.getLevel();
+            int tlvl = target.getLevel();
+            int l1 = plvl - tlvl;
+            int l2 = tlvl - plvl;
+            if (plvl >= tlvl) LEVEL = (100 + l1) * 0.6;
+            else LEVEL = (100 - l2) * 0.6;
+// =============================================================================================================================================================            
+// check the matk/mdef difference between player and target
+            double MAGIC = 0;
+            double matk = player.getMAtk(target, skill);
+            double mdef = target.getMDef(player, skill);
+            double m1 = matk - mdef;
+            double m2 = mdef - matk;
+            if (matk >= mdef) MAGIC = (3000 + m1) * (0.0045);
+            else MAGIC = (3000 - m2) * (0.0045);
+// =============================================================================================================================================================        
+// check the patk/pdef difference between player and target
+            double POWER = 0;
+            double patk = player.getPAtk(target);
+            double pdef = target.getPDef(player);
+            double p1 = patk - pdef;
+            double p2 = pdef - patk;
+            if (patk >= pdef) POWER = (3000 + p1) * (0.0045);
+            else POWER = (3000 - p2) * (0.0045);
+// =============================================================================================================================================================
+// calculating the defense check modifier            
+            double mcheck = LEVEL + MAGIC + skillLevel;
+            double pcheck = LEVEL + POWER + skillLevel;
+// =============================================================================================================================================================            
+// get the stats of the target
+            double tWIT = (target.getWIT() * 0.40);
+            double tMEN = (target.getMEN() * 0.40);
+            double tCON = (target.getCON() * 0.40);
+            double tDEX = (target.getDEX() * 0.40);
+// =============================================================================================================================================================            
+// get the stats of the attacker             
+            double aINT = (player.getINT() * 0.10);
+            double aDEX = (player.getDEX() * 0.10);
+            double aSTR = (player.getSTR() * 0.10);
+            double aWIT = (player.getWIT() * 0.10);
+// =============================================================================================================================================================           
+        switch(type)
+        {
+// =============================================================================================================================================================
+// WIT affected resistances
+// =============================================================================================================================================================            
+        case SLEEP:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getSleepRes() == 0) rate = (mcheck + aWIT) - tWIT;
+                else rate = (mcheck + aWIT) - (tWIT + (target.getSleepRes()* 100));
+            }
+                break;
+// =============================================================================================================================================================            
+        case MUTE:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getMuteRes() == 0) rate = (mcheck + aWIT) - tWIT;
+                else rate = (mcheck + aWIT) - (tWIT + (target.getMuteRes()* 100));
+            }
+            break;
+// =============================================================================================================================================================            
+        case ROOT:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getRootRes() == 0) rate = (mcheck + aWIT) - tWIT;
+                else rate = (mcheck + aWIT) - (tWIT + (target.getRootRes()* 100));
+            }
+            break;
+// =============================================================================================================================================================        
+        case PARALYZE:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getMovementRes() == 0) rate = (mcheck + aWIT) - tWIT;
+                else rate = (mcheck + aWIT) - (tWIT + (target.getMovementRes()* 100));
+            }
+            break;
+// =============================================================================================================================================================        
+        case FEAR:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getFearRes() == 0) rate = (mcheck + aWIT) - tWIT;
+                else rate = (mcheck + aWIT) - (tWIT + (target.getFearRes()* 100));
+            }
+            break;
+// =============================================================================================================================================================            
+// MEN affected resistances
+// =============================================================================================================================================================            
+        case AGGDAMAGE:
+            if (target.getAggressionRes() == 0) rate = (mcheck + aINT) - tMEN;
+            else rate = (mcheck + aINT) - (tMEN + (target.getAggressionRes()* 100));
+            break;
+// =============================================================================================================================================================            
+        case POISON:
+            if (target.getPoisonRes() == 0) rate = (mcheck + aINT) - tMEN;
+            else rate = (mcheck + aINT) - (tMEN + (target.getPoisonRes()* 100));
+            break;
+// =============================================================================================================================================================            
+        case CONFUSION:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getConfusionRes() == 0) rate = (mcheck + aINT) - tMEN;
+                else rate = (mcheck + aINT) - (tMEN + (target.getConfusionRes()* 100));
+            }
+            break;
+/*// =============================================================================================================================================================            
+        case DATK:
+            if (target.getDarknessRes() == 0) rate = mcheck + aINT - tMEN;
+            else rate = mcheck + aINT - (tMEN + (target.getDarknessRes()* 100));
+            break;
+// =============================================================================================================================================================            
+        case SATK:
+            if (target.getSacredRes() == 0) rate = (mcheck + aINT) - tMEN;
+            else rate = (mcheck + aINT) - (tMEN + (target.getSacredRes()* 100));
+            break;
+// =============================================================================================================================================================*/
+// CON affected resistances
+            
+        case BLEED:
+            if (target.getBleedRes() == 0) rate = (pcheck + aDEX) - tCON;
+            else rate = (pcheck + aDEX) - (tCON + (target.getBleedRes()* 100));
+            break;
+// ============================================================================================================================================================= 
+// For normal Stun Attack, with skillType = STUN
+        case STUN:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getStunRes() == 0) rate = (pcheck + aDEX) - tCON;
+                else rate = (pcheck + aDEX) - (tCON + (target.getStunRes()* 100));
+            }
+            break;
+// ============================================================================================================================================================= 
+// For normal Stun attack with skillType = PDAM            
+        default:
+            if (target instanceof L2RaidBossInstance) rate = 0;
+            else
+            {
+                if (target.getStunRes() == 0) rate = (pcheck + skillPower + aSTR) - (tCON + tDEX);
+                else rate = (pcheck + skillPower + aSTR) - (tCON + tDEX + (target.getStunRes()* 100));
+            }
+            break;
+        }
+// =============================================================================================================================================================        
+        if (rate < 0) rate = 0;
+        if (rate >= check) success = true;
+        else success = false;
+        return success;
+    }
+	
 	public boolean calculateUnlockChance(L2Skill skill)
 	{
 		int level = skill.getLevel();
Index: D:/workspace/GameServer/java/net/sf/l2j/gameserver/skills/Stats.java
===================================================================
--- D:/workspace/GameServer/java/net/sf/l2j/gameserver/skills/Stats.java	(revision 1584)
+++ D:/workspace/GameServer/java/net/sf/l2j/gameserver/skills/Stats.java	(working copy)
@@ -112,6 +112,8 @@
 	EARTH_RES,
  HOLY_RES,
  DARK_RES,
+ FEAR_RES,
+ SACRED_RES,
 
 	NONE_WPN_RES, // Shields!!!
 	SWORD_WPN_RES,
@@ -204,6 +206,8 @@
 		if (name == "earthRes"     ) return EARTH_RES;
  if (name == "holyRes"      ) return HOLY_RES;
  if (name == "darkRes"      ) return DARK_RES;
+ if (name == "fearRes"      ) return FEAR_RES;
+ if (name == "sacredRes"    ) return SACRED_RES;
 
 		if (name == "noneWpnRes"   ) return NONE_WPN_RES;
 		if (name == "swordWpnRes"  ) return SWORD_WPN_RES;
Index: D:/workspace/GameServer/java/net/sf/l2j/gameserver/templates/L2CharTemplate.java
===================================================================
--- D:/workspace/GameServer/java/net/sf/l2j/gameserver/templates/L2CharTemplate.java	(revision 1584)
+++ D:/workspace/GameServer/java/net/sf/l2j/gameserver/templates/L2CharTemplate.java	(working copy)
@@ -86,8 +86,11 @@
 	public final int baseWindRes;
 	public final int baseWaterRes;
 	public final int baseEarthRes;
- public final int baseHolyRes;
- public final int baseDarkRes;
+	public final int baseHolyRes;
+	public final int baseDarkRes;
+    public final int baseSacredRes;
+	public final int baseMuteRes;
+	public final int baseFearRes;
 	
 	public final int collisionRadius;   
 	public final int collisionHeight;
@@ -150,6 +153,9 @@
 		baseEarthRes       = set.getInteger("baseEarthRes",       0);
  baseHolyRes        = set.getInteger("baseHolyRes",        0);
  baseDarkRes        = set.getInteger("baseDarkRes",        0);
+ baseSacredRes      = set.getInteger("baseSacredRes",      0);
+ baseMuteRes        = set.getInteger("baseMuteRes",        0);
+ baseFearRes        = set.getInteger("baseFearRes",        0);
 		
 		// Geometry
 		collisionRadius    = set.getInteger("collision_radius");