Browse Source

BETA: Core-Part for ​[DP10193].
* Reviewed by: Nos, !UnAfraid, Adry_85, malyelfik

St3eT 11 years ago
parent
commit
c81cad9616

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

@@ -82,14 +82,11 @@ public enum InstanceType
 	L2SiegeNpcInstance(L2Npc),
 	// Fort Siege
 	L2FortCommanderInstance(L2DefenderInstance),
-	// Castle NPCs
-	L2CastleMagicianInstance(L2NpcInstance),
 	// Fort NPCs
 	L2FortEnvoyInstance(L2Npc),
 	L2FortLogisticsInstance(L2MerchantInstance),
 	L2FortManagerInstance(L2MerchantInstance),
 	L2FortSiegeNpcInstance(L2Npc),
-	L2FortSupportCaptainInstance(L2MerchantInstance),
 	// Seven Signs
 	L2SignsPriestInstance(L2Npc),
 	L2DawnPriestInstance(L2SignsPriestInstance),

+ 0 - 29
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2SquadTrainer.java

@@ -1,29 +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;
-
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-
-/**
- * @author JIV
- */
-public interface L2SquadTrainer
-{
-	public void showSubUnitSkillList(L2PcInstance player);
-}

+ 0 - 239
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2FortSupportCaptainInstance.java

@@ -1,239 +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 java.util.List;
-import java.util.StringTokenizer;
-
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.datatables.SkillTreesData;
-import com.l2jserver.gameserver.enums.InstanceType;
-import com.l2jserver.gameserver.model.L2SkillLearn;
-import com.l2jserver.gameserver.model.L2SquadTrainer;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.base.AcquireSkillType;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
-import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
-import com.l2jserver.util.Rnd;
-
-/**
- * @author Vice
- */
-public class L2FortSupportCaptainInstance extends L2MerchantInstance implements L2SquadTrainer
-{
-	public L2FortSupportCaptainInstance(int objectID, L2NpcTemplate template)
-	{
-		super(objectID, template);
-		setInstanceType(InstanceType.L2FortSupportCaptainInstance);
-	}
-	
-	private static final int[] TalismanIds =
-	{
-		9914,
-		9915,
-		9917,
-		9918,
-		9919,
-		9920,
-		9921,
-		9922,
-		9923,
-		9924,
-		9926,
-		9927,
-		9928,
-		9930,
-		9931,
-		9932,
-		9933,
-		9934,
-		9935,
-		9936,
-		9937,
-		9938,
-		9939,
-		9940,
-		9941,
-		9942,
-		9943,
-		9944,
-		9945,
-		9946,
-		9947,
-		9948,
-		9949,
-		9950,
-		9951,
-		9952,
-		9953,
-		9954,
-		9955,
-		9956,
-		9957,
-		9958,
-		9959,
-		9960,
-		9961,
-		9962,
-		9963,
-		9964,
-		9965,
-		9966,
-		10141,
-		10142,
-		10158
-	};
-	
-	@Override
-	public void onBypassFeedback(L2PcInstance player, String command)
-	{
-		// BypassValidation Exploit plug.
-		if (player.getLastFolkNPC().getObjectId() != getObjectId())
-		{
-			return;
-		}
-		
-		StringTokenizer st = new StringTokenizer(command, " ");
-		String actualCommand = st.nextToken(); // Get actual command
-		
-		String par = "";
-		if (st.countTokens() >= 1)
-		{
-			par = st.nextToken();
-		}
-		
-		if (actualCommand.equalsIgnoreCase("Chat"))
-		{
-			int val = 0;
-			try
-			{
-				val = Integer.parseInt(par);
-			}
-			catch (IndexOutOfBoundsException ioobe)
-			{
-			}
-			catch (NumberFormatException nfe)
-			{
-			}
-			showMessageWindow(player, val);
-		}
-		else if (actualCommand.equalsIgnoreCase("ExchangeKE"))
-		{
-			final int itemId = TalismanIds[Rnd.get(TalismanIds.length)];
-			if (player.exchangeItemsById("FortSupportUnitExchangeKE", this, 9912, 10, itemId, 1, true))
-			{
-				showChatWindow(player, "data/html/fortress/supportunit-talisman.htm");
-			}
-			else
-			{
-				showChatWindow(player, "data/html/fortress/supportunit-noepau.htm");
-			}
-		}
-		else if (command.equals("subskills"))
-		{
-			if (player.isClanLeader())
-			{
-				final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSubPledgeSkills(player.getClan());
-				final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SUBPLEDGE);
-				int count = 0;
-				
-				for (L2SkillLearn s : skills)
-				{
-					if (SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) != null)
-					{
-						asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getLevelUpSp(), 0);
-						count++;
-					}
-				}
-				
-				if (count == 0)
-				{
-					player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
-				}
-				else
-				{
-					player.sendPacket(asl);
-				}
-			}
-			else
-			{
-				showChatWindow(player, "data/html/fortress/supportunit-nosquad.htm");
-			}
-		}
-		else
-		{
-			super.onBypassFeedback(player, command);
-		}
-	}
-	
-	@Override
-	public void showChatWindow(L2PcInstance player)
-	{
-		if ((player.getClan() == null) || (getFort().getOwnerClan() == null) || (player.getClan() != getFort().getOwnerClan()))
-		{
-			final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-			html.setFile(player.getHtmlPrefix(), "data/html/fortress/supportunit-noclan.htm");
-			html.replace("%objectId%", String.valueOf(getObjectId()));
-			player.sendPacket(html);
-			return;
-		}
-		showMessageWindow(player, 0);
-	}
-	
-	private void showMessageWindow(L2PcInstance player, int val)
-	{
-		String filename;
-		
-		if (val == 0)
-		{
-			filename = "data/html/fortress/supportunit.htm";
-		}
-		else
-		{
-			filename = "data/html/fortress/supportunit-" + 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;
-	}
-	
-	@Override
-	public void showSubUnitSkillList(L2PcInstance player)
-	{
-		onBypassFeedback(player, "subskills");
-	}
-}

+ 66 - 41
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkill.java

@@ -18,15 +18,17 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import java.util.List;
+
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SkillTreesData;
 import com.l2jserver.gameserver.enums.IllegalActionPunishmentType;
 import com.l2jserver.gameserver.enums.QuestEventType;
 import com.l2jserver.gameserver.instancemanager.QuestManager;
+import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2SkillLearn;
-import com.l2jserver.gameserver.model.L2SquadTrainer;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2FishermanInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
@@ -41,6 +43,7 @@ import com.l2jserver.gameserver.model.quest.QuestState;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.AcquireSkillDone;
+import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
 import com.l2jserver.gameserver.network.serverpackets.ExStorageMaxCount;
 import com.l2jserver.gameserver.network.serverpackets.PledgeSkillList;
 import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
@@ -224,7 +227,7 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 			}
 			case SUBPLEDGE:
 			{
-				if (!activeChar.isClanLeader())
+				if (!activeChar.isClanLeader() || !activeChar.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME))
 				{
 					return;
 				}
@@ -235,51 +238,48 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 					return;
 				}
 				
-				if (trainer instanceof L2SquadTrainer)
+				// Hack check. Check if SubPledge can accept the new skill:
+				if (!clan.isLearnableSubPledgeSkill(skill, _subType))
 				{
-					// Hack check. Check if SubPledge can accept the new skill:
-					if (!clan.isLearnableSubPledgeSkill(skill, _subType))
-					{
-						activeChar.sendPacket(SystemMessageId.SQUAD_SKILL_ALREADY_ACQUIRED);
-						Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " is requesting skill Id: " + _id + " level " + _level + " without knowing it's previous level!", IllegalActionPunishmentType.NONE);
-						return;
-					}
-					
-					int rep = s.getLevelUpSp();
-					if (clan.getReputationScore() < rep)
+					activeChar.sendPacket(SystemMessageId.SQUAD_SKILL_ALREADY_ACQUIRED);
+					Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " is requesting skill Id: " + _id + " level " + _level + " without knowing it's previous level!", IllegalActionPunishmentType.NONE);
+					return;
+				}
+				
+				final int repCost = s.getLevelUpSp();
+				if (clan.getReputationScore() < repCost)
+				{
+					activeChar.sendPacket(SystemMessageId.ACQUIRE_SKILL_FAILED_BAD_CLAN_REP_SCORE);
+					return;
+				}
+				
+				for (ItemHolder item : s.getRequiredItems())
+				{
+					if (!activeChar.destroyItemByItemId("SubSkills", item.getId(), item.getCount(), trainer, false))
 					{
-						activeChar.sendPacket(SystemMessageId.ACQUIRE_SKILL_FAILED_BAD_CLAN_REP_SCORE);
+						activeChar.sendPacket(SystemMessageId.ITEM_OR_PREREQUISITES_MISSING_TO_LEARN_SKILL);
 						return;
 					}
 					
-					for (ItemHolder item : s.getRequiredItems())
-					{
-						if (!activeChar.destroyItemByItemId("SubSkills", item.getId(), item.getCount(), trainer, false))
-						{
-							activeChar.sendPacket(SystemMessageId.ITEM_OR_PREREQUISITES_MISSING_TO_LEARN_SKILL);
-							return;
-						}
-						
-						final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
-						sm.addItemName(item.getId());
-						sm.addLong(item.getCount());
-						activeChar.sendPacket(sm);
-					}
-					
-					if (rep > 0)
-					{
-						clan.takeReputationScore(rep, true);
-						final SystemMessage cr = SystemMessage.getSystemMessage(SystemMessageId.S1_DEDUCTED_FROM_CLAN_REP);
-						cr.addInt(rep);
-						activeChar.sendPacket(cr);
-					}
-					
-					clan.addNewSkill(skill, _subType);
-					clan.broadcastToOnlineMembers(new PledgeSkillList(clan));
-					activeChar.sendPacket(new AcquireSkillDone());
-					
-					((L2SquadTrainer) trainer).showSubUnitSkillList(activeChar);
+					final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
+					sm.addItemName(item.getId());
+					sm.addLong(item.getCount());
+					activeChar.sendPacket(sm);
 				}
+				
+				if (repCost > 0)
+				{
+					clan.takeReputationScore(repCost, true);
+					final SystemMessage cr = SystemMessage.getSystemMessage(SystemMessageId.S1_DEDUCTED_FROM_CLAN_REP);
+					cr.addInt(repCost);
+					activeChar.sendPacket(cr);
+				}
+				
+				clan.addNewSkill(skill, _subType);
+				clan.broadcastToOnlineMembers(new PledgeSkillList(clan));
+				activeChar.sendPacket(new AcquireSkillDone());
+				
+				showSUbUnitSkillList(activeChar);
 				break;
 			}
 			case TRANSFER:
@@ -376,6 +376,31 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 		}
 	}
 	
+	public static void showSUbUnitSkillList(L2PcInstance activeChar)
+	{
+		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSubPledgeSkills(activeChar.getClan());
+		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.SUBPLEDGE);
+		int count = 0;
+		
+		for (L2SkillLearn s : skills)
+		{
+			if (SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) != null)
+			{
+				asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getLevelUpSp(), 0);
+				++count;
+			}
+		}
+		
+		if (count == 0)
+		{
+			activeChar.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
+		}
+		else
+		{
+			activeChar.sendPacket(asl);
+		}
+	}
+	
 	/**
 	 * Perform a simple check for current player and skill.<br>
 	 * Takes the needed SP if the skill require it and all requirements are meet.<br>

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkillInfo.java

@@ -20,8 +20,8 @@ package com.l2jserver.gameserver.network.clientpackets;
 
 import com.l2jserver.gameserver.datatables.SkillTable;
 import com.l2jserver.gameserver.datatables.SkillTreesData;
+import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.L2SkillLearn;
-import com.l2jserver.gameserver.model.L2SquadTrainer;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -133,7 +133,7 @@ public final class RequestAcquireSkillInfo extends L2GameClientPacket
 			}
 			case SUBPLEDGE:
 			{
-				if (!activeChar.isClanLeader() || !(trainer instanceof L2SquadTrainer))
+				if (!activeChar.isClanLeader() || !activeChar.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME))
 				{
 					return;
 				}