private static final void changeClanLeader(L2PcInstance player, String target) { if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(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 = new SystemMessage(SystemMessageId.S1_DOES_NOT_EXIST); sm.addString(target); player.sendPacket(sm); sm = null; return; } if (!member.isOnline()) { player.sendPacket(new SystemMessage(SystemMessageId.INVITED_USER_NOT_ONLINE)); return; } clan.setNewLeader(member); }
private static final void assignSubPledgeLeader( L2PcInstance player, String clanName, String leaderName) { if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } if (leaderName.length() > 16) { player.sendPacket(new SystemMessage(SystemMessageId.NAMING_CHARNAME_UP_TO_16CHARS)); return; } if (player.getName().equals(leaderName)) { player.sendPacket( new SystemMessage(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(new SystemMessage(SystemMessageId.CLAN_NAME_INCORRECT)); return; } if (clan.getClanMember(leaderName) == null || (clan.getClanMember(leaderName).getPledgeType() != 0)) { if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1) player.sendPacket( new SystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED)); else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1) player.sendPacket( new SystemMessage(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 = new SystemMessage(SystemMessageId.C1_HAS_BEEN_SELECTED_AS_CAPTAIN_OF_S2); sm.addString(leaderName); sm.addString(clanName); clan.broadcastToOnlineMembers(sm); sm = null; }
public void recoverClan(L2PcInstance player, int clanId) { if (Config.DEBUG) { _log.info( player.getObjectId() + "(" + player.getName() + ") requested recover a clan from " + getObjectId() + "(" + getName() + ")"); } if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } L2Clan clan = player.getClan(); clan.setDissolvingExpiryTime(0); clan.updateClanInDB(); clan = null; }
public void assignSubPledgeLeader(L2PcInstance player, String clanName, String leaderName) { if (Config.DEBUG) { _log.info( player.getObjectId() + "(" + player.getName() + ") requested to assign sub clan" + clanName + "leader " + "(" + leaderName + ")"); } if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } if (leaderName.length() > 16) { player.sendPacket(new SystemMessage(SystemMessageId.NAMING_CHARNAME_UP_TO_16CHARS)); return; } if (player.getName().equals(leaderName)) { player.sendPacket( new SystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED)); return; } L2Clan clan = player.getClan(); SubPledge subPledge = player.getClan().getSubPledge(clanName); if (null == subPledge) { player.sendPacket(new SystemMessage(SystemMessageId.CLAN_NAME_INCORRECT)); return; } if (subPledge.getId() == L2Clan.SUBUNIT_ACADEMY) { player.sendPacket(new SystemMessage(SystemMessageId.CLAN_NAME_INCORRECT)); return; } if (clan.getClanMember(leaderName) == null || clan.getClanMember(leaderName).getPledgeType() != 0) { if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1) { player.sendPacket( new SystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED)); } else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1) { player.sendPacket( new SystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED)); } return; } L2ClanMember leaderSubPledge = clan.getClanMember(leaderName); subPledge.setLeaderId(leaderSubPledge.getObjectId()); clan.updateSubPledgeInDB(subPledge.getId()); L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance(); if (leaderPlayer != null) { leaderPlayer.setPledgeClass(leaderSubPledge.calculatePledgeClass(leaderPlayer)); leaderPlayer.sendPacket(new UserInfo(leaderPlayer)); } clan.broadcastClanStatus(); SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_BEEN_SELECTED_AS_CAPTAIN_OF_S2); sm.addString(leaderName); sm.addString(clanName); clan.broadcastToOnlineMembers(sm); sm = null; clan = null; subPledge = null; leaderPlayer = null; leaderSubPledge = null; }
public void createSubPledge( L2PcInstance player, String clanName, String leaderName, int pledgeType, int minClanLvl) { if (Config.DEBUG) { _log.info( player.getObjectId() + "(" + player.getName() + ") requested sub clan creation from " + getObjectId() + "(" + getName() + ")"); } if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } L2Clan clan = player.getClan(); if (clan.getLevel() < minClanLvl) { if (pledgeType == L2Clan.SUBUNIT_ACADEMY) { player.sendPacket( new SystemMessage( SystemMessageId.YOU_DO_NOT_MEET_CRITERIA_IN_ORDER_TO_CREATE_A_CLAN_ACADEMY)); } else { player.sendPacket( new SystemMessage( SystemMessageId.YOU_DO_NOT_MEET_CRITERIA_IN_ORDER_TO_CREATE_A_MILITARY_UNIT)); } return; } if (!Util.isAlphaNumeric(clanName) || 2 > clanName.length()) { player.sendPacket(new SystemMessage(SystemMessageId.CLAN_NAME_INCORRECT)); return; } if (clanName.length() > 16) { player.sendPacket(new SystemMessage(SystemMessageId.CLAN_NAME_TOO_LONG)); return; } for (L2Clan tempClan : ClanTable.getInstance().getClans()) { if (tempClan.getSubPledge(clanName) != null) { if (pledgeType == L2Clan.SUBUNIT_ACADEMY) { SystemMessage sm = new SystemMessage(SystemMessageId.S1_ALREADY_EXISTS); sm.addString(clanName); player.sendPacket(sm); sm = null; } else { player.sendPacket( new SystemMessage(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( new SystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED)); } else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1) { player.sendPacket( new SystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED)); } return; } int leaderId = clan.getClanMember(leaderName) != null ? clan.getClanMember(leaderName).getObjectId() : 0; if (clan.createSubPledge(player, pledgeType, leaderId, clanName) == null) return; SystemMessage sm; if (pledgeType == L2Clan.SUBUNIT_ACADEMY) { sm = new SystemMessage(SystemMessageId.THE_S1S_CLAN_ACADEMY_HAS_BEEN_CREATED); sm.addString(player.getClan().getName()); } else if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1) { sm = new SystemMessage(SystemMessageId.THE_KNIGHTS_OF_S1_HAVE_BEEN_CREATED); sm.addString(player.getClan().getName()); } else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1) { sm = new SystemMessage(SystemMessageId.THE_ROYAL_GUARD_OF_S1_HAVE_BEEN_CREATED); sm.addString(player.getClan().getName()); } else { sm = new SystemMessage(SystemMessageId.CLAN_CREATED); } player.sendPacket(sm); if (pledgeType != L2Clan.SUBUNIT_ACADEMY) { L2ClanMember leaderSubPledge = clan.getClanMember(leaderName); if (leaderSubPledge.getPlayerInstance() == null) return; leaderSubPledge .getPlayerInstance() .setPledgeClass( leaderSubPledge.calculatePledgeClass(leaderSubPledge.getPlayerInstance())); leaderSubPledge .getPlayerInstance() .sendPacket(new UserInfo(leaderSubPledge.getPlayerInstance())); } clan = null; sm = null; }
@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]; } commandStr = null; if (actualCommand.equalsIgnoreCase("create_clan")) { if (cmdParams.equals("")) return; ClanTable.getInstance().createClan(player, cmdParams); } else if (actualCommand.equalsIgnoreCase("create_academy")) { if (cmdParams.equals("")) return; createSubPledge(player, cmdParams, null, L2Clan.SUBUNIT_ACADEMY, 5); } else if (actualCommand.equalsIgnoreCase("create_royal")) { if (cmdParams.equals("")) return; createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_ROYAL1, 6); } else if (actualCommand.equalsIgnoreCase("create_knight")) { if (cmdParams.equals("")) return; createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_KNIGHT1, 7); } else if (actualCommand.equalsIgnoreCase("assign_subpl_leader")) { if (cmdParams.equals("")) return; assignSubPledgeLeader(player, cmdParams, cmdParams2); } else if (actualCommand.equalsIgnoreCase("create_ally")) { if (cmdParams.equals("")) return; if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.ONLY_CLAN_LEADER_CREATE_ALLIANCE)); return; } player.getClan().createAlly(player, cmdParams); } else if (actualCommand.equalsIgnoreCase("dissolve_ally")) { if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.FEATURE_ONLY_FOR_ALLIANCE_LEADER)); return; } player.getClan().dissolveAlly(player); } else if (actualCommand.equalsIgnoreCase("dissolve_clan")) { dissolveClan(player, player.getClanId()); } else if (actualCommand.equalsIgnoreCase("change_clan_leader")) { if (cmdParams.equals("")) return; changeClanLeader(player, cmdParams); } else if (actualCommand.equalsIgnoreCase("recover_clan")) { recoverClan(player, player.getClanId()); } else if (actualCommand.equalsIgnoreCase("increase_clan_level")) { if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } player.getClan().levelUpClan(player); } else if (actualCommand.equalsIgnoreCase("learn_clan_skills")) { showPledgeSkillList(player); } else if (command.startsWith("Subclass")) { int cmdChoice = Integer.parseInt(command.substring(9, 10).trim()); // Subclasses may not be changed while a skill is in use. if (player.isCastingNow() || player.isAllSkillsDisabled()) { player.sendPacket( new SystemMessage(SystemMessageId.SUBCLASS_NO_CHANGE_OR_CREATE_WHILE_SKILL_IN_USE)); return; } if (player.getPet() != null && player.getPet().isSummonInstance) { if (player.getPet().isCastingNow() || player.getPet().isAllSkillsDisabled()) { player.sendPacket( new SystemMessage(SystemMessageId.SUBCLASS_NO_CHANGE_OR_CREATE_WHILE_SKILL_IN_USE)); return; } } if (player.isCursedWeaponEquiped()) { player.sendMessage("You can`t change Subclass while Cursed weapon equiped!"); return; } TextBuilder content = new TextBuilder("<html><body>"); NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); Set<PlayerClass> subsAvailable; int paramOne = 0; int paramTwo = 0; try { int endIndex = command.length(); if (command.length() > 13) { endIndex = 13; paramTwo = Integer.parseInt(command.substring(13).trim()); } paramOne = Integer.parseInt(command.substring(11, endIndex).trim()); } catch (Exception NumberFormatException) { } switch (cmdChoice) { 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.ALT_MAX_SUBCLASS_COUNT) { player.sendMessage("You can now only change one of your current sub classes."); return; } subsAvailable = getAvailableSubClasses(player); if (subsAvailable != null && !subsAvailable.isEmpty()) { content.append("Add Subclass:<br>Which sub class do you wish to add?<br>"); for (PlayerClass subClass : subsAvailable) { content.append( "<a action=\"bypass -h npc_" + getObjectId() + "_Subclass 4 " + subClass.ordinal() + "\" msg=\"1268;" + formatClassForDisplay(subClass) + "\">" + formatClassForDisplay(subClass) + "</a><br>"); } } else { player.sendMessage("There are no sub classes available at this time."); return; } break; case 2: // Change Class - Initial content.append("Change Subclass:<br>"); final int baseClassId = player.getBaseClass(); if (player.getSubClasses().isEmpty()) { content.append( "You can't change sub classes when you don't have a sub class to begin with.<br>" + "<a action=\"bypass -h npc_" + getObjectId() + "_Subclass 1\">Add subclass.</a>"); } else { content.append("Which class would you like to switch to?<br>"); if (baseClassId == player.getActiveClass()) { content.append( CharTemplateTable.getClassNameById(baseClassId) + " <font color=\"LEVEL\">(Base Class)</font><br><br>"); } else { content.append( "<a action=\"bypass -h npc_" + getObjectId() + "_Subclass 5 0\">" + CharTemplateTable.getClassNameById(baseClassId) + "</a> " + "<font color=\"LEVEL\">(Base Class)</font><br><br>"); } for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext(); ) { SubClass subClass = subList.next(); int subClassId = subClass.getClassId(); if (subClassId == player.getActiveClass()) { content.append(CharTemplateTable.getClassNameById(subClassId) + "<br>"); } else { content.append( "<a action=\"bypass -h npc_" + getObjectId() + "_Subclass 5 " + subClass.getClassIndex() + "\">" + CharTemplateTable.getClassNameById(subClassId) + "</a><br>"); } } } break; case 3: // Change/Cancel Subclass - Initial content.append( "Change Subclass:<br>Which of the following sub classes would you like to change?<br>"); int classIndex = 1; for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext(); ) { SubClass subClass = subList.next(); content.append("Sub-class " + classIndex + "<br1>"); content.append( "<a action=\"bypass -h npc_" + getObjectId() + "_Subclass 6 " + subClass.getClassIndex() + "\">" + CharTemplateTable.getClassNameById(subClass.getClassId()) + "</a><br>"); classIndex++; } content.append( "<br>If you change a sub class, you'll start at level 40 after the 2nd class transfer."); break; case 4: // Add Subclass - Action (Subclass 4 x[x]) boolean allowAddition = true; /* * 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.getLevel() < 75) { player.sendMessage( "You may not add a new sub class before you are level 75 on your previous class."); allowAddition = false; } if (player._event != null) { player.sendMessage("Недоступно в данный момент."); return; } if (Olympiad.getInstance().isRegisteredInComp(player) || player.getOlympiadGameId() > 0) { player.sendPacket( new SystemMessage( SystemMessageId .YOU_HAVE_ALREADY_BEEN_REGISTERED_IN_A_WAITING_LIST_OF_AN_EVENT)); return; } if (allowAddition) { if (!player.getSubClasses().isEmpty()) { for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext(); ) { SubClass subClass = subList.next(); if (subClass.getLevel() < 75) { player.sendMessage( "You may not add a new sub class before you are level 75 on your previous sub class."); 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 (!Config.ALT_GAME_SUBCLASS_WITHOUT_QUESTS) { QuestState qs = player.getQuestState("235_MimirsElixir"); if (qs == null || !qs.getState().getName().equalsIgnoreCase("Completed")) { player.sendMessage( "You must have completed the Mimir's Elixir quest to continue adding your sub class."); return; } /*qs = player.getQuestState("234_FatesWhisper"); if(qs == null || qs.getState().getName() != "Completed") { player.sendMessage("You must have completed the Fate's Whisper quest to continue adding your sub class."); return; }*/ } ////////////////// \\\\\\\\\\\\\\\\\\ if (allowAddition) { String className = CharTemplateTable.getClassNameById(paramOne); if (!player.addSubClass(paramOne, player.getTotalSubClasses() + 1)) { player.sendMessage("The sub class could not be added."); return; } player.setActiveClass(player.getTotalSubClasses()); content.append( "Add Subclass:<br>The sub class of <font color=\"LEVEL\">" + className + "</font> has been added."); player.sendPacket( new SystemMessage(SystemMessageId.CLASS_TRANSFER)); // Transfer to new class. className = null; } else { html.setFile("data/html/villagemaster/SubClass_Fail.htm"); } 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. * fix: in waiting for battle in oly can change sublcass * Note: paramOne = classIndex */ if (Olympiad.getInstance().isRegisteredInComp(player) || player.getOlympiadGameId() > 0 || Olympiad.getInstance().isRegistered(player)) { player.sendPacket( new SystemMessage( SystemMessageId .YOU_HAVE_ALREADY_BEEN_REGISTERED_IN_A_WAITING_LIST_OF_AN_EVENT)); return; } // sub class exploit fix if (!FloodProtector.getInstance() .tryPerformAction(player.getObjectId(), FloodProtector.PROTECTED_SUBCLASS)) { player.sendMessage( "You can change Subclass only every " + Config.PROTECTED_SUBCLASS_C + " Millisecond(s)"); return; } player.setActiveClass(paramOne); content.append( "Change Subclass:<br>Your active sub class is now a <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(player.getActiveClass()) + "</font>."); player.sendPacket( new SystemMessage( SystemMessageId.SUBCLASS_TRANSFER_COMPLETED)); // Transfer completed. break; case 6: // Change/Cancel Subclass - Choice content.append( "Please choose a sub class to change to. If the one you are looking for is not here, " + "please seek out the appropriate master for that class.<br>" + "<font color=\"LEVEL\">Warning!</font> All classes and skills for this class will be removed.<br><br>"); subsAvailable = getAvailableSubClasses(player); if (subsAvailable != null && !subsAvailable.isEmpty()) { for (PlayerClass subClass : subsAvailable) { content.append( "<a action=\"bypass -h npc_" + getObjectId() + "_Subclass 7 " + paramOne + " " + subClass.ordinal() + "\">" + formatClassForDisplay(subClass) + "</a><br>"); } } else { player.sendMessage("There are no sub classes available at this time."); return; } break; case 7: // Change Subclass - Action // check player skills if (Config.CHECK_SKILLS_ON_ENTER && !Config.ALT_GAME_SKILL_LEARN) { player.checkAllowedSkills(); } /* * Warning: the information about this subclass will be removed from the * subclass list even if false! */ if (!FloodProtector.getInstance() .tryPerformAction(player.getObjectId(), FloodProtector.PROTECTED_SUBCLASS)) { _log.warn("Player " + player.getName() + " has performed a subclass change too fast"); player.sendMessage( "You can change Subclass only every " + Config.PROTECTED_SUBCLASS_C + " Millisecond(s)"); return; } if (player.modifySubClass(paramOne, paramTwo)) { player.setActiveClass(paramOne); content.append( "Change Subclass:<br>Your sub class has been changed to <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(paramTwo) + "</font>."); player.sendPacket( new SystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added. // check player skills if (Config.CHECK_SKILLS_ON_ENTER && !Config.ALT_GAME_SKILL_LEARN) { player.checkAllowedSkills(); } } 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; } content.append("</body></html>"); // If the content is greater than for a basic blank page, // then assume no external HTML file was assigned. if (content.length() > 26) { html.setHtml(content.toString()); } player.sendPacket(html); content = null; html = null; subsAvailable = null; } else { // this class dont know any other commands, let forward // the command to the parent class super.onBypassFeedback(player, command); } actualCommand = null; cmdParams = null; cmdParams2 = null; }
public void changeClanLeader(L2PcInstance player, String target) { if (Config.DEBUG) { _log.info( player.getObjectId() + "(" + player.getName() + ") requested change a clan leader from " + getObjectId() + "(" + getName() + ")"); } if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } if (player.isFlying()) { player.sendMessage("Get off the Wyvern first."); return; } if (player.getName().equalsIgnoreCase(target)) return; L2Clan clan = player.getClan(); L2ClanMember member = clan.getClanMember(target); if (member == null) { SystemMessage sm = new SystemMessage(SystemMessageId.S1_DOES_NOT_EXIST); sm.addString(target); player.sendPacket(sm); sm = null; return; } if (!member.isOnline()) { player.sendPacket(new SystemMessage(SystemMessageId.INVITED_USER_NOT_ONLINE)); return; } if (member.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) { player.sendMessage("Can`t give to academy member."); return; } for (Siege siege : SiegeManager.getInstance().getSieges()) { if (!siege.getIsInProgress()) { continue; } if (siege.checkIsAttacker(clan) || siege.checkIsDefender(clan)) { player.sendMessage("You are not authorized to do that during the siege."); return; } } clan.setNewLeader(member); clan = null; member = null; }
// Private stuff public void dissolveClan(L2PcInstance player, int clanId) { if (Config.DEBUG) { _log.info( player.getObjectId() + "(" + player.getName() + ") requested dissolve a clan from " + getObjectId() + "(" + getName() + ")"); } if (!player.isClanLeader()) { player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT)); return; } L2Clan clan = player.getClan(); if (clan.getAllyId() != 0) { player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_DISPERSE_THE_CLANS_IN_ALLY)); return; } if (clan.isAtWar() != 0) { player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_WAR)); return; } if (clan.getHasCastle() != 0 || clan.getHasHideout() != 0 || clan.getHasFort() != 0) { player.sendPacket( new SystemMessage(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( new SystemMessage( SystemMessageId.CANNOT_DISSOLVE_CAUSE_CLAN_WILL_PARTICIPATE_IN_CASTLE_SIEGE)); return; } } for (Fort fort : FortManager.getInstance().getForts()) { if (FortSiegeManager.getInstance().checkIsRegistered(clan, fort.getFortId())) { player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE)); return; } } if (player.isInsideZone(L2PcInstance.ZONE_SIEGE)) { player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE)); return; } if (clan.getDissolvingExpiryTime() > System.currentTimeMillis()) { player.sendPacket(new SystemMessage(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()); // The clan leader should take the XP penalty of a full death. player.deathPenalty(false); clan = null; }
@Override public void onBypassFeedback(L2PcInstance player, String command) { if (command.equalsIgnoreCase("start_mission") && Config.ALLOW_JAILMANAGER) { NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/mods/jail/mission.htm"); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%playername%", player.getName()); html.replace("%amount%", String.valueOf(Config.REQUIRED_JAIL_POINTS)); html.replace("%npcname%", String.valueOf(getName())); player.sendPacket(html); if (player.isDead() || player.isFakeDeath()) { player.sendMessage( Message.getMessage(player, Message.MessageId.MSG_NOT_ALLOWED_AT_THE_MOMENT)); return; } } else if (command.equalsIgnoreCase("check_points") && player.isInJailMission()) { NpcHtmlMessage html2 = new NpcHtmlMessage(getObjectId()); html2.setFile("data/html/mods/jail/points.htm"); html2.replace("%objectId%", String.valueOf(getObjectId())); html2.replace("%points%", String.valueOf(player.getJailPoints())); html2.replace("%rest%", String.valueOf(Config.REQUIRED_JAIL_POINTS - player.getJailPoints())); html2.replace("%npcname%", String.valueOf(getName())); player.sendPacket(html2); if (player.isDead() || player.isFakeDeath()) { player.sendMessage( Message.getMessage(player, Message.MessageId.MSG_NOT_ALLOWED_AT_THE_MOMENT)); return; } } else if (command.equalsIgnoreCase("get_mission")) { if (player.isInJailMission()) { WindowService.sendWindow(player, "data/html/mods/jail/", "mission_already.htm"); return; } player.setIsInJailMission(true); PlaySound ps = new PlaySound( 0, "ItemSound2.race_start", 0, player.getObjectId(), player.getX(), player.getY(), player.getZ()); player.sendPacket(ps); WindowService.sendWindow(player, "data/html/mods/jail/", "started.htm"); if (player.isDead() || player.isFakeDeath()) { player.sendMessage( Message.getMessage(player, Message.MessageId.MSG_NOT_ALLOWED_AT_THE_MOMENT)); return; } } else if (command.equalsIgnoreCase("finish_mission")) { if (!player.isInJailMission()) { WindowService.sendWindow(player, "data/html/mods/jail/", "notstarted.htm"); return; } if (player.getJailPoints() < Config.REQUIRED_JAIL_POINTS) { WindowService.sendWindow(player, "data/html/mods/jail/", "notcompleted.htm"); return; } if (player.isDead() || player.isFakeDeath()) { player.sendMessage( Message.getMessage(player, Message.MessageId.MSG_NOT_ALLOWED_AT_THE_MOMENT)); return; } PlaySound ps = new PlaySound( 0, "ItemSound.quest_finish", 0, player.getObjectId(), player.getX(), player.getY(), player.getZ()); player.sendPacket(ps); WindowService.sendWindow(player, "data/html/mods/jail/", "completed.htm"); try { Thread.sleep(Util.convertSecondsToMiliseconds(5)); } catch (Throwable t) { _log.error("Error, L2JailManagerInstance, reason: " + t.getMessage()); } player.setInJail(false, 0); player.resetJailPoints(); player.sendMessage(Message.getMessage(player, Message.MessageId.MSG_JAIL_POINTS_RESET)); player.setIsInJailMission(false); } super.onBypassFeedback(player, command); }
@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(new SystemMessage(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( new SystemMessage(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( new SystemMessage(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( new SystemMessage( 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( new SystemMessage(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); } }