123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826 |
- /*
- * 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 <http://www.gnu.org/licenses/>.
- */
- package quests.Q00662_AGameOfCards;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.quest.Quest;
- import com.l2jserver.gameserver.model.quest.QuestState;
- import com.l2jserver.gameserver.model.quest.State;
- import com.l2jserver.gameserver.util.Util;
- import com.l2jserver.util.Rnd;
- /**
- * A Game of Cards (662)
- * @author Zoey76
- */
- public final class Q00662_AGameOfCards extends Quest
- {
- // NPC
- private static final int KLUMP = 30845;
- // Items
- private static final int RED_GEM = 8765;
- private static final int ZIGGOS_GEMSTONE = 8868;
- // Misc
- private static final int MIN_LEVEL = 61;
- private static final int REQUIRED_CHIP_COUNT = 50;
- // Monsters
- private static final Map<Integer, Integer> MONSTERS = new HashMap<>();
-
- static
- {
- MONSTERS.put(20672, 357); // Trives
- MONSTERS.put(20673, 357); // Falibati
- MONSTERS.put(20674, 583); // Doom Knight
- MONSTERS.put(20677, 435); // Tulben
- MONSTERS.put(20955, 358); // Ghostly Warrior
- MONSTERS.put(20958, 283); // Death Agent
- MONSTERS.put(20959, 455); // Dark Guard
- MONSTERS.put(20961, 365); // Bloody Knight
- MONSTERS.put(20962, 348); // Bloody Priest
- MONSTERS.put(20965, 457); // Chimera Piece
- MONSTERS.put(20966, 493); // Changed Creation
- MONSTERS.put(20968, 418); // Nonexistent Man
- MONSTERS.put(20972, 350); // Shaman of Ancient Times
- MONSTERS.put(20973, 453); // Forgotten Ancient People
- MONSTERS.put(21002, 315); // Doom Scout
- MONSTERS.put(21004, 320); // Dismal Pole
- MONSTERS.put(21006, 335); // Doom Servant
- MONSTERS.put(21008, 462); // Doom Archer
- MONSTERS.put(21010, 397); // Doom Warrior
- MONSTERS.put(21109, 507); // Hames Orc Scout
- MONSTERS.put(21112, 552); // Hames Orc Footman
- MONSTERS.put(21114, 587); // Cursed Guardian
- MONSTERS.put(21116, 812); // Hames Orc Overlord
- MONSTERS.put(21278, 483); // Antelope
- MONSTERS.put(21279, 483); // Antelope
- MONSTERS.put(21280, 483); // Antelope
- MONSTERS.put(21286, 515); // Buffalo
- MONSTERS.put(21287, 515); // Buffalo
- MONSTERS.put(21288, 515); // Buffalo
- MONSTERS.put(21508, 493); // Splinter Stakato
- MONSTERS.put(21510, 527); // Splinter Stakato Soldier
- MONSTERS.put(21513, 562); // Needle Stakato
- MONSTERS.put(21515, 598); // Needle Stakato Soldier
- MONSTERS.put(21520, 458); // Eye of Splendor
- MONSTERS.put(21526, 552); // Wisdom of Splendor
- MONSTERS.put(21530, 488); // Victory of Splendor
- MONSTERS.put(21535, 573); // Signet of Splendor
- MONSTERS.put(18001, 232); // Blood Queen
- }
-
- public Q00662_AGameOfCards()
- {
- super(662, Q00662_AGameOfCards.class.getSimpleName(), "A Game of Cards");
- addStartNpc(KLUMP);
- addTalkId(KLUMP);
- addKillId(MONSTERS.keySet());
- }
-
- @Override
- public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
- {
- final QuestState st = getQuestState(player, false);
- String htmltext = null;
- if (st == null)
- {
- return htmltext;
- }
-
- switch (event)
- {
- case "30845-03.htm":
- {
- if (player.getLevel() >= MIN_LEVEL)
- {
- if (st.isCreated())
- {
- st.startQuest();
- }
- htmltext = event;
- }
- break;
- }
- case "30845-06.html":
- case "30845-08.html":
- case "30845-09.html":
- case "30845-09a.html":
- case "30845-09b.html":
- case "30845-10.html":
- {
- htmltext = event;
- break;
- }
- case "30845-07.html":
- {
- st.exitQuest(true, true);
- htmltext = event;
- break;
- }
- case "return":
- {
- htmltext = st.getQuestItemsCount(RED_GEM) < REQUIRED_CHIP_COUNT ? "30845-04.html" : "30845-05.html";
- break;
- }
- case "30845-11.html":
- {
- if (st.getQuestItemsCount(RED_GEM) >= REQUIRED_CHIP_COUNT)
- {
- int i1 = 0;
- int i2 = 0;
- int i3 = 0;
- int i4 = 0;
- int i5 = 0;
- while ((i1 == i2) || (i1 == i3) || (i1 == i4) || (i1 == i5) || (i2 == i3) || (i2 == i4) || (i2 == i5) || (i3 == i4) || (i3 == i5) || (i4 == i5))
- {
- i1 = getRandom(70) + 1;
- i2 = getRandom(70) + 1;
- i3 = getRandom(70) + 1;
- i4 = getRandom(70) + 1;
- i5 = getRandom(70) + 1;
- }
- if (i1 >= 57)
- {
- i1 = i1 - 56;
- }
- else if (i1 >= 43)
- {
- i1 = i1 - 42;
- }
- else if (i1 >= 29)
- {
- i1 = i1 - 28;
- }
- else if (i1 >= 15)
- {
- i1 = i1 - 14;
- }
- if (i2 >= 57)
- {
- i2 = i2 - 56;
- }
- else if (i2 >= 43)
- {
- i2 = i2 - 42;
- }
- else if (i2 >= 29)
- {
- i2 = i2 - 28;
- }
- else if (i2 >= 15)
- {
- i2 = i2 - 14;
- }
- if (i3 >= 57)
- {
- i3 = i3 - 56;
- }
- else if (i3 >= 43)
- {
- i3 = i3 - 42;
- }
- else if (i3 >= 29)
- {
- i3 = i3 - 28;
- }
- else if (i3 >= 15)
- {
- i3 = i3 - 14;
- }
- if (i4 >= 57)
- {
- i4 = i4 - 56;
- }
- else if (i4 >= 43)
- {
- i4 = i4 - 42;
- }
- else if (i4 >= 29)
- {
- i4 = i4 - 28;
- }
- else if (i4 >= 15)
- {
- i4 = i4 - 14;
- }
- if (i5 >= 57)
- {
- i5 = i5 - 56;
- }
- else if (i5 >= 43)
- {
- i5 = i5 - 42;
- }
- else if (i5 >= 29)
- {
- i5 = i5 - 28;
- }
- else if (i5 >= 15)
- {
- i5 = i5 - 14;
- }
- st.set("v1", (i4 * 1000000) + (i3 * 10000) + (i2 * 100) + i1);
- st.set("ExMemoState", i5);
- st.takeItems(RED_GEM, REQUIRED_CHIP_COUNT);
- htmltext = event;
- }
- break;
- }
- case "turncard1":
- case "turncard2":
- case "turncard3":
- case "turncard4":
- case "turncard5":
- {
- final int cond = st.getInt("v1");
- int i1 = st.getInt("ExMemoState");
- int i5 = i1 % 100;
- int i9 = i1 / 100;
- i1 = cond % 100;
- int i2 = (cond % 10000) / 100;
- int i3 = (cond % 1000000) / 10000;
- int i4 = (cond % 100000000) / 1000000;
- switch (event)
- {
- case "turncard1":
- {
- if ((i9 % 2) < 1)
- {
- i9 = i9 + 1;
- }
- if ((i9 % 32) < 31)
- {
- st.set("ExMemoState", (i9 * 100) + i5);
- }
- break;
- }
- case "turncard2":
- {
- if ((i9 % 4) < 2)
- {
- i9 = i9 + 2;
- }
- if ((i9 % 32) < 31)
- {
- st.set("ExMemoState", (i9 * 100) + i5);
- }
- break;
- }
- case "turncard3":
- {
- if ((i9 % 8) < 4)
- {
- i9 = i9 + 4;
- }
- if ((i9 % 32) < 31)
- {
- st.set("ExMemoState", (i9 * 100) + i5);
- }
- break;
- }
- case "turncard4":
- {
- if ((i9 % 16) < 8)
- {
- i9 = i9 + 8;
- }
- if ((i9 % 32) < 31)
- {
- st.set("ExMemoState", (i9 * 100) + i5);
- }
- break;
- }
- case "turncard5":
- {
- if ((i9 % 32) < 16)
- {
- i9 = i9 + 16;
- }
- if ((i9 % 32) < 31)
- {
- st.set("ExMemoState", (i9 * 100) + i5);
- }
- break;
- }
- }
-
- if ((i9 % 32) < 31)
- {
- htmltext = getHtm(player.getHtmlPrefix(), "30845-12.html");
- }
- else if ((i9 % 32) == 31)
- {
- int i6 = 0;
- int i8 = 0;
- if ((i1 >= 1) && (i1 <= 14) && (i2 >= 1) && (i2 <= 14) && (i3 >= 1) && (i3 <= 14) && (i4 >= 1) && (i4 <= 14) && (i5 >= 1) && (i5 <= 14))
- {
- if (i1 == i2)
- {
- i6 = i6 + 10;
- i8 = i8 + 8;
- }
- if (i1 == i3)
- {
- i6 = i6 + 10;
- i8 = i8 + 4;
- }
- if (i1 == i4)
- {
- i6 = i6 + 10;
- i8 = i8 + 2;
- }
- if (i1 == i5)
- {
- i6 = i6 + 10;
- i8 = i8 + 1;
- }
- if ((i6 % 100) < 10)
- {
- if ((i8 % 16) < 8)
- {
- if ((i8 % 8) < 4)
- {
- if (i2 == i3)
- {
- i6 = i6 + 10;
- i8 = i8 + 4;
- }
- }
- if ((i8 % 4) < 2)
- {
- if (i2 == i4)
- {
- i6 = i6 + 10;
- i8 = i8 + 2;
- }
- }
- if ((i8 % 2) < 1)
- {
- if (i2 == i5)
- {
- i6 = i6 + 10;
- i8 = i8 + 1;
- }
- }
- }
- }
- else if ((i6 % 10) == 0)
- {
- if ((i8 % 16) < 8)
- {
- if ((i8 % 8) < 4)
- {
- if (i2 == i3)
- {
- i6 = i6 + 1;
- i8 = i8 + 4;
- }
- }
- if ((i8 % 4) < 2)
- {
- if (i2 == i4)
- {
- i6 = i6 + 1;
- i8 = i8 + 2;
- }
- }
- if ((i8 % 2) < 1)
- {
- if (i2 == i5)
- {
- i6 = i6 + 1;
- i8 = i8 + 1;
- }
- }
- }
- }
- if ((i6 % 100) < 10)
- {
- if ((i8 % 8) < 4)
- {
- if ((i8 % 4) < 2)
- {
- if (i3 == i4)
- {
- i6 = i6 + 10;
- i8 = i8 + 2;
- }
- }
- if ((i8 % 2) < 1)
- {
- if (i3 == i5)
- {
- i6 = i6 + 10;
- i8 = i8 + 1;
- }
- }
- }
- }
- else if ((i6 % 10) == 0)
- {
- if ((i8 % 8) < 4)
- {
- if ((i8 % 4) < 2)
- {
- if (i3 == i4)
- {
- i6 = i6 + 1;
- i8 = i8 + 2;
- }
- }
- if ((i8 % 2) < 1)
- {
- if (i3 == i5)
- {
- i6 = i6 + 1;
- i8 = i8 + 1;
- }
- }
- }
- }
- if ((i6 % 100) < 10)
- {
- if ((i8 % 4) < 2)
- {
- if ((i8 % 2) < 1)
- {
- if (i4 == i5)
- {
- i6 = i6 + 10;
- i8 = i8 + 1;
- }
- }
- }
- }
- else if ((i6 % 10) == 0)
- {
- if ((i8 % 4) < 2)
- {
- if ((i8 % 2) < 1)
- {
- if (i4 == i5)
- {
- i6 = i6 + 1;
- i8 = i8 + 1;
- }
- }
- }
- }
- }
-
- if (i6 == 40)
- {
- rewardItems(player, ZIGGOS_GEMSTONE, 43);
- rewardItems(player, 959, 3);
- rewardItems(player, 729, 1);
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-13.html");
- }
- else if (i6 == 30)
- {
- rewardItems(player, 959, 2);
- rewardItems(player, 951, 2);
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-14.html");
- }
- else if ((i6 == 21) || (i6 == 12))
- {
- rewardItems(player, 729, 1);
- rewardItems(player, 947, 2);
- rewardItems(player, 955, 1);
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-15.html");
- }
- else if (i6 == 20)
- {
- rewardItems(player, 951, 2);
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-16.html");
- }
- else if (i6 == 11)
- {
- rewardItems(player, 951, 1);
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-17.html");
- }
- else if (i6 == 10)
- {
- rewardItems(player, 956, 2);
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-18.html");
- }
- else if (i6 == 0)
- {
- st.set("ExMemoState", 0);
- st.set("v1", 0);
- htmltext = getHtm(player.getHtmlPrefix(), "30845-19.html");
- }
- }
-
- if (htmltext != null)
- {
- if ((i9 % 2) < 1)
- {
- htmltext = htmltext.replaceAll("FontColor1", "FFFF00");
- htmltext = htmltext.replaceAll("Cell1", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor1", "FF6F6F");
- htmltext = setHtml(htmltext, i1, "Cell1");
- }
- if ((i9 % 4) < 2)
- {
- htmltext = htmltext.replaceAll("FontColor2", "FFFF00");
- htmltext = htmltext.replaceAll("Cell2", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor2", "FF6F6F");
- htmltext = setHtml(htmltext, i2, "Cell2");
- }
- if ((i9 % 8) < 4)
- {
- htmltext = htmltext.replaceAll("FontColor3", "FFFF00");
- htmltext = htmltext.replaceAll("Cell3", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor3", "FF6F6F");
- htmltext = setHtml(htmltext, i3, "Cell3");
- }
- if ((i9 % 16) < 8)
- {
- htmltext = htmltext.replaceAll("FontColor4", "FFFF00");
- htmltext = htmltext.replaceAll("Cell4", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor4", "FF6F6F");
- htmltext = setHtml(htmltext, i4, "Cell4");
- }
- if ((i9 % 32) < 16)
- {
- htmltext = htmltext.replaceAll("FontColor5", "FFFF00");
- htmltext = htmltext.replaceAll("Cell5", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor5", "FF6F6F");
- htmltext = setHtml(htmltext, i5, "Cell5");
- }
- }
- break;
- }
- case "playagain":
- {
- htmltext = st.getQuestItemsCount(RED_GEM) < REQUIRED_CHIP_COUNT ? "30845-21.html" : "30845-20.html";
- break;
- }
- }
- return htmltext;
- }
-
- @Override
- public String onTalk(L2Npc npc, L2PcInstance player)
- {
- final QuestState st = getQuestState(player, true);
- String htmltext = getNoQuestMsg(player);
- if (st == null)
- {
- return htmltext;
- }
-
- switch (st.getState())
- {
- case State.CREATED:
- {
- htmltext = player.getLevel() < MIN_LEVEL ? "30845-02.html" : "30845-01.htm";
- break;
- }
- case State.STARTED:
- {
- if (st.isCond(1))
- {
- htmltext = st.getQuestItemsCount(RED_GEM) < REQUIRED_CHIP_COUNT ? "30845-04.html" : "30845-05.html";
- }
- else if (st.getInt("ExMemoState") != 0)
- {
- int i0 = st.getInt("v1");
- int i1 = st.getInt("ExMemoState");
- int i5 = i1 % 100;
- int i9 = i1 / 100;
- i1 = i0 % 100;
- int i2 = (i0 % 10000) / 100;
- int i3 = (i0 % 1000000) / 10000;
- int i4 = (i0 % 100000000) / 1000000;
- htmltext = getHtm(player.getHtmlPrefix(), "30845-11a.html");
-
- if ((i9 % 2) < 1)
- {
- htmltext = htmltext.replaceAll("FontColor1", "FFFF00");
- htmltext = htmltext.replaceAll("Cell1", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor1", "FF6F6F");
- htmltext = setHtml(htmltext, i1, "Cell1");
- }
-
- if ((i9 % 4) < 2)
- {
- htmltext = htmltext.replaceAll("FontColor2", "FFFF00");
- htmltext = htmltext.replaceAll("Cell2", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor2", "FF6F6F");
- htmltext = setHtml(htmltext, i2, "Cell2");
- }
-
- if ((i9 % 8) < 4)
- {
- htmltext = htmltext.replaceAll("FontColor3", "FFFF00");
- htmltext = htmltext.replaceAll("Cell3", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor3", "FF6F6F");
- htmltext = setHtml(htmltext, i3, "Cell3");
- }
- if ((i9 % 16) < 8)
- {
- htmltext = htmltext.replaceAll("FontColor4", "FFFF00");
- htmltext = htmltext.replaceAll("Cell4", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor4", "FF6F6F");
- htmltext = setHtml(htmltext, i4, "Cell4");
- }
- if ((i9 % 32) < 16)
- {
- htmltext = htmltext.replaceAll("FontColor5", "FFFF00");
- htmltext = htmltext.replaceAll("Cell5", "?");
- }
- else
- {
- htmltext = htmltext.replaceAll("FontColor5", "FF6F6F");
- htmltext = setHtml(htmltext, i5, "Cell5");
- }
- }
- break;
- }
- case State.COMPLETED:
- {
- htmltext = getAlreadyCompletedMsg(player);
- break;
- }
- }
- return htmltext;
- }
-
- @Override
- public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
- {
- final List<L2PcInstance> players = new ArrayList<>();
- players.add(killer);
- players.add(killer);
-
- if (killer.isInParty())
- {
- for (L2PcInstance member : killer.getParty().getMembers())
- {
- if (getQuestState(member, false) != null)
- {
- players.add(member);
- }
- }
- }
-
- final L2PcInstance player = players.get(Rnd.get(players.size()));
- if ((player != null) && Util.checkIfInRange(1500, npc, player, false))
- {
- if (MONSTERS.get(npc.getId()) < getRandom(1000))
- {
- final QuestState st = getQuestState(player, false);
- if (st != null)
- {
- giveItemRandomly(st.getPlayer(), npc, RED_GEM, 1, 0, MONSTERS.get(npc.getId()), true);
- }
- }
- }
- return super.onKill(npc, killer, isSummon);
- }
-
- private static String setHtml(String htmltext, int var, String regex)
- {
- String replacement = null;
- switch (var)
- {
- case 1:
- {
- replacement = "!";
- break;
- }
- case 2:
- {
- replacement = "=";
- break;
- }
- case 3:
- {
- replacement = "T";
- break;
- }
- case 4:
- {
- replacement = "V";
- break;
- }
- case 5:
- {
- replacement = "O";
- break;
- }
- case 6:
- {
- replacement = "P";
- break;
- }
- case 7:
- {
- replacement = "S";
- break;
- }
- case 8:
- {
- replacement = "E";
- break;
- }
- case 9:
- {
- replacement = "H";
- break;
- }
- case 10:
- {
- replacement = "A";
- break;
- }
- case 11:
- {
- replacement = "R";
- break;
- }
- case 12:
- {
- replacement = "D";
- break;
- }
- case 13:
- {
- replacement = "I";
- break;
- }
- case 14:
- {
- replacement = "N";
- break;
- }
- default:
- {
- replacement = "ERROR";
- break;
- }
- }
- return htmltext.replaceAll(regex, replacement);
- }
- }
|