/*
 * 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.SquashEvent;

import java.util.Arrays;
import java.util.Comparator;

import javolution.util.FastMap;

import com.l2jserver.gameserver.instancemanager.QuestManager;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.L2Skill;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2ChronoMonsterInstance;
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.network.clientpackets.Say2;
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
import com.l2jserver.gameserver.templates.item.L2Weapon;
import com.l2jserver.util.Rnd;

/**
 * @author Gnacik
 * @version 1.0
 * @see Warning! Mostly that event is custom!
 */
public class SquashEvent extends Quest
{
	private static final String qn = "SquashEvent";

	private static final int MANAGER = 31860;

	private static final int NECTAR_SKILL = 2005;

	private static final long DESPAWN_FIRST = 180000;
	private static final long DESPAWN_NEXT = 90000;

	private static final int DAMAGE_MAX = 12;
	private static final int DAMAGE_DEFAULT = 5;

	private static final int[] CHRONO_LIST = {
		4202,5133,5817,7058,8350
	};

	private static final int[] SQUASH_LIST = {
		12774,12775,12776,
		12777,12778,12779,
		13016,13017
	};

	private static final String[] SPAWN_TEXT = {
		"フフッ、俺を呼んだか？",
		"さあ、俺を信じてネクターをかけてみな！",
		"呼んだか？何で俺を呼んだんだ？何か貰えるとでも思ったのか？",
		"ウケケケッ、よく育てたら、儲かりもの〜。ダメだったら？それは俺も知らない〜。",
		"ポモナはネクターとアナタの愛で育ちます！",
		"エッヘン！さあ、お出ましだ！仕えてみよ！！",
		"さあ、早く育ててみろ！上手くいけば大当たり、ダメだったらハズレ〜！",
	};
	private static final String[] GROWUP_TEXT = {
		"考えるな！無心で殴れ！殴るのだ！！！",
		"よく育ったぞ！さあ、逃げるか〜。",
		"やれるもんならやってみろ！",
	};
	private static final String[] KILL_TEXT = {
		"大当たり祈願！！",
		"ハズレになれ！",
		"ゴミが出ろ！",
		"俺の死を無駄にするなよ！",
		"あ〜、凄くよかったの〜！満足なの〜、これでまた転生することができるかな？お礼としてこれあげるね。",
		"うあ！割れた！中身が中身が〜〜〜〜。",
		"クアアアッ！悔しい！逃げることもできたのに．．．！",
	};

	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 = {
		"すっかりノッてきたな！すごくいいぞ！",
		"う〜ん．．．なんてステキなハーモニー、ラララ〜",
		"うんうん〜。ずっと聞いていたい音ですね〜",
		"そうそう！やっぱりこの音でないとね！",
		"うわぁ！とってもステキな音色〜！！",
		"いい気分〜、もう少し聞かせてくれ！",
		"ああ〜体がムズムズして割れそうだ！",
		"あぁ、すっごく良い音色ね！",
		"うー！ポモナが壊れる〜！！",
		"お、いい音だな？",
		"素晴らしいサウンドだな！",
		"素晴らしいサウンドだ！ノッてきたぞ！",
		"お、この和音！もう最高だぜ！もっと聞かせてくれ！",
		"クロノのサウンドに惹かれるこの心！",
		"楽器は良い物だが、歌が無いな。俺が歌ってやろうか？",
		"ねぇ、ねぇ、一曲歌ってもいい？",
		"これだこれ！このサウンドが聴きたかったんだ！お前、ミュージシャンになってみないか？",
		"和音をちゃんと合わせてみろ！今違ったぞ！",
		"ああ〜、体がムズムズしてきたわ！",
		"アタシとの思い出、大切にしてね〜。",
		"あ？今俺を殴ったのか？本気で俺を殴ったな！",
		"そろそろ力が出てきたぞ。30秒あれば逃げられそうだ！",
	//	"Arghh... Chrono weapon...",
	//	"My end is coming...",
	//	"Please leave me !",
	//	"Heeellpppp...",
	//	"Somebody help me please..."
	};
	private static final String[] NECTAR_TEXT = {
		"もっとだ！もっと欲しいんだ！！",
		"おい！そこじゃない！ここだ、ここ！俺が未熟だからってからかっているのか？",
		"こらっ！ちゃんとやれよ！こぼれてるじゃないか！",
		"おお、良いぞ〜。もっとくれ。だんだん良くなってきたぞ〜。",
		"ムラムラ！大きくなれ、強くなれ！",
		"ムラムラ！俺の美しい姿を見たいのか！？",
		"今、別のこと考えてたでしょ？そんなんじゃ、アナタの愛はアタシに伝わってこないの！もっと愛して！",
		"アナタの愛が感じられないの！これじゃ、アタシ萎えちゃうよ！",
		"あっ．．．熱いものが全身を駆け巡るの！",
		"ちょっとぉ、アナタの愛ってその程度のものなの〜？",
		"おい、俺がこのまま死んじまったらアイテムは出ないんだぞ！そんなにネクターが勿体無いのか？",
		"やはりネクターは、ポモナのネクターが最高だ！ウヘヘヘ！",
		"御主人様、私を助けて下され〜。ネクターを一回も飲めずに死んでしまうなんて生き地獄だ〜。",
		"おい、これ水で薄めたのか？何だこの味は？",
		"ウェッ、ペッペッ！何だこれは！これが本当にネクターだというのか？",
	//	"Yummy... Nectar...",
	//	"Plase give me more...",
	//	"Hmmm.. More.. I need more...",
	//	"I will like you more if you give me more...",
	//	"Hmmmmmmm...",
	//	"My favourite..."
	};

	private static final int[][] DROPLIST =
	{
		// <DEL>must be sorted by npcId !</DEL>
		// npcId, chance, itemId,qty [,itemId,qty...]

		// Young Squash
		{ 12774,100,  6391,2 },		// Nectar

		// Low Quality Squash
		{ 12776,100,  6391,50 },	// Nectar

		// High Quality Squash
		{ 12775,100,  6391,100 },	// Nectar

		// King
		{ 13016,100,  6391,150 },	// Nectar

		// Large Young Squash
		{ 12777,100, 14701,2,		//超強力瞬間体力回復剤
					 14700,2 },		//超強力体力回復剤

		// Low Quality Large
		{ 12779, 50,   729,4,		//武器強化スクロール：Aグレード
					   730,4,		//防具強化スクロール：Aグレード
					  6569,2,		//祝福された武器強化スクロール：Aグレード
					  6570,2 },		//祝福された防具強化スクロール：Aグレード
		{ 12779, 30,  6622,1 },		//下巨人の秘伝書
		{ 12779, 10,  8750,1 },		//上級 生命の石：レベル67
		{ 12779, 10,  8751,1 },		//上級 生命の石：レベル70
		{ 12779, 99, 14701,4,		//超強力瞬間体力回復剤
					 14700,4 },		//超強力体力回復剤
		{ 12779, 50,  1461,4 },		//クリスタル：Aグレード
		{ 12779, 30,  1462,3 },		//クリスタル：Sグレード
		{ 12779, 50,  2133,4 },		//ジェムストーン：Aグレード
		{ 12779, 30,  2134,3 },		//ジェムストーン：Sグレード

		// High Quality Large
		{ 12778,  7,  9570,1,		//レッド ソウル ストーン：ステップ14
					  9571,1,		//ブルー ソウル ストーン：ステップ14
					  9572,1,		//グリーン ソウル ストーン：ステップ14
					 10480,1,		//レッド ソウル ストーン：ステップ15
					 10481,1,		//ブルー ソウル ストーン：ステップ15
					 10482,1,		//グリーン ソウル ストーン：ステップ15
					 13071,1,		//レッド ソウル ストーン：ステップ16
					 13072,1,		//ブルー ソウル ストーン：ステップ16
					 13073,1 },		//グリーン ソウル ストーン：ステップ16
		{ 12778, 35,   729,4,		//武器強化スクロール：Aグレード
					   730,4,		//防具強化スクロール：Aグレード
					   959,3,		//武器強化スクロール：Sグレード
					   960,3,		//防具強化スクロール：Sグレード
					  6569,2,		//祝福された武器強化スクロール：Aグレード
					  6570,2,		//祝福された防具強化スクロール：Aグレード
					  6577,1,		//祝福された武器強化スクロール：Sグレード
					  6578,1 },		//祝福された防具強化スクロール：Sグレード
		{ 12778, 28,  6622,3,		//下巨人の秘伝書
					  9625,2,		//下巨人の秘伝書：忘却編
					  9626,2,		//下巨人の秘伝書：修練編
					  9627,2 },		//下巨人の秘伝書：熟練編
		{ 12778, 14,  8750,10 },	//上級 生命の石：レベル67
		{ 12778, 14,  8751,8 },		//上級 生命の石：レベル70
		{ 12778, 14,  8752,6 },		//上級 生命の石：レベル76
		{ 12778, 14,  9575,4 },		//上級 生命の石：レベル80
		{ 12778, 14, 10485,2 },		//上級 生命の石：レベル82
		{ 12778, 14, 14168,1 },		//上級生命の石：レベル84
		{ 12778, 21,  8760,1,		//最上級生命の石：レベル67
					  8761,1,		//最上級生命の石：レベル70
					  8762,1,		//最上級生命の石：レベル76
					  9576,1,		//最上級生命の石：レベル80
					 10486,1,		//最上級生命の石：レベル82
					 14169,1 },		//最上級生命の石：レベル84
		{ 12778, 21, 14683,1,		//強力生命の秘薬：Ｄグレード
					 14684,1,		//強力生命の秘薬：Cグレード
					 14685,1,		//強力生命の秘薬：Bグレード
					 14686,1,		//強力生命の秘薬：Aグレード
					 14687,1,		//強力生命の秘薬：Sグレード
					 14689,1,		//強力精神の秘薬：Ｄグレード
					 14690,1,		//強力精神の秘薬：Cグレード
					 14691,1,		//強力精神の秘薬：Bグレード
					 14692,1,		//強力精神の秘薬：Aグレード
					 14693,1,		//強力精神の秘薬：Sグレード
					 14695,1,		//強力闘志の秘薬：Ｄグレード
					 14696,1,		//強力闘志の秘薬：Cグレード
					 14697,1,		//強力闘志の秘薬：Bグレード
					 14698,1,		//強力闘志の秘薬：Aグレード
					 14699,1 },		//強力闘志の秘薬：Sグレード
		{ 12778, 99, 14701,9,		//超強力瞬間体力回復剤
					 14700,9 },		//超強力体力回復剤
		{ 12778, 63,  1461,8 },		//クリスタル：Aグレード
		{ 12778, 49,  1462,5 },		//クリスタル：Sグレード
		{ 12778, 63,  2133,6 },		//ジェムストーン：Aグレード
		{ 12778, 49,  2134,4 },		//ジェムストーン：Sグレード

		// Emperor
		{ 13017, 10,  9570,1,		//レッド ソウル ストーン：ステップ14
					  9571,1,		//ブルー ソウル ストーン：ステップ14
					  9572,1,		//グリーン ソウル ストーン：ステップ14
					 10480,1,		//レッド ソウル ストーン：ステップ15
					 10481,1,		//ブルー ソウル ストーン：ステップ15
					 10482,1,		//グリーン ソウル ストーン：ステップ15
					 13071,1,		//レッド ソウル ストーン：ステップ16
					 13072,1,		//ブルー ソウル ストーン：ステップ16
					 13073,1 },		//グリーン ソウル ストーン：ステップ16
		{ 13017, 50,   729,4,		//武器強化スクロール：Aグレード
					   730,4,		//防具強化スクロール：Aグレード
					   959,3,		//武器強化スクロール：Sグレード
					   960,3,		//防具強化スクロール：Sグレード
					  6569,2,		//祝福された武器強化スクロール：Aグレード
					  6570,2,		//祝福された防具強化スクロール：Aグレード
					  6577,1,		//祝福された武器強化スクロール：Sグレード
					  6578,1 },		//祝福された防具強化スクロール：Sグレード
		{ 13017, 40,  6622,3,		//下巨人の秘伝書
					  9625,2,		//下巨人の秘伝書：忘却編
					  9626,2,		//下巨人の秘伝書：修練編
					  9627,2 },		//下巨人の秘伝書：熟練編
		{ 13017, 20,  8750,10 },	//上級 生命の石：レベル67
		{ 13017, 20,  8751,8 },		//上級 生命の石：レベル70
		{ 13017, 20,  8752,6 },		//上級 生命の石：レベル76
		{ 13017, 20,  9575,4 },		//上級 生命の石：レベル80
		{ 13017, 20, 10485,2 },		//上級 生命の石：レベル82
		{ 13017, 20, 14168,1 },		//上級生命の石：レベル84
		{ 13017, 30,  8760,1,		//最上級生命の石：レベル67
					  8761,1,		//最上級生命の石：レベル70
					  8762,1,		//最上級生命の石：レベル76
					  9576,1,		//最上級生命の石：レベル80
					 10486,1,		//最上級生命の石：レベル82
					 14169,1 },		//最上級生命の石：レベル84
		{ 13017, 30, 14683,1,		//強力生命の秘薬：Ｄグレード
					 14684,1,		//強力生命の秘薬：Cグレード
					 14685,1,		//強力生命の秘薬：Bグレード
					 14686,1,		//強力生命の秘薬：Aグレード
					 14687,1,		//強力生命の秘薬：Sグレード
					 14689,1,		//強力精神の秘薬：Ｄグレード
					 14690,1,		//強力精神の秘薬：Cグレード
					 14691,1,		//強力精神の秘薬：Bグレード
					 14692,1,		//強力精神の秘薬：Aグレード
					 14693,1,		//強力精神の秘薬：Sグレード
					 14695,1,		//強力闘志の秘薬：Ｄグレード
					 14696,1,		//強力闘志の秘薬：Cグレード
					 14697,1,		//強力闘志の秘薬：Bグレード
					 14698,1,		//強力闘志の秘薬：Aグレード
					 14699,1 },		//強力闘志の秘薬：Sグレード
		{ 13017, 99, 14701,12,		//超強力瞬間体力回復剤
					 14700,12 },	//超強力体力回復剤
		{ 13017, 90,  1461,8 },		//クリスタル：Aグレード
		{ 13017, 70,  1462,5 },		//クリスタル：Sグレード
		{ 13017, 90,  2133,6 },		//ジェムストーン：Aグレード
		{ 13017, 70,  2134,4 },		//ジェムストーン：Sグレード
	};

	class TheInstance
	{
		int nectar;
	//	int numatk;
	//	int tmpatk;
		long despawnTime;
	}
	FastMap<L2ChronoMonsterInstance, TheInstance> _monsterInstances = new FastMap<L2ChronoMonsterInstance, TheInstance>().shared();
	private TheInstance create(L2ChronoMonsterInstance mob)
	{
		TheInstance mons = new TheInstance();
		_monsterInstances.put(mob, mons);
		return mons;
	}
	private TheInstance get(L2ChronoMonsterInstance mob)
	{
		return _monsterInstances.get(mob);
	}
	private void remove(L2ChronoMonsterInstance mob)
	{
		cancelQuestTimer("countdown", mob, null);
		cancelQuestTimer("despawn", mob, null);
		_monsterInstances.remove(mob);
	}

	@Override
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		if (event == "countdown")
		{
			final L2ChronoMonsterInstance mob = (L2ChronoMonsterInstance)npc;
			final TheInstance self = get(mob);
			int timeLeft = (int)((self.despawnTime - System.currentTimeMillis()) / 1000);
			if (timeLeft == 30)
				autoChat(mob, "30秒たったら、お前ともオサラバだ！");
			else if (timeLeft == 20)
				autoChat(mob, "20秒たったら、お前ともオサラバだ！");
			else if (timeLeft == 10)
				autoChat(mob, "ああ、残り10秒！9...8...7...");
			else if (timeLeft == 0)
			{
				if (self.nectar == 0)
					autoChat(mob, "このままだとアタシ、生まれた意味も無く、しおれるしかないのね。すっごく悲しい．．．");
				else
					autoChat(mob, "よく育ったぞ！さあ、逃げるか〜。");
			}
			else if ((timeLeft % 60) == 0)
			{
				if (self.nectar == 0)
					autoChat(mob, "ネクターをくれなかったら"+timeLeft/60+"分後に帰るぞっ！");
			}
		}
		else if (event == "despawn")
		{
			remove((L2ChronoMonsterInstance)npc);
			npc.deleteMe();
		}
		else
			return super.onAdvEvent(event, npc, player);
		return null;
	}

	@Override
	public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
	{
		final L2ChronoMonsterInstance mob = (L2ChronoMonsterInstance)npc;
		L2Weapon weapon;
		final boolean isChronoAttack
			= !isPet
			&& (weapon = attacker.getActiveWeaponItem()) != null && contains(CHRONO_LIST, weapon.getItemId());
		switch (mob.getNpcId())
		{
			case 12774:
			case 12775:
			case 12776:
			case 13016:
				if (isChronoAttack)
				{
					chronoText(mob);
				}
				else
				{
					noChronoText(mob);
				}
				break;
			case 12777:
			case 12778:
			case 12779:
			case 13017:
				if (isChronoAttack)
				{
					mob.setIsInvul(false);
					if (damage == 0)
						mob.getStatus().reduceHp(DAMAGE_DEFAULT, attacker);
					else if (damage > DAMAGE_MAX)
						mob.getStatus().setCurrentHp(mob.getStatus().getCurrentHp() + damage - DAMAGE_MAX);
					chronoText(mob);
				}
				else
				{
					mob.setIsInvul(true);
					mob.setCurrentHp(mob.getMaxHp());
					noChronoText(mob);
				}
				break;
			default:
				throw new RuntimeException();
		}
		mob.getStatus().stopHpMpRegeneration();
		return super.onAttack(npc, attacker, damage, isPet);
	}

	@Override
	public String onSkillSee(L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet)
	{
		if (skill.getId() == NECTAR_SKILL && targets[0] == npc)
		{
			final L2ChronoMonsterInstance mob = (L2ChronoMonsterInstance)npc;
			switch(mob.getNpcId())
			{
				case 12774:
					randomSpawn(12776, 12775, 13016, mob);
					break;
				case 12777:
					randomSpawn(12779, 12778, 13017, mob);
					break;
				case 12775:
					randomSpawn(13016, mob);
					break;
				case 12778:
					randomSpawn(13017, mob);
					break;
				case 12776:
				case 12779:
					autoChat(mob, "ゴミが出ろ！");
					break;
			}
		}
		return null;
	//	return super.onSkillSee(npc,caster,skill,targets,isPet);
	}

	@Override
	public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
	{
		final L2ChronoMonsterInstance mob = (L2ChronoMonsterInstance)npc;
		remove(mob);
		autoChat(mob, KILL_TEXT[Rnd.get(KILL_TEXT.length)]);
		dropItem(mob, killer);
		return super.onKill(npc, killer, isPet);
	}

	@Override
	public String onSpawn(L2Npc npc)
	{
		assert npc instanceof L2ChronoMonsterInstance;
		
		final L2ChronoMonsterInstance mob = (L2ChronoMonsterInstance)npc;
		mob.setOnKillDelay(1500);	//Default 5000ms.
		final TheInstance self = create(mob);
		switch(mob.getNpcId())
		{
			case 12774:
			case 12777:
				npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.ALL, npc.getName(), SPAWN_TEXT[Rnd.get(SPAWN_TEXT.length)]));
				startQuestTimer("countdown", 10000, mob, null, true);
				startQuestTimer("despawn", DESPAWN_FIRST, mob, null);
				self.nectar = 0;
				self.despawnTime = System.currentTimeMillis() + DESPAWN_FIRST;
				autoChat(mob, SPAWN_TEXT[Rnd.get(SPAWN_TEXT.length)]);
				break;
			case 12775:
			case 12776:
			case 12778:
			case 12779:
			case 13016:
			case 13017:
				startQuestTimer("countdown", 10000, mob, null, true);
				startQuestTimer("despawn", DESPAWN_NEXT, mob, null);
				self.nectar = 5;
				self.despawnTime = System.currentTimeMillis() + DESPAWN_NEXT;
				autoChat(mob, GROWUP_TEXT[Rnd.get(GROWUP_TEXT.length)]);
				break;
			default:
				throw new RuntimeException();
		}
		return null;
		// return super.onSpawn(npc);
	}

	static {
		Arrays.sort(DROPLIST, new Comparator<int[]>() {
			public int compare(int[] a, int[] b) { return a[0] - b[0]; }
		});
	}
	private static final void dropItem(L2ChronoMonsterInstance mob, L2PcInstance player)
	{
		final int npcId = mob.getNpcId();
		for (int[] drop : DROPLIST)
		{
			// npcId   = drop[0]
			// chance  = drop[1]
			// itemId  = drop[2,4,6,8...]
			// itemQty = drop[3,5,7,9...]
			if (npcId == drop[0])
			{
				final int chance = Rnd.get(100);
				if (chance < drop[1])
				{
					int i = 2 + 2 * Rnd.get((drop.length - 2) / 2);
					int itemId = drop[i + 0];
					int itemQty = drop[i + 1];
					if (itemQty > 1) itemQty = Rnd.get(1, itemQty);
					mob.dropItem(mob.getOwner(), itemId, itemQty);
					continue;
				}
			}
			if (npcId < drop[0])
				return; // not found
		}
	}

	private void randomSpawn(int bad, int good, int king, L2ChronoMonsterInstance mob)
	{
		final TheInstance self = get(mob);
		if (++self.nectar == 5)
		{
			int _random = Rnd.get(100);
			if ((_random -= 10) < 0)		// 10% 幼い→超良質な
				spawnNext(king, mob);
			else if ((_random -= 40) < 0)	// 40% 幼い→良質な
				spawnNext(good, mob);
			else							// 50% 幼い→不良な
				spawnNext(bad, mob);
		}
		else
		{
			nectarText(mob);
		}
	}

	private void randomSpawn(int king, L2ChronoMonsterInstance mob)
	{
		final TheInstance self = get(mob);
		if (++self.nectar > 5 && self.nectar <= 15 && Rnd.get(100) < 10)	// 10% 良質な→超良質な
			spawnNext(king, mob);
		else
			nectarText(mob);
	}

	private void autoChat(L2ChronoMonsterInstance mob, String text)
	{
		mob.broadcastPacket(new CreatureSay(mob.getObjectId(), Say2.ALL, mob.getName(), text));
	}
	private void chronoText(L2ChronoMonsterInstance mob)
	{
		if (Rnd.get(100) < 20)
			autoChat(mob, CHRONO_TEXT[Rnd.get(CHRONO_TEXT.length)]);
	}
	private void noChronoText(L2ChronoMonsterInstance mob)
	{
		if (Rnd.get(100) < 20)
			autoChat(mob, NOCHRONO_TEXT[Rnd.get(NOCHRONO_TEXT.length)]);
	}
	private void nectarText(L2ChronoMonsterInstance npc)
	{
	/*	if (Rnd.get(100) < 30)	*/
		autoChat(npc, NECTAR_TEXT[Rnd.get(NECTAR_TEXT.length)]);
	}

	private void spawnNext(int npcId, L2ChronoMonsterInstance oldMob)
	{
		remove(oldMob);
		L2ChronoMonsterInstance newMob = (L2ChronoMonsterInstance)addSpawn(npcId, oldMob.getX(), oldMob.getY(), oldMob.getZ(), oldMob.getHeading(), false, 0);
		newMob.setOwner(oldMob.getOwner());
		newMob.setTitle(oldMob.getTitle());
		oldMob.deleteMe();
	}

	public static <T> boolean contains(T[] array, T obj)
	{
		for (int i = 0; i < array.length; i++)
		{
			if (array[i] == obj)
			{
				return true;
			}
		}
		return false;
	}

	public static boolean contains(int[] array, int obj)
	{
		for (int i = 0; i < array.length; i++)
		{
			if (array[i] == obj)
			{
				return true;
			}
		}
		return false;
	}

	public SquashEvent(int questId, String name, String descr)
	{
		super(questId, name, descr);

		for (int mob : SQUASH_LIST)
		{
			addAttackId(mob);
			addKillId(mob);
			addSpawnId(mob);
			addSkillSeeId(mob);
		}

		addStartNpc(MANAGER);
		addFirstTalkId(MANAGER);
		addTalkId(MANAGER);
	}

	@Override
	public String onFirstTalk(L2Npc npc, L2PcInstance player)
	{
//		String htmltext = "";
		QuestState st = player.getQuestState(getName());
		if (st == null)
		{
			Quest q = QuestManager.getInstance().getQuest(getName());
			st = q.newQuestState(player);
		}
		switch (npc.getNpcId())
		{
			case MANAGER: return "31860.htm";
		}
		throw new RuntimeException();
	}

	@Override
	public String onEvent(String event, QuestState qs)
	{
		// 31860-1.htm
		return event;
	}

	public static void main(String[] args)
	{
		new SquashEvent(-1, qn, "events");
	}
}