Fixed typo with elemental spirits crit damage and added missing message.
Contributed by Sahar.
This commit is contained in:
Vendored
+1
-1
@@ -97,7 +97,7 @@ public class HealPercent extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ public class Hp extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect
|
|||||||
// Send message.
|
// Send message.
|
||||||
if (effector.isPlayer())
|
if (effector.isPlayer())
|
||||||
{
|
{
|
||||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -285,7 +285,7 @@ public class ElementalSpirit
|
|||||||
|
|
||||||
public int getCriticalDamage()
|
public int getCriticalDamage()
|
||||||
{
|
{
|
||||||
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints();
|
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInUse(boolean value)
|
public void setInUse(boolean value)
|
||||||
|
|||||||
+6
-3
@@ -4552,6 +4552,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
double elementalDamage = 0;
|
double elementalDamage = 0;
|
||||||
|
boolean elementalCrit = false;
|
||||||
|
|
||||||
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
||||||
if (attacker != null)
|
if (attacker != null)
|
||||||
@@ -4576,7 +4577,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (!reflect)
|
if (!reflect)
|
||||||
{
|
{
|
||||||
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount);
|
elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this);
|
||||||
|
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit);
|
||||||
amount += elementalDamage;
|
amount += elementalDamage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4602,7 +4604,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (attacker != null)
|
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 elementalDamage
|
||||||
* @param crit
|
* @param crit
|
||||||
* @param miss
|
* @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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -731,7 +731,7 @@ public abstract class Summon extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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())
|
if (miss || (getSummoner() == null) || !getSummoner().isPlayer())
|
||||||
{
|
{
|
||||||
|
|||||||
+8
-1
@@ -11386,7 +11386,7 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
// Check if hit is missed
|
||||||
if (miss)
|
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()))
|
if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId()))
|
||||||
{
|
{
|
||||||
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-3
@@ -1667,7 +1667,25 @@ public class Formulas
|
|||||||
return 1;
|
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())
|
if (attacker.isPlayer())
|
||||||
{
|
{
|
||||||
@@ -1678,8 +1696,6 @@ public class Formulas
|
|||||||
return 0;
|
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 critDamage = attackerPlayer.getElementalSpiritCritDamage();
|
||||||
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
||||||
if (target.isPlayer())
|
if (target.isPlayer())
|
||||||
|
|||||||
+1
-1
@@ -97,7 +97,7 @@ public class HealPercent extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -102,7 +102,7 @@ public class Hp extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/effecthandlers/RealDamage.java
Vendored
+1
-1
@@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect
|
|||||||
// Send message.
|
// Send message.
|
||||||
if (effector.isPlayer())
|
if (effector.isPlayer())
|
||||||
{
|
{
|
||||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -285,7 +285,7 @@ public class ElementalSpirit
|
|||||||
|
|
||||||
public int getCriticalDamage()
|
public int getCriticalDamage()
|
||||||
{
|
{
|
||||||
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints();
|
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInUse(boolean value)
|
public void setInUse(boolean value)
|
||||||
|
|||||||
+6
-3
@@ -4552,6 +4552,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
double elementalDamage = 0;
|
double elementalDamage = 0;
|
||||||
|
boolean elementalCrit = false;
|
||||||
|
|
||||||
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
||||||
if (attacker != null)
|
if (attacker != null)
|
||||||
@@ -4576,7 +4577,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (!reflect)
|
if (!reflect)
|
||||||
{
|
{
|
||||||
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount);
|
elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this);
|
||||||
|
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit);
|
||||||
amount += elementalDamage;
|
amount += elementalDamage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4602,7 +4604,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (attacker != null)
|
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 elementalDamage
|
||||||
* @param crit
|
* @param crit
|
||||||
* @param miss
|
* @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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -731,7 +731,7 @@ public abstract class Summon extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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())
|
if (miss || (getSummoner() == null) || !getSummoner().isPlayer())
|
||||||
{
|
{
|
||||||
|
|||||||
+8
-1
@@ -11386,7 +11386,7 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
// Check if hit is missed
|
||||||
if (miss)
|
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()))
|
if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId()))
|
||||||
{
|
{
|
||||||
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-3
@@ -1667,7 +1667,25 @@ public class Formulas
|
|||||||
return 1;
|
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())
|
if (attacker.isPlayer())
|
||||||
{
|
{
|
||||||
@@ -1678,8 +1696,6 @@ public class Formulas
|
|||||||
return 0;
|
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 critDamage = attackerPlayer.getElementalSpiritCritDamage();
|
||||||
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
||||||
if (target.isPlayer())
|
if (target.isPlayer())
|
||||||
|
|||||||
Vendored
+1
-1
@@ -102,7 +102,7 @@ public class HealPercent extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -107,7 +107,7 @@ public class Hp extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect
|
|||||||
// Send message.
|
// Send message.
|
||||||
if (effector.isPlayer())
|
if (effector.isPlayer())
|
||||||
{
|
{
|
||||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -285,7 +285,7 @@ public class ElementalSpirit
|
|||||||
|
|
||||||
public int getCriticalDamage()
|
public int getCriticalDamage()
|
||||||
{
|
{
|
||||||
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints();
|
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInUse(boolean value)
|
public void setInUse(boolean value)
|
||||||
|
|||||||
+6
-3
@@ -4551,6 +4551,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
double elementalDamage = 0;
|
double elementalDamage = 0;
|
||||||
|
boolean elementalCrit = false;
|
||||||
|
|
||||||
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
||||||
if (attacker != null)
|
if (attacker != null)
|
||||||
@@ -4575,7 +4576,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (!reflect)
|
if (!reflect)
|
||||||
{
|
{
|
||||||
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount);
|
elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this);
|
||||||
|
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit);
|
||||||
amount += elementalDamage;
|
amount += elementalDamage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4601,7 +4603,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (attacker != null)
|
if (attacker != null)
|
||||||
{
|
{
|
||||||
attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false);
|
attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4735,8 +4737,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
* @param elementalDamage
|
* @param elementalDamage
|
||||||
* @param crit
|
* @param crit
|
||||||
* @param miss
|
* @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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -731,7 +731,7 @@ public abstract class Summon extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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())
|
if (miss || (getSummoner() == null) || !getSummoner().isPlayer())
|
||||||
{
|
{
|
||||||
|
|||||||
+8
-1
@@ -11357,7 +11357,7 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
// Check if hit is missed
|
||||||
if (miss)
|
if (miss)
|
||||||
@@ -11402,6 +11402,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()))
|
if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId()))
|
||||||
{
|
{
|
||||||
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-3
@@ -1667,7 +1667,25 @@ public class Formulas
|
|||||||
return 1;
|
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())
|
if (attacker.isPlayer())
|
||||||
{
|
{
|
||||||
@@ -1678,8 +1696,6 @@ public class Formulas
|
|||||||
return 0;
|
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 critDamage = attackerPlayer.getElementalSpiritCritDamage();
|
||||||
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
||||||
if (target.isPlayer())
|
if (target.isPlayer())
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ public class HealPercent extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -107,7 +107,7 @@ public class Hp extends AbstractEffect
|
|||||||
{
|
{
|
||||||
final double damage = -amount;
|
final double damage = -amount;
|
||||||
effected.reduceCurrentHp(damage, effector, skill, false, false, false, false);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -79,7 +79,7 @@ public class RealDamage extends AbstractEffect
|
|||||||
// Send message.
|
// Send message.
|
||||||
if (effector.isPlayer())
|
if (effector.isPlayer())
|
||||||
{
|
{
|
||||||
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false);
|
effector.sendDamageMessage(effected, skill, (int) damage, 0, false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -285,7 +285,7 @@ public class ElementalSpirit
|
|||||||
|
|
||||||
public int getCriticalDamage()
|
public int getCriticalDamage()
|
||||||
{
|
{
|
||||||
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalRatePoints();
|
return _template.getCriticalDamageAtLevel(_data.getLevel()) + getCriticalDamagePoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInUse(boolean value)
|
public void setInUse(boolean value)
|
||||||
|
|||||||
+6
-3
@@ -4561,6 +4561,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
double elementalDamage = 0;
|
double elementalDamage = 0;
|
||||||
|
boolean elementalCrit = false;
|
||||||
|
|
||||||
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
// Calculate PvP/PvE damage received. It is a post-attack stat.
|
||||||
if (attacker != null)
|
if (attacker != null)
|
||||||
@@ -4585,7 +4586,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (!reflect)
|
if (!reflect)
|
||||||
{
|
{
|
||||||
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount);
|
elementalCrit = Formulas.calcSpiritElementalCrit(attacker, this);
|
||||||
|
elementalDamage = Formulas.calcSpiritElementalDamage(attacker, this, amount, elementalCrit);
|
||||||
amount += elementalDamage;
|
amount += elementalDamage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4611,7 +4613,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
|
|
||||||
if (attacker != null)
|
if (attacker != null)
|
||||||
{
|
{
|
||||||
attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false);
|
attacker.sendDamageMessage(this, skill, (int) amount, elementalDamage, critical, false, elementalCrit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4745,8 +4747,9 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
|||||||
* @param elementalDamage
|
* @param elementalDamage
|
||||||
* @param crit
|
* @param crit
|
||||||
* @param miss
|
* @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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -731,7 +731,7 @@ public abstract class Summon extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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())
|
if (miss || (getSummoner() == null) || !getSummoner().isPlayer())
|
||||||
{
|
{
|
||||||
|
|||||||
+8
-1
@@ -11514,7 +11514,7 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
// Check if hit is missed
|
||||||
if (miss)
|
if (miss)
|
||||||
@@ -11559,6 +11559,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()))
|
if (isInOlympiadMode() && target.isPlayer() && target.getActingPlayer().isInOlympiadMode() && (target.getActingPlayer().getOlympiadGameId() == getOlympiadGameId()))
|
||||||
{
|
{
|
||||||
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
OlympiadGameManager.getInstance().notifyCompetitorDamage(this, damage);
|
||||||
|
|||||||
+2
-2
@@ -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)
|
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);
|
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
|
@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))
|
if (miss || (_owner == null))
|
||||||
{
|
{
|
||||||
|
|||||||
+19
-3
@@ -1667,7 +1667,25 @@ public class Formulas
|
|||||||
return 1;
|
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())
|
if (attacker.isPlayer())
|
||||||
{
|
{
|
||||||
@@ -1678,8 +1696,6 @@ public class Formulas
|
|||||||
return 0;
|
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 critDamage = attackerPlayer.getElementalSpiritCritDamage();
|
||||||
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
final double attack = (attackerPlayer.getActiveElementalSpiritAttack() - target.getElementalSpiritDefenseOf(type)) + Rnd.get(-2, 6);
|
||||||
if (target.isPlayer())
|
if (target.isPlayer())
|
||||||
|
|||||||
Reference in New Issue
Block a user