Bladeren bron

BETA: Core-part for [DP10229].
* Reviewed by: Adry_85, Zoey76

St3eT 11 jaren geleden
bovenliggende
commit
631777305f

+ 3 - 0
L2J_Server_BETA/dist/game/config/FortSiege.properties

@@ -30,6 +30,9 @@ SiegeClanMinLevel = 4
 #Max number of clans that can register on each side.
 AttackerMaxClans = 500
 
+# This option, if enabled, will enable register Fortress Siege to Castle owners just in territory.
+# Default: True
+JustToTerritory = True
 
 # ---------------------------------------------------------------------------
 # Fortress Commander Spawns

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/ClanTable.java

@@ -238,7 +238,7 @@ public class ClanTable
 		{
 			for (FortSiege siege : FortSiegeManager.getInstance().getSieges())
 			{
-				siege.removeSiegeClan(clan);
+				siege.removeAttacker(clan);
 			}
 		}
 		

+ 0 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/enums/InstanceType.java

@@ -82,7 +82,6 @@ public enum InstanceType
 	// Fort NPCs
 	L2FortLogisticsInstance(L2MerchantInstance),
 	L2FortManagerInstance(L2MerchantInstance),
-	L2FortSiegeNpcInstance(L2Npc),
 	// Seven Signs
 	L2SignsPriestInstance(L2Npc),
 	L2DawnPriestInstance(L2SignsPriestInstance),

+ 7 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java

@@ -57,6 +57,7 @@ public final class FortSiegeManager
 	// Fort Siege settings
 	private FastMap<Integer, FastList<FortSiegeSpawn>> _commanderSpawnList;
 	private FastMap<Integer, FastList<CombatFlag>> _flagList;
+	private boolean _justToTerritory = true; // Changeable in fortsiege.properties
 	private int _flagMaxCount = 1; // Changeable in fortsiege.properties
 	private int _siegeClanMinLevel = 4; // Changeable in fortsiege.properties
 	private int _siegeLength = 60; // Time in minute. Changeable in fortsiege.properties
@@ -169,6 +170,7 @@ public final class FortSiegeManager
 		}
 		
 		// Siege setting
+		_justToTerritory = Boolean.parseBoolean(siegeSettings.getProperty("JustToTerritory", "true"));
 		_attackerMaxClans = Integer.decode(siegeSettings.getProperty("AttackerMaxClans", "500"));
 		_flagMaxCount = Integer.decode(siegeSettings.getProperty("MaxFlags", "1"));
 		_siegeClanMinLevel = Integer.decode(siegeSettings.getProperty("SiegeClanMinLevel", "4"));
@@ -266,6 +268,11 @@ public final class FortSiegeManager
 		return _flagMaxCount;
 	}
 	
+	public final boolean canRegisterJustTerritory()
+	{
+		return _justToTerritory;
+	}
+	
 	public final int getSuspiciousMerchantRespawnDelay()
 	{
 		return _suspiciousMerchantRespawnDelay;

+ 0 - 74
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortSiegeNpcInstance.java

@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2004-2014 L2J Server
- * 
- * This file is part of L2J Server.
- * 
- * L2J Server is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J Server is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package com.l2jserver.gameserver.model.actor.instance;
-
-import com.l2jserver.gameserver.enums.InstanceType;
-import com.l2jserver.gameserver.model.actor.L2Npc;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
-import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
-
-/**
- * @author Vice
- */
-public class L2FortSiegeNpcInstance extends L2Npc
-{
-	public L2FortSiegeNpcInstance(int objectID, L2NpcTemplate template)
-	{
-		super(objectID, template);
-		setInstanceType(InstanceType.L2FortSiegeNpcInstance);
-	}
-	
-	@Override
-	public void showChatWindow(L2PcInstance player, int val)
-	{
-		player.sendPacket(ActionFailed.STATIC_PACKET);
-		
-		String filename;
-		
-		if (val == 0)
-		{
-			filename = "data/html/fortress/merchant.htm";
-		}
-		else
-		{
-			filename = "data/html/fortress/merchant-" + val + ".htm";
-		}
-		
-		final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		html.setFile(player.getHtmlPrefix(), filename);
-		html.replace("%objectId%", String.valueOf(getObjectId()));
-		html.replace("%npcId%", String.valueOf(getId()));
-		if (getFort().getOwnerClan() != null)
-		{
-			html.replace("%clanname%", getFort().getOwnerClan().getName());
-		}
-		else
-		{
-			html.replace("%clanname%", "NPC");
-		}
-		player.sendPacket(html);
-	}
-	
-	@Override
-	public boolean hasRandomAnimation()
-	{
-		return false;
-	}
-}

+ 60 - 90
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/FortSiege.java

@@ -38,7 +38,7 @@ import com.l2jserver.gameserver.enums.FortTeleportWhoType;
 import com.l2jserver.gameserver.instancemanager.FortManager;
 import com.l2jserver.gameserver.instancemanager.FortSiegeGuardManager;
 import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
-import com.l2jserver.gameserver.model.ClanPrivilege;
+import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
 import com.l2jserver.gameserver.model.CombatFlag;
 import com.l2jserver.gameserver.model.FortSiegeSpawn;
 import com.l2jserver.gameserver.model.L2Clan;
@@ -718,34 +718,77 @@ public class FortSiege implements Siegable
 	}
 	
 	/**
-	 * Register clan as attacker<BR>
-	 * <BR>
-	 * @param player The L2PcInstance of the player trying to register
-	 * @param force
-	 * @return
+	 * Register clan as attacker.<BR>
+	 * @param player The L2PcInstance of the player trying to register.
+	 * @param checkConditions True if should be checked conditions, false otherwise
+	 * @return Number that defines what happened. <BR>
+	 *         0 - Player dont have clan.<BR>
+	 *         1 - Player dont havee enough adena to register.<BR>
+	 *         2 - Is not right time to register Fortress now.<BR>
+	 *         3 - Players clan is already registred to siege.<BR>
+	 *         4 - Players clan is successfully registred to siege.
 	 */
-	public boolean registerAttacker(L2PcInstance player, boolean force)
+	public int addAttacker(L2PcInstance player, boolean checkConditions)
 	{
 		if (player.getClan() == null)
 		{
-			return false;
+			return 0; // Player dont have clan
 		}
 		
-		if (force || checkIfCanRegister(player))
+		if (checkConditions)
 		{
-			saveSiegeClan(player.getClan()); // Save to database
-			// if the first registering we start the timer
-			if (getAttackerClans().size() == 1)
+			if (getFort().getSiege().getAttackerClans().isEmpty() && (player.getInventory().getAdena() < 250000))
+			{
+				return 1; // Player dont havee enough adena to register
+			}
+			
+			else if ((System.currentTimeMillis() < TerritoryWarManager.getInstance().getTWStartTimeInMillis()) && TerritoryWarManager.getInstance().getIsRegistrationOver())
+			{
+				return 2; // Is not right time to register Fortress now
+			}
+			
+			if ((System.currentTimeMillis() > TerritoryWarManager.getInstance().getTWStartTimeInMillis()) && TerritoryWarManager.getInstance().isTWChannelOpen())
+			{
+				return 2; // Is not right time to register Fortress now
+			}
+			
+			for (Fort fort : FortManager.getInstance().getForts())
 			{
-				if (!force)
+				if (fort.getSiege().getAttackerClan(player.getClanId()) != null)
+				{
+					return 3; // Players clan is already registred to siege
+				}
+				
+				if ((fort.getOwnerClan() == player.getClan()) && (fort.getSiege().getIsInProgress() || (fort.getSiege()._siegeStartTask != null)))
 				{
-					player.reduceAdena("siege", 250000, null, true);
+					return 3; // Players clan is already registred to siege
 				}
-				startAutoTask(true);
 			}
-			return true;
 		}
-		return false;
+		
+		saveSiegeClan(player.getClan());
+		if (getAttackerClans().size() == 1)
+		{
+			if (checkConditions)
+			{
+				player.reduceAdena("FortressSiege", 250000, null, true);
+			}
+			startAutoTask(true);
+		}
+		return 4; // Players clan is successfully registred to siege
+	}
+	
+	/**
+	 * Remove clan from siege<BR>
+	 * @param clan The clan being removed
+	 */
+	public void removeAttacker(L2Clan clan)
+	{
+		if ((clan == null) || (clan.getFortId() == getFort().getResidenceId()) || !FortSiegeManager.getInstance().checkIsRegistered(clan, getFort().getResidenceId()))
+		{
+			return;
+		}
+		removeSiegeClan(clan.getId());
 	}
 	
 	/**
@@ -792,21 +835,6 @@ public class FortSiege implements Siegable
 		}
 	}
 	
-	/**
-	 * Remove clan from siege<BR>
-	 * <BR>
-	 * @param clan The clan being removed
-	 */
-	public void removeSiegeClan(L2Clan clan)
-	{
-		if ((clan == null) || (clan.getFortId() == getFort().getResidenceId()) || !FortSiegeManager.getInstance().checkIsRegistered(clan, getFort().getResidenceId()))
-		{
-			return;
-		}
-		
-		removeSiegeClan(clan.getId());
-	}
-	
 	/**
 	 * Start the auto tasks<BR>
 	 * <BR>
@@ -935,64 +963,6 @@ public class FortSiege implements Siegable
 		getAttackerClans().add(new L2SiegeClan(clanId, SiegeClanType.ATTACKER)); // Add registered attacker to attacker list
 	}
 	
-	/**
-	 * @param player The L2PcInstance of the player trying to register
-	 * @return true if the player can register.
-	 */
-	public boolean checkIfCanRegister(L2PcInstance player)
-	{
-		boolean b = true;
-		if ((player.getClan() == null) || (player.getClan().getLevel() < FortSiegeManager.getInstance().getSiegeClanMinLevel()))
-		{
-			b = false;
-			player.sendMessage("Only clans with Level " + FortSiegeManager.getInstance().getSiegeClanMinLevel() + " and higher may register for a fortress siege.");
-		}
-		else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE))
-		{
-			b = false;
-			player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
-		}
-		else if (player.getClan() == getFort().getOwnerClan())
-		{
-			b = false;
-			player.sendPacket(SystemMessageId.CLAN_THAT_OWNS_CASTLE_IS_AUTOMATICALLY_REGISTERED_DEFENDING);
-		}
-		else if ((getFort().getOwnerClan() != null) && (player.getClan().getCastleId() > 0) && (player.getClan().getCastleId() == getFort().getContractedCastleId()))
-		{
-			b = false;
-			player.sendPacket(SystemMessageId.CANT_REGISTER_TO_SIEGE_DUE_TO_CONTRACT);
-		}
-		else if ((getFort().getTimeTillRebelArmy() > 0) && (getFort().getTimeTillRebelArmy() <= 7200))
-		{
-			b = false;
-			player.sendMessage("You cannot register for the fortress siege 2 hours prior to rebel army attack.");
-		}
-		else if (getFort().getSiege().getAttackerClans().isEmpty() && (player.getInventory().getAdena() < 250000))
-		{
-			b = false;
-			player.sendMessage("You need 250,000 adena to register"); // replace me with html
-		}
-		else
-		{
-			for (Fort fort : FortManager.getInstance().getForts())
-			{
-				if (fort.getSiege().getAttackerClan(player.getClanId()) != null)
-				{
-					b = false;
-					player.sendPacket(SystemMessageId.ALREADY_REQUESTED_SIEGE_BATTLE);
-					break;
-				}
-				if ((fort.getOwnerClan() == player.getClan()) && (fort.getSiege().getIsInProgress() || (fort.getSiege()._siegeStartTask != null)))
-				{
-					b = false;
-					player.sendPacket(SystemMessageId.ALREADY_REQUESTED_SIEGE_BATTLE);
-					break;
-				}
-			}
-		}
-		return b;
-	}
-	
 	/**
 	 * @param clan The L2Clan of the player trying to register
 	 * @return true if the clan has already registered to a siege for the same day.