Ver código fonte

Some fixes over siegable halls
Optimizations for Quest 504
Added Npc Talking movement Block

BiggBoss 13 anos atrás
pai
commit
3e6cd9ae81

+ 6 - 0
L2J_Server_BETA/dist/game/config/Character.properties

@@ -346,6 +346,12 @@ MaximumFreightSlots = 200
 # Default: 1000
 FreightPriece = 1000
 
+# Npc talk blockage. When a player talks to a NPC, he must wait some secs
+# before being able to walk again. In seconds
+# Default: 3
+# Set to 0 to disable it
+NpcTalkBlockingTime = 3
+
 # ---------------------------------------------------------------------------
 # Enchanting
 # ---------------------------------------------------------------------------

+ 2 - 0
L2J_Server_BETA/java/com/l2jserver/Config.java

@@ -624,6 +624,7 @@ public final class Config
 	public static boolean ENABLE_BLOCK_CHECKER_EVENT;
 	public static int MIN_BLOCK_CHECKER_TEAM_MEMBERS;
 	public static boolean HBCE_FAIR_PLAY;
+	public static int PLAYER_MOVEMENT_BLOCK_TIME;
 	
 	
 	//--------------------------------------------------
@@ -1741,6 +1742,7 @@ public final class Config
 					STORE_RECIPE_SHOPLIST = Boolean.parseBoolean(Character.getProperty("StoreRecipeShopList", "False"));
 					STORE_UI_SETTINGS = Boolean.parseBoolean(Character.getProperty("StoreCharUiSettings", "False"));
 					FORBIDDEN_NAMES = Character.getProperty("ForbiddenNames", "").split(",");
+					PLAYER_MOVEMENT_BLOCK_TIME = Integer.parseInt(Character.getProperty("NpcTalkBlockingTime", "0")) * 1000;
 				}
 				catch (Exception e)
 				{

+ 18 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/ClanTable.java

@@ -26,8 +26,10 @@ import javolution.util.FastMap;
 import com.l2jserver.Config;
 import com.l2jserver.L2DatabaseFactory;
 import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.cache.CrestCache;
 import com.l2jserver.gameserver.communitybbs.Manager.ForumsBBSManager;
 import com.l2jserver.gameserver.idfactory.IdFactory;
+import com.l2jserver.gameserver.instancemanager.CHSiegeManager;
 import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.instancemanager.SiegeManager;
@@ -37,6 +39,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.FortSiege;
 import com.l2jserver.gameserver.model.entity.Siege;
+import com.l2jserver.gameserver.model.entity.clanhall.SiegableHall;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
 import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
@@ -240,6 +243,13 @@ public class ClanTable
 				siege.removeSiegeClan(clan);
 			}
 		}
+		int hallId = clan.getHasHideout();
+		if(hallId == 0)
+		{
+			for(SiegableHall hall : CHSiegeManager.getInstance().getConquerableHalls().values())
+				hall.removeAttacker(clan);
+		}
+		
 		L2ClanMember leaderMember = clan.getLeader();
 		if (leaderMember == null)
 			clan.getWarehouse().destroyAllItems("ClanRemove", null, null);
@@ -253,6 +263,8 @@ public class ClanTable
 		
 		_clans.remove(clanId);
 		IdFactory.getInstance().releaseId(clanId);
+
+		CrestCache.getInstance().removePledgeCrest(clan.getCrestId());
 		
 		Connection con = null;
 		try
@@ -306,6 +318,12 @@ public class ClanTable
 						fort.removeOwner(true);
 				}
 			}
+			if(hallId != 0)
+			{
+				SiegableHall hall = CHSiegeManager.getInstance().getSiegableHall(hallId);
+				if(hall != null && hall.getOwnerId() == clanId)
+					hall.free();
+			}
 			if (Config.DEBUG)
 				_log.fine("clan removed in db: " + clanId);
 		}

+ 1 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ClanHallManagerInstance.java

@@ -1330,10 +1330,7 @@ public class L2ClanHallManagerInstance extends L2MerchantInstance
 			else if (actualCommand.equalsIgnoreCase("list_back"))
 			{
 				NpcHtmlMessage html = new NpcHtmlMessage(1);
-				if(getClanHall().getLease() > 0)
-					html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain.htm");
-				else
-					html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain-chs.htm");
+				html.setFile(player.getHtmlPrefix(), "data/html/clanHallManager/chamberlain.htm");
 				html.replace("%objectId%", String.valueOf(this.getObjectId()));
 				html.replace("%npcname%", this.getName());
 				sendHtmlMessage(player, html);

+ 12 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -812,6 +812,8 @@ public final class L2PcInstance extends L2Playable
 	
 	private long _pvpFlagLasts;
 	
+	private long _notMoveUntil = 0;
+	
 	public void setPvpFlagLasts(long time)
 	{
 		_pvpFlagLasts = time;
@@ -15095,4 +15097,14 @@ public final class L2PcInstance extends L2Playable
 	{
 		return eventStatus;
 	}
+	
+	public long getNotMoveUntil()
+	{
+		return _notMoveUntil;
+	}
+	
+	public void updateNotMoveUntil()
+	{
+		_notMoveUntil = System.currentTimeMillis() + Config.PLAYER_MOVEMENT_BLOCK_TIME;
+	}
 }

+ 6 - 16
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java

@@ -38,7 +38,6 @@ import com.l2jserver.gameserver.model.L2SiegeClan;
 import com.l2jserver.gameserver.model.L2Spawn;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2SiegeClan.SiegeClanType;
-import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Siegable;
@@ -81,11 +80,8 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 		_hall = CHSiegeManager.getInstance().getSiegableHall(hallId);
 		_hall.setSiege(this);
 
-		long delay = _hall.getNextSiegeTime();
-		if(delay == -1)
-			_log.warning(_hall.getName()+": No date setted for siege!");
-		else
-			_siegeTask = ThreadPoolManager.getInstance().scheduleGeneral(new PrepareOwner(), delay - System.currentTimeMillis() - 3600000);
+		_siegeTask = ThreadPoolManager.getInstance().scheduleGeneral(new PrepareOwner(), _hall.getNextSiegeTime() - System.currentTimeMillis() - 3600000);
+		_log.config(_hall.getName()+" siege scheduled for: "+getSiegeDate().getTime());		
 		loadAttackers();
 	}
 	
@@ -325,9 +321,9 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 		}
 		
 		// Update pvp flag for winners when siege zone becomes unactive
-		for(L2Character cha : (L2Character[])_hall.getSiegeZone().getCharactersInside().getValues())
-			if(cha != null && cha instanceof L2PcInstance)
-				((L2PcInstance)cha).startPvPFlag();
+		for(Object obj : _hall.getSiegeZone().getCharactersInside().getValues())
+			if(obj != null && obj instanceof L2PcInstance)
+				((L2PcInstance)obj).startPvPFlag();
 		
 		getAttackers().clear();
 		
@@ -450,7 +446,7 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 	{
 		final NpcSay npcSay = new NpcSay(npc.getObjectId(), type, npc.getNpcId(), NpcStringId.getNpcStringId(messageId));
 		int sourceRegion = MapRegionManager.getInstance().getMapRegion(npc.getX(), npc.getY()).getLocId();
-		L2PcInstance[] charsInside = (L2PcInstance[])L2World.getInstance().getAllPlayers().getValues();
+		final L2PcInstance[] charsInside = L2World.getInstance().getAllPlayersArray();
 		
 		for(L2PcInstance pc : charsInside)
 			if(pc != null && MapRegionManager.getInstance().getMapRegion(pc.getX(), pc.getY()).getLocId() == sourceRegion)
@@ -479,12 +475,6 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 			Announcements.getInstance().announceToAll(msg);
 			_hall.updateSiegeStatus(SiegeStatus.WAITING_BATTLE);
 			
-			if(_hall.getId() == 35)
-			{
-				_hall.getDoor(22170001).openMe();
-				_hall.getDoor(22170002).openMe();
-			}
-			
 			_siegeTask = ThreadPoolManager.getInstance().scheduleGeneral(new SiegeStarts(), 3600000);
 		}
 	}

+ 0 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/SiegableHall.java

@@ -81,7 +81,6 @@ public final class SiegableHall extends ClanHall
 			updateNextSiege();
 		else
 			_nextSiege.setTimeInMillis(nextSiege);
-		_log.config(getName()+" siege scheduled for: "+_nextSiege.getTime());		
 	}
 			
 	public List<String> getDoorDefault()

+ 11 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/MoveBackwardToLocation.java

@@ -23,6 +23,7 @@ import com.l2jserver.gameserver.model.L2CharPosition;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.StopMove;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 
 /**
@@ -83,6 +84,16 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 		L2PcInstance activeChar = getClient().getActiveChar();
 		if (activeChar == null)
 			return;
+		
+		if(Config.PLAYER_MOVEMENT_BLOCK_TIME > 0
+			&& !activeChar.isGM()
+			&& activeChar.getNotMoveUntil() > System.currentTimeMillis())
+		{
+			getClient().sendPacket(SystemMessage.getSystemMessage(3226));
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
+		
 
 		if (_targetX == _originX && _targetY == _originY && _targetZ == _originZ)
 		{

+ 10 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java

@@ -14,6 +14,7 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import com.l2jserver.Config;
 import com.l2jserver.gameserver.TaskPriority;
 import com.l2jserver.gameserver.instancemanager.BoatManager;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
@@ -59,6 +60,15 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 		if (activeChar == null)
 			return;
 		
+		if(Config.PLAYER_MOVEMENT_BLOCK_TIME > 0
+			&& !activeChar.isGM()
+			&& activeChar.getNotMoveUntil() > System.currentTimeMillis())
+		{
+			getClient().sendPacket(SystemMessage.getSystemMessage(3226));
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
+		
 		if (_targetX == _originX && _targetY == _originY && _targetZ == _originZ)
 		{
 			activeChar.sendPacket(new StopMoveInVehicle(activeChar, _boatId));

+ 4 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/NpcHtmlMessage.java

@@ -178,6 +178,10 @@ public final class NpcHtmlMessage extends L2GameServerPacket
 	{
 		if (Config.BYPASS_VALIDATION && _validate)
 			buildBypassCache(getClient().getActiveChar());
+		
+		if(Config.PLAYER_MOVEMENT_BLOCK_TIME > 0
+			&& !getClient().getActiveChar().isGM())
+			getClient().getActiveChar().updateNotMoveUntil();
 	}
 	
 	public void setHtml(String text)