From db8d07118db53d3bda99063c847b4b074aa34449 Mon Sep 17 00:00:00 2001
From: Adry85 <adrya85@hotmail.it>
Date: Thu, 5 Oct 2017 17:28:04 +0200
Subject: [PATCH] Fixed NPE on Minigame AI.

Patch by: Zephyr
Reported by: CostyKiller
Tested by: CostyKiller
---
 .../scripts/ai/npc/Minigame/Minigame.java     | 37 ++++++++++++++++---
 1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/dist/game/data/scripts/ai/npc/Minigame/Minigame.java b/dist/game/data/scripts/ai/npc/Minigame/Minigame.java
index 326ced2fc5..a87a3461d1 100644
--- a/dist/game/data/scripts/ai/npc/Minigame/Minigame.java
+++ b/dist/game/data/scripts/ai/npc/Minigame/Minigame.java
@@ -159,7 +159,7 @@ public final class Minigame extends AbstractNpcAI
 					room.burnThemAll();
 					startQuestTimer("off", 2000, npc, null);
 					final ConsumerEventListener listener = new ConsumerEventListener(room.getParticipant(), EventType.ON_CREATURE_SKILL_USE, (OnCreatureSkillUse listenerEvent) -> onSkillUse(listenerEvent), room);
-					room.getParticipant().addListener(listener);
+					room.setListener(listener);
 					room.setCurrentPot(0);
 				}
 				break;
@@ -185,11 +185,7 @@ public final class Minigame extends AbstractNpcAI
 				cancelQuestTimer("expire", npc, null);
 				cancelQuestTimer("hurry_up", npc, null);
 				cancelQuestTimer("hurry_up2", npc, null);
-				room.getManager().setTarget(null);
-				room.setParticipant(null);
-				room.setStarted(false);
-				room.setAttemptNumber(1);
-				room.setCurrentPot(0);
+				room.clean();
 				break;
 			}
 			case "afterthat":
@@ -391,6 +387,7 @@ public final class Minigame extends AbstractNpcAI
 		private int _attemptNumber;
 		private int _currentPot;
 		private final int _order[];
+		private ConsumerEventListener _listener;
 		
 		public MinigameRoom(L2Npc[] burners, L2Npc manager)
 		{
@@ -530,6 +527,34 @@ public final class Minigame extends AbstractNpcAI
 		{
 			return _order;
 		}
+		
+		/**
+		 * Set a listener for player inside room
+		 * @param listener
+		 */
+		public void setListener(ConsumerEventListener listener)
+		{
+			_listener = listener;
+			_participant.addListener(listener);
+		}
+		
+		/**
+		 * Clean the room values
+		 */
+		public void clean()
+		{
+			if (_listener != null)
+			{
+				_participant.removeListener(_listener);
+				_listener = null;
+			}
+			
+			getManager().setTarget(null);
+			setParticipant(null);
+			setStarted(false);
+			setAttemptNumber(1);
+			setCurrentPot(0);
+		}
 	}
 	
 	public static void main(String[] args)
-- 
GitLab