Просмотр исходного кода

Finishing [3680] - players cant interact with objects in the other instances (except from multiverse).
Including: npc interaction, private store/manufacture, attack.
Also little optimisation of the requestRestartPoint.

_DS_ 15 лет назад
Родитель
Сommit
befa6b33e2

+ 3 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/actor/L2Npc.java

@@ -590,6 +590,9 @@ public class L2Npc extends L2Character
 			return false;
 		if (!isInsideRadius(player, INTERACTION_DISTANCE, true, false))
 			return false;
+		if (player.getInstanceId() != getInstanceId()
+				&& player.getInstanceId() != -1)
+			return false;
 
 		return true;
 	}

+ 6 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java

@@ -63,6 +63,12 @@ public final class AttackRequest extends L2GameClientPacket
 		if (target == null)
 			return;
 
+		// Players can't attack objects in the other instances
+		// except from multiverse
+		if (target.getInstanceId() != activeChar.getInstanceId()
+				&& activeChar.getInstanceId() != -1)
+			return;
+
 		// Only GMs can directly attack invisible characters
 		if (target instanceof L2PcInstance
 				&& ((L2PcInstance)target).getAppearance().getInvisible()

+ 1 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuyItem.java

@@ -111,6 +111,7 @@ public final class RequestBuyItem extends L2GameClientPacket
 						|| target instanceof L2MercManagerInstance
 						|| target instanceof L2ClanHallManagerInstance
 						|| target instanceof L2CastleChamberlainInstance) // Target not a merchant, fisherman or mercmanager
+				|| player.getInstanceId() != target.getInstanceId()
 				|| !player.isInsideRadius(target, INTERACTION_DISTANCE, true, false))) // Distance is too far
 			return;
 

+ 4 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java

@@ -100,6 +100,10 @@ public final class RequestPrivateStoreBuy extends L2GameClientPacket
 		if (!player.isInsideRadius(storePlayer, INTERACTION_DISTANCE, true, false))
 			return;
 
+		if (player.getInstanceId() != storePlayer.getInstanceId()
+				&& player.getInstanceId() != -1)
+			return;
+
 		if (!(storePlayer.getPrivateStoreType() == L2PcInstance.STORE_PRIVATE_SELL || storePlayer.getPrivateStoreType() == L2PcInstance.STORE_PRIVATE_PACKAGE_SELL))
 			return;
 

+ 4 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java

@@ -99,6 +99,10 @@ public final class RequestPrivateStoreSell extends L2GameClientPacket
 		if (!player.isInsideRadius(storePlayer, INTERACTION_DISTANCE, true, false))
 			return;
 
+		if (player.getInstanceId() != storePlayer.getInstanceId()
+				&& player.getInstanceId() != -1)
+			return;
+
 		if (storePlayer.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_BUY)
 			return;
 

+ 5 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeItem.java

@@ -55,7 +55,11 @@ public final class RequestRecipeShopMakeItem extends L2GameClientPacket
 		if (manufacturer == null)
 		    return;
 
-        if (activeChar.getPrivateStoreType() != 0)
+		if (manufacturer.getInstanceId() != activeChar.getInstanceId()
+				&& activeChar.getInstanceId() != -1)
+			return;
+
+		if (activeChar.getPrivateStoreType() != 0)
         {
             activeChar.sendMessage("Cannot make items while trading");
             return;

+ 1 - 14
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java

@@ -21,14 +21,12 @@ import net.sf.l2j.gameserver.datatables.MapRegionTable;
 import net.sf.l2j.gameserver.instancemanager.CastleManager;
 import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
 import net.sf.l2j.gameserver.instancemanager.FortManager;
-import net.sf.l2j.gameserver.instancemanager.InstanceManager;
 import net.sf.l2j.gameserver.model.L2SiegeClan;
 import net.sf.l2j.gameserver.model.Location;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.entity.Castle;
 import net.sf.l2j.gameserver.model.entity.ClanHall;
 import net.sf.l2j.gameserver.model.entity.Fort;
-import net.sf.l2j.gameserver.model.entity.Instance;
 import net.sf.l2j.gameserver.model.entity.TvTEvent;
 
 /**
@@ -173,18 +171,7 @@ public final class RequestRestartPoint extends L2GameClientPacket
 					break;
 
 				default:
-					if (activeChar.getInstanceId() != 0)
-					{
-						final Instance inst = InstanceManager.getInstance().getInstance(activeChar.getInstanceId());
-						if (inst != null)
-						{
-							final int[] spawn = inst.getSpawnLoc();
-							if (spawn[0] != 0 && spawn[1] != 0 && spawn[2] != 0)
-								loc = new Location(spawn[0], spawn[1], spawn[2]);
-						}
-					}
-					if (loc == null)
-						loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.Town);
+					loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.Town);
 					break;
 			}
 

+ 1 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSellItem.java

@@ -123,6 +123,7 @@ public final class RequestSellItem extends L2GameClientPacket
 		if (!player.isGM() && (target == null								// No target (ie GM Shop)
 				|| !(target instanceof L2MerchantInstance
 						|| target instanceof L2MerchantSummonInstance)	// Target not a merchant
+						|| target.getInstanceId() != player.getInstanceId()
 						|| !player.isInsideRadius(target, INTERACTION_DISTANCE, true, false))) // Distance is too far
 			return;