瀏覽代碼

Fixing misuse of QuestSate in AIs an events

Reducing object creation by using static methods.
Reducing database usage.
Cleanup.
Fixed Crystal Caverns instance check.
Zoey76 10 年之前
父節點
當前提交
99f1c6f0e9
共有 18 個文件被更改,包括 177 次插入298 次删除
  1. 3 8
      L2J_DataPack/dist/game/data/scripts/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java
  2. 11 11
      L2J_DataPack/dist/game/data/scripts/ai/npc/Teleports/OracleTeleport/OracleTeleport.java
  3. 2 2
      L2J_DataPack/dist/game/data/scripts/ai/npc/TerritoryManagers/TerritoryManagers.java
  4. 4 4
      L2J_DataPack/dist/game/data/scripts/custom/EchoCrystals/EchoCrystals.java
  5. 2 4
      L2J_DataPack/dist/game/data/scripts/custom/NewbieCoupons/NewbieCoupons.java
  6. 1 9
      L2J_DataPack/dist/game/data/scripts/custom/NpcLocationInfo/NpcLocationInfo.java
  7. 5 12
      L2J_DataPack/dist/game/data/scripts/events/CharacterBirthday/CharacterBirthday.java
  8. 3 13
      L2J_DataPack/dist/game/data/scripts/events/FreyaCelebration/FreyaCelebration.java
  9. 9 22
      L2J_DataPack/dist/game/data/scripts/events/GiftOfVitality/GiftOfVitality.java
  10. 12 19
      L2J_DataPack/dist/game/data/scripts/events/HeavyMedal/HeavyMedal.java
  11. 11 30
      L2J_DataPack/dist/game/data/scripts/events/LoveYourGatekeeper/LoveYourGatekeeper.java
  12. 54 60
      L2J_DataPack/dist/game/data/scripts/events/MasterOfEnchanting/MasterOfEnchanting.java
  13. 5 16
      L2J_DataPack/dist/game/data/scripts/events/TheValentineEvent/TheValentineEvent.java
  14. 8 8
      L2J_DataPack/dist/game/data/scripts/gracia/AI/EnergySeeds.java
  15. 20 34
      L2J_DataPack/dist/game/data/scripts/instances/ChambersOfDelusion/Chamber.java
  16. 19 36
      L2J_DataPack/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java
  17. 2 4
      L2J_DataPack/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java
  18. 6 6
      L2J_DataPack/dist/game/data/scripts/instances/MithrilMine/MithrilMine.java

+ 3 - 8
L2J_DataPack/dist/game/data/scripts/ai/npc/Teleports/GrandBossTeleporters/GrandBossTeleporters.java

@@ -69,9 +69,9 @@ public final class GrandBossTeleporters extends AbstractNpcAI
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = "";
-		QuestState st = getQuestState(player, false);
+		final QuestState st = getQuestState(player, false);
 		
-		if (st.hasQuestItems(VACUALITE_FLOATING_STONE))
+		if (hasQuestItems(player, VACUALITE_FLOATING_STONE))
 		{
 			player.teleToLocation(ENTER_HALL_OF_FLAMES);
 			st.set("allowEnter", "1");
@@ -87,12 +87,7 @@ public final class GrandBossTeleporters extends AbstractNpcAI
 	public String onTalk(L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = "";
-		QuestState st = getQuestState(player, true);
-		
-		if (st == null)
-		{
-			return null;
-		}
+		final QuestState st = getQuestState(player, true);
 		
 		switch (npc.getId())
 		{

+ 11 - 11
L2J_DataPack/dist/game/data/scripts/ai/npc/Teleports/OracleTeleport/OracleTeleport.java

@@ -229,27 +229,27 @@ public final class OracleTeleport extends AbstractNpcAI
 			int playerLevel = player.getLevel();
 			if ((playerLevel >= 20) && (playerLevel < 30))
 			{
-				st.takeItems(Inventory.ADENA_ID, 2000);
+				takeItems(player, Inventory.ADENA_ID, 2000);
 			}
 			else if ((playerLevel >= 30) && (playerLevel < 40))
 			{
-				st.takeItems(Inventory.ADENA_ID, 4500);
+				takeItems(player, Inventory.ADENA_ID, 4500);
 			}
 			else if ((playerLevel >= 40) && (playerLevel < 50))
 			{
-				st.takeItems(Inventory.ADENA_ID, 8000);
+				takeItems(player, Inventory.ADENA_ID, 8000);
 			}
 			else if ((playerLevel >= 50) && (playerLevel < 60))
 			{
-				st.takeItems(Inventory.ADENA_ID, 12500);
+				takeItems(player, Inventory.ADENA_ID, 12500);
 			}
 			else if ((playerLevel >= 60) && (playerLevel < 70))
 			{
-				st.takeItems(Inventory.ADENA_ID, 18000);
+				takeItems(player, Inventory.ADENA_ID, 18000);
 			}
 			else if (playerLevel >= 70)
 			{
-				st.takeItems(Inventory.ADENA_ID, 24500);
+				takeItems(player, Inventory.ADENA_ID, 24500);
 			}
 			int i = 0;
 			for (int ziggurat : TELEPORTERS)
@@ -262,7 +262,7 @@ public final class OracleTeleport extends AbstractNpcAI
 			}
 			st.set("id", Integer.toString(i));
 			st.setState(State.STARTED);
-			st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
+			playSound(player, QuestSound.ITEMSOUND_QUEST_ACCEPT);
 			htmltext = "ziggurat_rift.htm";
 			player.teleToLocation(new Location(-114755, -179466, -6752));
 		}
@@ -289,7 +289,7 @@ public final class OracleTeleport extends AbstractNpcAI
 				i++;
 			}
 			st.set("id", Integer.toString(i));
-			st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
+			playSound(player, QuestSound.ITEMSOUND_QUEST_ACCEPT);
 			player.teleToLocation(new Location(-80157, 111344, -4901));
 			player.setIsIn7sDungeon(true);
 		}
@@ -306,7 +306,7 @@ public final class OracleTeleport extends AbstractNpcAI
 				i++;
 			}
 			st.set("id", Integer.toString(i));
-			st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
+			playSound(player, QuestSound.ITEMSOUND_QUEST_ACCEPT);
 			player.teleToLocation(new Location(-81261, 86531, -5157));
 			player.setIsIn7sDungeon(true);
 		}
@@ -322,7 +322,7 @@ public final class OracleTeleport extends AbstractNpcAI
 				htmltext = "1a.htm";
 				st.exitQuest(true);
 			}
-			else if (!st.hasQuestItems(DIMENSIONAL_FRAGMENT))
+			else if (!hasQuestItems(player, DIMENSIONAL_FRAGMENT))
 			{
 				htmltext = "3.htm";
 			}
@@ -345,7 +345,7 @@ public final class OracleTeleport extends AbstractNpcAI
 				player.sendPacket(SystemMessageId.TOO_MANY_QUESTS);
 				st.exitQuest(true);
 			}
-			else if (!st.hasQuestItems(DIMENSIONAL_FRAGMENT))
+			else if (!hasQuestItems(player, DIMENSIONAL_FRAGMENT))
 			{
 				htmltext = "ziggurat_nofrag.htm";
 				st.exitQuest(true);

+ 2 - 2
L2J_DataPack/dist/game/data/scripts/ai/npc/TerritoryManagers/TerritoryManagers.java

@@ -39,7 +39,7 @@ import com.l2jserver.gameserver.network.serverpackets.UserInfo;
 /**
  * Retail AI for Territory Managers.
  * @author Zoey76
- * @version 1.0b
+ * @version 1.1
  */
 public final class TerritoryManagers extends AbstractNpcAI
 {
@@ -289,7 +289,7 @@ public final class TerritoryManagers extends AbstractNpcAI
 			{
 				for (int itemId : itemIds)
 				{
-					qs.takeItems(itemId, -1);
+					takeItems(player, itemId, -1);
 				}
 			}
 			// Completes the quest.

+ 4 - 4
L2J_DataPack/dist/game/data/scripts/custom/EchoCrystals/EchoCrystals.java

@@ -118,18 +118,18 @@ public final class EchoCrystals extends Quest
 				String noadena = SCORES.get(score).getNoAdenaMsg();
 				String noscore = SCORES.get(score).getNoScoreMsg();
 				
-				if (!st.hasQuestItems(score))
+				if (!hasQuestItems(player, score))
 				{
 					htmltext = npc.getId() + "-" + noscore + ".htm";
 				}
-				else if (st.getQuestItemsCount(ADENA) < COST)
+				else if (getQuestItemsCount(player, ADENA) < COST)
 				{
 					htmltext = npc.getId() + "-" + noadena + ".htm";
 				}
 				else
 				{
-					st.takeItems(ADENA, COST);
-					st.giveItems(crystal, 1);
+					takeItems(player, ADENA, COST);
+					giveItems(player, crystal, 1);
 					htmltext = npc.getId() + "-" + ok + ".htm";
 				}
 			}

+ 2 - 4
L2J_DataPack/dist/game/data/scripts/custom/NewbieCoupons/NewbieCoupons.java

@@ -22,7 +22,6 @@ import com.l2jserver.gameserver.data.xml.impl.MultisellData;
 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;
 
 /**
  * Newbie Weapon/Accesories Coupons for the Hellbound opening event.<br>
@@ -79,7 +78,6 @@ public final class NewbieCoupons extends Quest
 			return htmltext;
 		}
 		
-		QuestState st = getQuestState(player, false);
 		int newbie = player.getNewbie();
 		int level = player.getLevel();
 		int occupation_level = player.getClassId().level();
@@ -95,7 +93,7 @@ public final class NewbieCoupons extends Quest
 				if ((newbie | NEWBIE_WEAPON) != newbie)
 				{
 					player.setNewbie(newbie | NEWBIE_WEAPON);
-					st.giveItems(COUPON_ONE, 5);
+					giveItems(player, COUPON_ONE, 5);
 					htmltext = "30598-2.htm"; // here's the coupon you requested
 				}
 				else
@@ -116,7 +114,7 @@ public final class NewbieCoupons extends Quest
 				if ((newbie | NEWBIE_ACCESORY) != newbie)
 				{
 					player.setNewbie(newbie | NEWBIE_ACCESORY);
-					st.giveItems(COUPON_TWO, 1);
+					giveItems(player, COUPON_TWO, 1);
 					htmltext = "30598-5.htm"; // here's the coupon you requested
 				}
 				else

+ 1 - 9
L2J_DataPack/dist/game/data/scripts/custom/NpcLocationInfo/NpcLocationInfo.java

@@ -23,7 +23,6 @@ import com.l2jserver.gameserver.model.L2Spawn;
 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.util.Util;
 
 /**
@@ -273,12 +272,6 @@ public final class NpcLocationInfo extends Quest
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = event;
-		QuestState st = getQuestState(player, false);
-		
-		if (st == null)
-		{
-			return htmltext;
-		}
 		
 		if (Util.isDigit(event))
 		{
@@ -295,10 +288,9 @@ public final class NpcLocationInfo extends Quest
 					y = spawn.getY();
 					z = spawn.getZ();
 				}
-				st.addRadar(x, y, z);
+				addRadar(player, x, y, z);
 				htmltext = "MoveToLoc.htm";
 			}
-			st.exitQuest(true);
 		}
 		return htmltext;
 	}

+ 5 - 12
L2J_DataPack/dist/game/data/scripts/events/CharacterBirthday/CharacterBirthday.java

@@ -21,8 +21,6 @@ package events.CharacterBirthday;
 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;
 
 /**
@@ -71,8 +69,6 @@ public final class CharacterBirthday extends Quest
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = event;
-		QuestState st = getQuestState(player, false);
-		
 		if (event.equalsIgnoreCase("despawn_npc"))
 		{
 			npc.doDie(player);
@@ -83,10 +79,10 @@ public final class CharacterBirthday extends Quest
 		else if (event.equalsIgnoreCase("change"))
 		{
 			// Change Hat
-			if (st.hasQuestItems(10250))
+			if (hasQuestItems(player, 10250))
 			{
-				st.takeItems(10250, 1); // Adventurer Hat (Event)
-				st.giveItems(21594, 1); // Birthday Hat
+				takeItems(player, 10250, 1); // Adventurer Hat (Event)
+				giveItems(player, 21594, 1); // Birthday Hat
 				htmltext = null; // FIXME: Probably has html
 				// Despawn npc
 				npc.doDie(player);
@@ -108,13 +104,10 @@ public final class CharacterBirthday extends Quest
 			return "busy.htm";
 		}
 		
-		QuestState st = getQuestState(player, true);
-		
 		if (!Util.checkIfInRange(10, npc, player, true))
 		{
-			L2Npc spawned = st.addSpawn(32600, player.getX() + 10, player.getY() + 10, player.getZ() + 10, 0, false, 0, true);
-			st.setState(State.STARTED);
-			st.startQuestTimer("despawn_npc", 180000, spawned);
+			L2Npc spawned = addSpawn(32600, player.getX() + 10, player.getY() + 10, player.getZ() + 10, 0, false, 0, true);
+			startQuestTimer("despawn_npc", 180000, spawned, player);
 			SPAWNS++;
 		}
 		else

+ 3 - 13
L2J_DataPack/dist/game/data/scripts/events/FreyaCelebration/FreyaCelebration.java

@@ -23,8 +23,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.event.LongTimeEvent;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
-import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -79,15 +77,9 @@ public final class FreyaCelebration extends LongTimeEvent
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		QuestState st = getQuestState(player, false);
-		if (st == null)
-		{
-			return null;
-		}
-		
 		if (event.equalsIgnoreCase("give_potion"))
 		{
-			if (st.getQuestItemsCount(Inventory.ADENA_ID) > 1)
+			if (getQuestItemsCount(player, Inventory.ADENA_ID) > 1)
 			{
 				long _curr_time = System.currentTimeMillis();
 				String value = loadGlobalQuestVar(player.getAccountName());
@@ -95,9 +87,8 @@ public final class FreyaCelebration extends LongTimeEvent
 				
 				if (_curr_time > _reuse_time)
 				{
-					st.setState(State.STARTED);
-					st.takeItems(Inventory.ADENA_ID, 1);
-					st.giveItems(FREYA_POTION, 1);
+					takeItems(player, Inventory.ADENA_ID, 1);
+					giveItems(player, FREYA_POTION, 1);
 					saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (HOURS * 3600000)));
 				}
 				else
@@ -156,7 +147,6 @@ public final class FreyaCelebration extends LongTimeEvent
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		getQuestState(player, true);
 		return "13296.htm";
 	}
 	

+ 9 - 22
L2J_DataPack/dist/game/data/scripts/events/GiftOfVitality/GiftOfVitality.java

@@ -22,8 +22,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.event.LongTimeEvent;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
-import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
@@ -76,6 +74,11 @@ public final class GiftOfVitality extends LongTimeEvent
 		new SkillHolder(5636, 1), // Empower
 	};
 	
+	// Misc
+	private static final int HOURS = 5; // Reuse between buffs
+	private static final int MIN_LEVEL = 75;
+	private static final String REUSE = GiftOfVitality.class.getSimpleName() + "_reuse";
+	
 	private GiftOfVitality()
 	{
 		super(GiftOfVitality.class.getSimpleName(), "events");
@@ -84,29 +87,18 @@ public final class GiftOfVitality extends LongTimeEvent
 		addTalkId(STEVE_SHYAGEL);
 	}
 	
-	// Misc
-	private static final int HOURS = 5; // Reuse between buffs
-	private static final int MIN_LEVEL = 75;
-	
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = event;
-		QuestState st = getQuestState(player, false);
-		
 		switch (event)
 		{
 			case "vitality":
 			{
-				long _reuse = 0;
-				String _streuse = st.get("reuse");
-				if (_streuse != null)
-				{
-					_reuse = Long.parseLong(_streuse);
-				}
-				if (_reuse > System.currentTimeMillis())
+				final long reuse = player.getVariables().getLong(REUSE, 0);
+				if (reuse > System.currentTimeMillis())
 				{
-					long remainingTime = (_reuse - System.currentTimeMillis()) / 1000;
+					long remainingTime = (reuse - System.currentTimeMillis()) / 1000;
 					int hours = (int) (remainingTime / 3600);
 					int minutes = (int) ((remainingTime % 3600) / 60);
 					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
@@ -120,8 +112,7 @@ public final class GiftOfVitality extends LongTimeEvent
 				{
 					player.doCast(GIFT_OF_VITALITY.getSkill());
 					player.doSimultaneousCast(JOY_OF_VITALITY.getSkill());
-					st.setState(State.STARTED);
-					st.set("reuse", String.valueOf(System.currentTimeMillis() + (HOURS * 3600000)));
+					player.getVariables().set(REUSE, System.currentTimeMillis() + (HOURS * 3600000));
 					htmltext = "4306-okvitality.htm";
 				}
 				break;
@@ -172,10 +163,6 @@ public final class GiftOfVitality extends LongTimeEvent
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		if (player.getQuestState(getName()) == null)
-		{
-			newQuestState(player);
-		}
 		return "4306.htm";
 	}
 	

+ 12 - 19
L2J_DataPack/dist/game/data/scripts/events/HeavyMedal/HeavyMedal.java

@@ -22,7 +22,6 @@ 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.event.LongTimeEvent;
-import com.l2jserver.gameserver.model.quest.QuestState;
 
 /**
  * Heavy Medals event AI.
@@ -65,28 +64,22 @@ public final class HeavyMedal extends LongTimeEvent
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		final QuestState st = getQuestState(player, false);
-		if (st == null)
-		{
-			return getNoQuestMsg(player);
-		}
-		
 		String htmltext = event;
-		int level = checkLevel(st);
+		int level = checkLevel(player);
 		
 		if (event.equalsIgnoreCase("game"))
 		{
-			htmltext = st.getQuestItemsCount(GLITTERING_MEDAL) < MEDALS[level] ? "31229-no.htm" : "31229-game.htm";
+			htmltext = getQuestItemsCount(player, GLITTERING_MEDAL) < MEDALS[level] ? "31229-no.htm" : "31229-game.htm";
 		}
 		else if (event.equalsIgnoreCase("heads") || event.equalsIgnoreCase("tails"))
 		{
-			if (st.getQuestItemsCount(GLITTERING_MEDAL) < MEDALS[level])
+			if (getQuestItemsCount(player, GLITTERING_MEDAL) < MEDALS[level])
 			{
 				htmltext = "31229-" + event.toLowerCase() + "-10.htm";
 			}
 			else
 			{
-				st.takeItems(GLITTERING_MEDAL, MEDALS[level]);
+				takeItems(player, GLITTERING_MEDAL, MEDALS[level]);
 				
 				if (getRandom(100) > WIN_CHANCE)
 				{
@@ -96,10 +89,10 @@ public final class HeavyMedal extends LongTimeEvent
 				{
 					if (level > 0)
 					{
-						st.takeItems(BADGES[level - 1], -1);
+						takeItems(player, BADGES[level - 1], -1);
 					}
-					st.giveItems(BADGES[level], 1);
-					st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
+					giveItems(player, BADGES[level], 1);
+					playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
 					level++;
 				}
 				htmltext = "31229-" + event.toLowerCase() + "-" + String.valueOf(level) + ".htm";
@@ -122,22 +115,22 @@ public final class HeavyMedal extends LongTimeEvent
 		return npc.getId() + ".htm";
 	}
 	
-	public int checkLevel(QuestState st)
+	public int checkLevel(L2PcInstance player)
 	{
 		int _lev = 0;
-		if (st.hasQuestItems(6402))
+		if (hasQuestItems(player, 6402))
 		{
 			_lev = 4;
 		}
-		else if (st.hasQuestItems(6401))
+		else if (hasQuestItems(player, 6401))
 		{
 			_lev = 3;
 		}
-		else if (st.hasQuestItems(6400))
+		else if (hasQuestItems(player, 6400))
 		{
 			_lev = 2;
 		}
-		else if (st.hasQuestItems(6399))
+		else if (hasQuestItems(player, 6399))
 		{
 			_lev = 1;
 		}

+ 11 - 30
L2J_DataPack/dist/game/data/scripts/events/LoveYourGatekeeper/LoveYourGatekeeper.java

@@ -23,8 +23,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.event.LongTimeEvent;
 import com.l2jserver.gameserver.model.holders.SkillHolder;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
-import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
@@ -38,11 +36,12 @@ public final class LoveYourGatekeeper extends LongTimeEvent
 	private static final int GATEKEEPER = 32477;
 	// Item
 	private static final int GATEKEEPER_TRANSFORMATION_STICK = 12814;
+	// Skills
+	private static SkillHolder TELEPORTER_TRANSFORM = new SkillHolder(5655, 1);
 	// Misc
 	private static final int HOURS = 24;
 	private static final int PRICE = 10000;
-	// Skills
-	private static SkillHolder TELEPORTER_TRANSFORM = new SkillHolder(5655, 1);
+	private static final String REUSE = LoveYourGatekeeper.class.getSimpleName() + "_reuse";
 	
 	private LoveYourGatekeeper()
 	{
@@ -55,27 +54,16 @@ public final class LoveYourGatekeeper extends LongTimeEvent
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		final QuestState st = getQuestState(player, false);
-		if (st == null)
-		{
-			return getNoQuestMsg(player);
-		}
-		
 		switch (event)
 		{
 			case "transform_stick":
 			{
 				if (player.getAdena() >= PRICE)
 				{
-					long _reuse = 0;
-					String _streuse = st.get("reuse");
-					if (_streuse != null)
-					{
-						_reuse = Long.parseLong(_streuse);
-					}
-					if (_reuse > System.currentTimeMillis())
+					final long reuse = player.getVariables().getLong(REUSE, 0);
+					if (reuse > System.currentTimeMillis())
 					{
-						final long remainingTime = (_reuse - System.currentTimeMillis()) / 1000;
+						final long remainingTime = (reuse - System.currentTimeMillis()) / 1000;
 						final int hours = (int) (remainingTime / 3600);
 						final int minutes = (int) ((remainingTime % 3600) / 60);
 						final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES);
@@ -86,12 +74,10 @@ public final class LoveYourGatekeeper extends LongTimeEvent
 					}
 					else
 					{
-						st.takeItems(Inventory.ADENA_ID, PRICE);
-						st.giveItems(GATEKEEPER_TRANSFORMATION_STICK, 1);
-						st.setState(State.STARTED);
-						st.set("reuse", String.valueOf(System.currentTimeMillis() + (HOURS * 3600000)));
+						takeItems(player, Inventory.ADENA_ID, PRICE);
+						giveItems(player, GATEKEEPER_TRANSFORMATION_STICK, 1);
+						player.getVariables().set(REUSE, System.currentTimeMillis() + (HOURS * 3600000));
 					}
-					
 				}
 				else
 				{
@@ -101,11 +87,10 @@ public final class LoveYourGatekeeper extends LongTimeEvent
 			}
 			case "transform":
 			{
-				if (player.isTransformed())
+				if (!player.isTransformed())
 				{
-					return null;
+					player.doCast(TELEPORTER_TRANSFORM.getSkill());
 				}
-				player.doCast(TELEPORTER_TRANSFORM.getSkill());
 				return null;
 			}
 		}
@@ -115,10 +100,6 @@ public final class LoveYourGatekeeper extends LongTimeEvent
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		if (player.getQuestState(getName()) == null)
-		{
-			newQuestState(player);
-		}
 		return "32477.htm";
 	}
 	

+ 54 - 60
L2J_DataPack/dist/game/data/scripts/events/MasterOfEnchanting/MasterOfEnchanting.java

@@ -24,7 +24,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.event.LongTimeEvent;
 import com.l2jserver.gameserver.model.itemcontainer.Inventory;
-import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
@@ -66,7 +65,7 @@ public final class MasterOfEnchanting extends LongTimeEvent
 	};
 	
 	@SuppressWarnings("deprecation")
-	private static final Date _eventStart = new Date(2011, 7, 1);
+	private static final Date EVENT_START = new Date(2011, 7, 1);
 	
 	private MasterOfEnchanting()
 	{
@@ -80,13 +79,12 @@ public final class MasterOfEnchanting extends LongTimeEvent
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
 		String htmltext = event;
-		QuestState st = getQuestState(player, false);
 		if (event.equalsIgnoreCase("buy_staff"))
 		{
-			if (!st.hasQuestItems(MASTER_YOGI_STAFF) && (st.getQuestItemsCount(Inventory.ADENA_ID) > STAFF_PRICE))
+			if (!hasQuestItems(player, MASTER_YOGI_STAFF) && (getQuestItemsCount(player, Inventory.ADENA_ID) > STAFF_PRICE))
 			{
-				st.takeItems(Inventory.ADENA_ID, STAFF_PRICE);
-				st.giveItems(MASTER_YOGI_STAFF, 1);
+				takeItems(player, Inventory.ADENA_ID, STAFF_PRICE);
+				giveItems(player, MASTER_YOGI_STAFF, 1);
 				htmltext = "32599-staffbuyed.htm";
 			}
 			else
@@ -96,20 +94,20 @@ public final class MasterOfEnchanting extends LongTimeEvent
 		}
 		else if (event.equalsIgnoreCase("buy_scroll_24"))
 		{
-			long _curr_time = System.currentTimeMillis();
+			long curTime = System.currentTimeMillis();
 			String value = loadGlobalQuestVar(player.getAccountName());
-			long _reuse_time = value == "" ? 0 : Long.parseLong(value);
-			if (player.getCreateDate().after(_eventStart))
+			long reuse = value == "" ? 0 : Long.parseLong(value);
+			if (player.getCreateDate().after(EVENT_START))
 			{
 				return "32599-bidth.htm";
 			}
 			
-			if (_curr_time > _reuse_time)
+			if (curTime > reuse)
 			{
-				if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_24_PRICE)
+				if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
 				{
-					st.takeItems(Inventory.ADENA_ID, SCROLL_24_PRICE);
-					st.giveItems(MASTER_YOGI_SCROLL, 24);
+					takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
+					giveItems(player, MASTER_YOGI_SCROLL, 24);
 					saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
 					htmltext = "32599-scroll24.htm";
 				}
@@ -120,9 +118,9 @@ public final class MasterOfEnchanting extends LongTimeEvent
 			}
 			else
 			{
-				long _remaining_time = (_reuse_time - _curr_time) / 1000;
-				int hours = (int) _remaining_time / 3600;
-				int minutes = ((int) _remaining_time % 3600) / 60;
+				long remainingTime = (reuse - curTime) / 1000;
+				int hours = (int) remainingTime / 3600;
+				int minutes = ((int) remainingTime % 3600) / 60;
 				if (hours > 0)
 				{
 					SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ITEM_PURCHASABLE_IN_S1_HOURS_S2_MINUTES);
@@ -142,10 +140,10 @@ public final class MasterOfEnchanting extends LongTimeEvent
 				{
 					// Little glitch. There is no SystemMessage with seconds only.
 					// If time is less than 1 minute player can buy scrolls
-					if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_24_PRICE)
+					if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_24_PRICE)
 					{
-						st.takeItems(Inventory.ADENA_ID, SCROLL_24_PRICE);
-						st.giveItems(MASTER_YOGI_SCROLL, 24);
+						takeItems(player, Inventory.ADENA_ID, SCROLL_24_PRICE);
+						giveItems(player, MASTER_YOGI_SCROLL, 24);
 						saveGlobalQuestVar(player.getAccountName(), Long.toString(System.currentTimeMillis() + (SCROLL_24_TIME * 3600000)));
 						htmltext = "32599-scroll24.htm";
 					}
@@ -158,10 +156,10 @@ public final class MasterOfEnchanting extends LongTimeEvent
 		}
 		else if (event.equalsIgnoreCase("buy_scroll_1"))
 		{
-			if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_1_PRICE)
+			if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_1_PRICE)
 			{
-				st.takeItems(Inventory.ADENA_ID, SCROLL_1_PRICE);
-				st.giveItems(MASTER_YOGI_SCROLL, 1);
+				takeItems(player, Inventory.ADENA_ID, SCROLL_1_PRICE);
+				giveItems(player, MASTER_YOGI_SCROLL, 1);
 				htmltext = "32599-scroll-ok.htm";
 			}
 			else
@@ -171,10 +169,10 @@ public final class MasterOfEnchanting extends LongTimeEvent
 		}
 		else if (event.equalsIgnoreCase("buy_scroll_10"))
 		{
-			if (st.getQuestItemsCount(Inventory.ADENA_ID) > SCROLL_10_PRICE)
+			if (getQuestItemsCount(player, Inventory.ADENA_ID) > SCROLL_10_PRICE)
 			{
-				st.takeItems(Inventory.ADENA_ID, SCROLL_10_PRICE);
-				st.giveItems(MASTER_YOGI_SCROLL, 10);
+				takeItems(player, Inventory.ADENA_ID, SCROLL_10_PRICE);
+				giveItems(player, MASTER_YOGI_SCROLL, 10);
 				htmltext = "32599-scroll-ok.htm";
 			}
 			else
@@ -184,83 +182,83 @@ public final class MasterOfEnchanting extends LongTimeEvent
 		}
 		else if (event.equalsIgnoreCase("receive_reward"))
 		{
-			if ((st.getItemEquipped(Inventory.PAPERDOLL_RHAND) == MASTER_YOGI_STAFF) && (st.getEnchantLevel(MASTER_YOGI_STAFF) > 3))
+			if ((getItemEquipped(player, Inventory.PAPERDOLL_RHAND) == MASTER_YOGI_STAFF) && (getEnchantLevel(player, MASTER_YOGI_STAFF) > 3))
 			{
-				switch (st.getEnchantLevel(MASTER_YOGI_STAFF))
+				switch (getEnchantLevel(player, MASTER_YOGI_STAFF))
 				{
 					case 4:
-						st.giveItems(6406, 1); // Firework
+						giveItems(player, 6406, 1); // Firework
 						break;
 					case 5:
-						st.giveItems(6406, 2); // Firework
-						st.giveItems(6407, 1); // Large Firework
+						giveItems(player, 6406, 2); // Firework
+						giveItems(player, 6407, 1); // Large Firework
 						break;
 					case 6:
-						st.giveItems(6406, 3); // Firework
-						st.giveItems(6407, 2); // Large Firework
+						giveItems(player, 6406, 3); // Firework
+						giveItems(player, 6407, 2); // Large Firework
 						break;
 					case 7:
-						st.giveItems(HAT_SHADOW_REWARD[getRandom(3)], 1);
+						giveItems(player, HAT_SHADOW_REWARD[getRandom(3)], 1);
 						break;
 					case 8:
-						st.giveItems(955, 1); // Scroll: Enchant Weapon (D)
+						giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
 						break;
 					case 9:
-						st.giveItems(955, 1); // Scroll: Enchant Weapon (D)
-						st.giveItems(956, 1); // Scroll: Enchant Armor (D)
+						giveItems(player, 955, 1); // Scroll: Enchant Weapon (D)
+						giveItems(player, 956, 1); // Scroll: Enchant Armor (D)
 						break;
 					case 10:
-						st.giveItems(951, 1); // Scroll: Enchant Weapon (C)
+						giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
 						break;
 					case 11:
-						st.giveItems(951, 1); // Scroll: Enchant Weapon (C)
-						st.giveItems(952, 1); // Scroll: Enchant Armor (C)
+						giveItems(player, 951, 1); // Scroll: Enchant Weapon (C)
+						giveItems(player, 952, 1); // Scroll: Enchant Armor (C)
 						break;
 					case 12:
-						st.giveItems(948, 1); // Scroll: Enchant Armor (B)
+						giveItems(player, 948, 1); // Scroll: Enchant Armor (B)
 						break;
 					case 13:
-						st.giveItems(729, 1); // Scroll: Enchant Weapon (A)
+						giveItems(player, 729, 1); // Scroll: Enchant Weapon (A)
 						break;
 					case 14:
-						st.giveItems(HAT_EVENT_REWARD[getRandom(3)], 1);
+						giveItems(player, HAT_EVENT_REWARD[getRandom(3)], 1);
 						break;
 					case 15:
-						st.giveItems(13992, 1); // Grade S Accessory Chest (Event)
+						giveItems(player, 13992, 1); // Grade S Accessory Chest (Event)
 						break;
 					case 16:
-						st.giveItems(8762, 1); // Top-Grade Life Stone: level 76
+						giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
 						break;
 					case 17:
-						st.giveItems(959, 1); // Scroll: Enchant Weapon (S)
+						giveItems(player, 959, 1); // Scroll: Enchant Weapon (S)
 						break;
 					case 18:
-						st.giveItems(13991, 1); // Grade S Armor Chest (Event)
+						giveItems(player, 13991, 1); // Grade S Armor Chest (Event)
 						break;
 					case 19:
-						st.giveItems(13990, 1); // Grade S Weapon Chest (Event)
+						giveItems(player, 13990, 1); // Grade S Weapon Chest (Event)
 						break;
 					case 20:
-						st.giveItems(CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
+						giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
 						break;
 					case 21:
-						st.giveItems(8762, 1); // Top-Grade Life Stone: level 76
-						st.giveItems(8752, 1); // High-Grade Life Stone: level 76
-						st.giveItems(CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
+						giveItems(player, 8762, 1); // Top-Grade Life Stone: level 76
+						giveItems(player, 8752, 1); // High-Grade Life Stone: level 76
+						giveItems(player, CRYSTAL_REWARD[getRandom(3)], 1); // Red/Blue/Green Soul Crystal - Stage 14
 						break;
 					case 22:
-						st.giveItems(13989, 1); // S80 Grade Armor Chest (Event)
+						giveItems(player, 13989, 1); // S80 Grade Armor Chest (Event)
 						break;
 					case 23:
-						st.giveItems(13988, 1); // S80 Grade Weapon Chest (Event)
+						giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
 					default:
-						if (st.getEnchantLevel(MASTER_YOGI_STAFF) > 23)
+						if (getEnchantLevel(player, MASTER_YOGI_STAFF) > 23)
 						{
-							st.giveItems(13988, 1); // S80 Grade Weapon Chest (Event)
+							giveItems(player, 13988, 1); // S80 Grade Weapon Chest (Event)
 						}
 						break;
 				}
-				st.takeItems(MASTER_YOGI_STAFF, 1);
+				takeItems(player, MASTER_YOGI_STAFF, 1);
 				htmltext = "32599-rewardok.htm";
 			}
 			else
@@ -274,10 +272,6 @@ public final class MasterOfEnchanting extends LongTimeEvent
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		if (player.getQuestState(getName()) == null)
-		{
-			newQuestState(player);
-		}
 		return npc.getId() + ".htm";
 	}
 	

+ 5 - 16
L2J_DataPack/dist/game/data/scripts/events/TheValentineEvent/TheValentineEvent.java

@@ -22,8 +22,6 @@ 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.event.LongTimeEvent;
-import com.l2jserver.gameserver.model.quest.QuestState;
-import com.l2jserver.gameserver.model.quest.State;
 
 /**
  * The Valentine Event event AI.
@@ -35,6 +33,8 @@ public final class TheValentineEvent extends LongTimeEvent
 	private static final int NPC = 4301;
 	// Item
 	private static final int RECIPE = 20191;
+	// Misc
+	private static final String COMPLETED = TheValentineEvent.class.getSimpleName() + "_completed";
 	
 	private TheValentineEvent()
 	{
@@ -47,24 +47,17 @@ public final class TheValentineEvent extends LongTimeEvent
 	@Override
 	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
 	{
-		final QuestState st = getQuestState(player, false);
-		if (st == null)
-		{
-			return getNoQuestMsg(player);
-		}
-		
 		String htmltext = event;
 		if (event.equalsIgnoreCase("4301-3.htm"))
 		{
-			if (st.isCompleted())
+			if (player.getVariables().getBoolean(COMPLETED, false))
 			{
 				htmltext = "4301-4.htm";
 			}
 			else
 			{
-				st.giveItems(RECIPE, 1);
-				st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
-				st.setState(State.COMPLETED);
+				giveItems(player, RECIPE, 1);
+				playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
 			}
 		}
 		return htmltext;
@@ -73,10 +66,6 @@ public final class TheValentineEvent extends LongTimeEvent
 	@Override
 	public String onFirstTalk(L2Npc npc, L2PcInstance player)
 	{
-		if (player.getQuestState(getName()) == null)
-		{
-			newQuestState(player);
-		}
 		return npc.getId() + ".htm";
 	}
 	

+ 8 - 8
L2J_DataPack/dist/game/data/scripts/gracia/AI/EnergySeeds.java

@@ -322,19 +322,19 @@ public class EnergySeeds extends AbstractNpcAI
 			case INFINITY:
 				if ((st != null) && st.isCond(3))
 				{
-					handleQuestDrop(st, 13798);
+					handleQuestDrop(player, 13798);
 				}
 				break;
 			case DESTRUCTION:
 				if ((st != null) && st.isCond(3))
 				{
-					handleQuestDrop(st, 13867);
+					handleQuestDrop(player, 13867);
 				}
 				break;
 			case ANNIHILATION_BISTAKON:
 				if ((st != null) && st.isCond(3))
 				{
-					handleQuestDrop(st, 15535);
+					handleQuestDrop(player, 15535);
 				}
 				if (getRandom(100) < 50)
 				{
@@ -347,7 +347,7 @@ public class EnergySeeds extends AbstractNpcAI
 			case ANNIHILATION_REPTILIKON:
 				if ((st != null) && st.isCond(3))
 				{
-					handleQuestDrop(st, 15535);
+					handleQuestDrop(player, 15535);
 				}
 				if (getRandom(100) < 50)
 				{
@@ -360,7 +360,7 @@ public class EnergySeeds extends AbstractNpcAI
 			case ANNIHILATION_COKRAKON:
 				if ((st != null) && st.isCond(3))
 				{
-					handleQuestDrop(st, 15535);
+					handleQuestDrop(player, 15535);
 				}
 				if (getRandom(100) < 50)
 				{
@@ -386,7 +386,7 @@ public class EnergySeeds extends AbstractNpcAI
 		return monster;
 	}
 	
-	private void handleQuestDrop(QuestState st, int itemId)
+	private void handleQuestDrop(L2PcInstance player, int itemId)
 	{
 		double chance = HOWTOOPPOSEEVIL_CHANCE * Config.RATE_QUEST_DROP;
 		int numItems = (int) (chance / 100);
@@ -397,8 +397,8 @@ public class EnergySeeds extends AbstractNpcAI
 		}
 		if (numItems > 0)
 		{
-			st.giveItems(itemId, numItems);
-			st.playSound(QuestSound.ITEMSOUND_QUEST_ITEMGET);
+			giveItems(player, itemId, numItems);
+			playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
 		}
 	}
 	

+ 20 - 34
L2J_DataPack/dist/game/data/scripts/instances/ChambersOfDelusion/Chamber.java

@@ -170,6 +170,8 @@ public abstract class Chamber extends Quest
 	private final String INSTANCE_TEMPLATE;
 	
 	protected Location[] ROOM_ENTER_POINTS;
+	// Misc
+	private static final String RETURN = Chamber.class.getSimpleName() + "_return";
 	
 	protected Chamber(int questId, String name, String descr, int instanceId, String instanceTemplateName, int entranceGKId, int roomGKFirstId, int roomGKLastId, int aenkinelId, int boxId)
 	{
@@ -362,20 +364,18 @@ public abstract class Chamber extends Quest
 		
 		for (L2PcInstance partyMember : party.getMembers())
 		{
-			final QuestState st = getQuestState(partyMember, true);
-			
-			if (st.hasQuestItems(DELUSION_MARK))
+			if (hasQuestItems(partyMember, DELUSION_MARK))
 			{
-				st.takeItems(DELUSION_MARK, -1);
+				takeItems(partyMember, DELUSION_MARK, -1);
 			}
 			
 			if (party.isLeader(partyMember))
 			{
-				st.giveItems(DELUSION_MARK, 1);
+				giveItems(partyMember, DELUSION_MARK, 1);
 			}
 			
 			// Save location for teleport back into main hall
-			st.set("return_point", Integer.toString(partyMember.getX()) + ";" + Integer.toString(partyMember.getY()) + ";" + Integer.toString(partyMember.getZ()));
+			partyMember.getVariables().set(RETURN, Integer.toString(partyMember.getX()) + ";" + Integer.toString(partyMember.getY()) + ";" + Integer.toString(partyMember.getZ()));
 			
 			partyMember.setInstanceId(world.getInstanceId());
 			world.addAllowed(partyMember.getObjectId());
@@ -445,26 +445,21 @@ public abstract class Chamber extends Quest
 		}
 		final Instance inst = InstanceManager.getInstance().getInstance(player.getInstanceId());
 		Location ret = inst.getSpawnLoc();
-		final QuestState st = getQuestState(player, false);
-		
-		if (st != null)
+		final String return_point = player.getVariables().getString(RETURN, null);
+		if (return_point != null)
 		{
-			String return_point = st.get("return_point");
-			if (return_point != null)
+			String[] coords = return_point.split(";");
+			if (coords.length == 3)
 			{
-				String[] coords = return_point.split(";");
-				if (coords.length == 3)
+				try
+				{
+					int x = Integer.parseInt(coords[0]);
+					int y = Integer.parseInt(coords[1]);
+					int z = Integer.parseInt(coords[2]);
+					ret.setLocation(new Location(x, y, z));
+				}
+				catch (Exception e)
 				{
-					try
-					{
-						int x = Integer.parseInt(coords[0]);
-						int y = Integer.parseInt(coords[1]);
-						int z = Integer.parseInt(coords[2]);
-						ret.setLocation(new Location(x, y, z));
-					}
-					catch (Exception e)
-					{
-					}
 				}
 			}
 		}
@@ -487,15 +482,8 @@ public abstract class Chamber extends Quest
 		{
 			final CDWorld world = (CDWorld) tmpworld;
 			
-			QuestState st = getQuestState(player, false);
-			
-			if (st == null)
-			{
-				st = newQuestState(player);
-			}
-			
 			// Change room from dialog
-			else if (event.equals("next_room"))
+			if (event.equals("next_room"))
 			{
 				if (player.getParty() == null)
 				{
@@ -509,7 +497,7 @@ public abstract class Chamber extends Quest
 				
 				else if (hasQuestItems(player, DELUSION_MARK))
 				{
-					st.takeItems(DELUSION_MARK, 1);
+					takeItems(player, DELUSION_MARK, 1);
 					world.stopRoomChangeTask();
 					changeRoom(world);
 				}
@@ -519,7 +507,6 @@ public abstract class Chamber extends Quest
 					htmltext = getHtm(player.getHtmlPrefix(), "data/scripts/instances/ChambersOfDelusion/no_item.html");
 				}
 			}
-			
 			else if (event.equals("go_out"))
 			{
 				if (player.getParty() == null)
@@ -545,7 +532,6 @@ public abstract class Chamber extends Quest
 					inst.setEmptyDestroyTime(0);
 				}
 			}
-			
 			else if (event.equals("look_party"))
 			{
 				if ((player.getParty() != null) && (player.getParty() == world.getPartyInside()))

+ 19 - 36
L2J_DataPack/dist/game/data/scripts/instances/CrystalCaverns/CrystalCaverns.java

@@ -23,6 +23,7 @@ import java.util.Map;
 
 import javolution.util.FastList;
 import javolution.util.FastMap;
+import quests.Q00131_BirdInACage.Q00131_BirdInACage;
 
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.GeoData;
@@ -1863,8 +1864,7 @@ public final class CrystalCaverns extends Quest
 				CCWorld world = (CCWorld) tmpworld;
 				if ((world.getStatus() == 0) && world.oracle.contains(npc))
 				{
-					String htmltext = "32281.htm";
-					return htmltext;
+					return "32281.htm";// TODO: Missing HTML.
 				}
 			}
 			npc.showChatWindow(player);
@@ -1878,8 +1878,7 @@ public final class CrystalCaverns extends Quest
 				CCWorld world = (CCWorld) tmpworld;
 				if (!world.OracleTriggered[npc.getId() - 32275])
 				{
-					String htmltext = "no.htm";
-					return htmltext;
+					return "no.htm"; // TODO: Missing HTML.
 				}
 				npc.showChatWindow(player);
 				return null;
@@ -1890,19 +1889,13 @@ public final class CrystalCaverns extends Quest
 			InstanceWorld tmpworld = InstanceManager.getInstance().getWorld(npc.getInstanceId());
 			if (tmpworld instanceof CCWorld)
 			{
-				String htmltext = "no.htm";
-				return htmltext;
+				return "no.htm"; // TODO: Missing HTML.
 			}
 		}
 		else if (npc.getId() == 32279)
 		{
-			QuestState st = player.getQuestState("131_BirdInACage");
-			String htmltext = "32279.htm";
-			if ((st != null) && !st.isCompleted())
-			{
-				htmltext = "32279-01.htm";
-			}
-			return htmltext;
+			final QuestState st = player.getQuestState(Q00131_BirdInACage.class.getSimpleName());
+			return (st != null) && !st.isCompleted() ? "32279-01.htm" : "32279.htm";
 		}
 		else if (npc.getId() == CRYSTAL_GOLEM)
 		{
@@ -2472,42 +2465,36 @@ public final class CrystalCaverns extends Quest
 			{
 				if (partyMember.getInstanceId() == instanceId)
 				{
-					final QuestState st = getQuestState(partyMember, true);
-					if (!isBaylor && st.hasQuestItems(CONT_CRYSTAL))
+					if (!isBaylor && hasQuestItems(partyMember, CONT_CRYSTAL))
 					{
-						st.takeItems(CONT_CRYSTAL, 1);
-						st.giveItems(bossCry, 1);
+						takeItems(partyMember, CONT_CRYSTAL, 1);
+						giveItems(partyMember, bossCry, 1);
 					}
 					if (getRandom(10) < 5)
 					{
-						st.giveItems(WHITE_SEED, num);
+						giveItems(partyMember, WHITE_SEED, num);
 					}
 					else
 					{
-						st.giveItems(BLACK_SEED, num);
+						giveItems(partyMember, BLACK_SEED, num);
 					}
 				}
 			}
 		}
 		else if (player.getInstanceId() == instanceId)
 		{
-			QuestState st = getQuestState(player, false);
-			if (st == null)
-			{
-				st = newQuestState(player);
-			}
-			if (!isBaylor && st.hasQuestItems(CONT_CRYSTAL))
+			if (!isBaylor && hasQuestItems(player, CONT_CRYSTAL))
 			{
-				st.takeItems(CONT_CRYSTAL, 1);
-				st.giveItems(bossCry, 1);
+				takeItems(player, CONT_CRYSTAL, 1);
+				giveItems(player, bossCry, 1);
 			}
 			if (getRandom(10) < 5)
 			{
-				st.giveItems(WHITE_SEED, num);
+				giveItems(player, WHITE_SEED, num);
 			}
 			else
 			{
-				st.giveItems(BLACK_SEED, num);
+				giveItems(player, BLACK_SEED, num);
 			}
 		}
 		
@@ -2999,12 +2986,8 @@ public final class CrystalCaverns extends Quest
 							{
 								return "";
 							}
-							QuestState st = ((L2PcInstance) character).getQuestState(getName());
-							if (st == null)
-							{
-								st = newQuestState((L2PcInstance) character);
-							}
-							if (!st.hasQuestItems(RACE_KEY))
+							
+							if (!hasQuestItems((L2PcInstance) character, RACE_KEY))
 							{
 								return "";
 							}
@@ -3013,7 +2996,7 @@ public final class CrystalCaverns extends Quest
 								runEmeraldRooms(world, spawns, room);
 							}
 							door.openMe();
-							st.takeItems(RACE_KEY, 1);
+							takeItems((L2PcInstance) character, RACE_KEY, 1);
 							world.openedDoors.put(door, (L2PcInstance) character);
 							break;
 						}

+ 2 - 4
L2J_DataPack/dist/game/data/scripts/instances/DarkCloudMansion/DarkCloudMansion.java

@@ -29,7 +29,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.instancezone.InstanceWorld;
 import com.l2jserver.gameserver.model.quest.Quest;
-import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.Skill;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -1405,11 +1404,10 @@ public final class DarkCloudMansion extends Quest
 			if ((npc.getId() == SOTruth) && (world.getStatus() == 10))
 			{
 				npc.showChatWindow(player);
-				QuestState st = getQuestState(player, true);
 				
-				if (!st.hasQuestItems(CC))
+				if (!hasQuestItems(player, CC))
 				{
-					st.giveItems(CC, 1);
+					giveItems(player, CC, 1);
 				}
 			}
 		}

+ 6 - 6
L2J_DataPack/dist/game/data/scripts/instances/MithrilMine/MithrilMine.java

@@ -147,8 +147,8 @@ public final class MithrilMine extends AbstractNpcAI
 				world.removeAllowed(player.getObjectId());
 				player.setInstanceId(0);
 				player.teleToLocation(EXIT_LOC, 0);
-				qs.giveAdena(296425, true);
-				qs.addExpAndSp(921805, 82230);
+				giveAdena(player, 296425, true);
+				addExpAndSp(player, 921805, 82230);
 				qs.exitQuest(false, true);
 				return "18846-03.html";
 			}
@@ -200,9 +200,9 @@ public final class MithrilMine extends AbstractNpcAI
 				final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
 				if ((qs != null) && qs.isMemoState(2))
 				{
-					if (!qs.hasQuestItems(COLD_RESISTANCE_POTION))
+					if (!hasQuestItems(talker, COLD_RESISTANCE_POTION))
 					{
-						qs.giveItems(COLD_RESISTANCE_POTION, 1);
+						giveItems(talker, COLD_RESISTANCE_POTION, 1);
 					}
 					qs.setCond(4, true);
 					enterInstance(talker, "MithrilMine.xml", START_LOC);
@@ -212,9 +212,9 @@ public final class MithrilMine extends AbstractNpcAI
 			case KEGOR:
 			{
 				final QuestState qs = talker.getQuestState(Q10284_AcquisitionOfDivineSword.class.getSimpleName());
-				if ((qs != null) && qs.isMemoState(2) && qs.hasQuestItems(COLD_RESISTANCE_POTION) && npc.isScriptValue(0))
+				if ((qs != null) && qs.isMemoState(2) && hasQuestItems(talker, COLD_RESISTANCE_POTION) && npc.isScriptValue(0))
 				{
-					qs.takeItems(COLD_RESISTANCE_POTION, -1);
+					takeItems(talker, COLD_RESISTANCE_POTION, -1);
 					qs.setCond(5, true);
 					npc.setScriptValue(1);
 					startQuestTimer("TIMER", 3000, npc, talker);