Fixed typo with elemental spirits crit damage and added missing message.
Contributed by Sahar.
This commit is contained in:
@@ -97,7 +97,7 @@ public class HealPercent extends AbstractEffect
|
||||
{
|
||||
final double damage = -amount;
|
||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -102,7 +102,7 @@ public class Hp extends AbstractEffect
|
||||
{
|
||||
final double damage = -amount;
|
||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect
|
||||
// Send message.
|
||||
if (effector.isPlayer())
|
||||
{
|
||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -285,7 +285,7 @@ public class ElementalSpirit
|
||||
|
||||
public int getCriticalDamage()
|
||||
{
|
||||
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints();
|
||||
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints();
|
||||
}
|
||||
|
||||
public void setInUse(boolean value)
|
||||
|
@@ -4552,6 +4552,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
double elementalDamage = 0;
|
||||
boolean elementalCrit = false;
|
||||
|
||||
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
||||
if (attacker != null)
|
||||
@@ -4576,7 +4577,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
|
||||
if (!reflect)
|
||||
{
|
||||
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount);
|
||||
elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this);
|
||||
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit);
|
||||
amount += elementalDamage;
|
||||
}
|
||||
}
|
||||
@@ -4602,7 +4604,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
|
||||
if (attacker != null)
|
||||
{
|
||||
attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false);
|
||||
attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4736,8 +4738,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
* @param elementalDamage
|
||||
* @param crit
|
||||
* @param miss
|
||||
* @param elementalCrit
|
||||
*/
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss)
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -731,7 +731,7 @@ public abstract class Summon extends Playable
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss)
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit)
|
||||
{
|
||||
if (miss || (_owner == null))
|
||||
{
|
||||
|
@@ -124,11 +124,11 @@ public class DoppelgangerInstance extends Npc
|
||||
public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect)
|
||||
{
|
||||
super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect);
|
||||
sendDamageMessage(target, skill, (int) damage, 0, critical, false);
|
||||
sendDamageMessage(target, skill, (int) damage, 0, critical, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss)
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit)
|
||||
{
|
||||
if (miss || (getSummoner() == null) || !getSummoner().isPlayer())
|
||||
{
|
||||
|
@@ -11386,7 +11386,7 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss)
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit)
|
||||
{
|
||||
// Check if hit is missed
|
||||
if (miss)
|
||||
@@ -11431,6 +11431,13 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
}
|
||||
|
||||
if (elementalCrit)
|
||||
{
|
||||
final SystemMessage sm = new SystemMessage(SystemMessageId.S1_ATTACK_CRITICAL_IS_ACTIVATED);
|
||||
sm.addElementalSpirit(getActiveElementalSpiritType());
|
||||
sendPacket(sm);
|
||||
}
|
||||
|
||||
if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId()))
|
||||
{
|
||||
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
||||
|
@@ -253,11 +253,11 @@ public class TrapInstance extends Npc
|
||||
public void doAttack(double damage, Creature target, Skill skill, boolean isDOT, boolean directlyToHp, boolean critical, boolean reflect)
|
||||
{
|
||||
super.doAttack(damage, target, skill, isDOT, directlyToHp, critical, reflect);
|
||||
sendDamageMessage(target, skill, (int) damage, 0, critical, false);
|
||||
sendDamageMessage(target, skill, (int) damage, 0, critical, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss)
|
||||
public void sendDamageMessage(Creature target, Skill skill, int damage, double elementalDamage, boolean crit, boolean miss, boolean elementalCrit)
|
||||
{
|
||||
if (miss || (_owner == null))
|
||||
{
|
||||
|
@@ -1667,7 +1667,25 @@ public class Formulas
|
||||
return 1;
|
||||
}
|
||||
|
||||
public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage)
|
||||
public static boolean calcSpiritElementalCrit(Creature attacker, Creature target)
|
||||
{
|
||||
if (attacker.isPlayer())
|
||||
{
|
||||
final PlayerInstance attackerPlayer = attacker.getActingPlayer();
|
||||
final ElementalType type = ElementalType.of(attackerPlayer.getActiveElementalSpiritType());
|
||||
if (ElementalType.NONE == type)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final double critRate = attackerPlayer.getElementalSpiritCritRate();
|
||||
return Math.min(critRate * 10, 380) > Rnd.get(1000);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static double calcSpiritElementalDamage(Creature attacker, Creature target, double baseDamage, boolean isCrit)
|
||||
{
|
||||
if (attacker.isPlayer())
|
||||
{
|
||||
@@ -1678,8 +1696,6 @@ public class Formulas
|
||||
return 0;
|
||||
}
|
||||
|
||||
final double critRate = attackerPlayer.getElementalSpiritCritRate();
|
||||
final boolean isCrit = Math.min(critRate * 10, 380) > Rnd.get(1000);
|
||||
final double critDamage = attackerPlayer.getElementalSpiritCritDamage();
|
||||
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
||||
if (target.isPlayer())
|
||||
|
Reference in New Issue
Block a user