123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /*
- * Copyright (C) 2004-2015 L2J DataPack
- *
- * This file is part of L2J DataPack.
- *
- * L2J DataPack 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 DataPack 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 ai.npc.Trainers.HealerTrainer;
- import java.util.Collection;
- import ai.npc.AbstractNpcAI;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
- import com.l2jserver.gameserver.datatables.SkillData;
- import com.l2jserver.gameserver.model.L2SkillLearn;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.base.AcquireSkillType;
- import com.l2jserver.gameserver.model.holders.ItemHolder;
- import com.l2jserver.gameserver.model.skills.Skill;
- import com.l2jserver.gameserver.network.SystemMessageId;
- import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
- /**
- * Trainer healers AI.
- * @author Zoey76
- */
- public final class HealerTrainer extends AbstractNpcAI
- {
- // NPC
- // @formatter:off
- private static final int[] HEALER_TRAINERS =
- {
- 30022, 30030, 30032, 30036, 30067, 30068, 30116, 30117, 30118, 30119,
- 30144, 30145, 30188, 30194, 30293, 30330, 30375, 30377, 30464, 30473,
- 30476, 30680, 30701, 30720, 30721, 30858, 30859, 30860, 30861, 30864,
- 30906, 30908, 30912, 31280, 31281, 31287, 31329, 31330, 31335, 31969,
- 31970, 31976, 32155, 32162
- };
- // @formatter:on
- // Misc
- private static final int MIN_LEVEL = 76;
- private static final int MIN_CLASS_LEVEL = 3;
-
- private HealerTrainer()
- {
- super(HealerTrainer.class.getSimpleName(), "ai/npc/Trainers");
- addStartNpc(HEALER_TRAINERS);
- addTalkId(HEALER_TRAINERS);
- addFirstTalkId(HEALER_TRAINERS);
- }
-
- @Override
- public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
- {
- String htmltext = null;
- switch (event)
- {
- case "30864.html":
- case "30864-1.html":
- {
- htmltext = event;
- break;
- }
- case "SkillTransfer":
- {
- htmltext = "main.html";
- break;
- }
- case "SkillTransferLearn":
- {
- if (!npc.getTemplate().canTeach(player.getClassId()))
- {
- htmltext = npc.getId() + "-noteach.html";
- break;
- }
-
- if ((player.getLevel() < MIN_LEVEL) || (player.getClassId().level() < MIN_CLASS_LEVEL))
- {
- htmltext = "learn-lowlevel.html";
- break;
- }
-
- final AcquireSkillList asl = new AcquireSkillList(AcquireSkillType.TRANSFER);
- int count = 0;
- for (L2SkillLearn skillLearn : SkillTreesData.getInstance().getAvailableTransferSkills(player))
- {
- if (SkillData.getInstance().getSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel()) != null)
- {
- count++;
- asl.addSkill(skillLearn.getSkillId(), skillLearn.getSkillLevel(), skillLearn.getSkillLevel(), skillLearn.getLevelUpSp(), 0);
- }
- }
-
- if (count > 0)
- {
- player.sendPacket(asl);
- }
- else
- {
- player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
- }
- break;
- }
- case "SkillTransferCleanse":
- {
- if (!npc.getTemplate().canTeach(player.getClassId()))
- {
- htmltext = "cleanse-no.html";
- break;
- }
-
- if ((player.getLevel() < MIN_LEVEL) || (player.getClassId().level() < MIN_CLASS_LEVEL))
- {
- htmltext = "cleanse-no.html";
- break;
- }
-
- if (player.getAdena() < Config.FEE_DELETE_TRANSFER_SKILLS)
- {
- player.sendPacket(SystemMessageId.CANNOT_RESET_SKILL_LINK_BECAUSE_NOT_ENOUGH_ADENA);
- break;
- }
-
- if (hasTransferSkillItems(player))
- {
- // Come back when you have used all transfer skill items for this class.
- htmltext = "cleanse-no_skills.html";
- }
- else
- {
- boolean hasSkills = false;
- final Collection<L2SkillLearn> skills = SkillTreesData.getInstance().getTransferSkillTree(player.getClassId()).values();
- for (L2SkillLearn skillLearn : skills)
- {
- final Skill skill = player.getKnownSkill(skillLearn.getSkillId());
- if (skill != null)
- {
- player.removeSkill(skill);
- for (ItemHolder item : skillLearn.getRequiredItems())
- {
- player.addItem("Cleanse", item.getId(), item.getCount(), npc, true);
- }
- hasSkills = true;
- }
- }
-
- // Adena gets reduced once.
- if (hasSkills)
- {
- player.reduceAdena("Cleanse", Config.FEE_DELETE_TRANSFER_SKILLS, npc, true);
- }
- }
- break;
- }
- }
- return htmltext;
- }
-
- /**
- * Verify if the player has the required item.
- * @param player the player to verify
- * @return {@code true} if the player has the item for the current class, {@code false} otherwise
- */
- private static 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);
- }
-
- public static void main(String[] args)
- {
- new HealerTrainer();
- }
- }
|