All pastes #22724 Raw Edit

pythonchecks

public text v1 · immutable
#22724 ·published 2005-09-12 16:49 UTC
rendered paste body
Index: D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/L2NpcInstance.java
===================================================================
--- D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/L2NpcInstance.java	(revision 1028)
+++ D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/L2NpcInstance.java	(working copy)
@@ -740,7 +740,7 @@
 			if (qs != null) 
 			{
 				// If the quest is alreday started, no need to show a window
-				if (!qs.getQuest().notifyTalk(getTemplate().npcId, qs))
+				if (!qs.getQuest().notifyTalk(this, qs))
 					return;
 			}
 			else if (Quest.findQuest(questId) != null) 
@@ -760,7 +760,7 @@
 							//disabled by mr. becouse quest dialog only show on second click.
 							//if(qs.getState().getName().equalsIgnoreCase("completed"))
 							//{
-								if (!qs.getQuest().notifyTalk(getTemplate().npcId, qs))
+								if (!qs.getQuest().notifyTalk(this, qs))
 									return; // no need to show a window
 							//}
 							break;
Index: D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/quest/Quest.java
===================================================================
--- D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/quest/Quest.java	(revision 1028)
+++ D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/quest/Quest.java	(working copy)
@@ -30,6 +30,7 @@
 import net.sf.l2j.L2DatabaseFactory;
 import net.sf.l2j.gameserver.NpcTable;
 import net.sf.l2j.gameserver.model.L2PcInstance;
+import net.sf.l2j.gameserver.model.L2NpcInstance;
 import net.sf.l2j.gameserver.model.quest.jython.QuestJython;
 import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
 import net.sf.l2j.gameserver.serverpackets.SystemMessage;
@@ -204,9 +205,12 @@
 		try { res = onKill(npcId, qs); } catch (Exception e) { return showError(qs, e); }
 		return showResult(qs, res);
 	}
-	public final boolean notifyTalk (int npcId, QuestState qs) {
+	public final boolean notifyTalk (L2NpcInstance npc, QuestState qs) {
 		String res = null;
+        int npcId = npc.getTemplate().npcId;
+        int objId = npc.getObjectId();
 		try { res = onTalk(npcId, qs); } catch (Exception e) { return showError(qs, e); }
+        qs.getPlayer().setLastQuestNpcObject(objId);
 		return showResult(qs, res);
 	}
 
Index: D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/L2PcInstance.java
===================================================================
--- D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/L2PcInstance.java	(revision 1030)
+++ D:/Server/Workspace/L2J_SVN/java/net/sf/l2j/gameserver/model/L2PcInstance.java	(working copy)
@@ -219,8 +219,12 @@
 	/** The clan crest Identifier of the L2PcInstance */
 	private int _crestId;
 
+    /** JBForth instance associated to this L2PcInstance */
    	public JBForth jbf = new JBForth();
 
+    /** Last NPC Id talked on a quest */
+    private int questNpcObject = 0; 
+    
 	/** The face type Identifier of the L2PcInstance */
 	private int _face;
 
@@ -731,6 +735,19 @@
             _log.warning("Attempted to remove unknown RecipeList"+RecipeID);
     }
 
+    /**
+     * Returns the Id for the last talked quest NPC.<BR><BR>
+     */
+    public int getLastQuestNpcObject()
+    {
+        return questNpcObject;
+    }
+    
+    public void setLastQuestNpcObject(int npcId)
+    {
+        questNpcObject = npcId;
+    }
+    
 	/**
 	 * Add Quest drops to the table containing all possible drops of a L2NpcInstance.<BR><BR>
 	 *
@@ -882,25 +899,53 @@
 
 	public QuestState processQuestEvent(String quest, String event)
 	{
+        QuestState retval = null;
 		if (event == null)
 			event = "";
         if (!_quests.containsKey(quest))
-            return null;
+            return retval;
 		QuestState qs = getQuestState(quest);
 		if (qs == null && event.length() == 0)
-			return null;
+			return retval;
 		if (qs == null) {
 			Quest q = Quest.findQuest(quest);
 			if (q == null)
-				return null;
+				return retval;
 			qs = q.newQuestState(this);
 		}
 		if (qs != null) {
-			if (qs.getQuest().notifyEvent(event, qs))
-				showQuestWindow(quest, qs.getStateId());
-		}
+            if (getAccessLevel() >= Config.GM_ACCESSLEVEL)
+            {
+                if (qs.getQuest().notifyEvent(event, qs))
+                    showQuestWindow(quest, qs.getStateId());
+                
+                retval = qs;
+            }
+            else
+            {
+                if (getLastQuestNpcObject() > 0)
+                {
+                    L2Object object = L2World.getInstance().findObject(getLastQuestNpcObject());
+                    if (object instanceof L2NpcInstance && getDistance(object.getX(), object.getY()) <= L2NpcInstance.INTERACTION_DISTANCE)
+                    {
+                        L2NpcInstance npc = (L2NpcInstance)object;
+                        QuestState[] states = getQuestsForTalk(npc.getNpcId());
+                        for (QuestState state : states)
+                        {
+                            if ((state.getQuest().getQuestIntId() == qs.getQuest().getQuestIntId()) && !qs.isCompleted())
+                            {
+                                if (qs.getQuest().notifyEvent(event, qs))
+                                    showQuestWindow(quest, qs.getStateId());
+                                
+                                retval = qs;
+                            }
+                        }
+                    }
+                }
+    		}
+        }
 
-		return qs;
+		return retval;
 	}
 
 	private void showQuestWindow(String questId, String stateId) {