Browse Source

BETA: Inspecting items transferring packets from player to pet and the other way around.
* Added a check if player request higher item count then item's would get a punishment (Client does not allows that so it must be packet manipulation)
* Excluding GMs from punishment task (They must not get banned, jailed or whatever)
* Reported by: blacksea
* Reviewed by: Zoey76

Rumen Nikiforov 12 năm trước cách đây
mục cha
commit
a7f7b538ae

+ 8 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestGetItemFromPet.java

@@ -21,6 +21,7 @@ package com.l2jserver.gameserver.network.clientpackets;
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.util.Util;
 
 /**
@@ -48,7 +49,7 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 	protected void runImpl()
 	{
 		final L2PcInstance player = getClient().getActiveChar();
-		if ((player == null) || !player.hasPet())
+		if ((_amount <= 0) || (player == null) || !player.hasPet())
 		{
 			return;
 		}
@@ -64,13 +65,16 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 		{
 			return;
 		}
-		if (_amount < 0)
+		
+		final L2ItemInstance item = pet.getInventory().getItemByObjectId(_objectId);
+		if (item == null)
 		{
-			Util.handleIllegalPlayerAction(player, "[RequestGetItemFromPet] Character " + player.getName() + " of account " + player.getAccountName() + " tried to get item with oid " + _objectId + " from pet but has count < 0!", Config.DEFAULT_PUNISH);
 			return;
 		}
-		else if (_amount == 0)
+		
+		if (_amount > item.getCount())
 		{
+			Util.handleIllegalPlayerAction(player, getClass().getSimpleName() + ": Character " + player.getName() + " of account " + player.getAccountName() + " tried to get item with oid " + _objectId + " from pet but has invalid count " + _amount + " item count: " + item.getCount(), Config.DEFAULT_PUNISH);
 			return;
 		}
 		

+ 8 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestGiveItemToPet.java

@@ -23,6 +23,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.util.Util;
 
 /**
  * This class ...
@@ -46,7 +47,7 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 	protected void runImpl()
 	{
 		final L2PcInstance player = getClient().getActiveChar();
-		if ((player == null) || !player.hasPet())
+		if ((_amount <= 0) || (player == null) || !player.hasPet())
 		{
 			return;
 		}
@@ -79,6 +80,12 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 			return;
 		}
 		
+		if (_amount > item.getCount())
+		{
+			Util.handleIllegalPlayerAction(player, getClass().getSimpleName() + ": Character " + player.getName() + " of account " + player.getAccountName() + " tried to get item with oid " + _objectId + " from pet but has invalid count " + _amount + " item count: " + item.getCount(), Config.DEFAULT_PUNISH);
+			return;
+		}
+		
 		if (item.isAugmented())
 		{
 			return;
@@ -97,11 +104,6 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 			return;
 		}
 		
-		if (_amount < 0)
-		{
-			return;
-		}
-		
 		if (!pet.getInventory().validateCapacity(item))
 		{
 			player.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_ANY_MORE_ITEMS);

+ 20 - 15
L2J_Server_BETA/java/com/l2jserver/gameserver/util/IllegalPlayerAction.java

@@ -55,8 +55,11 @@ public final class IllegalPlayerAction implements Runnable
 				_actor.sendMessage("You will be kicked for illegal action, GM informed.");
 				break;
 			case PUNISH_KICKBAN:
-				_actor.setAccessLevel(-1);
-				_actor.setAccountAccesslevel(-1);
+				if (!_actor.isGM())
+				{
+					_actor.setAccessLevel(-1);
+					_actor.setAccountAccesslevel(-1);
+				}
 				_actor.sendMessage("You are banned for illegal action, GM informed.");
 				break;
 			case PUNISH_JAIL:
@@ -79,20 +82,22 @@ public final class IllegalPlayerAction implements Runnable
 		_logAudit.log(record);
 		
 		AdminTable.getInstance().broadcastMessageToGMs(_message);
-		
-		switch (_punishment)
+		if (!_actor.isGM())
 		{
-			case PUNISH_BROADCAST:
-				return;
-			case PUNISH_KICK:
-				_actor.logout(false);
-				break;
-			case PUNISH_KICKBAN:
-				_actor.logout();
-				break;
-			case PUNISH_JAIL:
-				_actor.setPunishLevel(L2PcInstance.PunishLevel.JAIL, Config.DEFAULT_PUNISH_PARAM);
-				break;
+			switch (_punishment)
+			{
+				case PUNISH_BROADCAST:
+					return;
+				case PUNISH_KICK:
+					_actor.logout(false);
+					break;
+				case PUNISH_KICKBAN:
+					_actor.logout();
+					break;
+				case PUNISH_JAIL:
+					_actor.setPunishLevel(L2PcInstance.PunishLevel.JAIL, Config.DEFAULT_PUNISH_PARAM);
+					break;
+			}
 		}
 	}
 }