/*
* 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 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 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 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);
}
}