Sync with L2jServer HighFive Sep 8th 2015.

This commit is contained in:
MobiusDev
2015-09-08 19:52:45 +00:00
parent 4e2af7c19a
commit 40380c4860
738 changed files with 14444 additions and 13328 deletions

View File

@ -1242,7 +1242,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
shld1 = Formulas.calcShldUse(this, target);
// Calculate if hit is critical
crit1 = Formulas.calcCrit(getStat().getCriticalHit(target, null), false, target);
crit1 = Formulas.calcCrit(this, target);
// Calculate physical damages
damage1 = (int) Formulas.calcPhysDam(this, target, null, shld1, crit1, attack.hasSoulshot());
@ -1311,7 +1311,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
shld1 = Formulas.calcShldUse(this, target);
// Calculate if hit is critical
crit1 = Formulas.calcCrit(getStat().getCriticalHit(target, null), false, target);
crit1 = Formulas.calcCrit(this, target);
// Calculate physical damages
damage1 = (int) Formulas.calcPhysDam(this, target, null, shld1, crit1, attack.hasSoulshot());
@ -1377,7 +1377,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
shld1 = Formulas.calcShldUse(this, target);
// Calculate if hit 1 is critical
crit1 = Formulas.calcCrit(getStat().getCriticalHit(target, null), false, target);
crit1 = Formulas.calcCrit(this, target);
// Calculate physical damages of hit 1
damage1 = (int) Formulas.calcPhysDam(this, target, null, shld1, crit1, attack.hasSoulshot());
@ -1391,7 +1391,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
shld2 = Formulas.calcShldUse(this, target);
// Calculate if hit 2 is critical
crit2 = Formulas.calcCrit(getStat().getCriticalHit(target, null), false, target);
crit2 = Formulas.calcCrit(this, target);
// Calculate physical damages of hit 2
damage2 = (int) Formulas.calcPhysDam(this, target, null, shld2, crit2, attack.hasSoulshot());
@ -1567,7 +1567,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
shld1 = Formulas.calcShldUse(this, target);
// Calculate if hit is critical
crit1 = Formulas.calcCrit(getStat().getCriticalHit(target, null), false, target);
crit1 = Formulas.calcCrit(this, target);
// Calculate physical damages
damage1 = (int) Formulas.calcPhysDam(this, target, null, shld1, crit1, attack.hasSoulshot());
@ -6330,7 +6330,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
return getStat().getMaxRecoverableCp();
}
public int getMAtk(L2Character target, Skill skill)
public final double getMAtk(L2Character target, Skill skill)
{
return getStat().getMAtk(target, skill);
}
@ -6365,7 +6365,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
return getStat().getMCriticalHit(target, skill);
}
public int getMDef(L2Character target, Skill skill)
public final double getMDef(L2Character target, Skill skill)
{
return getStat().getMDef(target, skill);
}
@ -6375,7 +6375,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
return getStat().getMReuseRate(skill);
}
public int getPAtk(L2Character target)
public final double getPAtk(L2Character target)
{
return getStat().getPAtk(target);
}
@ -6385,7 +6385,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
return getStat().getPAtkSpd();
}
public int getPDef(L2Character target)
public final double getPDef(L2Character target)
{
return getStat().getPDef(target);
}

View File

@ -842,7 +842,9 @@ public class L2PetInstance extends L2Summon
dropItemHere(dropit, false);
}
/** @return Returns the mount able. */
/**
* @return Returns the mount able.
*/
@Override
public boolean isMountable()
{
@ -1220,18 +1222,6 @@ public class L2PetInstance extends L2Summon
return getStat().getCriticalHit(target, skill);
}
@Override
public int getMAtk(L2Character target, Skill skill)
{
return getStat().getMAtk(target, skill);
}
@Override
public int getMDef(L2Character target, Skill skill)
{
return getStat().getMDef(target, skill);
}
@Override
public final int getSkillLevel(int skillId)
{

View File

@ -191,7 +191,7 @@ public class CharStat
*/
public int getCriticalHit(L2Character target, Skill skill)
{
int val = (int) calcStat(Stats.CRITICAL_RATE, _activeChar.getTemplate().getBaseCritRate(), target, skill);
double val = (int) calcStat(Stats.CRITICAL_RATE, _activeChar.getTemplate().getBaseCritRate(), target, skill);
int maxCrit = (int) _activeChar.getStat().calcStat(Stats.MAX_PHYS_CRIT_RATE, 0, null, null);
@ -207,7 +207,16 @@ public class CharStat
}
}
return val;
return (int) (val + .5);
}
/**
* @param base
* @return the Critical Hit Pos rate of the L2Character
*/
public int getCriticalHitPos(int base)
{
return (int) calcStat(Stats.CRITICAL_RATE_POS, base);
}
/**
@ -329,7 +338,7 @@ public class CharStat
* @param skill The L2Skill used against the target
* @return
*/
public int getMAtk(L2Character target, Skill skill)
public double getMAtk(L2Character target, Skill skill)
{
float bonusAtk = 1;
if (Config.L2JMOD_CHAMPION_ENABLE && _activeChar.isChampion())
@ -342,7 +351,7 @@ public class CharStat
}
// Calculate modifiers Magic Attack
return (int) calcStat(Stats.MAGIC_ATTACK, _activeChar.getTemplate().getBaseMAtk() * bonusAtk, target, skill);
return calcStat(Stats.MAGIC_ATTACK, _activeChar.getTemplate().getBaseMAtk() * bonusAtk, target, skill);
}
/**
@ -389,7 +398,7 @@ public class CharStat
* @param skill The L2Skill used against the target
* @return the MDef (base+modifier) of the L2Character against a skill in function of abnormal effects in progress.
*/
public int getMDef(L2Character target, Skill skill)
public double getMDef(L2Character target, Skill skill)
{
// Get the base MDef of the L2Character
double defence = _activeChar.getTemplate().getBaseMDef();
@ -401,7 +410,7 @@ public class CharStat
}
// Calculate modifiers Magic Attack
return (int) calcStat(Stats.MAGIC_DEFENCE, defence, target, skill);
return calcStat(Stats.MAGIC_DEFENCE, defence, target, skill);
}
/**
@ -526,7 +535,7 @@ public class CharStat
* @param target
* @return the PAtk (base+modifier) of the L2Character.
*/
public int getPAtk(L2Character target)
public double getPAtk(L2Character target)
{
float bonusAtk = 1;
if (Config.L2JMOD_CHAMPION_ENABLE && _activeChar.isChampion())
@ -537,7 +546,7 @@ public class CharStat
{
bonusAtk *= Config.RAID_PATTACK_MULTIPLIER;
}
return (int) calcStat(Stats.POWER_ATTACK, _activeChar.getTemplate().getBasePAtk() * bonusAtk, target, null);
return calcStat(Stats.POWER_ATTACK, _activeChar.getTemplate().getBasePAtk() * bonusAtk, target, null);
}
/**
@ -558,9 +567,9 @@ public class CharStat
* @param target
* @return the PDef (base+modifier) of the L2Character.
*/
public int getPDef(L2Character target)
public double getPDef(L2Character target)
{
return (int) calcStat(Stats.POWER_DEFENCE, (_activeChar.isRaid()) ? _activeChar.getTemplate().getBasePDef() * Config.RAID_PDEFENCE_MULTIPLIER : _activeChar.getTemplate().getBasePDef(), target, null);
return calcStat(Stats.POWER_DEFENCE, (_activeChar.isRaid()) ? _activeChar.getTemplate().getBasePDef() * Config.RAID_PDEFENCE_MULTIPLIER : _activeChar.getTemplate().getBasePDef(), target, null);
}
/**

View File

@ -167,27 +167,27 @@ public class PetStat extends SummonStat
}
@Override
public int getMAtk(L2Character target, Skill skill)
public double getMAtk(L2Character target, Skill skill)
{
return (int) calcStat(Stats.MAGIC_ATTACK, getActiveChar().getPetLevelData().getPetMAtk(), target, skill);
return calcStat(Stats.MAGIC_ATTACK, getActiveChar().getPetLevelData().getPetMAtk(), target, skill);
}
@Override
public int getMDef(L2Character target, Skill skill)
public double getMDef(L2Character target, Skill skill)
{
return (int) calcStat(Stats.MAGIC_DEFENCE, getActiveChar().getPetLevelData().getPetMDef(), target, skill);
return calcStat(Stats.MAGIC_DEFENCE, getActiveChar().getPetLevelData().getPetMDef(), target, skill);
}
@Override
public int getPAtk(L2Character target)
public double getPAtk(L2Character target)
{
return (int) calcStat(Stats.POWER_ATTACK, getActiveChar().getPetLevelData().getPetPAtk(), target, null);
return calcStat(Stats.POWER_ATTACK, getActiveChar().getPetLevelData().getPetPAtk(), target, null);
}
@Override
public int getPDef(L2Character target)
public double getPDef(L2Character target)
{
return (int) calcStat(Stats.POWER_DEFENCE, getActiveChar().getPetLevelData().getPetPDef(), target, null);
return calcStat(Stats.POWER_DEFENCE, getActiveChar().getPetLevelData().getPetPDef(), target, null);
}
@Override

View File

@ -531,7 +531,7 @@ public final class Formulas
double baseMod = ((77 * (power + (attacker.getPAtk(target) * ssboost))) / defence);
// Critical
double criticalMod = (attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill));
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POSITION, 1, target, skill) - 1) / 2);
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POS, 1, target, skill) - 1) / 2);
double criticalVulnMod = (target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, skill));
double criticalAddMod = ((attacker.getStat().calcStat(Stats.CRITICAL_DAMAGE_ADD, 0) * 6.1 * 77) / defence);
double criticalAddVuln = target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill);
@ -623,14 +623,14 @@ public final class Formulas
double baseMod = ((77 * (skill.getPower(isPvP, isPvE) + attacker.getPAtk(target))) / defence) * ssboost;
// Critical
double criticalMod = (attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill));
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POSITION, 1, target, skill) - 1) / 2);
double criticalModPos = 1 + ((attacker.calcStat(Stats.CRITICAL_DAMAGE_POS, 1, target, skill) - 1) / 2);
double criticalVulnMod = (target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, skill));
double criticalAddMod = ((attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 6.1 * 77) / defence);
double criticalAddVuln = target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill);
// Trait, elements
double generalTraitMod = calcGeneralTraitBonus(attacker, target, skill.getTraitType(), false);
double attributeMod = calcAttributeBonus(attacker, target, skill);
double weaponMod = attacker.getRandomDamageMultiplier();
double weaponMod = attacker.getRandomDamageMultiplier(); // 1?
double penaltyMod = 1;
if (target.isAttackable() && !target.isRaid() && !target.isRaidMinion() && (target.getLevel() >= Config.MIN_NPC_LVL_DMG_PENALTY) && (attacker.getActingPlayer() != null) && ((target.getLevel() - attacker.getActingPlayer().getLevel()) >= 2))
@ -758,15 +758,15 @@ public final class Formulas
if (crit)
{
// Finally retail like formula
damage = 2 * attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * attacker.calcStat(Stats.CRITICAL_DAMAGE_POSITION, 1, target, skill) * target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, null) * ((70 * damage) / (defence * reduceDef));
// Crit dmg add is almost useless in normal hits...
damage += ((attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 70) / (defence * reduceDef));
// Retail like formula.
damage = 2 * attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * attacker.calcStat(Stats.CRITICAL_DAMAGE_POS, 1, target, skill) * target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE, 1, target, null) * ((76 * damage) / (defence * reduceDef));
// Crit dmg add is almost useless in normal hits.
damage += ((attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 77) / (defence * reduceDef));
damage += target.calcStat(Stats.DEFENCE_CRITICAL_DAMAGE_ADD, 0, target, skill);
}
else
{
damage = (70 * damage) / (defence * reduceDef);
damage = (76 * damage) / (defence * reduceDef);
}
damage *= calcAttackTraitBonus(attacker, target);
@ -879,7 +879,7 @@ public final class Formulas
public static final double calcMagicDam(L2Character attacker, L2Character target, Skill skill, byte shld, boolean sps, boolean bss, boolean mcrit)
{
int mDef = target.getMDef(attacker, skill);
double mDef = target.getMDef(attacker, skill);
switch (shld)
{
case SHIELD_DEFENSE_SUCCEED:
@ -1024,7 +1024,7 @@ public final class Formulas
public static final double calcMagicDam(L2CubicInstance attacker, L2Character target, Skill skill, boolean mcrit, byte shld)
{
int mDef = target.getMDef(attacker.getOwner(), skill);
double mDef = target.getMDef(attacker.getOwner(), skill);
switch (shld)
{
case SHIELD_DEFENSE_SUCCEED:
@ -1108,17 +1108,30 @@ public final class Formulas
return damage;
}
public static final boolean calcCrit(L2Character attacker, L2Character target)
{
return calcCrit(attacker, target, null);
}
/**
* Returns true in case of critical hit
* @param rate
* @param skill
* @param attacker
* @param target
* @param skill
* @return
*/
public static final boolean calcCrit(double rate, boolean skill, L2Character target)
public static final boolean calcCrit(L2Character attacker, L2Character target, Skill skill)
{
double finalRate = target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE, rate, null, null) + target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE_ADD, 0, null, null);
return finalRate > Rnd.get(1000);
double rate = 0.d;
if (skill != null)
{
rate = skill.getBaseCritRate() * 10 * BaseStats.STR.calcBonus(attacker);
}
else
{
rate = (int) attacker.getStat().calcStat(Stats.CRITICAL_RATE_POS, attacker.getStat().getCriticalHit(target, null));
}
return (target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE, rate, null, null) + target.getStat().calcStat(Stats.DEFENCE_CRITICAL_RATE_ADD, 0, null, null)) > Rnd.get(1000);
}
public static final boolean calcMCrit(double mRate)
@ -1740,35 +1753,21 @@ public final class Formulas
public static double calcAttributeBonus(L2Character attacker, L2Character target, Skill skill)
{
int attack_attribute;
int defence_attribute;
if (skill != null)
{
if (skill.getElement() == -1)
if ((skill.getElement() == -1) || (attacker.getAttackElement() != skill.getElement()))
{
attack_attribute = 0;
defence_attribute = target.getDefenseElementValue((byte) -1);
}
else
{
if (attacker.getAttackElement() == skill.getElement())
{
attack_attribute = attacker.getAttackElementValue(attacker.getAttackElement()) + skill.getElementPower();
defence_attribute = target.getDefenseElementValue(attacker.getAttackElement());
}
else
{
attack_attribute = skill.getElementPower();
defence_attribute = target.getDefenseElementValue(skill.getElement());
}
return 1;
}
attack_attribute = attacker.getAttackElementValue(attacker.getAttackElement()) + skill.getElementPower();
}
else
{
attack_attribute = attacker.getAttackElementValue(attacker.getAttackElement());
defence_attribute = target.getDefenseElementValue(attacker.getAttackElement());
}
int defence_attribute = target.getDefenseElementValue(attacker.getAttackElement());
double attack_attribute_mod = 0;
double defence_attribute_mod = 0;

View File

@ -55,9 +55,9 @@ public enum Stats
MAGIC_REUSE_RATE("mReuse"), // Magic Skill Reuse Rate
DANCE_REUSE("dReuse"), // Dance Skill Reuse Rate
SHIELD_DEFENCE("sDef"),
CRITICAL_DAMAGE("cAtk"),
CRITICAL_DAMAGE_POSITION("cAtkPos"),
CRITICAL_DAMAGE_ADD("cAtkAdd"), // this is another type for special critical damage mods - vicious stance, critical power and critical damage SA
CRITICAL_DAMAGE("critDmg"),
CRITICAL_DAMAGE_POS("critDmgPos"),
CRITICAL_DAMAGE_ADD("critDmgAdd"), // this is another type for special critical damage mods - vicious stance, critical power and critical damage SA
MAGIC_CRIT_DMG("mCritPower"),
MAGIC_CRIT_DMG_ADD("mCritPowerAdd"),
MOMENTUM_SKILL_POWER("momentumSkillPower"),
@ -86,7 +86,8 @@ public enum Stats
DEFENCE_CRITICAL_DAMAGE("defCritDamage"),
DEFENCE_CRITICAL_DAMAGE_ADD("defCritDamageAdd"), // Resistance to critical damage in value (Example: +100 will be 100 more critical damage, NOT 100% more).
SHIELD_RATE("rShld"),
CRITICAL_RATE("rCrit"),
CRITICAL_RATE("critRate"),
CRITICAL_RATE_POS("critRatePos"),
MAX_PHYS_CRIT_RATE("maxPhysCritRate"),
BLOW_RATE("blowRate"),
MCRITICAL_RATE("mCritRate"),
@ -169,18 +170,18 @@ public enum Stats
// ExSkill
INV_LIM("inventoryLimit"),
WH_LIM("whLimit"),
FREIGHT_LIM("FreightLimit"),
P_SELL_LIM("PrivateSellLimit"),
P_BUY_LIM("PrivateBuyLimit"),
REC_D_LIM("DwarfRecipeLimit"),
REC_C_LIM("CommonRecipeLimit"),
FREIGHT_LIM("freightLimit"),
P_SELL_LIM("privateSellLimit"),
P_BUY_LIM("privateBuyLimit"),
REC_D_LIM("dwarfRecipeLimit"),
REC_C_LIM("commonRecipeLimit"),
// C4 Stats
PHYSICAL_MP_CONSUME_RATE("PhysicalMpConsumeRate"),
MAGICAL_MP_CONSUME_RATE("MagicalMpConsumeRate"),
DANCE_MP_CONSUME_RATE("DanceMpConsumeRate"),
BOW_MP_CONSUME_RATE("BowMpConsumeRate"),
MP_CONSUME("MpConsume"),
PHYSICAL_MP_CONSUME_RATE("physicalMpConsumeRate"),
MAGICAL_MP_CONSUME_RATE("magicalMpConsumeRate"),
DANCE_MP_CONSUME_RATE("danceMpConsumeRate"),
BOW_MP_CONSUME_RATE("bowMpConsumeRate"),
MP_CONSUME("mpConsume"),
// Shield Stats
SHIELD_DEFENCE_ANGLE("shieldDefAngle"),

View File

@ -97,18 +97,18 @@ public class GMViewCharacterInfo extends L2GameServerPacket
writeC(_activeChar.getInventory().canEquipCloak() ? 1 : 0); // CT2.3
writeD(0x00);
writeH(0x00);
writeD(_activeChar.getPAtk(null));
writeD((int) _activeChar.getPAtk(null));
writeD(_activeChar.getPAtkSpd());
writeD(_activeChar.getPDef(null));
writeD((int) _activeChar.getPDef(null));
writeD(_activeChar.getEvasionRate(null));
writeD(_activeChar.getAccuracy());
writeD(_activeChar.getCriticalHit(null, null));
writeD(_activeChar.getMAtk(null, null));
writeD((int) _activeChar.getMAtk(null, null));
writeD(_activeChar.getMAtkSpd());
writeD(_activeChar.getPAtkSpd());
writeD(_activeChar.getMDef(null, null));
writeD((int) _activeChar.getMDef(null, null));
writeD(_activeChar.getMagicEvasionRate(null));
writeD(_activeChar.getMagicAccuracy());
writeD(_activeChar.getMCriticalHit(null, null));

View File

@ -153,13 +153,13 @@ public class PetInfo extends L2GameServerPacket
writeD(_summon.isPet() ? _summon.getInventory().getTotalWeight() : 0);// weight
writeD(_summon.getMaxLoad());// max weight it can carry
writeD(_summon.getPAtk(null));// patk
writeD(_summon.getPDef(null));// pdef
writeD((int) _summon.getPAtk(null));// patk
writeD((int) _summon.getPDef(null));// pdef
writeD(_summon.getAccuracy());// accuracy
writeD(_summon.getEvasionRate(null));// evasion
writeD(_summon.getCriticalHit(null, null));// critical
writeD(_summon.getMAtk(null, null));// matk
writeD(_summon.getMDef(null, null));// mdef
writeD((int) _summon.getMAtk(null, null));// matk
writeD((int) _summon.getMDef(null, null));// mdef
writeD(_summon.getMagicAccuracy()); // magic accuracy
writeD(_summon.getMagicEvasionRate(null)); // magic evasion
writeD(_summon.getMCriticalHit(null, null)); // mcritical

View File

@ -214,17 +214,17 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
{
writeH(56);
writeH(_activeChar.getActiveWeaponItem() != null ? 40 : 20);
writeD(_activeChar.getPAtk(null));
writeD((int) _activeChar.getPAtk(null));
writeD(_activeChar.getPAtkSpd());
writeD(_activeChar.getPDef(null));
writeD((int) _activeChar.getPDef(null));
writeD(_activeChar.getEvasionRate(null));
writeD(_activeChar.getAccuracy());
writeD(_activeChar.getCriticalHit(null, null));
writeD(_activeChar.getMAtk(null, null));
writeD((int) _activeChar.getMAtk(null, null));
writeD(_activeChar.getMAtkSpd());
writeD(_activeChar.getPAtkSpd()); // Seems like atk speed - 1
writeD(_activeChar.getMagicEvasionRate(null));
writeD(_activeChar.getMDef(null, null));
writeD((int) _activeChar.getMDef(null, null));
writeD(_activeChar.getMagicAccuracy());
writeD(_activeChar.getMCriticalHit(null, null));
}