Advertisement
horato

AIO NPC

Jul 28th, 2011
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 60.57 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P L2J_Server
  3. Index: java/com/l2jserver/gameserver/model/actor/instance/L2AioNpcInstance.java
  4. ===================================================================
  5. --- java/com/l2jserver/gameserver/model/actor/instance/L2AioNpcInstance.java (revision 0)
  6. +++ java/com/l2jserver/gameserver/model/actor/instance/L2AioNpcInstance.java (revision 0)
  7. @@ -0,0 +1,1063 @@
  8. +/*
  9. + * This program is free software: you can redistribute it and/or modify it under
  10. + * the terms of the GNU General Public License as published by the Free Software
  11. + * Foundation, either version 3 of the License, or (at your option) any later
  12. + * version.
  13. + *
  14. + * This program is distributed in the hope that it will be useful, but WITHOUT
  15. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  16. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  17. + * details.
  18. + *
  19. + * You should have received a copy of the GNU General Public License along with
  20. + * this program. If not, see <http://www.gnu.org/licenses/>.
  21. + */
  22. +package com.l2jserver.gameserver.model.actor.instance;
  23. +
  24. +import java.util.Iterator;
  25. +import java.util.Set;
  26. +
  27. +import com.l2jserver.Config;
  28. +import com.l2jserver.gameserver.datatables.CharTemplateTable;
  29. +import com.l2jserver.gameserver.datatables.ClanTable;
  30. +import com.l2jserver.gameserver.datatables.SkillTreeTable;
  31. +import com.l2jserver.gameserver.instancemanager.CastleManager;
  32. +import com.l2jserver.gameserver.instancemanager.FortManager;
  33. +import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
  34. +import com.l2jserver.gameserver.instancemanager.SiegeManager;
  35. +import com.l2jserver.gameserver.model.L2Clan;
  36. +import com.l2jserver.gameserver.model.L2ClanMember;
  37. +import com.l2jserver.gameserver.model.L2PledgeSkillLearn;
  38. +import com.l2jserver.gameserver.model.L2Clan.SubPledge;
  39. +import com.l2jserver.gameserver.model.actor.L2Npc;
  40. +import com.l2jserver.gameserver.model.base.ClassId;
  41. +import com.l2jserver.gameserver.model.base.PlayerClass;
  42. +import com.l2jserver.gameserver.model.base.Race;
  43. +import com.l2jserver.gameserver.model.base.SubClass;
  44. +import com.l2jserver.gameserver.model.entity.Castle;
  45. +import com.l2jserver.gameserver.model.entity.Fort;
  46. +import com.l2jserver.gameserver.model.quest.QuestState;
  47. +import com.l2jserver.gameserver.network.SystemMessageId;
  48. +import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
  49. +import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
  50. +import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  51. +import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
  52. +import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
  53. +import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  54. +import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  55. +import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  56. +import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
  57. +import com.l2jserver.gameserver.util.Util;
  58. +import com.l2jserver.util.StringUtil;
  59. +
  60. +public class L2AioNpcInstance extends L2Npc
  61. +{
  62. +
  63. + public L2AioNpcInstance(int objectId, L2NpcTemplate template)
  64. + {
  65. + super(objectId, template);
  66. + setIsInvul(false);
  67. + }
  68. +
  69. + @Override
  70. + public String getHtmlPath(int npcId, int val)
  71. + {
  72. + String pom = "";
  73. +
  74. + if (val == 0)
  75. + pom = "" + npcId;
  76. + else
  77. + pom = npcId + "-" + val;
  78. +
  79. + return "data/html/default/" + pom + ".htm";
  80. + }
  81. +
  82. + @Override
  83. + public void onBypassFeedback(L2PcInstance player, String command)
  84. + {
  85. +
  86. + String[] commandStr = command.split(" ");
  87. + String actualCommand = commandStr[0]; // Get actual command
  88. +
  89. + String cmdParams = "";
  90. + String cmdParams2 = "";
  91. +
  92. + if (commandStr.length >= 2)
  93. + cmdParams = commandStr[1];
  94. + if (commandStr.length >= 3)
  95. + cmdParams2 = commandStr[2];
  96. +
  97. + if (actualCommand.equalsIgnoreCase("create_clan"))
  98. + {
  99. + if (cmdParams.isEmpty())
  100. + return;
  101. +
  102. + ClanTable.getInstance().createClan(player, cmdParams);
  103. + }
  104. + else if (actualCommand.equalsIgnoreCase("create_academy"))
  105. + {
  106. + if (cmdParams.isEmpty())
  107. + return;
  108. +
  109. + createSubPledge(player, cmdParams, null, L2Clan.SUBUNIT_ACADEMY, 5);
  110. + }
  111. + else if (actualCommand.equalsIgnoreCase("rename_pledge"))
  112. + {
  113. + if (cmdParams.isEmpty() || cmdParams2.isEmpty())
  114. + return;
  115. +
  116. + renameSubPledge(player, Integer.valueOf(cmdParams), cmdParams2);
  117. + }
  118. + else if (actualCommand.equalsIgnoreCase("create_royal"))
  119. + {
  120. + if (cmdParams.isEmpty())
  121. + return;
  122. +
  123. + createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_ROYAL1, 6);
  124. + }
  125. + else if (actualCommand.equalsIgnoreCase("create_knight"))
  126. + {
  127. + if (cmdParams.isEmpty())
  128. + return;
  129. +
  130. + createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_KNIGHT1, 7);
  131. + }
  132. + else if (actualCommand.equalsIgnoreCase("assign_subpl_leader"))
  133. + {
  134. + if (cmdParams.isEmpty())
  135. + return;
  136. +
  137. + assignSubPledgeLeader(player, cmdParams, cmdParams2);
  138. + }
  139. + else if (actualCommand.equalsIgnoreCase("create_ally"))
  140. + {
  141. + if (cmdParams.isEmpty())
  142. + return;
  143. +
  144. + if (player.getClan() == null)
  145. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_CLAN_LEADER_CREATE_ALLIANCE));
  146. + else
  147. + player.getClan().createAlly(player, cmdParams);
  148. + }
  149. + else if (actualCommand.equalsIgnoreCase("dissolve_ally"))
  150. + {
  151. + player.getClan().dissolveAlly(player);
  152. + }
  153. + else if (actualCommand.equalsIgnoreCase("dissolve_clan"))
  154. + {
  155. + dissolveClan(player, player.getClanId());
  156. + }
  157. + else if (actualCommand.equalsIgnoreCase("change_clan_leader"))
  158. + {
  159. + if (cmdParams.isEmpty())
  160. + return;
  161. +
  162. + changeClanLeader(player, cmdParams);
  163. + }
  164. + else if (actualCommand.equalsIgnoreCase("recover_clan"))
  165. + {
  166. + recoverClan(player, player.getClanId());
  167. + }
  168. + else if (actualCommand.equalsIgnoreCase("increase_clan_level"))
  169. + {
  170. + if (player.getClan().levelUpClan(player))
  171. + {
  172. + player.broadcastPacket(new MagicSkillUse(player, 5103, 1, 0, 0));
  173. + player.broadcastPacket(new MagicSkillLaunched(player, 5103, 1));
  174. + }
  175. + }
  176. + else if (actualCommand.equalsIgnoreCase("learn_clan_skills"))
  177. + {
  178. + showPledgeSkillList(player);
  179. + }
  180. + else if (command.startsWith("Subclass"))
  181. + {
  182. + // Subclasses may not be changed while a skill is in use.
  183. + if (player.isCastingNow() || player.isAllSkillsDisabled())
  184. + {
  185. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SUBCLASS_NO_CHANGE_OR_CREATE_WHILE_SKILL_IN_USE));
  186. + return;
  187. + }
  188. +
  189. + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  190. +
  191. + if (player.getTransformation() != null)
  192. + {
  193. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_NoTransformed.htm");
  194. + player.sendPacket(html);
  195. + return;
  196. + }
  197. +
  198. + int cmdChoice = 0;
  199. + int paramOne = 0;
  200. + int paramTwo = 0;
  201. +
  202. + try
  203. + {
  204. + cmdChoice = Integer.parseInt(command.substring(9, 10).trim());
  205. +
  206. + int endIndex = command.indexOf(' ', 11);
  207. + if (endIndex == -1)
  208. + endIndex = command.length();
  209. +
  210. + paramOne = Integer.parseInt(command.substring(11, endIndex).trim());
  211. + if (command.length() > endIndex)
  212. + paramTwo = Integer.parseInt(command.substring(endIndex).trim());
  213. + }
  214. + catch (Exception NumberFormatException)
  215. + {
  216. + }
  217. +
  218. + switch (cmdChoice)
  219. + {
  220. + case 0: // Subclass change menu
  221. + html.setFile(player.getHtmlPrefix(), getSubClassMenu(player.getRace()));
  222. + break;
  223. + case 1: // Add Subclass - Initial
  224. + // Avoid giving player an option to add a new sub class, if they have three already.
  225. + if (player.getTotalSubClasses() >= Config.MAX_SUBCLASS)
  226. + {
  227. + html.setFile(player.getHtmlPrefix(), getSubClassFail());
  228. + break;
  229. + }
  230. +
  231. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Add.htm");
  232. + final StringBuilder content1 = StringUtil.startAppend(200);
  233. + Set<PlayerClass> subsAvailable = getAvailableSubClasses(player);
  234. +
  235. + if (subsAvailable != null && !subsAvailable.isEmpty())
  236. + {
  237. + for (PlayerClass subClass : subsAvailable)
  238. + {
  239. + StringUtil.append(content1,
  240. + "<a action=\"bypass -h npc_%objectId%_Subclass 4 ",
  241. + String.valueOf(subClass.ordinal()),
  242. + "\" msg=\"1268;",
  243. + formatClassForDisplay(subClass),
  244. + "\">",
  245. + formatClassForDisplay(subClass),
  246. + "</a><br>");
  247. + }
  248. + }
  249. + else
  250. + {
  251. + // TODO: Retail message
  252. + player.sendMessage("There are no sub classes available at this time.");
  253. + return;
  254. + }
  255. + html.replace("%list%", content1.toString());
  256. + break;
  257. + case 2: // Change Class - Initial
  258. + if (player.getSubClasses().isEmpty())
  259. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ChangeNo.htm");
  260. + else
  261. + {
  262. + final StringBuilder content2 = StringUtil.startAppend(200);
  263. +
  264. + if (checkVillageMaster(player.getBaseClass()))
  265. + {
  266. + StringUtil.append(content2,
  267. + "<a action=\"bypass -h npc_%objectId%_Subclass 5 0\">",
  268. + CharTemplateTable.getInstance().getClassNameById(player.getBaseClass()),
  269. + "</a><br>");
  270. + }
  271. +
  272. + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
  273. + {
  274. + SubClass subClass = subList.next();
  275. + if (checkVillageMaster(subClass.getClassDefinition()))
  276. + {
  277. + StringUtil.append(content2,
  278. + "<a action=\"bypass -h npc_%objectId%_Subclass 5 ",
  279. + String.valueOf(subClass.getClassIndex()),
  280. + "\">",
  281. + formatClassForDisplay(subClass.getClassDefinition()),
  282. + "</a><br>");
  283. + }
  284. + }
  285. +
  286. + if (content2.length() > 0)
  287. + {
  288. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Change.htm");
  289. + html.replace("%list%", content2.toString());
  290. + }
  291. + else
  292. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ChangeNotFound.htm");
  293. + }
  294. + break;
  295. + case 3: // Change/Cancel Subclass - Initial
  296. + if (player.getSubClasses() == null || player.getSubClasses().isEmpty())
  297. + {
  298. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyEmpty.htm");
  299. + break;
  300. + }
  301. +
  302. + // custom value
  303. + if (player.getTotalSubClasses() > 3)
  304. + {
  305. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyCustom.htm");
  306. + final StringBuilder content3 = StringUtil.startAppend(200);
  307. + int classIndex = 1;
  308. +
  309. + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
  310. + {
  311. + SubClass subClass = subList.next();
  312. +
  313. + StringUtil.append(content3,
  314. + "Sub-class ",
  315. + String.valueOf(classIndex++),
  316. + "<br>",
  317. + "<a action=\"bypass -h npc_%objectId%_Subclass 6 ",
  318. + String.valueOf(subClass.getClassIndex()),
  319. + "\">",
  320. + CharTemplateTable.getInstance().getClassNameById(subClass.getClassId()),
  321. + "</a><br>");
  322. + }
  323. + html.replace("%list%", content3.toString());
  324. + }
  325. + else
  326. + {
  327. + // retail html contain only 3 subclasses
  328. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Modify.htm");
  329. + if (player.getSubClasses().containsKey(1))
  330. + html.replace("%sub1%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(1).getClassId()));
  331. + else
  332. + html.replace("<a action=\"bypass -h npc_%objectId%_Subclass 6 1\">%sub1%</a><br>", "");
  333. +
  334. + if (player.getSubClasses().containsKey(2))
  335. + html.replace("%sub2%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(2).getClassId()));
  336. + else
  337. + html.replace("<a action=\"bypass -h npc_%objectId%_Subclass 6 2\">%sub2%</a><br>", "");
  338. +
  339. + if (player.getSubClasses().containsKey(3))
  340. + html.replace("%sub3%", CharTemplateTable.getInstance().getClassNameById(player.getSubClasses().get(3).getClassId()));
  341. + else
  342. + html.replace("<a action=\"bypass -h npc_%objectId%_Subclass 6 3\">%sub3%</a><br>", "");
  343. + }
  344. + break;
  345. + case 4: // Add Subclass - Action (Subclass 4 x[x])
  346. + /*
  347. + * If the character is less than level 75 on any of their previously chosen
  348. + * classes then disallow them to change to their most recently added sub-class choice.
  349. + */
  350. +
  351. + if (!player.getFloodProtectors().getSubclass().tryPerformAction("add subclass"))
  352. + {
  353. + _log.warning("Player "+player.getName()+" has performed a subclass change too fast");
  354. + return;
  355. + }
  356. +
  357. + boolean allowAddition = true;
  358. +
  359. + if (player.getTotalSubClasses() >= Config.MAX_SUBCLASS)
  360. + allowAddition = false;
  361. +
  362. + if (player.getLevel() < 75)
  363. + allowAddition = false;
  364. +
  365. + if (allowAddition)
  366. + {
  367. + if (!player.getSubClasses().isEmpty())
  368. + {
  369. + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
  370. + {
  371. + SubClass subClass = subList.next();
  372. +
  373. + if (subClass.getLevel() < 75)
  374. + {
  375. + allowAddition = false;
  376. + break;
  377. + }
  378. + }
  379. + }
  380. + }
  381. +
  382. + /*
  383. + * If quest checking is enabled, verify if the character has completed the Mimir's Elixir (Path to Subclass)
  384. + * and Fate's Whisper (A Grade Weapon) quests by checking for instances of their unique reward items.
  385. + *
  386. + * If they both exist, remove both unique items and continue with adding the sub-class.
  387. + */
  388. + if (allowAddition && !Config.ALT_GAME_SUBCLASS_WITHOUT_QUESTS)
  389. + allowAddition = checkQuests(player);
  390. +
  391. + if (allowAddition && isValidNewSubClass(player, paramOne))
  392. + {
  393. + if (!player.addSubClass(paramOne, player.getTotalSubClasses() + 1))
  394. + return;
  395. +
  396. + player.setActiveClass(player.getTotalSubClasses());
  397. +
  398. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_AddOk.htm");
  399. +
  400. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added.
  401. + }
  402. + else
  403. + html.setFile(player.getHtmlPrefix(), getSubClassFail());
  404. + break;
  405. + case 5: // Change Class - Action
  406. + /*
  407. + * If the character is less than level 75 on any of their previously chosen
  408. + * classes then disallow them to change to their most recently added sub-class choice.
  409. + *
  410. + * Note: paramOne = classIndex
  411. + */
  412. +
  413. + if (!player.getFloodProtectors().getSubclass().tryPerformAction("change class"))
  414. + {
  415. + _log.warning("Player "+player.getName()+" has performed a subclass change too fast");
  416. + return;
  417. + }
  418. +
  419. + if (player.getClassIndex() == paramOne)
  420. + {
  421. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_Current.htm");
  422. + break;
  423. + }
  424. +
  425. + if (paramOne == 0)
  426. + {
  427. + if (!checkVillageMaster(player.getBaseClass()))
  428. + return;
  429. + }
  430. + else
  431. + {
  432. + try
  433. + {
  434. + if (!checkVillageMaster(player.getSubClasses().get(paramOne).getClassDefinition()))
  435. + return;
  436. + }
  437. + catch (NullPointerException e)
  438. + {
  439. + return;
  440. + }
  441. + }
  442. +
  443. + player.setActiveClass(paramOne);
  444. +
  445. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.SUBCLASS_TRANSFER_COMPLETED)); // Transfer completed.
  446. + return;
  447. + case 6: // Change/Cancel Subclass - Choice
  448. + // validity check
  449. + if (paramOne < 1 || paramOne > Config.MAX_SUBCLASS)
  450. + return;
  451. +
  452. + subsAvailable = getAvailableSubClasses(player);
  453. +
  454. + // another validity check
  455. + if (subsAvailable == null || subsAvailable.isEmpty())
  456. + {
  457. + // TODO: Retail message
  458. + player.sendMessage("There are no sub classes available at this time.");
  459. + return;
  460. + }
  461. +
  462. + final StringBuilder content6 = StringUtil.startAppend(200);
  463. +
  464. + for (PlayerClass subClass : subsAvailable)
  465. + {
  466. + StringUtil.append(content6,
  467. + "<a action=\"bypass -h npc_%objectId%_Subclass 7 ",
  468. + String.valueOf(paramOne),
  469. + " ",
  470. + String.valueOf(subClass.ordinal()),
  471. + "\" msg=\"1445;",
  472. + "\">",
  473. + formatClassForDisplay(subClass),
  474. + "</a><br>");
  475. + }
  476. +
  477. + switch (paramOne)
  478. + {
  479. + case 1:
  480. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice1.htm");
  481. + break;
  482. + case 2:
  483. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice2.htm");
  484. + break;
  485. + case 3:
  486. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice3.htm");
  487. + break;
  488. + default:
  489. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyChoice.htm");
  490. + }
  491. + html.replace("%list%", content6.toString());
  492. + break;
  493. + case 7: // Change Subclass - Action
  494. + /*
  495. + * Warning: the information about this subclass will be removed from the
  496. + * subclass list even if false!
  497. + */
  498. +
  499. + if (!player.getFloodProtectors().getSubclass().tryPerformAction("change class"))
  500. + {
  501. + _log.warning("Player "+player.getName()+" has performed a subclass change too fast");
  502. + return;
  503. + }
  504. +
  505. + if (!isValidNewSubClass(player, paramTwo))
  506. + return;
  507. +
  508. + if (player.modifySubClass(paramOne, paramTwo))
  509. + {
  510. + player.abortCast();
  511. + player.stopAllEffectsExceptThoseThatLastThroughDeath(); // all effects from old subclass stopped!
  512. + player.stopCubics();
  513. + player.setActiveClass(paramOne);
  514. +
  515. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/SubClass_ModifyOk.htm");
  516. + html.replace("%name%", CharTemplateTable.getInstance().getClassNameById(paramTwo));
  517. +
  518. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ADD_NEW_SUBCLASS)); // Subclass added.
  519. + }
  520. + else
  521. + {
  522. + /*
  523. + * This isn't good! modifySubClass() removed subclass from memory
  524. + * we must update _classIndex! Else IndexOutOfBoundsException can turn
  525. + * up some place down the line along with other seemingly unrelated
  526. + * problems.
  527. + */
  528. + player.setActiveClass(0); // Also updates _classIndex plus switching _classid to baseclass.
  529. +
  530. + player.sendMessage("The sub class could not be added, you have been reverted to your base class.");
  531. + return;
  532. + }
  533. + break;
  534. + }
  535. +
  536. + html.replace("%objectId%", String.valueOf(getObjectId()));
  537. + player.sendPacket(html);
  538. + }
  539. + else
  540. + {
  541. + // this class dont know any other commands, let forward
  542. + // the command to the parent class
  543. + super.onBypassFeedback(player, command);
  544. + }
  545. + }
  546. +
  547. + private String getSubClassMenu(Race pRace)
  548. + {
  549. + if (Config.ALT_GAME_SUBCLASS_EVERYWHERE || pRace != Race.Kamael)
  550. + return "data/html/villagemaster/SubClass.htm";
  551. +
  552. + return "data/html/villagemaster/SubClass_NoOther.htm";
  553. + }
  554. +
  555. + private String getSubClassFail()
  556. + {
  557. + return "data/html/villagemaster/SubClass_Fail.htm";
  558. + }
  559. +
  560. + private final Set<PlayerClass> getAvailableSubClasses(L2PcInstance player)
  561. + {
  562. + // get player base class
  563. + final int currentBaseId = player.getBaseClass();
  564. + final ClassId baseCID = ClassId.values()[currentBaseId];
  565. +
  566. + // we need 2nd occupation ID
  567. + final int baseClassId;
  568. + if (baseCID.level() > 2)
  569. + baseClassId = baseCID.getParent().ordinal();
  570. + else
  571. + baseClassId = currentBaseId;
  572. +
  573. + Set<PlayerClass> availSubs = PlayerClass.values()[baseClassId].getAvailableSubclasses(player);
  574. +
  575. + if (availSubs != null && !availSubs.isEmpty())
  576. + {
  577. + for (Iterator<PlayerClass> availSub = availSubs.iterator(); availSub.hasNext();)
  578. + {
  579. + PlayerClass pclass = availSub.next();
  580. +
  581. + // check for the village master
  582. + if (!checkVillageMaster(pclass))
  583. + {
  584. + availSub.remove();
  585. + continue;
  586. + }
  587. +
  588. + // scan for already used subclasses
  589. + int availClassId = pclass.ordinal();
  590. + ClassId cid = ClassId.values()[availClassId];
  591. + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
  592. + {
  593. + SubClass prevSubClass = subList.next();
  594. + ClassId subClassId = ClassId.values()[prevSubClass.getClassId()];
  595. +
  596. + if (subClassId.equalsOrChildOf(cid))
  597. + {
  598. + availSub.remove();
  599. + break;
  600. + }
  601. + }
  602. + }
  603. + }
  604. +
  605. + return availSubs;
  606. + }
  607. +
  608. + private static final String formatClassForDisplay(PlayerClass className)
  609. + {
  610. + String classNameStr = className.toString();
  611. + char[] charArray = classNameStr.toCharArray();
  612. +
  613. + for (int i = 1; i < charArray.length; i++)
  614. + {
  615. + if (Character.isUpperCase(charArray[i]))
  616. + classNameStr = classNameStr.substring(0, i) + " " + classNameStr.substring(i);
  617. + }
  618. +
  619. + return classNameStr;
  620. + }
  621. +
  622. + private final boolean checkVillageMaster(PlayerClass pclass)
  623. + {
  624. + if (Config.ALT_GAME_SUBCLASS_EVERYWHERE)
  625. + return true;
  626. +
  627. + return checkVillageMasterRace(pclass) && checkVillageMasterTeachType(pclass);
  628. + }
  629. +
  630. + private final boolean checkVillageMaster(int classId)
  631. + {
  632. + return checkVillageMaster(PlayerClass.values()[classId]);
  633. + }
  634. +
  635. + private static final Iterator<SubClass> iterSubClasses(L2PcInstance player)
  636. + {
  637. + return player.getSubClasses().values().iterator();
  638. + }
  639. +
  640. + private boolean checkQuests(L2PcInstance player)
  641. + {
  642. + // Noble players can add subbclasses without quests
  643. + if (player.isNoble())
  644. + return true;
  645. +
  646. + QuestState qs = player.getQuestState("234_FatesWhisper");
  647. + if (qs == null || !qs.isCompleted())
  648. + return false;
  649. +
  650. + qs = player.getQuestState("235_MimirsElixir");
  651. + if (qs == null || !qs.isCompleted())
  652. + return false;
  653. +
  654. + return true;
  655. + }
  656. +
  657. + private final boolean isValidNewSubClass(L2PcInstance player, int classId)
  658. + {
  659. + if (!checkVillageMaster(classId))
  660. + return false;
  661. +
  662. + final ClassId cid = ClassId.values()[classId];
  663. + for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
  664. + {
  665. + SubClass sub = subList.next();
  666. + ClassId subClassId = ClassId.values()[sub.getClassId()];
  667. +
  668. + if (subClassId.equalsOrChildOf(cid))
  669. + return false;
  670. + }
  671. +
  672. + // get player base class
  673. + final int currentBaseId = player.getBaseClass();
  674. + final ClassId baseCID = ClassId.values()[currentBaseId];
  675. +
  676. + // we need 2nd occupation ID
  677. + final int baseClassId;
  678. + if (baseCID.level() > 2)
  679. + baseClassId = baseCID.getParent().ordinal();
  680. + else
  681. + baseClassId = currentBaseId;
  682. +
  683. + Set<PlayerClass> availSubs = PlayerClass.values()[baseClassId].getAvailableSubclasses(player);
  684. + if (availSubs == null || availSubs.isEmpty())
  685. + return false;
  686. +
  687. + boolean found = false;
  688. + for (Iterator<PlayerClass> availSub = availSubs.iterator(); availSub.hasNext();)
  689. + {
  690. + PlayerClass pclass = availSub.next();
  691. + if (pclass.ordinal() == classId)
  692. + {
  693. + found = true;
  694. + break;
  695. + }
  696. + }
  697. +
  698. + return found;
  699. + }
  700. +
  701. + private boolean checkVillageMasterRace(PlayerClass pclass)
  702. + {
  703. + return true;
  704. + }
  705. +
  706. + private boolean checkVillageMasterTeachType(PlayerClass pclass)
  707. + {
  708. + return true;
  709. + }
  710. +
  711. + private static final void createSubPledge(L2PcInstance player, String clanName, String leaderName, int pledgeType, int minClanLvl)
  712. + {
  713. + if (!player.isClanLeader())
  714. + {
  715. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
  716. + return;
  717. + }
  718. +
  719. + final L2Clan clan = player.getClan();
  720. + if (clan.getLevel() < minClanLvl)
  721. + {
  722. + if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
  723. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_MEET_CRITERIA_IN_ORDER_TO_CREATE_A_CLAN_ACADEMY));
  724. + else
  725. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_DO_NOT_MEET_CRITERIA_IN_ORDER_TO_CREATE_A_MILITARY_UNIT));
  726. +
  727. + return;
  728. + }
  729. + if (!Util.isAlphaNumeric(clanName) || 2 > clanName.length())
  730. + {
  731. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_INCORRECT));
  732. + return;
  733. + }
  734. + if (clanName.length() > 16)
  735. + {
  736. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_TOO_LONG));
  737. + return;
  738. + }
  739. +
  740. + for (L2Clan tempClan : ClanTable.getInstance().getClans())
  741. + {
  742. + if (tempClan.getSubPledge(clanName) != null)
  743. + {
  744. + if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
  745. + {
  746. + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ALREADY_EXISTS);
  747. + sm.addString(clanName);
  748. + player.sendPacket(sm);
  749. + sm = null;
  750. + }
  751. + else
  752. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ANOTHER_MILITARY_UNIT_IS_ALREADY_USING_THAT_NAME));
  753. +
  754. + return;
  755. + }
  756. + }
  757. +
  758. + if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
  759. + {
  760. + if (clan.getClanMember(leaderName) == null || clan.getClanMember(leaderName).getPledgeType() != 0)
  761. + {
  762. + if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
  763. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED));
  764. + else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
  765. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED));
  766. +
  767. + return;
  768. + }
  769. + }
  770. +
  771. + final int leaderId = pledgeType != L2Clan.SUBUNIT_ACADEMY ? clan.getClanMember(leaderName).getObjectId() : 0;
  772. +
  773. + if (clan.createSubPledge(player, pledgeType, leaderId, clanName) == null)
  774. + return;
  775. +
  776. + SystemMessage sm;
  777. + if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
  778. + {
  779. + sm = SystemMessage.getSystemMessage(SystemMessageId.THE_S1S_CLAN_ACADEMY_HAS_BEEN_CREATED);
  780. + sm.addString(player.getClan().getName());
  781. + }
  782. + else if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
  783. + {
  784. + sm = SystemMessage.getSystemMessage(SystemMessageId.THE_KNIGHTS_OF_S1_HAVE_BEEN_CREATED);
  785. + sm.addString(player.getClan().getName());
  786. + }
  787. + else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
  788. + {
  789. + sm = SystemMessage.getSystemMessage(SystemMessageId.THE_ROYAL_GUARD_OF_S1_HAVE_BEEN_CREATED);
  790. + sm.addString(player.getClan().getName());
  791. + }
  792. + else
  793. + sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_CREATED);
  794. + player.sendPacket(sm);
  795. +
  796. + if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
  797. + {
  798. + final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
  799. + final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
  800. + if (leaderPlayer != null)
  801. + {
  802. + leaderPlayer.setPledgeClass(leaderSubPledge.calculatePledgeClass(leaderPlayer));
  803. + leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
  804. + leaderPlayer.sendPacket(new ExBrExtraUserInfo(leaderPlayer));
  805. + }
  806. + }
  807. + }
  808. +
  809. + private static final void renameSubPledge(L2PcInstance player, int pledgeType, String pledgeName)
  810. + {
  811. + if (!player.isClanLeader())
  812. + {
  813. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
  814. + return;
  815. + }
  816. +
  817. + final L2Clan clan = player.getClan();
  818. + final SubPledge subPledge = player.getClan().getSubPledge(pledgeType);
  819. +
  820. + if (subPledge == null)
  821. + {
  822. + player.sendMessage("Pledge don't exists.");
  823. + return;
  824. + }
  825. + if (!Util.isAlphaNumeric(pledgeName) || 2 > pledgeName.length())
  826. + {
  827. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_INCORRECT));
  828. + return;
  829. + }
  830. + if (pledgeName.length() > 16)
  831. + {
  832. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_TOO_LONG));
  833. + return;
  834. + }
  835. +
  836. + subPledge.setName(pledgeName);
  837. + clan.updateSubPledgeInDB(subPledge.getId());
  838. + clan.broadcastClanStatus();
  839. + player.sendMessage("Pledge name changed.");
  840. + }
  841. +
  842. + private static final void assignSubPledgeLeader(L2PcInstance player, String clanName, String leaderName)
  843. + {
  844. + if (!player.isClanLeader())
  845. + {
  846. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
  847. + return;
  848. + }
  849. + if (leaderName.length() > 16)
  850. + {
  851. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NAMING_CHARNAME_UP_TO_16CHARS));
  852. + return;
  853. + }
  854. + if (player.getName().equals(leaderName))
  855. + {
  856. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED));
  857. + return;
  858. + }
  859. +
  860. + final L2Clan clan = player.getClan();
  861. + final SubPledge subPledge = player.getClan().getSubPledge(clanName);
  862. +
  863. + if (null == subPledge || subPledge.getId() == L2Clan.SUBUNIT_ACADEMY)
  864. + {
  865. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLAN_NAME_INCORRECT));
  866. + return;
  867. + }
  868. + if (clan.getClanMember(leaderName) == null
  869. + || (clan.getClanMember(leaderName).getPledgeType() != 0))
  870. + {
  871. + if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1)
  872. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED));
  873. + else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1)
  874. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CAPTAIN_OF_ROYAL_GUARD_CANNOT_BE_APPOINTED));
  875. +
  876. + return;
  877. + }
  878. +
  879. + subPledge.setLeaderId(clan.getClanMember(leaderName).getObjectId());
  880. + clan.updateSubPledgeInDB(subPledge.getId());
  881. +
  882. + final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
  883. + final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
  884. + if (leaderPlayer != null)
  885. + {
  886. + leaderPlayer.setPledgeClass(leaderSubPledge.calculatePledgeClass(leaderPlayer));
  887. + leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
  888. + leaderPlayer.sendPacket(new ExBrExtraUserInfo(leaderPlayer));
  889. + }
  890. +
  891. + clan.broadcastClanStatus();
  892. + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_BEEN_SELECTED_AS_CAPTAIN_OF_S2);
  893. + sm.addString(leaderName);
  894. + sm.addString(clanName);
  895. + clan.broadcastToOnlineMembers(sm);
  896. + sm = null;
  897. + }
  898. +
  899. + /**
  900. + * this displays PledgeSkillList to the player.
  901. + * @param player
  902. + */
  903. + private static final void showPledgeSkillList(L2PcInstance player)
  904. + {
  905. + if (player.getClan() == null || !player.isClanLeader())
  906. + {
  907. + NpcHtmlMessage html = new NpcHtmlMessage(1);
  908. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/NotClanLeader.htm");
  909. + player.sendPacket(html);
  910. + player.sendPacket(ActionFailed.STATIC_PACKET);
  911. + return;
  912. + }
  913. +
  914. + L2PledgeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailablePledgeSkills(player);
  915. + AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.SkillType.Clan);
  916. + int counts = 0;
  917. +
  918. + for (L2PledgeSkillLearn s: skills)
  919. + {
  920. + int cost = s.getRepCost();
  921. + int itemCount = s.getItemCount();
  922. + counts++;
  923. +
  924. + asl.addSkill(s.getId(), s.getLevel(), s.getLevel(), cost, itemCount);
  925. + }
  926. +
  927. + if (counts == 0)
  928. + {
  929. + if (player.getClan().getLevel() < 8)
  930. + {
  931. + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN_S1);
  932. + if (player.getClan().getLevel() < 5)
  933. + sm.addNumber(5);
  934. + else
  935. + sm.addNumber(player.getClan().getLevel()+1);
  936. + player.sendPacket(sm);
  937. + }
  938. + else
  939. + {
  940. + NpcHtmlMessage html = new NpcHtmlMessage(1);
  941. + html.setFile(player.getHtmlPrefix(), "data/html/villagemaster/NoMoreSkills.htm");
  942. + player.sendPacket(html);
  943. + }
  944. + }
  945. + else
  946. + player.sendPacket(asl);
  947. +
  948. + player.sendPacket(ActionFailed.STATIC_PACKET);
  949. + }
  950. +
  951. + private static final void dissolveClan(L2PcInstance player, int clanId)
  952. + {
  953. + if (!player.isClanLeader())
  954. + {
  955. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
  956. + return;
  957. + }
  958. +
  959. + final L2Clan clan = player.getClan();
  960. + if (clan.getAllyId() != 0)
  961. + {
  962. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISPERSE_THE_CLANS_IN_ALLY));
  963. + return;
  964. + }
  965. + if (clan.isAtWar())
  966. + {
  967. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_WAR));
  968. + return;
  969. + }
  970. + if (clan.getHasCastle() !=0 || clan.getHasHideout() != 0 || clan.getHasFort() != 0)
  971. + {
  972. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_OWNING_CLAN_HALL_OR_CASTLE));
  973. + return;
  974. + }
  975. +
  976. + for (Castle castle : CastleManager.getInstance().getCastles())
  977. + {
  978. + if (SiegeManager.getInstance().checkIsRegistered(clan, castle.getCastleId()))
  979. + {
  980. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE));
  981. + return;
  982. + }
  983. + }
  984. + for (Fort fort : FortManager.getInstance().getForts())
  985. + {
  986. + if (FortSiegeManager.getInstance().checkIsRegistered(clan, fort.getFortId()))
  987. + {
  988. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE));
  989. + return;
  990. + }
  991. + }
  992. +
  993. + if (player.isInsideZone(L2PcInstance.ZONE_SIEGE))
  994. + {
  995. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE));
  996. + return;
  997. + }
  998. + if (clan.getDissolvingExpiryTime() > System.currentTimeMillis())
  999. + {
  1000. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.DISSOLUTION_IN_PROGRESS));
  1001. + return;
  1002. + }
  1003. +
  1004. + clan.setDissolvingExpiryTime(System.currentTimeMillis() + Config.ALT_CLAN_DISSOLVE_DAYS * 86400000L); //24*60*60*1000 = 86400000
  1005. + clan.updateClanInDB();
  1006. +
  1007. + ClanTable.getInstance().scheduleRemoveClan(clan.getClanId());
  1008. +
  1009. + player.sendMessage("Your clan will be dissolved after "+Config.ALT_CLAN_DISSOLVE_DAYS+" days");
  1010. +
  1011. + // The clan leader should take the XP penalty of a full death.
  1012. + player.deathPenalty(false, false, false);
  1013. + }
  1014. +
  1015. + private static final void recoverClan(L2PcInstance player, int clanId)
  1016. + {
  1017. + if (!player.isClanLeader())
  1018. + {
  1019. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
  1020. + return;
  1021. + }
  1022. +
  1023. + final L2Clan clan = player.getClan();
  1024. + clan.setDissolvingExpiryTime(0);
  1025. + clan.updateClanInDB();
  1026. +
  1027. + player.sendMessage("Your clan deletion has been canceled");
  1028. + }
  1029. +
  1030. + private static final void changeClanLeader(L2PcInstance player, String target)
  1031. + {
  1032. + if (!player.isClanLeader())
  1033. + {
  1034. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
  1035. + return;
  1036. + }
  1037. + if (player.getName().equalsIgnoreCase(target))
  1038. + return;
  1039. + /*
  1040. + * Until proper clan leader change support is done, this is a little
  1041. + * exploit fix (leader, while fliying wyvern changes clan leader and the new leader
  1042. + * can ride the wyvern too)
  1043. + * DrHouse
  1044. + */
  1045. + if (player.isFlying())
  1046. + {
  1047. + player.sendMessage("Please, stop flying");
  1048. + return;
  1049. + }
  1050. +
  1051. + final L2Clan clan = player.getClan();
  1052. +
  1053. + final L2ClanMember member = clan.getClanMember(target);
  1054. + if (member == null)
  1055. + {
  1056. + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DOES_NOT_EXIST);
  1057. + sm.addString(target);
  1058. + player.sendPacket(sm);
  1059. + sm = null;
  1060. + return;
  1061. + }
  1062. + if (!member.isOnline())
  1063. + {
  1064. + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.INVITED_USER_NOT_ONLINE));
  1065. + return;
  1066. + }
  1067. + clan.setNewLeader(member);
  1068. + }
  1069. +
  1070. +}
  1071. \ No newline at end of file
  1072. #P L2J_DataPack
  1073. Index: data/html/default/AIO/SymbolMaker.htm
  1074. ===================================================================
  1075. --- data/html/default/AIO/SymbolMaker.htm (revision 0)
  1076. +++ data/html/default/AIO/SymbolMaker.htm (revision 0)
  1077. @@ -0,0 +1,13 @@
  1078. +<html><body>
  1079. +Hello! Isn't it a beautiful day?<br>
  1080. +Would you like to have a symbol made?<br>
  1081. +Have you brought dye?<br>
  1082. +Symbols are not easily made!<br>
  1083. +You must be certain of what you want before we begin! This is an expensive project and you cannot afford any false starts!<br>
  1084. +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>
  1085. +<center>
  1086. +<a action="bypass npc_%objectId%_Draw">Draw a symbol.</a><br>
  1087. +<a action="bypass npc_%objectId%_RemoveList">Delete a symbol.</a><br><br>
  1088. +<a action="bypass npc_%objectId%_Multisell 90022">"Buy Dyes"</a>
  1089. +</center>
  1090. +</body></html>
  1091. \ No newline at end of file
  1092. Index: data/scripts/handlers/bypasshandlers/RemoveHennaList.java
  1093. ===================================================================
  1094. --- data/scripts/handlers/bypasshandlers/RemoveHennaList.java (revision 7999)
  1095. +++ data/scripts/handlers/bypasshandlers/RemoveHennaList.java (working copy)
  1096. @@ -17,6 +17,7 @@
  1097. import com.l2jserver.gameserver.handler.IBypassHandler;
  1098. import com.l2jserver.gameserver.model.L2HennaInstance;
  1099. import com.l2jserver.gameserver.model.actor.L2Character;
  1100. +import com.l2jserver.gameserver.model.actor.instance.L2AioNpcInstance;
  1101. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  1102. import com.l2jserver.gameserver.model.actor.instance.L2SymbolMakerInstance;
  1103. import com.l2jserver.gameserver.network.serverpackets.HennaRemoveList;
  1104. @@ -30,7 +31,7 @@
  1105.  
  1106. public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
  1107. {
  1108. - if (!(target instanceof L2SymbolMakerInstance))
  1109. + if (!(target instanceof L2SymbolMakerInstance) && !(target instanceof L2AioNpcInstance))
  1110. return false;
  1111.  
  1112. boolean hasHennas = false;
  1113. Index: data/html/default/AIO/clan.htm
  1114. ===================================================================
  1115. --- data/html/default/AIO/clan.htm (revision 0)
  1116. +++ data/html/default/AIO/clan.htm (revision 0)
  1117. @@ -0,0 +1,64 @@
  1118. +<html><body><title>By L][World</title><br><center>
  1119. +<font color="LEVEL">Clan Manager</font>
  1120. +<td><img src=L2UI_CT1.Button_DF.Icon_DF_MenuWnd_Clan_Over width=34 height=40></td>
  1121. +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
  1122. +<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>
  1123. +<td><img src=L2UI_CH3.bloodhood_icon01 width=34 height=40></td>
  1124. +<table><tr>
  1125. +<td><edit var="name" width=117></td>
  1126. +<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>
  1127. +</tr></table>
  1128. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1129. +<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">
  1130. +<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">
  1131. +<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">
  1132. +<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">
  1133. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1134. +<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>
  1135. +<td><img src=L2UI_CT1.clan_DF_clanwaricon_bluecrownleader width=32 height=32></td>
  1136. +<table><tr>
  1137. +<td><edit var="leader" width=117 height=18></td>
  1138. +<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>
  1139. +</tr></table>
  1140. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1141. +<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>
  1142. +<td><img src=L2UI_CH3.bloodhood_icon02 width=34 height=40></td>
  1143. +<table><tr>
  1144. +<td><edit var="academy" width=117 height=18></td><br>
  1145. +<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>
  1146. +</tr></table>
  1147. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1148. +<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>
  1149. +<td><img src=L2UI_CH3.bloodhood_icon03 width=34 height=40></td>
  1150. +<font color="0077EE">Royal Name | Royal Leader</font>
  1151. +<table><tr>
  1152. +<td><edit var="royalname" width=117></td> <td><edit var="royalleadername" width=117></td>
  1153. +</tr></table><br>
  1154. +<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">
  1155. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1156. +<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>
  1157. +<td><img src=L2UI_CH3.bloodhood_icon04 width=34 height=40></td>
  1158. +<font color="0077EE">Order Name | Order Leader</font>
  1159. +<table><tr>
  1160. +<td><edit var="knightname" width=117></td> <td><edit var="knightleadername" width=117></td>
  1161. +</tr></table><br>
  1162. +<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">
  1163. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1164. +<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>
  1165. +<font color="0077EE"> Unit Name | New Unit Leader</font>
  1166. +<table><tr>
  1167. +<td><edit var="unitname" width=117></td> <td><edit var="unitlnewleader" width=117></td>
  1168. +</tr></table><br>
  1169. +<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">
  1170. +<img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
  1171. +<table cellspacing="-1"><tr>
  1172. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1173. +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
  1174. +</tr></table><br>
  1175. +<table cellspacing="-1"><tr>
  1176. +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
  1177. +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
  1178. +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
  1179. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1180. +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
  1181. +</tr></table></center><br></body></html>
  1182. Index: data/html/default/AIO/clan-1.htm
  1183. ===================================================================
  1184. --- data/html/default/AIO/clan-1.htm (revision 0)
  1185. +++ data/html/default/AIO/clan-1.htm (revision 0)
  1186. @@ -0,0 +1,47 @@
  1187. +<html><body><title>By L][World</title><br><center>
  1188. +<font color="LEVEL">Clan Manager</font>
  1189. +<td><img src=L2UI_CT1.Button_DF.Icon_DF_MenuWnd_Clan_Over width=34 height=40></td>
  1190. +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
  1191. +<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">
  1192. +<br><font color="FF6622">Requeriments to Increase Clan Level</font><br>
  1193. +<br><font color="FF9900">Clan Level 1</font><br>
  1194. +<font color="LEVEL">20000 SP + 650000 Adena</font><br>
  1195. +<br><font color="FF9900">Clan Level 2</font><br>
  1196. +<font color="LEVEL">100000 SP + 2500000 Adena</font><br>
  1197. +<br><font color="FF9900">Clan Level 3</font><br>
  1198. +<font color="LEVEL">350000 SP + Blood Mark</font><br>
  1199. +<br><font color="FF9900">Clan Level 4</font><br>
  1200. +<font color="LEVEL"> 1000000 SP + Alliance Manifesto</font><br>
  1201. +<br><font color="FF9900">Clan Level 5</font><br>
  1202. +<font color="LEVEL">2500000 SP + Seal of Aspiration</font><br>
  1203. +<br><font color="FF9900">Clan Level 6</font><br>
  1204. +<font color="LEVEL"> 10000 Clan Fame Points + 30 Clan Members </font><br>
  1205. +<br><font color="FF9900">Clan Level 7</font><br>
  1206. +<font color="LEVEL">20000 Clan Fame Points + 80 Clan Members </font><br>
  1207. +<br><font color="FF9900">Clan Level 8</font><br>
  1208. +<font color="LEVEL"> 40000 Clan Fame Points + 120 Clan Members </font><br>
  1209. +<br><font color="FF9900">Clan Level 9</font><br>
  1210. +<font color="LEVEL">40000 Clan Fame Points + 120 Clan Members </font><br>
  1211. +<font color="LEVEL">+ 150 Blood Oaths</font><br>
  1212. +<br><font color="FF9900">Clan Level 10</font><br>
  1213. +<font color="LEVEL">40000 Clan Fame Points + 140 Clan Members </font><br>
  1214. +<font color="LEVEL">+ 5 Blood Alliances</font><br>
  1215. +<br><font color="FF9900">Clan Level 11</font><br>
  1216. +<font color="LEVEL">75000 Clan Fame Points + 170 Clan Members </font><br>
  1217. +<font color="LEVEL">+ Territory Owner</font>
  1218. +<br><img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
  1219. +<table><tr>
  1220. +<td><img src="L2UI_CH3.shortcut_prev_over" width=16 height=16></td>
  1221. +<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>
  1222. +</tr></table>
  1223. +<table cellspacing="-1"><tr>
  1224. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1225. +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
  1226. +</tr></table><br>
  1227. +<table cellspacing="-1"><tr>
  1228. +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
  1229. +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
  1230. +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
  1231. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1232. +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
  1233. +</tr></table></center><br></body></html>
  1234. Index: data/scripts/custom/8005_SubClassSkills/__init__.py
  1235. ===================================================================
  1236. --- data/scripts/custom/8005_SubClassSkills/__init__.py (revision 7999)
  1237. +++ data/scripts/custom/8005_SubClassSkills/__init__.py (working copy)
  1238. @@ -15,7 +15,7 @@
  1239. from com.l2jserver.gameserver.util import Util
  1240.  
  1241. qn = "8005_SubClassSkills"
  1242. -NPC=32323
  1243. +NPC=[32323,101010]
  1244.  
  1245. SKILLITEMS=[10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10290,10291,10292,10293,10294,10612]
  1246. SUBSKILLS={
  1247. @@ -164,15 +164,14 @@
  1248. def onTalk (Self,npc,player):
  1249. st = player.getQuestState(qn)
  1250. npcId = npc.getNpcId()
  1251. - if npcId == NPC:
  1252. + if npcId in NPC:
  1253. st.set("cond","0")
  1254. st.setState(State.STARTED)
  1255. return "8005-01.htm"
  1256.  
  1257. QUEST = Quest(-1,qn,"custom")
  1258.  
  1259. -QUEST.addStartNpc(NPC)
  1260. -
  1261. -QUEST.addTalkId(NPC)
  1262. -
  1263. -QUEST.addAcquireSkillId(NPC)
  1264. \ No newline at end of file
  1265. +for item in NPC:
  1266. + QUEST.addStartNpc(item)
  1267. + QUEST.addTalkId(item)
  1268. + QUEST.addAcquireSkillId(item)
  1269. Index: data/scripts/handlers/bypasshandlers/DrawHenna.java
  1270. ===================================================================
  1271. --- data/scripts/handlers/bypasshandlers/DrawHenna.java (revision 7999)
  1272. +++ data/scripts/handlers/bypasshandlers/DrawHenna.java (working copy)
  1273. @@ -17,6 +17,7 @@
  1274. import com.l2jserver.gameserver.datatables.HennaTreeTable;
  1275. import com.l2jserver.gameserver.handler.IBypassHandler;
  1276. import com.l2jserver.gameserver.model.actor.L2Character;
  1277. +import com.l2jserver.gameserver.model.actor.instance.L2AioNpcInstance;
  1278. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  1279. import com.l2jserver.gameserver.model.actor.instance.L2SymbolMakerInstance;
  1280. import com.l2jserver.gameserver.network.serverpackets.HennaEquipList;
  1281. @@ -30,7 +31,7 @@
  1282.  
  1283. public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
  1284. {
  1285. - if (!(target instanceof L2SymbolMakerInstance))
  1286. + if (!(target instanceof L2SymbolMakerInstance) && !(target instanceof L2AioNpcInstance))
  1287. return false;
  1288.  
  1289. activeChar.sendPacket(new HennaEquipList(activeChar, HennaTreeTable.getInstance().getAvailableHenna(activeChar.getClassId())));
  1290. Index: data/html/default/101010.htm
  1291. ===================================================================
  1292. --- data/html/default/101010.htm (revision 0)
  1293. +++ data/html/default/101010.htm (revision 0)
  1294. @@ -0,0 +1,55 @@
  1295. +<html><body>
  1296. +<center>
  1297. +<table><tr>
  1298. +<td><img src="icon.etc_alphabet_a_i00" width=32 height=32></td>
  1299. +<td><img src="icon.etc_alphabet_i_i00" width=32 height=32></td>
  1300. +<td><img src="icon.etc_alphabet_o_i00" width=32 height=32></td>
  1301. +<td width=32 height=32><img src= ></td>
  1302. +<td><img src="icon.etc_alphabet_n_i00" width=32 height=32></td>
  1303. +<td><img src="icon.etc_alphabet_p_i00" width=32 height=32></td>
  1304. +<td><img src="icon.etc_alphabet_c_i00" width=32 height=32></td>
  1305. +</tr></table>
  1306. +<br><br>
  1307. +<tr><td><img src="L2UI.SquareWhite" width=280 height=1></tr></td>
  1308. +<table width=260 bgcolor="000000">
  1309. +<tr>
  1310. +<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>
  1311. +<td width=80 height=32><font color=ae9977>GMshop</font></td>
  1312. +<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>
  1313. +<td width=80 height=32><font color=ae9977>Global Gatekeeper</td>
  1314. +</tr>
  1315. +<tr>
  1316. +<td><button action="bypass npc_%objectId%_Link default/AIO/70020.htm" width=32 height=32 back="icon.skill1389" fore="icon.skill1388"></font></td>
  1317. +<td width=80 height=32><font color=ae9977>Buffer</font></td>
  1318. +<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>
  1319. +<td width=80 height=32><font color=ae9977>Symbol maker</font></td>
  1320. +</tr>
  1321. +</tr>
  1322. +<tr>
  1323. +<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>
  1324. +<td width=80 height=32><font color=ae9977>Augument service</font></td>
  1325. +<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>
  1326. +<td width=80 height=32><font color=ae9977>Warehouse</font></td>
  1327. +</tr>
  1328. +<tr>
  1329. +<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>
  1330. +<td width=80 height=32><font color=ae9977>Subclass</font></td>
  1331. +<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>
  1332. +<td width=80 height=32><font color=ae9977>Remove Attribute</font></td><
  1333. +</tr>
  1334. +<tr>
  1335. +<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>
  1336. +<td width=80 height=32><font color=ae9977>Clan</font></td>
  1337. +<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>
  1338. +<td width=80 height=32><font color=ae9977>Alliance</font></td>
  1339. +</tr>
  1340. +<tr>
  1341. +<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>
  1342. +<td width=80 height=32><font color=ae9977>Subclass Skills</font></td>
  1343. +</tr>
  1344. +</table>
  1345. +<tr><td><img src="L2UI.SquareWhite" width=280 height=1></tr></td>
  1346. +</center>
  1347. +</body>
  1348. +</html>
  1349. +
  1350. Index: data/html/default/AIO/101010-2.htm
  1351. ===================================================================
  1352. --- data/html/default/AIO/101010-2.htm (revision 0)
  1353. +++ data/html/default/AIO/101010-2.htm (revision 0)
  1354. @@ -0,0 +1,7 @@
  1355. +<html><body>Warehouse:<br>
  1356. +<center>
  1357. +<a action="bypass npc_%objectId%_DepositC" msg="1039">Deposit an item. (Clan Warehouse)</a><br>
  1358. +<a action="bypass npc_%objectId%_WithdrawC">Withdraw an item. (Clan Warehouse)</a><br><br>
  1359. +<a action="bypass npc_%objectId%_Chat 0">Return</a>
  1360. +</center>
  1361. +</body></html>
  1362. \ No newline at end of file
  1363. Index: data/html/default/AIO/101010-wh.htm
  1364. ===================================================================
  1365. --- data/html/default/AIO/101010-wh.htm (revision 0)
  1366. +++ data/html/default/AIO/101010-wh.htm (revision 0)
  1367. @@ -0,0 +1,6 @@
  1368. +<html><body>Warehouse:<br>
  1369. +<center>
  1370. +<a action="bypass npc_%objectId%_Link default/AIO/101010-1.htm">Private Warehouse</a><br>
  1371. +<a action="bypass npc_%objectId%_Link default/AIO/101010-2.htm">Clan Warehouse</a><br>
  1372. +</center>
  1373. +</body></html>
  1374. \ No newline at end of file
  1375. Index: data/html/default/AIO/101010-1.htm
  1376. ===================================================================
  1377. --- data/html/default/AIO/101010-1.htm (revision 0)
  1378. +++ data/html/default/AIO/101010-1.htm (revision 0)
  1379. @@ -0,0 +1,7 @@
  1380. +<html><body>Warehouse:<br>
  1381. +<center>
  1382. +<a action="bypass npc_%objectId%_DepositP">Deposit an item. (Private Warehouse)</a><br>
  1383. +<a action="bypass npc_%objectId%_WithdrawP">Withdraw an item. (Private Warehouse)</a><br><br>
  1384. +<a action="bypass npc_%objectId%_Chat 0">Return</a>
  1385. +</center>
  1386. +</body></html>
  1387. \ No newline at end of file
  1388. Index: data/scripts/village_master/9002_SubClassCertification/__init__.py
  1389. ===================================================================
  1390. --- data/scripts/village_master/9002_SubClassCertification/__init__.py (revision 7999)
  1391. +++ data/scripts/village_master/9002_SubClassCertification/__init__.py (working copy)
  1392. @@ -21,7 +21,7 @@
  1393. 31288,31314,31317,31321,31324,31326,31328,31331,31334,31336,31755,31958,31961, \
  1394. 31965,31968,31974,31977,31996,32092,32093,32094,32095,32096,32097,32098,32145, \
  1395. 32146,32147,32150,32153,32154,32157,32158,32160,32171,32193,32199,32202,32213, \
  1396. - 32214,32221,32222,32229,32230,32233,32234]
  1397. + 32214,32221,32222,32229,32230,32233,32234,101010]
  1398. WARRIORCLASSES=[3,88,2,89,46,48,113,114,55,117,56,118,127,131,128,129,132,133]
  1399. ROGUECLASSES=[9,92,24,102,37,109,130,134,8,93,23,101,36,108]
  1400. KNIGHTCLASSES=[5,90,6,91,20,99,33,106]
  1401. Index: data/html/default/AIO/70020.htm
  1402. ===================================================================
  1403. --- data/html/default/AIO/70020.htm (revision 0)
  1404. +++ data/html/default/AIO/70020.htm (revision 0)
  1405. @@ -0,0 +1,23 @@
  1406. +<html><body><title>Buff Master By L][World</title><br><center>
  1407. +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
  1408. +<table><tr>
  1409. +<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>
  1410. +</tr></table>
  1411. +<table><tr>
  1412. +<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>
  1413. +</tr></table>
  1414. +<table cellspacing="-45"><tr>
  1415. +<td><img src=WarEffectsTextures.FireTexture.jm-fire1 width=320 height=220></td>
  1416. +</tr></table><br>
  1417. +<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>
  1418. +<table cellspacing="-1"><tr>
  1419. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1420. +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
  1421. +</tr></table><br>
  1422. +<table cellspacing="-1"><tr>
  1423. +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
  1424. +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
  1425. +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
  1426. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1427. +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
  1428. +</tr></table></center><br></body></html>
  1429. \ No newline at end of file
  1430. Index: data/html/default/AIO/SubClass.htm
  1431. ===================================================================
  1432. --- data/html/default/AIO/SubClass.htm (revision 0)
  1433. +++ data/html/default/AIO/SubClass.htm (revision 0)
  1434. @@ -0,0 +1,6 @@
  1435. +<html><body>Subclass:<br>
  1436. +<a action="bypass npc_%objectId%_Subclass 1">Add subclass.</a><br>
  1437. +<a action="bypass npc_%objectId%_Subclass 2">Change subclass.</a><br>
  1438. +<a action="bypass npc_%objectId%_Subclass 3">Cancel current subclass and change to a new subclass.</a><br>
  1439. +<a action="bypass npc_%objectId%_Quest 9002_SubClassCertification">Subclass skill certification.</a>
  1440. +</body></html>
  1441. \ No newline at end of file
  1442. Index: data/html/default/AIO/Augment.htm
  1443. ===================================================================
  1444. --- data/html/default/AIO/Augment.htm (revision 0)
  1445. +++ data/html/default/AIO/Augment.htm (revision 0)
  1446. @@ -0,0 +1,5 @@
  1447. +<html><body>Augments:<br>
  1448. +<a action="bypass npc_%objectId%_Augment 1">Add an augment.</a><br>
  1449. +<a action="bypass npc_%objectId%_Augment 2">Remove an augment.</a><br>
  1450. +
  1451. +</body></html>
  1452. \ No newline at end of file
  1453. Index: data/html/default/AIO/ally.htm
  1454. ===================================================================
  1455. --- data/html/default/AIO/ally.htm (revision 0)
  1456. +++ data/html/default/AIO/ally.htm (revision 0)
  1457. @@ -0,0 +1,27 @@
  1458. +<html><body><title>By L][World</title><br><center>
  1459. +<font color="LEVEL">Alliance Manager</font>
  1460. +<td><img src=L2UI_CT1.Button_DF.Icon_DF_MenuWnd_Clan_Over width=34 height=40></td>
  1461. +<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32>
  1462. +<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">
  1463. +<table><tr>
  1464. +<td><edit var="name" width=117 height=18></td>
  1465. +<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>
  1466. +</tr></table>
  1467. +<br><img src="L2UI.SquareGray" width=250 height=1><br>
  1468. +<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">
  1469. +<br><img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32>
  1470. +<table><tr>
  1471. +<td><img src="L2UI_CH3.shortcut_prev_over" width=16 height=16></td>
  1472. +<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>
  1473. +</tr></table>
  1474. +<table cellspacing="-1"><tr>
  1475. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1476. +<td><img src=icon.etc_alphabet_ii_i00 width=32 height=32></td>
  1477. +</tr></table><br>
  1478. +<table cellspacing="-1"><tr>
  1479. +<td><img src=icon.etc_alphabet_w_i00 width=32 height=32></td>
  1480. +<td><img src=icon.etc_alphabet_o_i00 width=32 height=32></td>
  1481. +<td><img src=icon.etc_alphabet_r_i00 width=32 height=32></td>
  1482. +<td><img src=icon.etc_alphabet_l_i00 width=32 height=32></td>
  1483. +<td><img src=icon.etc_alphabet_d_i00 width=32 height=32></td>
  1484. +</tr></table></center><br></body></html>
  1485. Index: data/scripts/handlers/bypasshandlers/ClanWarehouse.java
  1486. ===================================================================
  1487. --- data/scripts/handlers/bypasshandlers/ClanWarehouse.java (revision 7999)
  1488. +++ data/scripts/handlers/bypasshandlers/ClanWarehouse.java (working copy)
  1489. @@ -19,6 +19,7 @@
  1490. import com.l2jserver.gameserver.model.L2Clan;
  1491. import com.l2jserver.gameserver.model.actor.L2Character;
  1492. import com.l2jserver.gameserver.model.actor.L2Npc;
  1493. +import com.l2jserver.gameserver.model.actor.instance.L2AioNpcInstance;
  1494. import com.l2jserver.gameserver.model.actor.instance.L2ClanHallManagerInstance;
  1495. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  1496. import com.l2jserver.gameserver.model.actor.instance.L2WarehouseInstance;
  1497. @@ -42,8 +43,9 @@
  1498.  
  1499. public boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
  1500. {
  1501. - if (!(target instanceof L2WarehouseInstance) && !(target instanceof L2ClanHallManagerInstance))
  1502. - return false;
  1503. + if(!(target instanceof L2AioNpcInstance))
  1504. + if (!(target instanceof L2WarehouseInstance) && !(target instanceof L2ClanHallManagerInstance))
  1505. + return false;
  1506.  
  1507. if (activeChar.isEnchanting())
  1508. return false;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement