From bb1287f57199b83713f53a2925c3d28a133811f9 Mon Sep 17 00:00:00 2001
From: Zoey76 <zoey_76@msn.com>
Date: Sun, 20 May 2012 20:16:17 +0000
Subject: [PATCH] BETA: Implementing Listeners for Skill Transfer's Holy
 Pomander reward. 	Thanks Battlecruiser for first implementation.

---
 .../Validators/SkillTransferValidator.java    | 111 +++++++++++-------
 .../quests/SagasScripts/SagasSuperClass.java  |  12 --
 2 files changed, 67 insertions(+), 56 deletions(-)

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/custom/Validators/SkillTransferValidator.java b/L2J_DataPack_BETA/dist/game/data/scripts/custom/Validators/SkillTransferValidator.java
index 74934eb880..e87536c4f3 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/custom/Validators/SkillTransferValidator.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/custom/Validators/SkillTransferValidator.java
@@ -18,24 +18,20 @@ import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.ClassListData;
 import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.model.L2SkillLearn;
+import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
-import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
+import com.l2jserver.gameserver.scripting.scriptengine.events.ProfessionChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script;
 import com.l2jserver.gameserver.util.Util;
 
 /**
  * @author Zoey76
  */
-public final class SkillTransferValidator extends Quest
+public final class SkillTransferValidator extends L2Script
 {
-	public SkillTransferValidator(int id, String name, String descr)
-	{
-		super(id, name, descr);
-		setOnEnterWorld(true);
-	}
-	
 	private static final String qn = "SkillTransfer";
 	
 	private static final ItemHolder[] PORMANDERS =
@@ -48,58 +44,84 @@ public final class SkillTransferValidator extends Quest
 		new ItemHolder(15309, 4)
 	};
 	
+	public SkillTransferValidator(int id, String name, String descr)
+	{
+		super(id, name, descr);
+		setOnEnterWorld(true);
+	}
+	
+	@Override
+	public void init()
+	{
+		
+	}
+	
 	@Override
 	public String onEnterWorld(L2PcInstance player)
 	{
-		givePormanders(player);
+		if (getTransferClassIndex(player) > 0)
+		{
+			addProfessionChangeNotify(player);
+			startQuestTimer("givePormanders", 2000, null, player);
+		}
 		return null;
 	}
 	
-	private void givePormanders(L2PcInstance player)
+	@Override
+	public void onProfessionChange(ProfessionChangeEvent event)
 	{
-		final int index = getTransferClassIndex(player);
-		
-		if (index >= 0)
+		startQuestTimer("givePormanders", 2000, null, event.getPlayer());
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		if (event.equals("givePormanders"))
 		{
-			QuestState st = player.getQuestState(qn);
-			if (st == null)
-			{
-				st = newQuestState(player);
-			}
-			
-			final String name = qn + String.valueOf(player.getClassId().getId());
-			if (st.getInt(name) == 0)
+			final int index = getTransferClassIndex(player);
+			if (index >= 0)
 			{
-				st.setInternal(name, "1");
-				if (st.getGlobalQuestVar(name).isEmpty())
+				QuestState st = player.getQuestState(qn);
+				if (st == null)
 				{
-					st.saveGlobalQuestVar(name, "1");
-					player.addItem(qn, PORMANDERS[index].getId(), PORMANDERS[index].getCount(), null, true);
+					st = newQuestState(player);
 				}
-			}
-			
-			if (Config.SKILL_CHECK_ENABLE && (!player.isGM() || Config.SKILL_CHECK_GM))
-			{
-				long count = PORMANDERS[index].getCount() - player.getInventory().getInventoryItemCount(PORMANDERS[index].getId(), -1, false);
-				for (L2Skill sk : player.getAllSkills())
+				
+				final String name = qn + String.valueOf(player.getClassId().getId());
+				if (st.getInt(name) == 0)
 				{
-					for (L2SkillLearn s : SkillTreesData.getInstance().getTransferSkillTree(player.getClassId()).values())
+					st.setInternal(name, "1");
+					if (st.getGlobalQuestVar(name).isEmpty())
 					{
-						if (s.getSkillId() == sk.getId())
+						st.saveGlobalQuestVar(name, "1");
+						player.addItem(qn, PORMANDERS[index].getId(), PORMANDERS[index].getCount(), null, true);
+					}
+				}
+				
+				if (Config.SKILL_CHECK_ENABLE && (!player.isGM() || Config.SKILL_CHECK_GM))
+				{
+					long count = PORMANDERS[index].getCount() - player.getInventory().getInventoryItemCount(PORMANDERS[index].getId(), -1, false);
+					for (L2Skill sk : player.getAllSkills())
+					{
+						for (L2SkillLearn s : SkillTreesData.getInstance().getTransferSkillTree(player.getClassId()).values())
 						{
-							// Holy Weapon allowed for Shilien Saint/Inquisitor stance
-							if ((sk.getId() == 1043) && (index == 2) && player.isInStance())
+							if (s.getSkillId() == sk.getId())
 							{
-								continue;
-							}
-							
-							count--;
-							if (count < 0)
-							{
-								Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " has too many transfered skills or items, skill:" + s.getName() + " ("+sk.getId() + "/" + sk.getLevel() + "), class:" + ClassListData.getInstance().getClass(player.getClassId()).getClassName(), 1);
-								if (Config.SKILL_CHECK_REMOVE)
+								// Holy Weapon allowed for Shilien Saint/Inquisitor stance
+								if ((sk.getId() == 1043) && (index == 2) && player.isInStance())
+								{
+									continue;
+								}
+								
+								count--;
+								if (count < 0)
 								{
-									player.removeSkill(sk);
+									final String className = ClassListData.getInstance().getClass(player.getClassId()).getClassName();
+									Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " has too many transfered skills or items, skill:" + s.getName() + " (" + sk.getId() + "/" + sk.getLevel() + "), class:" + className, 1);
+									if (Config.SKILL_CHECK_REMOVE)
+									{
+										player.removeSkill(sk);
+									}
 								}
 							}
 						}
@@ -107,6 +129,7 @@ public final class SkillTransferValidator extends Quest
 				}
 			}
 		}
+		return null;
 	}
 	
 	private int getTransferClassIndex(L2PcInstance player)
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
index e84713c7ed..e5f3840e7e 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/quests/SagasScripts/SagasSuperClass.java
@@ -379,12 +379,6 @@ public class SagasSuperClass extends QuestJython
 					}
 					player.broadcastUserInfo();
 					Cast(npc, player, 4339, 1);
-					
-					Quest q = QuestManager.getInstance().getQuest("SkillTransfer");
-					if (q != null)
-					{
-						q.startQuestTimer("givePormanders", 1, npc, player);
-					}
 				}
 				else
 				{
@@ -895,12 +889,6 @@ public class SagasSuperClass extends QuestJython
 								}
 								player.broadcastUserInfo();
 								Cast(npc, player, 4339, 1);
-								
-								Quest q = QuestManager.getInstance().getQuest("SkillTransfer");
-								if (q != null)
-								{
-									q.startQuestTimer("givePormanders", 1, npc, player);
-								}
 							}
 						}
 						else
-- 
GitLab