Initial changes.
This commit is contained in:
@@ -1,8 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks.<br>
|
||||
<font color="LEVEL">Do not expect Shilen's authority will diminish<br>
|
||||
while false gods freely roam.<br>
|
||||
Leave, and<br>
|
||||
prepare to face the return of Antharas.</font><br>
|
||||
(Challenging Antharas is not currently available.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">Do not expect that you might challenge Antharas at your own convenience.<br>
|
||||
When the time is right, Shilen's authority will judge you.</font><br>
|
||||
(Currently, other members are challenging Antharas.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
A voice that can shatter your entire body is resonating in your head:<br>
|
||||
<font color="LEVEL">Do not dare to face Shilen's authority<br>
|
||||
without the most determined preparation.</font><br>
|
||||
(Only those who have the Portal Stone can challenge Antharas.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">No matter how many gather to follow false gods,<br>
|
||||
Shilen's authority is too great.</font><br>
|
||||
(The number of participants are above the allowed number in challenging Antharas.)
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">You seek death and defeat by coming here without your leader! You appear before Shilen's authority<br>
|
||||
and you tempt Shilen's wrath!</font><br>
|
||||
(The players who belong to an association can only enter through the Association Leader.)
|
||||
</body></html>
|
@@ -1,12 +0,0 @@
|
||||
<html><body>Heart of Warding:<br>
|
||||
You are overcome by a voice, a voice so powerful you are helpless as it speaks:<br>
|
||||
<font color="LEVEL">A terrible creature <br>
|
||||
fell to the earth from above <br>
|
||||
in order to vent a mother's spite,<br>
|
||||
cursed and forsaken by her own children.<br>
|
||||
Dark Pilgrim of the Holy Land,<br>
|
||||
Do you dare face the Land Dragon Antharas?</font><br>
|
||||
(A maximum of 200 people can challenge Antharas.)<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Quest Antharas enter">Move to Antharas' Nest</button>
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</body></html>
|
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ Greetings, my lord. How may I serve you today?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleChamberlain list_siege_clans">View castle siege information</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleChamberlain manor">Manage manor</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest CastleChamberlain products">Items</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 4039">Buy items for the Castle Owners Coins</Button>
|
||||
<!--<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 4039">Buy items for the Castle Owners Coins</Button>-->
|
||||
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
|
||||
</center>
|
||||
</body></html>
|
@@ -1,7 +1,7 @@
|
||||
<html><body>
|
||||
<center>
|
||||
<font color="LEVEL">[The Town of %TOWN_NAME%]</font><br>
|
||||
<img src="L2font-eu.MAP_AGIT_%MAP%" width=270 height=270><br><br>
|
||||
<img src="L2font-e.MAP_AGIT_%MAP%" width=270 height=270><br><br>
|
||||
</center>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest ClanHallAuctioneer ClanHallAuctioneer.html">Back</Button>
|
||||
</body></html>
|
@@ -30,7 +30,7 @@ public class SeeThroughSilentMove extends AbstractNpcAI
|
||||
//@formatter:off
|
||||
private static final int[] MONSTERS =
|
||||
{
|
||||
20142, 18002, 29009, 29010, 29011, 29012, 29013
|
||||
20142, 29009, 29010, 29011, 29012, 29013
|
||||
};
|
||||
//@formatter:on
|
||||
|
||||
|
@@ -1,9 +0,0 @@
|
||||
<html><body>Letter Collector Rosalia:<br>
|
||||
I'm glad to see you, adventurer!<br>
|
||||
Do you want to claim reward for collecting the words <font color="LEVEL">LINEAGE II</font>, <font color="LEVEL">MEMORIES</font>, or <font color="LEVEL">CHRONICLE</font>?<br>
|
||||
You can make these words from the letters you get while hunting the monsters in Lineage II world.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector lineage">"I have all of the letters of LINEAGE II!"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector memories">"I have all of the letters of MEMORIES!"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector chronicle">"I have all of the letters of CHRONICLE!"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector 9000-2.htm">"I'd like to exchange my letters for other ones."</Button>
|
||||
</body></html>
|
@@ -1,17 +0,0 @@
|
||||
<html><body>Letter Collector Rosalia:<br>
|
||||
I can exchange <font color="LEVEL">two of your letters</font> for <font color="LEVEL">one</font> of random letters. In case with the rare S, H and the number II, you'll will need only one item for exchange. Press the button below when're you ready!<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeA">"I want to exchange two of my letters A for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeC">"I want to exchange two of my letters C for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeE">"I want to exchange two of my letters E for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeG">"I want to exchange two of my letters G for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeI">"I want to exchange two of my letters I for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeL">"I want to exchange two of my letters L for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeM">"I want to exchange two of my letters M for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeN">"I want to exchange two of my letters N for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeO">"I want to exchange two of my letters O for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeL">"I want to exchange two of my letters R for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeH">"I want to exchange one of my letters H for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeS">"I want to exchange one of my letters S for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest LetterCollector exchangeII">"I want to exchange one of my letters II for another random one."</Button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest LetterCollector 9000-1.htm">Back</Button>
|
||||
</body></html>
|
@@ -1,361 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package events.LetterCollector;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
|
||||
|
||||
/**
|
||||
* Event: Letter Collector
|
||||
* @URL https://eu.4gameforum.com/threads/648400/
|
||||
* @author Mobius, Gigi, Adapted for Classic by QuangNguyen
|
||||
*/
|
||||
public class LetterCollector extends LongTimeEvent
|
||||
{
|
||||
// NPC
|
||||
private static final int ROSALIA = 9000;
|
||||
// Items
|
||||
private static final int A = 3875;
|
||||
private static final int C = 3876;
|
||||
private static final int E = 3877;
|
||||
private static final int G = 3879;
|
||||
private static final int I = 3881;
|
||||
private static final int L = 3882;
|
||||
private static final int N = 3883;
|
||||
private static final int R = 3885;
|
||||
private static final int M = 34956;
|
||||
private static final int O = 3884;
|
||||
private static final int S = 3886;
|
||||
private static final int H = 3880;
|
||||
private static final int II = 3888;
|
||||
// Exchange Letters
|
||||
private static final int[] LETTERS =
|
||||
{
|
||||
A,
|
||||
C,
|
||||
E,
|
||||
G,
|
||||
I,
|
||||
L,
|
||||
N,
|
||||
R,
|
||||
M,
|
||||
O,
|
||||
S,
|
||||
H,
|
||||
II
|
||||
};
|
||||
// Reward
|
||||
private static final int LINEAGEII = 29581;
|
||||
private static final int MEMMORIES = 29583;
|
||||
private static final int CHRONICLE = 29582;
|
||||
|
||||
private LetterCollector()
|
||||
{
|
||||
addStartNpc(ROSALIA);
|
||||
addFirstTalkId(ROSALIA);
|
||||
addTalkId(ROSALIA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "9000-1.htm":
|
||||
case "9000-2.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "lineage":
|
||||
{
|
||||
if ((getQuestItemsCount(player, L) >= 1) && //
|
||||
(getQuestItemsCount(player, I) >= 1) && //
|
||||
(getQuestItemsCount(player, N) >= 1) && //
|
||||
(getQuestItemsCount(player, E) >= 2) && //
|
||||
(getQuestItemsCount(player, A) >= 1) && //
|
||||
(getQuestItemsCount(player, G) >= 1) && //
|
||||
(getQuestItemsCount(player, II) >= 1))
|
||||
{
|
||||
takeItems(player, L, 1);
|
||||
takeItems(player, I, 1);
|
||||
takeItems(player, N, 1);
|
||||
takeItems(player, E, 2);
|
||||
takeItems(player, A, 1);
|
||||
takeItems(player, G, 1);
|
||||
takeItems(player, II, 1);
|
||||
giveItems(player, LINEAGEII, 1);
|
||||
htmltext = "9000-1.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItem.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "memories":
|
||||
{
|
||||
if ((getQuestItemsCount(player, M) >= 2) && //
|
||||
(getQuestItemsCount(player, E) >= 2) && //
|
||||
(getQuestItemsCount(player, O) >= 1) && //
|
||||
(getQuestItemsCount(player, R) >= 1) && //
|
||||
(getQuestItemsCount(player, I) >= 1) && //
|
||||
(getQuestItemsCount(player, S) >= 1))
|
||||
{
|
||||
takeItems(player, M, 2);
|
||||
takeItems(player, E, 2);
|
||||
takeItems(player, O, 1);
|
||||
takeItems(player, R, 1);
|
||||
takeItems(player, I, 1);
|
||||
takeItems(player, S, 1);
|
||||
giveItems(player, MEMMORIES, 1);
|
||||
htmltext = "9000-1.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItem.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "chronicle":
|
||||
{
|
||||
if ((getQuestItemsCount(player, C) >= 2) && //
|
||||
(getQuestItemsCount(player, H) >= 1) && //
|
||||
(getQuestItemsCount(player, R) >= 1) && //
|
||||
(getQuestItemsCount(player, O) >= 1) && //
|
||||
(getQuestItemsCount(player, N) >= 1) && //
|
||||
(getQuestItemsCount(player, I) >= 1) && //
|
||||
(getQuestItemsCount(player, L) >= 1) && //
|
||||
(getQuestItemsCount(player, E) >= 1))
|
||||
{
|
||||
takeItems(player, C, 2);
|
||||
takeItems(player, H, 1);
|
||||
takeItems(player, R, 1);
|
||||
takeItems(player, O, 1);
|
||||
takeItems(player, N, 1);
|
||||
takeItems(player, I, 1);
|
||||
takeItems(player, L, 1);
|
||||
takeItems(player, E, 1);
|
||||
giveItems(player, CHRONICLE, 1);
|
||||
htmltext = "9000-1.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItem.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeA":
|
||||
{
|
||||
if (getQuestItemsCount(player, A) >= 2)
|
||||
{
|
||||
takeItems(player, A, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeC":
|
||||
{
|
||||
if (getQuestItemsCount(player, C) >= 2)
|
||||
{
|
||||
takeItems(player, C, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeE":
|
||||
{
|
||||
if (getQuestItemsCount(player, E) >= 2)
|
||||
{
|
||||
takeItems(player, E, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeG":
|
||||
{
|
||||
if (getQuestItemsCount(player, G) >= 2)
|
||||
{
|
||||
takeItems(player, G, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeI":
|
||||
{
|
||||
if (getQuestItemsCount(player, I) >= 2)
|
||||
{
|
||||
takeItems(player, I, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeL":
|
||||
{
|
||||
if (getQuestItemsCount(player, L) >= 2)
|
||||
{
|
||||
takeItems(player, L, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeM":
|
||||
{
|
||||
if (getQuestItemsCount(player, M) >= 2)
|
||||
{
|
||||
takeItems(player, M, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeN":
|
||||
{
|
||||
if (getQuestItemsCount(player, N) >= 2)
|
||||
{
|
||||
takeItems(player, N, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeO":
|
||||
{
|
||||
if (getQuestItemsCount(player, O) >= 2)
|
||||
{
|
||||
takeItems(player, O, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeR":
|
||||
{
|
||||
if (getQuestItemsCount(player, R) >= 2)
|
||||
{
|
||||
takeItems(player, R, 2);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeH":
|
||||
{
|
||||
if (getQuestItemsCount(player, H) >= 1)
|
||||
{
|
||||
takeItems(player, H, 1);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeS":
|
||||
{
|
||||
if (getQuestItemsCount(player, S) >= 1)
|
||||
{
|
||||
takeItems(player, S, 1);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "exchangeII":
|
||||
{
|
||||
if (getQuestItemsCount(player, II) >= 1)
|
||||
{
|
||||
takeItems(player, II, 1);
|
||||
giveItems(player, getRandomEntry(LETTERS), 1);
|
||||
htmltext = "9000-2.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "noItemExchange.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, Player player)
|
||||
{
|
||||
return npc.getId() + "-1.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new LetterCollector();
|
||||
}
|
||||
}
|
@@ -1,36 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<event name="Looking for right words" active="08 03 2017-09 03 2018" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
|
||||
<droplist>
|
||||
<add item="3875" min="1" max="1" chance="3%" /> <!-- Letter Collector's A -->
|
||||
<add item="3876" min="1" max="1" chance="3%" /> <!-- Letter Collector's C -->
|
||||
<add item="3877" min="1" max="1" chance="3%" /> <!-- Letter Collector's E -->
|
||||
<add item="3879" min="1" max="1" chance="3%" /> <!-- Letter Collector's G -->
|
||||
<add item="3881" min="1" max="1" chance="3%" /> <!-- Letter Collector's I -->
|
||||
<add item="3882" min="1" max="1" chance="3%" /> <!-- Letter Collector's L -->
|
||||
<add item="3883" min="1" max="1" chance="3%" /> <!-- Letter Collector's N -->
|
||||
<add item="3885" min="1" max="1" chance="3%" /> <!-- Letter Collector's R -->
|
||||
<add item="34956" min="1" max="1" chance="3%" /> <!-- Letter Collector's M -->
|
||||
<add item="3884" min="1" max="1" chance="3%" /> <!-- Letter Collector's O -->
|
||||
<add item="3886" min="1" max="1" chance="3%" /> <!-- Letter Collector's S -->
|
||||
<add item="3880" min="1" max="1" chance="3%" /> <!-- Letter Collector's H -->
|
||||
<add item="3888" min="1" max="1" chance="3%" /> <!-- Letter Collector's II -->
|
||||
</droplist>
|
||||
<spawnlist>
|
||||
<add npc="9000" x="-84008" y="243032" z="-3728" heading="49744" /> <!-- Talking Island -->
|
||||
<add npc="9000" x="45688" y="49080" z="-3056" heading="49744" /> <!-- Elven Village -->
|
||||
<add npc="9000" x="-44584" y="-113608" z="-192" heading="49744" /> <!-- Orc Village -->
|
||||
<add npc="9000" x="10643" y="17034" z="-4592" heading="49744" /> <!-- Dark Elven Village -->
|
||||
<add npc="9000" x="115656" y="-178056" z="-912" heading="49744" /> <!-- Dwarf Village -->
|
||||
<add npc="9000" x="-80485" y="149537" z="-3016" heading="16383" /> <!-- Gluddin -->
|
||||
<add npc="9000" x="-14143" y="123176" z="-3096" heading="30212" /> <!-- Gludio -->
|
||||
<add npc="9000" x="16354" y="142848" z="-2680" heading="14450" /> <!-- Dion -->
|
||||
<add npc="9000" x="82312" y="148616" z="-3440" heading="3355" /> <!-- Giran -->
|
||||
<add npc="9000" x="82008" y="53874" z="-1472" heading="3355" /> <!-- Oren -->
|
||||
<add npc="9000" x="147064" y="25928" z="-2008" heading="17863" /> <!-- Aden -->
|
||||
<add npc="9000" x="117380" y="76684" z="-2672" heading="40961" /> <!-- Hunters Village -->
|
||||
</spawnlist>
|
||||
<messages>
|
||||
<add type="onEnd" text="Looking for right words: Event end!" />
|
||||
<add type="onEnter" text="Looking for right words: Event ongoing!" />
|
||||
</messages>
|
||||
</event>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Letter Collector Rosalia:<br>
|
||||
I'm sorry, but you'll need more letters to play.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest LetterCollector 9000-1.htm">Back</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Letter Collector Rosalia:<br>
|
||||
I'm sorry, but you do not have enough letters to exchange!.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest LetterCollector 9000-1.htm">Back</Button>
|
||||
</body></html>
|
@@ -1,8 +0,0 @@
|
||||
<html><body>Santa Claus:<br>
|
||||
Nice to meet you! I'm Santa Claus! Every year I come to give presents to all the good people of Elmoreaden. But this year some goblins stole all my presents and put them in enchanted squash seeds!<br>
|
||||
Would you like to help me out? Use seeds with nectar to raise squashes and attack them with chrono weapons!<br>
|
||||
I will trade you seeds for nectar. You can get nectar by killing any monsters all throughout the world.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3388801">Exchange nectar for squash seed.</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3388802">Exchange nectar for a chrono weapon.</Button>
|
||||
Plant the seed by double-clicking on it! Raise it well and claim your presents! Good luck!
|
||||
</body></html>
|
@@ -1,656 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package events.MerrySquashmas;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.data.ItemTable;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Monster;
|
||||
import org.l2jmobius.gameserver.model.item.type.CrystalType;
|
||||
import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
/**
|
||||
* @URL https://eu.4gameforum.com/threads/621704/
|
||||
* @author vGodFather
|
||||
*/
|
||||
public class MerrySquashmas extends LongTimeEvent
|
||||
{
|
||||
private static final int MANAGER = 33888;
|
||||
private static final int SNOWY_NECTAR_SKILL = 17110;
|
||||
|
||||
private static final List<Integer> SQUASH_LIST = Arrays.asList(13399, 13400, 13401, 13402, 13403, 13404, 13405, 13406);
|
||||
private static final List<Integer> LARGE_SQUASH_LIST = Arrays.asList(13403, 13404, 13405, 13406);
|
||||
private static final List<Integer> CHRONO_LIST = Arrays.asList(4202, 5133, 5817, 7058, 8350);
|
||||
|
||||
//@formatter:off
|
||||
private static final String[] _NOCHRONO_TEXT =
|
||||
{
|
||||
"You cannot kill me without Chrono",
|
||||
"Hehe...keep trying...",
|
||||
"Nice try...",
|
||||
"Tired ?",
|
||||
"Go go ! haha..."
|
||||
};
|
||||
private static final String[] _CHRONO_TEXT =
|
||||
{
|
||||
"Arghh... Chrono weapon...",
|
||||
"My end is coming...",
|
||||
"Please leave me!",
|
||||
"Heeellpppp...",
|
||||
"Somebody help me please..."
|
||||
};
|
||||
private static final String[] _NECTAR_TEXT =
|
||||
{
|
||||
"Yummie... Nectar...",
|
||||
"Plase give me more...",
|
||||
"Hmmm.. More.. I need more...",
|
||||
"I would like you more, if you give me more...",
|
||||
"Hmmmmmmm...",
|
||||
"My favourite..."
|
||||
};
|
||||
|
||||
// Weapon
|
||||
private static final int Atuba_Hammer = 187;
|
||||
private static final int Gastraphetes = 278;
|
||||
private static final int Maingauche = 224;
|
||||
private static final int Staff_of_Life = 189;
|
||||
private static final int Sword_of_Revolution = 129;
|
||||
private static final int War_Pick = 294;
|
||||
private static final int Battle_Axe = 160;
|
||||
private static final int Crystal_Staff = 192;
|
||||
private static final int Crystallized_Ice_Bow = 281;
|
||||
private static final int Flamberge = 71;
|
||||
private static final int Orcish_Glaive = 298;
|
||||
private static final int Stick_of_Faith = 193;
|
||||
private static final int Stormbringer = 72;
|
||||
private static final int Berserker_Blade = 5286;
|
||||
private static final int Dark_Screamer = 233;
|
||||
private static final int Eminence_Bow = 286;
|
||||
private static final int Fisted_Blade = 265;
|
||||
private static final int Homunkulus_Sword = 84;
|
||||
private static final int Poleaxe = 95;
|
||||
private static final int Sage_Staff = 200;
|
||||
private static final int Sword_of_Nightmare = 134;
|
||||
|
||||
// Armor
|
||||
private static final int Divine_Gloves = 2463;
|
||||
private static final int Divine_Stockings = 473;
|
||||
private static final int Divine_Tunic = 442;
|
||||
private static final int Drake_Leather_Armor = 401;
|
||||
private static final int Drake_Leather_Boots = 2437;
|
||||
private static final int Full_Plate_Armor = 356;
|
||||
private static final int Full_Plate_Helmet = 2414;
|
||||
private static final int Full_Plate_Shield = 2497;
|
||||
private static final int Avadon_Robe = 2406;
|
||||
private static final int Blue_Wolf_Breastplate = 358;
|
||||
private static final int Blue_Wolf_Gaiters = 2380;
|
||||
private static final int Leather_Armor_of_Doom = 2392;
|
||||
private static final int Sealed_Avadon_Boots = 600;
|
||||
private static final int Sealed_Avadon_Circlet = 2415;
|
||||
private static final int Sealed_Avadon_Gloves = 2464;
|
||||
private static final int Sealed_Blue_Wolf_Boots = 2439;
|
||||
private static final int Sealed_Blue_Wolf_Gloves = 2487;
|
||||
private static final int Sealed_Blue_Wolf_Helmet = 2416;
|
||||
private static final int Sealed_Doom_Boots = 601;
|
||||
private static final int Sealed_Doom_Gloves = 2475;
|
||||
private static final int Sealed_Doom_Helmet = 2417;
|
||||
|
||||
// Misc
|
||||
private static final int Class_Buff_Scroll_1st = 29011;
|
||||
private static final int Angel_Cat_Blessing_Chest = 29584;
|
||||
private static final int Major_Healing_Potion = 1539;
|
||||
private static final int Rice_Cake_of_Fighting_Spirit = 49080;
|
||||
private static final int XP_SP_Scroll_Normal = 29648;
|
||||
private static final int XP_SP_Scroll_Medium = 29519;
|
||||
private static final int Greater_CP_Potion = 5592;
|
||||
private static final int Quick_Healing_Potion = 1540;
|
||||
private static final int Class_Buff_Scroll_2nd = 29698;
|
||||
private static final int Scroll_Enchant_Armor_D = 956;
|
||||
private static final int Scroll_Enchant_Weapon_D = 955;
|
||||
private static final int Scroll_Enchant_Armor_C = 952;
|
||||
private static final int Scroll_Enchant_Weapon_C = 951;
|
||||
private static final int Blessed_Scroll_Enchant_Armor_C = 29022;
|
||||
private static final int Blessed_Scroll_Enchant_Weapon_C = 29021;
|
||||
private static final int Blessed_Scroll_Enchant_Armor_D = 29020;
|
||||
private static final int Blessed_Scroll_Enchant_Weapon_D = 29019;
|
||||
private static final int Special_Pirate_Fruit = 49518;
|
||||
private static final int XP_SP_Scroll_High = 29010;
|
||||
private static final int Blessed_Scroll_of_Escape = 1538;
|
||||
private static final int Blessed_Scroll_of_Resurrection = 3936;
|
||||
private static final int Rice_Cake_of_Flaming_Fighting_Spirit = 49081;
|
||||
|
||||
// Buff Scroll
|
||||
private static final int Scroll_Acumen = 3929;
|
||||
private static final int Scroll_Berserker_Spirit = 49435;
|
||||
private static final int Scroll_Blessed_Body = 29690;
|
||||
private static final int Scroll_Death_Whisper = 3927;
|
||||
private static final int Scroll_Guidance = 3926;
|
||||
private static final int Scroll_Haste = 3930;
|
||||
private static final int Scroll_Magic_Barrier = 29689;
|
||||
private static final int Scroll_Mana_Regeneration = 4218;
|
||||
private static final int Scroll_Regeneration = 29688;
|
||||
private static final int Scroll_Dance_of_Fire = 29014;
|
||||
private static final int Scroll_Hunter_Song = 29013;
|
||||
|
||||
// Recipe
|
||||
private static final int Recipe_Atuba_Hammer = 2287;
|
||||
private static final int Recipe_Gastraphetes = 2267;
|
||||
private static final int Recipe_Maingauche = 2276;
|
||||
private static final int Recipe_Staff_of_Life = 2289;
|
||||
private static final int Recipe_Sword_of_Revolution = 2272;
|
||||
private static final int Recipe_Battle_Axe = 2301;
|
||||
private static final int Recipe_Blue_Wolf_Gaiters = 4982;
|
||||
private static final int Recipe_Crystal_Staff = 2305;
|
||||
private static final int Recipe_Crystallized_Ice_Bow = 2312;
|
||||
private static final int Recipe_Divine_Gloves = 3017;
|
||||
private static final int Recipe_Divine_Stockings = 2234;
|
||||
private static final int Recipe_Flamberge = 2297;
|
||||
private static final int Recipe_Full_Plate_Helmet = 3012;
|
||||
private static final int Recipe_Full_Plate_Shield = 3019;
|
||||
private static final int Recipe_Orcish_Glaive = 2317;
|
||||
private static final int Recipe_Sealed_Avadon_Boots = 4959;
|
||||
private static final int Recipe_Sealed_Avadon_Gloves = 4953;
|
||||
private static final int Recipe_Sealed_Blue_Wolf_Boots = 4992;
|
||||
private static final int Recipe_Sealed_Blue_Wolf_Gloves = 4998;
|
||||
private static final int Recipe_Stick_of_Faith = 2306;
|
||||
private static final int Recipe_Stormbringer = 2298;
|
||||
private static final int Recipe_Avadon_Robe = 4951;
|
||||
private static final int Recipe_Berserker_Blade = 5436;
|
||||
private static final int Recipe_Blue_Wolf_Breastplate = 4981;
|
||||
private static final int Recipe_Dark_Screamer = 2345;
|
||||
private static final int Recipe_Divine_Tunic = 2233;
|
||||
private static final int Recipe_Eminence_Bow = 2359;
|
||||
private static final int Recipe_Fisted_Blade = 2346;
|
||||
private static final int Recipe_Full_Plate_Armor = 2231;
|
||||
private static final int Recipe_Homunkulus_Sword = 2330;
|
||||
private static final int Recipe_Leather_Armor_of_Doom = 4985;
|
||||
private static final int Recipe_Poleaxe = 2331;
|
||||
private static final int Recipe_Sage_Staff = 2341;
|
||||
private static final int Recipe_Sealed_Avadon_Circlet = 4952;
|
||||
private static final int Recipe_Sealed_Blue_Wolf_Helmet = 4990;
|
||||
private static final int Recipe_Sealed_Doom_Helmet = 4991;
|
||||
private static final int Recipe_Sword_of_Nightmare = 2333;
|
||||
|
||||
// Main Material
|
||||
private static final int Animal_Bone = 1872;
|
||||
private static final int Coal = 1870;
|
||||
private static final int Varnish = 1865;
|
||||
private static final int Stone_of_Purity = 1875;
|
||||
private static final int Steel = 1880;
|
||||
private static final int Mithril_Ore = 1876;
|
||||
private static final int Leather = 1882;
|
||||
private static final int Cokes = 1879;
|
||||
private static final int Coarse_Bone_Powder = 1881;
|
||||
private static final int Adamantite_Nugget = 1877;
|
||||
private static final int Asofe = 4043;
|
||||
private static final int Mold_Glue = 4039;
|
||||
private static final int Oriharukon_Ore = 1874;
|
||||
private static final int Steel_Mold = 1883;
|
||||
private static final int Synthetic_Braid = 1889;
|
||||
private static final int Synthetic_Cokes = 1888;
|
||||
private static final int Varnish_of_Purity = 1887;
|
||||
private static final int High_grade_Suede = 1885;
|
||||
private static final int Enria = 4042;
|
||||
private static final int Mithril_Alloy = 1890;
|
||||
private static final int Mold_Hardener = 4041;
|
||||
private static final int Mold_Lubricant = 4040;
|
||||
private static final int Crystal_D = 1458;
|
||||
private static final int Crystal_C = 1459;
|
||||
private static final int Crystal_B = 1460;
|
||||
private static final int Silver_Mold = 1886;
|
||||
private static final int Oriharukon = 1893;
|
||||
|
||||
// Sub Material
|
||||
private static final int Atuba_Hammer_Head = 2049;
|
||||
private static final int Gastraphetes_Shaft = 2029;
|
||||
private static final int Maingauche_Edge = 2038;
|
||||
private static final int Staff_of_Life_Shaft = 2051;
|
||||
private static final int Sword_of_Revolution_Blade = 2034;
|
||||
private static final int Stormbringer_Blade = 2060;
|
||||
private static final int Stick_of_Faith_Shaft = 2068;
|
||||
private static final int Sealed_Blue_Wolf_Glove_Fabric = 4096;
|
||||
private static final int Sealed_Blue_Wolf_Boot_Design = 4090;
|
||||
private static final int Sealed_Avadon_Glove_Fragment = 4073;
|
||||
private static final int Sealed_Avadon_Boot_Design = 4098;
|
||||
private static final int Orcish_Glaive_Blade = 2075;
|
||||
private static final int Flamberge_Blade = 2059;
|
||||
private static final int Crystallized_Ice_Bow_Shaft = 2074;
|
||||
private static final int Crystal_Staff_Head = 2067;
|
||||
private static final int Blue_Wolf_Gaiter_Material = 4080;
|
||||
private static final int Battle_Axe_Head = 2063;
|
||||
private static final int Avadon_Robe_Fabric = 4071;
|
||||
private static final int Berserker_Blade_Edge = 5530;
|
||||
private static final int Blue_Wolf_Breastplate_Part = 4078;
|
||||
private static final int Dark_Screamer_Edge = 2107;
|
||||
private static final int Divine_Tunic_Fabric = 1988;
|
||||
private static final int Eminence_Bow_Shaft = 2121;
|
||||
private static final int Fisted_Blade_Piece = 2108;
|
||||
private static final int Full_Plate_Armor_Temper = 1986;
|
||||
private static final int Poleaxe_Blade = 2093;
|
||||
private static final int Sage_Staff_Head = 2109;
|
||||
private static final int Sealed_Avadon_Circlet_Pattern = 4072;
|
||||
private static final int Sealed_Blue_Wolf_Helmet_Design = 4088;
|
||||
private static final int Sealed_Doom_Helmet_Design = 4089;
|
||||
private static final int Sword_of_Nightmare_Blade = 2095;
|
||||
|
||||
|
||||
private static final int[][] DROPLIST =
|
||||
{
|
||||
// Snowy Rotten Squash
|
||||
{ 13401, Class_Buff_Scroll_1st, 70 },
|
||||
{ 13401, Angel_Cat_Blessing_Chest, 60 },
|
||||
{ 13401, Major_Healing_Potion, 70 },
|
||||
{ 13401, Rice_Cake_of_Fighting_Spirit, 60 },
|
||||
{ 13401, XP_SP_Scroll_Normal, 50 },
|
||||
{ 13401, XP_SP_Scroll_Medium, 40 },
|
||||
{ 13401, Steel, 50 },
|
||||
{ 13401, Adamantite_Nugget, 50 },
|
||||
{ 13401, Mithril_Ore, 50 },
|
||||
{ 13401, Leather, 50 },
|
||||
{ 13401, Cokes, 50 },
|
||||
{ 13401, Coarse_Bone_Powder, 50 },
|
||||
{ 13401, Stone_of_Purity, 50 },
|
||||
{ 13401, Stormbringer_Blade, 50 },
|
||||
{ 13401, Stick_of_Faith_Shaft, 50 },
|
||||
{ 13401, Sealed_Blue_Wolf_Glove_Fabric, 50 },
|
||||
{ 13401, Sealed_Blue_Wolf_Boot_Design, 50 },
|
||||
{ 13401, Sealed_Avadon_Glove_Fragment, 50 },
|
||||
{ 13401, Sealed_Avadon_Boot_Design, 50 },
|
||||
{ 13401, Orcish_Glaive_Blade, 50 },
|
||||
{ 13401, Flamberge_Blade, 50 },
|
||||
{ 13401, Crystallized_Ice_Bow_Shaft, 50 },
|
||||
{ 13401, Crystal_Staff_Head, 50 },
|
||||
{ 13401, Blue_Wolf_Gaiter_Material, 50 },
|
||||
{ 13401, Battle_Axe_Head, 50 },
|
||||
{ 13401, Recipe_Battle_Axe, 50 },
|
||||
{ 13401, Recipe_Blue_Wolf_Gaiters, 50 },
|
||||
{ 13401, Recipe_Crystal_Staff, 50 },
|
||||
{ 13401, Recipe_Crystallized_Ice_Bow, 50 },
|
||||
{ 13401, Recipe_Divine_Gloves, 50 },
|
||||
{ 13401, Recipe_Divine_Stockings, 50 },
|
||||
{ 13401, Recipe_Flamberge, 50 },
|
||||
{ 13401, Recipe_Full_Plate_Helmet, 50 },
|
||||
{ 13401, Recipe_Full_Plate_Shield, 50 },
|
||||
{ 13401, Recipe_Orcish_Glaive, 50 },
|
||||
{ 13401, Recipe_Sealed_Avadon_Boots, 50 },
|
||||
{ 13401, Recipe_Sealed_Avadon_Gloves, 50 },
|
||||
{ 13401, Recipe_Sealed_Blue_Wolf_Boots, 50 },
|
||||
{ 13401, Recipe_Sealed_Blue_Wolf_Gloves, 50 },
|
||||
{ 13401, Recipe_Stick_of_Faith, 50 },
|
||||
{ 13401, Recipe_Stormbringer, 50 },
|
||||
|
||||
// Snowy Ripe Squash
|
||||
{ 13400, Class_Buff_Scroll_1st, 70 },
|
||||
{ 13400, Angel_Cat_Blessing_Chest, 60 },
|
||||
{ 13400, Major_Healing_Potion, 70 },
|
||||
{ 13400, Rice_Cake_of_Fighting_Spirit, 60 },
|
||||
{ 13400, XP_SP_Scroll_Normal, 50 },
|
||||
{ 13400, Coal, 50 },
|
||||
{ 13400, Animal_Bone, 50 },
|
||||
{ 13400, Varnish, 50 },
|
||||
{ 13400, Recipe_Atuba_Hammer, 50 },
|
||||
{ 13400, Recipe_Gastraphetes, 50 },
|
||||
{ 13400, Recipe_Maingauche, 50 },
|
||||
{ 13400, Recipe_Staff_of_Life, 50 },
|
||||
{ 13400, Recipe_Sword_of_Revolution, 50 },
|
||||
{ 13400, Atuba_Hammer_Head, 50 },
|
||||
{ 13400, Gastraphetes_Shaft, 50 },
|
||||
{ 13400, Maingauche_Edge, 50 },
|
||||
{ 13400, Staff_of_Life_Shaft, 50 },
|
||||
{ 13400, Sword_of_Revolution_Blade, 50 },
|
||||
|
||||
// Snowy Royal Ripe Squash
|
||||
{ 13402, Battle_Axe, 5 },
|
||||
{ 13402, Crystal_Staff, 5 },
|
||||
{ 13402, Crystallized_Ice_Bow, 5 },
|
||||
{ 13402, Flamberge, 5 },
|
||||
{ 13402, Orcish_Glaive, 5 },
|
||||
{ 13402, Stick_of_Faith, 5 },
|
||||
{ 13402, Stormbringer, 5 },
|
||||
{ 13402, Divine_Gloves, 5 },
|
||||
{ 13402, Divine_Stockings, 5 },
|
||||
{ 13402, Divine_Tunic, 5 },
|
||||
{ 13402, Drake_Leather_Armor, 5 },
|
||||
{ 13402, Drake_Leather_Boots, 5 },
|
||||
{ 13402, Full_Plate_Armor, 5 },
|
||||
{ 13402, Full_Plate_Helmet, 5 },
|
||||
{ 13402, Full_Plate_Shield, 5 },
|
||||
{ 13402, Class_Buff_Scroll_2nd , 50 },
|
||||
{ 13402, Angel_Cat_Blessing_Chest, 50 },
|
||||
{ 13402, Blessed_Scroll_of_Escape, 50 },
|
||||
{ 13402, Blessed_Scroll_of_Resurrection, 50 },
|
||||
{ 13402, Greater_CP_Potion, 50 },
|
||||
{ 13402, Quick_Healing_Potion, 50 },
|
||||
{ 13402, Rice_Cake_of_Flaming_Fighting_Spirit, 50 },
|
||||
{ 13402, Special_Pirate_Fruit, 50 },
|
||||
{ 13402, XP_SP_Scroll_High, 50 },
|
||||
{ 13402, XP_SP_Scroll_Medium, 50 },
|
||||
{ 13402, Crystal_C, 50 },
|
||||
{ 13402, Scroll_Enchant_Armor_C, 50 },
|
||||
{ 13402, Scroll_Enchant_Weapon_C, 50 },
|
||||
{ 13402, Scroll_Dance_of_Fire, 70 },
|
||||
{ 13402, Scroll_Hunter_Song, 70 },
|
||||
{ 13402, Mithril_Alloy, 50 },
|
||||
{ 13402, Mold_Hardener, 50 },
|
||||
{ 13402, Oriharukon, 50 },
|
||||
{ 13402, Silver_Mold, 50 },
|
||||
|
||||
// Snowy Large Ripe Squash
|
||||
{ 13404, Atuba_Hammer, 20 },
|
||||
{ 13404, Gastraphetes, 20 },
|
||||
{ 13404, Maingauche, 20 },
|
||||
{ 13404, Staff_of_Life, 20 },
|
||||
{ 13404, Sword_of_Revolution, 20 },
|
||||
{ 13404, War_Pick, 20 },
|
||||
{ 13404, Class_Buff_Scroll_1st, 50 },
|
||||
{ 13404, Class_Buff_Scroll_2nd , 50 },
|
||||
{ 13404, Angel_Cat_Blessing_Chest, 50 },
|
||||
{ 13404, Greater_CP_Potion, 50 },
|
||||
{ 13404, Rice_Cake_of_Fighting_Spirit, 50 },
|
||||
{ 13404, Special_Pirate_Fruit, 50 },
|
||||
{ 13404, XP_SP_Scroll_High, 50 },
|
||||
{ 13404, XP_SP_Scroll_Medium, 50 },
|
||||
{ 13404, Crystal_D, 50 },
|
||||
{ 13404, Scroll_Enchant_Armor_D, 50 },
|
||||
{ 13404, Scroll_Enchant_Weapon_D, 50 },
|
||||
{ 13404, Scroll_Acumen, 70 },
|
||||
{ 13404, Scroll_Berserker_Spirit, 70 },
|
||||
{ 13404, Scroll_Blessed_Body, 70 },
|
||||
{ 13404, Scroll_Death_Whisper, 70 },
|
||||
{ 13404, Scroll_Guidance, 70 },
|
||||
{ 13404, Scroll_Haste, 70 },
|
||||
{ 13404, Scroll_Magic_Barrier, 70 },
|
||||
{ 13404, Scroll_Mana_Regeneration, 70 },
|
||||
{ 13404, Scroll_Regeneration, 70 },
|
||||
{ 13404, Enria, 50 },
|
||||
{ 13404, Mithril_Alloy, 50 },
|
||||
{ 13404, Mold_Hardener, 50 },
|
||||
{ 13404, Mold_Lubricant, 50 },
|
||||
{ 13404, Silver_Mold, 50 },
|
||||
{ 13404, Varnish_of_Purity, 50 },
|
||||
|
||||
// Snowy Large Rotten Squash
|
||||
{ 13405, Class_Buff_Scroll_1st, 70 },
|
||||
{ 13405, Angel_Cat_Blessing_Chest, 60 },
|
||||
{ 13405, Greater_CP_Potion, 60 },
|
||||
{ 13405, Quick_Healing_Potion, 60 },
|
||||
{ 13405, Rice_Cake_of_Fighting_Spirit, 60 },
|
||||
{ 13405, Adamantite_Nugget, 50 },
|
||||
{ 13405, Asofe, 50 },
|
||||
{ 13405, Coarse_Bone_Powder, 50 },
|
||||
{ 13405, Cokes, 50 },
|
||||
{ 13405, High_grade_Suede, 50 },
|
||||
{ 13405, Mithril_Ore, 50 },
|
||||
{ 13405, Mold_Glue, 50 },
|
||||
{ 13405, Oriharukon_Ore, 50 },
|
||||
{ 13405, Steel, 50 },
|
||||
{ 13405, Steel_Mold, 50 },
|
||||
{ 13405, Stone_of_Purity, 50 },
|
||||
{ 13405, Synthetic_Braid, 50 },
|
||||
{ 13405, Synthetic_Cokes, 50 },
|
||||
{ 13405, Varnish_of_Purity, 50 },
|
||||
{ 13405, Avadon_Robe_Fabric, 50 },
|
||||
{ 13405, Berserker_Blade_Edge, 50 },
|
||||
{ 13405, Blue_Wolf_Breastplate_Part, 50 },
|
||||
{ 13405, Dark_Screamer_Edge, 50 },
|
||||
{ 13405, Divine_Tunic_Fabric, 50 },
|
||||
{ 13405, Eminence_Bow_Shaft, 50 },
|
||||
{ 13405, Fisted_Blade_Piece, 50 },
|
||||
{ 13405, Full_Plate_Armor_Temper, 50 },
|
||||
{ 13405, Poleaxe_Blade, 50 },
|
||||
{ 13405, Sage_Staff_Head, 50 },
|
||||
{ 13405, Sealed_Avadon_Circlet_Pattern, 50 },
|
||||
{ 13405, Sealed_Blue_Wolf_Helmet_Design, 50 },
|
||||
{ 13405, Sealed_Doom_Helmet_Design, 50 },
|
||||
{ 13405, Sword_of_Nightmare_Blade, 50 },
|
||||
{ 13405, Recipe_Avadon_Robe, 50 },
|
||||
{ 13405, Recipe_Berserker_Blade, 50 },
|
||||
{ 13405, Recipe_Blue_Wolf_Breastplate, 50 },
|
||||
{ 13405, Recipe_Dark_Screamer, 50 },
|
||||
{ 13405, Recipe_Divine_Tunic, 50 },
|
||||
{ 13405, Recipe_Eminence_Bow, 50 },
|
||||
{ 13405, Recipe_Fisted_Blade, 50 },
|
||||
{ 13405, Recipe_Full_Plate_Armor, 50 },
|
||||
{ 13405, Recipe_Homunkulus_Sword, 50 },
|
||||
{ 13405, Recipe_Leather_Armor_of_Doom, 50 },
|
||||
{ 13405, Recipe_Poleaxe, 50 },
|
||||
{ 13405, Recipe_Sage_Staff, 50 },
|
||||
{ 13405, Recipe_Sealed_Avadon_Circlet, 50 },
|
||||
{ 13405, Recipe_Sealed_Blue_Wolf_Helmet, 50 },
|
||||
{ 13405, Recipe_Sealed_Doom_Helmet, 50 },
|
||||
{ 13405, Recipe_Sword_of_Nightmare, 50 },
|
||||
|
||||
// Snow Royal Large Ripe Squash
|
||||
{ 13406, Berserker_Blade, 5 },
|
||||
{ 13406, Dark_Screamer, 5 },
|
||||
{ 13406, Eminence_Bow, 5 },
|
||||
{ 13406, Fisted_Blade, 5 },
|
||||
{ 13406, Homunkulus_Sword, 5 },
|
||||
{ 13406, Poleaxe, 5 },
|
||||
{ 13406, Sage_Staff, 5 },
|
||||
{ 13406, Sword_of_Nightmare, 5 },
|
||||
{ 13406, Avadon_Robe, 5 },
|
||||
{ 13406, Blue_Wolf_Breastplate, 5 },
|
||||
{ 13406, Blue_Wolf_Gaiters, 5 },
|
||||
{ 13406, Leather_Armor_of_Doom, 5 },
|
||||
{ 13406, Sealed_Avadon_Boots, 10 },
|
||||
{ 13406, Sealed_Avadon_Circlet, 10 },
|
||||
{ 13406, Sealed_Avadon_Gloves, 10 },
|
||||
{ 13406, Sealed_Blue_Wolf_Boots, 10 },
|
||||
{ 13406, Sealed_Blue_Wolf_Gloves, 10 },
|
||||
{ 13406, Sealed_Blue_Wolf_Helmet, 10 },
|
||||
{ 13406, Sealed_Doom_Boots, 10 },
|
||||
{ 13406, Sealed_Doom_Gloves, 10 },
|
||||
{ 13406, Sealed_Doom_Helmet, 10 },
|
||||
{ 13406, Class_Buff_Scroll_2nd , 50 },
|
||||
{ 13406, Angel_Cat_Blessing_Chest, 50 },
|
||||
{ 13406, Blessed_Scroll_of_Escape, 50 },
|
||||
{ 13406, Blessed_Scroll_of_Resurrection, 50 },
|
||||
{ 13406, Blessed_Scroll_Enchant_Armor_C, 30 },
|
||||
{ 13406, Blessed_Scroll_Enchant_Armor_D, 30 },
|
||||
{ 13406, Blessed_Scroll_Enchant_Weapon_C, 20 },
|
||||
{ 13406, Blessed_Scroll_Enchant_Weapon_D, 20 },
|
||||
{ 13406, Crystal_B, 50 },
|
||||
{ 13406, Crystal_C, 50 },
|
||||
{ 13406, Greater_CP_Potion, 50 },
|
||||
{ 13406, Major_Healing_Potion, 50 },
|
||||
{ 13406, Quick_Healing_Potion, 70 },
|
||||
{ 13406, Rice_Cake_of_Flaming_Fighting_Spirit, 60 },
|
||||
{ 13406, Scroll_Dance_of_Fire, 60 },
|
||||
{ 13406, Scroll_Hunter_Song, 60 },
|
||||
{ 13406, Scroll_Enchant_Armor_C, 50 },
|
||||
{ 13406, Scroll_Enchant_Weapon_C, 40 },
|
||||
{ 13406, Special_Pirate_Fruit, 60 },
|
||||
{ 13406, XP_SP_Scroll_High, 60 },
|
||||
{ 13406, XP_SP_Scroll_Medium, 60 },
|
||||
};
|
||||
//@formatter:on
|
||||
|
||||
public MerrySquashmas()
|
||||
{
|
||||
addAttackId(SQUASH_LIST);
|
||||
addKillId(SQUASH_LIST);
|
||||
addSpawnId(SQUASH_LIST);
|
||||
addSpawnId(LARGE_SQUASH_LIST);
|
||||
addSkillSeeId(SQUASH_LIST);
|
||||
|
||||
addStartNpc(MANAGER);
|
||||
addFirstTalkId(MANAGER);
|
||||
addTalkId(MANAGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
npc.setImmobilized(true);
|
||||
npc.disableCoreAI(true);
|
||||
if (LARGE_SQUASH_LIST.contains(npc.getId()))
|
||||
{
|
||||
npc.setInvul(true);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, Player attacker, int damage, boolean isPet)
|
||||
{
|
||||
if (LARGE_SQUASH_LIST.contains(npc.getId()))
|
||||
{
|
||||
if ((attacker.getActiveWeaponItem() != null) && CHRONO_LIST.contains(attacker.getActiveWeaponItem().getId()))
|
||||
{
|
||||
ChronoText(npc);
|
||||
npc.setInvul(false);
|
||||
npc.getStatus().reduceHp(10, attacker);
|
||||
}
|
||||
else
|
||||
{
|
||||
noChronoText(npc);
|
||||
npc.setInvul(true);
|
||||
}
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isPet)
|
||||
{
|
||||
if (SQUASH_LIST.contains(npc.getId()) && (skill.getId() == SNOWY_NECTAR_SKILL))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case 13399: // Snowy Squash Seed
|
||||
{
|
||||
randomSpawn(13402, 13401, 13400, npc);
|
||||
break;
|
||||
}
|
||||
case 13403: // Large Snowy Squash Seed
|
||||
{
|
||||
randomSpawn(13406, 13405, 13404, npc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSkillSee(npc, caster, skill, targets, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isPet)
|
||||
{
|
||||
if (SQUASH_LIST.contains(npc.getId()))
|
||||
{
|
||||
dropItem(npc, killer);
|
||||
}
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, Player player)
|
||||
{
|
||||
return npc.getId() + ".htm";
|
||||
}
|
||||
|
||||
private void dropItem(Npc mob, Player player)
|
||||
{
|
||||
final int npcId = mob.getId();
|
||||
for (int[] drop : DROPLIST)
|
||||
{
|
||||
if (npcId == drop[0])
|
||||
{
|
||||
if (getRandomBoolean())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (getRandom(100) < drop[2])
|
||||
{
|
||||
if (ItemTable.getInstance().getTemplate(drop[1]).getCrystalType() != CrystalType.NONE)
|
||||
{
|
||||
((Monster) mob).dropItem(player, drop[1], 1);
|
||||
break;
|
||||
}
|
||||
((Monster) mob).dropItem(player, drop[1], (getRandom(1, 3)));
|
||||
if (getRandomBoolean())
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void randomSpawn(int low, int medium, int high, Npc npc)
|
||||
{
|
||||
final int _random = getRandom(100);
|
||||
if (_random < 5)
|
||||
{
|
||||
spawnNext(low, npc);
|
||||
}
|
||||
if (_random < 10)
|
||||
{
|
||||
spawnNext(medium, npc);
|
||||
}
|
||||
else if (_random < 30)
|
||||
{
|
||||
spawnNext(high, npc);
|
||||
}
|
||||
else
|
||||
{
|
||||
nectarText(npc);
|
||||
}
|
||||
}
|
||||
|
||||
private void ChronoText(Npc npc)
|
||||
{
|
||||
if (getRandom(100) < 20)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc, ChatType.NPC_GENERAL, npc.getName(), _CHRONO_TEXT[getRandom(_CHRONO_TEXT.length)]));
|
||||
}
|
||||
}
|
||||
|
||||
private void noChronoText(Npc npc)
|
||||
{
|
||||
if (getRandom(100) < 20)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc, ChatType.NPC_GENERAL, npc.getName(), _NOCHRONO_TEXT[getRandom(_NOCHRONO_TEXT.length)]));
|
||||
}
|
||||
}
|
||||
|
||||
private void nectarText(Npc npc)
|
||||
{
|
||||
if (getRandom(100) < 30)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc, ChatType.NPC_GENERAL, npc.getName(), _NECTAR_TEXT[getRandom(_NECTAR_TEXT.length)]));
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnNext(int npcId, Npc npc)
|
||||
{
|
||||
addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 60000);
|
||||
npc.deleteMe();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new MerrySquashmas();
|
||||
}
|
||||
}
|
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<event name="Merry Squashmas Event" active="10 03 2017-11 03 2017" enableShrines="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
|
||||
<droplist>
|
||||
<add item="37543" min="1" max="1" chance="50%" /> <!-- Snowy Squash Nectar -->
|
||||
</droplist>
|
||||
<spawnlist>
|
||||
<add npc="33888" x="-84008" y="243032" z="-3728" heading="49744" /> <!-- Talking Island -->
|
||||
<add npc="33888" x="45688" y="49080" z="-3056" heading="49744" /> <!-- Elven Village -->
|
||||
<add npc="33888" x="-44584" y="-113608" z="-192" heading="49744" /> <!-- Orc Village -->
|
||||
<add npc="33888" x="10643" y="17034" z="-4592" heading="49744" /> <!-- Dark Elven Village -->
|
||||
<add npc="33888" x="115656" y="-178056" z="-912" heading="49744" /> <!-- Dwarf Village -->
|
||||
<add npc="33888" x="-80485" y="149537" z="-3016" heading="16383" /> <!-- Gluddin -->
|
||||
<add npc="33888" x="-14143" y="123176" z="-3096" heading="30212" /> <!-- Gludio -->
|
||||
<add npc="33888" x="16354" y="142848" z="-2680" heading="14450" /> <!-- Dion -->
|
||||
<add npc="33888" x="82312" y="148616" z="-3440" heading="3355" /> <!-- Giran -->
|
||||
<add npc="33888" x="82008" y="53874" z="-1472" heading="3355" /> <!-- Oren -->
|
||||
<add npc="33888" x="147064" y="25928" z="-2008" heading="17863" /> <!-- Aden -->
|
||||
<add npc="33888" x="117380" y="76684" z="-2672" heading="40961" /> <!-- Hunters Village -->
|
||||
</spawnlist>
|
||||
<messages>
|
||||
<add type="onEnd" text="Merry Squashmas: Event end!" />
|
||||
<add type="onEnter" text="Merry Squashmas: Event ongoing!" />
|
||||
</messages>
|
||||
</event>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Coco Brownie:<br>
|
||||
How is your love life? As sweet as chocolate, I hope? If not, never fear! I, the cupid of Ivory Tower, have come to your rescue!<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ThePowerOfLove 33893-2.htm">"So... what's going on?"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ThePowerOfLove 33893-3.htm">"You smell sweet. What's your secret?"</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ThePowerOfLove coco_buff">"I actually want a buff that can change my weapon appearance...?"</Button>
|
||||
</body></html>
|
@@ -1,12 +0,0 @@
|
||||
<html><body>Coco Brownie:<br>
|
||||
A monster stole the <font color="LEVEL">Love Potion</font> I made! It was my blood, sweat, and tears!<br>
|
||||
A sip of it will <font color="LEVEL">double the P. Atk./ M. Atk./ Speed/ Casting Spd. for 2 minutes</font> for <font color="LEVEL">everyone in your party</font>! Awesome, right?<br>
|
||||
I wouldn't call this a side effect, but the potion does tend to change the appearance of your weapon a little. But don't worry, because it's not ugly! I'm the messenger of love, remember?<br1>
|
||||
(The effect of the Love Potion disappears when you restart the game.)<br>
|
||||
Also, you can choose <font color="LEVEL">Chocolate Truffle, Candy Heart, or Comfort Cookie</font>. Each one <font color="LEVEL">restores your Vitality in peace zones</font> and has <font color="LEVEL">also has its own special power</font>.<br>
|
||||
The <font color="LEVEL">Chocolate Truffle</font> lets you use the <font color="LEVEL">Decadence</font> skill, resulting in STR + 2, INT + 2, and Attribute Resistance + 20.<br>The <font color="LEVEL">Candy Heart</font> lets you use the <font color="LEVEL">Sugar Rush</font> skill, increasing STR + 2, INT + 2, DEX + 2, and WIT + 2.<br>The <font color="LEVEL">Comfort Cookie</font> lets you use the <font color="LEVEL">Forever Alone</font> skill, increasing STR + 2, INT + 2, CON + 2, and MEN + 2. If 3 people with each item gather around and use their skills, they can receive <font color="LEVEL">all of the effects</font>, so you might want to go looking for new friends! The skills were made from leftovers from the Love Potion, so they might look a bit, uh, excessive... But hey, they're cute, I promise!<br>
|
||||
Oh, and you know about the transformation and summoning items, right?<br>
|
||||
<font color="LEVEL">Transformation items</font> let you transform into either a Snow Man, Scarecrow Jack, Tin Golem, Makeshift Bat, Angry Tow, Lady Tow, or Sleepy Tow. What's so great about them, you say? Well, they're cute! So insanely cute!<br>
|
||||
<font color="LEVEL">Friend-summoning</font> items let you summon your friends. Create a party, and use the items to summon a party member! Easy, right? Well, that's it! Have a very sweet day!<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest ThePowerOfLove 33893-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,14 +0,0 @@
|
||||
<html><body>Coco Brownie:<br>
|
||||
Oh, are you coming onto me? Not very subtle, but cute, I suppose! Hehe. I know I smell nice -- I have magical items as a result of my labor of love!<br>
|
||||
It's always good to know which item you look and feel good with. What would you like? Oh, but you can still get all the skill effects of Decadence, Sugar Rush, and Forever Alone. Just find someone who has something you don't!<br>
|
||||
<font color="LEVEL">Chocolate Truffle</font><br1>
|
||||
Enables the Decadence skill, resulting in STR/ INT + 2, and Attribute Resistance + 20.<br>
|
||||
<font color="LEVEL">Candy Heart</font>
|
||||
<br1> Enables the Sugar Rush skill, resulting in STR/ INT/ DEX/ WIT + 2.<br>
|
||||
<font color="LEVEL">Comfort Cookie</font> <br1>
|
||||
Enables the Forever Alone skill, resulting in STR/ INT/ CON/ MEN + 2.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ThePowerOfLove ct">Chocolate Truffle</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ThePowerOfLove ch">Candy Heart</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest ThePowerOfLove cc">Comfort Cookie</Button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest ThePowerOfLove 33893-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Coco Brownie:<br>
|
||||
Magical Energy takes effect for only 5 minutes.<br>
|
||||
Love potions and Coco Brownie's magic lose their effects when you restart, so be careful! Have a sweet day.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest ThePowerOfLove 33893-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Coco:<br>
|
||||
Chocolate Truffles it is!<br>
|
||||
A very good choice. Here, take Coco's Transformation Chocolate and Coco's Friend Summon Chocolate as a bonus.<br>
|
||||
If you don't like what you got, get rid of the things I gave you, and I'll give you something else. Have a sweet day!
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Coco:<br>
|
||||
Candy Heart it is!<br>
|
||||
A very good choice. Here, take Coco's Transformation Candy and Coco's Friend Summon Candy as a bonus.<br>
|
||||
If you don't like what you got, get rid of the things I gave you, and I'll give you something else. Have a sweet day!
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Coco:<br>
|
||||
Comfort Cookie it is!<br>
|
||||
A very good choice. Here, take Coco's Transformation Cookie and Coco's Friend Summon Cookie as a bonus.<br>
|
||||
If you don't like what you got, get rid of the things I gave you, and I'll give you something else. Have a sweet day!
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Coco Brownie:<br>
|
||||
But you already got the event items!<br>If you want something else, get rid of what I gave you.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest ThePowerOfLove 33893-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,101 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package events.ThePowerOfLove;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
|
||||
import org.l2jmobius.gameserver.model.skill.SkillCaster;
|
||||
|
||||
/**
|
||||
* The Power Of Love
|
||||
* @URL http://www.lineage2.com/en/news/events/02102016-the-power-of-love-part-iii.php
|
||||
* @author hlwrave
|
||||
*/
|
||||
public class ThePowerOfLove extends LongTimeEvent
|
||||
{
|
||||
// NPC
|
||||
private static final int COCO = 33893;
|
||||
// Items
|
||||
private static final int COCOGIFBOX = 36081;
|
||||
private static final int AMULETLOVE = 70232;
|
||||
// Skill
|
||||
private static final SkillHolder COCO_M = new SkillHolder(55327, 1); // Sweet Chocolate Energy
|
||||
|
||||
private ThePowerOfLove()
|
||||
{
|
||||
addStartNpc(COCO);
|
||||
addFirstTalkId(COCO);
|
||||
addTalkId(COCO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "33893-1.htm":
|
||||
case "33893-2.htm":
|
||||
case "33893-3.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "coco_giveItem":
|
||||
{
|
||||
if (!ownsAtLeastOneItem(player, COCOGIFBOX))
|
||||
{
|
||||
giveItems(player, COCOGIFBOX, 1);
|
||||
htmltext = "33893-5.htm";
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "33893-9.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "coco_takeAmulet":
|
||||
{
|
||||
if (hasQuestItems(player, AMULETLOVE))
|
||||
{
|
||||
SkillCaster.triggerCast(npc, player, COCO_M.getSkill());
|
||||
htmltext = "33893-4.htm";
|
||||
takeItems(player, AMULETLOVE, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "33893-9.htm";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, Player player)
|
||||
{
|
||||
return npc.getId() + "-1.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new ThePowerOfLove();
|
||||
}
|
||||
}
|
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<event name="The Power Of Love" active="22 02 2018-23 02 2018" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
|
||||
<droplist>
|
||||
<add item="37704" min="1" max="1" chance="30%" /> <!-- Love Potion -->
|
||||
</droplist>
|
||||
<spawnlist>
|
||||
<add npc="33893" x="-84008" y="243032" z="-3728" heading="49744" /> <!-- Talking Island -->
|
||||
<add npc="33893" x="45688" y="49080" z="-3056" heading="49744" /> <!-- Elven Village -->
|
||||
<add npc="33893" x="-44584" y="-113608" z="-192" heading="49744" /> <!-- Orc Village -->
|
||||
<add npc="33893" x="10643" y="17034" z="-4592" heading="49744" /> <!-- Dark Elven Village -->
|
||||
<add npc="33893" x="115656" y="-178056" z="-912" heading="49744" /> <!-- Dwarf Village -->
|
||||
<add npc="33893" x="-80485" y="149537" z="-3016" heading="16383" /> <!-- Gluddin -->
|
||||
<add npc="33893" x="-14143" y="123176" z="-3096" heading="30212" /> <!-- Gludio -->
|
||||
<add npc="33893" x="16354" y="142848" z="-2680" heading="14450" /> <!-- Dion -->
|
||||
<add npc="33893" x="82312" y="148616" z="-3440" heading="3355" /> <!-- Giran -->
|
||||
<add npc="33893" x="82008" y="53874" z="-1472" heading="3355" /> <!-- Oren -->
|
||||
<add npc="33893" x="147064" y="25928" z="-2008" heading="17863" /> <!-- Aden -->
|
||||
<add npc="33893" x="117380" y="76684" z="-2672" heading="40961" /> <!-- Hunters Village -->
|
||||
</spawnlist>
|
||||
<messages>
|
||||
<add type="onEnd" text="The Power Of Love: Event end!" />
|
||||
<add type="onEnter" text="The Power Of Love: Event ongoing!" />
|
||||
</messages>
|
||||
</event>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Frog:<br>
|
||||
How is your love life? As sweet as chocolate, I hope? If not, never fear! I, the cupid of Ivory Tower, have come to your rescue!<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TotalRecall frog_buff">"Do you want kiss me ?"</Button>
|
||||
</body></html>
|
@@ -1,12 +0,0 @@
|
||||
<html><body>Frog:<br>
|
||||
A monster stole the <font color="LEVEL">Love Potion</font> I made! It was my blood, sweat, and tears!<br>
|
||||
A sip of it will <font color="LEVEL">double the P. Atk./ M. Atk./ Speed/ Casting Spd. for 2 minutes</font> for <font color="LEVEL">everyone in your party</font>! Awesome, right?<br>
|
||||
I wouldn't call this a side effect, but the potion does tend to change the appearance of your weapon a little. But don't worry, because it's not ugly! I'm the messenger of love, remember?<br1>
|
||||
(The effect of the Love Potion disappears when you restart the game.)<br>
|
||||
Also, you can choose <font color="LEVEL">Chocolate Truffle, Candy Heart, or Comfort Cookie</font>. Each one <font color="LEVEL">restores your Vitality in peace zones</font> and has <font color="LEVEL">also has its own special power</font>.<br>
|
||||
The <font color="LEVEL">Chocolate Truffle</font> lets you use the <font color="LEVEL">Decadence</font> skill, resulting in STR + 2, INT + 2, and Attribute Resistance + 20.<br>The <font color="LEVEL">Candy Heart</font> lets you use the <font color="LEVEL">Sugar Rush</font> skill, increasing STR + 2, INT + 2, DEX + 2, and WIT + 2.<br>The <font color="LEVEL">Comfort Cookie</font> lets you use the <font color="LEVEL">Forever Alone</font> skill, increasing STR + 2, INT + 2, CON + 2, and MEN + 2. If 3 people with each item gather around and use their skills, they can receive <font color="LEVEL">all of the effects</font>, so you might want to go looking for new friends! The skills were made from leftovers from the Love Potion, so they might look a bit, uh, excessive... But hey, they're cute, I promise!<br>
|
||||
Oh, and you know about the transformation and summoning items, right?<br>
|
||||
<font color="LEVEL">Transformation items</font> let you transform into either a Snow Man, Scarecrow Jack, Tin Golem, Makeshift Bat, Angry Tow, Lady Tow, or Sleepy Tow. What's so great about them, you say? Well, they're cute! So insanely cute!<br>
|
||||
<font color="LEVEL">Friend-summoning</font> items let you summon your friends. Create a party, and use the items to summon a party member! Easy, right? Well, that's it! Have a very sweet day!<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TotalRecall 9013-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,14 +0,0 @@
|
||||
<html><body>Frog:<br>
|
||||
Oh, are you coming onto me? Not very subtle, but cute, I suppose! Hehe. I know I smell nice -- I have magical items as a result of my labor of love!<br>
|
||||
It's always good to know which item you look and feel good with. What would you like? Oh, but you can still get all the skill effects of Decadence, Sugar Rush, and Forever Alone. Just find someone who has something you don't!<br>
|
||||
<font color="LEVEL">Chocolate Truffle</font><br1>
|
||||
Enables the Decadence skill, resulting in STR/ INT + 2, and Attribute Resistance + 20.<br>
|
||||
<font color="LEVEL">Candy Heart</font>
|
||||
<br1> Enables the Sugar Rush skill, resulting in STR/ INT/ DEX/ WIT + 2.<br>
|
||||
<font color="LEVEL">Comfort Cookie</font> <br1>
|
||||
Enables the Forever Alone skill, resulting in STR/ INT/ CON/ MEN + 2.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TotalRecall ct">Chocolate Truffle</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TotalRecall ch">Candy Heart</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TotalRecall cc">Comfort Cookie</Button>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TotalRecall 9013-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Frog:<br>
|
||||
Magical Energy takes effect for only 5 minutes.<br>
|
||||
Love potions and Coco Brownie's magic lose their effects when you restart, so be careful! Have a sweet day.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TotalRecall 9013-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Frog:<br>
|
||||
But you already got the event items!<br>If you want something else, get rid of what I gave you.<br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TotalRecall 9013-1.htm">Back</button>
|
||||
</body></html>
|
@@ -1,77 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package events.TotalRecall;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
|
||||
import org.l2jmobius.gameserver.model.skill.SkillCaster;
|
||||
|
||||
/**
|
||||
* Total Recall Event
|
||||
* @URL https://eu.4gameforum.com/threads/578395/
|
||||
* @author QuangNguyen
|
||||
*/
|
||||
public class TotalRecall extends LongTimeEvent
|
||||
{
|
||||
// NPC
|
||||
private static final int FROG = 9013;
|
||||
// Skill
|
||||
private static final SkillHolder FROG_KISS = new SkillHolder(55314, 1);
|
||||
|
||||
private TotalRecall()
|
||||
{
|
||||
addStartNpc(FROG);
|
||||
addFirstTalkId(FROG);
|
||||
addTalkId(FROG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "9013-1.htm":
|
||||
case "9013-2.htm":
|
||||
case "9013-3.htm":
|
||||
{
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "frog_buff":
|
||||
{
|
||||
SkillCaster.triggerCast(npc, player, FROG_KISS.getSkill());
|
||||
htmltext = "9013-4.htm";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, Player player)
|
||||
{
|
||||
return "9013-1.htm";
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new TotalRecall();
|
||||
}
|
||||
}
|
@@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<event name="Total Recall" active="08 03 2017-09 03 2017" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
|
||||
<spawnlist>
|
||||
<add npc="9013" x="-84008" y="243032" z="-3728" heading="49744" /> <!-- Talking Island -->
|
||||
<add npc="9013" x="45688" y="49080" z="-3056" heading="49744" /> <!-- Elven Village -->
|
||||
<add npc="9013" x="-44584" y="-113608" z="-192" heading="49744" /> <!-- Orc Village -->
|
||||
<add npc="9013" x="10643" y="17034" z="-4592" heading="49744" /> <!-- Dark Elven Village -->
|
||||
<add npc="9013" x="115656" y="-178056" z="-912" heading="49744" /> <!-- Dwarf Village -->
|
||||
<add npc="9013" x="-80485" y="149537" z="-3016" heading="16383" /> <!-- Gluddin -->
|
||||
<add npc="9013" x="-14143" y="123176" z="-3096" heading="30212" /> <!-- Gludio -->
|
||||
<add npc="9013" x="16354" y="142848" z="-2680" heading="14450" /> <!-- Dion -->
|
||||
<add npc="9013" x="82312" y="148616" z="-3440" heading="3355" /> <!-- Giran -->
|
||||
<add npc="9013" x="82008" y="53874" z="-1472" heading="3355" /> <!-- Oren -->
|
||||
<add npc="9013" x="147064" y="25928" z="-2008" heading="17863" /> <!-- Aden -->
|
||||
<add npc="9013" x="117380" y="76684" z="-2672" heading="40961" /> <!-- Hunters Village -->
|
||||
</spawnlist>
|
||||
<messages>
|
||||
<add type="onEnd" text="Total Recall: Event end!" />
|
||||
<add type="onEnter" text="Total Recall: Event ongoing!" />
|
||||
</messages>
|
||||
</event>
|
@@ -1,14 +0,0 @@
|
||||
<html><head><body>Buzz the Cat:<br>
|
||||
Squash grow up by taking in nectar. After planting a seed, drip nectar on it and it will grow quickly! <br1>
|
||||
After taking enough nectar, the squash will evolve. If you hit it with a weapon, the squash will crack open!<br1>
|
||||
Be careful, there are several things you should look out for.<br1>
|
||||
<font color="LEVEL">First of all, if you hit it before it's fully grown,</font> it will wilt from lack of nutrition. <br1>
|
||||
Also, since <font color="LEVEL">a squash tends to flee</font>, you should try to crack it open before it gets out of hand!
|
||||
Young squash that are not fully grown will run off in <font color="LEVEL">3 minutes</font> and fully grown squash will run away in <font color="LEVEL">a minute and 30 seconds</font>! <br1>
|
||||
<font color="LEVEL">Also, a large squash can't be opened with a regular weapon! </font> I heard that there are <font color="LEVEL">chrono weapons</font> that produce musical sounds when you hit it against something.
|
||||
You will only be able to hit large squash with weapons of this type. <br1>
|
||||
<font color="LEVEL">One last thing! Since it's not easy to open a large squash by yourself,</font> you should find a friend who can help you open it.<br1>
|
||||
Do you understand everything I've told you?<br1>
|
||||
Posible rewards you can get: <font color="LEVEL">Adena, Fireworks, Large Fireworks, Life Stones, Gems A and S grades, Crystals A and S grades, Giant Codex, Lunargent and Hellfire Oil, Blessed Scroll of Escape, Quick Healing Potions, Large Lucky Cubs, Ancient Enchant Scrolls A-grade, Vitality Ginseng or powerful herbs.</font><br><br>
|
||||
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
|
||||
</body></html>
|
@@ -1,10 +0,0 @@
|
||||
<html>
|
||||
<body>Buzz the Cat:<br>
|
||||
Nice to meet you! I'm Buzz the Cat, faithful employee to Gardener Fordson of Floran. My boss is one of the greatest agricultural geniuses in all of Aden. After such a successful summer, Gardener Fordson has reinvested in a new lot of improved magical squash seeds. He has decided to grow them for the Fall season. Fortunately for you, we still have more seeds than we know what to do with. We would love more nectar to develop full grown squashes to meet our increased customer demands.<br>
|
||||
Would you like to help me out? <br> I will trade you seeds for nectar. You can get nectar by killing any monsters near your level all throughout the world.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 90318602">Exchange nectar for squash seed.</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 90318601">Exchange nectar for a chrono weapon.</Button>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Tell me more about event.</Button><br><br>
|
||||
Plant the seed by double-clicking on it! Raise it well and claim your prizes! Good luck! <br>
|
||||
</body>
|
||||
</html>
|
@@ -1,643 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package events.WatermelonNinja;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.model.WorldObject;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.Monster;
|
||||
import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.CreatureSay;
|
||||
|
||||
/**
|
||||
* @URL https://eu.4gameforum.com/threads/653089/
|
||||
* @author vGodFather
|
||||
*/
|
||||
public class WatermelonNinja extends LongTimeEvent
|
||||
{
|
||||
private static final int MANAGER = 31860;
|
||||
private static final int NECTAR_SKILL = 2005;
|
||||
|
||||
private static final List<Integer> SQUASH_LIST = Arrays.asList(13271, 13272, 13273, 13274, 13275, 13276, 13277, 13278);
|
||||
private static final List<Integer> LARGE_SQUASH_LIST = Arrays.asList(13274, 13278);
|
||||
private static final List<Integer> CHRONO_LIST = Arrays.asList(4202, 5133, 5817, 7058, 8350);
|
||||
|
||||
//@formatter:off
|
||||
private static final String[] _NOCHRONO_TEXT =
|
||||
{
|
||||
"You cannot kill me without Chrono",
|
||||
"Hehe...keep trying...",
|
||||
"Nice try...",
|
||||
"Tired ?",
|
||||
"Go go ! haha..."
|
||||
};
|
||||
private static final String[] _CHRONO_TEXT =
|
||||
{
|
||||
"Arghh... Chrono weapon...",
|
||||
"My end is coming...",
|
||||
"Please leave me!",
|
||||
"Heeellpppp...",
|
||||
"Somebody help me please..."
|
||||
};
|
||||
private static final String[] _NECTAR_TEXT =
|
||||
{
|
||||
"Yummie... Nectar...",
|
||||
"Plase give me more...",
|
||||
"Hmmm.. More.. I need more...",
|
||||
"I would like you more, if you give me more...",
|
||||
"Hmmmmmmm...",
|
||||
"My favourite..."
|
||||
};
|
||||
|
||||
// Weapon
|
||||
private static final int Atuba_Hammer = 187;
|
||||
private static final int Gastraphetes = 278;
|
||||
private static final int Maingauche = 224;
|
||||
private static final int Staff_of_Life = 189;
|
||||
private static final int Sword_of_Revolution = 129;
|
||||
private static final int War_Pick = 294;
|
||||
private static final int Battle_Axe = 160;
|
||||
private static final int Crystal_Staff = 192;
|
||||
private static final int Crystallized_Ice_Bow = 281;
|
||||
private static final int Flamberge = 71;
|
||||
private static final int Orcish_Glaive = 298;
|
||||
private static final int Stick_of_Faith = 193;
|
||||
private static final int Stormbringer = 72;
|
||||
private static final int Berserker_Blade = 5286;
|
||||
private static final int Dark_Screamer = 233;
|
||||
private static final int Eminence_Bow = 286;
|
||||
private static final int Fisted_Blade = 265;
|
||||
private static final int Homunkulus_Sword = 84;
|
||||
private static final int Poleaxe = 95;
|
||||
private static final int Sage_Staff = 200;
|
||||
private static final int Sword_of_Nightmare = 134;
|
||||
|
||||
// Armor
|
||||
private static final int Divine_Gloves = 2463;
|
||||
private static final int Divine_Stockings = 473;
|
||||
private static final int Divine_Tunic = 442;
|
||||
private static final int Drake_Leather_Armor = 401;
|
||||
private static final int Drake_Leather_Boots = 2437;
|
||||
private static final int Full_Plate_Armor = 356;
|
||||
private static final int Full_Plate_Helmet = 2414;
|
||||
private static final int Full_Plate_Shield = 2497;
|
||||
private static final int Avadon_Robe = 2406;
|
||||
private static final int Blue_Wolf_Breastplate = 358;
|
||||
private static final int Blue_Wolf_Gaiters = 2380;
|
||||
private static final int Leather_Armor_of_Doom = 2392;
|
||||
private static final int Sealed_Avadon_Boots = 600;
|
||||
private static final int Sealed_Avadon_Circlet = 2415;
|
||||
private static final int Sealed_Avadon_Gloves = 2464;
|
||||
private static final int Sealed_Blue_Wolf_Boots = 2439;
|
||||
private static final int Sealed_Blue_Wolf_Gloves = 2487;
|
||||
private static final int Sealed_Blue_Wolf_Helmet = 2416;
|
||||
private static final int Sealed_Doom_Boots = 601;
|
||||
private static final int Sealed_Doom_Gloves = 2475;
|
||||
private static final int Sealed_Doom_Helmet = 2417;
|
||||
|
||||
// Misc
|
||||
private static final int Class_Buff_Scroll_1st = 29011;
|
||||
private static final int Angel_Cat_Blessing_Chest = 29584;
|
||||
private static final int Major_Healing_Potion = 1539;
|
||||
private static final int Rice_Cake_of_Fighting_Spirit = 49080;
|
||||
private static final int XP_SP_Scroll_Normal = 29648;
|
||||
private static final int XP_SP_Scroll_Medium = 29519;
|
||||
private static final int Greater_CP_Potion = 5592;
|
||||
private static final int Quick_Healing_Potion = 1540;
|
||||
private static final int Class_Buff_Scroll_2nd = 29698;
|
||||
private static final int Scroll_Enchant_Armor_D = 956;
|
||||
private static final int Scroll_Enchant_Weapon_D = 955;
|
||||
private static final int Scroll_Enchant_Armor_C = 952;
|
||||
private static final int Scroll_Enchant_Weapon_C = 951;
|
||||
private static final int Blessed_Scroll_Enchant_Armor_C = 29022;
|
||||
private static final int Blessed_Scroll_Enchant_Weapon_C = 29021;
|
||||
private static final int Blessed_Scroll_Enchant_Armor_D = 29020;
|
||||
private static final int Blessed_Scroll_Enchant_Weapon_D = 29019;
|
||||
private static final int Special_Pirate_Fruit = 49518;
|
||||
private static final int XP_SP_Scroll_High = 29010;
|
||||
private static final int Blessed_Scroll_of_Escape = 1538;
|
||||
private static final int Blessed_Scroll_of_Resurrection = 3936;
|
||||
private static final int Rice_Cake_of_Flaming_Fighting_Spirit = 49081;
|
||||
|
||||
// Buff Scroll
|
||||
private static final int Scroll_Acumen = 3929;
|
||||
private static final int Scroll_Berserker_Spirit = 49435;
|
||||
private static final int Scroll_Blessed_Body = 29690;
|
||||
private static final int Scroll_Death_Whisper = 3927;
|
||||
private static final int Scroll_Guidance = 3926;
|
||||
private static final int Scroll_Haste = 3930;
|
||||
private static final int Scroll_Magic_Barrier = 29689;
|
||||
private static final int Scroll_Mana_Regeneration = 4218;
|
||||
private static final int Scroll_Regeneration = 29688;
|
||||
private static final int Scroll_Dance_of_Fire = 29014;
|
||||
private static final int Scroll_Hunter_Song = 29013;
|
||||
|
||||
// Recipe
|
||||
private static final int Recipe_Atuba_Hammer = 2287;
|
||||
private static final int Recipe_Gastraphetes = 2267;
|
||||
private static final int Recipe_Maingauche = 2276;
|
||||
private static final int Recipe_Staff_of_Life = 2289;
|
||||
private static final int Recipe_Sword_of_Revolution = 2272;
|
||||
private static final int Recipe_Battle_Axe = 2301;
|
||||
private static final int Recipe_Blue_Wolf_Gaiters = 4982;
|
||||
private static final int Recipe_Crystal_Staff = 2305;
|
||||
private static final int Recipe_Crystallized_Ice_Bow = 2312;
|
||||
private static final int Recipe_Divine_Gloves = 3017;
|
||||
private static final int Recipe_Divine_Stockings = 2234;
|
||||
private static final int Recipe_Flamberge = 2297;
|
||||
private static final int Recipe_Full_Plate_Helmet = 3012;
|
||||
private static final int Recipe_Full_Plate_Shield = 3019;
|
||||
private static final int Recipe_Orcish_Glaive = 2317;
|
||||
private static final int Recipe_Sealed_Avadon_Boots = 4959;
|
||||
private static final int Recipe_Sealed_Avadon_Gloves = 4953;
|
||||
private static final int Recipe_Sealed_Blue_Wolf_Boots = 4992;
|
||||
private static final int Recipe_Sealed_Blue_Wolf_Gloves = 4998;
|
||||
private static final int Recipe_Stick_of_Faith = 2306;
|
||||
private static final int Recipe_Stormbringer = 2298;
|
||||
private static final int Recipe_Avadon_Robe = 4951;
|
||||
private static final int Recipe_Berserker_Blade = 5436;
|
||||
private static final int Recipe_Blue_Wolf_Breastplate = 4981;
|
||||
private static final int Recipe_Dark_Screamer = 2345;
|
||||
private static final int Recipe_Divine_Tunic = 2233;
|
||||
private static final int Recipe_Eminence_Bow = 2359;
|
||||
private static final int Recipe_Fisted_Blade = 2346;
|
||||
private static final int Recipe_Full_Plate_Armor = 2231;
|
||||
private static final int Recipe_Homunkulus_Sword = 2330;
|
||||
private static final int Recipe_Leather_Armor_of_Doom = 4985;
|
||||
private static final int Recipe_Poleaxe = 2331;
|
||||
private static final int Recipe_Sage_Staff = 2341;
|
||||
private static final int Recipe_Sealed_Avadon_Circlet = 4952;
|
||||
private static final int Recipe_Sealed_Blue_Wolf_Helmet = 4990;
|
||||
private static final int Recipe_Sealed_Doom_Helmet = 4991;
|
||||
private static final int Recipe_Sword_of_Nightmare = 2333;
|
||||
|
||||
// Main Material
|
||||
private static final int Animal_Bone = 1872;
|
||||
private static final int Coal = 1870;
|
||||
private static final int Varnish = 1865;
|
||||
private static final int Stone_of_Purity = 1875;
|
||||
private static final int Steel = 1880;
|
||||
private static final int Mithril_Ore = 1876;
|
||||
private static final int Leather = 1882;
|
||||
private static final int Cokes = 1879;
|
||||
private static final int Coarse_Bone_Powder = 1881;
|
||||
private static final int Adamantite_Nugget = 1877;
|
||||
private static final int Asofe = 4043;
|
||||
private static final int Mold_Glue = 4039;
|
||||
private static final int Oriharukon_Ore = 1874;
|
||||
private static final int Steel_Mold = 1883;
|
||||
private static final int Synthetic_Braid = 1889;
|
||||
private static final int Synthetic_Cokes = 1888;
|
||||
private static final int Varnish_of_Purity = 1887;
|
||||
private static final int High_grade_Suede = 1885;
|
||||
private static final int Enria = 4042;
|
||||
private static final int Mithril_Alloy = 1890;
|
||||
private static final int Mold_Hardener = 4041;
|
||||
private static final int Mold_Lubricant = 4040;
|
||||
private static final int Crystal_D = 1458;
|
||||
private static final int Crystal_C = 1459;
|
||||
private static final int Crystal_B = 1460;
|
||||
private static final int Silver_Mold = 1886;
|
||||
private static final int Oriharukon = 1893;
|
||||
|
||||
// Sub Material
|
||||
private static final int Atuba_Hammer_Head = 2049;
|
||||
private static final int Gastraphetes_Shaft = 2029;
|
||||
private static final int Maingauche_Edge = 2038;
|
||||
private static final int Staff_of_Life_Shaft = 2051;
|
||||
private static final int Sword_of_Revolution_Blade = 2034;
|
||||
private static final int Stormbringer_Blade = 2060;
|
||||
private static final int Stick_of_Faith_Shaft = 2068;
|
||||
private static final int Sealed_Blue_Wolf_Glove_Fabric = 4096;
|
||||
private static final int Sealed_Blue_Wolf_Boot_Design = 4090;
|
||||
private static final int Sealed_Avadon_Glove_Fragment = 4073;
|
||||
private static final int Sealed_Avadon_Boot_Design = 4098;
|
||||
private static final int Orcish_Glaive_Blade = 2075;
|
||||
private static final int Flamberge_Blade = 2059;
|
||||
private static final int Crystallized_Ice_Bow_Shaft = 2074;
|
||||
private static final int Crystal_Staff_Head = 2067;
|
||||
private static final int Blue_Wolf_Gaiter_Material = 4080;
|
||||
private static final int Battle_Axe_Head = 2063;
|
||||
private static final int Avadon_Robe_Fabric = 4071;
|
||||
private static final int Berserker_Blade_Edge = 5530;
|
||||
private static final int Blue_Wolf_Breastplate_Part = 4078;
|
||||
private static final int Dark_Screamer_Edge = 2107;
|
||||
private static final int Divine_Tunic_Fabric = 1988;
|
||||
private static final int Eminence_Bow_Shaft = 2121;
|
||||
private static final int Fisted_Blade_Piece = 2108;
|
||||
private static final int Full_Plate_Armor_Temper = 1986;
|
||||
private static final int Poleaxe_Blade = 2093;
|
||||
private static final int Sage_Staff_Head = 2109;
|
||||
private static final int Sealed_Avadon_Circlet_Pattern = 4072;
|
||||
private static final int Sealed_Blue_Wolf_Helmet_Design = 4088;
|
||||
private static final int Sealed_Doom_Helmet_Design = 4089;
|
||||
private static final int Sword_of_Nightmare_Blade = 2095;
|
||||
|
||||
private static final int[][] DROPLIST =
|
||||
{
|
||||
// Rain Watermelon
|
||||
{ 13273, Class_Buff_Scroll_1st, 70 },
|
||||
{ 13273, Angel_Cat_Blessing_Chest, 60 },
|
||||
{ 13273, Major_Healing_Potion, 70 },
|
||||
{ 13273, Rice_Cake_of_Fighting_Spirit, 60 },
|
||||
{ 13273, XP_SP_Scroll_Normal, 50 },
|
||||
{ 13273, XP_SP_Scroll_Medium, 40 },
|
||||
{ 13273, Steel, 50 },
|
||||
{ 13273, Adamantite_Nugget, 50 },
|
||||
{ 13273, Mithril_Ore, 50 },
|
||||
{ 13273, Leather, 50 },
|
||||
{ 13273, Cokes, 50 },
|
||||
{ 13273, Coarse_Bone_Powder, 50 },
|
||||
{ 13273, Stone_of_Purity, 50 },
|
||||
{ 13273, Stormbringer_Blade, 50 },
|
||||
{ 13273, Stick_of_Faith_Shaft, 50 },
|
||||
{ 13273, Sealed_Blue_Wolf_Glove_Fabric, 50 },
|
||||
{ 13273, Sealed_Blue_Wolf_Boot_Design, 50 },
|
||||
{ 13273, Sealed_Avadon_Glove_Fragment, 50 },
|
||||
{ 13273, Sealed_Avadon_Boot_Design, 50 },
|
||||
{ 13273, Orcish_Glaive_Blade, 50 },
|
||||
{ 13273, Flamberge_Blade, 50 },
|
||||
{ 13273, Crystallized_Ice_Bow_Shaft, 50 },
|
||||
{ 13273, Crystal_Staff_Head, 50 },
|
||||
{ 13273, Blue_Wolf_Gaiter_Material, 50 },
|
||||
{ 13273, Battle_Axe_Head, 50 },
|
||||
{ 13273, Recipe_Battle_Axe, 50 },
|
||||
{ 13273, Recipe_Blue_Wolf_Gaiters, 50 },
|
||||
{ 13273, Recipe_Crystal_Staff, 50 },
|
||||
{ 13273, Recipe_Crystallized_Ice_Bow, 50 },
|
||||
{ 13273, Recipe_Divine_Gloves, 50 },
|
||||
{ 13273, Recipe_Divine_Stockings, 50 },
|
||||
{ 13273, Recipe_Flamberge, 50 },
|
||||
{ 13273, Recipe_Full_Plate_Helmet, 50 },
|
||||
{ 13273, Recipe_Full_Plate_Shield, 50 },
|
||||
{ 13273, Recipe_Orcish_Glaive, 50 },
|
||||
{ 13273, Recipe_Sealed_Avadon_Boots, 50 },
|
||||
{ 13273, Recipe_Sealed_Avadon_Gloves, 50 },
|
||||
{ 13273, Recipe_Sealed_Blue_Wolf_Boots, 50 },
|
||||
{ 13273, Recipe_Sealed_Blue_Wolf_Gloves, 50 },
|
||||
{ 13273, Recipe_Stick_of_Faith, 50 },
|
||||
{ 13273, Recipe_Stormbringer, 50 },
|
||||
|
||||
// Defective Watermelon
|
||||
{ 13272, Class_Buff_Scroll_1st, 70 },
|
||||
{ 13272, Angel_Cat_Blessing_Chest, 60 },
|
||||
{ 13272, Major_Healing_Potion, 70 },
|
||||
{ 13272, Rice_Cake_of_Fighting_Spirit, 60 },
|
||||
{ 13272, XP_SP_Scroll_Normal, 50 },
|
||||
{ 13272, Coal, 50 },
|
||||
{ 13272, Animal_Bone, 50 },
|
||||
{ 13272, Varnish, 50 },
|
||||
{ 13272, Recipe_Atuba_Hammer, 50 },
|
||||
{ 13272, Recipe_Gastraphetes, 50 },
|
||||
{ 13272, Recipe_Maingauche, 50 },
|
||||
{ 13272, Recipe_Staff_of_Life, 50 },
|
||||
{ 13272, Recipe_Sword_of_Revolution, 50 },
|
||||
{ 13272, Atuba_Hammer_Head, 50 },
|
||||
{ 13272, Gastraphetes_Shaft, 50 },
|
||||
{ 13272, Maingauche_Edge, 50 },
|
||||
{ 13272, Staff_of_Life_Shaft, 50 },
|
||||
{ 13272, Sword_of_Revolution_Blade, 50 },
|
||||
|
||||
// Large rain Watermelon
|
||||
{ 13274, Battle_Axe, 5 },
|
||||
{ 13274, Crystal_Staff, 5 },
|
||||
{ 13274, Crystallized_Ice_Bow, 5 },
|
||||
{ 13274, Flamberge, 5 },
|
||||
{ 13274, Orcish_Glaive, 5 },
|
||||
{ 13274, Stick_of_Faith, 5 },
|
||||
{ 13274, Stormbringer, 5 },
|
||||
{ 13274, Divine_Gloves, 5 },
|
||||
{ 13274, Divine_Stockings, 5 },
|
||||
{ 13274, Divine_Tunic, 5 },
|
||||
{ 13274, Drake_Leather_Armor, 5 },
|
||||
{ 13274, Drake_Leather_Boots, 5 },
|
||||
{ 13274, Full_Plate_Armor, 5 },
|
||||
{ 13274, Full_Plate_Helmet, 5 },
|
||||
{ 13274, Full_Plate_Shield, 5 },
|
||||
{ 13274, Class_Buff_Scroll_2nd , 50 },
|
||||
{ 13274, Angel_Cat_Blessing_Chest, 50 },
|
||||
{ 13274, Blessed_Scroll_of_Escape, 50 },
|
||||
{ 13274, Blessed_Scroll_of_Resurrection, 50 },
|
||||
{ 13274, Greater_CP_Potion, 50 },
|
||||
{ 13274, Quick_Healing_Potion, 50 },
|
||||
{ 13274, Rice_Cake_of_Flaming_Fighting_Spirit, 50 },
|
||||
{ 13274, Special_Pirate_Fruit, 50 },
|
||||
{ 13274, XP_SP_Scroll_High, 50 },
|
||||
{ 13274, XP_SP_Scroll_Medium, 50 },
|
||||
{ 13274, Crystal_C, 50 },
|
||||
{ 13274, Scroll_Enchant_Armor_C, 50 },
|
||||
{ 13274, Scroll_Enchant_Weapon_C, 50 },
|
||||
{ 13274, Scroll_Dance_of_Fire, 70 },
|
||||
{ 13274, Scroll_Hunter_Song, 70 },
|
||||
{ 13274, Mithril_Alloy, 50 },
|
||||
{ 13274, Mold_Hardener, 50 },
|
||||
{ 13274, Oriharukon, 50 },
|
||||
{ 13274, Silver_Mold, 50 },
|
||||
|
||||
// Defective Honey Watermelon
|
||||
{ 13276, Atuba_Hammer, 20 },
|
||||
{ 13276, Gastraphetes, 20 },
|
||||
{ 13276, Maingauche, 20 },
|
||||
{ 13276, Staff_of_Life, 20 },
|
||||
{ 13276, Sword_of_Revolution, 20 },
|
||||
{ 13276, War_Pick, 20 },
|
||||
{ 13276, Class_Buff_Scroll_1st, 50 },
|
||||
{ 13276, Class_Buff_Scroll_2nd , 50 },
|
||||
{ 13276, Angel_Cat_Blessing_Chest, 50 },
|
||||
{ 13276, Greater_CP_Potion, 50 },
|
||||
{ 13276, Rice_Cake_of_Fighting_Spirit, 50 },
|
||||
{ 13276, Special_Pirate_Fruit, 50 },
|
||||
{ 13276, XP_SP_Scroll_High, 50 },
|
||||
{ 13276, XP_SP_Scroll_Medium, 50 },
|
||||
{ 13276, Crystal_D, 50 },
|
||||
{ 13276, Scroll_Enchant_Armor_D, 50 },
|
||||
{ 13276, Scroll_Enchant_Weapon_D, 50 },
|
||||
{ 13276, Scroll_Acumen, 70 },
|
||||
{ 13276, Scroll_Berserker_Spirit, 70 },
|
||||
{ 13276, Scroll_Blessed_Body, 70 },
|
||||
{ 13276, Scroll_Death_Whisper, 70 },
|
||||
{ 13276, Scroll_Guidance, 70 },
|
||||
{ 13276, Scroll_Haste, 70 },
|
||||
{ 13276, Scroll_Magic_Barrier, 70 },
|
||||
{ 13276, Scroll_Mana_Regeneration, 70 },
|
||||
{ 13276, Scroll_Regeneration, 70 },
|
||||
{ 13276, Enria, 50 },
|
||||
{ 13276, Mithril_Alloy, 50 },
|
||||
{ 13276, Mold_Hardener, 50 },
|
||||
{ 13276, Mold_Lubricant, 50 },
|
||||
{ 13276, Silver_Mold, 50 },
|
||||
{ 13276, Varnish_of_Purity, 50 },
|
||||
|
||||
// Rain Honey Watermelon
|
||||
{ 13277, Class_Buff_Scroll_1st, 70 },
|
||||
{ 13277, Angel_Cat_Blessing_Chest, 60 },
|
||||
{ 13277, Greater_CP_Potion, 60 },
|
||||
{ 13277, Quick_Healing_Potion, 60 },
|
||||
{ 13277, Rice_Cake_of_Fighting_Spirit, 60 },
|
||||
{ 13277, Adamantite_Nugget, 50 },
|
||||
{ 13277, Asofe, 50 },
|
||||
{ 13277, Coarse_Bone_Powder, 50 },
|
||||
{ 13277, Cokes, 50 },
|
||||
{ 13277, High_grade_Suede, 50 },
|
||||
{ 13277, Mithril_Ore, 50 },
|
||||
{ 13277, Mold_Glue, 50 },
|
||||
{ 13277, Oriharukon_Ore, 50 },
|
||||
{ 13277, Steel, 50 },
|
||||
{ 13277, Steel_Mold, 50 },
|
||||
{ 13277, Stone_of_Purity, 50 },
|
||||
{ 13277, Synthetic_Braid, 50 },
|
||||
{ 13277, Synthetic_Cokes, 50 },
|
||||
{ 13277, Varnish_of_Purity, 50 },
|
||||
{ 13277, Avadon_Robe_Fabric, 50 },
|
||||
{ 13277, Berserker_Blade_Edge, 50 },
|
||||
{ 13277, Blue_Wolf_Breastplate_Part, 50 },
|
||||
{ 13277, Dark_Screamer_Edge, 50 },
|
||||
{ 13277, Divine_Tunic_Fabric, 50 },
|
||||
{ 13277, Eminence_Bow_Shaft, 50 },
|
||||
{ 13277, Fisted_Blade_Piece, 50 },
|
||||
{ 13277, Full_Plate_Armor_Temper, 50 },
|
||||
{ 13277, Poleaxe_Blade, 50 },
|
||||
{ 13277, Sage_Staff_Head, 50 },
|
||||
{ 13277, Sealed_Avadon_Circlet_Pattern, 50 },
|
||||
{ 13277, Sealed_Blue_Wolf_Helmet_Design, 50 },
|
||||
{ 13277, Sealed_Doom_Helmet_Design, 50 },
|
||||
{ 13277, Sword_of_Nightmare_Blade, 50 },
|
||||
{ 13277, Recipe_Avadon_Robe, 50 },
|
||||
{ 13277, Recipe_Berserker_Blade, 50 },
|
||||
{ 13277, Recipe_Blue_Wolf_Breastplate, 50 },
|
||||
{ 13277, Recipe_Dark_Screamer, 50 },
|
||||
{ 13277, Recipe_Divine_Tunic, 50 },
|
||||
{ 13277, Recipe_Eminence_Bow, 50 },
|
||||
{ 13277, Recipe_Fisted_Blade, 50 },
|
||||
{ 13277, Recipe_Full_Plate_Armor, 50 },
|
||||
{ 13277, Recipe_Homunkulus_Sword, 50 },
|
||||
{ 13277, Recipe_Leather_Armor_of_Doom, 50 },
|
||||
{ 13277, Recipe_Poleaxe, 50 },
|
||||
{ 13277, Recipe_Sage_Staff, 50 },
|
||||
{ 13277, Recipe_Sealed_Avadon_Circlet, 50 },
|
||||
{ 13277, Recipe_Sealed_Blue_Wolf_Helmet, 50 },
|
||||
{ 13277, Recipe_Sealed_Doom_Helmet, 50 },
|
||||
{ 13277, Recipe_Sword_of_Nightmare, 50 },
|
||||
|
||||
// Large Rain Honey Watermelon
|
||||
{ 13278, Berserker_Blade, 5 },
|
||||
{ 13278, Dark_Screamer, 5 },
|
||||
{ 13278, Eminence_Bow, 5 },
|
||||
{ 13278, Fisted_Blade, 5 },
|
||||
{ 13278, Homunkulus_Sword, 5 },
|
||||
{ 13278, Poleaxe, 5 },
|
||||
{ 13278, Sage_Staff, 5 },
|
||||
{ 13278, Sword_of_Nightmare, 5 },
|
||||
{ 13278, Avadon_Robe, 5 },
|
||||
{ 13278, Blue_Wolf_Breastplate, 5 },
|
||||
{ 13278, Blue_Wolf_Gaiters, 5 },
|
||||
{ 13278, Leather_Armor_of_Doom, 5 },
|
||||
{ 13278, Sealed_Avadon_Boots, 10 },
|
||||
{ 13278, Sealed_Avadon_Circlet, 10 },
|
||||
{ 13278, Sealed_Avadon_Gloves, 10 },
|
||||
{ 13278, Sealed_Blue_Wolf_Boots, 10 },
|
||||
{ 13278, Sealed_Blue_Wolf_Gloves, 10 },
|
||||
{ 13278, Sealed_Blue_Wolf_Helmet, 10 },
|
||||
{ 13278, Sealed_Doom_Boots, 10 },
|
||||
{ 13278, Sealed_Doom_Gloves, 10 },
|
||||
{ 13278, Sealed_Doom_Helmet, 10 },
|
||||
{ 13278, Class_Buff_Scroll_2nd , 50 },
|
||||
{ 13278, Angel_Cat_Blessing_Chest, 50 },
|
||||
{ 13278, Blessed_Scroll_of_Escape, 50 },
|
||||
{ 13278, Blessed_Scroll_of_Resurrection, 50 },
|
||||
{ 13278, Blessed_Scroll_Enchant_Armor_C, 30 },
|
||||
{ 13278, Blessed_Scroll_Enchant_Armor_D, 30 },
|
||||
{ 13278, Blessed_Scroll_Enchant_Weapon_C, 20 },
|
||||
{ 13278, Blessed_Scroll_Enchant_Weapon_D, 20 },
|
||||
{ 13278, Crystal_B, 50 },
|
||||
{ 13278, Crystal_C, 50 },
|
||||
{ 13278, Greater_CP_Potion, 50 },
|
||||
{ 13278, Major_Healing_Potion, 50 },
|
||||
{ 13278, Quick_Healing_Potion, 70 },
|
||||
{ 13278, Rice_Cake_of_Flaming_Fighting_Spirit, 60 },
|
||||
{ 13278, Scroll_Dance_of_Fire, 60 },
|
||||
{ 13278, Scroll_Hunter_Song, 60 },
|
||||
{ 13278, Scroll_Enchant_Armor_C, 50 },
|
||||
{ 13278, Scroll_Enchant_Weapon_C, 40 },
|
||||
{ 13278, Special_Pirate_Fruit, 60 },
|
||||
{ 13278, XP_SP_Scroll_High, 60 },
|
||||
{ 13278, XP_SP_Scroll_Medium, 60 },
|
||||
};
|
||||
//@formatter:on
|
||||
|
||||
public WatermelonNinja()
|
||||
{
|
||||
addAttackId(SQUASH_LIST);
|
||||
addKillId(SQUASH_LIST);
|
||||
addSpawnId(SQUASH_LIST);
|
||||
addSpawnId(LARGE_SQUASH_LIST);
|
||||
addSkillSeeId(SQUASH_LIST);
|
||||
|
||||
addStartNpc(MANAGER);
|
||||
addFirstTalkId(MANAGER);
|
||||
addTalkId(MANAGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
npc.setImmobilized(true);
|
||||
npc.disableCoreAI(true);
|
||||
if (LARGE_SQUASH_LIST.contains(npc.getId()))
|
||||
{
|
||||
npc.setInvul(true);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAttack(Npc npc, Player attacker, int damage, boolean isPet)
|
||||
{
|
||||
if (LARGE_SQUASH_LIST.contains(npc.getId()))
|
||||
{
|
||||
if ((attacker.getActiveWeaponItem() != null) && CHRONO_LIST.contains(attacker.getActiveWeaponItem().getId()))
|
||||
{
|
||||
ChronoText(npc);
|
||||
npc.setInvul(false);
|
||||
npc.getStatus().reduceHp(10, attacker);
|
||||
}
|
||||
else
|
||||
{
|
||||
noChronoText(npc);
|
||||
npc.setInvul(true);
|
||||
}
|
||||
}
|
||||
return super.onAttack(npc, attacker, damage, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSkillSee(Npc npc, Player caster, Skill skill, WorldObject[] targets, boolean isPet)
|
||||
{
|
||||
if (SQUASH_LIST.contains(npc.getId()) && (skill.getId() == NECTAR_SKILL))
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case 13271: // Watermelon Seed
|
||||
{
|
||||
randomSpawn(13274, 13273, 13272, npc);
|
||||
break;
|
||||
}
|
||||
case 13275: // Honey Watermelon Seed
|
||||
{
|
||||
randomSpawn(13278, 13277, 13276, npc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onSkillSee(npc, caster, skill, targets, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player killer, boolean isPet)
|
||||
{
|
||||
if (SQUASH_LIST.contains(npc.getId()))
|
||||
{
|
||||
dropItem(npc, killer);
|
||||
}
|
||||
return super.onKill(npc, killer, isPet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onFirstTalk(Npc npc, Player player)
|
||||
{
|
||||
return npc.getId() + ".htm";
|
||||
}
|
||||
|
||||
private void dropItem(Npc mob, Player player)
|
||||
{
|
||||
final int npcId = mob.getId();
|
||||
final int chance = getRandom(100);
|
||||
for (int[] drop : DROPLIST)
|
||||
{
|
||||
if ((npcId == drop[0]) && (chance < drop[2]))
|
||||
{
|
||||
((Monster) mob).dropItem(player, drop[1], 1);
|
||||
continue;
|
||||
}
|
||||
if (npcId < drop[0])
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void randomSpawn(int low, int medium, int high, Npc npc)
|
||||
{
|
||||
final int random = getRandom(100);
|
||||
if (random < 5)
|
||||
{
|
||||
spawnNext(low, npc);
|
||||
}
|
||||
if (random < 10)
|
||||
{
|
||||
spawnNext(medium, npc);
|
||||
}
|
||||
else if (random < 30)
|
||||
{
|
||||
spawnNext(high, npc);
|
||||
}
|
||||
else
|
||||
{
|
||||
nectarText(npc);
|
||||
}
|
||||
}
|
||||
|
||||
private void ChronoText(Npc npc)
|
||||
{
|
||||
if (getRandom(100) < 20)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc, ChatType.NPC_GENERAL, npc.getName(), _CHRONO_TEXT[getRandom(_CHRONO_TEXT.length)]));
|
||||
}
|
||||
}
|
||||
|
||||
private void noChronoText(Npc npc)
|
||||
{
|
||||
if (getRandom(100) < 20)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc, ChatType.NPC_GENERAL, npc.getName(), _NOCHRONO_TEXT[getRandom(_NOCHRONO_TEXT.length)]));
|
||||
}
|
||||
}
|
||||
|
||||
private void nectarText(Npc npc)
|
||||
{
|
||||
if (getRandom(100) < 30)
|
||||
{
|
||||
npc.broadcastPacket(new CreatureSay(npc, ChatType.NPC_GENERAL, npc.getName(), _NECTAR_TEXT[getRandom(_NECTAR_TEXT.length)]));
|
||||
}
|
||||
}
|
||||
|
||||
private void spawnNext(int npcId, Npc npc)
|
||||
{
|
||||
addSpawn(npcId, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 60000);
|
||||
npc.deleteMe();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new WatermelonNinja();
|
||||
}
|
||||
}
|
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<event name="Watermelon Ninja" active="10 03 2017-11 03 2017" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
|
||||
<droplist>
|
||||
<add item="6391" min="1" max="1" chance="50%" /> <!-- Nectar -->
|
||||
</droplist>
|
||||
<spawnlist>
|
||||
<add npc="31860" x="-84008" y="243032" z="-3728" heading="49744" /> <!-- Talking Island -->
|
||||
<add npc="31860" x="45688" y="49080" z="-3056" heading="49744" /> <!-- Elven Village -->
|
||||
<add npc="31860" x="-44584" y="-113608" z="-192" heading="49744" /> <!-- Orc Village -->
|
||||
<add npc="31860" x="10643" y="17034" z="-4592" heading="49744" /> <!-- Dark Elven Village -->
|
||||
<add npc="31860" x="115656" y="-178056" z="-912" heading="49744" /> <!-- Dwarf Village -->
|
||||
<add npc="31860" x="-80485" y="149537" z="-3016" heading="16383" /> <!-- Gluddin -->
|
||||
<add npc="31860" x="-14143" y="123176" z="-3096" heading="30212" /> <!-- Gludio -->
|
||||
<add npc="31860" x="16354" y="142848" z="-2680" heading="14450" /> <!-- Dion -->
|
||||
<add npc="31860" x="82312" y="148616" z="-3440" heading="3355" /> <!-- Giran -->
|
||||
<add npc="31860" x="82008" y="53874" z="-1472" heading="3355" /> <!-- Oren -->
|
||||
<add npc="31860" x="147064" y="25928" z="-2008" heading="17863" /> <!-- Aden -->
|
||||
<add npc="31860" x="117380" y="76684" z="-2672" heading="40961" /> <!-- Hunters Village -->
|
||||
</spawnlist>
|
||||
<messages>
|
||||
<add type="onEnd" text="Watermelon Ninja: Event end!" />
|
||||
<add type="onEnter" text="Watermelon Ninja: Event ongoing!" />
|
||||
</messages>
|
||||
</event>
|
@@ -385,7 +385,6 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("Untargetable", Untargetable::new);
|
||||
EffectHandler.getInstance().registerHandler("VampiricAttack", VampiricAttack::new);
|
||||
EffectHandler.getInstance().registerHandler("VampiricDefence", VampiricDefence::new);
|
||||
EffectHandler.getInstance().registerHandler("VipUp", VipUp::new);
|
||||
EffectHandler.getInstance().registerHandler("VitalityExpRate", VitalityExpRate::new);
|
||||
EffectHandler.getInstance().registerHandler("VitalityPointsRate", VitalityPointsRate::new);
|
||||
EffectHandler.getInstance().registerHandler("VitalityPointUp", VitalityPointUp::new);
|
||||
|
@@ -29,7 +29,6 @@ import org.l2jmobius.gameserver.data.sql.CrestTable;
|
||||
import org.l2jmobius.gameserver.data.xml.AdminData;
|
||||
import org.l2jmobius.gameserver.data.xml.AppearanceItemData;
|
||||
import org.l2jmobius.gameserver.data.xml.ArmorSetData;
|
||||
import org.l2jmobius.gameserver.data.xml.AttendanceRewardData;
|
||||
import org.l2jmobius.gameserver.data.xml.BuyListData;
|
||||
import org.l2jmobius.gameserver.data.xml.CombinationItemsData;
|
||||
import org.l2jmobius.gameserver.data.xml.DoorData;
|
||||
@@ -310,12 +309,6 @@ public class AdminReload implements IAdminCommandHandler
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Fishing data.");
|
||||
break;
|
||||
}
|
||||
case "attendance":
|
||||
{
|
||||
AttendanceRewardData.getInstance().load();
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Attendance Reward data.");
|
||||
break;
|
||||
}
|
||||
case "fakeplayers":
|
||||
{
|
||||
FakePlayerData.getInstance().load();
|
||||
|
@@ -96,7 +96,7 @@ public class Observation implements IBypassHandler
|
||||
|
||||
if (player.hasSummon())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_MAY_NOT_OBSERVE_A_SIEGE_WITH_A_SERVITOR_SUMMONED);
|
||||
player.sendPacket(SystemMessageId.YOU_MAY_NOT_OBSERVE_A_SIEGE_WITH_A_PET_OR_SERVITOR_SUMMONED);
|
||||
return false;
|
||||
}
|
||||
if (player.isOnEvent())
|
||||
|
@@ -83,7 +83,7 @@ public class ChatGeneral implements IChatHandler
|
||||
|
||||
if ((activeChar.getLevel() < Config.MINIMUM_CHAT_LEVEL) && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS))
|
||||
{
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.GENERAL_CHAT_CANNOT_BE_USED_BY_NON_PREMIUM_USERS_LV_S1_OR_LOWER).addInt(Config.MINIMUM_CHAT_LEVEL));
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.PLAYERS_CAN_USE_GENERAL_CHAT_AFTER_LV_S1).addInt(Config.MINIMUM_CHAT_LEVEL));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -54,7 +54,7 @@ public class ChatShout implements IChatHandler
|
||||
}
|
||||
if ((activeChar.getLevel() < Config.MINIMUM_CHAT_LEVEL) && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS))
|
||||
{
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.SHOUT_CHAT_CANNOT_BE_USED_BY_NON_PREMIUM_USERS_LV_S1_OR_LOWER).addInt(Config.MINIMUM_CHAT_LEVEL));
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.PLAYERS_CAN_SHOUT_AFTER_LV_S1).addInt(Config.MINIMUM_CHAT_LEVEL));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -54,7 +54,7 @@ public class ChatTrade implements IChatHandler
|
||||
}
|
||||
if (activeChar.getLevel() < 20)
|
||||
{
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.TRADE_CHAT_CANNOT_BE_USED_BY_NON_PREMIUM_USERS_LV_S1_OR_LOWER).addInt(20));
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.PLAYERS_CAN_USE_TRADE_CHAT_AFTER_LV_S1).addInt(20));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -108,7 +108,7 @@ public class ChatWhisper implements IChatHandler
|
||||
}
|
||||
if ((activeChar.getLevel() < Config.MINIMUM_CHAT_LEVEL) && !activeChar.getWhisperers().contains(receiver.getObjectId()) && !activeChar.canOverrideCond(PlayerCondOverride.CHAT_CONDITIONS))
|
||||
{
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.NON_PREMIUM_USERS_LV_S1_OR_LOWER_CAN_RESPOND_TO_A_WHISPER_BUT_CANNOT_INITIATE_IT).addInt(Config.MINIMUM_CHAT_LEVEL));
|
||||
activeChar.sendPacket(new SystemMessage(SystemMessageId.PLAYERS_CAN_RESPOND_TO_A_WHISPER_BUT_CANNOT_INITIATE_A_WHISPER_UNTIL_LV_S1).addInt(Config.MINIMUM_CHAT_LEVEL));
|
||||
return;
|
||||
}
|
||||
if (!BlockList.isBlocked(receiver, activeChar))
|
||||
|
@@ -1,60 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.effecthandlers;
|
||||
|
||||
import org.l2jmobius.gameserver.model.StatSet;
|
||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
|
||||
import org.l2jmobius.gameserver.model.item.instance.Item;
|
||||
import org.l2jmobius.gameserver.model.skill.Skill;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public class VipUp extends AbstractEffect
|
||||
{
|
||||
private final long _amount;
|
||||
|
||||
public VipUp(StatSet params)
|
||||
{
|
||||
_amount = params.getLong("amount", 0L);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInstant()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void instant(Creature effector, Creature effected, Skill skill, Item item)
|
||||
{
|
||||
if (effected == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final Player player = effected.getActingPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.updateVipPoints(_amount);
|
||||
}
|
||||
}
|
@@ -49,14 +49,14 @@ public class BeastSoulShot implements IItemHandler
|
||||
final Player activeOwner = playable.getActingPlayer();
|
||||
if (!activeOwner.hasSummon())
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.SERVITORS_ARE_NOT_AVAILABLE_AT_THIS_TIME);
|
||||
activeOwner.sendPacket(SystemMessageId.PETS_AND_SERVITORS_ARE_NOT_AVAILABLE_AT_THIS_TIME);
|
||||
return false;
|
||||
}
|
||||
|
||||
final Summon pet = playable.getPet();
|
||||
if ((pet != null) && pet.isDead())
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_SERVITOR_SAD_ISN_T_IT);
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET_OR_SERVITOR_SAD_ISN_T_IT);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class BeastSoulShot implements IItemHandler
|
||||
|
||||
if ((pet == null) && aliveServitor.isEmpty())
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_SERVITOR_SAD_ISN_T_IT);
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET_OR_SERVITOR_SAD_ISN_T_IT);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ public class BeastSoulShot implements IItemHandler
|
||||
// Not enough Soulshots to use.
|
||||
if (!activeOwner.disableAutoShot(itemId))
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SOULSHOTS_NEEDED_FOR_A_SERVITOR);
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SOULSHOTS_NEEDED_FOR_A_PET_SERVITOR);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -113,7 +113,7 @@ public class BeastSoulShot implements IItemHandler
|
||||
{
|
||||
if (!activeOwner.disableAutoShot(itemId))
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SOULSHOTS_NEEDED_FOR_A_SERVITOR);
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SOULSHOTS_NEEDED_FOR_A_PET_SERVITOR);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@@ -49,14 +49,14 @@ public class BeastSpiritShot implements IItemHandler
|
||||
final Player activeOwner = playable.getActingPlayer();
|
||||
if (!activeOwner.hasSummon())
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.SERVITORS_ARE_NOT_AVAILABLE_AT_THIS_TIME);
|
||||
activeOwner.sendPacket(SystemMessageId.PETS_AND_SERVITORS_ARE_NOT_AVAILABLE_AT_THIS_TIME);
|
||||
return false;
|
||||
}
|
||||
|
||||
final Summon pet = playable.getPet();
|
||||
if ((pet != null) && pet.isDead())
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_SERVITOR_SAD_ISN_T_IT);
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET_OR_SERVITOR_SAD_ISN_T_IT);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ public class BeastSpiritShot implements IItemHandler
|
||||
|
||||
if ((pet == null) && aliveServitor.isEmpty())
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_SERVITOR_SAD_ISN_T_IT);
|
||||
activeOwner.sendPacket(SystemMessageId.SOULSHOTS_AND_SPIRITSHOTS_ARE_NOT_AVAILABLE_FOR_A_DEAD_PET_OR_SERVITOR_SAD_ISN_T_IT);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ public class BeastSpiritShot implements IItemHandler
|
||||
// Not enough SpiritShots to use.
|
||||
if (!activeOwner.disableAutoShot(itemId))
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_NEEDED_FOR_A_SERVITOR);
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_NEEDED_FOR_A_PET_SERVITOR);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -114,7 +114,7 @@ public class BeastSpiritShot implements IItemHandler
|
||||
{
|
||||
if (!activeOwner.disableAutoShot(itemId))
|
||||
{
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_NEEDED_FOR_A_SERVITOR);
|
||||
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_NEEDED_FOR_A_PET_SERVITOR);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@@ -46,7 +46,7 @@ public class SummonItems extends ItemSkillsTemplate
|
||||
|
||||
if (player.isSitting())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_USE_ACTIONS_AND_SKILLS_WHILE_THE_CHARACTER_IS_SITTING);
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_MOVE_WHILE_SITTING);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -44,7 +44,7 @@ public class PetAttack implements IPlayerActionHandler
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
}
|
||||
else if (pet.canAttack(player.getTarget(), ctrlPressed))
|
||||
{
|
||||
|
@@ -45,7 +45,7 @@ public class PetHold implements IPlayerActionHandler
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -45,7 +45,7 @@ public class PetMove implements IPlayerActionHandler
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
}
|
||||
else if ((player.getTarget() != null) && (pet != player.getTarget()) && !pet.isMovementDisabled())
|
||||
{
|
||||
|
@@ -50,7 +50,7 @@ public class PetSkillUse implements IPlayerActionHandler
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
}
|
||||
else if ((pet.getLevel() - player.getLevel()) > 20)
|
||||
{
|
||||
|
@@ -44,7 +44,7 @@ public class PetStop implements IPlayerActionHandler
|
||||
}
|
||||
else if (pet.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -41,7 +41,7 @@ public class ServitorHold implements IPlayerActionHandler
|
||||
{
|
||||
if (s.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -45,7 +45,7 @@ public class ServitorMode implements IPlayerActionHandler
|
||||
{
|
||||
if (s.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public class ServitorMode implements IPlayerActionHandler
|
||||
{
|
||||
if (s.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -46,7 +46,7 @@ public class ServitorMove implements IPlayerActionHandler
|
||||
{
|
||||
if (summon.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -44,7 +44,7 @@ public class ServitorSkillUse implements IPlayerActionHandler
|
||||
{
|
||||
if (summon.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -40,7 +40,7 @@ public class ServitorStop implements IPlayerActionHandler
|
||||
{
|
||||
if (s.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -39,7 +39,7 @@ public class UnsummonServitor implements IPlayerActionHandler
|
||||
{
|
||||
if (s.isBetrayed())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
player.sendPacket(SystemMessageId.YOUR_PET_SERVITOR_IS_UNRESPONSIVE_AND_WILL_NOT_OBEY_ANY_ORDERS);
|
||||
canUnsummon = false;
|
||||
break;
|
||||
}
|
||||
|
@@ -96,7 +96,7 @@ public class BuildCampSkillCondition implements ISkillCondition
|
||||
}
|
||||
else if (!player.isInsideZone(ZoneId.HQ))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_CAN_T_BUILD_HEADQUARTERS_HERE);
|
||||
player.sendPacket(SystemMessageId.YOU_CANNOT_SET_UP_A_BASE_HERE);
|
||||
canCreateBase = false;
|
||||
}
|
||||
|
||||
|
@@ -63,7 +63,7 @@ public class CanSummonMultiSkillCondition implements ISkillCondition
|
||||
}
|
||||
else if (player.isInAirShip())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.A_SERVITOR_CANNOT_BE_SUMMONED_WHILE_ON_AN_AIRSHIP);
|
||||
player.sendPacket(SystemMessageId.A_SERVITOR_OR_PET_CANNOT_BE_SUMMONED_WHILE_ON_AN_AIRSHIP);
|
||||
canSummon = false;
|
||||
}
|
||||
else if ((player.getSummonPoints() + _summonPoints) > player.getMaxSummonPoints())
|
||||
|
@@ -69,7 +69,7 @@ public class CanSummonPetSkillCondition implements ISkillCondition
|
||||
}
|
||||
else if (player.isInAirShip())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.A_SERVITOR_CANNOT_BE_SUMMONED_WHILE_ON_AN_AIRSHIP);
|
||||
player.sendPacket(SystemMessageId.A_SERVITOR_OR_PET_CANNOT_BE_SUMMONED_WHILE_ON_AN_AIRSHIP);
|
||||
canSummon = false;
|
||||
}
|
||||
else if (player.isFlyingMounted() || player.isMounted() || player.inObserverMode() || player.isTeleporting())
|
||||
|
@@ -49,7 +49,7 @@ public class CanSummonSkillCondition implements ISkillCondition
|
||||
}
|
||||
else if (player.isInAirShip())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.A_SERVITOR_CANNOT_BE_SUMMONED_WHILE_ON_AN_AIRSHIP);
|
||||
player.sendPacket(SystemMessageId.A_SERVITOR_OR_PET_CANNOT_BE_SUMMONED_WHILE_ON_AN_AIRSHIP);
|
||||
canSummon = false;
|
||||
}
|
||||
|
||||
|
@@ -68,7 +68,7 @@ public class OpCheckFlagSkillCondition implements ISkillCondition
|
||||
}
|
||||
else if (!Util.checkIfInRange(200, player, target, true))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
canTakeFort = false;
|
||||
}
|
||||
return canTakeFort;
|
||||
|
@@ -68,7 +68,7 @@ public class PossessHolythingSkillCondition implements ISkillCondition
|
||||
}
|
||||
else if (!Util.checkIfInRange(skill.getCastRange(), player, target, true) || (Math.abs(player.getZ() - target.getZ()) > 45))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
player.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
canTakeCastle = false;
|
||||
}
|
||||
return canTakeCastle;
|
||||
|
@@ -89,7 +89,7 @@ public class Enemy implements ITargetTypeHandler
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@@ -64,7 +64,7 @@ public class EnemyNot implements ITargetTypeHandler
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@@ -89,7 +89,7 @@ public class EnemyOnly implements ITargetTypeHandler
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@@ -66,7 +66,7 @@ public class NpcBody implements ITargetTypeHandler
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@@ -95,7 +95,7 @@ public class PcBody implements ITargetTypeHandler
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@@ -66,7 +66,7 @@ public class Target implements ITargetTypeHandler
|
||||
{
|
||||
if (sendMessage)
|
||||
{
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_CANCELLED);
|
||||
creature.sendPacket(SystemMessageId.THE_DISTANCE_IS_TOO_FAR_AND_SO_THE_CASTING_HAS_BEEN_STOPPED);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@@ -53,7 +53,7 @@ public class OlympiadStat implements IUserCommandHandler
|
||||
final WorldObject target = player.getTarget();
|
||||
if ((target == null) || !target.isPlayer() || (target.getActingPlayer().getClassId().level() < 2))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THIS_COMMAND_CAN_ONLY_BE_USED_IN_CASE_A_TARGET_IS_AWAKENED_NOBLESSE_OR_EXALTED);
|
||||
player.sendPacket(SystemMessageId.THIS_COMMAND_CAN_ONLY_BE_USED_WHEN_THE_TARGET_IS_AN_AWAKENED_NOBLESSE_EXALTED);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -48,7 +48,7 @@ public class SiegeStatus implements IUserCommandHandler
|
||||
|
||||
if (!player.isNoble() || !player.isClanLeader())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.ONLY_A_CLAN_LEADER_THAT_IS_A_NOBLESSE_OR_EXALTED_CAN_VIEW_THE_SIEGE_STATUS_WINDOW_DURING_A_SIEGE_WAR);
|
||||
player.sendPacket(SystemMessageId.ONLY_A_CLAN_LEADER_THAT_IS_A_NOBLESSE_EXALTED_CAN_VIEW_THE_SIEGE_WAR_STATUS_WINDOW_DURING_A_SIEGE_WAR);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ public class SiegeStatus implements IUserCommandHandler
|
||||
return true;
|
||||
}
|
||||
|
||||
player.sendPacket(SystemMessageId.ONLY_A_CLAN_LEADER_THAT_IS_A_NOBLESSE_OR_EXALTED_CAN_VIEW_THE_SIEGE_STATUS_WINDOW_DURING_A_SIEGE_WAR);
|
||||
player.sendPacket(SystemMessageId.ONLY_A_CLAN_LEADER_THAT_IS_A_NOBLESSE_EXALTED_CAN_VIEW_THE_SIEGE_WAR_STATUS_WINDOW_DURING_A_SIEGE_WAR);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fishing Specialist Pierre:<br>
|
||||
For me fishing is the best way to have a rest. It helps me to relax, to forget about mortal coil, gives you peace of mind. However, it might end soon. There are some gossips that dirty water from the northwestern part of the Alligator Island kills all the fish. I'm afraid that these gossips might be true... Will you help me to deal with this problem and allay my anxiety?<br>
|
||||
(Only characters Lv. 20-75 can take this quest.)
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fishing Specialist Pierre:<br>
|
||||
For me fishing is the best way to have a rest. It helps me to relax, to forget about mortal coil, gives you peace of mind. However, it might end soon. There are some gossips that dirty water from the northwestern part of the Alligator Island kills all the fish. I'm afraid that these gossips might be true...<br>Could you, please, hear me out?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00127_FishingSpecialistsRequest 30013-02.html">"I would like to listen to you"</Button>
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Fishing Specialist Pierre:<br>
|
||||
Thank you a lot!<br>
|
||||
There are some gossips that dirty water from the northwestern part of the Alligator Island kills all the fish. I'm afraid that these gossips might be true. It is of crucial importance to check everything and find out what is happening. My friend <font color="LEVEL">Farm</font> is fishing in those lands. It's far away from here, to reach the place you need to cross the sea. But I can relocate you.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00127_FishingSpecialistsRequest teleport_to_ferma">"Teleport me, please"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fishing Specialist Pierre:<br>
|
||||
You haven't visited Ferma yet?! Hurry up! Bring him my <font color="LEVEL">letter</font>! There is very important information, which I heard from the fishers.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00127_FishingSpecialistsRequest teleport_to_ferma">"Teleport me, please"</Button>
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Fishing Specialist Pierre:<br>
|
||||
So that was the reason of water pollution! Thank you oce again. I'll ask the guild researchers to scrutinize everything.<br>
|
||||
And you... Please take it... Just to express you my gratitude...
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Ferma:<br>
|
||||
Fishing Specialist Pierre from Giran Harbor asked you to come! There is something that pollutes the water and destroys the ecosystem... Our guild sent there the researcher. While he was testing the water quantity I made a <font color="LEVEL">Report about Fish</font>. Hand this report to researcher.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Ferma:<br>
|
||||
You still haven't given my report to Researcher of Waters <font color="LEVEL">Baikal</font>? He is waiting for you in the cave. This report contains very important information about fish. Please, hurry up!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Ferma:<br>
|
||||
Hand a <font color="LEVEL">Sealed Bottle</font> with polluted water to <font color="LEVEL">Fishing Specialist Pierre</font>. You need to hurry up, otherwise contamination can spread!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Researcher of Waters Baikal:<br>
|
||||
Thanks to <font color="LEVEL">Report about Fish</font>, that you brought, I could make significant progress. Actually, I wanted to stay here for a while and to continue my research. Soon the water will be completely spoiled. I poured a little bit into <font color="LEVEL">Sealed Bottle</font>. Please, give it to Fishing Specialist Pierre. Help you to stop this disaster.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Researcher of Waters Baikal:<br>
|
||||
Haven't you visited Fishing Specialist Pierre yet? Hurry up. The situation is getting worse. I am really worried about the water quality as it can affect a future of the fishery.<br1>
|
||||
Ferma will help you to reach Giran Harbor. You will find him outside of the cave. When you meet <font color="LEVEL">Fishing Specialist Pierre</font>, please hand him <font color="LEVEL">Sealed Bottle</font>.
|
||||
</body></html>
|
@@ -1,173 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.Q00127_FishingSpecialistsRequest;
|
||||
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
|
||||
/**
|
||||
* Fishing Specialist's Request (127)
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Q00127_FishingSpecialistsRequest extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int PIERRE = 30013;
|
||||
private static final int FERMA = 30015;
|
||||
private static final int BAIKAL = 30016;
|
||||
// Items
|
||||
private static final int PIERRE_LETTER = 49510;
|
||||
private static final int FISH_REPORT = 49504;
|
||||
private static final int SEALED_BOTTLE = 49505;
|
||||
private static final int FISHING_ROD_CHEST = 49507;
|
||||
// Location
|
||||
private static final Location TELEPORT_LOC = new Location(105276, 162500, -3600);
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 20;
|
||||
private static final int MAX_LEVEL = 75;
|
||||
|
||||
public Q00127_FishingSpecialistsRequest()
|
||||
{
|
||||
super(127);
|
||||
addStartNpc(PIERRE);
|
||||
addTalkId(PIERRE, FERMA, BAIKAL);
|
||||
addCondLevel(MIN_LEVEL, MAX_LEVEL, "30013-00.htm");
|
||||
registerQuestItems(PIERRE_LETTER, FISH_REPORT, SEALED_BOTTLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30013-02.html":
|
||||
{
|
||||
qs.startQuest();
|
||||
giveItems(player, PIERRE_LETTER, 1);
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "teleport_to_ferma":
|
||||
{
|
||||
player.teleToLocation(TELEPORT_LOC);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
if (qs.isCreated())
|
||||
{
|
||||
if (npc.getId() == PIERRE)
|
||||
{
|
||||
htmltext = player.getLevel() < MIN_LEVEL ? "30013-00.htm" : "30013-01.htm";
|
||||
}
|
||||
}
|
||||
else if (qs.isStarted())
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case PIERRE:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
{
|
||||
htmltext = "30013-03.html";
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
takeItems(player, -1, SEALED_BOTTLE);
|
||||
giveItems(player, FISHING_ROD_CHEST, 1);
|
||||
qs.exitQuest(false, true);
|
||||
htmltext = "30013-04.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FERMA:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
takeItems(player, -1, PIERRE_LETTER);
|
||||
giveItems(player, FISH_REPORT, 1);
|
||||
qs.setCond(2, true);
|
||||
htmltext = "30015-01.html";
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
htmltext = "30015-02.html";
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
htmltext = "30015-03.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BAIKAL:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
takeItems(player, -1, FISH_REPORT);
|
||||
giveItems(player, SEALED_BOTTLE, 1);
|
||||
qs.setCond(3, true);
|
||||
htmltext = "30016-01.html";
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
htmltext = "30016-02.html";
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (qs.isCompleted())
|
||||
{
|
||||
htmltext = getAlreadyCompletedMsg(player);
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
The population of lizardmen on the north side of Oren is mysteriously growing. This must be related to the increase in the power of evil since the release of Antharas. There have been wild rumors of ghastly ceremonies held in the forest at night! The lizardmen are most likely under the direct control of Shilen, and these rituals no doubt strengthen the power of Antharas.....<br>
|
||||
In the midst of all this turmoil, the guild has asked me to make the roads safe for trade! No doubt they feel that their village is threatened.<br>
|
||||
But this is Oren Territory, and there will be problems if we send regular troops in... The captain has ordered me to mobilize mercenaries to stabilize the area. Will you join us?<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00300_HuntingLetoLizardman 30126-03.htm">"I'll do it."</Button>
|
||||
</body></html>
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
The population of lizardmen north of Oren is mysteriously growing. This must be related to the increase in the power of evil since the release of Antharas. There have been wild rumors of ghastly ceremonies held in the forest at night! The lizardmen are most likely under the direct control of Shilen, and these rituals no doubt strengthen the power of Antharas.....<br>
|
||||
In the midst of all this turmoil, the guild has asked me to make the roads safe for trade! No doubt they feel that their village is threatened.<br>
|
||||
But this is Oren Territory, and there will be problems if we send regular troops in... The captain has ordered me to mobilize mercenaries to stabilize the area, but I'm afraid you're not up to the job.<br>
|
||||
(This quest may only be undertaken by characters of level 34 or above.)
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
Destroy the lizardmen and take their bracelets as proof of your victory.<br>
|
||||
Kill the <font color="LEVEL">Leto Lizardmen, Leto Lizardman Archers, Leto Lizardman Soldiers, Leto Lizardman Overlords', Leto Lizardman Warriors</font> and so on. Don't attack their shaman! It might cause them to stop the ritual before our investigation is complete. The ritual must not end until our investigation is complete!<br>
|
||||
The guild had already sent me a reward for 60 bracelets. I'll give it to you as soon as you earn it.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
Please try harder! You must get rid of those filthy lizardmen who threaten trade between Aden and Oren.
|
||||
</body></html>
|
@@ -1,4 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
You're finished? Good work, but we're not done with those vile creatures yet! I'm sure the plains will be swarming with lizardmen again in a few short weeks. Now, let me count those bracelets.<br>
|
||||
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q00300_HuntingLetoLizardman 30126-06.html">"They're all there!"</Button>
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
Feel free to come back and help us anytime! The life of a mercenary may not pay well, but it has its rewards! Please accept this token of our appreciation.
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Guard Rath:<br>
|
||||
I don't think so! You haven't brought enough! Bring 60 if you want a reward!
|
||||
</body></html>
|
@@ -1,177 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package quests.Q00300_HuntingLetoLizardman;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.l2jmobius.gameserver.enums.QuestSound;
|
||||
import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.Player;
|
||||
import org.l2jmobius.gameserver.model.holders.ItemHolder;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.quest.Quest;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestState;
|
||||
import org.l2jmobius.gameserver.model.quest.State;
|
||||
|
||||
/**
|
||||
* Hunting Leto Lizardman (300)
|
||||
* @author ivantotov
|
||||
*/
|
||||
public class Q00300_HuntingLetoLizardman extends Quest
|
||||
{
|
||||
// NPCs
|
||||
private static final int RATH = 30126;
|
||||
// Items
|
||||
private static final int BRACELET_OF_LIZARDMAN = 7139;
|
||||
private static final ItemHolder REWARD_ADENA = new ItemHolder(Inventory.ADENA_ID, 5000);
|
||||
private static final ItemHolder REWARD_ANIMAL_BONE = new ItemHolder(1872, 50);
|
||||
private static final ItemHolder REWARD_ANIMAL_SKIN = new ItemHolder(1867, 50);
|
||||
// Misc
|
||||
private static final int MIN_LEVEL = 34;
|
||||
private static final int REQUIRED_BRACELET_COUNT = 60;
|
||||
// Monsters
|
||||
private static final Map<Integer, Integer> MOBS_SAC = new HashMap<>();
|
||||
static
|
||||
{
|
||||
MOBS_SAC.put(20577, 360); // Leto Lizardman
|
||||
MOBS_SAC.put(20578, 390); // Leto Lizardman Archer
|
||||
MOBS_SAC.put(20579, 410); // Leto Lizardman Soldier
|
||||
MOBS_SAC.put(20580, 790); // Leto Lizardman Warrior
|
||||
MOBS_SAC.put(20582, 890); // Leto Lizardman Overlord
|
||||
}
|
||||
|
||||
public Q00300_HuntingLetoLizardman()
|
||||
{
|
||||
super(300);
|
||||
addStartNpc(RATH);
|
||||
addTalkId(RATH);
|
||||
addKillId(MOBS_SAC.keySet());
|
||||
registerQuestItems(BRACELET_OF_LIZARDMAN);
|
||||
addCondMaxLevel(39, getNoQuestMsg(null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if (qs == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
String htmltext = null;
|
||||
switch (event)
|
||||
{
|
||||
case "30126-03.htm":
|
||||
{
|
||||
if (qs.isCreated())
|
||||
{
|
||||
qs.startQuest();
|
||||
htmltext = event;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "30126-06.html":
|
||||
{
|
||||
if (getQuestItemsCount(player, BRACELET_OF_LIZARDMAN) >= REQUIRED_BRACELET_COUNT)
|
||||
{
|
||||
takeItems(player, BRACELET_OF_LIZARDMAN, -1);
|
||||
final int rand = getRandom(1000);
|
||||
if (rand < 500)
|
||||
{
|
||||
giveItems(player, REWARD_ADENA);
|
||||
}
|
||||
else if (rand < 750)
|
||||
{
|
||||
giveItems(player, REWARD_ANIMAL_SKIN);
|
||||
}
|
||||
else if (rand < 1000)
|
||||
{
|
||||
giveItems(player, REWARD_ANIMAL_BONE);
|
||||
}
|
||||
qs.exitQuest(true, true);
|
||||
htmltext = event;
|
||||
}
|
||||
else
|
||||
{
|
||||
htmltext = "30126-07.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onKill(Npc npc, Player player, boolean isSummon)
|
||||
{
|
||||
final Player partyMember = getRandomPartyMember(player, 1);
|
||||
if (partyMember != null)
|
||||
{
|
||||
final QuestState qs = getQuestState(partyMember, false);
|
||||
if (qs.isCond(1) && (getRandom(1000) < MOBS_SAC.get(npc.getId())))
|
||||
{
|
||||
giveItems(player, BRACELET_OF_LIZARDMAN, 1);
|
||||
if (getQuestItemsCount(player, BRACELET_OF_LIZARDMAN) == REQUIRED_BRACELET_COUNT)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onKill(npc, player, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onTalk(Npc npc, Player player)
|
||||
{
|
||||
final QuestState qs = getQuestState(player, true);
|
||||
String htmltext = getNoQuestMsg(player);
|
||||
switch (qs.getState())
|
||||
{
|
||||
case State.CREATED:
|
||||
{
|
||||
htmltext = (player.getLevel() >= MIN_LEVEL) ? "30126-01.htm" : "30126-02.htm";
|
||||
break;
|
||||
}
|
||||
case State.STARTED:
|
||||
{
|
||||
switch (qs.getCond())
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
htmltext = "30126-04.html";
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
if (getQuestItemsCount(player, BRACELET_OF_LIZARDMAN) >= REQUIRED_BRACELET_COUNT)
|
||||
{
|
||||
htmltext = "30126-05.html";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
<html><body>Duelist Kaien:<br>
|
||||
This is the first I've heard of that! I'm so sorry, obviously you've gone to a great deal of trouble for nothing... Wait a moment~<br>
|
||||
Could I take a closer look at that? This design is remarkably similar to the one engraved on a scabbard that I received from my father... I am beginning to believe you now.<br>
|
||||
I come from a long line of dualists! It has been a tradition in my family for over a thousand years! Charming, no?<br>
|
||||
Thank you, I will accept this... I wish I had more to offer you in return! Please accept these worthless trinkets as a token of my appreciation!
|
||||
</body></html>
|
@@ -1,3 +0,0 @@
|
||||
<html><body>Duelist Kaien:<br>
|
||||
Your hilt has been taken to a Dwarven craftsman who will fashion a suitable blade for it... Aren't you excited?!
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>High Prefect Gavarentz:<br>
|
||||
This necklace and statue prove that what you say is true. Last night I dreamed of an Orc. His large body was covered with scars and he was drenched in what must have been his enemy's blood. He gave me this necklace...<br>
|
||||
Thank you, young traveler. Now I shall give the necklace to you. Use it carefully.
|
||||
</body></html>
|
||||
|
@@ -1,3 +0,0 @@
|
||||
<html><body>High Prefect Gavarentz:<br>
|
||||
I have entrusted the amulet necklace to my daughter, who I have sent north to the Orc Fortress. She will wear the necklace in battle. I pray the mighty spirit of her ancestor will watch over her.
|
||||
</body></html>
|
@@ -1,5 +0,0 @@
|
||||
<html><body>Antharas Watchman Gilmore:<br>
|
||||
I've not left Dragon Valley since I led my men here so many years ago to battle Antharas...<br>
|
||||
I have accepted the inevitability of my eternal responsibility to watch over the beast. But my heart goes out to the loyal soldiers who lost their lives due to my stubborn ignorance. I have no other wish than to see their remains returned to their hometowns, but I fear that you are not up to the task...<br>
|
||||
(This quest can only be undertaken by a character of level 48 or above.)
|
||||
</body></html>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user