Prevent Stakato heal when silenced.

Contributed by pecanha.
This commit is contained in:
MobiusDevelopment
2020-04-20 20:32:21 +00:00
parent bc3f2e07fa
commit 325a3ae124
27 changed files with 85 additions and 74 deletions

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3307,6 +3307,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3307,6 +3307,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3320,6 +3320,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3320,6 +3320,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3320,6 +3320,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3320,6 +3320,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3320,6 +3320,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -91,20 +91,19 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
final MonsterInstance mob = (MonsterInstance) npc;
if ((mob.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (mob.getCurrentHp() < (mob.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)
{
final double _hp = follower.getCurrentHp();
if (_hp > (follower.getMaxHp() * 0.3))
final double hp = follower.getCurrentHp();
if (hp > (follower.getMaxHp() * 0.3))
{
mob.abortAttack();
mob.abortCast();
mob.setHeading(Util.calculateHeadingFrom(mob, follower));
mob.doCast(DEVOUR_SUBORDINATE.getSkill());
mob.setCurrentHp(mob.getCurrentHp() + _hp);
npc.abortAttack();
npc.abortCast();
npc.setHeading(Util.calculateHeadingFrom(npc, follower));
npc.doCast(DEVOUR_SUBORDINATE.getSkill());
npc.setCurrentHp(npc.getCurrentHp() + hp);
follower.doDie(follower);
follower.deleteMe();
}

View File

@@ -3320,6 +3320,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.skills.AbnormalType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.util.Broadcast;
@@ -89,7 +90,7 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (npc.getEffectList().getBuffInfoByAbnormalType(AbnormalType.SILENCE) == null) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)

View File

@@ -1406,6 +1406,7 @@
<set name="effectPoint" val="100" />
<set name="effectRange" val="1100" />
<set name="hitTime" val="100" />
<set name="isMagic" val="1" /> <!-- Magic Skill -->
<set name="magicLvl" val="75" />
<set name="operateType" val="A1" />
<set name="targetType" val="ONE" />

View File

@@ -24,6 +24,7 @@ import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.MonsterInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.skills.AbnormalType;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.util.Broadcast;
@@ -89,7 +90,7 @@ public class StakatoNest extends AbstractNpcAI
@Override
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
{
if ((npc.getId() == STAKATO_LEADER) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
if ((npc.getId() == STAKATO_LEADER) && (npc.getEffectList().getBuffInfoByAbnormalType(AbnormalType.SILENCE) == null) && (getRandom(1000) < 100) && (npc.getCurrentHp() < (npc.getMaxHp() * 0.3)))
{
final MonsterInstance follower = checkMinion(npc);
if (follower != null)

View File

@@ -1406,6 +1406,7 @@
<set name="effectPoint" val="100" />
<set name="effectRange" val="1100" />
<set name="hitTime" val="100" />
<set name="isMagic" val="1" /> <!-- Magic Skill -->
<set name="magicLvl" val="75" />
<set name="operateType" val="A1" />
<set name="targetType" val="ONE" />

View File

@@ -3295,6 +3295,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -3295,6 +3295,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -3295,6 +3295,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -3295,6 +3295,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -3295,6 +3295,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -3295,6 +3295,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>

View File

@@ -3313,6 +3313,7 @@
<effectPoint>100</effectPoint>
<effectRange>1100</effectRange>
<hitTime>100</hitTime>
<isMagic>1</isMagic> <!-- Magic Skill -->
<magicLvl>75</magicLvl>
<operateType>A1</operateType>
<magicCriticalRate>-5</magicCriticalRate>