Fixed typo with elemental spirits crit damage and added missing message.

Contributed by Sahar.
This commit is contained in:
MobiusDevelopment
2021-01-30 13:27:27 +00:00
parent 5bd385b530
commit 2e940916c9
40 changed files with 168 additions and 64 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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)

View File

@@ -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)
{
}

View File

@@ -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))
{

View File

@@ -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())
{

View File

@@ -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);

View File

@@ -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))
{

View File

@@ -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())