Q00296_TarantulasSpiderSilk.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. * Copyright (C) 2004-2015 L2J DataPack
  3. *
  4. * This file is part of L2J DataPack.
  5. *
  6. * L2J DataPack is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J DataPack is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package quests.Q00296_TarantulasSpiderSilk;
  20. import quests.Q00281_HeadForTheHills.Q00281_HeadForTheHills;
  21. import com.l2jserver.gameserver.model.actor.L2Npc;
  22. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  23. import com.l2jserver.gameserver.model.quest.Quest;
  24. import com.l2jserver.gameserver.model.quest.QuestState;
  25. import com.l2jserver.gameserver.util.Util;
  26. /**
  27. * Tarantula's Spider Silk (296)
  28. * @author xban1x
  29. */
  30. public final class Q00296_TarantulasSpiderSilk extends Quest
  31. {
  32. // NPCs
  33. private static final int TRADER_MION = 30519;
  34. private static final int DEFENDER_NATHAN = 30548;
  35. // Items
  36. private static final int TARANTULA_SPIDER_SILK = 1493;
  37. private static final int TARANTULA_SPINNERETTE = 1494;
  38. // Monsters
  39. private static final int[] MONSTERS = new int[]
  40. {
  41. 20394,
  42. 20403,
  43. 20508,
  44. };
  45. // Misc
  46. private static final int MIN_LVL = 15;
  47. public Q00296_TarantulasSpiderSilk()
  48. {
  49. super(296, Q00296_TarantulasSpiderSilk.class.getSimpleName(), "Tarantula's Spider Silk");
  50. addStartNpc(TRADER_MION);
  51. addTalkId(TRADER_MION, DEFENDER_NATHAN);
  52. addKillId(MONSTERS);
  53. registerQuestItems(TARANTULA_SPIDER_SILK, TARANTULA_SPINNERETTE);
  54. }
  55. @Override
  56. public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  57. {
  58. final QuestState qs = getQuestState(player, false);
  59. String html = null;
  60. if (qs == null)
  61. {
  62. return null;
  63. }
  64. switch (event)
  65. {
  66. case "30519-03.htm":
  67. {
  68. if (qs.isCreated())
  69. {
  70. qs.startQuest();
  71. html = event;
  72. }
  73. break;
  74. }
  75. case "30519-06.html":
  76. {
  77. if (qs.isStarted())
  78. {
  79. qs.exitQuest(true, true);
  80. html = event;
  81. }
  82. break;
  83. }
  84. case "30519-07.html":
  85. {
  86. if (qs.isStarted())
  87. {
  88. html = event;
  89. }
  90. break;
  91. }
  92. case "30548-03.html":
  93. {
  94. if (qs.isStarted())
  95. {
  96. if (hasQuestItems(player, TARANTULA_SPINNERETTE))
  97. {
  98. giveItems(player, TARANTULA_SPIDER_SILK, (15 + getRandom(9)) * getQuestItemsCount(player, TARANTULA_SPINNERETTE));
  99. takeItems(player, TARANTULA_SPINNERETTE, -1);
  100. html = event;
  101. }
  102. else
  103. {
  104. html = "30548-02.html";
  105. }
  106. }
  107. break;
  108. }
  109. }
  110. return html;
  111. }
  112. @Override
  113. public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
  114. {
  115. final QuestState qs = getQuestState(killer, false);
  116. if ((qs != null) && Util.checkIfInRange(1500, npc, killer, true))
  117. {
  118. final int chance = getRandom(100);
  119. if (chance > 95)
  120. {
  121. giveItemRandomly(killer, npc, TARANTULA_SPINNERETTE, 1, 0, 1, true);
  122. }
  123. else if (chance > 45)
  124. {
  125. giveItemRandomly(killer, npc, TARANTULA_SPIDER_SILK, 1, 0, 1, true);
  126. }
  127. }
  128. return super.onKill(npc, killer, isSummon);
  129. }
  130. @Override
  131. public String onTalk(L2Npc npc, L2PcInstance talker)
  132. {
  133. final QuestState qs = getQuestState(talker, true);
  134. String html = getNoQuestMsg(talker);
  135. if (qs.isCreated() && (npc.getId() == TRADER_MION))
  136. {
  137. html = (talker.getLevel() >= MIN_LVL ? "30519-02.htm" : "30519-01.htm");
  138. }
  139. else if (qs.isStarted())
  140. {
  141. if (npc.getId() == TRADER_MION)
  142. {
  143. final long silk = getQuestItemsCount(talker, TARANTULA_SPIDER_SILK);
  144. if (silk >= 1)
  145. {
  146. giveAdena(talker, (silk * 30) + (silk >= 10 ? 2000 : 0), true);
  147. takeItems(talker, TARANTULA_SPIDER_SILK, -1);
  148. Q00281_HeadForTheHills.giveNewbieReward(talker);// TODO: It's using wrong bitmask, need to create a general bitmask for this using EnumIntBitmask class inside Quest class for handling Quest rewards.
  149. html = "30519-05.html";
  150. }
  151. else
  152. {
  153. html = "30519-04.html";
  154. }
  155. }
  156. else if (npc.getId() == DEFENDER_NATHAN)
  157. {
  158. html = "30548-01.html";
  159. }
  160. }
  161. return html;
  162. }
  163. }