diff --git a/trunk/dist/game/data/PrimeShop.xml b/trunk/dist/game/data/PrimeShop.xml index 9b26180fe5..7b0cc7ebbf 100644 --- a/trunk/dist/game/data/PrimeShop.xml +++ b/trunk/dist/game/data/PrimeShop.xml @@ -1,5 +1,15 @@ + + + @@ -720,13 +730,13 @@ - + - + diff --git a/trunk/dist/game/data/scripts.cfg b/trunk/dist/game/data/scripts.cfg index 713ea57a0c..06d1268a8b 100644 --- a/trunk/dist/game/data/scripts.cfg +++ b/trunk/dist/game/data/scripts.cfg @@ -249,6 +249,7 @@ conquerablehalls/RainbowSpringsChateau/RainbowSpringsChateau.java # Events events/CharacterBirthday/CharacterBirthday.java +events/EveTheFortuneTeller/EveTheFortuneTeller.java events/HuntForSanta/HuntForSanta.java # Disabled by default events diff --git a/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/8542-1.htm b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/8542-1.htm new file mode 100644 index 0000000000..a07d4ec255 --- /dev/null +++ b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/8542-1.htm @@ -0,0 +1,9 @@ +Crystal Seer Eve:
+Welcome to the doorway to your future! Show me your tickets, and I'll show you all that you desire.
+As long as you bring me the Fortune Reading tickets needed, I can read your fortune.
+You can get various dimensional items and rare items. You can get better items from the Luxury Fortune Reading game than the Regular Fortune Reading game.
+To play the Luxury Fortune Reading game, you'll need a Luxury Fortune Reading Ticket.
+To play the Regular Fortune Reading game, you'll need a Fortune Reading Ticket.
+You can purchase Fortune Reading Tickets from the L2Store for 35,000,000 Adena each..
+You can purchase Luxury Fortune Reading Tickets for 160 NCoins each.
+Back \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/8542.htm b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/8542.htm new file mode 100644 index 0000000000..23def8c255 --- /dev/null +++ b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/8542.htm @@ -0,0 +1,12 @@ + + +
+ +
+ + + + + +
May your future be full of mystery!
What would suit your fancy, traveler?
+ \ No newline at end of file diff --git a/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/EveTheFortuneTeller.java b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/EveTheFortuneTeller.java new file mode 100644 index 0000000000..61dcb0c672 --- /dev/null +++ b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/EveTheFortuneTeller.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2004-2015 L2J DataPack + * + * This file is part of L2J DataPack. + * + * L2J DataPack 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. + * + * L2J DataPack 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 . + */ +package events.EveTheFortuneTeller; + +import com.l2jserver.gameserver.enums.ChatType; +import com.l2jserver.gameserver.model.Location; +import com.l2jserver.gameserver.model.actor.L2Npc; +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.event.LongTimeEvent; +import com.l2jserver.gameserver.network.NpcStringId; +import com.l2jserver.gameserver.network.serverpackets.NpcSay; +import com.l2jserver.gameserver.network.serverpackets.luckygame.ExStartLuckyGame; +import com.l2jserver.gameserver.util.Broadcast; + +/** + * Eve the Fortune Teller Returns
+ * Info - http://www.lineage2.com/en/news/events/11182015-eve-the-fortune-teller-returns.php + * @author Mobius + */ +public final class EveTheFortuneTeller extends LongTimeEvent +{ + // NPCs + private static final int EVE = 8542; + private static final int JAYCE = 8540; + // Misc + private static final Location JAYCE_SPAWN = new Location(148090, 26644, -2209, 16383); + private static final NpcStringId[] JAYCE_TEXT = + { + NpcStringId.I_LOOK_WEST, + NpcStringId.EVE_WILL_BRING_YOU_GREAT_FORTUNE, + NpcStringId.YOU_WILL_ONE_DAY_ASK_ME_FOR_GUIDANCE_IN_YOUR_PATH + }; + + private EveTheFortuneTeller() + { + super(EveTheFortuneTeller.class.getSimpleName(), "events"); + addStartNpc(EVE); + addFirstTalkId(EVE); + addTalkId(EVE); + addSpawnId(JAYCE); + if (isEventPeriod()) + { + addSpawn(JAYCE, JAYCE_SPAWN, false, 0); + } + } + + @Override + public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) + { + String htmltext = null; + switch (event) + { + case "8542.htm": + case "8542-1.htm": + { + htmltext = event; + break; + } + case "FortuneReadingGame": + { + player.sendPacket(new ExStartLuckyGame(1)); + break; + } + case "LuxuryFortuneReadingGame": + { + player.sendPacket(new ExStartLuckyGame(2)); + break; + } + case "JAYCE_SHOUT": + { + Broadcast.toKnownPlayersInRadius(npc, new NpcSay(npc.getObjectId(), ChatType.NPC_GENERAL, npc.getId(), JAYCE_TEXT[getRandom(JAYCE_TEXT.length)]), 1000); + break; + } + } + return htmltext; + } + + @Override + public String onFirstTalk(L2Npc npc, L2PcInstance player) + { + return "8542.htm"; + } + + @Override + public String onSpawn(L2Npc npc) + { + startQuestTimer("JAYCE_SHOUT", 45000, npc, null, true); + return super.onSpawn(npc); + } + + public static void main(String[] args) + { + new EveTheFortuneTeller(); + } +} diff --git a/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/config.xml b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/config.xml new file mode 100644 index 0000000000..b42764ef46 --- /dev/null +++ b/trunk/dist/game/data/scripts/events/EveTheFortuneTeller/config.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/dist/game/data/stats/npcs/08500-08599.xml b/trunk/dist/game/data/stats/npcs/08500-08599.xml index 2735a9171f..499567b460 100644 --- a/trunk/dist/game/data/stats/npcs/08500-08599.xml +++ b/trunk/dist/game/data/stats/npcs/08500-08599.xml @@ -934,17 +934,16 @@ - - HUMAN - FEMALE - + KAMAEL + MALE + - + @@ -968,10 +967,9 @@ - HUMAN FEMALE - + diff --git a/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java b/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java index b3ffd22d54..723792f56c 100644 --- a/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java +++ b/trunk/java/com/l2jserver/gameserver/network/L2GamePacketHandler.java @@ -67,6 +67,7 @@ import com.l2jserver.gameserver.network.clientpackets.friend.RequestFriendList; import com.l2jserver.gameserver.network.clientpackets.friend.RequestSendFriendMsg; import com.l2jserver.gameserver.network.clientpackets.friend.RequestUpdateBlockMemo; import com.l2jserver.gameserver.network.clientpackets.friend.RequestUpdateFriendMemo; +import com.l2jserver.gameserver.network.clientpackets.luckygame.RequestLuckyGamePlay; import com.l2jserver.gameserver.network.clientpackets.mentoring.ConfirmMenteeAdd; import com.l2jserver.gameserver.network.clientpackets.mentoring.RequestMenteeAdd; import com.l2jserver.gameserver.network.clientpackets.mentoring.RequestMenteeWaitingList; @@ -1630,7 +1631,7 @@ public final class L2GamePacketHandler implements IPacketHandler, msg = new ExPCCafeRequestOpenWindowWithoutNPC(); break; case 0xF2: - // msg = new RequestLuckyGamePlay(); + msg = new RequestLuckyGamePlay(); break; case 0xF3: // msg = new NotifyTrainingRoomEnd(); diff --git a/trunk/java/com/l2jserver/gameserver/network/clientpackets/luckygame/RequestLuckyGamePlay.java b/trunk/java/com/l2jserver/gameserver/network/clientpackets/luckygame/RequestLuckyGamePlay.java new file mode 100644 index 0000000000..347383c3a9 --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/network/clientpackets/luckygame/RequestLuckyGamePlay.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2004-2015 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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. + * + * L2J Server 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 . + */ +package com.l2jserver.gameserver.network.clientpackets.luckygame; + +import com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket; +import com.l2jserver.gameserver.network.serverpackets.luckygame.ExBettingLuckyGameResult; + +/** + * @author Mobius + */ +public class RequestLuckyGamePlay extends L2GameClientPacket +{ + private int _type; + private int _count; + + @Override + protected void readImpl() + { + _type = readD(); // luxury = 2, normal = 1 + _count = readD(); // count + } + + @Override + protected void runImpl() + { + getActiveChar().sendPacket(new ExBettingLuckyGameResult(_type, _count)); + } + + @Override + public String getType() + { + return getClass().getSimpleName(); + } +} diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/ExBettingLuckyGameResult.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/ExBettingLuckyGameResult.java new file mode 100644 index 0000000000..5cee897733 --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/ExBettingLuckyGameResult.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2004-2015 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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. + * + * L2J Server 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 . + */ +package com.l2jserver.gameserver.network.serverpackets.luckygame; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; +import com.l2jserver.gameserver.model.holders.ItemHolder; +import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; +import com.l2jserver.gameserver.network.SystemMessageId; +import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket; +import com.l2jserver.gameserver.network.serverpackets.SystemMessage; +import com.l2jserver.util.Rnd; + +/** + * @author Mobius + */ +public class ExBettingLuckyGameResult extends L2GameServerPacket +{ + private static final int FORTUNE_READING_TICKET = 23767; + private static final int LUXURY_FORTUNE_READING_TICKET = 23768; + private int _count = 0; + private int _type = 0; + + public ExBettingLuckyGameResult(int type, int count) + { + _count = count; + _type = type; + } + + @Override + protected void writeImpl() + { + final L2PcInstance _activeChar = getClient().getActiveChar(); + if (_activeChar.getInventory().getInventoryItemCount(_type == 2 ? LUXURY_FORTUNE_READING_TICKET : FORTUNE_READING_TICKET, -1) < 1) + { + _activeChar.sendPacket(SystemMessageId.NOT_ENOUGH_TICKETS); + return; + } + + // Remove tickets + _activeChar.getInventory().destroyItemByItemId("FortuneTelling", _type == 2 ? LUXURY_FORTUNE_READING_TICKET : FORTUNE_READING_TICKET, _count, _activeChar, "FortuneTelling"); + + // Count remaining tickets + final long remainingTickets = _activeChar.getInventory().getInventoryItemCount(_type == 2 ? LUXURY_FORTUNE_READING_TICKET : FORTUNE_READING_TICKET, -1); + + // Calculate rewards + List rewards = new ArrayList<>(); + for (int rewardCounter = 0; rewardCounter < _count; rewardCounter++) + { + if (Rnd.get(3) == 0) // 1 out of 3 chance + { + if (_type == 2) + { + if (_count >= 40) + { + rewards.add(LuckyGameRewards.getRandomRare()); // Rare + } + else + { + rewards.add(LuckyGameRewards.getRandomLuxury()); // Luxury + } + } + else + { + rewards.add(LuckyGameRewards.getRandomNormal()); // Normal + } + } + } + + writeC(0xFE); + writeH(0x161); + writeD(0x01); // 0 disabled, 1 enabled + writeD(0x01); // ? + writeD((int) remainingTickets); + if (rewards.size() > 0) + { + writeD(rewards.size()); + for (ItemHolder reward : rewards) + { + writeD(0x02); // normal = 1, rare = 2 (forcing 2) + writeD(reward.getId()); + writeD((int) reward.getCount()); + + if (_type == 2) + { + _activeChar.addItem("LuxuryFortuneTelling", reward, _activeChar, false); + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CONGRATULATIONS_C1_HAS_OBTAINED_S2_OF_S3_IN_THE_LUXURY_FORTUNE_READING); + sm.addPcName(_activeChar); + sm.addLong(reward.getCount()); + sm.addItemName(new L2ItemInstance(reward.getId())); + _activeChar.sendPacket(sm); + } + else + { + _activeChar.addItem("FortuneTelling", reward, _activeChar, false); + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CONGRATULATIONS_C1_HAS_OBTAINED_S2_OF_S3_THROUGH_FORTUNE_READING); + sm.addPcName(_activeChar); + sm.addLong(reward.getCount()); + sm.addItemName(new L2ItemInstance(reward.getId())); + _activeChar.sendPacket(sm); + } + } + } + else + { + writeD(0x00); + } + } +} diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/ExStartLuckyGame.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/ExStartLuckyGame.java new file mode 100644 index 0000000000..e1409ecac3 --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/ExStartLuckyGame.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2004-2015 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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. + * + * L2J Server 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 . + */ +package com.l2jserver.gameserver.network.serverpackets.luckygame; + +import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket; + +/** + * @author Mobius + */ +public class ExStartLuckyGame extends L2GameServerPacket +{ + private static final int FORTUNE_READING_TICKET = 23767; + private static final int LUXURY_FORTUNE_READING_TICKET = 23768; + private int _type = 0; + + public ExStartLuckyGame(int type) + { + _type = type; + } + + @Override + protected void writeImpl() + { + final long count = getClient().getActiveChar().getInventory().getInventoryItemCount(_type == 2 ? LUXURY_FORTUNE_READING_TICKET : FORTUNE_READING_TICKET, -1); + + writeC(0xFE); + writeH(0x160); + writeD(_type); + writeD((int) count); + } +} diff --git a/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/LuckyGameRewards.java b/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/LuckyGameRewards.java new file mode 100644 index 0000000000..1f2db521c6 --- /dev/null +++ b/trunk/java/com/l2jserver/gameserver/network/serverpackets/luckygame/LuckyGameRewards.java @@ -0,0 +1,275 @@ +/* + * Copyright (C) 2004-2015 L2J Server + * + * This file is part of L2J Server. + * + * L2J Server 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. + * + * L2J Server 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 . + */ +package com.l2jserver.gameserver.network.serverpackets.luckygame; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jserver.gameserver.model.holders.ItemHolder; +import com.l2jserver.util.Rnd; + +/** + * @author Mobius + */ +public final class LuckyGameRewards // TODO: Move to XML? +{ + private final static List _fortuneReadingTicketRewards = new ArrayList<>(); + static + { + _fortuneReadingTicketRewards.add(new ItemHolder(6656, 1)); // Antharas' Earring + _fortuneReadingTicketRewards.add(new ItemHolder(21712, 1)); // Blessed Zaken's Earring + _fortuneReadingTicketRewards.add(new ItemHolder(37511, 1)); // Enhanced Istina's Earring - Warrior + _fortuneReadingTicketRewards.add(new ItemHolder(37517, 1)); // Enhanced Istina's Earring - Wizard + _fortuneReadingTicketRewards.add(new ItemHolder(37512, 1)); // Enhanced Istina's Necklace - Warrior + _fortuneReadingTicketRewards.add(new ItemHolder(37518, 1)); // Enhanced Istina's Necklace - Wizard + _fortuneReadingTicketRewards.add(new ItemHolder(37510, 1)); // Enhanced Istina's Ring - Warrior + _fortuneReadingTicketRewards.add(new ItemHolder(37516, 1)); // Enhanced Istina's Ring - Wizard + _fortuneReadingTicketRewards.add(new ItemHolder(37508, 1)); // Enhanced Octavis' Earring - Warrior + _fortuneReadingTicketRewards.add(new ItemHolder(37514, 1)); // Enhanced Octavis' Earring - Wizard + _fortuneReadingTicketRewards.add(new ItemHolder(37509, 1)); // Enhanced Octavis' Necklace - Warrior + _fortuneReadingTicketRewards.add(new ItemHolder(37515, 1)); // Enhanced Octavis' Necklace - Wizard + _fortuneReadingTicketRewards.add(new ItemHolder(37507, 1)); // Enhanced Octavis' Ring - Warrior + _fortuneReadingTicketRewards.add(new ItemHolder(37513, 1)); // Enhanced Octavis' Ring - Wizard + _fortuneReadingTicketRewards.add(new ItemHolder(6661, 1)); // Orfen's Earring + _fortuneReadingTicketRewards.add(new ItemHolder(6660, 1)); // Queen Ant's Ring + _fortuneReadingTicketRewards.add(new ItemHolder(6657, 1)); // Valakas' Necklace + _fortuneReadingTicketRewards.add(new ItemHolder(17527, 1)); // Scroll: Enchant Armor: (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(17526, 1)); // Scroll: Enchant Weapon: (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(19448, 1)); // Blessed Scroll: Enchant Armor (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(19447, 1)); // Blessed Scroll: Enchant Weapon (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(33817, 1)); // Giant's Scroll: Enchant Armor (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(33811, 1)); // Giant's Scroll: Enchant Weapon (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(36160, 1)); // Scroll of Blessing: (R2-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(36161, 1)); // Scroll of Blessing: (R95-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(36162, 1)); // Scroll of Blessing: (R99-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(27600, 1)); // Scroll of Blessing: Armor (R95-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(27601, 1)); // Scroll of Blessing: Armor (R99-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(27597, 1)); // Scroll of Blessing: Weapon (R95-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(27598, 1)); // Scroll of Blessing: Weapon (R99-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(36513, 5)); // Elcyum Powder + _fortuneReadingTicketRewards.add(new ItemHolder(39631, 1)); // Fortune Pocket - Stage 3 + _fortuneReadingTicketRewards.add(new ItemHolder(39633, 1)); // Fortune Pocket - Stage 5 + _fortuneReadingTicketRewards.add(new ItemHolder(19440, 5)); // Gemstone (R-grade) + _fortuneReadingTicketRewards.add(new ItemHolder(35563, 2)); // Giant's Energy + _fortuneReadingTicketRewards.add(new ItemHolder(46395, 1)); // Shadow Ingot + _fortuneReadingTicketRewards.add(new ItemHolder(39592, 1)); // Tempest Stone + _fortuneReadingTicketRewards.add(new ItemHolder(46151, 1)); // Superior Giant's Codex - Mastery Chapter 1 + _fortuneReadingTicketRewards.add(new ItemHolder(46150, 1)); // Superior Giant's Codex Chapter 1 + _fortuneReadingTicketRewards.add(new ItemHolder(46478, 1)); // Leona's Soul Crystal - Stage 5 + _fortuneReadingTicketRewards.add(new ItemHolder(46508, 1)); // Lionel's Soul Crystal - Stage 5 + _fortuneReadingTicketRewards.add(new ItemHolder(46493, 1)); // Pantheon's Soul Crystal - Stage 5 + _fortuneReadingTicketRewards.add(new ItemHolder(46449, 1)); // Kain's Soul Crystal - Stage 6 + _fortuneReadingTicketRewards.add(new ItemHolder(46509, 1)); // Lionel's Soul Crystal - Stage 6 + _fortuneReadingTicketRewards.add(new ItemHolder(46464, 1)); // Mermoden's Soul Crystal - Stage 6 + _fortuneReadingTicketRewards.add(new ItemHolder(46494, 1)); // Pantheon's Soul Crystal - Stage 6 + _fortuneReadingTicketRewards.add(new ItemHolder(39637, 1)); // Venir's Talisman - Stage 4 + _fortuneReadingTicketRewards.add(new ItemHolder(39639, 1)); // Venir's Talisman - Stage 6 + _fortuneReadingTicketRewards.add(new ItemHolder(39641, 1)); // Venir's Talisman - Stage 8 + _fortuneReadingTicketRewards.add(new ItemHolder(35649, 1)); // Sealed Talisman - Longing + _fortuneReadingTicketRewards.add(new ItemHolder(37715, 1)); // Talisman - Anakim + _fortuneReadingTicketRewards.add(new ItemHolder(37714, 1)); // Talisman - Lilith + } + private static final List _luxuryFortuneReadingTicketRewards = new ArrayList<>(); + static + { + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(22426, 1)); // Ancient Scroll: Enchant Weapon: (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(19448, 1)); // Blessed Scroll: Enchant Armor: (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(19447, 1)); // Blessed Scroll: Enchant Weapon: (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(36164, 2)); // Giant's Scroll: Enchant Armor: (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(33811, 1)); // Giant's Scroll: Enchant Weapon (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27600, 2)); // Scroll of Blessing: Armor: (R95 grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27601, 2)); // Scroll of Blessing: Armor: (R99 grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(36160, 1)); // Scroll of Blessing: (R2-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(36161, 1)); // Scroll of Blessing: (R95-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(36162, 1)); // Scroll of Blessing: (R99-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27597, 1)); // Scroll of Blessing: Weapon: (R95-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27598, 1)); // Scroll of Blessing: Weapon: (R99-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(17527, 2)); // Scroll: Enchant Armor: (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(17526, 1)); // Scroll: Enchant Weapon: (R-grade) + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(35566, 1)); // Dark Amaranthine Enhancement Stone + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(35567, 1)); // Dark Eternal Enhancement Stone + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(6656, 1)); // Antharas' Earring + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(21712, 1)); // Blessed Zaken's Earring + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37511, 1)); // Enhanced Istina's Earring - Warrior + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37517, 1)); // Enhanced Istina's Earring - Wizard + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37512, 1)); // Enhanced Istina's Necklace - Warrior + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37518, 1)); // Enhanced Istina's Necklace - Wizard + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37510, 1)); // Enhanced Istina's Ring - Warrior + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37516, 1)); // Enhanced Istina's Ring - Wizard + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37508, 1)); // Enhanced Octavis' Earring - Warrior + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37514, 1)); // Enhanced Octavis' Earring - Wizard + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37509, 1)); // Enhanced Octavis' Necklace - Warrior + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37515, 1)); // Enhanced Octavis' Necklace - Wizard + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37507, 1)); // Enhanced Octavis' Ring - Warrior + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37513, 1)); // Enhanced Octavis' Ring - Wizard + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(6661, 1)); // Orfen's Earring + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(6660, 1)); // Queen Ant's Ring + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(6657, 1)); // Valakas' Necklace + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27462, 1)); // Angel Circlet Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27460, 1)); // Cat Ears Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27463, 1)); // Demon Circlet Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27466, 1)); // Eyepatch Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27467, 1)); // Party Hat Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27464, 1)); // Pirate's Eyepatch Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27458, 1)); // Rabbit Ears Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27459, 1)); // Raccoon Ears Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27468, 1)); // Refined Angel Ring Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27469, 1)); // Refined Devil Horn Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27461, 1)); // Romantic Chapeau Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(27465, 1)); // Outlaw's Eyepatch Box + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(36515, 1)); // Elcyum + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39631, 3)); // Fortune Pocket - Stage 3 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39633, 1)); // Fortune Pocket - Stage 5 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(19440, 15)); // Gem Stone - R grade + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(35563, 10)); // Giant's Energy + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39738, 1)); // Rune Stone + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39592, 1)); // Tempest Stone + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46150, 1)); // Superior Giant's Codex - Chapter 1 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46151, 1)); // Superior Giant's Codex - Mastery Chapter 1 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46478, 1)); // Leona's Soul Crystal - Stage 5 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46508, 1)); // Lionel's Soul Crystal - Stage 5 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46493, 1)); // Pantheon's Soul Crystal - Stage 5 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46449, 1)); // Kain's Soul Crystal - Stage 6 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46479, 1)); // Leona's Soul Crystal - Stage 6 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46509, 1)); // Lionel's Soul Crystal - Stage 6 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46464, 1)); // Mermoden's Soul Crystal - Stage 6 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46494, 1)); // Pantheon's Soul Crystal - Stage 6 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46553, 1)); // Mystic Soul Crystal + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37722, 1)); // Eva's Special Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37720, 1)); // Maphr's Special Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37719, 1)); // Pa'agrio's Special Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37721, 1)); // Sayha's Special Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26444, 1)); // Shadow Buster Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26438, 1)); // Shadow Cutter Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26446, 1)); // Shadow Dualsword Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26440, 1)); // Shadow Fighter Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46395, 10)); // Shadow Ingot + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26445, 1)); // Shadow Retributer Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26437, 1)); // Shadow Shaper Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26443, 1)); // Shadow Shooter Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26439, 1)); // Shadow Slasher Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26441, 1)); // Shadow Stormer Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(26442, 1)); // Shadow Thrower Pack + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37715, 1)); // Talisman - Anakim + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37714, 1)); // Talisman - Lilith + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37717, 1)); // Talisman - Seven Signs + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39637, 1)); // Venir's Talisman - Stage 4 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39639, 1)); // Venir's Talisman - Stage 6 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39641, 1)); // Venir's Talisman - Stage 8 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39643, 1)); // Venir's Talisman - Stage 10 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39647, 1)); // Venir's Talisman - Stage 14 + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(39573, 1)); // Sealed Talisman - Insanity + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(35649, 1)); // Sealed Talisman - Longing + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(37716, 1)); // Seven Signs' Energy + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(34999, 1)); // Tauti's Axe + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(35001, 1)); // Tauti's Dual Axe + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(34998, 1)); // Tauti's One-handed Axe + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46063, 1)); // Kelbim Crossbow + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46061, 1)); // Kelbim Dual Dagger + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46062, 1)); // Kelbim's Bow + _luxuryFortuneReadingTicketRewards.add(new ItemHolder(46060, 1)); // Kelbim's Dagger + } + private static final List _rareLuxuryFortuneReadingTicketRewards = new ArrayList<>(); + static + { + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(22426, 1)); // Ancient Scroll: Enchant Weapon - R grade + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(35566, 1)); // Dark Amaranthine Enhancement Stone + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(35567, 1)); // Dark Eternal Enhancement Stone + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27601, 2)); // Scroll of Blessing: Armor (R99-grade) + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(36160, 1)); // Scroll of Blessing: (R2-grade) + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(36161, 1)); // Scroll of Blessing: (R95-grade) + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(36162, 1)); // Scroll of Blessing: (R99-grade) + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27598, 1)); // Scroll of Blessing: Weapon (R99-grade) + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(6656, 1)); // Antharas' Earring + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(21712, 1)); // Blessed Zaken's Earring + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37511, 1)); // Enhanced Istina's Earring - Warrior + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37517, 1)); // Enhanced Istina's Earring - Wizard + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37512, 1)); // Enhanced Istina's Necklace - Warrior + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37518, 1)); // Enhanced Istina's Necklace - Wizard + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37510, 1)); // Enhanced Istina's Ring - Warrior + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37516, 1)); // Enhanced Istina's Ring - Wizard + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37508, 1)); // Enhanced Octavis' Earring - Warrior + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37514, 1)); // Enhanced Octavis' Earring - Wizard + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37509, 1)); // Enhanced Octavis' Necklace - Warrior + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37515, 1)); // Enhanced Octavis' Necklace - Wizard + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37507, 1)); // Enhanced Octavis' Ring - Warrior + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37513, 1)); // Enhanced Octavis' Ring - Wizard + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(6661, 1)); // Orfen's Earring + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(6660, 1)); // Queen Ant's Ring + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27462, 1)); // Angel Circlet Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27460, 1)); // Cat Ears Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27463, 1)); // Devil Circlet Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27464, 1)); // Eyepatch Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27465, 1)); // Outlaw's Eyepatch Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27467, 1)); // Party Hat Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27464, 1)); // Pirate's Eyepatch Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27458, 1)); // Rabbit Ears Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27459, 1)); // Raccoon Ears Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27468, 1)); // Refined Angel Ring Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27469, 1)); // Refined Devil Horn Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(27461, 1)); // Romantic Chapeau Box + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37722, 1)); // Eva's Special Pack + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37720, 1)); // Maphr's Special Pack + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37719, 1)); // Pa'agrio's Special Pack + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37721, 1)); // Sayha's Special Pack + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46449, 1)); // Kain's Soul Crystal - Stage 6 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46478, 1)); // Leona's Soul Crystal - Stage 5 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46479, 1)); // Leona's Soul Crystal - Stage 6 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46508, 1)); // Lionel's Soul Crystal - Stage 5 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46509, 1)); // Lionel's Soul Crystal - Stage 6 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46464, 1)); // Mermoden's Soul Crystal - Stage 6 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46493, 1)); // Pantheon's Soul Crystal - Stage 5 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46494, 1)); // Pantheon's Soul Crystal - Stage 6 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46553, 1)); // Mystic Soul Crystal + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46063, 1)); // Kelbim Crossbow + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46061, 1)); // Kelbim Dual Dagger + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46062, 1)); // Kelbim's Bow + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46060, 1)); // Kelbim's Dagger + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(34999, 1)); // Tauti's Axe + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(35001, 1)); // Tauti's Dual Axe + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(34998, 1)); // Tauti's One-handed Axe + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(6657, 1)); // Valakas' Necklace + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46395, 10)); // Shadow Ingot + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(46151, 1)); // Superior Giant's Codex - Mastery Chapter 1 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(39573, 1)); // Sealed Talisman - Insanity + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(35649, 1)); // Sealed Talisman - Longing + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37716, 1)); // Seven Signs' Energy + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37715, 1)); // Talisman - Anakim + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37714, 1)); // Talisman - Lilith + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(37717, 1)); // Talisman - Seven Signs + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(39641, 1)); // Venir's Talisman - Stage 8 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(39643, 1)); // Venir's Talisman - Stage 10 + _rareLuxuryFortuneReadingTicketRewards.add(new ItemHolder(39647, 1)); // Venir's Talisman - Stage 14 + } + + public static ItemHolder getRandomNormal() + { + return _fortuneReadingTicketRewards.get(Rnd.get(_fortuneReadingTicketRewards.size())); + } + + public static ItemHolder getRandomLuxury() + { + return _luxuryFortuneReadingTicketRewards.get(Rnd.get(_luxuryFortuneReadingTicketRewards.size())); + } + + public static ItemHolder getRandomRare() + { + return _rareLuxuryFortuneReadingTicketRewards.get(Rnd.get(_rareLuxuryFortuneReadingTicketRewards.size())); + } +}