Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P L2J_Server_BETA
- Index: java/com/l2jserver/gameserver/model/actor/instance/L2AioNpcInstance.java
- ===================================================================
- --- java/com/l2jserver/gameserver/model/actor/instance/L2AioNpcInstance.java (revision 0)
- +++ java/com/l2jserver/gameserver/model/actor/instance/L2AioNpcInstance.java (revision 0)
- @@ -0,0 +1,1289 @@
- +/*
- + * This program 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.
- + *
- + * This program 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.Iterator;
- +import java.util.Set;
- +
- +import javolution.util.FastList;
- +
- +import com.l2jserver.Config;
- +import com.l2jserver.gameserver.datatables.CharTemplateTable;
- +import com.l2jserver.gameserver.datatables.ClanTable;
- +import com.l2jserver.gameserver.datatables.MultiSell;
- +import com.l2jserver.gameserver.datatables.SkillTable;
- +import com.l2jserver.gameserver.datatables.SkillTreesData;
- +import com.l2jserver.gameserver.instancemanager.CastleManager;
- +import com.l2jserver.gameserver.instancemanager.FortManager;
- +import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
- +import com.l2jserver.gameserver.instancemanager.QuestManager;
- +import com.l2jserver.gameserver.instancemanager.SiegeManager;
- +import com.l2jserver.gameserver.model.L2Clan;
- +import com.l2jserver.gameserver.model.L2ClanMember;
- +import com.l2jserver.gameserver.model.L2ItemInstance;
- +import com.l2jserver.gameserver.model.L2Skill;
- +import com.l2jserver.gameserver.model.L2SkillLearn;
- +import com.l2jserver.gameserver.model.L2Clan.SubPledge;
- +import com.l2jserver.gameserver.model.actor.L2Npc;
- +import com.l2jserver.gameserver.model.base.ClassId;
- +import com.l2jserver.gameserver.model.base.PlayerClass;
- +import com.l2jserver.gameserver.model.base.Race;
- +import com.l2jserver.gameserver.model.base.SubClass;
- +import com.l2jserver.gameserver.model.entity.Castle;
- +import com.l2jserver.gameserver.model.entity.Fort;
- +import com.l2jserver.gameserver.model.olympiad.Olympiad;
- +import com.l2jserver.gameserver.model.quest.QuestState;
- +import com.l2jserver.gameserver.network.SystemMessageId;
- +import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
- +import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
- +import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
- +import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
- +import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
- +import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
- +import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
- +import com.l2jserver.gameserver.network.serverpackets.UserInfo;
- +import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList.SkillType;
- +import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
- +import com.l2jserver.gameserver.util.Util;
- +import com.l2jserver.util.StringUtil;
- +
- +public class L2AioNpcInstance extends L2Npc
- +{
- +
- + public L2AioNpcInstance(int objectId, L2NpcTemplate template)
- + {
- + super(objectId, template);
- + setIsInvul(false);
- + }
- +
- + @Override
- + public String getHtmlPath(int npcId, int val)
- + {
- + String pom = "";
- +
- + if (val == 0)
- + pom = "" + npcId;
- + else
- + pom = npcId + "-" + val;
- +
- + return "data/html/default/" + pom + ".htm";
- + }
- +
- + @Override
- + public void onBypassFeedback(L2PcInstance player, String command)
- + {
- + final int[] _itemsIds = { 10280, 10281, 10282, 10283, 10284, 10285, 10286, 10287, 10288, 10289, 10290, 10291, 10292, 10293, 10294, 10612 };
- + final String htmlFolder = "data/html/masterTransformation/";
- + final int feeDeleteSubClassSkills = 10000000;
- + final String[] _questVarNames = { "EmergentAbility65-", "EmergentAbility70-", "ClassAbility75-", "ClassAbility80-" };
- +
- + String[] commandStr = command.split(" ");
- + String actualCommand = commandStr[0]; // Get actual command
- +
- + String cmdParams = "";
- + String cmdParams2 = "";
- +
- + if (commandStr.length >= 2)
- + cmdParams = commandStr[1];
- + if (commandStr.length >= 3)
- + cmdParams2 = commandStr[2];
- +
- + if (command.startsWith("ShowOlyManager"))
- + {
- + String filename = null;
- + if (player.isNoble())
- + filename = Olympiad.OLYMPIAD_HTML_PATH + "noble_main.htm";
- + else
- + filename = "data/html/default/aio/oly/31688.htm";
- + showChatWindow(player, filename);
- + }
- + else if (command.startsWith("ShowOlyMonument"))
- + {
- + String filename = null;
- + if (player.isHero() || player.isNoble())
- + filename = Olympiad.OLYMPIAD_HTML_PATH + "hero_main.htm";
- + else
- + filename = "data/html/default/31690.htm";
- + showChatWindow(player, filename);
- + }
- +
- + else if (actualCommand.equalsIgnoreCase("create_clan"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + ClanTable.getInstance().createClan(player, cmdParams);
- + }
- + else if (actualCommand.equalsIgnoreCase("create_academy"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + createSubPledge(player, cmdParams, null, L2Clan.SUBUNIT_ACADEMY, 5);
- + }
- + else if (actualCommand.equalsIgnoreCase("rename_pledge"))
- + {
- + if (cmdParams.isEmpty() || cmdParams2.isEmpty())
- + return;
- +
- + renameSubPledge(player, Integer.valueOf(cmdParams), cmdParams2);
- + }
- + else if (actualCommand.equalsIgnoreCase("create_royal"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_ROYAL1, 6);
- + }
- + else if (actualCommand.equalsIgnoreCase("create_knight"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_KNIGHT1, 7);
- + }
- + else if (actualCommand.equalsIgnoreCase("assign_subpl_leader"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + assignSubPledgeLeader(player, cmdParams, cmdParams2);
- + }
- + else if (actualCommand.equalsIgnoreCase("create_ally"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + if (player.getClan() == null)
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_CLAN_LEADER_CREATE_ALLIANCE));
- + else
- + player.getClan().createAlly(player, cmdParams);
- + }
- + else if (actualCommand.equalsIgnoreCase("dissolve_ally"))
- + {
- + player.getClan().dissolveAlly(player);
- + }
- + else if (actualCommand.equalsIgnoreCase("dissolve_clan"))
- + {
- + dissolveClan(player, player.getClanId());
- + }
- + else if (actualCommand.equalsIgnoreCase("change_clan_leader"))
- + {
- + if (cmdParams.isEmpty())
- + return;
- +
- + changeClanLeader(player, cmdParams);
- + }
- + else if (actualCommand.equalsIgnoreCase("recover_clan"))
- + {
- + recoverClan(player, player.getClanId());
- + }
- + else if (actualCommand.equalsIgnoreCase("increase_clan_level"))
- + {
- + if (player.getClan().levelUpClan(player))
- + {
- + player.broadcastPacket(new MagicSkillUse(player, 5103, 1, 0, 0));
- + player.broadcastPacket(new MagicSkillLaunched(player, 5103, 1));
- + }
- + }
- + else if (actualCommand.equalsIgnoreCase("learn_clan_skills"))
- + {
- + showPledgeSkillList(player);
- + }
- + else if (command.startsWith("Subclass"))
- + {
- + // Subclasses may not be changed while a skill is in use.
- + if (player.isCastingNow() || player.isAllSkillsDisabled())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SUBCLASS_NO_CHANGE_OR_CREATE_WHILE_SKILL_IN_USE));
- + return;
- + }
- +
- + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- +
- + if (player.getTransformation() != null)
- + {
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_NoTransformed.htm");
- + player.sendPacket(html);
- + return;
- + }
- +
- + int cmdChoice = 0;
- + int paramOne = 0;
- + int paramTwo = 0;
- +
- + try
- + {
- + cmdChoice = Integer.parseInt(command.substring(9, 10).trim());
- +
- + int endIndex = command.indexOf(' ', 11);
- + if (endIndex == -1)
- + endIndex = command.length();
- +
- + paramOne = Integer.parseInt(command.substring(11, endIndex).trim());
- + if (command.length() > endIndex)
- + paramTwo = Integer.parseInt(command.substring(endIndex).trim());
- + }
- + catch (Exception NumberFormatException)
- + {
- + }
- +
- + switch (cmdChoice)
- + {
- + case 0: // Subclass change menu
- + html.setFile(player.getHtmlPrefix(), getSubClassMenu(player.getRace()));
- + break;
- + case 1: // Add Subclass - Initial
- + // Avoid giving player an option to add a new sub class, if they have three already.
- + if (player.getTotalSubClasses() >= Config.MAX_SUBCLASS)
- + {
- + html.setFile(player.getHtmlPrefix(), getSubClassFail());
- + break;
- + }
- +
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Add.htm");
- + final StringBuilder content1 = StringUtil.startAppend(200);
- + Set<PlayerClass> subsAvailable = getAvailableSubClasses(player);
- +
- + if (subsAvailable != null && !subsAvailable.isEmpty())
- + {
- + for (PlayerClass subClass : subsAvailable)
- + {
- + StringUtil.append(content1, "<a action=\"bypass -h npc_%objectId%_Subclass 4 ", String.valueOf(subClass.ordinal()), "\" msg=\"1268;", formatClassForDisplay(subClass), "\">", formatClassForDisplay(subClass), "</a><br>");
- + }
- + }
- + else
- + {
- + // TODO: Retail message
- + player.sendMessage("There are no sub classes available at this time.");
- + return;
- + }
- + html.replace("%list%", content1.toString());
- + break;
- + case 2: // Change Class - Initial
- + if (player.getSubClasses().isEmpty())
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ChangeNo.htm");
- + else
- + {
- + final StringBuilder content2 = StringUtil.startAppend(200);
- +
- + if (checkVillageMaster(player.getBaseClass()))
- + {
- + StringUtil.append(content2, "<a action=\"bypass -h npc_%objectId%_Subclass 5 0\">", CharTemplateTable.getInstance().getClassNameById(player.getBaseClass()), "</a><br>");
- + }
- +
- + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
- + {
- + SubClass subClass = subList.next();
- + if (checkVillageMaster(subClass.getClassDefinition()))
- + {
- + StringUtil.append(content2, "<a action=\"bypass -h npc_%objectId%_Subclass 5 ", String.valueOf(subClass.getClassIndex()), "\">", formatClassForDisplay(subClass.getClassDefinition()), "</a><br>");
- + }
- + }
- +
- + if (content2.length() > 0)
- + {
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Change.htm");
- + html.replace("%list%", content2.toString());
- + }
- + else
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ChangeNotFound.htm");
- + }
- + break;
- + case 3: // Change/Cancel Subclass - Initial
- + if (player.getSubClasses() == null || player.getSubClasses().isEmpty())
- + {
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyEmpty.htm");
- + break;
- + }
- +
- + // custom value
- + if (player.getTotalSubClasses() > 3)
- + {
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyCustom.htm");
- + final StringBuilder content3 = StringUtil.startAppend(200);
- + int classIndex = 1;
- +
- + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
- + {
- + SubClass subClass = subList.next();
- +
- + StringUtil.append(content3, "Sub-class ", String.valueOf(classIndex++), "<br>", "<a action=\"bypass -h npc_%objectId%_Subclass 6 ", String.valueOf(subClass.getClassIndex()), "\">", CharTemplateTable.getInstance().getClassNameById(subClass.getClassId()), "</a><br>");
- + }
- + html.replace("%list%", content3.toString());
- + }
- + else
- + {
- + // retail html contain only 3 subclasses
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Modify.htm");
- + if (player.getSubClasses().containsKey(1))
- + html.replace("%sub1%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(1).getClassId()));
- + else
- + html.replace("<a action=\"bypass -h npc_%objectId%_Subclass 6 1\">%sub1%</a><br>", "");
- +
- + if (player.getSubClasses().containsKey(2))
- + html.replace("%sub2%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(2).getClassId()));
- + else
- + html.replace("<a action=\"bypass -h npc_%objectId%_Subclass 6 2\">%sub2%</a><br>", "");
- +
- + if (player.getSubClasses().containsKey(3))
- + html.replace("%sub3%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(3).getClassId()));
- + else
- + html.replace("<a action=\"bypass -h npc_%objectId%_Subclass 6 3\">%sub3%</a><br>", "");
- + }
- + break;
- + case 4: // Add Subclass - Action (Subclass 4 x[x])
- + /*
- + * If the character is less than level 75 on any of their previously chosen
- + * classes then disallow them to change to their most recently added sub-class choice.
- + */
- +
- + if (!player.getFloodProtectors().getSubclass().tryPerformAction("add subclass"))
- + {
- + _log.warning("Player " + player.getName() + " has performed a subclass change too fast");
- + return;
- + }
- +
- + boolean allowAddition = true;
- +
- + if (player.getTotalSubClasses() >= Config.MAX_SUBCLASS)
- + allowAddition = false;
- +
- + if (player.getLevel() < 75)
- + allowAddition = false;
- +
- + if (allowAddition)
- + {
- + if (!player.getSubClasses().isEmpty())
- + {
- + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
- + {
- + SubClass subClass = subList.next();
- +
- + if (subClass.getLevel() < 75)
- + {
- + allowAddition = false;
- + break;
- + }
- + }
- + }
- + }
- +
- + /*
- + * If quest checking is enabled, verify if the character has completed the Mimir's Elixir (Path to Subclass)
- + * and Fate's Whisper (A Grade Weapon) quests by checking for instances of their unique reward items.
- + *
- + * If they both exist, remove both unique items and continue with adding the sub-class.
- + */
- + if (allowAddition && !Config.ALT_GAME_SUBCLASS_WITHOUT_QUESTS)
- + allowAddition = checkQuests(player);
- +
- + if (allowAddition && isValidNewSubClass(player, paramOne))
- + {
- + if (!player.addSubClass(paramOne, player.getTotalSubClasses() + 1))
- + return;
- +
- + player.setActiveClass(player.getTotalSubClasses());
- +
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_AddOk.htm");
- +
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added.
- + }
- + else
- + html.setFile(player.getHtmlPrefix(), getSubClassFail());
- + break;
- + case 5: // Change Class - Action
- + /*
- + * If the character is less than level 75 on any of their previously chosen
- + * classes then disallow them to change to their most recently added sub-class choice.
- + *
- + * Note: paramOne = classIndex
- + */
- +
- + if (!player.getFloodProtectors().getSubclass().tryPerformAction("change class"))
- + {
- + _log.warning("Player " + player.getName() + " has performed a subclass change too fast");
- + return;
- + }
- +
- + if (player.getClassIndex() == paramOne)
- + {
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Current.htm");
- + break;
- + }
- +
- + if (paramOne == 0)
- + {
- + if (!checkVillageMaster(player.getBaseClass()))
- + return;
- + }
- + else
- + {
- + try
- + {
- + if (!checkVillageMaster(player.getSubClasses().get(paramOne).getClassDefinition()))
- + return;
- + }
- + catch (NullPointerException e)
- + {
- + return;
- + }
- + }
- +
- + player.setActiveClass(paramOne);
- +
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SUBCLASS_TRANSFER_COMPLETED)); // Transfer completed.
- + return;
- + case 6: // Change/Cancel Subclass - Choice
- + // validity check
- + if (paramOne < 1 || paramOne > Config.MAX_SUBCLASS)
- + return;
- +
- + subsAvailable = getAvailableSubClasses(player);
- +
- + // another validity check
- + if (subsAvailable == null || subsAvailable.isEmpty())
- + {
- + // TODO: Retail message
- + player.sendMessage("There are no sub classes available at this time.");
- + return;
- + }
- +
- + final StringBuilder content6 = StringUtil.startAppend(200);
- +
- + for (PlayerClass subClass : subsAvailable)
- + {
- + StringUtil.append(content6, "<a action=\"bypass -h npc_%objectId%_Subclass 7 ", String.valueOf(paramOne), " ", String.valueOf(subClass.ordinal()), "\" msg=\"1445;", "\">", formatClassForDisplay(subClass), "</a><br>");
- + }
- +
- + switch (paramOne)
- + {
- + case 1:
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice1.htm");
- + break;
- + case 2:
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice2.htm");
- + break;
- + case 3:
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice3.htm");
- + break;
- + default:
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice.htm");
- + }
- + html.replace("%list%", content6.toString());
- + break;
- + case 7: // Change Subclass - Action
- + /*
- + * Warning: the information about this subclass will be removed from the
- + * subclass list even if false!
- + */
- +
- + if (!player.getFloodProtectors().getSubclass().tryPerformAction("change class"))
- + {
- + _log.warning("Player " + player.getName() + " has performed a subclass change too fast");
- + return;
- + }
- +
- + if (!isValidNewSubClass(player, paramTwo))
- + return;
- +
- + if (player.modifySubClass(paramOne, paramTwo))
- + {
- + player.abortCast();
- + player.stopAllEffectsExceptThoseThatLastThroughDeath(); // all effects from old subclass stopped!
- + player.stopCubics();
- + player.setActiveClass(paramOne);
- +
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyOk.htm");
- + html.replace("%name%", CharTemplateTable.getInstance().getClassNameById(paramTwo));
- +
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added.
- + }
- + else
- + {
- + /*
- + * This isn't good! modifySubClass() removed subclass from memory
- + * we must update _classIndex! Else IndexOutOfBoundsException can turn
- + * up some place down the line along with other seemingly unrelated
- + * problems.
- + */
- + player.setActiveClass(0); // Also updates _classIndex plus switching _classid to baseclass.
- +
- + player.sendMessage("The sub class could not be added, you have been reverted to your base class.");
- + return;
- + }
- + break;
- + }
- +
- + html.replace("%objectId%", String.valueOf(getObjectId()));
- + player.sendPacket(html);
- + }
- + else if (command.startsWith("LearnSubClassSkill"))
- + {
- + if (player.isSubClassActive())
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008.htm");
- + player.sendPacket(html);
- + }
- + else
- + {
- + boolean hasItems = false;
- + for (int i : _itemsIds)
- + {
- + if (player.getInventory().getItemByItemId(i) != null)
- + {
- + hasItems = true;
- + break;
- + }
- + }
- + if (hasItems)
- + {
- + showSubClassSkillList(player);
- + }
- + else
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008.htm");
- + player.sendPacket(html);
- + }
- + }
- + return;
- + }
- + else if (command.startsWith("CancelCertification"))
- + {
- + final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- + if (player.getSubClasses().size() == 0)
- + {
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation007.htm");
- + }
- + else if (player.isSubClassActive())
- + {
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008.htm");
- + }
- + else if (player.getAdena() < feeDeleteSubClassSkills)
- + {
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation008no.htm");
- + }
- + else
- + {
- + QuestState st = player.getQuestState("SubClassSkills");
- + if (st == null)
- + {
- + st = QuestManager.getInstance().getQuest("SubClassSkills").newQuestState(player);
- + }
- +
- + int activeCertifications = 0;
- + for (String varName : _questVarNames)
- + {
- + for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
- + {
- + String qvar = st.getGlobalQuestVar(varName + i);
- + if (!qvar.isEmpty() && (qvar.endsWith(";") || !qvar.equals("0")))
- + {
- + activeCertifications++;
- + }
- + }
- + }
- + if (activeCertifications == 0)
- + {
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation010no.htm");
- + }
- + else
- + {
- + for (String varName : _questVarNames)
- + {
- + for (int i = 1; i <= Config.MAX_SUBCLASS; i++)
- + {
- + final String qvarName = varName + i;
- + final String qvar = st.getGlobalQuestVar(qvarName);
- + if (qvar.endsWith(";"))
- + {
- + final String skillIdVar = qvar.replace(";", "");
- + if (Util.isDigit(skillIdVar))
- + {
- + int skillId = Integer.parseInt(skillIdVar);
- + final L2Skill sk = SkillTable.getInstance().getInfo(skillId, 1);
- + if (sk != null)
- + {
- + player.removeSkill(sk);
- + st.saveGlobalQuestVar(qvarName, "0");
- + }
- + }
- + else
- + {
- + _log.warning("Invalid Sub-Class Skill Id: " + skillIdVar + " for player " + player.getName() + "!");
- + }
- + }
- + else if (!qvar.isEmpty() && !qvar.equals("0"))
- + {
- + if (Util.isDigit(qvar))
- + {
- + final int itemObjId = Integer.parseInt(qvar);
- + L2ItemInstance itemInstance = player.getInventory().getItemByObjectId(itemObjId);
- + if (itemInstance != null)
- + {
- + player.destroyItem("CancelCertification", itemObjId, 1, player, false);
- + }
- + else
- + {
- + itemInstance = player.getWarehouse().getItemByObjectId(itemObjId);
- + if (itemInstance != null)
- + {
- + _log.warning("Somehow " + player.getName() + " put a certification book into warehouse!");
- + player.getWarehouse().destroyItem("CancelCertification", itemInstance, 1, player, false);
- + }
- + else
- + {
- + _log.warning("Somehow " + player.getName() + " deleted a certification book!");
- + }
- + }
- + st.saveGlobalQuestVar(qvarName, "0");
- + }
- + else
- + {
- + _log.warning("Invalid item object Id: " + qvar + " for player " + player.getName() + "!");
- + }
- + }
- + }
- + }
- + st.takeItems(57, 10000000);
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation009no.htm");
- + player.sendSkillList();
- + }
- +
- + //Let's consume all certification books, even those not present in database.
- + L2ItemInstance itemInstance = null;
- + for (int itemId : _itemsIds)
- + {
- + itemInstance = player.getInventory().getItemByItemId(itemId);
- + if (itemInstance != null)
- + {
- + _log.warning(L2TransformManagerInstance.class.getName() + ": player " + player + " had 'extra' certification skill books while cancelling sub-class certifications!");
- + player.destroyItem("CancelCertificationExtraBooks", itemInstance, this, false);
- + }
- + }
- + }
- + player.sendPacket(html);
- + return;
- + }
- + if (command.startsWith("LearnTransformationSkill"))
- + {
- + if (canTransform(player))
- + {
- + L2TransformManagerInstance.showTransformSkillList(player);
- + }
- + else
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation003.htm");
- + player.sendPacket(html);
- + }
- + return;
- + }
- + else if (command.startsWith("BuyTransformationItems"))
- + {
- + if (canTransform(player))
- + {
- + MultiSell.getInstance().separateAndSend(32323001, player, this, false);
- + }
- + else
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- + html.setFile(player.getHtmlPrefix(), htmlFolder + "master_transformation004.htm");
- + player.sendPacket(html);
- + }
- + return;
- + }
- + else
- + {
- + // this class dont know any other commands, let forward
- + // the command to the parent class
- + super.onBypassFeedback(player, command);
- + }
- + }
- +
- + private String getSubClassMenu(Race pRace)
- + {
- + if (Config.ALT_GAME_SUBCLASS_EVERYWHERE || pRace != Race.Kamael)
- + return "data/html/villagemaster/SubClass.htm";
- +
- + return "data/html/villagemaster/SubClass_NoOther.htm";
- + }
- +
- + private String getSubClassFail()
- + {
- + return "data/html/villagemaster/SubClass_Fail.htm";
- + }
- +
- + private final Set<PlayerClass> getAvailableSubClasses(L2PcInstance player)
- + {
- + // get player base class
- + final int currentBaseId = player.getBaseClass();
- + final ClassId baseCID = ClassId.values()[currentBaseId];
- +
- + // we need 2nd occupation ID
- + final int baseClassId;
- + if (baseCID.level() > 2)
- + baseClassId = baseCID.getParent().ordinal();
- + else
- + baseClassId = currentBaseId;
- +
- + Set<PlayerClass> availSubs = PlayerClass.values()[baseClassId].getAvailableSubclasses(player);
- +
- + if (availSubs != null && !availSubs.isEmpty())
- + {
- + for (Iterator<PlayerClass> availSub = availSubs.iterator(); availSub.hasNext();)
- + {
- + PlayerClass pclass = availSub.next();
- +
- + // check for the village master
- + if (!checkVillageMaster(pclass))
- + {
- + availSub.remove();
- + continue;
- + }
- +
- + // scan for already used subclasses
- + int availClassId = pclass.ordinal();
- + ClassId cid = ClassId.values()[availClassId];
- + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
- + {
- + SubClass prevSubClass = subList.next();
- + ClassId subClassId = ClassId.values()[prevSubClass.getClassId()];
- +
- + if (subClassId.equalsOrChildOf(cid))
- + {
- + availSub.remove();
- + break;
- + }
- + }
- + }
- + }
- +
- + return availSubs;
- + }
- +
- + private static final String formatClassForDisplay(PlayerClass className)
- + {
- + String classNameStr = className.toString();
- + char[] charArray = classNameStr.toCharArray();
- +
- + for (int i = 1; i < charArray.length; i++)
- + {
- + if (Character.isUpperCase(charArray[i]))
- + classNameStr = classNameStr.substring(0, i) + " " + classNameStr.substring(i);
- + }
- +
- + return classNameStr;
- + }
- +
- + private final boolean checkVillageMaster(PlayerClass pclass)
- + {
- + if (Config.ALT_GAME_SUBCLASS_EVERYWHERE)
- + return true;
- +
- + return checkVillageMasterRace(pclass) && checkVillageMasterTeachType(pclass);
- + }
- +
- + private final boolean checkVillageMaster(int classId)
- + {
- + return checkVillageMaster(PlayerClass.values()[classId]);
- + }
- +
- + private static final Iterator<SubClass> iterSubClasses(L2PcInstance player)
- + {
- + return player.getSubClasses().values().iterator();
- + }
- +
- + private boolean checkQuests(L2PcInstance player)
- + {
- + // Noble players can add subbclasses without quests
- + if (player.isNoble())
- + return true;
- +
- + QuestState qs = player.getQuestState("234_FatesWhisper");
- + if (qs == null || !qs.isCompleted())
- + return false;
- +
- + qs = player.getQuestState("235_MimirsElixir");
- + if (qs == null || !qs.isCompleted())
- + return false;
- +
- + return true;
- + }
- +
- + private final boolean isValidNewSubClass(L2PcInstance player, int classId)
- + {
- + if (!checkVillageMaster(classId))
- + return false;
- +
- + final ClassId cid = ClassId.values()[classId];
- + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
- + {
- + SubClass sub = subList.next();
- + ClassId subClassId = ClassId.values()[sub.getClassId()];
- +
- + if (subClassId.equalsOrChildOf(cid))
- + return false;
- + }
- +
- + // get player base class
- + final int currentBaseId = player.getBaseClass();
- + final ClassId baseCID = ClassId.values()[currentBaseId];
- +
- + // we need 2nd occupation ID
- + final int baseClassId;
- + if (baseCID.level() > 2)
- + baseClassId = baseCID.getParent().ordinal();
- + else
- + baseClassId = currentBaseId;
- +
- + Set<PlayerClass> availSubs = PlayerClass.values()[baseClassId].getAvailableSubclasses(player);
- + if (availSubs == null || availSubs.isEmpty())
- + return false;
- +
- + boolean found = false;
- + for (Iterator<PlayerClass> availSub = availSubs.iterator(); availSub.hasNext();)
- + {
- + PlayerClass pclass = availSub.next();
- + if (pclass.ordinal() == classId)
- + {
- + found = true;
- + break;
- + }
- + }
- +
- + return found;
- + }
- +
- + private boolean checkVillageMasterRace(PlayerClass pclass)
- + {
- + return true;
- + }
- +
- + private boolean checkVillageMasterTeachType(PlayerClass pclass)
- + {
- + return true;
- + }
- +
- + private static final void createSubPledge(L2PcInstance player, String clanName, String leaderName, int pledgeType, int minClanLvl)
- + {
- + if (!player.isClanLeader())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- + return;
- + }
- +
- + final L2Clan clan = player.getClan();
- + if (clan.getLevel() < minClanLvl)
- + {
- + if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_MEET_CRITERIA_IN_ORDER_TO_CREATE_A_CLAN_ACADEMY));
- + else
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_MEET_CRITERIA_IN_ORDER_TO_CREATE_A_MILITARY_UNIT));
- +
- + return;
- + }
- + if (!Util.isAlphaNumeric(clanName) || 2 > clanName.length())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_INCORRECT));
- + return;
- + }
- + if (clanName.length() > 16)
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_TOO_LONG));
- + return;
- + }
- +
- + for (L2Clan tempClan : ClanTable.getInstance().getClans())
- + {
- + if (tempClan.getSubPledge(clanName) != null)
- + {
- + if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
- + {
- + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ALREADY_EXISTS);
- + sm.addString(clanName);
- + player.sendPacket(sm);
- + sm = null;
- + }
- + else
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ANOTHER_MILITARY_UNIT_IS_ALREADY_USING_THAT_NAME));
- +
- + return;
- + }
- + }
- +
- + if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
- + {
- + if (clan.getClanMember(leaderName) == null || clan.getClanMember(leaderName).getPledgeType() != 0)
- + {
- + if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED));
- + else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED));
- +
- + return;
- + }
- + }
- +
- + final int leaderId = pledgeType != L2Clan.SUBUNIT_ACADEMY ? clan.getClanMember(leaderName).getObjectId() : 0;
- +
- + if (clan.createSubPledge(player, pledgeType, leaderId, clanName) == null)
- + return;
- +
- + SystemMessage sm;
- + if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
- + {
- + sm = SystemMessage.getSystemMessage(SystemMessageId.THE_S1S_CLAN_ACADEMY_HAS_BEEN_CREATED);
- + sm.addString(player.getClan().getName());
- + }
- + else if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
- + {
- + sm = SystemMessage.getSystemMessage(SystemMessageId.THE_KNIGHTS_OF_S1_HAVE_BEEN_CREATED);
- + sm.addString(player.getClan().getName());
- + }
- + else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
- + {
- + sm = SystemMessage.getSystemMessage(SystemMessageId.THE_ROYAL_GUARD_OF_S1_HAVE_BEEN_CREATED);
- + sm.addString(player.getClan().getName());
- + }
- + else
- + sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_CREATED);
- + player.sendPacket(sm);
- +
- + if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
- + {
- + final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
- + final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
- + if (leaderPlayer != null)
- + {
- + leaderPlayer.setPledgeClass(leaderSubPledge.calculatePledgeClass(leaderPlayer));
- + leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
- + leaderPlayer.sendPacket(new ExBrExtraUserInfo(leaderPlayer));
- + }
- + }
- + }
- +
- + private static final void renameSubPledge(L2PcInstance player, int pledgeType, String pledgeName)
- + {
- + if (!player.isClanLeader())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- + return;
- + }
- +
- + final L2Clan clan = player.getClan();
- + final SubPledge subPledge = player.getClan().getSubPledge(pledgeType);
- +
- + if (subPledge == null)
- + {
- + player.sendMessage("Pledge don't exists.");
- + return;
- + }
- + if (!Util.isAlphaNumeric(pledgeName) || 2 > pledgeName.length())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_INCORRECT));
- + return;
- + }
- + if (pledgeName.length() > 16)
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_TOO_LONG));
- + return;
- + }
- +
- + subPledge.setName(pledgeName);
- + clan.updateSubPledgeInDB(subPledge.getId());
- + clan.broadcastClanStatus();
- + player.sendMessage("Pledge name changed.");
- + }
- +
- + private static final void assignSubPledgeLeader(L2PcInstance player, String clanName, String leaderName)
- + {
- + if (!player.isClanLeader())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- + return;
- + }
- + if (leaderName.length() > 16)
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NAMING_CHARNAME_UP_TO_16CHARS));
- + return;
- + }
- + if (player.getName().equals(leaderName))
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED));
- + return;
- + }
- +
- + final L2Clan clan = player.getClan();
- + final SubPledge subPledge = player.getClan().getSubPledge(clanName);
- +
- + if (null == subPledge || subPledge.getId() == L2Clan.SUBUNIT_ACADEMY)
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_INCORRECT));
- + return;
- + }
- + if (clan.getClanMember(leaderName) == null || (clan.getClanMember(leaderName).getPledgeType() != 0))
- + {
- + if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1)
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED));
- + else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1)
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED));
- +
- + return;
- + }
- +
- + subPledge.setLeaderId(clan.getClanMember(leaderName).getObjectId());
- + clan.updateSubPledgeInDB(subPledge.getId());
- +
- + final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
- + final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
- + if (leaderPlayer != null)
- + {
- + leaderPlayer.setPledgeClass(leaderSubPledge.calculatePledgeClass(leaderPlayer));
- + leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
- + leaderPlayer.sendPacket(new ExBrExtraUserInfo(leaderPlayer));
- + }
- +
- + clan.broadcastClanStatus();
- + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_BEEN_SELECTED_AS_CAPTAIN_OF_S2);
- + sm.addString(leaderName);
- + sm.addString(clanName);
- + clan.broadcastToOnlineMembers(sm);
- + sm = null;
- + }
- +
- + /**
- + * this displays PledgeSkillList to the player.
- + * @param player
- + */
- + private static final void showPledgeSkillList(L2PcInstance player)
- + {
- + if (player.getClan() == null || !player.isClanLeader())
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(1);
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/NotClanLeader.htm");
- + player.sendPacket(html);
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + return;
- + }
- +
- + final FastList<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailablePledgeSkills(player.getClan());
- + final AcquireSkillList asl = new AcquireSkillList(SkillType.Pledge);
- + int counts = 0;
- +
- + for (L2SkillLearn s : skills)
- + {
- + asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), s.getLevelUpSp(), s.getSocialClass());
- + counts++;
- + }
- +
- + if (counts == 0)
- + {
- + if (player.getClan().getLevel() < 8)
- + {
- + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN_S1);
- + if (player.getClan().getLevel() < 5)
- + sm.addNumber(5);
- + else
- + sm.addNumber(player.getClan().getLevel() + 1);
- + player.sendPacket(sm);
- + }
- + else
- + {
- + NpcHtmlMessage html = new NpcHtmlMessage(1);
- + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/NoMoreSkills.htm");
- + player.sendPacket(html);
- + }
- + }
- + else
- + {
- + player.sendPacket(asl);
- + }
- + player.sendPacket(ActionFailed.STATIC_PACKET);
- + }
- +
- + private static final void dissolveClan(L2PcInstance player, int clanId)
- + {
- + if (!player.isClanLeader())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- + return;
- + }
- +
- + final L2Clan clan = player.getClan();
- + if (clan.getAllyId() != 0)
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISPERSE_THE_CLANS_IN_ALLY));
- + return;
- + }
- + if (clan.isAtWar())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_WAR));
- + return;
- + }
- + if (clan.getHasCastle() != 0 || clan.getHasHideout() != 0 || clan.getHasFort() != 0)
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_OWNING_CLAN_HALL_OR_CASTLE));
- + return;
- + }
- +
- + for (Castle castle : CastleManager.getInstance().getCastles())
- + {
- + if (SiegeManager.getInstance().checkIsRegistered(clan, castle.getCastleId()))
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE));
- + return;
- + }
- + }
- + for (Fort fort : FortManager.getInstance().getForts())
- + {
- + if (FortSiegeManager.getInstance().checkIsRegistered(clan, fort.getFortId()))
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE));
- + return;
- + }
- + }
- +
- + if (player.isInsideZone(L2PcInstance.ZONE_SIEGE))
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE));
- + return;
- + }
- + if (clan.getDissolvingExpiryTime() > System.currentTimeMillis())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.DISSOLUTION_IN_PROGRESS));
- + return;
- + }
- +
- + clan.setDissolvingExpiryTime(System.currentTimeMillis() + Config.ALT_CLAN_DISSOLVE_DAYS * 86400000L); //24*60*60*1000 = 86400000
- + clan.updateClanInDB();
- +
- + ClanTable.getInstance().scheduleRemoveClan(clan.getClanId());
- +
- + player.sendMessage("Your clan will be dissolved after " + Config.ALT_CLAN_DISSOLVE_DAYS + " days");
- +
- + // The clan leader should take the XP penalty of a full death.
- + player.deathPenalty(false, false, false);
- + }
- +
- + private static final void recoverClan(L2PcInstance player, int clanId)
- + {
- + if (!player.isClanLeader())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- + return;
- + }
- +
- + final L2Clan clan = player.getClan();
- + clan.setDissolvingExpiryTime(0);
- + clan.updateClanInDB();
- +
- + player.sendMessage("Your clan deletion has been canceled");
- + }
- +
- + private static final void changeClanLeader(L2PcInstance player, String target)
- + {
- + if (!player.isClanLeader())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
- + return;
- + }
- + if (player.getName().equalsIgnoreCase(target))
- + return;
- + /*
- + * Until proper clan leader change support is done, this is a little
- + * exploit fix (leader, while fliying wyvern changes clan leader and the new leader
- + * can ride the wyvern too)
- + * DrHouse
- + */
- + if (player.isFlying())
- + {
- + player.sendMessage("Please, stop flying");
- + return;
- + }
- +
- + final L2Clan clan = player.getClan();
- +
- + final L2ClanMember member = clan.getClanMember(target);
- + if (member == null)
- + {
- + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DOES_NOT_EXIST);
- + sm.addString(target);
- + player.sendPacket(sm);
- + sm = null;
- + return;
- + }
- + if (!member.isOnline())
- + {
- + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INVITED_USER_NOT_ONLINE));
- + return;
- + }
- + clan.setNewLeader(member);
- + }
- +
- + public static void showSubClassSkillList(L2PcInstance player)
- + {
- + final FastList<L2SkillLearn> subClassSkills = SkillTreesData.getInstance().getAvailableSubClassSkills(player);
- + final AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.SkillType.SubClass);
- + int count = 0;
- +
- + for (L2SkillLearn s : subClassSkills)
- + {
- + final L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
- + if (sk != null)
- + {
- + count++;
- + asl.addSkill(s.getSkillId(), s.getSkillLevel(), s.getSkillLevel(), 0, 0);
- + }
- + }
- + if (count > 0)
- + {
- + player.sendPacket(asl);
- + }
- + else
- + {
- + player.sendPacket(SystemMessageId.NO_MORE_SKILLS_TO_LEARN);
- + }
- + }
- +
- + private static boolean canTransform(L2PcInstance player)
- + {
- + if (Config.ALLOW_TRANSFORM_WITHOUT_QUEST)
- + {
- + return true;
- + }
- + final QuestState st = player.getQuestState("136_MoreThanMeetsTheEye");
- + if ((st != null) && st.isCompleted())
- + {
- + return true;
- + }
- + return false;
- + }
- +
- + public void showChatWindow(L2PcInstance player, int val, String suffix)
- + {
- + String filename = Olympiad.OLYMPIAD_HTML_PATH;
- +
- + filename += "noble_desc" + val;
- + filename += (suffix != null) ? suffix + ".htm" : ".htm";
- +
- + if (filename.equals(Olympiad.OLYMPIAD_HTML_PATH + "noble_desc0.htm"))
- + filename = Olympiad.OLYMPIAD_HTML_PATH + "noble_main.htm";
- +
- + showChatWindow(player, filename);
- + }
- +}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement