Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P L2J_Server
- 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,1063 @@
- +/*
- + * 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 com.l2jserver.Config;
- +import com.l2jserver.gameserver.datatables.CharTemplateTable;
- +import com.l2jserver.gameserver.datatables.ClanTable;
- +import com.l2jserver.gameserver.datatables.SkillTreeTable;
- +import com.l2jserver.gameserver.instancemanager.CastleManager;
- +import com.l2jserver.gameserver.instancemanager.FortManager;
- +import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
- +import com.l2jserver.gameserver.instancemanager.SiegeManager;
- +import com.l2jserver.gameserver.model.L2Clan;
- +import com.l2jserver.gameserver.model.L2ClanMember;
- +import com.l2jserver.gameserver.model.L2PledgeSkillLearn;
- +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.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.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)
- + {
- +
- + 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 (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
- + {
- + // 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;
- + }
- +
- + L2PledgeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailablePledgeSkills(player);
- + AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.SkillType.Clan);
- + int counts = 0;
- +
- + for (L2PledgeSkillLearn s: skills)
- + {
- + int cost = s.getRepCost();
- + int itemCount = s.getItemCount();
- + counts++;
- +
- + asl.addSkill(s.getId(), s.getLevel(), s.getLevel(), cost, itemCount);
- + }
- +
- + 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);
- + }
- +
- +}
- \ No newline at end of file
- #P L2J_DataPack
- Index: data/html/default/AIO/SymbolMaker.htm
- ===================================================================
- --- data/html/default/AIO/SymbolMaker.htm (revision 0)
- +++ data/html/default/AIO/SymbolMaker.htm (revision 0)
- @@ -0,0 +1,13 @@
- +<html><body>
- +Hello! Isn't it a beautiful day?<br>
- +Would you like to have a symbol made?<br>
- +Have you brought dye?<br>
- +Symbols are not easily made!<br>
- +You must be certain of what you want before we begin! This is an expensive project and you cannot afford any false starts!<br>
- +Although expensive, if you choose well, your symbol will be a good investment for you, as valuable as an excellent sword or shield!<br><br>
- +<center>
- +<a action="bypass npc_%objectId%_Draw">Draw a symbol.</a><br>
- +<a action="bypass npc_%objectId%_RemoveList">Delete a symbol.</a><br><br>
- +<a action="bypass npc_%objectId%_Multisell 90022">"Buy Dyes"</a>
- +</center>
- +</body></html>
- \ No newline at end of file
- Index: data/scripts/handlers/bypasshandlers/RemoveHennaList.java
- ===================================================================
- --- data/scripts/handlers/bypasshandlers/RemoveHennaList.java (revision 7999)
- +++ data/scripts/handlers/bypasshandlers/RemoveHennaList.java (working copy)
- @@ -17,6 +17,7 @@
- import com.l2jserver.gameserver.handler.IBypassHandler;
- import com.l2jserver.gameserver.model.L2HennaInstance;
- import com.l2jserver.gameserver.model.actor.L2Character;
- +import com.l2jserver.gameserver.model.actor.instance.L2AioNpcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2SymbolMakerInstance;
- import com.l2jserver.gameserver.network.serverpackets.HennaRemoveList;
- @@ -30,7 +31,7 @@
- public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
- {
- - if (!(target instanceof L2SymbolMakerInstance))
- + if (!(target instanceof L2SymbolMakerInstance) && !(target instanceof L2AioNpcInstance))
- return false;
- boolean hasHennas = false;
- Index: data/html/default/AIO/clan.htm
- ===================================================================
- --- data/html/default/AIO/clan.htm (revision 0)
- +++ data/html/default/AIO/clan.htm (revision 0)
- @@ -0,0 +1,64 @@
- +<html><body><title>By L][World</title><br><center>
- +<font color="LEVEL">Clan Manager</font>
- +<td><img src=L2UI_CT1.Button_DF.Icon_DF_MenuWnd_Clan_Over width=34 height=40></td>
- +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
- +<button value="Enter Clan Name" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water"></td>
- +<td><img src=L2UI_CH3.bloodhood_icon01 width=34 height=40></td>
- +<table><tr>
- +<td><edit var="name" width=117></td>
- +<td><button value="Create Clan" action="bypass npc_%objectId%_create_clan $name" width=130 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg"></td>
- +</tr></table>
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Clan Skills" action="bypass npc_%objectId%_learn_clan_skills" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<button value="Increase Clan Level" action="bypass npc_%objectId%_Link default/AIO/clan-1.htm" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<button value="Disband Clan" action="bypass npc_%objectId%_dissolve_clan" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<button value="Restore Clan" action="bypass npc_%objectId%_recover_clan" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Insert the New Leader Name" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water"></td>
- +<td><img src=L2UI_CT1.clan_DF_clanwaricon_bluecrownleader width=32 height=32></td>
- +<table><tr>
- +<td><edit var="leader" width=117 height=18></td>
- +<td><button value="Delegate Clan Leader" action="bypass npc_%objectId%_change_clan_leader $leader" width=130 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg"></td>
- +</tr></table>
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Enter Academy Name" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water"></td>
- +<td><img src=L2UI_CH3.bloodhood_icon02 width=34 height=40></td>
- +<table><tr>
- +<td><edit var="academy" width=117 height=18></td><br>
- +<td><button value="Create Academy" action="bypass npc_%objectId%_create_academy $academy" width=130 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg"></td>
- +</tr></table>
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Enter Royal Guard Unit Name" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water"></td>
- +<td><img src=L2UI_CH3.bloodhood_icon03 width=34 height=40></td>
- +<font color="0077EE">Royal Name | Royal Leader</font>
- +<table><tr>
- +<td><edit var="royalname" width=117></td> <td><edit var="royalleadername" width=117></td>
- +</tr></table><br>
- +<button value="Create Royal Guard Unit" action="bypass npc_%objectId%_create_royal $royalname $royalleadername" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Enter Order of Knights Unit Name" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water"></td>
- +<td><img src=L2UI_CH3.bloodhood_icon04 width=34 height=40></td>
- +<font color="0077EE">Order Name | Order Leader</font>
- +<table><tr>
- +<td><edit var="knightname" width=117></td> <td><edit var="knightleadername" width=117></td>
- +</tr></table><br>
- +<button value="Create Order of Knights Unit" action="bypass npc_%objectId%_create_knight $knightname $knightleadername" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Change Royal/Order Leader" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water"></td>
- +<font color="0077EE"> Unit Name | New Unit Leader</font>
- +<table><tr>
- +<td><edit var="unitname" width=117></td> <td><edit var="unitlnewleader" width=117></td>
- +</tr></table><br>
- +<button value="Delegate Royal/Order Leader" action="bypass npc_%objectId%_assign_subpl_leader $unitname $lunitnewleader" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Water_bg">
- +<img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
- +</tr></table><br>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
- +</tr></table></center><br></body></html>
- Index: data/html/default/AIO/clan-1.htm
- ===================================================================
- --- data/html/default/AIO/clan-1.htm (revision 0)
- +++ data/html/default/AIO/clan-1.htm (revision 0)
- @@ -0,0 +1,47 @@
- +<html><body><title>By L][World</title><br><center>
- +<font color="LEVEL">Clan Manager</font>
- +<td><img src=L2UI_CT1.Button_DF.Icon_DF_MenuWnd_Clan_Over width=34 height=40></td>
- +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
- +<button value="Increase Clan Level" action="bypass npc_%objectId%_increase_clan_level" width=225 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
- +<br><font color="FF6622">Requeriments to Increase Clan Level</font><br>
- +<br><font color="FF9900">Clan Level 1</font><br>
- +<font color="LEVEL">20000 SP + 650000 Adena</font><br>
- +<br><font color="FF9900">Clan Level 2</font><br>
- +<font color="LEVEL">100000 SP + 2500000 Adena</font><br>
- +<br><font color="FF9900">Clan Level 3</font><br>
- +<font color="LEVEL">350000 SP + Blood Mark</font><br>
- +<br><font color="FF9900">Clan Level 4</font><br>
- +<font color="LEVEL"> 1000000 SP + Alliance Manifesto</font><br>
- +<br><font color="FF9900">Clan Level 5</font><br>
- +<font color="LEVEL">2500000 SP + Seal of Aspiration</font><br>
- +<br><font color="FF9900">Clan Level 6</font><br>
- +<font color="LEVEL"> 10000 Clan Fame Points + 30 Clan Members </font><br>
- +<br><font color="FF9900">Clan Level 7</font><br>
- +<font color="LEVEL">20000 Clan Fame Points + 80 Clan Members </font><br>
- +<br><font color="FF9900">Clan Level 8</font><br>
- +<font color="LEVEL"> 40000 Clan Fame Points + 120 Clan Members </font><br>
- +<br><font color="FF9900">Clan Level 9</font><br>
- +<font color="LEVEL">40000 Clan Fame Points + 120 Clan Members </font><br>
- +<font color="LEVEL">+ 150 Blood Oaths</font><br>
- +<br><font color="FF9900">Clan Level 10</font><br>
- +<font color="LEVEL">40000 Clan Fame Points + 140 Clan Members </font><br>
- +<font color="LEVEL">+ 5 Blood Alliances</font><br>
- +<br><font color="FF9900">Clan Level 11</font><br>
- +<font color="LEVEL">75000 Clan Fame Points + 170 Clan Members </font><br>
- +<font color="LEVEL">+ Territory Owner</font>
- +<br><img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
- +<table><tr>
- +<td><img src="L2UI_CH3.shortcut_prev_over" width=16 height=16></td>
- +<td><button value="Back" action="bypass npc_%objectId%_Chat 0" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
- +</tr></table>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
- +</tr></table><br>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
- +</tr></table></center><br></body></html>
- Index: data/scripts/custom/8005_SubClassSkills/__init__.py
- ===================================================================
- --- data/scripts/custom/8005_SubClassSkills/__init__.py (revision 7999)
- +++ data/scripts/custom/8005_SubClassSkills/__init__.py (working copy)
- @@ -15,7 +15,7 @@
- from com.l2jserver.gameserver.util import Util
- qn = "8005_SubClassSkills"
- -NPC=32323
- +NPC=[32323,101010]
- SKILLITEMS=[10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10290,10291,10292,10293,10294,10612]
- SUBSKILLS={
- @@ -164,15 +164,14 @@
- def onTalk (Self,npc,player):
- st = player.getQuestState(qn)
- npcId = npc.getNpcId()
- - if npcId == NPC:
- + if npcId in NPC:
- st.set("cond","0")
- st.setState(State.STARTED)
- return "8005-01.htm"
- QUEST = Quest(-1,qn,"custom")
- -QUEST.addStartNpc(NPC)
- -
- -QUEST.addTalkId(NPC)
- -
- -QUEST.addAcquireSkillId(NPC)
- \ No newline at end of file
- +for item in NPC:
- + QUEST.addStartNpc(item)
- + QUEST.addTalkId(item)
- + QUEST.addAcquireSkillId(item)
- Index: data/scripts/handlers/bypasshandlers/DrawHenna.java
- ===================================================================
- --- data/scripts/handlers/bypasshandlers/DrawHenna.java (revision 7999)
- +++ data/scripts/handlers/bypasshandlers/DrawHenna.java (working copy)
- @@ -17,6 +17,7 @@
- import com.l2jserver.gameserver.datatables.HennaTreeTable;
- import com.l2jserver.gameserver.handler.IBypassHandler;
- import com.l2jserver.gameserver.model.actor.L2Character;
- +import com.l2jserver.gameserver.model.actor.instance.L2AioNpcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2SymbolMakerInstance;
- import com.l2jserver.gameserver.network.serverpackets.HennaEquipList;
- @@ -30,7 +31,7 @@
- public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
- {
- - if (!(target instanceof L2SymbolMakerInstance))
- + if (!(target instanceof L2SymbolMakerInstance) && !(target instanceof L2AioNpcInstance))
- return false;
- activeChar.sendPacket(new HennaEquipList(activeChar, HennaTreeTable.getInstance().getAvailableHenna(activeChar.getClassId())));
- Index: data/html/default/101010.htm
- ===================================================================
- --- data/html/default/101010.htm (revision 0)
- +++ data/html/default/101010.htm (revision 0)
- @@ -0,0 +1,55 @@
- +<html><body>
- +<center>
- +<table><tr>
- +<td><img src="icon.etc_alphabet_a_i00" width=32 height=32></td>
- +<td><img src="icon.etc_alphabet_i_i00" width=32 height=32></td>
- +<td><img src="icon.etc_alphabet_o_i00" width=32 height=32></td>
- +<td width=32 height=32><img src= ></td>
- +<td><img src="icon.etc_alphabet_n_i00" width=32 height=32></td>
- +<td><img src="icon.etc_alphabet_p_i00" width=32 height=32></td>
- +<td><img src="icon.etc_alphabet_c_i00" width=32 height=32></td>
- +</tr></table>
- +<br><br>
- +<tr><td><img src="L2UI.SquareWhite" width=280 height=1></tr></td>
- +<table width=260 bgcolor="000000">
- +<tr>
- +<td><button action="bypass npc_%objectId%_Link merchant/90000.htm" width=32 height=32 back="icon.armor_t98_u_i00" fore="icon.armor_t98_u_i00"></font></td>
- +<td width=80 height=32><font color=ae9977>GMshop</font></td>
- +<td><button action="bypass npc_%objectId%_multisell 90018" width=35 height=35 back="L2UI_CT1.Icon_DF_MenuWnd_Map" fore="L2UI_CT1.Icon_DF_MenuWnd_Map"></font></td>
- +<td width=80 height=32><font color=ae9977>Global Gatekeeper</td>
- +</tr>
- +<tr>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/70020.htm" width=32 height=32 back="icon.skill1389" fore="icon.skill1388"></font></td>
- +<td width=80 height=32><font color=ae9977>Buffer</font></td>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/SymbolMaker.htm" width=32 height=32 back="icon.etc_dex_hena_i02" fore="icon.etc_dex_hena_i02"></font></td>
- +<td width=80 height=32><font color=ae9977>Symbol maker</font></td>
- +</tr>
- +</tr>
- +<tr>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/Augment.htm" width=32 height=32 back="icon.etc_mineral_unique_i03" fore="icon.etc_mineral_unique_i03"></font></td>
- +<td width=80 height=32><font color=ae9977>Augument service</font></td>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/101010-wh.htm" width=35 height=35 back="L2UI_CT1.Icon_DF_MenuWnd_Inventory" fore="L2UI_CT1.Icon_DF_MenuWnd_Inventory"></font></td>
- +<td width=80 height=32><font color=ae9977>Warehouse</font></td>
- +</tr>
- +<tr>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/Subclass.htm" width=35 height=35 back="L2UI_CT1.Icon_DF_MenuWnd_Character" fore="L2UI_CT1.Icon_DF_MenuWnd_Character"></font></td>
- +<td width=80 height=32><font color=ae9977>Subclass</font></td>
- +<td><button action="bypass npc_%objectId%_ReleaseAttribute" width=32 height=32 back="icon.etc_fire_stone_i00" fore="icon.etc_fire_stone_i00"></font></td>
- +<td width=80 height=32><font color=ae9977>Remove Attribute</font></td><
- +</tr>
- +<tr>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/clan.htm" width=35 height=35 back="L2UI_CT1.Icon_DF_MenuWnd_Clan_Over" fore="L2UI_CT1.Icon_DF_MenuWnd_Clan_Over"</td>
- +<td width=80 height=32><font color=ae9977>Clan</font></td>
- +<td><button action="bypass npc_%objectId%_Link default/AIO/ally.htm" width=35 height=35 back="L2UI_CT1.Icon_DF_MenuWnd_Clan_Over" fore="L2UI_CT1.Icon_DF_MenuWnd_Clan_Over"</td>
- +<td width=80 height=32><font color=ae9977>Alliance</font></td>
- +</tr>
- +<tr>
- +<td><button action="bypass npc_%objectId%_Quest 8005_SubClassSkills" width=32 height=32 back="icon.etc_all_subjob_skillbook_i00" fore="icon.etc_all_subjob_skillbook_i00"</td>
- +<td width=80 height=32><font color=ae9977>Subclass Skills</font></td>
- +</tr>
- +</table>
- +<tr><td><img src="L2UI.SquareWhite" width=280 height=1></tr></td>
- +</center>
- +</body>
- +</html>
- +
- Index: data/html/default/AIO/101010-2.htm
- ===================================================================
- --- data/html/default/AIO/101010-2.htm (revision 0)
- +++ data/html/default/AIO/101010-2.htm (revision 0)
- @@ -0,0 +1,7 @@
- +<html><body>Warehouse:<br>
- +<center>
- +<a action="bypass npc_%objectId%_DepositC" msg="1039">Deposit an item. (Clan Warehouse)</a><br>
- +<a action="bypass npc_%objectId%_WithdrawC">Withdraw an item. (Clan Warehouse)</a><br><br>
- +<a action="bypass npc_%objectId%_Chat 0">Return</a>
- +</center>
- +</body></html>
- \ No newline at end of file
- Index: data/html/default/AIO/101010-wh.htm
- ===================================================================
- --- data/html/default/AIO/101010-wh.htm (revision 0)
- +++ data/html/default/AIO/101010-wh.htm (revision 0)
- @@ -0,0 +1,6 @@
- +<html><body>Warehouse:<br>
- +<center>
- +<a action="bypass npc_%objectId%_Link default/AIO/101010-1.htm">Private Warehouse</a><br>
- +<a action="bypass npc_%objectId%_Link default/AIO/101010-2.htm">Clan Warehouse</a><br>
- +</center>
- +</body></html>
- \ No newline at end of file
- Index: data/html/default/AIO/101010-1.htm
- ===================================================================
- --- data/html/default/AIO/101010-1.htm (revision 0)
- +++ data/html/default/AIO/101010-1.htm (revision 0)
- @@ -0,0 +1,7 @@
- +<html><body>Warehouse:<br>
- +<center>
- +<a action="bypass npc_%objectId%_DepositP">Deposit an item. (Private Warehouse)</a><br>
- +<a action="bypass npc_%objectId%_WithdrawP">Withdraw an item. (Private Warehouse)</a><br><br>
- +<a action="bypass npc_%objectId%_Chat 0">Return</a>
- +</center>
- +</body></html>
- \ No newline at end of file
- Index: data/scripts/village_master/9002_SubClassCertification/__init__.py
- ===================================================================
- --- data/scripts/village_master/9002_SubClassCertification/__init__.py (revision 7999)
- +++ data/scripts/village_master/9002_SubClassCertification/__init__.py (working copy)
- @@ -21,7 +21,7 @@
- 31288,31314,31317,31321,31324,31326,31328,31331,31334,31336,31755,31958,31961, \
- 31965,31968,31974,31977,31996,32092,32093,32094,32095,32096,32097,32098,32145, \
- 32146,32147,32150,32153,32154,32157,32158,32160,32171,32193,32199,32202,32213, \
- - 32214,32221,32222,32229,32230,32233,32234]
- + 32214,32221,32222,32229,32230,32233,32234,101010]
- WARRIORCLASSES=[3,88,2,89,46,48,113,114,55,117,56,118,127,131,128,129,132,133]
- ROGUECLASSES=[9,92,24,102,37,109,130,134,8,93,23,101,36,108]
- KNIGHTCLASSES=[5,90,6,91,20,99,33,106]
- Index: data/html/default/AIO/70020.htm
- ===================================================================
- --- data/html/default/AIO/70020.htm (revision 0)
- +++ data/html/default/AIO/70020.htm (revision 0)
- @@ -0,0 +1,23 @@
- +<html><body><title>Buff Master By L][World</title><br><center>
- +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
- +<table><tr>
- +<td><button value="Scheme Buffer" action="bypass npc_%objectId%_showMainWindow" width=176 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Dark" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Dark_bg"></td>
- +</tr></table>
- +<table><tr>
- +<td><button value="Buffs for player" action="bypass npc_%objectId%_Quest 9966_NPCBuffer" width=176 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Dark" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Dark_bg"></td>
- +</tr></table>
- +<table cellspacing="-45"><tr>
- +<td><img src=WarEffectsTextures.FireTexture.jm-fire1 width=320 height=220></td>
- +</tr></table><br>
- +<button value="Buffs for summon" action="bypass npc_%objectId%_Quest 9967_PetBuffer" width=176 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Dark" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Dark_bg"><br><img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
- +</tr></table><br>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
- +</tr></table></center><br></body></html>
- \ No newline at end of file
- Index: data/html/default/AIO/SubClass.htm
- ===================================================================
- --- data/html/default/AIO/SubClass.htm (revision 0)
- +++ data/html/default/AIO/SubClass.htm (revision 0)
- @@ -0,0 +1,6 @@
- +<html><body>Subclass:<br>
- +<a action="bypass npc_%objectId%_Subclass 1">Add subclass.</a><br>
- +<a action="bypass npc_%objectId%_Subclass 2">Change subclass.</a><br>
- +<a action="bypass npc_%objectId%_Subclass 3">Cancel current subclass and change to a new subclass.</a><br>
- +<a action="bypass npc_%objectId%_Quest 9002_SubClassCertification">Subclass skill certification.</a>
- +</body></html>
- \ No newline at end of file
- Index: data/html/default/AIO/Augment.htm
- ===================================================================
- --- data/html/default/AIO/Augment.htm (revision 0)
- +++ data/html/default/AIO/Augment.htm (revision 0)
- @@ -0,0 +1,5 @@
- +<html><body>Augments:<br>
- +<a action="bypass npc_%objectId%_Augment 1">Add an augment.</a><br>
- +<a action="bypass npc_%objectId%_Augment 2">Remove an augment.</a><br>
- +
- +</body></html>
- \ No newline at end of file
- Index: data/html/default/AIO/ally.htm
- ===================================================================
- --- data/html/default/AIO/ally.htm (revision 0)
- +++ data/html/default/AIO/ally.htm (revision 0)
- @@ -0,0 +1,27 @@
- +<html><body><title>By L][World</title><br><center>
- +<font color="LEVEL">Alliance Manager</font>
- +<td><img src=L2UI_CT1.Button_DF.Icon_DF_MenuWnd_Clan_Over width=34 height=40></td>
- +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
- +<button value="Enter Alliance Name" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Wind" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Wind">
- +<table><tr>
- +<td><edit var="name" width=117 height=18></td>
- +<td><button value="Create an Alliance" action="bypass npc_%objectId%_create_ally $name" width=130 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Wind" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Wind_bg"></td>
- +</tr></table>
- +<br><img src="L2UI.SquareGray" width=250 height=1><br>
- +<button value="Dissolve Alliance" action="bypass npc_%objectId%_dissolve_ally" width=255 height=27 back="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Wind" fore="L2UI_CT1.Button_DF.Gauge_DF_Attribute_Wind_bg">
- +<br><img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
- +<table><tr>
- +<td><img src="L2UI_CH3.shortcut_prev_over" width=16 height=16></td>
- +<td><button value="Back" action="bypass npc_%objectId%_Chat 0" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
- +</tr></table>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
- +</tr></table><br>
- +<table cellspacing="-1"><tr>
- +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
- +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
- +</tr></table></center><br></body></html>
- Index: data/scripts/handlers/bypasshandlers/ClanWarehouse.java
- ===================================================================
- --- data/scripts/handlers/bypasshandlers/ClanWarehouse.java (revision 7999)
- +++ data/scripts/handlers/bypasshandlers/ClanWarehouse.java (working copy)
- @@ -19,6 +19,7 @@
- import com.l2jserver.gameserver.model.L2Clan;
- import com.l2jserver.gameserver.model.actor.L2Character;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- +import com.l2jserver.gameserver.model.actor.instance.L2AioNpcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2ClanHallManagerInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.actor.instance.L2WarehouseInstance;
- @@ -42,8 +43,9 @@
- public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
- {
- - if (!(target instanceof L2WarehouseInstance) && !(target instanceof L2ClanHallManagerInstance))
- - return false;
- + if(!(target instanceof L2AioNpcInstance))
- + if (!(target instanceof L2WarehouseInstance) && !(target instanceof L2ClanHallManagerInstance))
- + return false;
- if (activeChar.isEnchanting())
- return false;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement