Browse Source

Command /block fully operative and retail-like
* Blocks party invite
* Blocks trade invite
* Blocks messages in all channels except for hero voice
* Blocker can keep doing all previous actions on blocked

Thanks Coolness to port info from retail

DrHouse 16 years ago
parent
commit
92e090853b

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatAll.java

@@ -22,6 +22,7 @@ import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.handler.IChatHandler;
 import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
 import net.sf.l2j.gameserver.handler.VoicedCommandHandler;
+import net.sf.l2j.gameserver.model.BlockList;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
 
@@ -83,7 +84,7 @@ public class ChatAll implements IChatHandler
 			{
 				for (L2PcInstance player : plrs)
 				{
-					if (player != null && activeChar.isInsideRadius(player, 1250, false, true))
+					if (player != null && activeChar.isInsideRadius(player, 1250, false, true) && !BlockList.isBlocked(player, activeChar))
 					{
 						player.sendPacket(cs);
 					}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatClan.java

@@ -39,7 +39,7 @@ public class ChatClan implements IChatHandler
 		if (activeChar.getClan() != null)
 		{
 			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
-			activeChar.getClan().broadcastToOnlineMembers(cs);
+			activeChar.getClan().broadcastCSToOnlineMembers(cs, activeChar);
 		}
 	}
 	

+ 1 - 2
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatHeroVoice.java

@@ -55,8 +55,7 @@ public class ChatHeroVoice implements IChatHandler
 			//synchronized (L2World.getInstance().getAllPlayers())
 			{
 				for (L2PcInstance player : pls)
-					if (!BlockList.isBlocked(player, activeChar))
-						player.sendPacket(cs);
+					player.sendPacket(cs);
 			}
 		}
 	}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatParty.java

@@ -40,7 +40,7 @@ public class ChatParty implements IChatHandler
 		{
 			CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
 			
-			activeChar.getParty().broadcastToPartyMembers(cs);
+			activeChar.getParty().broadcastCSToPartyMembers(cs, activeChar);
 		}
 	}
 	

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatPartyRoomAll.java

@@ -41,7 +41,7 @@ public class ChatPartyRoomAll implements IChatHandler
 			if (activeChar.getParty().isInCommandChannel() && activeChar.getParty().isLeader(activeChar))
 			{
 				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
-				activeChar.getParty().getCommandChannel().broadcastToChannelMembers(cs);
+				activeChar.getParty().getCommandChannel().broadcastCSToChannelMembers(cs, activeChar);
 			}
 		}
 	}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatPartyRoomCommander.java

@@ -41,7 +41,7 @@ public class ChatPartyRoomCommander implements IChatHandler
 			if (activeChar.getParty().isInCommandChannel() && activeChar.getParty().getCommandChannel().getChannelLeader().equals(activeChar))
 			{
 				CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
-				activeChar.getParty().getCommandChannel().broadcastToChannelMembers(cs);
+				activeChar.getParty().getCommandChannel().broadcastCSToChannelMembers(cs, activeChar);
 			}
 		}
 	}

+ 11 - 3
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatShout.java

@@ -19,6 +19,7 @@ import java.util.Collection;
 import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.datatables.MapRegionTable;
 import net.sf.l2j.gameserver.handler.IChatHandler;
+import net.sf.l2j.gameserver.model.BlockList;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
@@ -44,19 +45,26 @@ public class ChatShout implements IChatHandler
 	{
 		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
 		
+		Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
+				
 		if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("gm") && activeChar.isGM()))
 		{
 			int region = MapRegionTable.getInstance().getMapRegion(activeChar.getX(), activeChar.getY());
-			Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
 			//synchronized (L2World.getInstance().getAllPlayers())
 			{
 				for (L2PcInstance player : pls)
-					if (region == MapRegionTable.getInstance().getMapRegion(player.getX(), player.getY()))
+					if (region == MapRegionTable.getInstance().getMapRegion(player.getX(), player.getY()) && !BlockList.isBlocked(player, activeChar))
 						player.sendPacket(cs);
 			}
 		}
 		else if (Config.DEFAULT_GLOBAL_CHAT.equalsIgnoreCase("global"))
-			Broadcast.toAllOnlinePlayers(cs);
+		{
+			for (L2PcInstance player : pls)
+			{
+				if (!BlockList.isBlocked(player, activeChar))
+					player.sendPacket(cs);
+			}
+		}
 	}
 	
 	/**

+ 12 - 3
L2_GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTrade.java

@@ -19,6 +19,7 @@ import java.util.Collection;
 import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.datatables.MapRegionTable;
 import net.sf.l2j.gameserver.handler.IChatHandler;
+import net.sf.l2j.gameserver.model.BlockList;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
@@ -44,16 +45,24 @@ public class ChatTrade implements IChatHandler
 	{
 		CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
 		
+		Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
+		
 		if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("on") || (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("gm") && activeChar.isGM()))
-			Broadcast.toAllOnlinePlayers(cs);
+		{
+			for (L2PcInstance player : pls)
+			{
+				if (!BlockList.isBlocked(player, activeChar))
+					player.sendPacket(cs);
+			}
+			
+		}
 		else if (Config.DEFAULT_TRADE_CHAT.equalsIgnoreCase("limited"))
 		{
 			int region = MapRegionTable.getInstance().getMapRegion(activeChar.getX(), activeChar.getY());
-			Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
 			//synchronized (L2World.getInstance().getAllPlayers())
 			{
 				for (L2PcInstance player : pls)
-					if (region == MapRegionTable.getInstance().getMapRegion(player.getX(), player.getY()))
+					if (region == MapRegionTable.getInstance().getMapRegion(player.getX(), player.getY()) && !BlockList.isBlocked(player, activeChar))
 						player.sendPacket(cs);
 			}
 		}

+ 12 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/L2Clan.java

@@ -33,6 +33,7 @@ import net.sf.l2j.gameserver.instancemanager.CastleManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.SystemMessageId;
+import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
 import net.sf.l2j.gameserver.network.serverpackets.ItemList;
 import net.sf.l2j.gameserver.network.serverpackets.L2GameServerPacket;
 import net.sf.l2j.gameserver.network.serverpackets.PledgeReceiveSubPledgeCreated;
@@ -1073,6 +1074,17 @@ public class L2Clan
 			} catch (NullPointerException e) {}
 		}
 	}
+	
+	public void broadcastCSToOnlineMembers(CreatureSay packet, L2PcInstance broadcaster)
+	{
+		for (L2ClanMember member : _members.values())
+		{
+			try {
+				if (member.isOnline() && BlockList.isBlocked(member.getPlayerInstance(), broadcaster))
+					member.getPlayerInstance().sendPacket(packet);
+			} catch (NullPointerException e) {}
+		}
+	}
 
 	public void broadcastToOtherOnlineMembers(L2GameServerPacket packet, L2PcInstance player)
 	{

+ 13 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/L2CommandChannel.java

@@ -20,6 +20,7 @@ import javolution.util.FastList;
 import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2RaidBossInstance;
+import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
 import net.sf.l2j.gameserver.network.serverpackets.ExCloseMPCC;
 import net.sf.l2j.gameserver.network.serverpackets.ExMPCCPartyInfoUpdate;
 import net.sf.l2j.gameserver.network.serverpackets.ExOpenMPCC;
@@ -135,6 +136,18 @@ public class L2CommandChannel
 			}
 		}
 	}
+	
+	public void broadcastCSToChannelMembers(CreatureSay gsp, L2PcInstance broadcaster)
+	{
+		if (_partys != null && !_partys.isEmpty())
+		{
+			for (L2Party party : _partys)
+			{
+				if(party != null)
+					party.broadcastCSToPartyMembers(gsp, broadcaster);
+			}
+		}
+	}
 
 
 	/**

+ 10 - 0
L2_GameServer/java/net/sf/l2j/gameserver/model/L2Party.java

@@ -29,6 +29,7 @@ import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2SummonInstance;
 import net.sf.l2j.gameserver.model.entity.DimensionalRift;
 import net.sf.l2j.gameserver.network.SystemMessageId;
+import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
 import net.sf.l2j.gameserver.network.serverpackets.ExCloseMPCC;
 import net.sf.l2j.gameserver.network.serverpackets.ExOpenMPCC;
 import net.sf.l2j.gameserver.network.serverpackets.ExPartyPetWindowAdd;
@@ -219,6 +220,15 @@ public class L2Party {
 			member.sendPacket(msg);
 		}
 	}
+	
+	public void broadcastCSToPartyMembers(CreatureSay msg, L2PcInstance broadcaster)
+	{
+		for (L2PcInstance member : getPartyMembers())
+		{
+			if (!BlockList.isBlocked(member, broadcaster))
+				member.sendPacket(msg);
+		}
+	}
 
 
 	/**

+ 9 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java

@@ -17,6 +17,7 @@ package net.sf.l2j.gameserver.network.clientpackets;
 import java.util.logging.Logger;
 
 import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.model.BlockList;
 import net.sf.l2j.gameserver.model.L2Party;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
@@ -72,6 +73,14 @@ public final class RequestJoinParty extends L2GameClientPacket
 			requestor.sendPacket(msg);
 			return;
 		}
+		
+		if (BlockList.isBlocked(target, requestor))
+		{
+			SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ADDED_YOU_TO_IGNORE_LIST);
+        	sm.addCharName(target);
+        	requestor.sendPacket(sm);
+        	return;
+		}
 
 		if (target == requestor)
         {

+ 9 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeRequest.java

@@ -17,6 +17,7 @@ package net.sf.l2j.gameserver.network.clientpackets;
 import java.util.logging.Logger;
 
 import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.model.BlockList;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
@@ -108,6 +109,14 @@ public final class TradeRequest extends L2GameClientPacket
             player.sendMessage("Target is in trade refusal mode");
             return;
         }
+        
+        if (BlockList.isBlocked(partner, player))
+        {
+        	SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ADDED_YOU_TO_IGNORE_LIST);
+        	sm.addCharName(partner);
+        	player.sendPacket(sm);
+        	return;
+        }
 
 		player.onTransactionRequest(partner);
 		partner.sendPacket(new SendTradeRequest(player.getObjectId()));