rendered paste bodyIndex: 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");