Level and kill count requirements for quests 10294 and 10295.

Contributed by gvr.
This commit is contained in:
MobiusDevelopment
2021-08-26 22:44:32 +00:00
parent afbd0829c6
commit 6cd7773900
2 changed files with 82 additions and 10 deletions

View File

@@ -22,6 +22,10 @@ import java.util.Set;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenersContainer;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
@@ -102,6 +106,8 @@ public class Q10294_SporeInfestedPlace extends Quest
case "30120-03.htm":
{
qs.startQuest();
final ListenersContainer container = player;
container.addListener(new ConsumerEventListener(player, EventType.ON_PLAYER_LEVEL_CHANGED, (OnPlayerLevelChanged levelChange) -> onLevelUp(levelChange, qs), this));
htmltext = event;
break;
}
@@ -159,7 +165,7 @@ public class Q10294_SporeInfestedPlace extends Quest
{
htmltext = "30857.html";
}
else if (qs.isCond(3) && (player.getLevel() < 43))
else if (qs.isCond(3) && (player.getLevel() > 43))
{
htmltext = "30857-04.html";
}
@@ -188,17 +194,15 @@ public class Q10294_SporeInfestedPlace extends Quest
if ((qs != null) && qs.isCond(2))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 200)
if (killCount <= 200)
{
qs.set(KILL_COUNT_VAR, killCount);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
sendNpcLogList(killer);
}
else
else if (allConditionsMet(killer, qs))
{
qs.setCond(3, true);
giveItems(killer, SOE_HIGH_PRIEST_OVEN);
qs.unset(KILL_COUNT_VAR);
prepareToFinishQuest(killer, qs);
}
}
return super.onKill(npc, killer, isSummon);
@@ -217,4 +221,34 @@ public class Q10294_SporeInfestedPlace extends Quest
}
return super.getNpcLogList(player);
}
@Override
public void onQuestAborted(PlayerInstance player)
{
player.removeListenerIf(EventType.ON_PLAYER_LEVEL_CHANGED, listener -> listener.getOwner() == player);
super.onQuestAborted(player);
}
private void onLevelUp(OnPlayerLevelChanged event, QuestState qs)
{
final PlayerInstance player = event.getPlayer();
sendNpcLogList(player);
if (allConditionsMet(player, qs))
{
prepareToFinishQuest(player, qs);
}
}
private boolean allConditionsMet(PlayerInstance player, QuestState qs)
{
return (qs != null) && qs.isCond(2) && (player.getLevel() > 43) && (qs.getInt(KILL_COUNT_VAR) >= 200);
}
private void prepareToFinishQuest(PlayerInstance killer, QuestState qs)
{
qs.setCond(3, true);
giveItems(killer, SOE_HIGH_PRIEST_OVEN);
qs.unset(KILL_COUNT_VAR);
killer.removeListenerIf(EventType.ON_PLAYER_LEVEL_CHANGED, listener -> listener.getOwner() == killer);
}
}

View File

@@ -22,6 +22,10 @@ import java.util.Set;
import org.l2jmobius.gameserver.enums.QuestSound;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.ListenersContainer;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.NpcLogListHolder;
import org.l2jmobius.gameserver.model.quest.Quest;
@@ -101,6 +105,8 @@ public class Q10295_RespectforGraves extends Quest
case "30857-03.htm":
{
qs.startQuest();
final ListenersContainer container = player;
container.addListener(new ConsumerEventListener(player, EventType.ON_PLAYER_LEVEL_CHANGED, (OnPlayerLevelChanged levelChange) -> onLevelUp(levelChange, qs), this));
giveItems(player, SOE_CEMETERY);
htmltext = event;
break;
@@ -156,7 +162,7 @@ public class Q10295_RespectforGraves extends Quest
if ((qs != null) && qs.isCond(1))
{
final int killCount = qs.getInt(KILL_COUNT_VAR) + 1;
if (killCount < 300)
if (killCount <= 300)
{
qs.set(KILL_COUNT_VAR, killCount);
playSound(killer, QuestSound.ITEMSOUND_QUEST_ITEMGET);
@@ -164,9 +170,10 @@ public class Q10295_RespectforGraves extends Quest
}
else
{
qs.setCond(2, true);
giveItems(killer, SOE_HIGH_PRIEST_OVEN);
qs.unset(KILL_COUNT_VAR);
if (allConditionsMet(killer, qs))
{
prepareToFinishQuest(killer, qs);
}
}
}
return super.onKill(npc, killer, isSummon);
@@ -185,4 +192,35 @@ public class Q10295_RespectforGraves extends Quest
}
return super.getNpcLogList(player);
}
@Override
public void onQuestAborted(PlayerInstance player)
{
player.removeListenerIf(EventType.ON_PLAYER_LEVEL_CHANGED, listener -> listener.getOwner() == player);
super.onQuestAborted(player);
}
private void onLevelUp(OnPlayerLevelChanged event, QuestState qs)
{
final PlayerInstance player = event.getPlayer();
sendNpcLogList(player);
if (allConditionsMet(player, qs))
{
prepareToFinishQuest(player, qs);
}
}
private boolean allConditionsMet(PlayerInstance player, QuestState qs)
{
return (qs != null) && qs.isCond(1) && (player.getLevel() > 51) && (qs.getInt(KILL_COUNT_VAR) >= 300);
}
private void prepareToFinishQuest(PlayerInstance killer, QuestState qs)
{
qs.setCond(2, true);
giveItems(killer, SOE_HIGH_PRIEST_OVEN);
qs.unset(KILL_COUNT_VAR);
sendNpcLogList(killer);
killer.removeListenerIf(EventType.ON_PLAYER_LEVEL_CHANGED, listener -> listener.getOwner() == killer);
}
}