Переглянути джерело

BETA: Unhardcoding Trainer Healer AI.

Zoey76 12 роки тому
батько
коміт
108ae78c1d

+ 0 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2Object.java

@@ -160,7 +160,6 @@ public abstract class L2Object
 		L2SymbolMakerInstance(L2Npc),
 		L2TeleporterInstance(L2Npc),
 		L2TrainerInstance(L2NpcInstance),
-		L2TrainerHealersInstance(L2TrainerInstance),
 		L2VillageMasterInstance(L2NpcInstance),
 		// Doormens
 		L2DoormenInstance(L2NpcInstance),

+ 4 - 29
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Npc.java

@@ -52,7 +52,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2MerchantInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2TeleporterInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2TrainerHealersInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2TrainerInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2WarehouseInstance;
 import com.l2jserver.gameserver.model.actor.knownlist.NpcKnownList;
@@ -83,54 +82,36 @@ import com.l2jserver.gameserver.network.serverpackets.SocialAction;
 import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
 import com.l2jserver.gameserver.util.Broadcast;
 import com.l2jserver.util.Rnd;
-import com.l2jserver.util.StringUtil;
 
 /**
  * This class represents a Non-Player-Character in the world.<br>
  * It can be a monster or a friendly character.<br>
- * It also uses a template to fetch some static values.<br>
- * The templates are hardcoded in the client, so we can rely on them.<br>
- * L2Npc:
- * <ul>
- * <li>L2Attackable</li>
- * <li>L2BoxInstance</li>
- * </ul>
+ * It uses a template to fetch some static values.
  */
 public class L2Npc extends L2Character
 {
 	/** The interaction distance of the L2NpcInstance(is used as offset in MovetoLocation method) */
 	public static final int INTERACTION_DISTANCE = 150;
-	
 	/** The L2Spawn object that manage this L2NpcInstance */
 	private L2Spawn _spawn;
-	
 	/** The flag to specify if this L2NpcInstance is busy */
 	private boolean _isBusy = false;
-	
 	/** The busy message for this L2NpcInstance */
 	private String _busyMessage = "";
-	
 	/** True if endDecayTask has already been called */
-	volatile boolean _isDecayed = false;
-	
+	private volatile boolean _isDecayed = false;
 	/** The castle index in the array of L2Castle this L2NpcInstance belongs to */
 	private int _castleIndex = -2;
-	
 	/** The fortress index in the array of L2Fort this L2NpcInstance belongs to */
 	private int _fortIndex = -2;
-	
 	private boolean _eventMob = false;
 	private boolean _isInTown = false;
-	
 	/** True if this L2Npc is autoattackable **/
 	private boolean _isAutoAttackable = false;
-	
 	/** Time of last social packet broadcast */
 	private long _lastSocialBroadcast = 0;
-	
 	/** Minimum interval between social packets */
 	private final int _minimalSocialInterval = 6000;
-	
 	/** Support for random animation switching */
 	private boolean _isRandomAnimationEnabled = true;
 	
@@ -145,7 +126,6 @@ public class L2Npc extends L2Character
 	private int _spiritshotamount = 0;
 	private int _displayEffect = 0;
 	private int _scriptVal = 0;
-	
 	/** The character that summons this NPC. */
 	private L2Character _summoner = null;
 	
@@ -184,7 +164,7 @@ public class L2Npc extends L2Character
 	}
 	
 	/**
-	 * @return the primary attack.
+	 * @return the primary attack skill Id
 	 */
 	public int getPrimarySkillId()
 	{
@@ -1700,10 +1680,6 @@ public class L2Npc extends L2Character
 		{
 			html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/warehouse/" + npcId + "-noteach.htm");
 		}
-		else if (this instanceof L2TrainerHealersInstance)
-		{
-			html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/trainer/skilltransfer/" + npcId + "-noteach.htm");
-		}
 		else if (this instanceof L2TrainerInstance)
 		{
 			html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), "data/html/trainer/" + npcId + "-noteach.htm");
@@ -1713,8 +1689,7 @@ public class L2Npc extends L2Character
 		{
 			_log.warning("Npc " + npcId + " missing noTeach html!");
 			NpcHtmlMessage msg = new NpcHtmlMessage(getObjectId());
-			final String sb = StringUtil.concat("<html><body>" + "I cannot teach you any skills.<br>You must find your current class teachers.", "</body></html>");
-			msg.setHtml(sb);
+			msg.setHtml("<html><body>I cannot teach you any skills.<br>You must find your current class teachers.</body></html>");
 			player.sendPacket(msg);
 			return;
 		}

+ 0 - 187
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2TrainerHealersInstance.java

@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2004-2013 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.Collection;
-import java.util.List;
-
-import com.l2jserver.Config;
-import com.l2jserver.gameserver.datatables.SkillTable;
-import com.l2jserver.gameserver.datatables.SkillTreesData;
-import com.l2jserver.gameserver.model.L2SkillLearn;
-import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
-import com.l2jserver.gameserver.model.base.AcquireSkillType;
-import com.l2jserver.gameserver.model.holders.ItemHolder;
-import com.l2jserver.gameserver.model.skills.L2Skill;
-import com.l2jserver.gameserver.network.SystemMessageId;
-import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
-import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
-
-/**
- * @author Zoey76
- */
-public final class L2TrainerHealersInstance extends L2TrainerInstance
-{
-	public L2TrainerHealersInstance(int objectId, L2NpcTemplate template)
-	{
-		super(objectId, template);
-		setInstanceType(InstanceType.L2TrainerHealersInstance);
-	}
-	
-	@Override
-	public String getHtmlPath(int npcId, int val)
-	{
-		String pom = "";
-		if (val == 0)
-		{
-			pom = "" + npcId;
-		}
-		else
-		{
-			pom = npcId + "-" + val;
-		}
-		
-		return "data/html/trainer/skilltransfer/" + pom + ".htm";
-	}
-	
-	@Override
-	public void onBypassFeedback(L2PcInstance player, String command)
-	{
-		final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
-		if (command.equals("SkillTransfer_Learn"))
-		{
-			if (!getTemplate().canTeach(player.getClassId()))
-			{
-				showNoTeachHtml(player);
-				return;
-			}
-			if ((player.getLevel() < 76) || (player.getClassId().level() < 3))
-			{
-				html.setFile(player.getHtmlPrefix(), "data/html/trainer/skilltransfer/learn-lowlevel.htm");
-				player.sendPacket(html);
-				return;
-			}
-			showTransferSkillList(player);
-		}
-		else if (command.equals("SkillTransfer_Cleanse"))
-		{
-			if (!getTemplate().canTeach(player.getClassId()))
-			{
-				html.setFile(player.getHtmlPrefix(), "data/html/trainer/skilltransfer/cleanse-no.htm");
-				player.sendPacket(html);
-				return;
-			}
-			if ((player.getLevel() < 76) || (player.getClassId().level() < 3))
-			{
-				html.setFile(player.getHtmlPrefix(), "data/html/trainer/skilltransfer/cleanse-no.htm");
-				player.sendPacket(html);
-				return;
-			}
-			if (player.getAdena() < Config.FEE_DELETE_TRANSFER_SKILLS)
-			{
-				player.sendPacket(SystemMessageId.CANNOT_RESET_SKILL_LINK_BECAUSE_NOT_ENOUGH_ADENA);
-				return;
-			}
-			
-			boolean hasSkills = false;
-			if (!hasTransferSkillItems(player))
-			{
-				final Collection<L2SkillLearn> skills = SkillTreesData.getInstance().getTransferSkillTree(player.getClassId()).values();
-				for (L2SkillLearn s : skills)
-				{
-					final L2Skill sk = player.getKnownSkill(s.getSkillId());
-					if (sk != null)
-					{
-						player.removeSkill(sk);
-						for (ItemHolder item : s.getRequiredItems())
-						{
-							player.addItem("Cleanse", item.getId(), item.getCount(), this, true);
-						}
-						hasSkills = true;
-					}
-				}
-				
-				// Adena gets reduced once.
-				if (hasSkills)
-				{
-					player.reduceAdena("Cleanse", Config.FEE_DELETE_TRANSFER_SKILLS, this, true);
-				}
-			}
-			else
-			{
-				// Come back when you have used all transfer skill items for this class.
-				html.setFile(player.getHtmlPrefix(), "data/html/trainer/skilltransfer/cleanse-no_skills.htm");
-				player.sendPacket(html);
-			}
-		}
-		else
-		{
-			super.onBypassFeedback(player, command);
-		}
-	}
-	
-	/**
-	 * This displays Transfer Skill List to the player.
-	 * @param player the active character.
-	 */
-	public static void showTransferSkillList(L2PcInstance player)
-	{
-		final List<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableTransferSkills(player);
-		final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.TRANSFER);
-		int count = 0;
-		
-		for (L2SkillLearn s : skills)
-		{
-			if (SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) != null)
-			{
-				count++;
-				asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getLevelUpSp(), 0);
-			}
-		}
-		
-		if (count > 0)
-		{
-			player.sendPacket(asl);
-		}
-		else
-		{
-			player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
-		}
-	}
-	
-	private boolean hasTransferSkillItems(L2PcInstance player)
-	{
-		int itemId;
-		switch (player.getClassId())
-		{
-			case cardinal:
-				itemId = 15307;
-				break;
-			case evaSaint:
-				itemId = 15308;
-				break;
-			case shillienSaint:
-				itemId = 15309;
-				break;
-			default:
-				itemId = -1;
-		}
-		return (player.getInventory().getInventoryItemCount(itemId, -1) > 0);
-	}
-}

+ 3 - 7
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestAcquireSkill.java

@@ -29,7 +29,6 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2FishermanInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.actor.instance.L2TrainerHealersInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2VillageMasterInstance;
 import com.l2jserver.gameserver.model.base.AcquireSkillType;
 import com.l2jserver.gameserver.model.holders.ItemHolder;
@@ -515,16 +514,13 @@ public final class RequestAcquireSkill extends L2GameClientPacket
 	 */
 	private void showSkillList(L2Npc trainer, L2PcInstance player)
 	{
-		if ((_skillType == AcquireSkillType.TRANSFORM) || (_skillType == AcquireSkillType.SUBCLASS))
+		if ((_skillType == AcquireSkillType.TRANSFORM) || (_skillType == AcquireSkillType.SUBCLASS) || (_skillType == AcquireSkillType.TRANSFER))
 		{
 			// Managed in Datapack.
 			return;
 		}
-		if ((trainer instanceof L2TrainerHealersInstance) && (_skillType == AcquireSkillType.TRANSFER))
-		{
-			L2TrainerHealersInstance.showTransferSkillList(player);
-		}
-		else if (trainer instanceof L2FishermanInstance)
+		
+		if (trainer instanceof L2FishermanInstance)
 		{
 			L2FishermanInstance.showFishSkillList(player);
 		}