From 640ba994392a30e7b3f697daf12f973cf7087f1c Mon Sep 17 00:00:00 2001
From: Adry_85 <adrya85@hotmail.it>
Date: Sun, 30 Nov 2014 12:41:43 +0100
Subject: [PATCH] Some improvements for quest A Powerful Primeval Creature
 (642).

---
 .../Q00642_APowerfulPrimevalCreature.java     | 108 +++++++++---------
 1 file changed, 55 insertions(+), 53 deletions(-)

diff --git a/L2J_DataPack/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java b/L2J_DataPack/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java
index 5873666fae..9cdc74c570 100644
--- a/L2J_DataPack/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java
+++ b/L2J_DataPack/dist/game/data/scripts/quests/Q00642_APowerfulPrimevalCreature/Q00642_APowerfulPrimevalCreature.java
@@ -21,13 +21,11 @@ package quests.Q00642_APowerfulPrimevalCreature;
 import java.util.HashMap;
 import java.util.Map;
 
-import com.l2jserver.Config;
-import com.l2jserver.gameserver.enums.QuestSound;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.util.Util;
 
 /**
  * A Powerful Primeval Creature (642)
@@ -40,24 +38,26 @@ public class Q00642_APowerfulPrimevalCreature extends Quest
 	// Items
 	private static final int DINOSAUR_TISSUE = 8774;
 	private static final int DINOSAUR_EGG = 8775;
+	// Misc
+	private static final int MIN_LEVEL = 75;
+	// Mobs
+	private static final int ANCIENT_EGG = 18344;
 	
-	private static final Map<Integer, Integer> MOBS_TISSUE = new HashMap<>();
+	private static final Map<Integer, Double> MOBS_TISSUE = new HashMap<>();
 	
 	static
 	{
-		MOBS_TISSUE.put(22196, 309); // Velociraptor
-		MOBS_TISSUE.put(22197, 309); // Velociraptor
-		MOBS_TISSUE.put(22198, 309); // Velociraptor
-		MOBS_TISSUE.put(22199, 309); // Pterosaur
-		MOBS_TISSUE.put(22215, 988); // Tyrannosaurus
-		MOBS_TISSUE.put(22216, 988); // Tyrannosaurus
-		MOBS_TISSUE.put(22217, 988); // Tyrannosaurus
-		MOBS_TISSUE.put(22218, 309); // Velociraptor
-		MOBS_TISSUE.put(22223, 309); // Velociraptor
+		MOBS_TISSUE.put(22196, 0.309); // Velociraptor
+		MOBS_TISSUE.put(22197, 0.309); // Velociraptor
+		MOBS_TISSUE.put(22198, 0.309); // Velociraptor
+		MOBS_TISSUE.put(22199, 0.309); // Pterosaur
+		MOBS_TISSUE.put(22215, 0.988); // Tyrannosaurus
+		MOBS_TISSUE.put(22216, 0.988); // Tyrannosaurus
+		MOBS_TISSUE.put(22217, 0.988); // Tyrannosaurus
+		MOBS_TISSUE.put(22218, 0.309); // Velociraptor
+		MOBS_TISSUE.put(22223, 0.309); // Velociraptor
 	}
 	
-	private static final int ANCIENT_EGG = 18344;
-	
 	public Q00642_APowerfulPrimevalCreature()
 	{
 		super(642, Q00642_APowerfulPrimevalCreature.class.getSimpleName(), "A Powerful Primeval Creature");
@@ -71,91 +71,93 @@ public class Q00642_APowerfulPrimevalCreature extends Quest
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		QuestState st = player.getQuestState(getName());
-		if (st == null)
+		final QuestState qs = getQuestState(player, false);
+		if (qs == null)
 		{
-			return getNoQuestMsg(player);
+			return null;
 		}
 		
 		String htmltext = event;
 		switch (event)
 		{
 			case "32105-05.html":
-				st.startQuest();
+			{
+				qs.startQuest();
 				break;
+			}
 			case "32105-06.htm":
-				st.exitQuest(true);
+			{
+				qs.exitQuest(true);
 				break;
+			}
 			case "32105-09.html":
-				if (st.hasQuestItems(DINOSAUR_TISSUE))
+			{
+				if (hasQuestItems(player, DINOSAUR_TISSUE))
+				{
+					giveAdena(player, 5000 * getQuestItemsCount(player, DINOSAUR_TISSUE), true);
+					takeItems(player, DINOSAUR_TISSUE, -1);
+				}
+				else
 				{
-					st.giveAdena(5000 * st.getQuestItemsCount(DINOSAUR_TISSUE), true);
-					st.takeItems(DINOSAUR_TISSUE, -1);
+					htmltext = "32105-14.html";
 				}
 				break;
+			}
 			case "exit":
-				if (st.hasQuestItems(DINOSAUR_TISSUE))
+			{
+				if (hasQuestItems(player, DINOSAUR_TISSUE))
 				{
-					st.giveAdena(5000 * st.getQuestItemsCount(DINOSAUR_TISSUE), true);
-					st.exitQuest(true, true);
+					giveAdena(player, 5000 * getQuestItemsCount(player, DINOSAUR_TISSUE), true);
+					qs.exitQuest(true, true);
 					htmltext = "32105-12.html";
 				}
 				else
 				{
-					st.exitQuest(true, true);
+					qs.exitQuest(true, true);
 					htmltext = "32105-13.html";
 				}
 				break;
+			}
 		}
 		return htmltext;
 	}
 	
 	@Override
-	public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
 	{
-		final L2PcInstance partyMember = getRandomPartyMember(player, 1);
-		if (partyMember == null)
+		final QuestState qs = getRandomPartyMemberState(killer, -1, 3, npc);
+		
+		if ((qs == null) || !Util.checkIfInRange(1500, npc, killer, true))
 		{
-			return super.onKill(npc, player, isSummon);
+			return null;
 		}
 		
-		final QuestState st = partyMember.getQuestState(getName());
 		int npcId = npc.getId();
+		
 		if (MOBS_TISSUE.containsKey(npcId))
 		{
-			float chance = (MOBS_TISSUE.get(npcId) * Config.RATE_QUEST_DROP);
-			if (getRandom(1000) < chance)
-			{
-				st.rewardItems(DINOSAUR_TISSUE, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
-			}
+			giveItemRandomly(qs.getPlayer(), npc, DINOSAUR_TISSUE, 1, 0, MOBS_TISSUE.get(npcId), true);
 		}
-		else if (npcId == ANCIENT_EGG)
+		else
 		{
-			st.rewardItems(DINOSAUR_EGG, 1);
-			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
+			giveItemRandomly(qs.getPlayer(), npc, DINOSAUR_EGG, 1, 0, 1.0, true);
 		}
-		return super.onKill(npc, player, isSummon);
+		return super.onKill(npc, killer, isSummon);
 	}
 	
 	@Override
 	public String onTalk(L2Npc npc, L2PcInstance player)
 	{
+		QuestState qs = getQuestState(player, true);
 		String htmltext = getNoQuestMsg(player);
-		final QuestState st = getQuestState(player, true);
-		if (st == null)
+		
+		if (qs.isCreated())
 		{
-			return htmltext;
+			htmltext = player.getLevel() < MIN_LEVEL ? "32105-01.htm" : "32105-02.htm";
 		}
-		
-		switch (st.getState())
+		else if (qs.isStarted())
 		{
-			case State.CREATED:
-				htmltext = player.getLevel() < 75 ? "32105-01.htm" : "32105-02.htm";
-				break;
-			case State.STARTED:
-				htmltext = (!st.hasQuestItems(DINOSAUR_TISSUE) && !st.hasQuestItems(DINOSAUR_EGG)) ? "32105-07.html" : "32105-08.html";
-				break;
+			htmltext = (hasAtLeastOneQuestItem(player, DINOSAUR_TISSUE, DINOSAUR_EGG)) ? "32105-08.html" : "32105-07.html";
 		}
 		return htmltext;
 	}
-- 
GitLab