Browse Source

Fix for //reload quests NPE, same as before. No, its not recommended to use on live!

JIV 15 years ago
parent
commit
f9fceeca5d

+ 3 - 1
L2_GameServer/java/com/l2jserver/gameserver/instancemanager/QuestManager.java

@@ -84,8 +84,10 @@ public class QuestManager extends ScriptManager<Quest>
 			for (Quest quest : _quests.values())
 			{
 				if (quest != null)
-					quest.unload();
+					quest.unload(false);
 			}
+			
+			_quests.clear();
 			// now load all scripts
 			File scripts = new File(Config.DATAPACK_ROOT + "/data/scripts.cfg");
 			L2ScriptEngineManager.getInstance().executeScriptList(scripts);

+ 3 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -1544,6 +1544,9 @@ public final class L2PcInstance extends L2Playable
 			if (qs == null)
 				continue;
 			
+			if (qs.getQuest() == null)
+				continue;
+			
 		    int questId = qs.getQuest().getQuestIntId();
 			if ((questId>19999) || (questId<1))
 				continue;

+ 9 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/quest/Quest.java

@@ -1737,6 +1737,11 @@ public class Quest extends ManagedScript
 	 */
 	@Override
 	public boolean unload()
+	{
+		return unload(true);
+	}
+	
+	public boolean unload(boolean removeFromList)
 	{
 		this.saveGlobalData();
 		// cancel all pending timers before reloading.
@@ -1747,7 +1752,10 @@ public class Quest extends ManagedScript
 			for (QuestTimer timer : timers)
 				timer.cancel();
 		_allEventTimers.clear();
-		return QuestManager.getInstance().removeQuest(this);
+		if (removeFromList)
+			return QuestManager.getInstance().removeQuest(this);
+		else
+			return true;
 	}
 	
 	/**