فهرست منبع

Bracelet is accessory type.
GrandBoss log info on status change.
Castle/Fort owner on change owner is unsummoned from wyvern.
Clan member can declare war/participate in siege with privileges.
Clan war cannot be canceled if some member is fighting.

JIV 15 سال پیش
والد
کامیت
e760049767

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/datatables/ItemTable.java

@@ -490,7 +490,8 @@ public class ItemTable
 		item.set.set("skill", rset.getString("skill"));
 		item.set.set("skill", rset.getString("skill"));
 		
 		
 		if (bodypart == L2Item.SLOT_NECK || bodypart == L2Item.SLOT_HAIR || bodypart == L2Item.SLOT_HAIR2
 		if (bodypart == L2Item.SLOT_NECK || bodypart == L2Item.SLOT_HAIR || bodypart == L2Item.SLOT_HAIR2
-				|| bodypart == L2Item.SLOT_HAIRALL || (bodypart & L2Item.SLOT_L_EAR) != 0 || (bodypart & L2Item.SLOT_L_FINGER) != 0)
+				|| bodypart == L2Item.SLOT_HAIRALL || (bodypart & L2Item.SLOT_L_EAR) != 0 || (bodypart & L2Item.SLOT_L_FINGER) != 0
+				|| (bodypart & L2Item.SLOT_R_BRACELET) != 0 || (bodypart & L2Item.SLOT_L_BRACELET) != 0 )
 		{
 		{
 			item.set.set("type1", L2Item.TYPE1_WEAPON_RING_EARRING_NECKLACE);
 			item.set.set("type1", L2Item.TYPE1_WEAPON_RING_EARRING_NECKLACE);
 			item.set.set("type2", L2Item.TYPE2_ACCESSORY);
 			item.set.set("type2", L2Item.TYPE2_ACCESSORY);

+ 2 - 0
L2_GameServer/java/net/sf/l2j/gameserver/instancemanager/GrandBossManager.java

@@ -23,6 +23,7 @@ import java.util.logging.Logger;
 
 
 import javolution.util.FastMap;
 import javolution.util.FastMap;
 import net.sf.l2j.L2DatabaseFactory;
 import net.sf.l2j.L2DatabaseFactory;
+import net.sf.l2j.gameserver.datatables.NpcTable;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;
@@ -303,6 +304,7 @@ public class GrandBossManager
 	{
 	{
 		_bossStatus.remove(bossId);
 		_bossStatus.remove(bossId);
 		_bossStatus.put(bossId, status);
 		_bossStatus.put(bossId, status);
+		_log.info(getClass().getSimpleName()+": Updated "+NpcTable.getInstance().getTemplate(bossId).getName()+"(" +bossId+ ") status to " +status);
 	}
 	}
 	
 	
 	/*
 	/*

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

@@ -513,6 +513,19 @@ public class Castle
 						CastleManager.getInstance().removeCirclet(_formerOwner, getCastleId());
 						CastleManager.getInstance().removeCirclet(_formerOwner, getCastleId());
 					}
 					}
 				}
 				}
+				try
+				{
+					L2PcInstance oldleader = oldOwner.getLeader().getPlayerInstance();
+					if (oldleader != null)
+					{
+						if (oldleader.getMountType() == 2)
+							oldleader.dismount();
+					}
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
 				oldOwner.setHasCastle(0); // Unset has castle flag for old owner
 				oldOwner.setHasCastle(0); // Unset has castle flag for old owner
 			}
 			}
 		}
 		}

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

@@ -426,6 +426,19 @@ public class Fort
 		if (getOwnerClan() != null && (clan != null && clan != getOwnerClan()))
 		if (getOwnerClan() != null && (clan != null && clan != getOwnerClan()))
 		{
 		{
 			updateClansReputation(clan, true);
 			updateClansReputation(clan, true);
+			try
+			{
+				L2PcInstance oldleader = getOwnerClan().getLeader().getPlayerInstance();
+				if (oldleader != null)
+				{
+					if (oldleader.getMountType() == 2)
+						oldleader.dismount();
+				}
+			}
+			catch (Exception e)
+			{
+				e.printStackTrace();
+			}
 			removeOwner(true);
 			removeOwner(true);
 		}
 		}
 		setFortState(0, 0); // initialize fort state
 		setFortState(0, 0); // initialize fort state

+ 15 - 6
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinSiege.java

@@ -16,6 +16,7 @@
 package net.sf.l2j.gameserver.network.clientpackets;
 package net.sf.l2j.gameserver.network.clientpackets;
 
 
 import net.sf.l2j.gameserver.instancemanager.CastleManager;
 import net.sf.l2j.gameserver.instancemanager.CastleManager;
+import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.entity.Castle;
 import net.sf.l2j.gameserver.model.entity.Castle;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.SystemMessageId;
@@ -46,15 +47,23 @@ public final class RequestJoinSiege extends L2GameClientPacket
 	protected void runImpl()
 	protected void runImpl()
 	{
 	{
 		L2PcInstance activeChar = getClient().getActiveChar();
 		L2PcInstance activeChar = getClient().getActiveChar();
-		if(activeChar == null) return;
-		if (!activeChar.isClanLeader()) return;
-
+		if (activeChar == null)	return;
+		
+		if ((activeChar.getClanPrivileges() & L2Clan.CP_CS_MANAGE_SIEGE) != L2Clan.CP_CS_MANAGE_SIEGE)
+		{
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
+			return;
+		}
+		
+		L2Clan clan = activeChar.getClan();
+		if (clan == null) return;
+		
 		Castle castle = CastleManager.getInstance().getCastleById(_castleId);
 		Castle castle = CastleManager.getInstance().getCastleById(_castleId);
-		if (castle == null) return;
-
+		if (castle == null)	return;
+		
 		if (_isJoining == 1)
 		if (_isJoining == 1)
 		{
 		{
-			if (System.currentTimeMillis() < activeChar.getClan().getDissolvingExpiryTime())
+			if (System.currentTimeMillis() < clan.getDissolvingExpiryTime())
 			{
 			{
 				activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_PARTICIPATE_IN_SIEGE_WHILE_DISSOLUTION_IN_PROGRESS));
 				activeChar.sendPacket(new SystemMessage(SystemMessageId.CANT_PARTICIPATE_IN_SIEGE_WHILE_DISSOLUTION_IN_PROGRESS));
 				return;
 				return;

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestStartPledgeWar.java

@@ -57,9 +57,9 @@ public final class RequestStartPledgeWar extends L2GameClientPacket
             sm = null;
             sm = null;
             return;
             return;
         }
         }
-        else if (!player.isClanLeader())
+        else if ((player.getClanPrivileges() & L2Clan.CP_CL_PLEDGE_WAR) != L2Clan.CP_CL_PLEDGE_WAR )
         {
         {
-            player.sendMessage("You can't declare war. You are not clan leader.");
+            player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
             player.sendPacket(ActionFailed.STATIC_PACKET);
             player.sendPacket(ActionFailed.STATIC_PACKET);
             return;
             return;
         }
         }

+ 13 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestStopPledgeWar.java

@@ -18,11 +18,13 @@ import java.util.Collection;
 
 
 import net.sf.l2j.gameserver.datatables.ClanTable;
 import net.sf.l2j.gameserver.datatables.ClanTable;
 import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.L2Clan;
+import net.sf.l2j.gameserver.model.L2ClanMember;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
+import net.sf.l2j.gameserver.taskmanager.AttackStanceTaskManager;
 
 
 public final class RequestStopPledgeWar extends L2GameClientPacket
 public final class RequestStopPledgeWar extends L2GameClientPacket
 {
 {
@@ -87,6 +89,17 @@ public final class RequestStopPledgeWar extends L2GameClientPacket
 		//            return;
 		//            return;
 		//        }
 		//        }
 
 
+		for (L2ClanMember member : playerClan.getMembers())
+		{
+			if (member == null || member.getPlayerInstance() == null)
+				continue;
+			if (AttackStanceTaskManager.getInstance().getAttackStanceTask(member.getPlayerInstance()))
+			{
+				player.sendMessage("Cannot cancel war while members are fighting.");
+				return;
+			}
+		}		
+		
 		ClanTable.getInstance().deleteclanswars(playerClan.getClanId(), clan.getClanId());
 		ClanTable.getInstance().deleteclanswars(playerClan.getClanId(), clan.getClanId());
 		Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
 		Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
 		//synchronized (L2World.getInstance().getAllPlayers())
 		//synchronized (L2World.getInstance().getAllPlayers())