Эх сурвалжийг харах

BETA: Retail like OlympiadStat by Zoey76
* Fix for #4779
* Added message if player isn't noble.
* Code improved.

MELERIX 14 жил өмнө
parent
commit
5af9ee6d5f

+ 30 - 17
L2J_DataPack_BETA/data/scripts/handlers/usercommandhandlers/OlympiadStat.java

@@ -15,6 +15,7 @@
 package handlers.usercommandhandlers;
 
 import com.l2jserver.gameserver.handler.IUserCommandHandler;
+import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -22,41 +23,53 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 /**
  * Support for /olympiadstat command
- * Added by kamy
+ * @author kamy, Zoey76
  */
 public class OlympiadStat implements IUserCommandHandler
 {
-	private static final int[] COMMAND_IDS =
-	{
-		109
-	};
+	private static final int[] COMMAND_IDS = { 109 };
 	
 	/**
-	 * 
 	 * @see com.l2jserver.gameserver.handler.IUserCommandHandler#useUserCommand(int, com.l2jserver.gameserver.model.actor.instance.L2PcInstance)
 	 */
 	public boolean useUserCommand(int id, L2PcInstance activeChar)
 	{
-		if (id != COMMAND_IDS[0] || !activeChar.isNoble())
+		if (id != COMMAND_IDS[0])
+		{
 			return false;
+		}
 		
-		L2PcInstance noble = activeChar;
-		L2PcInstance target = (L2PcInstance) activeChar.getTarget();
+		if (!activeChar.isNoble())
+		{
+			activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOBLESSE_ONLY));
+			return false;
+		}
 		
-		if (target != null && target.isNoble())
-			noble = target;
+		int nobleObjId = activeChar.getObjectId();
+		final L2Object target = activeChar.getTarget();
+		if (target != null)
+		{
+			if ((target instanceof L2PcInstance) && target.getActingPlayer().isNoble())
+			{
+				nobleObjId = target.getObjectId();
+			}
+			else
+			{
+				activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOBLESSE_ONLY));
+				return false;
+			}
+		}
 		
-		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_CURRENT_RECORD_FOR_THIS_OLYMPIAD_SESSION_IS_S1_MATCHES_S2_WINS_S3_DEFEATS_YOU_HAVE_EARNED_S4_OLYMPIAD_POINTS);
-		sm.addNumber(Olympiad.getInstance().getCompetitionDone(noble.getObjectId()));
-		sm.addNumber(Olympiad.getInstance().getCompetitionWon(noble.getObjectId()));
-		sm.addNumber(Olympiad.getInstance().getCompetitionLost(noble.getObjectId()));
-		sm.addNumber(Olympiad.getInstance().getNoblePoints(noble.getObjectId()));
+		final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_CURRENT_RECORD_FOR_THIS_OLYMPIAD_SESSION_IS_S1_MATCHES_S2_WINS_S3_DEFEATS_YOU_HAVE_EARNED_S4_OLYMPIAD_POINTS);
+		sm.addNumber(Olympiad.getInstance().getCompetitionDone(nobleObjId));
+		sm.addNumber(Olympiad.getInstance().getCompetitionWon(nobleObjId));
+		sm.addNumber(Olympiad.getInstance().getCompetitionLost(nobleObjId));
+		sm.addNumber(Olympiad.getInstance().getNoblePoints(nobleObjId));
 		activeChar.sendPacket(sm);
 		return true;
 	}
 	
 	/**
-	 * 
 	 * @see com.l2jserver.gameserver.handler.IUserCommandHandler#getUserCommandList()
 	 */
 	public int[] getUserCommandList()