Fixed issue with ConsumeBody effect.

This commit is contained in:
MobiusDevelopment
2022-05-09 22:11:21 +00:00
parent d60ed9a3be
commit af7fa05ceb
8 changed files with 54 additions and 14 deletions

View File

@@ -16,11 +16,15 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.conditions.Condition; import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.EffectScope;
import org.l2jmobius.gameserver.model.stats.Formulas;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
/** /**
* Consume Body effect implementation. * Consume Body effect implementation.
@@ -47,6 +51,14 @@ public class ConsumeBody extends AbstractEffect
return; return;
} }
((Npc) info.getEffected()).endDecayTask(); if (info.getSkill().hasEffects(EffectScope.START))
{
DecayTaskManager.getInstance().cancel(info.getEffected());
ThreadPool.schedule(() -> info.getEffected().onDecay(), Formulas.calcAtkSpd(info.getEffector(), info.getSkill(), info.getSkill().getHitTime() + info.getSkill().getCoolTime()));
}
else
{
((Npc) info.getEffected()).endDecayTask();
}
} }
} }

View File

@@ -65,7 +65,7 @@ public class Summon extends AbstractEffect
@Override @Override
public void onStart(BuffInfo info) public void onStart(BuffInfo info)
{ {
if (!info.getEffected().isPlayer() || info.getEffected().hasSummon()) if (!info.getEffector().isPlayer() || info.getEffector().hasSummon())
{ {
return; return;
} }

View File

@@ -430,6 +430,9 @@
<cond> <cond>
<player canSummon="true" /> <player canSummon="true" />
</cond> </cond>
<startEffects>
<effect name="ConsumeBody" />
</startEffects>
<for> <for>
<effect name="Summon"> <effect name="Summon">
<param npcId="#npcIds" /> <param npcId="#npcIds" />
@@ -437,7 +440,6 @@
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="0.85" /> <param expMultiplier="0.85" />
</effect> </effect>
<effect name="ConsumeBody" />
</for> </for>
<enchant1for> <enchant1for>
<effect name="Summon"> <effect name="Summon">
@@ -446,7 +448,6 @@
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="#summonExpMultiplierEnch" /> <param expMultiplier="#summonExpMultiplierEnch" />
</effect> </effect>
<effect name="ConsumeBody" />
</enchant1for> </enchant1for>
</skill> </skill>
<skill id="1139" levels="2" name="Servitor Magic Shield" enchantGroup1="1" enchantGroup2="1"> <skill id="1139" levels="2" name="Servitor Magic Shield" enchantGroup1="1" enchantGroup2="1">
@@ -799,13 +800,15 @@
<cond> <cond>
<player canSummon="true" /> <player canSummon="true" />
</cond> </cond>
<startEffects>
<effect name="ConsumeBody" />
</startEffects>
<for> <for>
<effect name="Summon"> <effect name="Summon">
<param npcId="#npcIds" /> <param npcId="#npcIds" />
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="0.1" /> <param expMultiplier="0.1" />
</effect> </effect>
<effect name="ConsumeBody" />
</for> </for>
<enchant1for> <enchant1for>
<effect name="Summon"> <effect name="Summon">
@@ -813,7 +816,6 @@
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="0.1" /> <param expMultiplier="0.1" />
</effect> </effect>
<effect name="ConsumeBody" />
</enchant1for> </enchant1for>
</skill> </skill>
<skill id="1155" levels="15" name="Corpse Burst" enchantGroup1="2" enchantGroup2="2"> <skill id="1155" levels="15" name="Corpse Burst" enchantGroup1="2" enchantGroup2="2">

View File

@@ -16,11 +16,15 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.conditions.Condition; import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.EffectScope;
import org.l2jmobius.gameserver.model.stats.Formulas;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
/** /**
* Consume Body effect implementation. * Consume Body effect implementation.
@@ -47,6 +51,14 @@ public class ConsumeBody extends AbstractEffect
return; return;
} }
((Npc) info.getEffected()).endDecayTask(); if (info.getSkill().hasEffects(EffectScope.START))
{
DecayTaskManager.getInstance().cancel(info.getEffected());
ThreadPool.schedule(() -> info.getEffected().onDecay(), Formulas.calcAtkSpd(info.getEffector(), info.getSkill(), info.getSkill().getHitTime() + info.getSkill().getCoolTime()));
}
else
{
((Npc) info.getEffected()).endDecayTask();
}
} }
} }

View File

@@ -65,7 +65,7 @@ public class Summon extends AbstractEffect
@Override @Override
public void onStart(BuffInfo info) public void onStart(BuffInfo info)
{ {
if (!info.getEffected().isPlayer() || info.getEffected().hasSummon()) if (!info.getEffector().isPlayer() || info.getEffector().hasSummon())
{ {
return; return;
} }

View File

@@ -430,6 +430,9 @@
<cond> <cond>
<player canSummon="true" /> <player canSummon="true" />
</cond> </cond>
<startEffects>
<effect name="ConsumeBody" />
</startEffects>
<for> <for>
<effect name="Summon"> <effect name="Summon">
<param npcId="#npcIds" /> <param npcId="#npcIds" />
@@ -437,7 +440,6 @@
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="0.85" /> <param expMultiplier="0.85" />
</effect> </effect>
<effect name="ConsumeBody" />
</for> </for>
<enchant1for> <enchant1for>
<effect name="Summon"> <effect name="Summon">
@@ -446,7 +448,6 @@
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="#summonExpMultiplierEnch" /> <param expMultiplier="#summonExpMultiplierEnch" />
</effect> </effect>
<effect name="ConsumeBody" />
</enchant1for> </enchant1for>
</skill> </skill>
<skill id="1139" levels="2" name="Servitor Magic Shield" enchantGroup1="1" enchantGroup2="1"> <skill id="1139" levels="2" name="Servitor Magic Shield" enchantGroup1="1" enchantGroup2="1">
@@ -802,13 +803,15 @@
<cond> <cond>
<player canSummon="true" /> <player canSummon="true" />
</cond> </cond>
<startEffects>
<effect name="ConsumeBody" />
</startEffects>
<for> <for>
<effect name="Summon"> <effect name="Summon">
<param npcId="#npcIds" /> <param npcId="#npcIds" />
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="0.1" /> <param expMultiplier="0.1" />
</effect> </effect>
<effect name="ConsumeBody" />
</for> </for>
<enchant1for> <enchant1for>
<effect name="Summon"> <effect name="Summon">
@@ -816,7 +819,6 @@
<param lifeTime="3600" /> <param lifeTime="3600" />
<param expMultiplier="0.1" /> <param expMultiplier="0.1" />
</effect> </effect>
<effect name="ConsumeBody" />
</enchant1for> </enchant1for>
</skill> </skill>
<skill id="1155" levels="15" name="Corpse Burst" enchantGroup1="2" enchantGroup2="2"> <skill id="1155" levels="15" name="Corpse Burst" enchantGroup1="2" enchantGroup2="2">

View File

@@ -16,11 +16,15 @@
*/ */
package handlers.effecthandlers; package handlers.effecthandlers;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.conditions.Condition; import org.l2jmobius.gameserver.model.conditions.Condition;
import org.l2jmobius.gameserver.model.effects.AbstractEffect; import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.EffectScope;
import org.l2jmobius.gameserver.model.stats.Formulas;
import org.l2jmobius.gameserver.taskmanager.DecayTaskManager;
/** /**
* Consume Body effect implementation. * Consume Body effect implementation.
@@ -47,6 +51,14 @@ public class ConsumeBody extends AbstractEffect
return; return;
} }
((Npc) info.getEffected()).endDecayTask(); if (info.getSkill().hasEffects(EffectScope.START))
{
DecayTaskManager.getInstance().cancel(info.getEffected());
ThreadPool.schedule(() -> info.getEffected().onDecay(), Formulas.calcAtkSpd(info.getEffector(), info.getSkill(), info.getSkill().getHitTime() + info.getSkill().getCoolTime()));
}
else
{
((Npc) info.getEffected()).endDecayTask();
}
} }
} }

View File

@@ -65,7 +65,7 @@ public class Summon extends AbstractEffect
@Override @Override
public void onStart(BuffInfo info) public void onStart(BuffInfo info)
{ {
if (!info.getEffected().isPlayer() || info.getEffected().hasSummon()) if (!info.getEffector().isPlayer() || info.getEffector().hasSummon())
{ {
return; return;
} }