<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Comunidad EliteZone</title>
		<link>http://elitezone.es/foro/</link>
		<description>Comunidad hispana para administradores y jugadores de Lineage II, Aion, programadores, diseñadores... entra y descubrelo todo tu mismo.</description>
		<language>es</language>
		<lastBuildDate>Sun, 20 May 2012 15:32:02 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>http://elitezone.es/foro/images/styles/Modern/misc/rss.png</url>
			<title>Comunidad EliteZone</title>
			<link>http://elitezone.es/foro/</link>
		</image>
		<item>
			<title>Problema Registro</title>
			<link>http://elitezone.es/foro/showthread.php?t=4491&amp;goto=newpost</link>
			<pubDate>Sun, 20 May 2012 13:56:07 GMT</pubDate>
			<description>Porque me sale esto ? 

https://www.dropbox.com/sh/mb8dgsz1pyhx8t7/zCZ4JI1FDg#f:Sin%20t%C3%ADtulo.jpg</description>
			<content:encoded><![CDATA[<div>Porque me sale esto ? <br />
<br />
<a href="https://www.dropbox.com/sh/mb8dgsz1pyhx8t7/zCZ4JI1FDg#f:Sin%20t%C3%ADtulo.jpg" target="_blank" rel="nofollow">https://www.dropbox.com/sh/mb8dgsz1p...%C3%ADtulo.jpg</a></div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=48">Relacionado con el cliente</category>
			<dc:creator>dylanv</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4491</guid>
		</item>
		<item>
			<title>Duda Npc char sin eclipse</title>
			<link>http://elitezone.es/foro/showthread.php?t=4490&amp;goto=newpost</link>
			<pubDate>Sun, 20 May 2012 12:58:24 GMT</pubDate>
			<description>Hola que tal, mi pregunta es la siguente: se puede crear un servidor de lineage 2 freya que tenga los npcs con skin de personajes, sin usar eclipse?
 
espero hacerme entender y que alguien me saque esta duda..</description>
			<content:encoded><![CDATA[<div>Hola que tal, mi pregunta es la siguente: se puede crear un servidor de lineage 2 freya que tenga los npcs con skin de personajes, sin usar eclipse?<br />
 <br />
espero hacerme entender y que alguien me saque esta duda..</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=47">Relacionado con el servidor</category>
			<dc:creator>dylanv</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4490</guid>
		</item>
		<item>
			<title>Hola tengo un pequeño problemita que no se que hacer</title>
			<link>http://elitezone.es/foro/showthread.php?t=4489&amp;goto=newpost</link>
			<pubDate>Sun, 20 May 2012 05:06:48 GMT</pubDate>
			<description><![CDATA[hola bueno paso a comentar el problemita que tengo en el server H5



1ro: logre colocar las armas y armaduras GOD , " pero el problemita es que no le puedo poner piedras de elementos 

2do: problema con los enchant tengo el safe a +10 y el max enchant es +30 , pero todo bien hasta que subo las cosas a +10 , el caso es q probre subir las cosas y se queman cuando quiero hacerlas +11 aunque use bless scroll y tmb probe subirlas desde +0 a +11 directamente con los bles y sigue quemando 

la cosa es que encontre la hoja donde estan los bless pero nose que linea tengo q tocar y no quise tocar cualquiera por miedo a mandarme un moco jaja

la version H5  L2 j server 




DESDE YA GRACIAS POR SU TIEMPO Y POR LA ALLUDA :scratchchin:]]></description>
			<content:encoded><![CDATA[<div><span style="font-family: arial black"><font size="4"><font color="#ff0000"><font size="5">hola bueno paso a comentar el problemita que tengo en el server H5<br />
<br />
<br />
</font><br />
</font></font></span><font size="5"><font color="#0000ff">1ro: logre colocar las armas y armaduras GOD , &quot; pero el problemita es que no le puedo poner piedras de elementos </font></font><br />
<br />
<font size="5"><font color="#0000ff">2do: problema con los enchant tengo el safe a +10 y el max enchant es +30 , pero todo bien hasta que subo las cosas a +10 , el caso es q probre subir las cosas y se queman cuando quiero hacerlas +11 aunque use bless scroll y tmb probe subirlas desde +0 a +11 directamente con los bles y sigue quemando </font></font><br />
<br />
<font size="5"><font color="#0000ff">la cosa es que encontre la hoja donde estan los bless pero nose que linea tengo q tocar y no quise tocar cualquiera por miedo a mandarme un moco jaja</font></font><br />
<br />
<font size="5"><font color="#0000ff">la version H5  L2 j server </font></font><br />
<br />
<br />
<br />
<br />
<font size="6"><font color="#00ff00"><font size="7">DESDE YA GRACIAS POR SU TIEMPO Y POR LA ALLUDA </font>:scratchchin:</font></font></div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=34">Pedidos relacionados con la administracion</category>
			<dc:creator>xcampanax</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4489</guid>
		</item>
		<item>
			<title>Interlude problemas con skills hero</title>
			<link>http://elitezone.es/foro/showthread.php?t=4488&amp;goto=newpost</link>
			<pubDate>Sun, 20 May 2012 04:17:23 GMT</pubDate>
			<description>buenas gente 
bueno les queria comentar mi problema tengo un sub acu l2frozen y mi problema es que no puedo hacer que las skills de los hero aparescan en todas las clases osea base +3 y solamente aparecen en la base quisiera que anden en todas o simplemente en la que tiren tercera si alguien sabe como lo puedo solucionar se lo voy a agradecer mucho</description>
			<content:encoded><![CDATA[<div>buenas gente <br />
bueno les queria comentar mi problema tengo un sub acu l2frozen y mi problema es que no puedo hacer que las skills de los hero aparescan en todas las clases osea base +3 y solamente aparecen en la base quisiera que anden en todas o simplemente en la que tiren tercera si alguien sabe como lo puedo solucionar se lo voy a agradecer mucho</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=197">Reportes y buggs</category>
			<dc:creator>choco</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4488</guid>
		</item>
		<item>
			<title>Duda problemas al copilar el ctf</title>
			<link>http://elitezone.es/foro/showthread.php?t=4487&amp;goto=newpost</link>
			<pubDate>Sun, 20 May 2012 03:56:24 GMT</pubDate>
			<description><![CDATA[bueno tengo unos errores q no se como sulucionarlo he intentado todo las soluciones q dicen en el foro pero nada de nada q me soluciona uso l2jserver h5 version=5320M y uso la guia http://elitezone.es/foro/showthread.php?t=2219&highlight=npc  le agradecerimucho la ayuda plis

esto me muestra el eclipse

Buildfile: D:\Nueva carpeta (4)\L2J_Server\build.xml
clean:
   [delete] Deleting directory D:\Nueva carpeta (4)\L2J_Server\build
checkRequirements:
getChangelogDateVersion:
init:
    [mkdir] Created dir: D:\Nueva carpeta (4)\L2J_Server\build
    [mkdir] Created dir: D:\Nueva carpeta (4)\L2J_Server\build\classes
compile:
    [javac] Compiling 1562 source files to D:\Nueva carpeta (4)\L2J_Server\build\classes
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:98: error: ')' expected
    [javac]             replyMSG.append("<font color=\"00FF00\">"  teamName  "'s Flag</font><br>");
    [javac]                                                      ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:98: error: not a statement
    [javac]             replyMSG.append("<font color=\"00FF00\">"  teamName  "'s Flag</font><br>");
    [javac]                                                                  ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:98: error: ';' expected
    [javac]             replyMSG.append("<font color=\"00FF00\">"  teamName  "'s Flag</font><br>");
    [javac]                                                                                      ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:115: error: ')' expected
    [javac]             _log.warning(""  "CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception: "  e.getStackTrace());
    [javac]                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:115: error: ';' expected
    [javac]             _log.warning(""  "CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception: "  e.getStackTrace());
    [javac]                                                                                ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:115: error: not a statement
    [javac]             _log.warning(""  "CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception: "  e.getStackTrace());
    [javac]                                                                                        ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:115: error: ';' expected
    [javac]             _log.warning(""  "CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception: "  e.getStackTrace());
    [javac]                                                                                                ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:115: error: ';' expected
    [javac]             _log.warning(""  "CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception: "  e.getStackTrace());
    [javac]                                                                                                                                      ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:131: error: ')' expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  player.getName()  " logged off with a CTF flag!");
    [javac]                                                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:131: error: ';' expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  player.getName()  " logged off with a CTF flag!");
    [javac]                                                                                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:139: error: ')' expected
    [javac]                                 AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
    [javac]                                                                    ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:139: error: not a statement
    [javac]                                 AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
    [javac]                                                                                       ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:139: error: ';' expected
    [javac]                                 AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
    [javac]                                                                                                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:162: error: ')' expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  team  " flag returned due to player error.");
    [javac]                                                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:162: error: not a statement
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  team  " flag returned due to player error.");
    [javac]                                                                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:162: error: ';' expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  team  " flag returned due to player error.");
    [javac]                                                                             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:173: error: ')' expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  player.getName()  " escaped from the event holding a flag!");
    [javac]                                                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:173: error: ';' expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  player.getName()  " escaped from the event holding a flag!");
    [javac]                                                                                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:181: error: ')' expected
    [javac]                                 AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
    [javac]                                                                    ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:181: error: not a statement
    [javac]                                 AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
    [javac]                                                                                       ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:181: error: ';' expected
    [javac]                                 AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
    [javac]                                                                                                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:206: error: ')' expected
    [javac]             _log.warning("CTF.restoreFlags() Error:"  e.toString());
    [javac]                                                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:206: error: illegal start of expression
    [javac]             _log.warning("CTF.restoreFlags() Error:"  e.toString());
    [javac]                                                        ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:206: error: ';' expected
    [javac]             _log.warning("CTF.restoreFlags() Error:"  e.toString());
    [javac]                                                                 ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:245: error: ')' expected
    [javac]             CreatureSay cs = new CreatureSay(0, 2, "", "Announcements : "  announce);
    [javac]                                                                          ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:245: error: illegal start of expression
    [javac]             CreatureSay cs = new CreatureSay(0, 2, "", "Announcements : "  announce);
    [javac]                                                                                    ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:273: error: ')' expected
    [javac]         AnnounceToPlayers(false, _eventName  "(CTF): Started. Go Capture the Flags!");
    [javac]                                            ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:273: error: illegal start of expression
    [javac]         AnnounceToPlayers(false, _eventName  "(CTF): Started. Go Capture the Flags!");
    [javac]                                                                                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:387: error: ')' expected
    [javac]                 _throneSpawns.get(index).getLastSpawn().setTitle(team  " Throne");
    [javac]                                                                      ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:387: error: illegal start of expression
    [javac]                 _throneSpawns.get(index).getLastSpawn().setTitle(team  " Throne");
    [javac]                                                                                 ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:402: error: ')' expected
    [javac]                 _flagSpawns.get(index).getLastSpawn().setTitle(team  "'s Flag");
    [javac]                                                                    ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:402: error: illegal start of expression
    [javac]                 _flagSpawns.get(index).getLastSpawn().setTitle(team  "'s Flag");
    [javac]                                                                               ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:412: error: ')' expected
    [javac]                 _log.warning("CTF Engine[spawnAllFlags()]: exception: "  e.getStackTrace());
    [javac]                                                                        ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:412: error: illegal start of expression
    [javac]                 _log.warning("CTF Engine[spawnAllFlags()]: exception: "  e.getStackTrace());
    [javac]                                                                           ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:412: error: ';' expected
    [javac]                 _log.warning("CTF Engine[spawnAllFlags()]: exception: "  e.getStackTrace());
    [javac]                                                                                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:433: error: ')' expected
    [javac]             AnnounceToPlayers(true, _eventName  "(CTF): No flags taken.");
    [javac]                                               ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:433: error: illegal start of expression
    [javac]             AnnounceToPlayers(true, _eventName  "(CTF): No flags taken.");
    [javac]                                                                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:438: error: ')' expected
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Maximum flags taken : "  _topScore  " flags! No one won.");
    [javac]                                                   ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:438: error: not a statement
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Maximum flags taken : "  _topScore  " flags! No one won.");
    [javac]                                                                                      ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:438: error: ';' expected
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Maximum flags taken : "  _topScore  " flags! No one won.");
    [javac]                                                                                               ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:439: error: 'else' without 'if'
    [javac]             else
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:441: error: ')' expected
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Team "  _topTeam  " wins the match, with "  _topScore  " flags taken!");
    [javac]                                                   ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:441: error: not a statement
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Team "  _topTeam  " wins the match, with "  _topScore  " flags taken!");
    [javac]                                                                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:441: error: ';' expected
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Team "  _topTeam  " wins the match, with "  _topScore  " flags taken!");
    [javac]                                                                             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:441: error: not a statement
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Team "  _topTeam  " wins the match, with "  _topScore  " flags taken!");
    [javac]                                                                                                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:441: error: ';' expected
    [javac]                 AnnounceToPlayers(true, _eventName  "(CTF): Team "  _topTeam  " wins the match, with "  _topScore  " flags taken!");
    [javac]                                                                                                                  ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:447: error: class, interface, or enum expected
    [javac]     public static void unspawnAllFlags()
    [javac]                   ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:453: error: class, interface, or enum expected
    [javac]             for (String team : _teams)
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:456: error: class, interface, or enum expected
    [javac]                 if (_throneSpawns.get(index) != null)
    [javac]                 ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:459: error: class, interface, or enum expected
    [javac]                     _throneSpawns.get(index).stopRespawn();
    [javac]                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:460: error: class, interface, or enum expected
    [javac]                     SpawnTable.getInstance().deleteSpawn(_throneSpawns.get(index), true);
    [javac]                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:461: error: class, interface, or enum expected
    [javac]                 }
    [javac]                 ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:465: error: class, interface, or enum expected
    [javac]                     _flagSpawns.get(index).stopRespawn();
    [javac]                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:466: error: class, interface, or enum expected
    [javac]                     SpawnTable.getInstance().deleteSpawn(_flagSpawns.get(index), true);
    [javac]                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:467: error: class, interface, or enum expected
    [javac]                 }
    [javac]                 ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:470: error: class, interface, or enum expected
    [javac]         }
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:474: error: class, interface, or enum expected
    [javac]         }
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:481: error: class, interface, or enum expected
    [javac]         _flagSpawns.get(index).getLastSpawn().deleteMe();
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:482: error: class, interface, or enum expected
    [javac]         _flagSpawns.get(index).stopRespawn();
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:483: error: class, interface, or enum expected
    [javac]         SpawnTable.getInstance().deleteSpawn(_flagSpawns.get(index), true);
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:484: error: class, interface, or enum expected
    [javac]     }
    [javac]     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:486: error: class, interface, or enum expected
    [javac]     public static void spawnFlag(String teamName)
    [javac]                   ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:489: error: class, interface, or enum expected
    [javac]         L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_flagIds.get(index));
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:491: error: class, interface, or enum expected
    [javac]         try
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:495: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).setLocx(_flagsX.get(index));
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:496: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).setLocy(_flagsY.get(index));
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:497: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).setLocz(_flagsZ.get(index));
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:498: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).setAmount(1);
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:499: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).setHeading(0);
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:500: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).setRespawnDelay(1);
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:502: error: class, interface, or enum expected
    [javac]             SpawnTable.getInstance().addNewSpawn(_flagSpawns.get(index), false);
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:504: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).init();
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:505: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).getLastSpawn().getStatus().setCurrentHp(999999999);
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:506: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).getLastSpawn().setTitle(teamName  "'s Flag");
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:507: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).getLastSpawn()._CTF_FlagTeamName = teamName;
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:508: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).getLastSpawn()._isCTF_Flag = true;
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:509: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).getLastSpawn().decayMe();
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:510: error: class, interface, or enum expected
    [javac]             _flagSpawns.get(index).getLastSpawn().spawnMe(_flagSpawns.get(index).getLastSpawn().getX(), _flagSpawns.get(index).getLastSpawn().getY(), _flagSpawns.get(index).getLastSpawn().getZ());
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:511: error: class, interface, or enum expected
    [javac]         }
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:515: error: class, interface, or enum expected
    [javac]         }
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:518: error: class, interface, or enum expected
    [javac]     public static boolean InRangeOfFlag(L2PcInstance _player, int flagIndex, int offset)
    [javac]                   ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:522: error: class, interface, or enum expected
    [javac]         return false;
    [javac]         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:523: error: class, interface, or enum expected
    [javac]     }
    [javac]     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:525: error: class, interface, or enum expected
    [javac]     public static void processInFlagRange(L2PcInstance _player)
    [javac]                   ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:530: error: class, interface, or enum expected
    [javac]             for (String team : _teams)
    [javac]             ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:537: error: class, interface, or enum expected
    [javac]                     if (InRangeOfFlag(_player, indexOwn, 100) && !_flagsTaken.get(indexOwn) && _player._haveFlagCTF)
    [javac]                     ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:541: error: class, interface, or enum expected
    [javac]                         _flagsTaken.set(indexEnemy, false);
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:542: error: class, interface, or enum expected
    [javac]                         spawnFlag(_player._teamNameHaveFlagCTF);
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:544: error: class, interface, or enum expected
    [javac]                         _player.broadcastPacket(new SocialAction(_player.getObjectId(), 16)); // amazing glow
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:545: error: class, interface, or enum expected
    [javac]                         _player.broadcastUserInfo();
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:546: error: class, interface, or enum expected
    [javac]                         _player.broadcastPacket(new SocialAction(_player.getObjectId(), 3)); // Victory
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:547: error: class, interface, or enum expected
    [javac]                         _player.broadcastUserInfo();
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:548: error: class, interface, or enum expected
    [javac]                         removeFlagFromPlayer(_player);
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:549: error: class, interface, or enum expected
    [javac]                         _teamPointsCount.set(indexOwn, teamPointsCount(team)  1);
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:550: error: class, interface, or enum expected
    [javac]                         _player.broadcastPacket(new PlaySound(0, "ItemSound.quest_finish", 1, _player.getObjectId(), _player.getX(), _player.getY(), _player.getZ()));
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:551: error: class, interface, or enum expected
    [javac]                         _player.broadcastUserInfo();
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:552: error: class, interface, or enum expected
    [javac]                         _playerScores.put(_player.getName(), playerScoresCount(_player.getName())  1);
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:553: error: class, interface, or enum expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): "  _player.getName()  " scores for "  _player._teamNameCTF  ".");
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:554: error: class, interface, or enum expected
    [javac]                         AnnounceToPlayers(false, _eventName  "(CTF): Scores - "  _teams.get(0)  ": "  teamPointsCount(_teams.get(0))  " "  _teams.get(1)  ": "  teamPointsCount(_teams.get(1)));
    [javac]                         ^
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model\entity\CTF.java:555: error: class, interface, or enum expected
    [javac]                     }
    [javac]                     ^
    [javac] 100 errors

BUILD FAILED
D:\Nueva carpeta (4)\L2J_Server\build.xml:57: Compile failed; see the compiler error output for details.

Total time: 9 seconds

y este es mi CTF.java

/*
 * 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 com.l2jserver.gameserver.model.entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.Vector;
import java.util.logging.Logger;

import javolution.text.TextBuilder;
import javolution.util.FastMap;

import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.Announcements;
import com.l2jserver.gameserver.GmListTable;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.datatables.NpcTable;
import com.l2jserver.gameserver.datatables.SpawnTable;
import com.l2jserver.gameserver.model.L2Effect;
import com.l2jserver.gameserver.model.L2ItemInstance;
import com.l2jserver.gameserver.model.L2Party;
import com.l2jserver.gameserver.model.L2Radar;
import com.l2jserver.gameserver.model.L2Spawn;
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
import com.l2jserver.gameserver.model.itemcontainer.Inventory;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.ItemList;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.network.serverpackets.PlaySound;
import com.l2jserver.gameserver.network.serverpackets.RadarControl;
import com.l2jserver.gameserver.network.serverpackets.SocialAction;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.templates.chars.L2NpcTemplate;
import com.l2jserver.gameserver.templates.skills.L2EffectType;
import com.l2jserver.util.Rnd;

/**
 * 
 * @author SqueezeD & Darki699 (idea by FBIAgent)
 * 
 */
public class CTF
{
    private final static Logger _log = Logger.getLogger(CTF.class.getName());
    private static int _FlagNPC = 35062, _FLAG_IN_HAND_ITEM_ID = 6718;
    public static String _eventName = new String(), _eventDesc = new String(), _topTeam = new String(), _joiningLocationName = new String();
    public static Vector<String> _teams = new Vector<String>(), _savePlayers = new Vector<String>(), _savePlayerTeams = new Vector<String>();
    public static Vector<L2PcInstance> _players = new Vector<L2PcInstance>(), _playersShuffle = new Vector<L2PcInstance>();
    public static Vector<Integer> _teamPlayersCount = new Vector<Integer>(), _teamColors = new Vector<Integer>(), _teamsX = new Vector<Integer>(), _teamsY = new Vector<Integer>(), _teamsZ = new Vector<Integer>(), _teamsBaseX = new Vector<Integer>(), _teamsBaseY = new Vector<Integer>(),
            _teamsBaseZ = new Vector<Integer>();
    public static boolean _joining = false, _teleport = false, _started = false, _sitForced = false;
    public static L2Spawn _npcSpawn;
    public static int _npcId = 0, _npcX = 0, _npcY = 0, _npcZ = 0, _npcHeading = 0, _rewardId = 0, _rewardAmount = 0, _minlvl = 0, _maxlvl = 0, _joinTime = 0, _eventTime = 0, _minPlayers = 0, _maxPlayers = 0;
    public static long _flagHoldTime = 0;
    public static Vector<Integer> _teamPointsCount = new Vector<Integer>();
    public static Vector<Integer> _flagIds = new Vector<Integer>(), _flagsX = new Vector<Integer>(), _flagsY = new Vector<Integer>(), _flagsZ = new Vector<Integer>();
    public static Vector<L2Spawn> _flagSpawns = new Vector<L2Spawn>(), _throneSpawns = new Vector<L2Spawn>();
    public static Vector<Boolean> _flagsTaken = new Vector<Boolean>(), _flagsNotRemoved = new Vector<Boolean>();
    public static int _topScore = 0, eventCenterX = 0, eventCenterY = 0, eventCenterZ = 0, eventOffset = 0;
    public static Map<String, Integer> _playerScores = new FastMap<String, Integer>();
    
    public static void showFlagHtml(L2PcInstance eventPlayer, String objectId, String teamName)
    {
        if (eventPlayer == null)
            return;
        
        try
        {
            NpcHtmlMessage adminReply = new NpcHtmlMessage(0);
            
            TextBuilder replyMSG = new TextBuilder();
            
            replyMSG.append("<html><body><center>");
            replyMSG.append("CTF Flag<br><br>");
            replyMSG.append("<font color=\"00FF00\">"  teamName  "'s Flag</font><br>");
            if (eventPlayer._teamNameCTF != null && eventPlayer._teamNameCTF.equals(teamName))
                replyMSG.append("<font color=\"LEVEL\">This is your Flag</font><br>");
            else
                replyMSG.append("<font color=\"LEVEL\">Enemy Flag!</font><br>");
            if (_started)
            {
                processInFlagRange(eventPlayer);
            }
            else
                replyMSG.append("CTF match is not in progress yet.<br>Wait for a GM to start the event<br>");
            replyMSG.append("</center></body></html>");
            adminReply.setHtml(replyMSG.toString());
            eventPlayer.sendPacket(adminReply);
        }
        catch (Exception e)
        {
            _log.warning(""  "CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception: "  e.getStackTrace());
        }
    }
    
    public static void CheckRestoreFlags()
    {
        Vector<Integer> teamsTakenFlag = new Vector<Integer>();
        try
        {
            for (L2PcInstance player : _players)
            { //if there's a player with a flag
                //add the index of the team who's FLAG WAS TAKEN to the list
                if (player != null)
                {
                    if (!player.isOnline() && player._haveFlagCTF)// logged off with a flag in his hands
                    {
                        AnnounceToPlayers(false, _eventName  "(CTF): "  player.getName()  " logged off with a CTF flag!");
                        player._haveFlagCTF = false;
                        if (_teams.indexOf(player._teamNameHaveFlagCTF) >= 0)
                        {
                            if (_flagsTaken.get(_teams.indexOf(player._teamNameHaveFlagCTF)))
                            {
                                _flagsTaken.set(_teams.indexOf(player._teamNameHaveFlagCTF), false);
                                spawnFlag(player._teamNameHaveFlagCTF);
                                AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
                            }
                        }
                        removeFlagFromPlayer(player);
                        player._teamNameHaveFlagCTF = null;
                        return;
                    }
                    else if (player._haveFlagCTF)
                        teamsTakenFlag.add(_teams.indexOf(player._teamNameHaveFlagCTF));
                }
            }
            //Go over the list of ALL teams
            for (String team : _teams)
            {
                if (team == null)
                    continue;
                int index = _teams.indexOf(team);
                if (!teamsTakenFlag.contains(index))
                {
                    if (_flagsTaken.get(index))
                    {
                        _flagsTaken.set(index, false);
                        spawnFlag(team);
                        AnnounceToPlayers(false, _eventName  "(CTF): "  team  " flag returned due to player error.");
                    }
                }
            }
            //Check if a player ran away from the event holding a flag:
            for (L2PcInstance player : _players)
            {
                if (player != null && player._haveFlagCTF)
                {
                    if (isOutsideCTFArea(player))
                    {
                        AnnounceToPlayers(false, _eventName  "(CTF): "  player.getName()  " escaped from the event holding a flag!");
                        player._haveFlagCTF = false;
                        if (_teams.indexOf(player._teamNameHaveFlagCTF) >= 0)
                        {
                            if (_flagsTaken.get(_teams.indexOf(player._teamNameHaveFlagCTF)))
                            {
                                _flagsTaken.set(_teams.indexOf(player._teamNameHaveFlagCTF), false);
                                spawnFlag(player._teamNameHaveFlagCTF);
                                AnnounceToPlayers(false, _eventName  "(CTF): "  player._teamNameHaveFlagCTF  " flag now returned to place.");
                            }
                        }
                        removeFlagFromPlayer(player);
                        player._teamNameHaveFlagCTF = null;
                        if (Config.CTF_BASE_TELEPORT_FIRST)
                        {
                            player.teleToLocation(_teamsBaseX.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF)));
                            
                            ThreadPoolManager.getInstance().scheduleGeneral(new BaseTeleportTask(player, false), 10000);
                            
                            player.sendMessage("You have been returned to your base. You will be sent into battle in 10 seconds.");
                        }
                        else
                        {
                            player.teleToLocation(_teamsX.get(_teams.indexOf(player._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));
                            player.sendMessage("You have been returned to your team spawn.");
                        }
                        return;
                    }
                }
            }
        }
        catch (Exception e)
        {
            _log.warning("CTF.restoreFlags() Error:"  e.toString());
        }
    }
    
    public static void kickPlayerFromCTf(L2PcInstance playerToKick)
    {
        if (playerToKick == null)
            return;
        
        if (_joining)
        {
            _playersShuffle.remove(playerToKick);
            _players.remove(playerToKick);
            playerToKick._inEventCTF = false;
            playerToKick._teamNameCTF = new String();
        }
        if (_started || _teleport)
        {
            _playersShuffle.remove(playerToKick);
            playerToKick._inEventCTF = false;
            removePlayer(playerToKick);
            if (playerToKick.isOnline())
            {
                playerToKick.getAppearance().setNameColor(playerToKick._originalNameColorCTF);
                playerToKick.setKarma(playerToKick._originalKarmaCTF);
                playerToKick.setTitle(playerToKick._originalTitleCTF);
                playerToKick.broadcastUserInfo();
                playerToKick.sendMessage("You have been kicked from the CTF.");
                playerToKick.teleToLocation(_npcX, _npcY, _npcZ, false);
            }
        }
    }
    
    public static void AnnounceToPlayers(Boolean toall, String announce)
    {
        if (toall)
            Announcements.getInstance().announceToAll(announce);
        else
        {
            CreatureSay cs = new CreatureSay(0, 2, "", "Announcements : "  announce);
            if (_players != null && !_players.isEmpty())
            {
                for (L2PcInstance player : _players)
                {
                    if (player != null && player.isOnline())
                        player.sendPacket(cs);
                }
            }
        }
    }
    
    public static void Started(L2PcInstance player)
    {
        player._teamNameHaveFlagCTF = null;
        player._haveFlagCTF = false;
    }
    
    public static void StartEvent()
    {
        for (L2PcInstance player : _players)
        {
            if (player != null)
            {
                player._teamNameHaveFlagCTF = null;
                player._haveFlagCTF = false;
            }
        }
        AnnounceToPlayers(false, _eventName  "(CTF): Started. Go Capture the Flags!");
    }
    
    public static void addFlagToPlayer(L2PcInstance _player)
    {
        //remove items from the player hands (right, left, both)
        // This is NOT a BUG, I don't want them to see the icon they have 8D
        L2ItemInstance wpn = _player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
        if (wpn == null)
        {
            wpn = _player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
            if (wpn != null)
                _player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_RHAND);
        }
        else
        {
            _player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_RHAND);
            wpn = _player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
            if (wpn != null)
                _player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_LHAND);
        }
        //add the flag in his hands
        _player.getInventory().equipItem(ItemTable.getInstance().createItem("", CTF._FLAG_IN_HAND_ITEM_ID, 1, _player, null));
        _player.broadcastPacket(new SocialAction(_player.getObjectId(), 16)); //amazing glow
        _player._haveFlagCTF = true;
        _player.broadcastUserInfo();
        CreatureSay cs = new CreatureSay(_player.getObjectId(), 15, ":", "You got it! Run back! ::"); // 8D
        _player.sendPacket(cs);
        
        // Start the flag holding timer 
        _flagsNotRemoved.set(_teams.indexOf(_player._teamNameCTF), true);
        flagHoldTimer(_player, _flagHoldTime);
        
        // If player is invisible, make them visible
        if (_player.getAppearance().getInvisible())
        {
            @SuppressWarnings("unused")
            L2Effect eInvisible = _player.getFirstEffect(L2EffectType.HIDE);
        }
    }
    
    public static void removeFlagFromPlayer(L2PcInstance player)
    {
        L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
        player._haveFlagCTF = false;
        
        // Reset boolean of whether the holder's flag has not been removed yet to false and kill the flagHoldTimer thread
        _flagsNotRemoved.set(_teams.indexOf(player._teamNameCTF), false);
        
        if (wpn != null)
        {
            L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart());
            player.getInventory().destroyItemByItemId("", CTF._FLAG_IN_HAND_ITEM_ID, 1, player, null);
            InventoryUpdate iu = new InventoryUpdate();
            for (L2ItemInstance element : unequiped)
                iu.addModifiedItem(element);
            player.sendPacket(iu);
            player.sendPacket(new ItemList(player, true)); // get your weapon back now ...
            player.abortAttack();
            player.broadcastUserInfo();
        }
        else
        {
            player.getInventory().destroyItemByItemId("", CTF._FLAG_IN_HAND_ITEM_ID, 1, player, null);
            player.sendPacket(new ItemList(player, true)); // get your weapon back now ...
            player.abortAttack();
            player.broadcastUserInfo();
        }
    }
    
    public static void setTeamFlag(String teamName, L2PcInstance activeChar)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        addOrSet(_teams.indexOf(teamName), null, false, _FlagNPC, activeChar.getX(), activeChar.getY(), activeChar.getZ());
    }
    
    public static void setTeamFlag(String teamName, int x, int y, int z)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        addOrSet(_teams.indexOf(teamName), null, false, _FlagNPC, x, y, z);
    }
    
    public static void spawnAllFlags()
    {
        while (_flagSpawns.size() < _teams.size())
            _flagSpawns.add(null);
        while (_throneSpawns.size() < _teams.size())
            _throneSpawns.add(null);
        for (String team : _teams)
        {
            int index = _teams.indexOf(team);
            L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_flagIds.get(index));
            L2NpcTemplate throne = NpcTable.getInstance().getTemplate(32027);
            try
            {
                //spawn throne
                _throneSpawns.set(index, new L2Spawn(throne));
                _throneSpawns.get(index).setLocx(_flagsX.get(index));
                _throneSpawns.get(index).setLocy(_flagsY.get(index));
                _throneSpawns.get(index).setLocz(_flagsZ.get(index) - 10);
                _throneSpawns.get(index).setAmount(1);
                _throneSpawns.get(index).setHeading(0);
                _throneSpawns.get(index).setRespawnDelay(1);
                SpawnTable.getInstance().addNewSpawn(_throneSpawns.get(index), false);
                _throneSpawns.get(index).init();
                _throneSpawns.get(index).getLastSpawn().getStatus().setCurrentHp(999999999);
                _throneSpawns.get(index).getLastSpawn().decayMe();
                _throneSpawns.get(index).getLastSpawn().spawnMe(_throneSpawns.get(index).getLastSpawn().getX(), _throneSpawns.get(index).getLastSpawn().getY(), _throneSpawns.get(index).getLastSpawn().getZ());
                _throneSpawns.get(index).getLastSpawn().setTitle(team  " Throne");
                _throneSpawns.get(index).getLastSpawn().broadcastPacket(new MagicSkillUse(_throneSpawns.get(index).getLastSpawn(), _throneSpawns.get(index).getLastSpawn(), 1036, 1, 5500, 1));
                _throneSpawns.get(index).getLastSpawn()._isCTF_throneSpawn = true;
                
                //spawn flag
                _flagSpawns.set(index, new L2Spawn(tmpl));
                _flagSpawns.get(index).setLocx(_flagsX.get(index));
                _flagSpawns.get(index).setLocy(_flagsY.get(index));
                _flagSpawns.get(index).setLocz(_flagsZ.get(index));
                _flagSpawns.get(index).setAmount(1);
                _flagSpawns.get(index).setHeading(0);
                _flagSpawns.get(index).setRespawnDelay(1);
                SpawnTable.getInstance().addNewSpawn(_flagSpawns.get(index), false);
                _flagSpawns.get(index).init();
                _flagSpawns.get(index).getLastSpawn().getStatus().setCurrentHp(999999999);
                _flagSpawns.get(index).getLastSpawn().setTitle(team  "'s Flag");
                _flagSpawns.get(index).getLastSpawn()._CTF_FlagTeamName = team;
                _flagSpawns.get(index).getLastSpawn().decayMe();
                _flagSpawns.get(index).getLastSpawn().spawnMe(_flagSpawns.get(index).getLastSpawn().getX(), _flagSpawns.get(index).getLastSpawn().getY(), _flagSpawns.get(index).getLastSpawn().getZ());
                _flagSpawns.get(index).getLastSpawn()._isCTF_Flag = true;
                if (index == (_teams.size() - 1))
                    calculateOutSideOfCTF(); // sets event boundaries so players don't run with the flag.
            }
            catch (Exception e)
            {
                _log.warning("CTF Engine[spawnAllFlags()]: exception: "  e.getStackTrace());
            }
        }
    }
    
    public static void processTopTeam()
    {
        
        _topTeam = null;
        for (String team : _teams)
        {
            if (teamPointsCount(team) == _topScore && _topScore > 0)
                _topTeam = null;
            if (teamPointsCount(team) > _topScore)
            {
                _topTeam = team;
                _topScore = teamPointsCount(team);
            }
        }
        if (_topScore <= 0)
        {
            AnnounceToPlayers(true, _eventName  "(CTF): No flags taken.");
        }
        else
        {
            if (_topTeam == null)
                AnnounceToPlayers(true, _eventName  "(CTF): Maximum flags taken : "  _topScore  " flags! No one won.");
            else
            {
                AnnounceToPlayers(true, _eventName  "(CTF): Team "  _topTeam  " wins the match, with "  _topScore  " flags taken!");
                rewardTeam(_topTeam);
            }
        }
    }
    
    public static void unspawnAllFlags()
    {
        try
        {
            if (_throneSpawns == null || _flagSpawns == null || _teams == null)
                return;
            for (String team : _teams)
            {
                int index = _teams.indexOf(team);
                if (_throneSpawns.get(index) != null)
                {
                    _throneSpawns.get(index).getLastSpawn().deleteMe();
                    _throneSpawns.get(index).stopRespawn();
                    SpawnTable.getInstance().deleteSpawn(_throneSpawns.get(index), true);
                }
                if (_flagSpawns.get(index) != null)
                {
                    _flagSpawns.get(index).getLastSpawn().deleteMe();
                    _flagSpawns.get(index).stopRespawn();
                    SpawnTable.getInstance().deleteSpawn(_flagSpawns.get(index), true);
                }
            }
            _throneSpawns.removeAllElements();
        }
        catch (Throwable t)
        {
            _log.warning("CTF Engine[unspawnAllFlags()]: exception: "  t.getStackTrace());
        }
    }
    
    private static void unspawnFlag(String teamName)
    {
        int index = _teams.indexOf(teamName);
        
        _flagSpawns.get(index).getLastSpawn().deleteMe();
        _flagSpawns.get(index).stopRespawn();
        SpawnTable.getInstance().deleteSpawn(_flagSpawns.get(index), true);
    }
    
    public static void spawnFlag(String teamName)
    {
        int index = _teams.indexOf(teamName);
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_flagIds.get(index));
        
        try
        {
            _flagSpawns.set(index, new L2Spawn(tmpl));
            
            _flagSpawns.get(index).setLocx(_flagsX.get(index));
            _flagSpawns.get(index).setLocy(_flagsY.get(index));
            _flagSpawns.get(index).setLocz(_flagsZ.get(index));
            _flagSpawns.get(index).setAmount(1);
            _flagSpawns.get(index).setHeading(0);
            _flagSpawns.get(index).setRespawnDelay(1);
            
            SpawnTable.getInstance().addNewSpawn(_flagSpawns.get(index), false);
            
            _flagSpawns.get(index).init();
            _flagSpawns.get(index).getLastSpawn().getStatus().setCurrentHp(999999999);
            _flagSpawns.get(index).getLastSpawn().setTitle(teamName  "'s Flag");
            _flagSpawns.get(index).getLastSpawn()._CTF_FlagTeamName = teamName;
            _flagSpawns.get(index).getLastSpawn()._isCTF_Flag = true;
            _flagSpawns.get(index).getLastSpawn().decayMe();
            _flagSpawns.get(index).getLastSpawn().spawnMe(_flagSpawns.get(index).getLastSpawn().getX(), _flagSpawns.get(index).getLastSpawn().getY(), _flagSpawns.get(index).getLastSpawn().getZ());
        }
        catch (Exception e)
        {
            _log.warning("CTF Engine[spawnFlag("  teamName  ")]: exception: "  e.getStackTrace());
        }
    }
    
    public static boolean InRangeOfFlag(L2PcInstance _player, int flagIndex, int offset)
    {
        if (_player.getX() > CTF._flagsX.get(flagIndex) - offset && _player.getX() < CTF._flagsX.get(flagIndex)  offset && _player.getY() > CTF._flagsY.get(flagIndex) - offset && _player.getY() < CTF._flagsY.get(flagIndex)  offset && _player.getZ() > CTF._flagsZ.get(flagIndex) - offset && _player.getZ() < CTF._flagsZ.get(flagIndex)  offset)
            return true;
        return false;
    }
    
    public static void processInFlagRange(L2PcInstance _player)
    {
        try
        {
            CheckRestoreFlags();
            for (String team : _teams)
            {
                if (team.equals(_player._teamNameCTF))
                {
                    int indexOwn = _teams.indexOf(_player._teamNameCTF);
                    
                    //if player is near his team flag holding the enemy flag
                    if (InRangeOfFlag(_player, indexOwn, 100) && !_flagsTaken.get(indexOwn) && _player._haveFlagCTF)
                    {
                        int indexEnemy = _teams.indexOf(_player._teamNameHaveFlagCTF);
                        //return enemy flag to place
                        _flagsTaken.set(indexEnemy, false);
                        spawnFlag(_player._teamNameHaveFlagCTF);
                        //remove the flag from this player
                        _player.broadcastPacket(new SocialAction(_player.getObjectId(), 16)); // amazing glow
                        _player.broadcastUserInfo();
                        _player.broadcastPacket(new SocialAction(_player.getObjectId(), 3)); // Victory
                        _player.broadcastUserInfo();
                        removeFlagFromPlayer(_player);
                        _teamPointsCount.set(indexOwn, teamPointsCount(team)  1);
                        _player.broadcastPacket(new PlaySound(0, "ItemSound.quest_finish", 1, _player.getObjectId(), _player.getX(), _player.getY(), _player.getZ()));
                        _player.broadcastUserInfo();
                        _playerScores.put(_player.getName(), playerScoresCount(_player.getName())  1);
                        AnnounceToPlayers(false, _eventName  "(CTF): "  _player.getName()  " scores for "  _player._teamNameCTF  ".");
                        AnnounceToPlayers(false, _eventName  "(CTF): Scores - "  _teams.get(0)  ": "  teamPointsCount(_teams.get(0))  " "  _teams.get(1)  ": "  teamPointsCount(_teams.get(1)));
                    }
                }
                else
                {
                    int indexEnemy = _teams.indexOf(team);
                    //if the player is near a enemy flag
                    if (InRangeOfFlag(_player, indexEnemy, 100) && !_flagsTaken.get(indexEnemy) && !_player._haveFlagCTF && !_player.isDead())
                    {
                        if (_player.isRidingStrider() || _player.isFlying())
                        {
                            _player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_MOUNT_A_STEED_WHILE_A_PET_OR_A_SERVITOR_IS_SUMMONED));
                            break;
                        }
                        
                        _flagsTaken.set(indexEnemy, true);
                        unspawnFlag(team);
                        _player._teamNameHaveFlagCTF = team;
                        addFlagToPlayer(_player);
                        _player.broadcastUserInfo();
                        _player._haveFlagCTF = true;
                        AnnounceToPlayers(false, _eventName  "(CTF): "  team  " flag taken by "  _player.getName()  "...");
                        pointTeamTo(_player, team);
                        break;
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    
    public static void pointTeamTo(L2PcInstance hasFlag, String ourFlag)
    {
        try
        {
            for (L2PcInstance player : _players)
            {
                if (player != null && player.isOnline())
                {
                    if (player._teamNameCTF.equals(ourFlag))
                    {
                        player.sendMessage(hasFlag.getName()  " took your flag!");
                        if (player._haveFlagCTF)
                        {
                            player.sendMessage("You can not return the flag to headquarters, until your flag is returned to it's place.");
                            player.sendPacket(new RadarControl(1, 1, player.getX(), player.getY(), player.getZ()));
                        }
                        else
                        {
                            player.sendPacket(new RadarControl(0, 1, hasFlag.getX(), hasFlag.getY(), hasFlag.getZ()));
                            L2Radar rdr = new L2Radar(player);
                            L2Radar.RadarOnPlayer radar = rdr.new RadarOnPlayer(hasFlag, player);
                            ThreadPoolManager.getInstance().scheduleGeneral(radar, 10000  Rnd.get(30000));
                        }
                    }
                }
            }
        }
        catch (Throwable t)
        {
        }
    }
    
    private static int playerScoresCount(String player)
    {
        if (_playerScores.containsKey(player))
            return _playerScores.get(player);
        else if (player != null)
        {
            _playerScores.put(player, 0);
            return _playerScores.get(player);
        }
        else
            return 0;
    }
    
    public static int teamPointsCount(String teamName)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return -1;
        
        return _teamPointsCount.get(index);
    }
    
    public static void setTeamPointsCount(String teamName, int teamPointCount)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamPointsCount.set(index, teamPointCount);
    }
    
    public static int teamPlayersCount(String teamName)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return -1;
        
        return _teamPlayersCount.get(index);
    }
    
    public static void setTeamPlayersCount(String teamName, int teamPlayersCount)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamPlayersCount.set(index, teamPlayersCount);
    }
    
    public static void setNpcPos(L2PcInstance activeChar)
    {
        _npcX = activeChar.getX();
        _npcY = activeChar.getY();
        _npcZ = activeChar.getZ();
        _npcHeading = activeChar.getHeading();
    }
    
    public static void setNpcPos(int x, int y, int z)
    {
        _npcX = x;
        _npcY = y;
        _npcZ = z;
    }
    
    public static void addTeam(String teamName)
    {
        if (!checkTeamOk())
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[addTeam("  teamName  ")]: checkTeamOk() = false");
            return;
        }
        
        if (teamName.equals(" "))
            return;
        
        _teams.add(teamName);
        _teamPlayersCount.add(0);
        _teamColors.add(0);
        _teamsX.add(0);
        _teamsY.add(0);
        _teamsZ.add(0);
        _teamsBaseX.add(0);
        _teamsBaseY.add(0);
        _teamsBaseZ.add(0);
        _teamPointsCount.add(0);
        addOrSet(_teams.indexOf(teamName), null, false, _FlagNPC, 0, 0, 0);
    }
    
    private static void addOrSet(int listSize, L2Spawn flagSpawn, boolean flagsTaken, int flagId, int flagX, int flagY, int flagZ)
    {
        while (_flagsX.size() <= listSize)
        {
            _flagSpawns.add(null);
            _flagsTaken.add(false);
            _flagIds.add(_FlagNPC);
            _flagsX.add(0);
            _flagsY.add(0);
            _flagsZ.add(0);
        }
        _flagSpawns.set(listSize, flagSpawn);
        _flagsTaken.set(listSize, flagsTaken);
        _flagIds.set(listSize, flagId);
        _flagsX.set(listSize, flagX);
        _flagsY.set(listSize, flagY);
        _flagsZ.set(listSize, flagZ);
    }
    
    public static boolean checkMaxLevel(int maxlvl)
    {
        if (_minlvl >= maxlvl)
            return false;
        
        return true;
    }
    
    public static boolean checkMinLevel(int minlvl)
    {
        if (_maxlvl <= minlvl)
            return false;
        
        return true;
    }
    
    /** returns true if participated players is higher or equal then minimum needed players */
    public static boolean checkMinPlayers(int players)
    {
        if (_minPlayers <= players)
            return true;
        
        return false;
    }
    
    /** returns true if max players is higher or equal then participated players */
    public static boolean checkMaxPlayers(int players)
    {
        if (_maxPlayers > players)
            return true;
        
        return false;
    }
    
    public static void removeTeam(String teamName)
    {
        if (!checkTeamOk() || _teams.isEmpty())
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[removeTeam("  teamName  ")]: checkTeamOk() = false");
            return;
        }
        
        if (teamPlayersCount(teamName) > 0)
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[removeTeam("  teamName  ")]: teamPlayersCount(teamName) > 0");
            return;
        }
        
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamsZ.remove(index);
        _teamsY.remove(index);
        _teamsX.remove(index);
        _teamsBaseZ.remove(index);
        _teamsBaseY.remove(index);
        _teamsBaseX.remove(index);
        _teamColors.remove(index);
        _teamPointsCount.remove(index);
        _teamPlayersCount.remove(index);
        _teams.remove(index);
        _flagSpawns.remove(index);
        _flagsTaken.remove(index);
        _flagIds.remove(index);
        _flagsX.remove(index);
        _flagsY.remove(index);
        _flagsZ.remove(index);
    }
    
    public static void setTeamPos(String teamName, L2PcInstance activeChar)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamsX.set(index, activeChar.getX());
        _teamsY.set(index, activeChar.getY());
        _teamsZ.set(index, activeChar.getZ());
    }
    
    public static void setTeamPos(String teamName, int x, int y, int z)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamsX.set(index, x);
        _teamsY.set(index, y);
        _teamsZ.set(index, z);
    }
    
    public static void setTeamBasePos(String teamName, L2PcInstance activeChar)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamsBaseX.set(index, activeChar.getX());
        _teamsBaseY.set(index, activeChar.getY());
        _teamsBaseZ.set(index, activeChar.getZ());
    }
    
    public static void setTeamBasePos(String teamName, int x, int y, int z)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamsBaseX.set(index, x);
        _teamsBaseY.set(index, y);
        _teamsBaseZ.set(index, z);
    }
    
    public static void setTeamColor(String teamName, int color)
    {
        if (!checkTeamOk())
            return;
        
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamColors.set(index, color);
    }
    
    public static boolean checkTeamOk()
    {
        if (_started || _teleport || _joining)
            return false;
        
        return true;
    }
    
    public static void startJoin(L2PcInstance activeChar)
    {
        if (!startJoinOk())
        {
            activeChar.sendMessage("Event not setted propertly.");
            if (Config.DEBUG)
                _log.fine("CTF Engine[startJoin("  activeChar.getName()  ")]: startJoinOk() = false");
            return;
        }
        
        _joining = true;
        spawnEventNpc(activeChar);
        AnnounceToPlayers(true, _eventName  " (CTF)!");
        if (Config.CTF_ANNOUNCE_REWARD)
            AnnounceToPlayers(true, "Reward: "  _rewardAmount  " "  ItemTable.getInstance().getTemplate(_rewardId).getName());
        AnnounceToPlayers(true, "Recruiting levels "  _minlvl  " to "  _maxlvl);
        AnnounceToPlayers(true, "Joinable in "  _joiningLocationName  "!");
    }
    
    public static void startJoin()
    {
        if (!startJoinOk())
        {
            _log.warning("Event not setted propertly.");
            if (Config.DEBUG)
                _log.fine("CTF Engine[startJoin(startJoinOk() = false");
            return;
        }
        
        _joining = true;
        spawnEventNpc();
        AnnounceToPlayers(true, "Recruiting levels "  _minlvl  " to "  _maxlvl);
        AnnounceToPlayers(true, "Joinable in "  _joiningLocationName  "!");
        if (Config.CTF_ANNOUNCE_REWARD)
            AnnounceToPlayers(true, "Reward: "  _rewardAmount  " "  ItemTable.getInstance().getTemplate(_rewardId).getName());
    }
    
    public static boolean startAutoJoin()
    {
        if (!startJoinOk())
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[startJoin]: startJoinOk() = false");
            return false;
        }
        
        _joining = true;
        spawnEventNpc();
        AnnounceToPlayers(true, _eventName  " (CTF)!");
        if (Config.CTF_ANNOUNCE_REWARD)
            AnnounceToPlayers(true, "Reward: "  _rewardAmount  " "  ItemTable.getInstance().getTemplate(_rewardId).getName());
        AnnounceToPlayers(true, "Recruiting levels "  _minlvl  " to "  _maxlvl);
        AnnounceToPlayers(true, "Joinable in "  _joiningLocationName  "!");
        return true;
    }
    
    public static boolean startJoinOk()
    {
        if (Config.CTF_BASE_TELEPORT_FIRST && (_teamsBaseX.contains(0) || _teamsBaseY.contains(0) || _teamsBaseZ.contains(0)))
            return false;
        else if (_started || _teleport || _joining || _teams.size() < 2 || _eventName.equals("") || _joiningLocationName.equals("") || _eventDesc.equals("") || _npcId == 0 || _npcX == 0 || _npcY == 0 || _npcZ == 0 || _rewardId == 0 || _rewardAmount == 0 || _teamsX.contains(0) || _teamsY.contains(0) || _teamsZ.contains(0) || _flagHoldTime == 0)
            return false;
        try
        {
            if (_flagsX.contains(0) || _flagsY.contains(0) || _flagsZ.contains(0) || _flagIds.contains(0))
                return false;
            if (_flagsX.size() < _teams.size() || _flagsY.size() < _teams.size() || _flagsZ.size() < _teams.size() || _flagIds.size() < _teams.size())
                return false;
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            return false;
        }
        return true;
    }
    
    private static void spawnEventNpc(L2PcInstance activeChar)
    {
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_npcId);
        
        try
        {
            _npcSpawn = new L2Spawn(tmpl);
            
            _npcSpawn.setLocx(_npcX);
            _npcSpawn.setLocy(_npcY);
            _npcSpawn.setLocz(_npcZ);
            _npcSpawn.setAmount(1);
            _npcSpawn.setHeading(_npcHeading);
            _npcSpawn.setRespawnDelay(1);
            
            SpawnTable.getInstance().addNewSpawn(_npcSpawn, false);
            
            _npcSpawn.init();
            _npcSpawn.getLastSpawn().getStatus().setCurrentHp(999999999);
            _npcSpawn.getLastSpawn().setTitle(_eventName);
            _npcSpawn.getLastSpawn()._isEventMobCTF = true;
            _npcSpawn.getLastSpawn().isAggressive();
            _npcSpawn.getLastSpawn().decayMe();
            _npcSpawn.getLastSpawn().spawnMe(_npcSpawn.getLastSpawn().getX(), _npcSpawn.getLastSpawn().getY(), _npcSpawn.getLastSpawn().getZ());
            
            _npcSpawn.getLastSpawn().broadcastPacket(new MagicSkillUse(_npcSpawn.getLastSpawn(), _npcSpawn.getLastSpawn(), 1034, 1, 1, 1));
        }
        catch (Exception e)
        {
            _log.warning("CTF Engine[spawnEventNpc("  activeChar.getName()  ")]: exception: "  e.getMessage());
        }
    }
    
    public static class BaseTeleportTask implements Runnable
    {
        L2PcInstance player;
        boolean onBegin;
        
        public BaseTeleportTask(L2PcInstance _player, boolean _onBegin)
        {
            player = _player;
            onBegin = _onBegin;
        }
        
        public BaseTeleportTask(boolean _onBegin)
        {
            onBegin = _onBegin;
        }
        
        @Override
        public void run()
        {
            if (CTF._teleport || CTF._started)
            {
                if (onBegin)
                {
                    spawnAllFlags();
                    
                    for (L2PcInstance players : _players)
                    {
                        new BaseTeleportTask(players, false).run();
                    }
                }
                else
                {
                    if (player != null)
                    {
                        player.teleToLocation(CTF._teamsX.get(CTF._teams.indexOf(player._teamNameCTF)), CTF._teamsY.get(CTF._teams.indexOf(player._teamNameCTF)), CTF._teamsZ.get(CTF._teams.indexOf(player._teamNameCTF)), false);
                    }
                }
            }
        }
    }
    
    private static void spawnEventNpc()
    {
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_npcId);
        
        try
        {
            _npcSpawn = new L2Spawn(tmpl);
            
            _npcSpawn.setLocx(_npcX);
            _npcSpawn.setLocy(_npcY);
            _npcSpawn.setLocz(_npcZ);
            _npcSpawn.setAmount(1);
            _npcSpawn.setHeading(_npcHeading);
            _npcSpawn.setRespawnDelay(1);
            
            SpawnTable.getInstance().addNewSpawn(_npcSpawn, false);
            
            _npcSpawn.init();
            _npcSpawn.getLastSpawn().getStatus().setCurrentHp(999999999);
            _npcSpawn.getLastSpawn().setTitle(_eventName);
            _npcSpawn.getLastSpawn()._isEventMobCTF = true;
            _npcSpawn.getLastSpawn().isAggressive();
            _npcSpawn.getLastSpawn().decayMe();
            _npcSpawn.getLastSpawn().spawnMe(_npcSpawn.getLastSpawn().getX(), _npcSpawn.getLastSpawn().getY(), _npcSpawn.getLastSpawn().getZ());
            
            _npcSpawn.getLastSpawn().broadcastPacket(new MagicSkillUse(_npcSpawn.getLastSpawn(), _npcSpawn.getLastSpawn(), 1034, 1, 1, 1));
        }
        catch (Exception e)
        {
            _log.warning("CTF Engine[spawnEventNpc(exception: "  e.getMessage());
        }
    }
    
    public static void teleportStart()
    {
        if (!_joining || _started || _teleport)
            return;
        
        if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && checkMinPlayers(_playersShuffle.size()))
        {
            removeOfflinePlayers();
            shuffleTeams();
        }
        else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && !checkMinPlayers(_playersShuffle.size()))
        {
            AnnounceToPlayers(true, "Not enough players for event. Min Requested : "  _minPlayers  ", Participating : "  _playersShuffle.size());
            return;
        }
        
        _joining = false;
        setUserData();
        
        if (Config.CTF_BASE_TELEPORT_FIRST)
        {
            AnnounceToPlayers(true, _eventName  "(CTF): Teleporting to team base. The fight will being in 20 seconds!");
            
            for (L2PcInstance player : _players)
            {
                if (player != null)
                {
                    if (Config.CTF_ON_START_UNSUMMON_PET)
                    {
                        //Remove Summon's buffs
                        if (player.getPet() != null)
                        {
                            L2Summon summon = player.getPet();
                            for (L2Effect e : summon.getAllEffects())
                                if (e != null)
                                    e.exit();
                            
                            if (summon instanceof L2PetInstance)
                                summon.unSummon(player);
                        }
                    }
                    
                    if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
                    {
                        for (L2Effect e : player.getAllEffects())
                        {
                            if (e != null)
                                e.exit();
                        }
                    }
                    
                    //Remove player from his party
                    if (player.getParty() != null)
                    {
                        L2Party party = player.getParty();
                        party.removePartyMember(player, null);
                    }
                    
                    player.teleToLocation(_teamsBaseX.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF)));
                }
            }
            ThreadPoolManager.getInstance().scheduleGeneral(new BaseTeleportTask(true), 20000);
        }
        else
        {
            AnnounceToPlayers(true, _eventName  "(CTF): Teleporting to team spot in 20 seconds!");
            
            ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
            {
                public void run()
                {
                    sit();
                    spawnAllFlags();
                    
                    for (L2PcInstance player : _players)
                    {
                        if (player != null)
                        {
                            if (Config.CTF_ON_START_UNSUMMON_PET)
                            {
                                //Remove Summon's buffs
                                if (player.getPet() != null)
                                {
                                    L2Summon summon = player.getPet();
                                    for (L2Effect e : summon.getAllEffects())
                                        if (e != null)
                                            e.exit();
                                    
                                    if (summon instanceof L2PetInstance)
                                        summon.unSummon(player);
                                }
                            }
                            
                            if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
                            {
                                for (L2Effect e : player.getAllEffects())
                                {
                                    if (e != null)
                                        e.exit();
                                }
                            }
                            
                            //Remove player from his party
                            if (player.getParty() != null)
                            {
                                L2Party party = player.getParty();
                                party.removePartyMember(player, null);
                            }
                            
                            player.teleToLocation(_teamsX.get(_teams.indexOf(player._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));
                        }
                    }
                }
            }, 20000);
        }
        _teleport = true;
    }
    
    public static boolean teleportAutoStart()
    {
        if (!_joining || _started || _teleport)
            return false;
        
        if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && checkMinPlayers(_playersShuffle.size()))
        {
            removeOfflinePlayers();
            shuffleTeams();
        }
        else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && !checkMinPlayers(_playersShuffle.size()))
        {
            AnnounceToPlayers(true, "Not enough players for event. Min Requested : "  _minPlayers  ", Participating : "  _playersShuffle.size());
            return false;
        }
        
        _joining = false;
        setUserData();
        
        if (Config.CTF_BASE_TELEPORT_FIRST)
        {
            AnnounceToPlayers(true, _eventName  "(CTF): Teleporting to team base. The fight will being in 20 seconds!");
            
            for (L2PcInstance player : _players)
            {
                if (player != null)
                {
                    if (Config.CTF_ON_START_UNSUMMON_PET)
                    {
                        //Remove Summon's buffs
                        if (player.getPet() != null)
                        {
                            L2Summon summon = player.getPet();
                            for (L2Effect e : summon.getAllEffects())
                                if (e != null)
                                    e.exit();
                            
                            if (summon instanceof L2PetInstance)
                                summon.unSummon(player);
                        }
                    }
                    
                    if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
                    {
                        for (L2Effect e : player.getAllEffects())
                        {
                            if (e != null)
                                e.exit();
                        }
                    }
                    
                    //Remove player from his party
                    if (player.getParty() != null)
                    {
                        L2Party party = player.getParty();
                        party.removePartyMember(player, null);
                    }
                    
                    player.teleToLocation(_teamsBaseX.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF)));
                }
            }
            ThreadPoolManager.getInstance().scheduleGeneral(new BaseTeleportTask(true), 30000);
        }
        else
        {
            AnnounceToPlayers(false, _eventName  "(CTF): Teleporting to team spot in 20 seconds!");
            
            ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
            {
                public void run()
                {
                    sit();
                    spawnAllFlags();
                    
                    for (L2PcInstance player : _players)
                    {
                        if (player != null)
                        {
                            if (Config.CTF_ON_START_UNSUMMON_PET)
                            {
                                //Remove Summon's buffs
                                if (player.getPet() != null)
                                {
                                    L2Summon summon = player.getPet();
                                    for (L2Effect e : summon.getAllEffects())
                                        if (e != null)
                                            e.exit();
                                    
                                    if (summon instanceof L2PetInstance)
                                        summon.unSummon(player);
                                }
                            }
                            
                            if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
                            {
                                for (L2Effect e : player.getAllEffects())
                                {
                                    if (e != null)
                                        e.exit();
                                }
                            }
                            
                            //Remove player from his party
                            if (player.getParty() != null)
                            {
                                L2Party party = player.getParty();
                                party.removePartyMember(player, null);
                            }
                            
                            player.teleToLocation(_teamsX.get(_teams.indexOf(player._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));
                        }
                    }
                }
            }, 20000);
        }
        _teleport = true;
        return true;
    }
    
    public static void startEvent(L2PcInstance activeChar)
    {
        if (!startEventOk())
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[startEvent("  activeChar.getName()  ")]: startEventOk() = false");
            return;
        }
        
        _teleport = false;
        
        _started = true;
        StartEvent();
    }
    
    public static void setJoinTime(int time)
    {
        _joinTime = time;
    }
    
    public static void setEventTime(int time)
    {
        _eventTime = time;
    }
    
    public static boolean startAutoEvent()
    {
        if (!startEventOk())
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[startEvent]: startEventOk() = false");
            return false;
        }
        
        _teleport = false;
        
        AnnounceToPlayers(true, _eventName  "(CTF): Started. Go Capture the Flags!");
        _started = true;
        return true;
    }
    
    public static synchronized void autoEvent()
    {
        if (startAutoJoin())
        {
            if (_joinTime > 0)
                waiter(_joinTime * 60 * 1000); // minutes for join event
            else if (_joinTime <= 0)
            {
                abortEvent();
                return;
            }
            if (teleportAutoStart())
            {
                waiter(1 * 30 * 1000); // 30 seconds wait time until start fight after teleported
                if (startAutoEvent())
                {
                    waiter(_eventTime * 60 * 1000); // minutes for event time
                    finishEvent();
                }
            }
            else if (!teleportAutoStart())
            {
                abortEvent();
            }
        }
    }
    
    // a scheduled time to remove the flag after a user set time _flagHoldTime
    private static void flagHoldTimer(final L2PcInstance _player, final long interval)
    {
        ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
        {
            @SuppressWarnings("null")
            public void run()
            {
                if (_started)
                {
                    try
                    // just to be sure 
                    {
                        long countDown = System.currentTimeMillis();
                        int seconds = (int) interval;
                        
                        while (countDown  (interval * 1000) > System.currentTimeMillis() && _flagsNotRemoved.get(_teams.indexOf(_player._teamNameCTF)) != false)
                        {
                            seconds--;
                            
                            switch (seconds)
                            {
                                case 600: //  10 minutes left 
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 10 minutes to capture the flag or it will be returned.");
                                    break;
                                case 300: // 5 minutes left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 5 minutes to capture the flag or it will be returned.");
                                    break;
                                case 240: // 4 minutes left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 5 minutes to capture the flag or it will be returned.");
                                    break;
                                case 180: // 3 minutes left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 3 minutes to capture the flag or it will be returned.");
                                    break;
                                case 120: // 2 minutes left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 2 minutes to capture the flag or it will be returned.");
                                    break;
                                case 60: // 1 minute left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 1 minute to capture the flag or it will be returned.");
                                    break;
                                case 30: // 30 seconds left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 30 seconds to capture the flag or it will be returned.");
                                    break;
                                case 10: // 10 seconds left
                                    if (_player != null && _player._haveFlagCTF)
                                        _player.sendMessage("You have 10 seconds to capture the flag or it will be returned.");
                                    break;
                                case 1: // 1 seconds left        
                                    if (_player != null && _player._haveFlagCTF)
                                    {
                                        removeFlagFromPlayer(_player);
                                        _flagsTaken.set(_teams.indexOf(_player._teamNameHaveFlagCTF), false);
                                        spawnFlag(_player._teamNameHaveFlagCTF);
                                        _player.sendMessage("You've held the flag for too long. The enemy flag has been returned.");
                                        AnnounceToPlayers(false, _eventName  "(CTF): "  _player.getName()  " held the flag for too long. "  _player._teamNameCTF  " flag has been returned.");
                                    }
                                    break;
                            }
                            long startOneSecondWaiterStartTime = System.currentTimeMillis();
                            
                            // only the try catch with Thread.sleep(1000) give bad countdown on high wait times
                            while (startOneSecondWaiterStartTime  1000 > System.currentTimeMillis())
                            {
                                try
                                {
                                    Thread.sleep(1);
                                }
                                catch (InterruptedException ie)
                                {
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        _log.warning("Exception: CTF.flagHoldTimer(): "  e.getMessage());
                    }
                }
            }
        }, 1);
    }
    
    private static synchronized void waiter(long interval)
    {
        long startWaiterTime = System.currentTimeMillis();
        int seconds = (int) (interval / 1000);
        
        while (startWaiterTime  interval > System.currentTimeMillis())
        {
            seconds--; // here because we don't want to see two time announce at the same time
            
            if (_joining || _started || _teleport)
            {
                switch (seconds)
                {
                    case 3600: // 1 hour left
                        if (_joining)
                        {
                            AnnounceToPlayers(true, _eventName  "(CTF): Joinable in "  _joiningLocationName  "!");
                            AnnounceToPlayers(true, "CTF Event: "  seconds / 60 / 60  " hour(s) till registration close!");
                        }
                        else if (_started)
                            AnnounceToPlayers(false, "CTF Event: "  seconds / 60 / 60  " hour(s) till event finish!");
                        
                        break;
                    case 1800: // 30 minutes left
                    case 600: //  10 minutes left 
                    case 180: // 3 minutes left
                    case 120: // 2 minutes left
                    case 60: // 1 minute left
                        if (_joining)
                        {
                            removeOfflinePlayers();
                            AnnounceToPlayers(true, _eventName  "(CTF): Joinable in "  _joiningLocationName  "!");
                            AnnounceToPlayers(true, "CTF Event: "  seconds / 60  " minute(s) till registration ends!");
                        }
                        else if (_started)
                            AnnounceToPlayers(false, "CTF Event: "  seconds / 60  " minute(s) till event ends!");
                        
                        break;
                    case 30: // 30 seconds left
                    case 10: // 10 seconds left
                    case 3: // 3 seconds left
                    case 2: // 2 seconds left
                    case 1: // 1 seconds left
                        if (_joining)
                            AnnounceToPlayers(true, "CTF Event: "  seconds  " second(s) till registration close!");
                        else if (_teleport)
                            AnnounceToPlayers(false, "CTF Event: "  seconds  " seconds(s) till fight starts!");
                        else if (_started)
                            AnnounceToPlayers(false, "CTF Event: "  seconds  " second(s) till event ends!");
                        
                        break;
                }
            }
            
            long startOneSecondWaiterStartTime = System.currentTimeMillis();
            
            // only the try catch with Thread.sleep(1000) give bad countdown on high wait times
            while (startOneSecondWaiterStartTime  1000 > System.currentTimeMillis())
            {
                try
                {
                    Thread.sleep(1);
                }
                catch (InterruptedException ie)
                {
                }
            }
        }
    }
    
    private static boolean startEventOk()
    {
        if (_joining || !_teleport || _started)
            return false;
        
        if (Config.CTF_EVEN_TEAMS.equals("NO") || Config.CTF_EVEN_TEAMS.equals("BALANCE"))
        {
            if (_teamPlayersCount.contains(0))
                return false;
        }
        else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE"))
        {
            Vector<L2PcInstance> playersShuffleTemp = new Vector<L2PcInstance>();
            int loopCount = 0;
            
            loopCount = _playersShuffle.size();
            
            for (int i = 0; i < loopCount; i)
            {
                if (_playersShuffle != null)
                    playersShuffleTemp.add(_playersShuffle.get(i));
            }
            
            _playersShuffle = playersShuffleTemp;
            playersShuffleTemp.clear();
            
            //  if (_playersShuffle.size() < (_teams.size()*2)){
            //      return false;
            //  }
        }
        
        return true;
    }
    
    public static void shuffleTeams()
    {
        int teamCount = 0, playersCount = 0;
        
        for (;;)
        {
            if (_playersShuffle.isEmpty())
                break;
            
            int playerToAddIndex = Rnd.nextInt(_playersShuffle.size());
            L2PcInstance player = null;
            player = _playersShuffle.get(playerToAddIndex);
            player._originalNameColorCTF = player.getAppearance().getNameColor();
            player._originalKarmaCTF = player.getKarma();
            
            _players.add(player);
            _players.get(playersCount)._teamNameCTF = _teams.get(teamCount);
            _savePlayers.add(_players.get(playersCount).getName());
            _savePlayerTeams.add(_teams.get(teamCount));
            playersCount;
            
            if (teamCount == _teams.size() - 1)
                teamCount = 0;
            else
                teamCount;
            
            _playersShuffle.remove(playerToAddIndex);
        }
    }
    
    public static void setUserData()
    {
        for (L2PcInstance player : _players)
        {
            player.getAppearance().setNameColor(_teamColors.get(_teams.indexOf(player._teamNameCTF)));
            player.setKarma(0);
            player.broadcastUserInfo();
        }
    }
    
    public static void finishEvent()
    {
        if (!finishEventOk())
        {
            if (Config.DEBUG)
                _log.fine("CTF Engine[finishEvent]: finishEventOk() = false");
            return;
        }
        
        _started = false;
        unspawnEventNpc();
        unspawnAllFlags();
        processTopTeam();
        
        if (_topScore != 0)
            playKneelAnimation(_topTeam);
        
        if (Config.CTF_ANNOUNCE_TEAM_STATS)
        {
            AnnounceToPlayers(true, _eventName  " Team Statistics:");
            for (String team : _teams)
            {
                int _flags_ = teamFlagCount(team);
                AnnounceToPlayers(true, "Team: "  team  " - Flags taken: "  _flags_);
            }
        }
        
        teleportFinish();
    }
    
    //show loosers and winners animations
    public static void playKneelAnimation(String teamName)
    {
        for (L2PcInstance player : _players)
        {
            if (player != null && player.isOnline() && player._inEventCTF == true)
            {
                if (!player._teamNameCTF.equals(teamName))
                {
                    player.broadcastPacket(new SocialAction(player.getObjectId(), 7));
                }
                else if (player._teamNameCTF.equals(teamName))
                {
                    player.broadcastPacket(new SocialAction(player.getObjectId(), 3));
                }
            }
        }
    }
    
    private static boolean finishEventOk()
    {
        if (!_started)
            return false;
        
        return true;
    }
    
    /* Erro nas mensagens
    public static void rewardTeam(String teamName)
    {                    
        for (L2PcInstance player : _players)
        {
            if (player != null)
            {
                if (player._teamNameCTF.equals(teamName))
                {
                    player.addItem("CTF Event: "  _eventName, _rewardId, _rewardAmount, player, true);

                    NpcHtmlMessage nhm = new NpcHtmlMessage(0);
                    TextBuilder replyMSG = new TextBuilder();
                    int count = 0;
                    
                    replyMSG.append("<html><body><center><font color=\"FF66OO\">PG-L][ Rare CTF Event</font><br>Your team won!<br></center>");
                    replyMSG.append("<center>-= <font color=\"99CC00\">Best Flag Runners</font> =-</center><br>");
                    replyMSG.append("<table width=\"200\" align=\"center\"><tr align=\"center\"><td>");
                    
                    for (String team : _teams)
                    {
                        replyMSG.append("<font color=\"LEVEL\">"  team  "</font>");
                        
                        for (L2PcInstance p : _players)
                        {
                                if (_playerScores.containsKey(p.getName()))
                                {
                                    if (p._teamNameCTF.equals(team))
                                    {
                                        replyMSG.append("<br>"  count  ". "  p.getName()  " - "  _playerScores.get(p.getName()));
                                    }
                                }
                        }
                        if (((_teams.indexOf(team)  1) % 2) != 0)
                        {
                            if (team == _teams.lastElement())
                                replyMSG.append("</td></tr></table></body></html>");
                            else 
                                replyMSG.append("</td><td>");
                        }
                        else
                        {
                            if (team == _teams.lastElement())
                                replyMSG.append("</td></tr></table></body></html>");
                            else
                                replyMSG.append("</td></tr><tr><td>");
                        }
                        count = 0;
                    }

                    nhm.setHtml(replyMSG.toString());
                    player.sendPacket(nhm);

                    // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
                    player.sendPacket(ActionFailed.STATIC_PACKET);
                }
                else
                {
                    NpcHtmlMessage nhm = new NpcHtmlMessage(0);
                    TextBuilder replyMSG = new TextBuilder();
                    int count = 0;

                    replyMSG.append("<html><body><center><font color=\"FF66OO\">PG-L][ Rare CTF Event</font><br>Better luck next time!<br></center>");
                    replyMSG.append("<center>-= <font color=\"99CC00\">Best Flag Runners</font> =-</center><br>");
                    replyMSG.append("<table width=\"200\" align=\"center\"><center><tr align=\"center\"><td>");
                    
                    for (String team : _teams)
                    {
                        replyMSG.append("<font color=\"LEVEL\">"  team  "</font>");
                        
                        for (L2PcInstance p : _players)
                        {
                                if (_playerScores.containsKey(p.getName()))
                                {
                                    if (p._teamNameCTF.equals(team))
                                    {
                                        replyMSG.append("<br>"  count  ". "  p.getName()  " - "  _playerScores.get(p.getName()));
                                    }
                                }
                        }
                        if (((_teams.indexOf(team)  1) % 2) != 0)
                        {
                            if (team == _teams.lastElement())
                                replyMSG.append("</td></tr></table></body></html>");
                            else 
                                replyMSG.append("</td><td>");
                        }
                        else
                        {
                            if (team == _teams.lastElement())
                                replyMSG.append("</td></tr></table></body></html>");
                            else
                                replyMSG.append("</td></tr><tr><td>");
                        }
                        count = 0;
                    }

                    nhm.setHtml(replyMSG.toString());
                    player.sendPacket(nhm);

                    // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
                    player.sendPacket(ActionFailed.STATIC_PACKET);
                }
            }
        }
    }
    */

    public static void rewardTeam(String teamName)
    {
        for (L2PcInstance player : _players)
        {
            if (player != null)
            {
                if (player._teamNameCTF.equals(teamName))
                {
                    player.addItem("CTF Event: "  _eventName, _rewardId, _rewardAmount, player, true);
                    
                    NpcHtmlMessage nhm = new NpcHtmlMessage(5);
                    TextBuilder replyMSG = new TextBuilder();
                    
                    replyMSG.append("<html><body>Your team wins the event. Look in your inventory for the reward.</body></html>");
                    
                    nhm.setHtml(replyMSG.toString());
                    player.sendPacket(nhm);
                    
                    // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
                    player.sendPacket(ActionFailed.STATIC_PACKET);
                }
            }
        }
    }
    
    public static void abortEvent()
    {
        if (!_joining && !_teleport && !_started)
        {
            GmListTable.broadcastMessageToGMs("Failed aborting CTF: No CTF instance has been started.");
            return;
        }
        
        if (_joining && !_teleport && !_started)
        {
            unspawnEventNpc();
            cleanCTF();
            _joining = false;
            AnnounceToPlayers(true, _eventName  "(CTF): Match aborted!");
            return;
        }
        _joining = false;
        _teleport = false;
        _started = false;
        unspawnEventNpc();
        unspawnAllFlags();
        AnnounceToPlayers(true, _eventName  "(CTF): Match aborted!");
        teleportFinish();
    }
    
    public static void sit()
    {
        if (_sitForced)
            _sitForced = false;
        else
            _sitForced = true;
        
        for (L2PcInstance player : _players)
        {
            if (player != null)
            {
                if (_sitForced)
                {
                    player.stopMove(null, false);
                    player.abortAttack();
                    player.abortCast();
                    
                    if (!player.isSitting())
                        player.sitDown();
                }
                else
                {
                    if (player.isSitting())
                        player.standUp();
                }
            }
        }
    }
    
    public static void dumpData()
    {
        _log.warning("");
        _log.warning("");
        
        if (!_joining && !_teleport && !_started)
        {
            _log.warning("<<---------------------------------->>");
            _log.warning(">> CTF Engine infos dump (INACTIVE) <<");
            _log.warning("<<--^----^^-----^----^^------^^----->>");
        }
        else if (_joining && !_teleport && !_started)
        {
            _log.warning("<<--------------------------------->>");
            _log.warning(">> CTF Engine infos dump (JOINING) <<");
            _log.warning("<<--^----^^-----^----^^------^----->>");
        }
        else if (!_joining && _teleport && !_started)
        {
            _log.warning("<<---------------------------------->>");
            _log.warning(">> CTF Engine infos dump (TELEPORT) <<");
            _log.warning("<<--^----^^-----^----^^------^^----->>");
        }
        else if (!_joining && !_teleport && _started)
        {
            _log.warning("<<--------------------------------->>");
            _log.warning(">> CTF Engine infos dump (STARTED) <<");
            _log.warning("<<--^----^^-----^----^^------^----->>");
        }
        
        _log.warning("Name: "  _eventName);
        _log.warning("Desc: "  _eventDesc);
        _log.warning("Join location: "  _joiningLocationName);
        _log.warning("Min lvl: "  _minlvl);
        _log.warning("Max lvl: "  _maxlvl);
        _log.warning("");
        _log.warning("##########################");
        _log.warning("# _teams(Vector<String>) #");
        _log.warning("##########################");
        
        for (String team : _teams)
            _log.warning(team  " Flags Taken :"  _teamPointsCount.get(_teams.indexOf(team)));
        
        if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE"))
        {
            _log.warning("");
            _log.warning("#########################################");
            _log.warning("# _playersShuffle(Vector<L2PcInstance>) #");
            _log.warning("#########################################");
            
            for (L2PcInstance player : _playersShuffle)
            {
                if (player != null)
                    _log.warning("Name: "  player.getName());
            }
        }
        
        _log.warning("");
        _log.warning("##################################");
        _log.warning("# _players(Vector<L2PcInstance>) #");
        _log.warning("##################################");
        
        for (L2PcInstance player : _players)
        {
            if (player != null)
                _log.warning("Name: "  player.getName()  "   Team: "  player._teamNameCTF  "  Flags :"  player._countCTFflags);
        }
        
        _log.warning("");
        _log.warning("#####################################################################");
        _log.warning("# _savePlayers(Vector<String>) and _savePlayerTeams(Vector<String>) #");
        _log.warning("#####################################################################");
        
        for (String player : _savePlayers)
            _log.warning("Name: "  player  "    Team: "  _savePlayerTeams.get(_savePlayers.indexOf(player)));
        
        _log.warning("");
        _log.warning("");
        _log.warning("**********==CTF==************");
        _log.warning("CTF._teamPointsCount:"  _teamPointsCount.toString());
        _log.warning("CTF._flagIds:"  _flagIds.toString());
        _log.warning("CTF._flagSpawns:"  _flagSpawns.toString());
        _log.warning("CTF._throneSpawns:"  _throneSpawns.toString());
        _log.warning("CTF._flagsTaken:"  _flagsTaken.toString());
        _log.warning("CTF._flagsX:"  _flagsX.toString());
        _log.warning("CTF._flagsY:"  _flagsY.toString());
        _log.warning("CTF._flagsZ:"  _flagsZ.toString());
        _log.warning("************EOF**************");
        _log.warning("");
    }
    
    public static void loadData()
    {
        _eventName = new String();
        _eventDesc = new String();
        _topTeam = new String();
        _joiningLocationName = new String();
        _teams = new Vector<String>();
        _savePlayers = new Vector<String>();
        _savePlayerTeams = new Vector<String>();
        _players = new Vector<L2PcInstance>();
        _playersShuffle = new Vector<L2PcInstance>();
        _teamPlayersCount = new Vector<Integer>();
        _teamPointsCount = new Vector<Integer>();
        _teamColors = new Vector<Integer>();
        _teamsX = new Vector<Integer>();
        _teamsY = new Vector<Integer>();
        _teamsZ = new Vector<Integer>();
        _teamsBaseX = new Vector<Integer>();
        _teamsBaseY = new Vector<Integer>();
        _teamsBaseZ = new Vector<Integer>();
        _playerScores = new FastMap<String, Integer>();
        
        _throneSpawns = new Vector<L2Spawn>();
        _flagSpawns = new Vector<L2Spawn>();
        _flagsTaken = new Vector<Boolean>();
        _flagIds = new Vector<Integer>();
        _flagsX = new Vector<Integer>();
        _flagsY = new Vector<Integer>();
        _flagsZ = new Vector<Integer>();
        _flagsNotRemoved = new Vector<Boolean>();
        
        _joining = false;
        _teleport = false;
        _started = false;
        _sitForced = false;
        _npcId = 0;
        _npcX = 0;
        _npcY = 0;
        _npcZ = 0;
        _npcHeading = 0;
        _rewardId = 0;
        _rewardAmount = 0;
        _topScore = 0;
        _minlvl = 0;
        _maxlvl = 0;
        _joinTime = 0;
        _eventTime = 0;
        _minPlayers = 0;
        _maxPlayers = 0;
        _flagHoldTime = 0;
        
        Connection con = null;
        try
        {
            PreparedStatement statement;
            ResultSet rs;
            
            con = L2DatabaseFactory.getInstance().getConnection();
            
            statement = con.prepareStatement("Select * from ctf");
            rs = statement.executeQuery();
            
            int teams = 0;
            
            while (rs.next())
            {
                _eventName = rs.getString("eventName");
                _eventDesc = rs.getString("eventDesc");
                _joiningLocationName = rs.getString("joiningLocation");
                _minlvl = rs.getInt("minlvl");
                _maxlvl = rs.getInt("maxlvl");
                _npcId = rs.getInt("npcId");
                _npcX = rs.getInt("npcX");
                _npcY = rs.getInt("npcY");
                _npcZ = rs.getInt("npcZ");
                _npcHeading = rs.getInt("npcHeading");
                _rewardId = rs.getInt("rewardId");
                _rewardAmount = rs.getInt("rewardAmount");
                teams = rs.getInt("teamsCount");
                _joinTime = rs.getInt("joinTime");
                _eventTime = rs.getInt("eventTime");
                _minPlayers = rs.getInt("minPlayers");
                _maxPlayers = rs.getInt("maxPlayers");
                _flagHoldTime = rs.getInt("flagHoldTime");
            }
            statement.close();
            
            int index = -1;
            if (teams > 0)
                index = 0;
            while (index < teams && index > -1)
            {
                statement = con.prepareStatement("Select * from ctf_teams where teamId = ?");
                statement.setInt(1, index);
                rs = statement.executeQuery();
                while (rs.next())
                {
                    _teams.add(rs.getString("teamName"));
                    _teamPlayersCount.add(0);
                    _teamPointsCount.add(0);
                    _teamColors.add(0);
                    _teamsX.add(0);
                    _teamsY.add(0);
                    _teamsZ.add(0);
                    _teamsX.set(index, rs.getInt("teamX"));
                    _teamsY.set(index, rs.getInt("teamY"));
                    _teamsZ.set(index, rs.getInt("teamZ"));
                    _teamColors.set(index, rs.getInt("teamColor"));
                    _flagsX.add(0);
                    _flagsY.add(0);
                    _flagsZ.add(0);
                    _flagsX.set(index, rs.getInt("flagX"));
                    _flagsY.set(index, rs.getInt("flagY"));
                    _flagsZ.set(index, rs.getInt("flagZ"));
                    if (Config.CTF_BASE_TELEPORT_FIRST)
                    {
                        _teamsBaseX.add(0);
                        _teamsBaseY.add(0);
                        _teamsBaseZ.add(0);
                        _teamsBaseX.set(index, rs.getInt("teamBaseX"));
                        _teamsBaseY.set(index, rs.getInt("teamBaseY"));
                        _teamsBaseZ.set(index, rs.getInt("teamBaseZ"));
                    }
                    _flagSpawns.add(null);
                    _flagIds.add(_FlagNPC);
                    _flagsTaken.add(false);
                    _flagsNotRemoved.add(false);
                }
                index;
                statement.close();
            }
        }
        catch (Exception e)
        {
            _log.warning("Exception: CTF.loadData(): "  e.getMessage());
        }
        finally
        {
            try
            {
                if (con != null)
                    con.close();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }
    
    public static void saveData()
    {
        Connection con = null;
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement;
            
            statement = con.prepareStatement("Delete from ctf");
            statement.execute();
            statement.close();
            
            statement = con.prepareStatement("INSERT INTO ctf (eventName, eventDesc, joiningLocation, minlvl, maxlvl, npcId, npcX, npcY, npcZ, npcHeading, rewardId, rewardAmount, teamsCount, joinTime, eventTime, minPlayers, maxPlayers, flagHoldTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
            statement.setString(1, _eventName);
            statement.setString(2, _eventDesc);
            statement.setString(3, _joiningLocationName);
            statement.setInt(4, _minlvl);
            statement.setInt(5, _maxlvl);
            statement.setInt(6, _npcId);
            statement.setInt(7, _npcX);
            statement.setInt(8, _npcY);
            statement.setInt(9, _npcZ);
            statement.setInt(10, _npcHeading);
            statement.setInt(11, _rewardId);
            statement.setInt(12, _rewardAmount);
            statement.setInt(13, _teams.size());
            statement.setInt(14, _joinTime);
            statement.setInt(15, _eventTime);
            statement.setInt(16, _minPlayers);
            statement.setInt(17, _maxPlayers);
            statement.setLong(18, _flagHoldTime);
            statement.execute();
            statement.close();
            
            statement = con.prepareStatement("Delete from ctf_teams");
            statement.execute();
            statement.close();
            
            for (String teamName : _teams)
            {
                int index = _teams.indexOf(teamName);
                
                if (index == -1)
                    return;
                if (Config.CTF_BASE_TELEPORT_FIRST)
                {
                    statement = con.prepareStatement("INSERT INTO ctf_teams (teamId ,teamName, teamX, teamY, teamZ, teamColor, flagX, flagY, flagZ, teamBaseX, teamBaseY, teamBaseZ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    statement.setInt(1, index);
                    statement.setString(2, teamName);
                    statement.setInt(3, _teamsX.get(index));
                    statement.setInt(4, _teamsY.get(index));
                    statement.setInt(5, _teamsZ.get(index));
                    statement.setInt(6, _teamColors.get(index));
                    statement.setInt(7, _flagsX.get(index));
                    statement.setInt(8, _flagsY.get(index));
                    statement.setInt(9, _flagsZ.get(index));
                    statement.setInt(10, _teamsBaseX.get(index));
                    statement.setInt(11, _teamsBaseY.get(index));
                    statement.setInt(12, _teamsBaseZ.get(index));
                    statement.execute();
                    statement.close();
                }
                else
                {
                    statement = con.prepareStatement("INSERT INTO ctf_teams (teamId ,teamName, teamX, teamY, teamZ, teamColor, flagX, flagY, flagZ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    statement.setInt(1, index);
                    statement.setString(2, teamName);
                    statement.setInt(3, _teamsX.get(index));
                    statement.setInt(4, _teamsY.get(index));
                    statement.setInt(5, _teamsZ.get(index));
                    statement.setInt(6, _teamColors.get(index));
                    statement.setInt(7, _flagsX.get(index));
                    statement.setInt(8, _flagsY.get(index));
                    statement.setInt(9, _flagsZ.get(index));
                    statement.execute();
                    statement.close();
                }
            }
        }
        catch (Exception e)
        {
            _log.warning("Exception: CTF.saveData(): "  e.getMessage());
        }
        finally
        {
            try
            {
                if (con != null)
                    con.close();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }
    
    public static void showEventHtml(L2PcInstance eventPlayer, String objectId)
    {
        try
        {
            NpcHtmlMessage adminReply = new NpcHtmlMessage(0);
            TextBuilder replyMSG = new TextBuilder();
            
            replyMSG.append("<html><body>");
            replyMSG.append("CTF Match<br><br><br>");
            replyMSG.append("Current event...<br>");
            replyMSG.append("   ... description:&nbsp;<font color=\"00FF00\">"  _eventDesc  "</font><br>");
            if (Config.CTF_ANNOUNCE_REWARD)
                replyMSG.append("   ... reward: ("  _rewardAmount  ") "  ItemTable.getInstance().getTemplate(_rewardId).getName()  "<br>");
            
            if (!_started && !_joining)
                replyMSG.append("<center>Wait till the admin/gm start the participation.</center>");
            else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && !checkMaxPlayers(_playersShuffle.size()))
            {
                if (!CTF._started)
                {
                    replyMSG.append("<font color=\"FFFF00\">The event has reached its maximum capacity.</font><br>Keep checking, someone may crit and you can steal their spot.");
                }
            }
            else if (eventPlayer.isCursedWeaponEquipped() && !Config.CTF_JOIN_CURSED)
            {
                replyMSG.append("<font color=\"FFFF00\">You can't participate in this event with a cursed Weapon.</font><br>");
            }
            else if (!_started && _joining && eventPlayer.getLevel() >= _minlvl && eventPlayer.getLevel() <= _maxlvl)
            {
                if (_players.contains(eventPlayer) || checkShufflePlayers(eventPlayer))
                {
                    if (Config.CTF_EVEN_TEAMS.equals("NO") || Config.CTF_EVEN_TEAMS.equals("BALANCE"))
                        replyMSG.append("You are already participating in team <font color=\"LEVEL\">"  eventPlayer._teamNameCTF  "</font><br><br>");
                    else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE"))
                        replyMSG.append("You are already participating!<br><br>");
                    
                    replyMSG.append("<table border=\"0\"><tr>");
                    replyMSG.append("<td width=\"200\">Wait till event start or</td>");
                    replyMSG.append("<td width=\"60\"><center><button value=\"remove\" action=\"bypass -h npc_"  objectId  "_ctf_player_leave\" width=50 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></center></td>");
                    replyMSG.append("<td width=\"100\">your participation!</td>");
                    replyMSG.append("</tr></table>");
                }
                else
                {
                    replyMSG.append("<td width=\"200\">Your level : <font color=\"00FF00\">"  eventPlayer.getLevel()  "</font></td><br>");
                    replyMSG.append("<td width=\"200\">Min level : <font color=\"00FF00\">"  _minlvl  "</font></td><br>");
                    replyMSG.append("<td width=\"200\">Max level : <font color=\"00FF00\">"  _maxlvl  "</font></td><br><br>");
                    
                    if (Config.CTF_EVEN_TEAMS.equals("NO") || Config.CTF_EVEN_TEAMS.equals("BALANCE"))
                    {
                        replyMSG.append("<center><table border=\"0\">");
                        
                        for (String team : _teams)
                        {
                            replyMSG.append("<tr><td width=\"100\"><font color=\"LEVEL\">"  team  "</font>&nbsp;("  teamPlayersCount(team)  " joined)</td>");
                            replyMSG.append("<td width=\"60\"><button value=\"Join\" action=\"bypass -h npc_"  objectId  "_ctf_player_join "  team  "\" width=50 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
                        }
                        
                        replyMSG.append("</table></center>");
                    }
                    else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE"))
                    {
                        replyMSG.append("<center><table border=\"0\">");
                        
                        for (String team : _teams)
                            replyMSG.append("<tr><td width=\"100\"><font color=\"LEVEL\">"  team  "</font></td>");
                        
                        replyMSG.append("</table></center><br>");
                        
                        replyMSG.append("<button value=\"Join\" action=\"bypass -h npc_"  objectId  "_ctf_player_join eventShuffle\" width=50 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
                        replyMSG.append("Teams will be randomly generated!");
                    }
                }
            }
            else if (_started && !_joining)
                replyMSG.append("<center>CTF match is in progress.</center>");
            else if (eventPlayer.getLevel() < _minlvl || eventPlayer.getLevel() > _maxlvl)
            {
                replyMSG.append("Your lvl : <font color=\"00FF00\">"  eventPlayer.getLevel()  "</font><br>");
                replyMSG.append("Min level : <font color=\"00FF00\">"  _minlvl  "</font><br>");
                replyMSG.append("Max level : <font color=\"00FF00\">"  _maxlvl  "</font><br><br>");
                replyMSG.append("<font color=\"FFFF00\">You can't participatein this event.</font><br>");
            }
            // Show how many players joined & how many are still needed to join
            replyMSG.append("<br>There are "  _playersShuffle.size()  " player(s) participating in this event.<br>");
            if (_joining)
            {
                if (_playersShuffle.size() < _minPlayers)
                {
                    int playersNeeded = _minPlayers - _playersShuffle.size();
                    replyMSG.append("The event will not start unless "  playersNeeded  " more player(s) joins!");
                }
            }
            
            replyMSG.append("</body></html>");
            adminReply.setHtml(replyMSG.toString());
            eventPlayer.sendPacket(adminReply);
            
            // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
            eventPlayer.sendPacket(ActionFailed.STATIC_PACKET);
        }
        catch (Exception e)
        {
            _log.warning("CTF Engine[showEventHtlm("  eventPlayer.getName()  ", "  objectId  ")]: exception"  e.getMessage());
        }
    }
    
    public static void addPlayer(L2PcInstance player, String teamName)
    {
        if (!addPlayerOk(teamName, player))
            return;
        
        if (Config.CTF_EVEN_TEAMS.equals("NO") || Config.CTF_EVEN_TEAMS.equals("BALANCE"))
        {
            player._teamNameCTF = teamName;
            _players.add(player);
            setTeamPlayersCount(teamName, teamPlayersCount(teamName)  1);
        }
        else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE"))
            _playersShuffle.add(player);
        
        player._inEventCTF = true;
        player._countCTFflags = 0;
    }
    
    public static synchronized void removeOfflinePlayers()
    {
        try
        {
            if (_playersShuffle == null)
                return;
            else if (_playersShuffle.isEmpty())
                return;
            else if (_playersShuffle.size() > 0)
            {
                for (L2PcInstance player : _playersShuffle)
                {
                    if (player == null)
                        _playersShuffle.remove(player);
                    else if (!player.isOnline() || player.isInJail())
                        removePlayer(player);
                    if (_playersShuffle.size() == 0 || _playersShuffle.isEmpty())
                        break;
                }
            }
        }
        catch (Exception e)
        {
            _log.warning("CTF Engine exception: "  e.getMessage());
            return;
        }
    }
    
    public static boolean checkShufflePlayers(L2PcInstance eventPlayer)
    {
        try
        {
            for (L2PcInstance player : _playersShuffle)
            {
                if (player == null || !player.isOnline())
                {
                    _playersShuffle.remove(player);
                    eventPlayer._inEventCTF = false;
                    continue;
                }
                else if (player.getObjectId() == eventPlayer.getObjectId())
                {
                    eventPlayer._inEventCTF = true;
                    eventPlayer._countCTFflags = 0;
                    return true;
                }
                //this 1 is incase player got new objectid after DC or reconnect
                else if (player.getName().equals(eventPlayer.getName()))
                {
                    _playersShuffle.remove(player);
                    _playersShuffle.add(eventPlayer);
                    eventPlayer._inEventCTF = true;
                    eventPlayer._countCTFflags = 0;
                    return true;
                }
            }
        }
        catch (Exception e)
        {
        }
        return false;
    }
    
    public static boolean addPlayerOk(String teamName, L2PcInstance eventPlayer)
    {
        try
        {
            if (checkShufflePlayers(eventPlayer) || eventPlayer._inEventCTF)
            {
                eventPlayer.sendMessage("You are already participating in the event!");
                return false;
            }
            
            for (L2PcInstance player : _players)
            {
                if (player.getObjectId() == eventPlayer.getObjectId())
                {
                    eventPlayer.sendMessage("You are already participating in the event!");
                    return false;
                }
                else if (player.getName() == eventPlayer.getName())
                {
                    eventPlayer.sendMessage("You are already participating in the event!");
                    return false;
                }
            }
            if (_players.contains(eventPlayer))
            {
                eventPlayer.sendMessage("You are already participating in the event!");
                return false;
            }
        }
        catch (Exception e)
        {
            _log.warning("CTF Siege Engine exception: "  e.getMessage());
        }
        
        if (Config.CTF_EVEN_TEAMS.equals("NO"))
            return true;
        else if (Config.CTF_EVEN_TEAMS.equals("BALANCE"))
        {
            boolean allTeamsEqual = true;
            int countBefore = -1;
            
            for (int playersCount : _teamPlayersCount)
            {
                if (countBefore == -1)
                    countBefore = playersCount;
                
                if (countBefore != playersCount)
                {
                    allTeamsEqual = false;
                    break;
                }
                
                countBefore = playersCount;
            }
            
            if (allTeamsEqual)
                return true;
            
            countBefore = Integer.MAX_VALUE;
            
            for (int teamPlayerCount : _teamPlayersCount)
            {
                if (teamPlayerCount < countBefore)
                    countBefore = teamPlayerCount;
            }
            
            Vector<String> joinableTeams = new Vector<String>();
            
            for (String team : _teams)
            {
                if (teamPlayersCount(team) == countBefore)
                    joinableTeams.add(team);
            }
            
            if (joinableTeams.contains(teamName))
                return true;
        }
        else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE"))
            return true;
        
        eventPlayer.sendMessage("Too many players in team \""  teamName  "\"");
        return false;
    }
    
    public static synchronized void addDisconnectedPlayer(L2PcInstance player)
    {
        /*
         * !!! CAUTION !!!
         * Do NOT fix multiple object Ids on this event or you will ruin the flag reposition check!!!
         * All Multiple object Ids will be collected by the Garbage Collector, after the event ends, memory sweep is made!!!
         */

        if ((Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && (_teleport || _started)) || (Config.CTF_EVEN_TEAMS.equals("NO") || Config.CTF_EVEN_TEAMS.equals("BALANCE") && (_teleport || _started)))
        {
            if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
            {
                for (L2Effect e : player.getAllEffects())
                {
                    if (e != null)
                        e.exit();
                }
            }
            
            player._teamNameCTF = _savePlayerTeams.get(_savePlayers.indexOf(player.getName()));
            for (L2PcInstance p : _players)
            {
                if (p == null)
                {
                    continue;
                }
                //check by name incase player got new objectId
                else if (p.getName().equals(player.getName()))
                {
                    player._originalNameColorCTF = player.getAppearance().getNameColor();
                    player._originalKarmaCTF = player.getKarma();
                    player._inEventCTF = true;
                    player._countCTFflags = p._countCTFflags;
                    _players.remove(p); //removing old object id from vector
                    _players.add(player); //adding new objectId to vector
                    break;
                }
            }
            player.getAppearance().setNameColor(_teamColors.get(_teams.indexOf(player._teamNameCTF)));
            player.setKarma(0);
            player.broadcastUserInfo();
            if (Config.CTF_BASE_TELEPORT_FIRST)
            {
                player.sendMessage("We missed you! You will be sent back into battle in 10 seconds!");
                
                player.teleToLocation(_teamsBaseX.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF)), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF)));
                
                ThreadPoolManager.getInstance().scheduleGeneral(new BaseTeleportTask(player, false), 10000);
            }
            else
            {
                player.teleToLocation(_teamsX.get(_teams.indexOf(player._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));
            }
            Started(player);
            CheckRestoreFlags();
        }
    }
    
    public static void removePlayer(L2PcInstance player)
    {
        if (player._inEventCTF)
        {
            if (!_joining)
            {
                player.getAppearance().setNameColor(player._originalNameColorCTF);
                player.setKarma(player._originalKarmaCTF);
                player.broadcastUserInfo();
            }
            player._teamNameCTF = new String();
            player._countCTFflags = 0;
            player._inEventCTF = false;
            
            if ((Config.CTF_EVEN_TEAMS.equals("NO") || Config.CTF_EVEN_TEAMS.equals("BALANCE")) && _players.contains(player))
            {
                setTeamPlayersCount(player._teamNameCTF, teamPlayersCount(player._teamNameCTF) - 1);
                _players.remove(player);
            }
            else if (Config.CTF_EVEN_TEAMS.equals("SHUFFLE") && (!_playersShuffle.isEmpty() && _playersShuffle.contains(player)))
                _playersShuffle.remove(player);
        }
    }
    
    public static void cleanCTF()
    {
        _log.warning("CTF : Cleaning players.");
        for (L2PcInstance player : _players)
        {
            if (player != null)
            {
                if (player._haveFlagCTF)
                    removeFlagFromPlayer(player);
                else
                    player.getInventory().destroyItemByItemId("", CTF._FLAG_IN_HAND_ITEM_ID, 1, player, null);
                player._haveFlagCTF = false;
                removePlayer(player);
                if (_savePlayers.contains(player.getName()))
                    _savePlayers.remove(player.getName());
                player._inEventCTF = false;
            }
        }
        if (_playersShuffle != null && !_playersShuffle.isEmpty())
        {
            for (L2PcInstance player : _playersShuffle)
            {
                if (player != null)
                    player._inEventCTF = false;
            }
        }
        _log.warning("CTF : Cleaning teams and flags.");
        for (String team : _teams)
        {
            int index = _teams.indexOf(team);
            _teamPointsCount.set(index, 0);
            _flagSpawns.set(index, null);
            _flagsTaken.set(index, false);
            _teamPlayersCount.set(index, 0);
            _teamPointsCount.set(index, 0);
            _flagsNotRemoved.set(index, false);
        }
        _topScore = 0;
        _topTeam = new String();
        _players = new Vector<L2PcInstance>();
        _playersShuffle = new Vector<L2PcInstance>();
        _savePlayers = new Vector<String>();
        _savePlayerTeams = new Vector<String>();
        _teamPointsCount = new Vector<Integer>();
        _flagSpawns = new Vector<L2Spawn>();
        _flagsTaken = new Vector<Boolean>();
        _teamPlayersCount = new Vector<Integer>();
        _flagsNotRemoved = new Vector<Boolean>();
        _playerScores = new FastMap<String, Integer>();
        _log.warning("Cleaning CTF done.");
        _log.warning("Loading new data from MySql");
        loadData();
    }
    
    public static void unspawnEventNpc()
    {
        if (_npcSpawn == null)
            return;
        
        _npcSpawn.getLastSpawn().deleteMe();
        _npcSpawn.stopRespawn();
        SpawnTable.getInstance().deleteSpawn(_npcSpawn, true);
    }
    
    public static void teleportFinish()
    {
        AnnounceToPlayers(false, _eventName  "(CTF): Teleport back to participation NPC in 20 seconds!");
        ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
        {
            public void run()
            {
                for (L2PcInstance player : _players)
                {
                    if (player != null)
                    {
                        if (player.isOnline())
                            player.teleToLocation(_npcX, _npcY, _npcZ, false);
                        else
                        {
                            Connection con = null;
                            try
                            {
                                con = L2DatabaseFactory.getInstance().getConnection();
                                
                                PreparedStatement statement = con.prepareStatement("UPDATE characters SET x=?, y=?, z=? WHERE char_name=?");
                                statement.setInt(1, _npcX);
                                statement.setInt(2, _npcY);
                                statement.setInt(3, _npcZ);
                                statement.setString(4, player.getName());
                                statement.execute();
                                statement.close();
                            }
                            catch (SQLException se)
                            {
                                _log.warning("CTF Engine exception: "  se.getMessage());
                            }
                            finally
                            {
                                try
                                {
                                    if (con != null)
                                        con.close();
                                }
                                catch (SQLException e)
                                {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                }
                cleanCTF();
            }
        }, 20000);
    }
    
    public static int teamFlagCount(String teamName)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return -1;
        
        return _teamPointsCount.get(index);
    }
    
    public static void setTeamFlagCount(String teamName, int teamFlagCount)
    {
        int index = _teams.indexOf(teamName);
        
        if (index == -1)
            return;
        
        _teamPointsCount.set(index, teamFlagCount);
    }
    
    /**
     * Used to calculate the event CTF area, so that players don't run off with the flag.
     * Essential, since a player may take the flag just so other teams can't score points.
     * This function is Only called upon ONE time on BEGINING OF EACH EVENT right after we spawn the flags.
     */
    private static void calculateOutSideOfCTF()
    {
        if (_teams == null || _flagSpawns == null || _teamsX == null || _teamsY == null || _teamsZ == null)
            return;
        
        int division = _teams.size() * 2, pos = 0;
        int[] locX = new int[division], locY = new int[division], locZ = new int[division];
        //Get all coordinates inorder to create a polygon:
        for (L2Spawn flag : _flagSpawns)
        {
            locX[pos] = flag.getLocx();
            locY[pos] = flag.getLocy();
            locZ[pos] = flag.getLocz();
            pos;
            if (pos > division / 2)
                break;
        }
        
        for (int x = 0; x < _teams.size(); x)
        {
            locX[pos] = _teamsX.get(x);
            locY[pos] = _teamsY.get(x);
            locZ[pos] = _teamsZ.get(x);
            pos;
            if (pos > division)
                break;
        }
        
        //find the polygon center, note that it's not the mathematical center of the polygon, 
        //rather than a point which centers all coordinates:
        int centerX = 0, centerY = 0, centerZ = 0;
        for (int x = 0; x < pos; x)
        {
            centerX = (locX[x] / division);
            centerY = (locY[x] / division);
            centerZ = (locZ[x] / division);
        }
        
        //now let's find the furthest distance from the "center" to the egg shaped sphere 
        //surrounding the polygon, size x1.5 (for maximum logical area to wander...):
        int maxX = 0, maxY = 0, maxZ = 0;
        for (int x = 0; x < pos; x)
        {
            if (maxX < 2 * Math.abs(centerX - locX[x]))
                maxX = (2 * Math.abs(centerX - locX[x]));
            if (maxY < 2 * Math.abs(centerY - locY[x]))
                maxY = (2 * Math.abs(centerY - locY[x]));
            if (maxZ < 2 * Math.abs(centerZ - locZ[x]))
                maxZ = (2 * Math.abs(centerZ - locZ[x]));
        }
        
        //centerX,centerY,centerZ are the coordinates of the "event center".
        //so let's save those coordinates to check on the players:
        eventCenterX = centerX;
        eventCenterY = centerY;
        eventCenterZ = centerZ;
        eventOffset = maxX;
        if (eventOffset < maxY)
            eventOffset = maxY;
        if (eventOffset < maxZ)
            eventOffset = maxZ;
    }
    
    public static boolean isOutsideCTFArea(L2PcInstance _player)
    {
        if (_player == null || !_player.isOnline())
            return true;
        if (!(_player.getX() > eventCenterX - eventOffset && _player.getX() < eventCenterX  eventOffset && _player.getY() > eventCenterY - eventOffset && _player.getY() < eventCenterY  eventOffset && _player.getZ() > eventCenterZ - eventOffset && _player.getZ() < eventCenterZ  eventOffset))
            return true;
        return false;
    }
}]]></description>
			<content:encoded><![CDATA[<div>bueno tengo unos errores q no se como sulucionarlo he intentado todo las soluciones q dicen en el foro pero nada de nada q me soluciona uso l2jserver h5 version=5320M y uso la guia <a href="http://elitezone.es/foro/showthread.php?t=2219&amp;highlight=npc" target="_blank">http://elitezone.es/foro/showthread....&amp;highlight=npc</a>  le agradecerimucho la ayuda plis<br />
<br />
esto me muestra el eclipse<br />
<br />
<div>
    <div class="pre-spoiler">
    <span style="float:left; padding-top: 2px;">Spoiler</span> <input type="button" value="Ver contenido oculto" style="width:150px;font-size:10px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';this.innerText = ''; this.value = 'Ocultar el contenido visible'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.value = 'Ver contenido oculto';}">
    </div>
    <div>
        <div class="spoiler" style="display: none;">Buildfile: D:\Nueva carpeta (4)\L2J_Server\build.xml<br />
clean:<br />
   [delete] Deleting directory D:\Nueva carpeta (4)\L2J_Server\build<br />
checkRequirements:<br />
getChangelogDateVersion:<br />
init:<br />
    [mkdir] Created dir: D:\Nueva carpeta (4)\L2J_Server\build<br />
    [mkdir] Created dir: D:\Nueva carpeta (4)\L2J_Server\build\classes<br />
compile:<br />
    [javac] Compiling 1562 source files to D:\Nueva carpeta (4)\L2J_Server\build\classes<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:98: error: ')' expected<br />
    [javac]             replyMSG.append(&quot;&lt;font color=\&quot;00FF00\&quot;&gt;&quot;  teamName  &quot;'s Flag&lt;/font&gt;&lt;br&gt;&quot;);<br />
    [javac]                                                      ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:98: error: not a statement<br />
    [javac]             replyMSG.append(&quot;&lt;font color=\&quot;00FF00\&quot;&gt;&quot;  teamName  &quot;'s Flag&lt;/font&gt;&lt;br&gt;&quot;);<br />
    [javac]                                                                  ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:98: error: ';' expected<br />
    [javac]             replyMSG.append(&quot;&lt;font color=\&quot;00FF00\&quot;&gt;&quot;  teamName  &quot;'s Flag&lt;/font&gt;&lt;br&gt;&quot;);<br />
    [javac]                                                                                      ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:115: error: ')' expected<br />
    [javac]             _log.warning(&quot;&quot;  &quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception: &quot;  e.getStackTrace());<br />
    [javac]                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:115: error: ';' expected<br />
    [javac]             _log.warning(&quot;&quot;  &quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                                ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:115: error: not a statement<br />
    [javac]             _log.warning(&quot;&quot;  &quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                                        ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:115: error: ';' expected<br />
    [javac]             _log.warning(&quot;&quot;  &quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                                                ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:115: error: ';' expected<br />
    [javac]             _log.warning(&quot;&quot;  &quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                                                                                      ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:131: error: ')' expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player.getName()  &quot; logged off with a CTF flag!&quot;);<br />
    [javac]                                                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:131: error: ';' expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player.getName()  &quot; logged off with a CTF flag!&quot;);<br />
    [javac]                                                                                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:139: error: ')' expected<br />
    [javac]                                 AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
    [javac]                                                                    ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:139: error: not a statement<br />
    [javac]                                 AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
    [javac]                                                                                       ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:139: error: ';' expected<br />
    [javac]                                 AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
    [javac]                                                                                                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:162: error: ')' expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  team  &quot; flag returned due to player error.&quot;);<br />
    [javac]                                                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:162: error: not a statement<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  team  &quot; flag returned due to player error.&quot;);<br />
    [javac]                                                                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:162: error: ';' expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  team  &quot; flag returned due to player error.&quot;);<br />
    [javac]                                                                             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:173: error: ')' expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player.getName()  &quot; escaped from the event holding a flag!&quot;);<br />
    [javac]                                                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:173: error: ';' expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player.getName()  &quot; escaped from the event holding a flag!&quot;);<br />
    [javac]                                                                                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:181: error: ')' expected<br />
    [javac]                                 AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
    [javac]                                                                    ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:181: error: not a statement<br />
    [javac]                                 AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
    [javac]                                                                                       ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:181: error: ';' expected<br />
    [javac]                                 AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
    [javac]                                                                                                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:206: error: ')' expected<br />
    [javac]             _log.warning(&quot;CTF.restoreFlags() Error:&quot;  e.toString());<br />
    [javac]                                                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:206: error: illegal start of expression<br />
    [javac]             _log.warning(&quot;CTF.restoreFlags() Error:&quot;  e.toString());<br />
    [javac]                                                        ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:206: error: ';' expected<br />
    [javac]             _log.warning(&quot;CTF.restoreFlags() Error:&quot;  e.toString());<br />
    [javac]                                                                 ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:245: error: ')' expected<br />
    [javac]             CreatureSay cs = new CreatureSay(0, 2, &quot;&quot;, &quot;Announcements : &quot;  announce);<br />
    [javac]                                                                          ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:245: error: illegal start of expression<br />
    [javac]             CreatureSay cs = new CreatureSay(0, 2, &quot;&quot;, &quot;Announcements : &quot;  announce);<br />
    [javac]                                                                                    ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:273: error: ')' expected<br />
    [javac]         AnnounceToPlayers(false, _eventName  &quot;(CTF): Started. Go Capture the Flags!&quot;);<br />
    [javac]                                            ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:273: error: illegal start of expression<br />
    [javac]         AnnounceToPlayers(false, _eventName  &quot;(CTF): Started. Go Capture the Flags!&quot;);<br />
    [javac]                                                                                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:387: error: ')' expected<br />
    [javac]                 _throneSpawns.get(index).getLastSpawn().setTitle(t  eam  &quot; Throne&quot;);<br />
    [javac]                                                                      ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:387: error: illegal start of expression<br />
    [javac]                 _throneSpawns.get(index).getLastSpawn().setTitle(t  eam  &quot; Throne&quot;);<br />
    [javac]                                                                                 ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:402: error: ')' expected<br />
    [javac]                 _flagSpawns.get(index).getLastSpawn().setTitle(tea  m  &quot;'s Flag&quot;);<br />
    [javac]                                                                    ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:402: error: illegal start of expression<br />
    [javac]                 _flagSpawns.get(index).getLastSpawn().setTitle(tea  m  &quot;'s Flag&quot;);<br />
    [javac]                                                                               ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:412: error: ')' expected<br />
    [javac]                 _log.warning(&quot;CTF Engine[spawnAllFlags()]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                        ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:412: error: illegal start of expression<br />
    [javac]                 _log.warning(&quot;CTF Engine[spawnAllFlags()]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                           ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:412: error: ';' expected<br />
    [javac]                 _log.warning(&quot;CTF Engine[spawnAllFlags()]: exception: &quot;  e.getStackTrace());<br />
    [javac]                                                                                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:433: error: ')' expected<br />
    [javac]             AnnounceToPlayers(true, _eventName  &quot;(CTF): No flags taken.&quot;);<br />
    [javac]                                               ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:433: error: illegal start of expression<br />
    [javac]             AnnounceToPlayers(true, _eventName  &quot;(CTF): No flags taken.&quot;);<br />
    [javac]                                                                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:438: error: ')' expected<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Maximum flags taken : &quot;  _topScore  &quot; flags! No one won.&quot;);<br />
    [javac]                                                   ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:438: error: not a statement<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Maximum flags taken : &quot;  _topScore  &quot; flags! No one won.&quot;);<br />
    [javac]                                                                                      ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:438: error: ';' expected<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Maximum flags taken : &quot;  _topScore  &quot; flags! No one won.&quot;);<br />
    [javac]                                                                                               ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:439: error: 'else' without 'if'<br />
    [javac]             else<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:441: error: ')' expected<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Team &quot;  _topTeam  &quot; wins the match, with &quot;  _topScore  &quot; flags taken!&quot;);<br />
    [javac]                                                   ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:441: error: not a statement<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Team &quot;  _topTeam  &quot; wins the match, with &quot;  _topScore  &quot; flags taken!&quot;);<br />
    [javac]                                                                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:441: error: ';' expected<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Team &quot;  _topTeam  &quot; wins the match, with &quot;  _topScore  &quot; flags taken!&quot;);<br />
    [javac]                                                                             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:441: error: not a statement<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Team &quot;  _topTeam  &quot; wins the match, with &quot;  _topScore  &quot; flags taken!&quot;);<br />
    [javac]                                                                                                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:441: error: ';' expected<br />
    [javac]                 AnnounceToPlayers(true, _eventName  &quot;(CTF): Team &quot;  _topTeam  &quot; wins the match, with &quot;  _topScore  &quot; flags taken!&quot;);<br />
    [javac]                                                                                                                  ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:447: error: class, interface, or enum expected<br />
    [javac]     public static void unspawnAllFlags()<br />
    [javac]                   ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:453: error: class, interface, or enum expected<br />
    [javac]             for (String team : _teams)<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:456: error: class, interface, or enum expected<br />
    [javac]                 if (_throneSpawns.get(index) != null)<br />
    [javac]                 ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:459: error: class, interface, or enum expected<br />
    [javac]                     _throneSpawns.get(index).stopRespawn();<br />
    [javac]                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:460: error: class, interface, or enum expected<br />
    [javac]                     SpawnTable.getInstance().deleteSpawn(_throneSpawns  .get(index), true);<br />
    [javac]                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:461: error: class, interface, or enum expected<br />
    [javac]                 }<br />
    [javac]                 ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:465: error: class, interface, or enum expected<br />
    [javac]                     _flagSpawns.get(index).stopRespawn();<br />
    [javac]                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:466: error: class, interface, or enum expected<br />
    [javac]                     SpawnTable.getInstance().deleteSpawn(_flagSpawns.g  et(index), true);<br />
    [javac]                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:467: error: class, interface, or enum expected<br />
    [javac]                 }<br />
    [javac]                 ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:470: error: class, interface, or enum expected<br />
    [javac]         }<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:474: error: class, interface, or enum expected<br />
    [javac]         }<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:481: error: class, interface, or enum expected<br />
    [javac]         _flagSpawns.get(index).getLastSpawn().deleteMe();<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:482: error: class, interface, or enum expected<br />
    [javac]         _flagSpawns.get(index).stopRespawn();<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:483: error: class, interface, or enum expected<br />
    [javac]         SpawnTable.getInstance().deleteSpawn(_flagSpawns.g  et(index), true);<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:484: error: class, interface, or enum expected<br />
    [javac]     }<br />
    [javac]     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:486: error: class, interface, or enum expected<br />
    [javac]     public static void spawnFlag(String teamName)<br />
    [javac]                   ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:489: error: class, interface, or enum expected<br />
    [javac]         L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_flagIds.get(in  dex));<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:491: error: class, interface, or enum expected<br />
    [javac]         try<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:495: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).setLocx(_flagsX.get(index))  ;<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:496: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).setLocy(_flagsY.get(index))  ;<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:497: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).setLocz(_flagsZ.get(index))  ;<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:498: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).setAmount(1);<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:499: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).setHeading(0);<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:500: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).setRespawnDelay(1);<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:502: error: class, interface, or enum expected<br />
    [javac]             SpawnTable.getInstance().addNewSpawn(_flagSpawns.g  et(index), false);<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:504: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).init();<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:505: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).getLastSpawn().getStatus().  setCurrentHp(999999999);<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:506: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).getLastSpawn().setTitle(tea  mName  &quot;'s Flag&quot;);<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:507: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).getLastSpawn()._CTF_FlagTea  mName = teamName;<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:508: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).getLastSpawn()._isCTF_Flag = true;<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:509: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).getLastSpawn().decayMe();<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:510: error: class, interface, or enum expected<br />
    [javac]             _flagSpawns.get(index).getLastSpawn().spawnMe(_fla  gSpawns.get(index).getLastSpawn().getX(), _flagSpawns.get(index).getLastSpawn().getY(), _flagSpawns.get(index).getLastSpawn().getZ());<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:511: error: class, interface, or enum expected<br />
    [javac]         }<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:515: error: class, interface, or enum expected<br />
    [javac]         }<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:518: error: class, interface, or enum expected<br />
    [javac]     public static boolean InRangeOfFlag(L2PcInstance _player, int flagIndex, int offset)<br />
    [javac]                   ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:522: error: class, interface, or enum expected<br />
    [javac]         return false;<br />
    [javac]         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:523: error: class, interface, or enum expected<br />
    [javac]     }<br />
    [javac]     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:525: error: class, interface, or enum expected<br />
    [javac]     public static void processInFlagRange(L2PcInstance _player)<br />
    [javac]                   ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:530: error: class, interface, or enum expected<br />
    [javac]             for (String team : _teams)<br />
    [javac]             ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:537: error: class, interface, or enum expected<br />
    [javac]                     if (InRangeOfFlag(_player, indexOwn, 100) &amp;&amp; !_flagsTaken.get(indexOwn) &amp;&amp; _player._haveFlagCTF)<br />
    [javac]                     ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:541: error: class, interface, or enum expected<br />
    [javac]                         _flagsTaken.set(indexEnemy, false);<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:542: error: class, interface, or enum expected<br />
    [javac]                         spawnFlag(_player._teamNameHaveFlagCTF);<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:544: error: class, interface, or enum expected<br />
    [javac]                         _player.broadcastPacket(new SocialAction(_player.getObjectId(), 16)); // amazing glow<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:545: error: class, interface, or enum expected<br />
    [javac]                         _player.broadcastUserInfo();<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:546: error: class, interface, or enum expected<br />
    [javac]                         _player.broadcastPacket(new SocialAction(_player.getObjectId(), 3)); // Victory<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:547: error: class, interface, or enum expected<br />
    [javac]                         _player.broadcastUserInfo();<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:548: error: class, interface, or enum expected<br />
    [javac]                         removeFlagFromPlayer(_player);<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:549: error: class, interface, or enum expected<br />
    [javac]                         _teamPointsCount.set(indexOwn, teamPointsCount(team)  1);<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:550: error: class, interface, or enum expected<br />
    [javac]                         _player.broadcastPacket(new PlaySound(0, &quot;ItemSound.quest_finish&quot;, 1, _player.getObjectId(), _player.getX(), _player.getY(), _player.getZ()));<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:551: error: class, interface, or enum expected<br />
    [javac]                         _player.broadcastUserInfo();<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:552: error: class, interface, or enum expected<br />
    [javac]                         _playerScores.put(_player.getName(), playerScoresCount(_player.getName())  1);<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:553: error: class, interface, or enum expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  _player.getName()  &quot; scores for &quot;  _player._teamNameCTF  &quot;.&quot;);<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:554: error: class, interface, or enum expected<br />
    [javac]                         AnnounceToPlayers(false, _eventName  &quot;(CTF): Scores - &quot;  _teams.get(0)  &quot;: &quot;  teamPointsCount(_teams.get(0))  &quot; &quot;  _teams.get(1)  &quot;: &quot;  teamPointsCount(_teams.get(1)));<br />
    [javac]                         ^<br />
    [javac] D:\Nueva carpeta (4)\L2J_Server\java\com\l2jserver\gameserver\model  \entity\CTF.java:555: error: class, interface, or enum expected<br />
    [javac]                     }<br />
    [javac]                     ^<br />
    [javac] 100 errors<br />
<br />
BUILD FAILED<br />
D:\Nueva carpeta (4)\L2J_Server\build.xml:57: Compile failed; see the compiler error output for details.<br />
<br />
Total time: 9 seconds</div>
    </div>
</div><br />
<br />
y este es mi CTF.java<br />
<br />
<div>
    <div class="pre-spoiler">
    <span style="float:left; padding-top: 2px;">Spoiler</span> <input type="button" value="Ver contenido oculto" style="width:150px;font-size:10px;margin:0px;padding:0px;" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = '';this.innerText = ''; this.value = 'Ocultar el contenido visible'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.value = 'Ver contenido oculto';}">
    </div>
    <div>
        <div class="spoiler" style="display: none;">/*<br />
 * This program is free software: you can redistribute it and/or modify it under<br />
 * the terms of the GNU General Public License as published by the Free Software<br />
 * Foundation, either version 3 of the License, or (at your option) any later<br />
 * version.<br />
 * <br />
 * This program is distributed in the hope that it will be useful, but WITHOUT<br />
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS<br />
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more<br />
 * details.<br />
 * <br />
 * You should have received a copy of the GNU General Public License along with<br />
 * this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.<br />
 */<br />
package com.l2jserver.gameserver.model.entity;<br />
<br />
import java.sql.Connection;<br />
import java.sql.PreparedStatement;<br />
import java.sql.ResultSet;<br />
import java.sql.SQLException;<br />
import java.util.Map;<br />
import java.util.Vector;<br />
import java.util.logging.Logger;<br />
<br />
import javolution.text.TextBuilder;<br />
import javolution.util.FastMap;<br />
<br />
import com.l2jserver.Config;<br />
import com.l2jserver.L2DatabaseFactory;<br />
import com.l2jserver.gameserver.Announcements;<br />
import com.l2jserver.gameserver.GmListTable;<br />
import com.l2jserver.gameserver.ThreadPoolManager;<br />
import com.l2jserver.gameserver.datatables.ItemTable;<br />
import com.l2jserver.gameserver.datatables.NpcTable;<br />
import com.l2jserver.gameserver.datatables.SpawnTable;<br />
import com.l2jserver.gameserver.model.L2Effect;<br />
import com.l2jserver.gameserver.model.L2ItemInstance;<br />
import com.l2jserver.gameserver.model.L2Party;<br />
import com.l2jserver.gameserver.model.L2Radar;<br />
import com.l2jserver.gameserver.model.L2Spawn;<br />
import com.l2jserver.gameserver.model.actor.L2Summon;<br />
import com.l2jserver.gameserver.model.actor.instance.L2Pc  Instance;<br />
import com.l2jserver.gameserver.model.actor.instance.L2Pe  tInstance;<br />
import com.l2jserver.gameserver.model.itemcontainer.Inven  tory;<br />
import com.l2jserver.gameserver.network.SystemMessageId;<br />
import com.l2jserver.gameserver.network.serverpackets.Act  ionFailed;<br />
import com.l2jserver.gameserver.network.serverpackets.Cre  atureSay;<br />
import com.l2jserver.gameserver.network.serverpackets.Inv  entoryUpdate;<br />
import com.l2jserver.gameserver.network.serverpackets.Ite  mList;<br />
import com.l2jserver.gameserver.network.serverpackets.Mag  icSkillUse;<br />
import com.l2jserver.gameserver.network.serverpackets.Npc  HtmlMessage;<br />
import com.l2jserver.gameserver.network.serverpackets.Pla  ySound;<br />
import com.l2jserver.gameserver.network.serverpackets.Rad  arControl;<br />
import com.l2jserver.gameserver.network.serverpackets.Soc  ialAction;<br />
import com.l2jserver.gameserver.network.serverpackets.Sys  temMessage;<br />
import com.l2jserver.gameserver.templates.chars.L2NpcTemp  late;<br />
import com.l2jserver.gameserver.templates.skills.L2Effect  Type;<br />
import com.l2jserver.util.Rnd;<br />
<br />
/**<br />
 * <br />
 * @author SqueezeD &amp; Darki699 (idea by FBIAgent)<br />
 * <br />
 */<br />
public class CTF<br />
{<br />
    private final static Logger _log = Logger.getLogger(CTF.class.getName());<br />
    private static int _FlagNPC = 35062, _FLAG_IN_HAND_ITEM_ID = 6718;<br />
    public static String _eventName = new String(), _eventDesc = new String(), _topTeam = new String(), _joiningLocationName = new String();<br />
    public static Vector&lt;String&gt; _teams = new Vector&lt;String&gt;(), _savePlayers = new Vector&lt;String&gt;(), _savePlayerTeams = new Vector&lt;String&gt;();<br />
    public static Vector&lt;L2PcInstance&gt; _players = new Vector&lt;L2PcInstance&gt;(), _playersShuffle = new Vector&lt;L2PcInstance&gt;();<br />
    public static Vector&lt;Integer&gt; _teamPlayersCount = new Vector&lt;Integer&gt;(), _teamColors = new Vector&lt;Integer&gt;(), _teamsX = new Vector&lt;Integer&gt;(), _teamsY = new Vector&lt;Integer&gt;(), _teamsZ = new Vector&lt;Integer&gt;(), _teamsBaseX = new Vector&lt;Integer&gt;(), _teamsBaseY = new Vector&lt;Integer&gt;(),<br />
            _teamsBaseZ = new Vector&lt;Integer&gt;();<br />
    public static boolean _joining = false, _teleport = false, _started = false, _sitForced = false;<br />
    public static L2Spawn _npcSpawn;<br />
    public static int _npcId = 0, _npcX = 0, _npcY = 0, _npcZ = 0, _npcHeading = 0, _rewardId = 0, _rewardAmount = 0, _minlvl = 0, _maxlvl = 0, _joinTime = 0, _eventTime = 0, _minPlayers = 0, _maxPlayers = 0;<br />
    public static long _flagHoldTime = 0;<br />
    public static Vector&lt;Integer&gt; _teamPointsCount = new Vector&lt;Integer&gt;();<br />
    public static Vector&lt;Integer&gt; _flagIds = new Vector&lt;Integer&gt;(), _flagsX = new Vector&lt;Integer&gt;(), _flagsY = new Vector&lt;Integer&gt;(), _flagsZ = new Vector&lt;Integer&gt;();<br />
    public static Vector&lt;L2Spawn&gt; _flagSpawns = new Vector&lt;L2Spawn&gt;(), _throneSpawns = new Vector&lt;L2Spawn&gt;();<br />
    public static Vector&lt;Boolean&gt; _flagsTaken = new Vector&lt;Boolean&gt;(), _flagsNotRemoved = new Vector&lt;Boolean&gt;();<br />
    public static int _topScore = 0, eventCenterX = 0, eventCenterY = 0, eventCenterZ = 0, eventOffset = 0;<br />
    public static Map&lt;String, Integer&gt; _playerScores = new FastMap&lt;String, Integer&gt;();<br />
    <br />
    public static void showFlagHtml(L2PcInstance eventPlayer, String objectId, String teamName)<br />
    {<br />
        if (eventPlayer == null)<br />
            return;<br />
        <br />
        try<br />
        {<br />
            NpcHtmlMessage adminReply = new NpcHtmlMessage(0);<br />
            <br />
            TextBuilder replyMSG = new TextBuilder();<br />
            <br />
            replyMSG.append(&quot;&lt;html&gt;&lt;body&gt;&lt;center&gt;&quot;);<br />
            replyMSG.append(&quot;CTF Flag&lt;br&gt;&lt;br&gt;&quot;);<br />
            replyMSG.append(&quot;&lt;font color=\&quot;00FF00\&quot;&gt;&quot;  teamName  &quot;'s Flag&lt;/font&gt;&lt;br&gt;&quot;);<br />
            if (eventPlayer._teamNameCTF != null &amp;&amp; eventPlayer._teamNameCTF.equals(teamName))<br />
                replyMSG.append(&quot;&lt;font color=\&quot;LEVEL\&quot;&gt;This is your Flag&lt;/font&gt;&lt;br&gt;&quot;);<br />
            else<br />
                replyMSG.append(&quot;&lt;font color=\&quot;LEVEL\&quot;&gt;Enemy Flag!&lt;/font&gt;&lt;br&gt;&quot;);<br />
            if (_started)<br />
            {<br />
                processInFlagRange(eventPlayer);<br />
            }<br />
            else<br />
                replyMSG.append(&quot;CTF match is not in progress yet.&lt;br&gt;Wait for a GM to start the event&lt;br&gt;&quot;);<br />
            replyMSG.append(&quot;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
            adminReply.setHtml(replyMSG.toString());<br />
            eventPlayer.sendPacket(adminReply);<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;&quot;  &quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception: &quot;  e.getStackTrace());<br />
        }<br />
    }<br />
    <br />
    public static void CheckRestoreFlags()<br />
    {<br />
        Vector&lt;Integer&gt; teamsTakenFlag = new Vector&lt;Integer&gt;();<br />
        try<br />
        {<br />
            for (L2PcInstance player : _players)<br />
            { //if there's a player with a flag<br />
                //add the index of the team who's FLAG WAS TAKEN to the list<br />
                if (player != null)<br />
                {<br />
                    if (!player.isOnline() &amp;&amp; player._haveFlagCTF)// logged off with a flag in his hands<br />
                    {<br />
                        AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player.getName()  &quot; logged off with a CTF flag!&quot;);<br />
                        player._haveFlagCTF = false;<br />
                        if (_teams.indexOf(player._teamNameHaveFlagCTF) &gt;= 0)<br />
                        {<br />
                            if (_flagsTaken.get(_teams.indexOf(player._teamNameHa  veFlagCTF)))<br />
                            {<br />
                                _flagsTaken.set(_teams.indexOf(player._teamNameHav  eFlagCTF), false);<br />
                                spawnFlag(player._teamNameHaveFlagCTF);<br />
                                AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
                            }<br />
                        }<br />
                        removeFlagFromPlayer(player);<br />
                        player._teamNameHaveFlagCTF = null;<br />
                        return;<br />
                    }<br />
                    else if (player._haveFlagCTF)<br />
                        teamsTakenFlag.add(_teams.indexOf(player._teamName  HaveFlagCTF));<br />
                }<br />
            }<br />
            //Go over the list of ALL teams<br />
            for (String team : _teams)<br />
            {<br />
                if (team == null)<br />
                    continue;<br />
                int index = _teams.indexOf(team);<br />
                if (!teamsTakenFlag.contains(index))<br />
                {<br />
                    if (_flagsTaken.get(index))<br />
                    {<br />
                        _flagsTaken.set(index, false);<br />
                        spawnFlag(team);<br />
                        AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  team  &quot; flag returned due to player error.&quot;);<br />
                    }<br />
                }<br />
            }<br />
            //Check if a player ran away from the event holding a flag:<br />
            for (L2PcInstance player : _players)<br />
            {<br />
                if (player != null &amp;&amp; player._haveFlagCTF)<br />
                {<br />
                    if (isOutsideCTFArea(player))<br />
                    {<br />
                        AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player.getName()  &quot; escaped from the event holding a flag!&quot;);<br />
                        player._haveFlagCTF = false;<br />
                        if (_teams.indexOf(player._teamNameHaveFlagCTF) &gt;= 0)<br />
                        {<br />
                            if (_flagsTaken.get(_teams.indexOf(player._teamNameHa  veFlagCTF)))<br />
                            {<br />
                                _flagsTaken.set(_teams.indexOf(player._teamNameHav  eFlagCTF), false);<br />
                                spawnFlag(player._teamNameHaveFlagCTF);<br />
                                AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  player._teamNameHaveFlagCTF  &quot; flag now returned to place.&quot;);<br />
                            }<br />
                        }<br />
                        removeFlagFromPlayer(player);<br />
                        player._teamNameHaveFlagCTF = null;<br />
                        if (Config.CTF_BASE_TELEPORT_FIRST)<br />
                        {<br />
                            player.teleToLocation(_teamsBaseX.get(_teams.index  Of(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF  )), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF  )));<br />
                            <br />
                            ThreadPoolManager.getInstance().scheduleGeneral(ne  w BaseTeleportTask(player, false), 10000);<br />
                            <br />
                            player.sendMessage(&quot;You have been returned to your base. You will be sent into battle in 10 seconds.&quot;);<br />
                        }<br />
                        else<br />
                        {<br />
                            player.teleToLocation(_teamsX.get(_teams.indexOf(p  layer._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));<br />
                            player.sendMessage(&quot;You have been returned to your team spawn.&quot;);<br />
                        }<br />
                        return;<br />
                    }<br />
                }<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF.restoreFlags() Error:&quot;  e.toString());<br />
        }<br />
    }<br />
    <br />
    public static void kickPlayerFromCTf(L2PcInstance playerToKick)<br />
    {<br />
        if (playerToKick == null)<br />
            return;<br />
        <br />
        if (_joining)<br />
        {<br />
            _playersShuffle.remove(playerToKick);<br />
            _players.remove(playerToKick);<br />
            playerToKick._inEventCTF = false;<br />
            playerToKick._teamNameCTF = new String();<br />
        }<br />
        if (_started || _teleport)<br />
        {<br />
            _playersShuffle.remove(playerToKick);<br />
            playerToKick._inEventCTF = false;<br />
            removePlayer(playerToKick);<br />
            if (playerToKick.isOnline())<br />
            {<br />
                playerToKick.getAppearance().setNameColor(playerTo  Kick._originalNameColorCTF);<br />
                playerToKick.setKarma(playerToKick._originalKarmaC  TF);<br />
                playerToKick.setTitle(playerToKick._originalTitleC  TF);<br />
                playerToKick.broadcastUserInfo();<br />
                playerToKick.sendMessage(&quot;You have been kicked from the CTF.&quot;);<br />
                playerToKick.teleToLocation(_npcX, _npcY, _npcZ, false);<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void AnnounceToPlayers(Boolean toall, String announce)<br />
    {<br />
        if (toall)<br />
            Announcements.getInstance().announceToAll(announce  );<br />
        else<br />
        {<br />
            CreatureSay cs = new CreatureSay(0, 2, &quot;&quot;, &quot;Announcements : &quot;  announce);<br />
            if (_players != null &amp;&amp; !_players.isEmpty())<br />
            {<br />
                for (L2PcInstance player : _players)<br />
                {<br />
                    if (player != null &amp;&amp; player.isOnline())<br />
                        player.sendPacket(cs);<br />
                }<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void Started(L2PcInstance player)<br />
    {<br />
        player._teamNameHaveFlagCTF = null;<br />
        player._haveFlagCTF = false;<br />
    }<br />
    <br />
    public static void StartEvent()<br />
    {<br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null)<br />
            {<br />
                player._teamNameHaveFlagCTF = null;<br />
                player._haveFlagCTF = false;<br />
            }<br />
        }<br />
        AnnounceToPlayers(false, _eventName  &quot;(CTF): Started. Go Capture the Flags!&quot;);<br />
    }<br />
    <br />
    public static void addFlagToPlayer(L2PcInstance _player)<br />
    {<br />
        //remove items from the player hands (right, left, both)<br />
        // This is NOT a BUG, I don't want them to see the icon they have 8D<br />
        L2ItemInstance wpn = _player.getInventory().getPaperdollItem(Inventory.  PAPERDOLL_RHAND);<br />
        if (wpn == null)<br />
        {<br />
            wpn = _player.getInventory().getPaperdollItem(Inventory.  PAPERDOLL_RHAND);<br />
            if (wpn != null)<br />
                _player.getInventory().unEquipItemInBodySlotAndRec  ord(Inventory.PAPERDOLL_RHAND);<br />
        }<br />
        else<br />
        {<br />
            _player.getInventory().unEquipItemInBodySlotAndRec  ord(Inventory.PAPERDOLL_RHAND);<br />
            wpn = _player.getInventory().getPaperdollItem(Inventory.  PAPERDOLL_LHAND);<br />
            if (wpn != null)<br />
                _player.getInventory().unEquipItemInBodySlotAndRec  ord(Inventory.PAPERDOLL_LHAND);<br />
        }<br />
        //add the flag in his hands<br />
        _player.getInventory().equipItem(ItemTable.getInst  ance().createItem(&quot;&quot;, CTF._FLAG_IN_HAND_ITEM_ID, 1, _player, null));<br />
        _player.broadcastPacket(new SocialAction(_player.getObjectId(), 16)); //amazing glow<br />
        _player._haveFlagCTF = true;<br />
        _player.broadcastUserInfo();<br />
        CreatureSay cs = new CreatureSay(_player.getObjectId(), 15, &quot;:&quot;, &quot;You got it! Run back! ::&quot;); // 8D<br />
        _player.sendPacket(cs);<br />
        <br />
        // Start the flag holding timer <br />
        _flagsNotRemoved.set(_teams.indexOf(_player._teamN  ameCTF), true);<br />
        flagHoldTimer(_player, _flagHoldTime);<br />
        <br />
        // If player is invisible, make them visible<br />
        if (_player.getAppearance().getInvisible())<br />
        {<br />
            @SuppressWarnings(&quot;unused&quot;)<br />
            L2Effect eInvisible = _player.getFirstEffect(L2EffectType.HIDE);<br />
        }<br />
    }<br />
    <br />
    public static void removeFlagFromPlayer(L2PcInstance player)<br />
    {<br />
        L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.P  APERDOLL_RHAND);<br />
        player._haveFlagCTF = false;<br />
        <br />
        // Reset boolean of whether the holder's flag has not been removed yet to false and kill the flagHoldTimer thread<br />
        _flagsNotRemoved.set(_teams.indexOf(player._teamNa  meCTF), false);<br />
        <br />
        if (wpn != null)<br />
        {<br />
            L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndReco  rd(wpn.getItem().getBodyPart());<br />
            player.getInventory().destroyItemByItemId(&quot;&quot;, CTF._FLAG_IN_HAND_ITEM_ID, 1, player, null);<br />
            InventoryUpdate iu = new InventoryUpdate();<br />
            for (L2ItemInstance element : unequiped)<br />
                iu.addModifiedItem(element);<br />
            player.sendPacket(iu);<br />
            player.sendPacket(new ItemList(player, true)); // get your weapon back now ...<br />
            player.abortAttack();<br />
            player.broadcastUserInfo();<br />
        }<br />
        else<br />
        {<br />
            player.getInventory().destroyItemByItemId(&quot;&quot;, CTF._FLAG_IN_HAND_ITEM_ID, 1, player, null);<br />
            player.sendPacket(new ItemList(player, true)); // get your weapon back now ...<br />
            player.abortAttack();<br />
            player.broadcastUserInfo();<br />
        }<br />
    }<br />
    <br />
    public static void setTeamFlag(String teamName, L2PcInstance activeChar)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        addOrSet(_teams.indexOf(teamName), null, false, _FlagNPC, activeChar.getX(), activeChar.getY(), activeChar.getZ());<br />
    }<br />
    <br />
    public static void setTeamFlag(String teamName, int x, int y, int z)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        addOrSet(_teams.indexOf(teamName), null, false, _FlagNPC, x, y, z);<br />
    }<br />
    <br />
    public static void spawnAllFlags()<br />
    {<br />
        while (_flagSpawns.size() &lt; _teams.size())<br />
            _flagSpawns.add(null);<br />
        while (_throneSpawns.size() &lt; _teams.size())<br />
            _throneSpawns.add(null);<br />
        for (String team : _teams)<br />
        {<br />
            int index = _teams.indexOf(team);<br />
            L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_flagIds.get(in  dex));<br />
            L2NpcTemplate throne = NpcTable.getInstance().getTemplate(32027);<br />
            try<br />
            {<br />
                //spawn throne<br />
                _throneSpawns.set(index, new L2Spawn(throne));<br />
                _throneSpawns.get(index).setLocx(_flagsX.get(index  ));<br />
                _throneSpawns.get(index).setLocy(_flagsY.get(index  ));<br />
                _throneSpawns.get(index).setLocz(_flagsZ.get(index  ) - 10);<br />
                _throneSpawns.get(index).setAmount(1);<br />
                _throneSpawns.get(index).setHeading(0);<br />
                _throneSpawns.get(index).setRespawnDelay(1);<br />
                SpawnTable.getInstance().addNewSpawn(_throneSpawns  .get(index), false);<br />
                _throneSpawns.get(index).init();<br />
                _throneSpawns.get(index).getLastSpawn().getStatus(  ).setCurrentHp(999999999);<br />
                _throneSpawns.get(index).getLastSpawn().decayMe();<br />
                _throneSpawns.get(index).getLastSpawn().spawnMe(_t  hroneSpawns.get(index).getLastSpawn().getX(), _throneSpawns.get(index).getLastSpawn().getY(), _throneSpawns.get(index).getLastSpawn().getZ());<br />
                _throneSpawns.get(index).getLastSpawn().setTitle(t  eam  &quot; Throne&quot;);<br />
                _throneSpawns.get(index).getLastSpawn().broadcastP  acket(new MagicSkillUse(_throneSpawns.get(index).getLastSpaw  n(), _throneSpawns.get(index).getLastSpawn(), 1036, 1, 5500, 1));<br />
                _throneSpawns.get(index).getLastSpawn()._isCTF_thr  oneSpawn = true;<br />
                <br />
                //spawn flag<br />
                _flagSpawns.set(index, new L2Spawn(tmpl));<br />
                _flagSpawns.get(index).setLocx(_flagsX.get(index))  ;<br />
                _flagSpawns.get(index).setLocy(_flagsY.get(index))  ;<br />
                _flagSpawns.get(index).setLocz(_flagsZ.get(index))  ;<br />
                _flagSpawns.get(index).setAmount(1);<br />
                _flagSpawns.get(index).setHeading(0);<br />
                _flagSpawns.get(index).setRespawnDelay(1);<br />
                SpawnTable.getInstance().addNewSpawn(_flagSpawns.g  et(index), false);<br />
                _flagSpawns.get(index).init();<br />
                _flagSpawns.get(index).getLastSpawn().getStatus().  setCurrentHp(999999999);<br />
                _flagSpawns.get(index).getLastSpawn().setTitle(tea  m  &quot;'s Flag&quot;);<br />
                _flagSpawns.get(index).getLastSpawn()._CTF_FlagTea  mName = team;<br />
                _flagSpawns.get(index).getLastSpawn().decayMe();<br />
                _flagSpawns.get(index).getLastSpawn().spawnMe(_fla  gSpawns.get(index).getLastSpawn().getX(), _flagSpawns.get(index).getLastSpawn().getY(), _flagSpawns.get(index).getLastSpawn().getZ());<br />
                _flagSpawns.get(index).getLastSpawn()._isCTF_Flag = true;<br />
                if (index == (_teams.size() - 1))<br />
                    calculateOutSideOfCTF(); // sets event boundaries so players don't run with the flag.<br />
            }<br />
            catch (Exception e)<br />
            {<br />
                _log.warning(&quot;CTF Engine[spawnAllFlags()]: exception: &quot;  e.getStackTrace());<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void processTopTeam()<br />
    {<br />
        <br />
        _topTeam = null;<br />
        for (String team : _teams)<br />
        {<br />
            if (teamPointsCount(team) == _topScore &amp;&amp; _topScore &gt; 0)<br />
                _topTeam = null;<br />
            if (teamPointsCount(team) &gt; _topScore)<br />
            {<br />
                _topTeam = team;<br />
                _topScore = teamPointsCount(team);<br />
            }<br />
        }<br />
        if (_topScore &lt;= 0)<br />
        {<br />
            AnnounceToPlayers(true, _eventName  &quot;(CTF): No flags taken.&quot;);<br />
        }<br />
        else<br />
        {<br />
            if (_topTeam == null)<br />
                AnnounceToPlayers(true, _eventName  &quot;(CTF): Maximum flags taken : &quot;  _topScore  &quot; flags! No one won.&quot;);<br />
            else<br />
            {<br />
                AnnounceToPlayers(true, _eventName  &quot;(CTF): Team &quot;  _topTeam  &quot; wins the match, with &quot;  _topScore  &quot; flags taken!&quot;);<br />
                rewardTeam(_topTeam);<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void unspawnAllFlags()<br />
    {<br />
        try<br />
        {<br />
            if (_throneSpawns == null || _flagSpawns == null || _teams == null)<br />
                return;<br />
            for (String team : _teams)<br />
            {<br />
                int index = _teams.indexOf(team);<br />
                if (_throneSpawns.get(index) != null)<br />
                {<br />
                    _throneSpawns.get(index).getLastSpawn().deleteMe()  ;<br />
                    _throneSpawns.get(index).stopRespawn();<br />
                    SpawnTable.getInstance().deleteSpawn(_throneSpawns  .get(index), true);<br />
                }<br />
                if (_flagSpawns.get(index) != null)<br />
                {<br />
                    _flagSpawns.get(index).getLastSpawn().deleteMe();<br />
                    _flagSpawns.get(index).stopRespawn();<br />
                    SpawnTable.getInstance().deleteSpawn(_flagSpawns.g  et(index), true);<br />
                }<br />
            }<br />
            _throneSpawns.removeAllElements();<br />
        }<br />
        catch (Throwable t)<br />
        {<br />
            _log.warning(&quot;CTF Engine[unspawnAllFlags()]: exception: &quot;  t.getStackTrace());<br />
        }<br />
    }<br />
    <br />
    private static void unspawnFlag(String teamName)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        _flagSpawns.get(index).getLastSpawn().deleteMe();<br />
        _flagSpawns.get(index).stopRespawn();<br />
        SpawnTable.getInstance().deleteSpawn(_flagSpawns.g  et(index), true);<br />
    }<br />
    <br />
    public static void spawnFlag(String teamName)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_flagIds.get(in  dex));<br />
        <br />
        try<br />
        {<br />
            _flagSpawns.set(index, new L2Spawn(tmpl));<br />
            <br />
            _flagSpawns.get(index).setLocx(_flagsX.get(index))  ;<br />
            _flagSpawns.get(index).setLocy(_flagsY.get(index))  ;<br />
            _flagSpawns.get(index).setLocz(_flagsZ.get(index))  ;<br />
            _flagSpawns.get(index).setAmount(1);<br />
            _flagSpawns.get(index).setHeading(0);<br />
            _flagSpawns.get(index).setRespawnDelay(1);<br />
            <br />
            SpawnTable.getInstance().addNewSpawn(_flagSpawns.g  et(index), false);<br />
            <br />
            _flagSpawns.get(index).init();<br />
            _flagSpawns.get(index).getLastSpawn().getStatus().  setCurrentHp(999999999);<br />
            _flagSpawns.get(index).getLastSpawn().setTitle(tea  mName  &quot;'s Flag&quot;);<br />
            _flagSpawns.get(index).getLastSpawn()._CTF_FlagTea  mName = teamName;<br />
            _flagSpawns.get(index).getLastSpawn()._isCTF_Flag = true;<br />
            _flagSpawns.get(index).getLastSpawn().decayMe();<br />
            _flagSpawns.get(index).getLastSpawn().spawnMe(_fla  gSpawns.get(index).getLastSpawn().getX(), _flagSpawns.get(index).getLastSpawn().getY(), _flagSpawns.get(index).getLastSpawn().getZ());<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF Engine[spawnFlag(&quot;  teamName  &quot;)]: exception: &quot;  e.getStackTrace());<br />
        }<br />
    }<br />
    <br />
    public static boolean InRangeOfFlag(L2PcInstance _player, int flagIndex, int offset)<br />
    {<br />
        if (_player.getX() &gt; CTF._flagsX.get(flagIndex) - offset &amp;&amp; _player.getX() &lt; CTF._flagsX.get(flagIndex)  offset &amp;&amp; _player.getY() &gt; CTF._flagsY.get(flagIndex) - offset &amp;&amp; _player.getY() &lt; CTF._flagsY.get(flagIndex)  offset &amp;&amp; _player.getZ() &gt; CTF._flagsZ.get(flagIndex) - offset &amp;&amp; _player.getZ() &lt; CTF._flagsZ.get(flagIndex)  offset)<br />
            return true;<br />
        return false;<br />
    }<br />
    <br />
    public static void processInFlagRange(L2PcInstance _player)<br />
    {<br />
        try<br />
        {<br />
            CheckRestoreFlags();<br />
            for (String team : _teams)<br />
            {<br />
                if (team.equals(_player._teamNameCTF))<br />
                {<br />
                    int indexOwn = _teams.indexOf(_player._teamNameCTF);<br />
                    <br />
                    //if player is near his team flag holding the enemy flag<br />
                    if (InRangeOfFlag(_player, indexOwn, 100) &amp;&amp; !_flagsTaken.get(indexOwn) &amp;&amp; _player._haveFlagCTF)<br />
                    {<br />
                        int indexEnemy = _teams.indexOf(_player._teamNameHaveFlagCTF);<br />
                        //return enemy flag to place<br />
                        _flagsTaken.set(indexEnemy, false);<br />
                        spawnFlag(_player._teamNameHaveFlagCTF);<br />
                        //remove the flag from this player<br />
                        _player.broadcastPacket(new SocialAction(_player.getObjectId(), 16)); // amazing glow<br />
                        _player.broadcastUserInfo();<br />
                        _player.broadcastPacket(new SocialAction(_player.getObjectId(), 3)); // Victory<br />
                        _player.broadcastUserInfo();<br />
                        removeFlagFromPlayer(_player);<br />
                        _teamPointsCount.set(indexOwn, teamPointsCount(team)  1);<br />
                        _player.broadcastPacket(new PlaySound(0, &quot;ItemSound.quest_finish&quot;, 1, _player.getObjectId(), _player.getX(), _player.getY(), _player.getZ()));<br />
                        _player.broadcastUserInfo();<br />
                        _playerScores.put(_player.getName(), playerScoresCount(_player.getName())  1);<br />
                        AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  _player.getName()  &quot; scores for &quot;  _player._teamNameCTF  &quot;.&quot;);<br />
                        AnnounceToPlayers(false, _eventName  &quot;(CTF): Scores - &quot;  _teams.get(0)  &quot;: &quot;  teamPointsCount(_teams.get(0))  &quot; &quot;  _teams.get(1)  &quot;: &quot;  teamPointsCount(_teams.get(1)));<br />
                    }<br />
                }<br />
                else<br />
                {<br />
                    int indexEnemy = _teams.indexOf(team);<br />
                    //if the player is near a enemy flag<br />
                    if (InRangeOfFlag(_player, indexEnemy, 100) &amp;&amp; !_flagsTaken.get(indexEnemy) &amp;&amp; !_player._haveFlagCTF &amp;&amp; !_player.isDead())<br />
                    {<br />
                        if (_player.isRidingStrider() || _player.isFlying())<br />
                        {<br />
                            _player.sendPacket(new SystemMessage(SystemMessageId.YOU_CANNOT_MOUNT_A_S  TEED_WHILE_A_PET_OR_A_SERVITOR_IS_SUMMONED));<br />
                            break;<br />
                        }<br />
                        <br />
                        _flagsTaken.set(indexEnemy, true);<br />
                        unspawnFlag(team);<br />
                        _player._teamNameHaveFlagCTF = team;<br />
                        addFlagToPlayer(_player);<br />
                        _player.broadcastUserInfo();<br />
                        _player._haveFlagCTF = true;<br />
                        AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  team  &quot; flag taken by &quot;  _player.getName()  &quot;...&quot;);<br />
                        pointTeamTo(_player, team);<br />
                        break;<br />
                    }<br />
                }<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            e.printStackTrace();<br />
        }<br />
    }<br />
    <br />
    public static void pointTeamTo(L2PcInstance hasFlag, String ourFlag)<br />
    {<br />
        try<br />
        {<br />
            for (L2PcInstance player : _players)<br />
            {<br />
                if (player != null &amp;&amp; player.isOnline())<br />
                {<br />
                    if (player._teamNameCTF.equals(ourFlag))<br />
                    {<br />
                        player.sendMessage(hasFlag.getName()  &quot; took your flag!&quot;);<br />
                        if (player._haveFlagCTF)<br />
                        {<br />
                            player.sendMessage(&quot;You can not return the flag to headquarters, until your flag is returned to it's place.&quot;);<br />
                            player.sendPacket(new RadarControl(1, 1, player.getX(), player.getY(), player.getZ()));<br />
                        }<br />
                        else<br />
                        {<br />
                            player.sendPacket(new RadarControl(0, 1, hasFlag.getX(), hasFlag.getY(), hasFlag.getZ()));<br />
                            L2Radar rdr = new L2Radar(player);<br />
                            L2Radar.RadarOnPlayer radar = rdr.new RadarOnPlayer(hasFlag, player);<br />
                            ThreadPoolManager.getInstance().scheduleGeneral(ra  dar, 10000  Rnd.get(30000));<br />
                        }<br />
                    }<br />
                }<br />
            }<br />
        }<br />
        catch (Throwable t)<br />
        {<br />
        }<br />
    }<br />
    <br />
    private static int playerScoresCount(String player)<br />
    {<br />
        if (_playerScores.containsKey(player))<br />
            return _playerScores.get(player);<br />
        else if (player != null)<br />
        {<br />
            _playerScores.put(player, 0);<br />
            return _playerScores.get(player);<br />
        }<br />
        else<br />
            return 0;<br />
    }<br />
    <br />
    public static int teamPointsCount(String teamName)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return -1;<br />
        <br />
        return _teamPointsCount.get(index);<br />
    }<br />
    <br />
    public static void setTeamPointsCount(String teamName, int teamPointCount)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamPointsCount.set(index, teamPointCount);<br />
    }<br />
    <br />
    public static int teamPlayersCount(String teamName)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return -1;<br />
        <br />
        return _teamPlayersCount.get(index);<br />
    }<br />
    <br />
    public static void setTeamPlayersCount(String teamName, int teamPlayersCount)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamPlayersCount.set(index, teamPlayersCount);<br />
    }<br />
    <br />
    public static void setNpcPos(L2PcInstance activeChar)<br />
    {<br />
        _npcX = activeChar.getX();<br />
        _npcY = activeChar.getY();<br />
        _npcZ = activeChar.getZ();<br />
        _npcHeading = activeChar.getHeading();<br />
    }<br />
    <br />
    public static void setNpcPos(int x, int y, int z)<br />
    {<br />
        _npcX = x;<br />
        _npcY = y;<br />
        _npcZ = z;<br />
    }<br />
    <br />
    public static void addTeam(String teamName)<br />
    {<br />
        if (!checkTeamOk())<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[addTeam(&quot;  teamName  &quot;)]: checkTeamOk() = false&quot;);<br />
            return;<br />
        }<br />
        <br />
        if (teamName.equals(&quot; &quot;))<br />
            return;<br />
        <br />
        _teams.add(teamName);<br />
        _teamPlayersCount.add(0);<br />
        _teamColors.add(0);<br />
        _teamsX.add(0);<br />
        _teamsY.add(0);<br />
        _teamsZ.add(0);<br />
        _teamsBaseX.add(0);<br />
        _teamsBaseY.add(0);<br />
        _teamsBaseZ.add(0);<br />
        _teamPointsCount.add(0);<br />
        addOrSet(_teams.indexOf(teamName), null, false, _FlagNPC, 0, 0, 0);<br />
    }<br />
    <br />
    private static void addOrSet(int listSize, L2Spawn flagSpawn, boolean flagsTaken, int flagId, int flagX, int flagY, int flagZ)<br />
    {<br />
        while (_flagsX.size() &lt;= listSize)<br />
        {<br />
            _flagSpawns.add(null);<br />
            _flagsTaken.add(false);<br />
            _flagIds.add(_FlagNPC);<br />
            _flagsX.add(0);<br />
            _flagsY.add(0);<br />
            _flagsZ.add(0);<br />
        }<br />
        _flagSpawns.set(listSize, flagSpawn);<br />
        _flagsTaken.set(listSize, flagsTaken);<br />
        _flagIds.set(listSize, flagId);<br />
        _flagsX.set(listSize, flagX);<br />
        _flagsY.set(listSize, flagY);<br />
        _flagsZ.set(listSize, flagZ);<br />
    }<br />
    <br />
    public static boolean checkMaxLevel(int maxlvl)<br />
    {<br />
        if (_minlvl &gt;= maxlvl)<br />
            return false;<br />
        <br />
        return true;<br />
    }<br />
    <br />
    public static boolean checkMinLevel(int minlvl)<br />
    {<br />
        if (_maxlvl &lt;= minlvl)<br />
            return false;<br />
        <br />
        return true;<br />
    }<br />
    <br />
    /** returns true if participated players is higher or equal then minimum needed players */<br />
    public static boolean checkMinPlayers(int players)<br />
    {<br />
        if (_minPlayers &lt;= players)<br />
            return true;<br />
        <br />
        return false;<br />
    }<br />
    <br />
    /** returns true if max players is higher or equal then participated players */<br />
    public static boolean checkMaxPlayers(int players)<br />
    {<br />
        if (_maxPlayers &gt; players)<br />
            return true;<br />
        <br />
        return false;<br />
    }<br />
    <br />
    public static void removeTeam(String teamName)<br />
    {<br />
        if (!checkTeamOk() || _teams.isEmpty())<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[removeTeam(&quot;  teamName  &quot;)]: checkTeamOk() = false&quot;);<br />
            return;<br />
        }<br />
        <br />
        if (teamPlayersCount(teamName) &gt; 0)<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[removeTeam(&quot;  teamName  &quot;)]: teamPlayersCount(teamName) &gt; 0&quot;);<br />
            return;<br />
        }<br />
        <br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamsZ.remove(index);<br />
        _teamsY.remove(index);<br />
        _teamsX.remove(index);<br />
        _teamsBaseZ.remove(index);<br />
        _teamsBaseY.remove(index);<br />
        _teamsBaseX.remove(index);<br />
        _teamColors.remove(index);<br />
        _teamPointsCount.remove(index);<br />
        _teamPlayersCount.remove(index);<br />
        _teams.remove(index);<br />
        _flagSpawns.remove(index);<br />
        _flagsTaken.remove(index);<br />
        _flagIds.remove(index);<br />
        _flagsX.remove(index);<br />
        _flagsY.remove(index);<br />
        _flagsZ.remove(index);<br />
    }<br />
    <br />
    public static void setTeamPos(String teamName, L2PcInstance activeChar)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamsX.set(index, activeChar.getX());<br />
        _teamsY.set(index, activeChar.getY());<br />
        _teamsZ.set(index, activeChar.getZ());<br />
    }<br />
    <br />
    public static void setTeamPos(String teamName, int x, int y, int z)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamsX.set(index, x);<br />
        _teamsY.set(index, y);<br />
        _teamsZ.set(index, z);<br />
    }<br />
    <br />
    public static void setTeamBasePos(String teamName, L2PcInstance activeChar)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamsBaseX.set(index, activeChar.getX());<br />
        _teamsBaseY.set(index, activeChar.getY());<br />
        _teamsBaseZ.set(index, activeChar.getZ());<br />
    }<br />
    <br />
    public static void setTeamBasePos(String teamName, int x, int y, int z)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamsBaseX.set(index, x);<br />
        _teamsBaseY.set(index, y);<br />
        _teamsBaseZ.set(index, z);<br />
    }<br />
    <br />
    public static void setTeamColor(String teamName, int color)<br />
    {<br />
        if (!checkTeamOk())<br />
            return;<br />
        <br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamColors.set(index, color);<br />
    }<br />
    <br />
    public static boolean checkTeamOk()<br />
    {<br />
        if (_started || _teleport || _joining)<br />
            return false;<br />
        <br />
        return true;<br />
    }<br />
    <br />
    public static void startJoin(L2PcInstance activeChar)<br />
    {<br />
        if (!startJoinOk())<br />
        {<br />
            activeChar.sendMessage(&quot;Event not setted propertly.&quot;);<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[startJoin(&quot;  activeChar.getName()  &quot;)]: startJoinOk() = false&quot;);<br />
            return;<br />
        }<br />
        <br />
        _joining = true;<br />
        spawnEventNpc(activeChar);<br />
        AnnounceToPlayers(true, _eventName  &quot; (CTF)!&quot;);<br />
        if (Config.CTF_ANNOUNCE_REWARD)<br />
            AnnounceToPlayers(true, &quot;Reward: &quot;  _rewardAmount  &quot; &quot;  ItemTable.getInstance().getTemplate(_rewardId).get  Name());<br />
        AnnounceToPlayers(true, &quot;Recruiting levels &quot;  _minlvl  &quot; to &quot;  _maxlvl);<br />
        AnnounceToPlayers(true, &quot;Joinable in &quot;  _joiningLocationName  &quot;!&quot;);<br />
    }<br />
    <br />
    public static void startJoin()<br />
    {<br />
        if (!startJoinOk())<br />
        {<br />
            _log.warning(&quot;Event not setted propertly.&quot;);<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[startJoin(startJoinOk() = false&quot;);<br />
            return;<br />
        }<br />
        <br />
        _joining = true;<br />
        spawnEventNpc();<br />
        AnnounceToPlayers(true, &quot;Recruiting levels &quot;  _minlvl  &quot; to &quot;  _maxlvl);<br />
        AnnounceToPlayers(true, &quot;Joinable in &quot;  _joiningLocationName  &quot;!&quot;);<br />
        if (Config.CTF_ANNOUNCE_REWARD)<br />
            AnnounceToPlayers(true, &quot;Reward: &quot;  _rewardAmount  &quot; &quot;  ItemTable.getInstance().getTemplate(_rewardId).get  Name());<br />
    }<br />
    <br />
    public static boolean startAutoJoin()<br />
    {<br />
        if (!startJoinOk())<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[startJoin]: startJoinOk() = false&quot;);<br />
            return false;<br />
        }<br />
        <br />
        _joining = true;<br />
        spawnEventNpc();<br />
        AnnounceToPlayers(true, _eventName  &quot; (CTF)!&quot;);<br />
        if (Config.CTF_ANNOUNCE_REWARD)<br />
            AnnounceToPlayers(true, &quot;Reward: &quot;  _rewardAmount  &quot; &quot;  ItemTable.getInstance().getTemplate(_rewardId).get  Name());<br />
        AnnounceToPlayers(true, &quot;Recruiting levels &quot;  _minlvl  &quot; to &quot;  _maxlvl);<br />
        AnnounceToPlayers(true, &quot;Joinable in &quot;  _joiningLocationName  &quot;!&quot;);<br />
        return true;<br />
    }<br />
    <br />
    public static boolean startJoinOk()<br />
    {<br />
        if (Config.CTF_BASE_TELEPORT_FIRST &amp;&amp; (_teamsBaseX.contains(0) || _teamsBaseY.contains(0) || _teamsBaseZ.contains(0)))<br />
            return false;<br />
        else if (_started || _teleport || _joining || _teams.size() &lt; 2 || _eventName.equals(&quot;&quot;) || _joiningLocationName.equals(&quot;&quot;) || _eventDesc.equals(&quot;&quot;) || _npcId == 0 || _npcX == 0 || _npcY == 0 || _npcZ == 0 || _rewardId == 0 || _rewardAmount == 0 || _teamsX.contains(0) || _teamsY.contains(0) || _teamsZ.contains(0) || _flagHoldTime == 0)<br />
            return false;<br />
        try<br />
        {<br />
            if (_flagsX.contains(0) || _flagsY.contains(0) || _flagsZ.contains(0) || _flagIds.contains(0))<br />
                return false;<br />
            if (_flagsX.size() &lt; _teams.size() || _flagsY.size() &lt; _teams.size() || _flagsZ.size() &lt; _teams.size() || _flagIds.size() &lt; _teams.size())<br />
                return false;<br />
        }<br />
        catch (ArrayIndexOutOfBoundsException e)<br />
        {<br />
            return false;<br />
        }<br />
        return true;<br />
    }<br />
    <br />
    private static void spawnEventNpc(L2PcInstance activeChar)<br />
    {<br />
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_npcId);<br />
        <br />
        try<br />
        {<br />
            _npcSpawn = new L2Spawn(tmpl);<br />
            <br />
            _npcSpawn.setLocx(_npcX);<br />
            _npcSpawn.setLocy(_npcY);<br />
            _npcSpawn.setLocz(_npcZ);<br />
            _npcSpawn.setAmount(1);<br />
            _npcSpawn.setHeading(_npcHeading);<br />
            _npcSpawn.setRespawnDelay(1);<br />
            <br />
            SpawnTable.getInstance().addNewSpawn(_npcSpawn, false);<br />
            <br />
            _npcSpawn.init();<br />
            _npcSpawn.getLastSpawn().getStatus().setCurrentHp(  999999999);<br />
            _npcSpawn.getLastSpawn().setTitle(_eventName);<br />
            _npcSpawn.getLastSpawn()._isEventMobCTF = true;<br />
            _npcSpawn.getLastSpawn().isAggressive();<br />
            _npcSpawn.getLastSpawn().decayMe();<br />
            _npcSpawn.getLastSpawn().spawnMe(_npcSpawn.getLast  Spawn().getX(), _npcSpawn.getLastSpawn().getY(), _npcSpawn.getLastSpawn().getZ());<br />
            <br />
            _npcSpawn.getLastSpawn().broadcastPacket(new MagicSkillUse(_npcSpawn.getLastSpawn(), _npcSpawn.getLastSpawn(), 1034, 1, 1, 1));<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF Engine[spawnEventNpc(&quot;  activeChar.getName()  &quot;)]: exception: &quot;  e.getMessage());<br />
        }<br />
    }<br />
    <br />
    public static class BaseTeleportTask implements Runnable<br />
    {<br />
        L2PcInstance player;<br />
        boolean onBegin;<br />
        <br />
        public BaseTeleportTask(L2PcInstance _player, boolean _onBegin)<br />
        {<br />
            player = _player;<br />
            onBegin = _onBegin;<br />
        }<br />
        <br />
        public BaseTeleportTask(boolean _onBegin)<br />
        {<br />
            onBegin = _onBegin;<br />
        }<br />
        <br />
        @Override<br />
        public void run()<br />
        {<br />
            if (CTF._teleport || CTF._started)<br />
            {<br />
                if (onBegin)<br />
                {<br />
                    spawnAllFlags();<br />
                    <br />
                    for (L2PcInstance players : _players)<br />
                    {<br />
                        new BaseTeleportTask(players, false).run();<br />
                    }<br />
                }<br />
                else<br />
                {<br />
                    if (player != null)<br />
                    {<br />
                        player.teleToLocation(CTF._teamsX.get(CTF._teams.i  ndexOf(player._teamNameCTF)), CTF._teamsY.get(CTF._teams.indexOf(player._teamNam  eCTF)), CTF._teamsZ.get(CTF._teams.indexOf(player._teamNam  eCTF)), false);<br />
                    }<br />
                }<br />
            }<br />
        }<br />
    }<br />
    <br />
    private static void spawnEventNpc()<br />
    {<br />
        L2NpcTemplate tmpl = NpcTable.getInstance().getTemplate(_npcId);<br />
        <br />
        try<br />
        {<br />
            _npcSpawn = new L2Spawn(tmpl);<br />
            <br />
            _npcSpawn.setLocx(_npcX);<br />
            _npcSpawn.setLocy(_npcY);<br />
            _npcSpawn.setLocz(_npcZ);<br />
            _npcSpawn.setAmount(1);<br />
            _npcSpawn.setHeading(_npcHeading);<br />
            _npcSpawn.setRespawnDelay(1);<br />
            <br />
            SpawnTable.getInstance().addNewSpawn(_npcSpawn, false);<br />
            <br />
            _npcSpawn.init();<br />
            _npcSpawn.getLastSpawn().getStatus().setCurrentHp(  999999999);<br />
            _npcSpawn.getLastSpawn().setTitle(_eventName);<br />
            _npcSpawn.getLastSpawn()._isEventMobCTF = true;<br />
            _npcSpawn.getLastSpawn().isAggressive();<br />
            _npcSpawn.getLastSpawn().decayMe();<br />
            _npcSpawn.getLastSpawn().spawnMe(_npcSpawn.getLast  Spawn().getX(), _npcSpawn.getLastSpawn().getY(), _npcSpawn.getLastSpawn().getZ());<br />
            <br />
            _npcSpawn.getLastSpawn().broadcastPacket(new MagicSkillUse(_npcSpawn.getLastSpawn(), _npcSpawn.getLastSpawn(), 1034, 1, 1, 1));<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF Engine[spawnEventNpc(exception: &quot;  e.getMessage());<br />
        }<br />
    }<br />
    <br />
    public static void teleportStart()<br />
    {<br />
        if (!_joining || _started || _teleport)<br />
            return;<br />
        <br />
        if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; checkMinPlayers(_playersShuffle.size()))<br />
        {<br />
            removeOfflinePlayers();<br />
            shuffleTeams();<br />
        }<br />
        else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; !checkMinPlayers(_playersShuffle.size()))<br />
        {<br />
            AnnounceToPlayers(true, &quot;Not enough players for event. Min Requested : &quot;  _minPlayers  &quot;, Participating : &quot;  _playersShuffle.size());<br />
            return;<br />
        }<br />
        <br />
        _joining = false;<br />
        setUserData();<br />
        <br />
        if (Config.CTF_BASE_TELEPORT_FIRST)<br />
        {<br />
            AnnounceToPlayers(true, _eventName  &quot;(CTF): Teleporting to team base. The fight will being in 20 seconds!&quot;);<br />
            <br />
            for (L2PcInstance player : _players)<br />
            {<br />
                if (player != null)<br />
                {<br />
                    if (Config.CTF_ON_START_UNSUMMON_PET)<br />
                    {<br />
                        //Remove Summon's buffs<br />
                        if (player.getPet() != null)<br />
                        {<br />
                            L2Summon summon = player.getPet();<br />
                            for (L2Effect e : summon.getAllEffects())<br />
                                if (e != null)<br />
                                    e.exit();<br />
                            <br />
                            if (summon instanceof L2PetInstance)<br />
                                summon.unSummon(player);<br />
                        }<br />
                    }<br />
                    <br />
                    if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)<br />
                    {<br />
                        for (L2Effect e : player.getAllEffects())<br />
                        {<br />
                            if (e != null)<br />
                                e.exit();<br />
                        }<br />
                    }<br />
                    <br />
                    //Remove player from his party<br />
                    if (player.getParty() != null)<br />
                    {<br />
                        L2Party party = player.getParty();<br />
                        party.removePartyMember(player, null);<br />
                    }<br />
                    <br />
                    player.teleToLocation(_teamsBaseX.get(_teams.index  Of(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF  )), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF  )));<br />
                }<br />
            }<br />
            ThreadPoolManager.getInstance().scheduleGeneral(ne  w BaseTeleportTask(true), 20000);<br />
        }<br />
        else<br />
        {<br />
            AnnounceToPlayers(true, _eventName  &quot;(CTF): Teleporting to team spot in 20 seconds!&quot;);<br />
            <br />
            ThreadPoolManager.getInstance().scheduleGeneral(ne  w Runnable()<br />
            {<br />
                public void run()<br />
                {<br />
                    sit();<br />
                    spawnAllFlags();<br />
                    <br />
                    for (L2PcInstance player : _players)<br />
                    {<br />
                        if (player != null)<br />
                        {<br />
                            if (Config.CTF_ON_START_UNSUMMON_PET)<br />
                            {<br />
                                //Remove Summon's buffs<br />
                                if (player.getPet() != null)<br />
                                {<br />
                                    L2Summon summon = player.getPet();<br />
                                    for (L2Effect e : summon.getAllEffects())<br />
                                        if (e != null)<br />
                                            e.exit();<br />
                                    <br />
                                    if (summon instanceof L2PetInstance)<br />
                                        summon.unSummon(player);<br />
                                }<br />
                            }<br />
                            <br />
                            if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)<br />
                            {<br />
                                for (L2Effect e : player.getAllEffects())<br />
                                {<br />
                                    if (e != null)<br />
                                        e.exit();<br />
                                }<br />
                            }<br />
                            <br />
                            //Remove player from his party<br />
                            if (player.getParty() != null)<br />
                            {<br />
                                L2Party party = player.getParty();<br />
                                party.removePartyMember(player, null);<br />
                            }<br />
                            <br />
                            player.teleToLocation(_teamsX.get(_teams.indexOf(p  layer._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));<br />
                        }<br />
                    }<br />
                }<br />
            }, 20000);<br />
        }<br />
        _teleport = true;<br />
    }<br />
    <br />
    public static boolean teleportAutoStart()<br />
    {<br />
        if (!_joining || _started || _teleport)<br />
            return false;<br />
        <br />
        if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; checkMinPlayers(_playersShuffle.size()))<br />
        {<br />
            removeOfflinePlayers();<br />
            shuffleTeams();<br />
        }<br />
        else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; !checkMinPlayers(_playersShuffle.size()))<br />
        {<br />
            AnnounceToPlayers(true, &quot;Not enough players for event. Min Requested : &quot;  _minPlayers  &quot;, Participating : &quot;  _playersShuffle.size());<br />
            return false;<br />
        }<br />
        <br />
        _joining = false;<br />
        setUserData();<br />
        <br />
        if (Config.CTF_BASE_TELEPORT_FIRST)<br />
        {<br />
            AnnounceToPlayers(true, _eventName  &quot;(CTF): Teleporting to team base. The fight will being in 20 seconds!&quot;);<br />
            <br />
            for (L2PcInstance player : _players)<br />
            {<br />
                if (player != null)<br />
                {<br />
                    if (Config.CTF_ON_START_UNSUMMON_PET)<br />
                    {<br />
                        //Remove Summon's buffs<br />
                        if (player.getPet() != null)<br />
                        {<br />
                            L2Summon summon = player.getPet();<br />
                            for (L2Effect e : summon.getAllEffects())<br />
                                if (e != null)<br />
                                    e.exit();<br />
                            <br />
                            if (summon instanceof L2PetInstance)<br />
                                summon.unSummon(player);<br />
                        }<br />
                    }<br />
                    <br />
                    if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)<br />
                    {<br />
                        for (L2Effect e : player.getAllEffects())<br />
                        {<br />
                            if (e != null)<br />
                                e.exit();<br />
                        }<br />
                    }<br />
                    <br />
                    //Remove player from his party<br />
                    if (player.getParty() != null)<br />
                    {<br />
                        L2Party party = player.getParty();<br />
                        party.removePartyMember(player, null);<br />
                    }<br />
                    <br />
                    player.teleToLocation(_teamsBaseX.get(_teams.index  Of(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF  )), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF  )));<br />
                }<br />
            }<br />
            ThreadPoolManager.getInstance().scheduleGeneral(ne  w BaseTeleportTask(true), 30000);<br />
        }<br />
        else<br />
        {<br />
            AnnounceToPlayers(false, _eventName  &quot;(CTF): Teleporting to team spot in 20 seconds!&quot;);<br />
            <br />
            ThreadPoolManager.getInstance().scheduleGeneral(ne  w Runnable()<br />
            {<br />
                public void run()<br />
                {<br />
                    sit();<br />
                    spawnAllFlags();<br />
                    <br />
                    for (L2PcInstance player : _players)<br />
                    {<br />
                        if (player != null)<br />
                        {<br />
                            if (Config.CTF_ON_START_UNSUMMON_PET)<br />
                            {<br />
                                //Remove Summon's buffs<br />
                                if (player.getPet() != null)<br />
                                {<br />
                                    L2Summon summon = player.getPet();<br />
                                    for (L2Effect e : summon.getAllEffects())<br />
                                        if (e != null)<br />
                                            e.exit();<br />
                                    <br />
                                    if (summon instanceof L2PetInstance)<br />
                                        summon.unSummon(player);<br />
                                }<br />
                            }<br />
                            <br />
                            if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)<br />
                            {<br />
                                for (L2Effect e : player.getAllEffects())<br />
                                {<br />
                                    if (e != null)<br />
                                        e.exit();<br />
                                }<br />
                            }<br />
                            <br />
                            //Remove player from his party<br />
                            if (player.getParty() != null)<br />
                            {<br />
                                L2Party party = player.getParty();<br />
                                party.removePartyMember(player, null);<br />
                            }<br />
                            <br />
                            player.teleToLocation(_teamsX.get(_teams.indexOf(p  layer._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));<br />
                        }<br />
                    }<br />
                }<br />
            }, 20000);<br />
        }<br />
        _teleport = true;<br />
        return true;<br />
    }<br />
    <br />
    public static void startEvent(L2PcInstance activeChar)<br />
    {<br />
        if (!startEventOk())<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[startEvent(&quot;  activeChar.getName()  &quot;)]: startEventOk() = false&quot;);<br />
            return;<br />
        }<br />
        <br />
        _teleport = false;<br />
        <br />
        _started = true;<br />
        StartEvent();<br />
    }<br />
    <br />
    public static void setJoinTime(int time)<br />
    {<br />
        _joinTime = time;<br />
    }<br />
    <br />
    public static void setEventTime(int time)<br />
    {<br />
        _eventTime = time;<br />
    }<br />
    <br />
    public static boolean startAutoEvent()<br />
    {<br />
        if (!startEventOk())<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[startEvent]: startEventOk() = false&quot;);<br />
            return false;<br />
        }<br />
        <br />
        _teleport = false;<br />
        <br />
        AnnounceToPlayers(true, _eventName  &quot;(CTF): Started. Go Capture the Flags!&quot;);<br />
        _started = true;<br />
        return true;<br />
    }<br />
    <br />
    public static synchronized void autoEvent()<br />
    {<br />
        if (startAutoJoin())<br />
        {<br />
            if (_joinTime &gt; 0)<br />
                waiter(_joinTime * 60 * 1000); // minutes for join event<br />
            else if (_joinTime &lt;= 0)<br />
            {<br />
                abortEvent();<br />
                return;<br />
            }<br />
            if (teleportAutoStart())<br />
            {<br />
                waiter(1 * 30 * 1000); // 30 seconds wait time until start fight after teleported<br />
                if (startAutoEvent())<br />
                {<br />
                    waiter(_eventTime * 60 * 1000); // minutes for event time<br />
                    finishEvent();<br />
                }<br />
            }<br />
            else if (!teleportAutoStart())<br />
            {<br />
                abortEvent();<br />
            }<br />
        }<br />
    }<br />
    <br />
    // a scheduled time to remove the flag after a user set time _flagHoldTime<br />
    private static void flagHoldTimer(final L2PcInstance _player, final long interval)<br />
    {<br />
        ThreadPoolManager.getInstance().scheduleGeneral(ne  w Runnable()<br />
        {<br />
            @SuppressWarnings(&quot;null&quot;)<br />
            public void run()<br />
            {<br />
                if (_started)<br />
                {<br />
                    try<br />
                    // just to be sure <br />
                    {<br />
                        long countDown = System.currentTimeMillis();<br />
                        int seconds = (int) interval;<br />
                        <br />
                        while (countDown  (interval * 1000) &gt; System.currentTimeMillis() &amp;&amp; _flagsNotRemoved.get(_teams.indexOf(_player._teamN  ameCTF)) != false)<br />
                        {<br />
                            seconds--;<br />
                            <br />
                            switch (seconds)<br />
                            {<br />
                                case 600: //  10 minutes left <br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 10 minutes to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 300: // 5 minutes left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 5 minutes to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 240: // 4 minutes left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 5 minutes to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 180: // 3 minutes left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 3 minutes to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 120: // 2 minutes left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 2 minutes to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 60: // 1 minute left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 1 minute to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 30: // 30 seconds left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 30 seconds to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 10: // 10 seconds left<br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                        _player.sendMessage(&quot;You have 10 seconds to capture the flag or it will be returned.&quot;);<br />
                                    break;<br />
                                case 1: // 1 seconds left        <br />
                                    if (_player != null &amp;&amp; _player._haveFlagCTF)<br />
                                    {<br />
                                        removeFlagFromPlayer(_player);<br />
                                        _flagsTaken.set(_teams.indexOf(_player._teamNameHa  veFlagCTF), false);<br />
                                        spawnFlag(_player._teamNameHaveFlagCTF);<br />
                                        _player.sendMessage(&quot;You've held the flag for too long. The enemy flag has been returned.&quot;);<br />
                                        AnnounceToPlayers(false, _eventName  &quot;(CTF): &quot;  _player.getName()  &quot; held the flag for too long. &quot;  _player._teamNameCTF  &quot; flag has been returned.&quot;);<br />
                                    }<br />
                                    break;<br />
                            }<br />
                            long startOneSecondWaiterStartTime = System.currentTimeMillis();<br />
                            <br />
                            // only the try catch with Thread.sleep(1000) give bad countdown on high wait times<br />
                            while (startOneSecondWaiterStartTime  1000 &gt; System.currentTimeMillis())<br />
                            {<br />
                                try<br />
                                {<br />
                                    Thread.sleep(1);<br />
                                }<br />
                                catch (InterruptedException ie)<br />
                                {<br />
                                }<br />
                            }<br />
                        }<br />
                    }<br />
                    catch (Exception e)<br />
                    {<br />
                        _log.warning(&quot;Exception: CTF.flagHoldTimer(): &quot;  e.getMessage());<br />
                    }<br />
                }<br />
            }<br />
        }, 1);<br />
    }<br />
    <br />
    private static synchronized void waiter(long interval)<br />
    {<br />
        long startWaiterTime = System.currentTimeMillis();<br />
        int seconds = (int) (interval / 1000);<br />
        <br />
        while (startWaiterTime  interval &gt; System.currentTimeMillis())<br />
        {<br />
            seconds--; // here because we don't want to see two time announce at the same time<br />
            <br />
            if (_joining || _started || _teleport)<br />
            {<br />
                switch (seconds)<br />
                {<br />
                    case 3600: // 1 hour left<br />
                        if (_joining)<br />
                        {<br />
                            AnnounceToPlayers(true, _eventName  &quot;(CTF): Joinable in &quot;  _joiningLocationName  &quot;!&quot;);<br />
                            AnnounceToPlayers(true, &quot;CTF Event: &quot;  seconds / 60 / 60  &quot; hour(s) till registration close!&quot;);<br />
                        }<br />
                        else if (_started)<br />
                            AnnounceToPlayers(false, &quot;CTF Event: &quot;  seconds / 60 / 60  &quot; hour(s) till event finish!&quot;);<br />
                        <br />
                        break;<br />
                    case 1800: // 30 minutes left<br />
                    case 600: //  10 minutes left <br />
                    case 180: // 3 minutes left<br />
                    case 120: // 2 minutes left<br />
                    case 60: // 1 minute left<br />
                        if (_joining)<br />
                        {<br />
                            removeOfflinePlayers();<br />
                            AnnounceToPlayers(true, _eventName  &quot;(CTF): Joinable in &quot;  _joiningLocationName  &quot;!&quot;);<br />
                            AnnounceToPlayers(true, &quot;CTF Event: &quot;  seconds / 60  &quot; minute(s) till registration ends!&quot;);<br />
                        }<br />
                        else if (_started)<br />
                            AnnounceToPlayers(false, &quot;CTF Event: &quot;  seconds / 60  &quot; minute(s) till event ends!&quot;);<br />
                        <br />
                        break;<br />
                    case 30: // 30 seconds left<br />
                    case 10: // 10 seconds left<br />
                    case 3: // 3 seconds left<br />
                    case 2: // 2 seconds left<br />
                    case 1: // 1 seconds left<br />
                        if (_joining)<br />
                            AnnounceToPlayers(true, &quot;CTF Event: &quot;  seconds  &quot; second(s) till registration close!&quot;);<br />
                        else if (_teleport)<br />
                            AnnounceToPlayers(false, &quot;CTF Event: &quot;  seconds  &quot; seconds(s) till fight starts!&quot;);<br />
                        else if (_started)<br />
                            AnnounceToPlayers(false, &quot;CTF Event: &quot;  seconds  &quot; second(s) till event ends!&quot;);<br />
                        <br />
                        break;<br />
                }<br />
            }<br />
            <br />
            long startOneSecondWaiterStartTime = System.currentTimeMillis();<br />
            <br />
            // only the try catch with Thread.sleep(1000) give bad countdown on high wait times<br />
            while (startOneSecondWaiterStartTime  1000 &gt; System.currentTimeMillis())<br />
            {<br />
                try<br />
                {<br />
                    Thread.sleep(1);<br />
                }<br />
                catch (InterruptedException ie)<br />
                {<br />
                }<br />
            }<br />
        }<br />
    }<br />
    <br />
    private static boolean startEventOk()<br />
    {<br />
        if (_joining || !_teleport || _started)<br />
            return false;<br />
        <br />
        if (Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;) || Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;))<br />
        {<br />
            if (_teamPlayersCount.contains(0))<br />
                return false;<br />
        }<br />
        else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;))<br />
        {<br />
            Vector&lt;L2PcInstance&gt; playersShuffleTemp = new Vector&lt;L2PcInstance&gt;();<br />
            int loopCount = 0;<br />
            <br />
            loopCount = _playersShuffle.size();<br />
            <br />
            for (int i = 0; i &lt; loopCount; i)<br />
            {<br />
                if (_playersShuffle != null)<br />
                    playersShuffleTemp.add(_playersShuffle.get(i));<br />
            }<br />
            <br />
            _playersShuffle = playersShuffleTemp;<br />
            playersShuffleTemp.clear();<br />
            <br />
            //  if (_playersShuffle.size() &lt; (_teams.size()*2)){<br />
            //      return false;<br />
            //  }<br />
        }<br />
        <br />
        return true;<br />
    }<br />
    <br />
    public static void shuffleTeams()<br />
    {<br />
        int teamCount = 0, playersCount = 0;<br />
        <br />
        for (;;)<br />
        {<br />
            if (_playersShuffle.isEmpty())<br />
                break;<br />
            <br />
            int playerToAddIndex = Rnd.nextInt(_playersShuffle.size());<br />
            L2PcInstance player = null;<br />
            player = _playersShuffle.get(playerToAddIndex);<br />
            player._originalNameColorCTF = player.getAppearance().getNameColor();<br />
            player._originalKarmaCTF = player.getKarma();<br />
            <br />
            _players.add(player);<br />
            _players.get(playersCount)._teamNameCTF = _teams.get(teamCount);<br />
            _savePlayers.add(_players.get(playersCount).getNam  e());<br />
            _savePlayerTeams.add(_teams.get(teamCount));<br />
            playersCount;<br />
            <br />
            if (teamCount == _teams.size() - 1)<br />
                teamCount = 0;<br />
            else<br />
                teamCount;<br />
            <br />
            _playersShuffle.remove(playerToAddIndex);<br />
        }<br />
    }<br />
    <br />
    public static void setUserData()<br />
    {<br />
        for (L2PcInstance player : _players)<br />
        {<br />
            player.getAppearance().setNameColor(_teamColors.ge  t(_teams.indexOf(player._teamNameCTF)));<br />
            player.setKarma(0);<br />
            player.broadcastUserInfo();<br />
        }<br />
    }<br />
    <br />
    public static void finishEvent()<br />
    {<br />
        if (!finishEventOk())<br />
        {<br />
            if (Config.DEBUG)<br />
                _log.fine(&quot;CTF Engine[finishEvent]: finishEventOk() = false&quot;);<br />
            return;<br />
        }<br />
        <br />
        _started = false;<br />
        unspawnEventNpc();<br />
        unspawnAllFlags();<br />
        processTopTeam();<br />
        <br />
        if (_topScore != 0)<br />
            playKneelAnimation(_topTeam);<br />
        <br />
        if (Config.CTF_ANNOUNCE_TEAM_STATS)<br />
        {<br />
            AnnounceToPlayers(true, _eventName  &quot; Team Statistics:&quot;);<br />
            for (String team : _teams)<br />
            {<br />
                int _flags_ = teamFlagCount(team);<br />
                AnnounceToPlayers(true, &quot;Team: &quot;  team  &quot; - Flags taken: &quot;  _flags_);<br />
            }<br />
        }<br />
        <br />
        teleportFinish();<br />
    }<br />
    <br />
    //show loosers and winners animations<br />
    public static void playKneelAnimation(String teamName)<br />
    {<br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null &amp;&amp; player.isOnline() &amp;&amp; player._inEventCTF == true)<br />
            {<br />
                if (!player._teamNameCTF.equals(teamName))<br />
                {<br />
                    player.broadcastPacket(new SocialAction(player.getObjectId(), 7));<br />
                }<br />
                else if (player._teamNameCTF.equals(teamName))<br />
                {<br />
                    player.broadcastPacket(new SocialAction(player.getObjectId(), 3));<br />
                }<br />
            }<br />
        }<br />
    }<br />
    <br />
    private static boolean finishEventOk()<br />
    {<br />
        if (!_started)<br />
            return false;<br />
        <br />
        return true;<br />
    }<br />
    <br />
    /* Erro nas mensagens<br />
    public static void rewardTeam(String teamName)<br />
    {                    <br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null)<br />
            {<br />
                if (player._teamNameCTF.equals(teamName))<br />
                {<br />
                    player.addItem(&quot;CTF Event: &quot;  _eventName, _rewardId, _rewardAmount, player, true);<br />
<br />
                    NpcHtmlMessage nhm = new NpcHtmlMessage(0);<br />
                    TextBuilder replyMSG = new TextBuilder();<br />
                    int count = 0;<br />
                    <br />
                    replyMSG.append(&quot;&lt;html&gt;&lt;body&gt;&lt;center&gt;&lt;font color=\&quot;FF66OO\&quot;&gt;PG-L][ Rare CTF Event&lt;/font&gt;&lt;br&gt;Your team won!&lt;br&gt;&lt;/center&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;center&gt;-= &lt;font color=\&quot;99CC00\&quot;&gt;Best Flag Runners&lt;/font&gt; =-&lt;/center&gt;&lt;br&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;table width=\&quot;200\&quot; align=\&quot;center\&quot;&gt;&lt;tr align=\&quot;center\&quot;&gt;&lt;td&gt;&quot;);<br />
                    <br />
                    for (String team : _teams)<br />
                    {<br />
                        replyMSG.append(&quot;&lt;font color=\&quot;LEVEL\&quot;&gt;&quot;  team  &quot;&lt;/font&gt;&quot;);<br />
                        <br />
                        for (L2PcInstance p : _players)<br />
                        {<br />
                                if (_playerScores.containsKey(p.getName()))<br />
                                {<br />
                                    if (p._teamNameCTF.equals(team))<br />
                                    {<br />
                                        replyMSG.append(&quot;&lt;br&gt;&quot;  count  &quot;. &quot;  p.getName()  &quot; - &quot;  _playerScores.get(p.getName()));<br />
                                    }<br />
                                }<br />
                        }<br />
                        if (((_teams.indexOf(team)  1) % 2) != 0)<br />
                        {<br />
                            if (team == _teams.lastElement())<br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
                            else <br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;td&gt;&quot;);<br />
                        }<br />
                        else<br />
                        {<br />
                            if (team == _teams.lastElement())<br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
                            else<br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&quot;);<br />
                        }<br />
                        count = 0;<br />
                    }<br />
<br />
                    nhm.setHtml(replyMSG.toString());<br />
                    player.sendPacket(nhm);<br />
<br />
                    // Send a Server-&gt;Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet<br />
                    player.sendPacket(ActionFailed.STATIC_PACKET);<br />
                }<br />
                else<br />
                {<br />
                    NpcHtmlMessage nhm = new NpcHtmlMessage(0);<br />
                    TextBuilder replyMSG = new TextBuilder();<br />
                    int count = 0;<br />
<br />
                    replyMSG.append(&quot;&lt;html&gt;&lt;body&gt;&lt;center&gt;&lt;font color=\&quot;FF66OO\&quot;&gt;PG-L][ Rare CTF Event&lt;/font&gt;&lt;br&gt;Better luck next time!&lt;br&gt;&lt;/center&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;center&gt;-= &lt;font color=\&quot;99CC00\&quot;&gt;Best Flag Runners&lt;/font&gt; =-&lt;/center&gt;&lt;br&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;table width=\&quot;200\&quot; align=\&quot;center\&quot;&gt;&lt;center&gt;&lt;tr align=\&quot;center\&quot;&gt;&lt;td&gt;&quot;);<br />
                    <br />
                    for (String team : _teams)<br />
                    {<br />
                        replyMSG.append(&quot;&lt;font color=\&quot;LEVEL\&quot;&gt;&quot;  team  &quot;&lt;/font&gt;&quot;);<br />
                        <br />
                        for (L2PcInstance p : _players)<br />
                        {<br />
                                if (_playerScores.containsKey(p.getName()))<br />
                                {<br />
                                    if (p._teamNameCTF.equals(team))<br />
                                    {<br />
                                        replyMSG.append(&quot;&lt;br&gt;&quot;  count  &quot;. &quot;  p.getName()  &quot; - &quot;  _playerScores.get(p.getName()));<br />
                                    }<br />
                                }<br />
                        }<br />
                        if (((_teams.indexOf(team)  1) % 2) != 0)<br />
                        {<br />
                            if (team == _teams.lastElement())<br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
                            else <br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;td&gt;&quot;);<br />
                        }<br />
                        else<br />
                        {<br />
                            if (team == _teams.lastElement())<br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
                            else<br />
                                replyMSG.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&quot;);<br />
                        }<br />
                        count = 0;<br />
                    }<br />
<br />
                    nhm.setHtml(replyMSG.toString());<br />
                    player.sendPacket(nhm);<br />
<br />
                    // Send a Server-&gt;Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet<br />
                    player.sendPacket(ActionFailed.STATIC_PACKET);<br />
                }<br />
            }<br />
        }<br />
    }<br />
    */<br />
<br />
    public static void rewardTeam(String teamName)<br />
    {<br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null)<br />
            {<br />
                if (player._teamNameCTF.equals(teamName))<br />
                {<br />
                    player.addItem(&quot;CTF Event: &quot;  _eventName, _rewardId, _rewardAmount, player, true);<br />
                    <br />
                    NpcHtmlMessage nhm = new NpcHtmlMessage(5);<br />
                    TextBuilder replyMSG = new TextBuilder();<br />
                    <br />
                    replyMSG.append(&quot;&lt;html&gt;&lt;body&gt;Your team wins the event. Look in your inventory for the reward.&lt;/body&gt;&lt;/html&gt;&quot;);<br />
                    <br />
                    nhm.setHtml(replyMSG.toString());<br />
                    player.sendPacket(nhm);<br />
                    <br />
                    // Send a Server-&gt;Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet<br />
                    player.sendPacket(ActionFailed.STATIC_PACKET);<br />
                }<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void abortEvent()<br />
    {<br />
        if (!_joining &amp;&amp; !_teleport &amp;&amp; !_started)<br />
        {<br />
            GmListTable.broadcastMessageToGMs(&quot;Failed aborting CTF: No CTF instance has been started.&quot;);<br />
            return;<br />
        }<br />
        <br />
        if (_joining &amp;&amp; !_teleport &amp;&amp; !_started)<br />
        {<br />
            unspawnEventNpc();<br />
            cleanCTF();<br />
            _joining = false;<br />
            AnnounceToPlayers(true, _eventName  &quot;(CTF): Match aborted!&quot;);<br />
            return;<br />
        }<br />
        _joining = false;<br />
        _teleport = false;<br />
        _started = false;<br />
        unspawnEventNpc();<br />
        unspawnAllFlags();<br />
        AnnounceToPlayers(true, _eventName  &quot;(CTF): Match aborted!&quot;);<br />
        teleportFinish();<br />
    }<br />
    <br />
    public static void sit()<br />
    {<br />
        if (_sitForced)<br />
            _sitForced = false;<br />
        else<br />
            _sitForced = true;<br />
        <br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null)<br />
            {<br />
                if (_sitForced)<br />
                {<br />
                    player.stopMove(null, false);<br />
                    player.abortAttack();<br />
                    player.abortCast();<br />
                    <br />
                    if (!player.isSitting())<br />
                        player.sitDown();<br />
                }<br />
                else<br />
                {<br />
                    if (player.isSitting())<br />
                        player.standUp();<br />
                }<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void dumpData()<br />
    {<br />
        _log.warning(&quot;&quot;);<br />
        _log.warning(&quot;&quot;);<br />
        <br />
        if (!_joining &amp;&amp; !_teleport &amp;&amp; !_started)<br />
        {<br />
            _log.warning(&quot;&lt;&lt;----------------------------------&gt;&gt;&quot;);<br />
            _log.warning(&quot;&gt;&gt; CTF Engine infos dump (INACTIVE) &lt;&lt;&quot;);<br />
            _log.warning(&quot;&lt;&lt;--^----^^-----^----^^------^^-----&gt;&gt;&quot;);<br />
        }<br />
        else if (_joining &amp;&amp; !_teleport &amp;&amp; !_started)<br />
        {<br />
            _log.warning(&quot;&lt;&lt;---------------------------------&gt;&gt;&quot;);<br />
            _log.warning(&quot;&gt;&gt; CTF Engine infos dump (JOINING) &lt;&lt;&quot;);<br />
            _log.warning(&quot;&lt;&lt;--^----^^-----^----^^------^-----&gt;&gt;&quot;);<br />
        }<br />
        else if (!_joining &amp;&amp; _teleport &amp;&amp; !_started)<br />
        {<br />
            _log.warning(&quot;&lt;&lt;----------------------------------&gt;&gt;&quot;);<br />
            _log.warning(&quot;&gt;&gt; CTF Engine infos dump (TELEPORT) &lt;&lt;&quot;);<br />
            _log.warning(&quot;&lt;&lt;--^----^^-----^----^^------^^-----&gt;&gt;&quot;);<br />
        }<br />
        else if (!_joining &amp;&amp; !_teleport &amp;&amp; _started)<br />
        {<br />
            _log.warning(&quot;&lt;&lt;---------------------------------&gt;&gt;&quot;);<br />
            _log.warning(&quot;&gt;&gt; CTF Engine infos dump (STARTED) &lt;&lt;&quot;);<br />
            _log.warning(&quot;&lt;&lt;--^----^^-----^----^^------^-----&gt;&gt;&quot;);<br />
        }<br />
        <br />
        _log.warning(&quot;Name: &quot;  _eventName);<br />
        _log.warning(&quot;Desc: &quot;  _eventDesc);<br />
        _log.warning(&quot;Join location: &quot;  _joiningLocationName);<br />
        _log.warning(&quot;Min lvl: &quot;  _minlvl);<br />
        _log.warning(&quot;Max lvl: &quot;  _maxlvl);<br />
        _log.warning(&quot;&quot;);<br />
        _log.warning(&quot;##########################&quot;);<br />
        _log.warning(&quot;# _teams(Vector&lt;String&gt;) #&quot;);<br />
        _log.warning(&quot;##########################&quot;);<br />
        <br />
        for (String team : _teams)<br />
            _log.warning(team  &quot; Flags Taken :&quot;  _teamPointsCount.get(_teams.indexOf(team)));<br />
        <br />
        if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;))<br />
        {<br />
            _log.warning(&quot;&quot;);<br />
            _log.warning(&quot;####################################  #####&quot;);<br />
            _log.warning(&quot;# _playersShuffle(Vector&lt;L2PcInstance&gt;) #&quot;);<br />
            _log.warning(&quot;####################################  #####&quot;);<br />
            <br />
            for (L2PcInstance player : _playersShuffle)<br />
            {<br />
                if (player != null)<br />
                    _log.warning(&quot;Name: &quot;  player.getName());<br />
            }<br />
        }<br />
        <br />
        _log.warning(&quot;&quot;);<br />
        _log.warning(&quot;##################################&quot;)  ;<br />
        _log.warning(&quot;# _players(Vector&lt;L2PcInstance&gt;) #&quot;);<br />
        _log.warning(&quot;##################################&quot;)  ;<br />
        <br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null)<br />
                _log.warning(&quot;Name: &quot;  player.getName()  &quot;   Team: &quot;  player._teamNameCTF  &quot;  Flags :&quot;  player._countCTFflags);<br />
        }<br />
        <br />
        _log.warning(&quot;&quot;);<br />
        _log.warning(&quot;####################################  #################################&quot;);<br />
        _log.warning(&quot;# _savePlayers(Vector&lt;String&gt;) and _savePlayerTeams(Vector&lt;String&gt;) #&quot;);<br />
        _log.warning(&quot;####################################  #################################&quot;);<br />
        <br />
        for (String player : _savePlayers)<br />
            _log.warning(&quot;Name: &quot;  player  &quot;    Team: &quot;  _savePlayerTeams.get(_savePlayers.indexOf(player))  );<br />
        <br />
        _log.warning(&quot;&quot;);<br />
        _log.warning(&quot;&quot;);<br />
        _log.warning(&quot;**********==CTF==************&quot;);<br />
        _log.warning(&quot;CTF._teamPointsCount:&quot;  _teamPointsCount.toString());<br />
        _log.warning(&quot;CTF._flagIds:&quot;  _flagIds.toString());<br />
        _log.warning(&quot;CTF._flagSpawns:&quot;  _flagSpawns.toString());<br />
        _log.warning(&quot;CTF._throneSpawns:&quot;  _throneSpawns.toString());<br />
        _log.warning(&quot;CTF._flagsTaken:&quot;  _flagsTaken.toString());<br />
        _log.warning(&quot;CTF._flagsX:&quot;  _flagsX.toString());<br />
        _log.warning(&quot;CTF._flagsY:&quot;  _flagsY.toString());<br />
        _log.warning(&quot;CTF._flagsZ:&quot;  _flagsZ.toString());<br />
        _log.warning(&quot;************EOF**************&quot;);<br />
        _log.warning(&quot;&quot;);<br />
    }<br />
    <br />
    public static void loadData()<br />
    {<br />
        _eventName = new String();<br />
        _eventDesc = new String();<br />
        _topTeam = new String();<br />
        _joiningLocationName = new String();<br />
        _teams = new Vector&lt;String&gt;();<br />
        _savePlayers = new Vector&lt;String&gt;();<br />
        _savePlayerTeams = new Vector&lt;String&gt;();<br />
        _players = new Vector&lt;L2PcInstance&gt;();<br />
        _playersShuffle = new Vector&lt;L2PcInstance&gt;();<br />
        _teamPlayersCount = new Vector&lt;Integer&gt;();<br />
        _teamPointsCount = new Vector&lt;Integer&gt;();<br />
        _teamColors = new Vector&lt;Integer&gt;();<br />
        _teamsX = new Vector&lt;Integer&gt;();<br />
        _teamsY = new Vector&lt;Integer&gt;();<br />
        _teamsZ = new Vector&lt;Integer&gt;();<br />
        _teamsBaseX = new Vector&lt;Integer&gt;();<br />
        _teamsBaseY = new Vector&lt;Integer&gt;();<br />
        _teamsBaseZ = new Vector&lt;Integer&gt;();<br />
        _playerScores = new FastMap&lt;String, Integer&gt;();<br />
        <br />
        _throneSpawns = new Vector&lt;L2Spawn&gt;();<br />
        _flagSpawns = new Vector&lt;L2Spawn&gt;();<br />
        _flagsTaken = new Vector&lt;Boolean&gt;();<br />
        _flagIds = new Vector&lt;Integer&gt;();<br />
        _flagsX = new Vector&lt;Integer&gt;();<br />
        _flagsY = new Vector&lt;Integer&gt;();<br />
        _flagsZ = new Vector&lt;Integer&gt;();<br />
        _flagsNotRemoved = new Vector&lt;Boolean&gt;();<br />
        <br />
        _joining = false;<br />
        _teleport = false;<br />
        _started = false;<br />
        _sitForced = false;<br />
        _npcId = 0;<br />
        _npcX = 0;<br />
        _npcY = 0;<br />
        _npcZ = 0;<br />
        _npcHeading = 0;<br />
        _rewardId = 0;<br />
        _rewardAmount = 0;<br />
        _topScore = 0;<br />
        _minlvl = 0;<br />
        _maxlvl = 0;<br />
        _joinTime = 0;<br />
        _eventTime = 0;<br />
        _minPlayers = 0;<br />
        _maxPlayers = 0;<br />
        _flagHoldTime = 0;<br />
        <br />
        Connection con = null;<br />
        try<br />
        {<br />
            PreparedStatement statement;<br />
            ResultSet rs;<br />
            <br />
            con = L2DatabaseFactory.getInstance().getConnection();<br />
            <br />
            statement = con.prepareStatement(&quot;Select * from ctf&quot;);<br />
            rs = statement.executeQuery();<br />
            <br />
            int teams = 0;<br />
            <br />
            while (rs.next())<br />
            {<br />
                _eventName = rs.getString(&quot;eventName&quot;);<br />
                _eventDesc = rs.getString(&quot;eventDesc&quot;);<br />
                _joiningLocationName = rs.getString(&quot;joiningLocation&quot;);<br />
                _minlvl = rs.getInt(&quot;minlvl&quot;);<br />
                _maxlvl = rs.getInt(&quot;maxlvl&quot;);<br />
                _npcId = rs.getInt(&quot;npcId&quot;);<br />
                _npcX = rs.getInt(&quot;npcX&quot;);<br />
                _npcY = rs.getInt(&quot;npcY&quot;);<br />
                _npcZ = rs.getInt(&quot;npcZ&quot;);<br />
                _npcHeading = rs.getInt(&quot;npcHeading&quot;);<br />
                _rewardId = rs.getInt(&quot;rewardId&quot;);<br />
                _rewardAmount = rs.getInt(&quot;rewardAmount&quot;);<br />
                teams = rs.getInt(&quot;teamsCount&quot;);<br />
                _joinTime = rs.getInt(&quot;joinTime&quot;);<br />
                _eventTime = rs.getInt(&quot;eventTime&quot;);<br />
                _minPlayers = rs.getInt(&quot;minPlayers&quot;);<br />
                _maxPlayers = rs.getInt(&quot;maxPlayers&quot;);<br />
                _flagHoldTime = rs.getInt(&quot;flagHoldTime&quot;);<br />
            }<br />
            statement.close();<br />
            <br />
            int index = -1;<br />
            if (teams &gt; 0)<br />
                index = 0;<br />
            while (index &lt; teams &amp;&amp; index &gt; -1)<br />
            {<br />
                statement = con.prepareStatement(&quot;Select * from ctf_teams where teamId = ?&quot;);<br />
                statement.setInt(1, index);<br />
                rs = statement.executeQuery();<br />
                while (rs.next())<br />
                {<br />
                    _teams.add(rs.getString(&quot;teamName&quot;));<br />
                    _teamPlayersCount.add(0);<br />
                    _teamPointsCount.add(0);<br />
                    _teamColors.add(0);<br />
                    _teamsX.add(0);<br />
                    _teamsY.add(0);<br />
                    _teamsZ.add(0);<br />
                    _teamsX.set(index, rs.getInt(&quot;teamX&quot;));<br />
                    _teamsY.set(index, rs.getInt(&quot;teamY&quot;));<br />
                    _teamsZ.set(index, rs.getInt(&quot;teamZ&quot;));<br />
                    _teamColors.set(index, rs.getInt(&quot;teamColor&quot;));<br />
                    _flagsX.add(0);<br />
                    _flagsY.add(0);<br />
                    _flagsZ.add(0);<br />
                    _flagsX.set(index, rs.getInt(&quot;flagX&quot;));<br />
                    _flagsY.set(index, rs.getInt(&quot;flagY&quot;));<br />
                    _flagsZ.set(index, rs.getInt(&quot;flagZ&quot;));<br />
                    if (Config.CTF_BASE_TELEPORT_FIRST)<br />
                    {<br />
                        _teamsBaseX.add(0);<br />
                        _teamsBaseY.add(0);<br />
                        _teamsBaseZ.add(0);<br />
                        _teamsBaseX.set(index, rs.getInt(&quot;teamBaseX&quot;));<br />
                        _teamsBaseY.set(index, rs.getInt(&quot;teamBaseY&quot;));<br />
                        _teamsBaseZ.set(index, rs.getInt(&quot;teamBaseZ&quot;));<br />
                    }<br />
                    _flagSpawns.add(null);<br />
                    _flagIds.add(_FlagNPC);<br />
                    _flagsTaken.add(false);<br />
                    _flagsNotRemoved.add(false);<br />
                }<br />
                index;<br />
                statement.close();<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;Exception: CTF.loadData(): &quot;  e.getMessage());<br />
        }<br />
        finally<br />
        {<br />
            try<br />
            {<br />
                if (con != null)<br />
                    con.close();<br />
            }<br />
            catch (SQLException e)<br />
            {<br />
                e.printStackTrace();<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void saveData()<br />
    {<br />
        Connection con = null;<br />
        try<br />
        {<br />
            con = L2DatabaseFactory.getInstance().getConnection();<br />
            PreparedStatement statement;<br />
            <br />
            statement = con.prepareStatement(&quot;Delete from ctf&quot;);<br />
            statement.execute();<br />
            statement.close();<br />
            <br />
            statement = con.prepareStatement(&quot;INSERT INTO ctf (eventName, eventDesc, joiningLocation, minlvl, maxlvl, npcId, npcX, npcY, npcZ, npcHeading, rewardId, rewardAmount, teamsCount, joinTime, eventTime, minPlayers, maxPlayers, flagHoldTime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)&quot;);<br />
            statement.setString(1, _eventName);<br />
            statement.setString(2, _eventDesc);<br />
            statement.setString(3, _joiningLocationName);<br />
            statement.setInt(4, _minlvl);<br />
            statement.setInt(5, _maxlvl);<br />
            statement.setInt(6, _npcId);<br />
            statement.setInt(7, _npcX);<br />
            statement.setInt(8, _npcY);<br />
            statement.setInt(9, _npcZ);<br />
            statement.setInt(10, _npcHeading);<br />
            statement.setInt(11, _rewardId);<br />
            statement.setInt(12, _rewardAmount);<br />
            statement.setInt(13, _teams.size());<br />
            statement.setInt(14, _joinTime);<br />
            statement.setInt(15, _eventTime);<br />
            statement.setInt(16, _minPlayers);<br />
            statement.setInt(17, _maxPlayers);<br />
            statement.setLong(18, _flagHoldTime);<br />
            statement.execute();<br />
            statement.close();<br />
            <br />
            statement = con.prepareStatement(&quot;Delete from ctf_teams&quot;);<br />
            statement.execute();<br />
            statement.close();<br />
            <br />
            for (String teamName : _teams)<br />
            {<br />
                int index = _teams.indexOf(teamName);<br />
                <br />
                if (index == -1)<br />
                    return;<br />
                if (Config.CTF_BASE_TELEPORT_FIRST)<br />
                {<br />
                    statement = con.prepareStatement(&quot;INSERT INTO ctf_teams (teamId ,teamName, teamX, teamY, teamZ, teamColor, flagX, flagY, flagZ, teamBaseX, teamBaseY, teamBaseZ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)&quot;);<br />
                    statement.setInt(1, index);<br />
                    statement.setString(2, teamName);<br />
                    statement.setInt(3, _teamsX.get(index));<br />
                    statement.setInt(4, _teamsY.get(index));<br />
                    statement.setInt(5, _teamsZ.get(index));<br />
                    statement.setInt(6, _teamColors.get(index));<br />
                    statement.setInt(7, _flagsX.get(index));<br />
                    statement.setInt(8, _flagsY.get(index));<br />
                    statement.setInt(9, _flagsZ.get(index));<br />
                    statement.setInt(10, _teamsBaseX.get(index));<br />
                    statement.setInt(11, _teamsBaseY.get(index));<br />
                    statement.setInt(12, _teamsBaseZ.get(index));<br />
                    statement.execute();<br />
                    statement.close();<br />
                }<br />
                else<br />
                {<br />
                    statement = con.prepareStatement(&quot;INSERT INTO ctf_teams (teamId ,teamName, teamX, teamY, teamZ, teamColor, flagX, flagY, flagZ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)&quot;);<br />
                    statement.setInt(1, index);<br />
                    statement.setString(2, teamName);<br />
                    statement.setInt(3, _teamsX.get(index));<br />
                    statement.setInt(4, _teamsY.get(index));<br />
                    statement.setInt(5, _teamsZ.get(index));<br />
                    statement.setInt(6, _teamColors.get(index));<br />
                    statement.setInt(7, _flagsX.get(index));<br />
                    statement.setInt(8, _flagsY.get(index));<br />
                    statement.setInt(9, _flagsZ.get(index));<br />
                    statement.execute();<br />
                    statement.close();<br />
                }<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;Exception: CTF.saveData(): &quot;  e.getMessage());<br />
        }<br />
        finally<br />
        {<br />
            try<br />
            {<br />
                if (con != null)<br />
                    con.close();<br />
            }<br />
            catch (SQLException e)<br />
            {<br />
                e.printStackTrace();<br />
            }<br />
        }<br />
    }<br />
    <br />
    public static void showEventHtml(L2PcInstance eventPlayer, String objectId)<br />
    {<br />
        try<br />
        {<br />
            NpcHtmlMessage adminReply = new NpcHtmlMessage(0);<br />
            TextBuilder replyMSG = new TextBuilder();<br />
            <br />
            replyMSG.append(&quot;&lt;html&gt;&lt;body&gt;&quot;);<br />
            replyMSG.append(&quot;CTF Match&lt;br&gt;&lt;br&gt;&lt;br&gt;&quot;);<br />
            replyMSG.append(&quot;Current event...&lt;br&gt;&quot;);<br />
            replyMSG.append(&quot;   ... description:&amp;nbsp;&lt;font color=\&quot;00FF00\&quot;&gt;&quot;  _eventDesc  &quot;&lt;/font&gt;&lt;br&gt;&quot;);<br />
            if (Config.CTF_ANNOUNCE_REWARD)<br />
                replyMSG.append(&quot;   ... reward: (&quot;  _rewardAmount  &quot;) &quot;  ItemTable.getInstance().getTemplate(_rewardId).get  Name()  &quot;&lt;br&gt;&quot;);<br />
            <br />
            if (!_started &amp;&amp; !_joining)<br />
                replyMSG.append(&quot;&lt;center&gt;Wait till the admin/gm start the participation.&lt;/center&gt;&quot;);<br />
            else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; !checkMaxPlayers(_playersShuffle.size()))<br />
            {<br />
                if (!CTF._started)<br />
                {<br />
                    replyMSG.append(&quot;&lt;font color=\&quot;FFFF00\&quot;&gt;The event has reached its maximum capacity.&lt;/font&gt;&lt;br&gt;Keep checking, someone may crit and you can steal their spot.&quot;);<br />
                }<br />
            }<br />
            else if (eventPlayer.isCursedWeaponEquipped() &amp;&amp; !Config.CTF_JOIN_CURSED)<br />
            {<br />
                replyMSG.append(&quot;&lt;font color=\&quot;FFFF00\&quot;&gt;You can't participate in this event with a cursed Weapon.&lt;/font&gt;&lt;br&gt;&quot;);<br />
            }<br />
            else if (!_started &amp;&amp; _joining &amp;&amp; eventPlayer.getLevel() &gt;= _minlvl &amp;&amp; eventPlayer.getLevel() &lt;= _maxlvl)<br />
            {<br />
                if (_players.contains(eventPlayer) || checkShufflePlayers(eventPlayer))<br />
                {<br />
                    if (Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;) || Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;))<br />
                        replyMSG.append(&quot;You are already participating in team &lt;font color=\&quot;LEVEL\&quot;&gt;&quot;  eventPlayer._teamNameCTF  &quot;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&quot;);<br />
                    else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;))<br />
                        replyMSG.append(&quot;You are already participating!&lt;br&gt;&lt;br&gt;&quot;);<br />
                    <br />
                    replyMSG.append(&quot;&lt;table border=\&quot;0\&quot;&gt;&lt;tr&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;td width=\&quot;200\&quot;&gt;Wait till event start or&lt;/td&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;td width=\&quot;60\&quot;&gt;&lt;center&gt;&lt;button value=\&quot;remove\&quot; action=\&quot;bypass -h npc_&quot;  objectId  &quot;_ctf_player_leave\&quot; width=50 height=15 back=\&quot;L2UI_ct1.button_df\&quot; fore=\&quot;L2UI_ct1.button_df\&quot;&gt;&lt;/center&gt;&lt;/td&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;td width=\&quot;100\&quot;&gt;your participation!&lt;/td&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;/tr&gt;&lt;/table&gt;&quot;);<br />
                }<br />
                else<br />
                {<br />
                    replyMSG.append(&quot;&lt;td width=\&quot;200\&quot;&gt;Your level : &lt;font color=\&quot;00FF00\&quot;&gt;&quot;  eventPlayer.getLevel()  &quot;&lt;/font&gt;&lt;/td&gt;&lt;br&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;td width=\&quot;200\&quot;&gt;Min level : &lt;font color=\&quot;00FF00\&quot;&gt;&quot;  _minlvl  &quot;&lt;/font&gt;&lt;/td&gt;&lt;br&gt;&quot;);<br />
                    replyMSG.append(&quot;&lt;td width=\&quot;200\&quot;&gt;Max level : &lt;font color=\&quot;00FF00\&quot;&gt;&quot;  _maxlvl  &quot;&lt;/font&gt;&lt;/td&gt;&lt;br&gt;&lt;br&gt;&quot;);<br />
                    <br />
                    if (Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;) || Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;))<br />
                    {<br />
                        replyMSG.append(&quot;&lt;center&gt;&lt;table border=\&quot;0\&quot;&gt;&quot;);<br />
                        <br />
                        for (String team : _teams)<br />
                        {<br />
                            replyMSG.append(&quot;&lt;tr&gt;&lt;td width=\&quot;100\&quot;&gt;&lt;font color=\&quot;LEVEL\&quot;&gt;&quot;  team  &quot;&lt;/font&gt;&amp;nbsp;(&quot;  teamPlayersCount(team)  &quot; joined)&lt;/td&gt;&quot;);<br />
                            replyMSG.append(&quot;&lt;td width=\&quot;60\&quot;&gt;&lt;button value=\&quot;Join\&quot; action=\&quot;bypass -h npc_&quot;  objectId  &quot;_ctf_player_join &quot;  team  &quot;\&quot; width=50 height=15 back=\&quot;L2UI_ct1.button_df\&quot; fore=\&quot;L2UI_ct1.button_df\&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&quot;);<br />
                        }<br />
                        <br />
                        replyMSG.append(&quot;&lt;/table&gt;&lt;/center&gt;&quot;);<br />
                    }<br />
                    else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;))<br />
                    {<br />
                        replyMSG.append(&quot;&lt;center&gt;&lt;table border=\&quot;0\&quot;&gt;&quot;);<br />
                        <br />
                        for (String team : _teams)<br />
                            replyMSG.append(&quot;&lt;tr&gt;&lt;td width=\&quot;100\&quot;&gt;&lt;font color=\&quot;LEVEL\&quot;&gt;&quot;  team  &quot;&lt;/font&gt;&lt;/td&gt;&quot;);<br />
                        <br />
                        replyMSG.append(&quot;&lt;/table&gt;&lt;/center&gt;&lt;br&gt;&quot;);<br />
                        <br />
                        replyMSG.append(&quot;&lt;button value=\&quot;Join\&quot; action=\&quot;bypass -h npc_&quot;  objectId  &quot;_ctf_player_join eventShuffle\&quot; width=50 height=15 back=\&quot;L2UI_ct1.button_df\&quot; fore=\&quot;L2UI_ct1.button_df\&quot;&gt;&quot;);<br />
                        replyMSG.append(&quot;Teams will be randomly generated!&quot;);<br />
                    }<br />
                }<br />
            }<br />
            else if (_started &amp;&amp; !_joining)<br />
                replyMSG.append(&quot;&lt;center&gt;CTF match is in progress.&lt;/center&gt;&quot;);<br />
            else if (eventPlayer.getLevel() &lt; _minlvl || eventPlayer.getLevel() &gt; _maxlvl)<br />
            {<br />
                replyMSG.append(&quot;Your lvl : &lt;font color=\&quot;00FF00\&quot;&gt;&quot;  eventPlayer.getLevel()  &quot;&lt;/font&gt;&lt;br&gt;&quot;);<br />
                replyMSG.append(&quot;Min level : &lt;font color=\&quot;00FF00\&quot;&gt;&quot;  _minlvl  &quot;&lt;/font&gt;&lt;br&gt;&quot;);<br />
                replyMSG.append(&quot;Max level : &lt;font color=\&quot;00FF00\&quot;&gt;&quot;  _maxlvl  &quot;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&quot;);<br />
                replyMSG.append(&quot;&lt;font color=\&quot;FFFF00\&quot;&gt;You can't participatein this event.&lt;/font&gt;&lt;br&gt;&quot;);<br />
            }<br />
            // Show how many players joined &amp; how many are still needed to join<br />
            replyMSG.append(&quot;&lt;br&gt;There are &quot;  _playersShuffle.size()  &quot; player(s) participating in this event.&lt;br&gt;&quot;);<br />
            if (_joining)<br />
            {<br />
                if (_playersShuffle.size() &lt; _minPlayers)<br />
                {<br />
                    int playersNeeded = _minPlayers - _playersShuffle.size();<br />
                    replyMSG.append(&quot;The event will not start unless &quot;  playersNeeded  &quot; more player(s) joins!&quot;);<br />
                }<br />
            }<br />
            <br />
            replyMSG.append(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
            adminReply.setHtml(replyMSG.toString());<br />
            eventPlayer.sendPacket(adminReply);<br />
            <br />
            // Send a Server-&gt;Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet<br />
            eventPlayer.sendPacket(ActionFailed.STATIC_PACKET)  ;<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF Engine[showEventHtlm(&quot;  eventPlayer.getName()  &quot;, &quot;  objectId  &quot;)]: exception&quot;  e.getMessage());<br />
        }<br />
    }<br />
    <br />
    public static void addPlayer(L2PcInstance player, String teamName)<br />
    {<br />
        if (!addPlayerOk(teamName, player))<br />
            return;<br />
        <br />
        if (Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;) || Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;))<br />
        {<br />
            player._teamNameCTF = teamName;<br />
            _players.add(player);<br />
            setTeamPlayersCount(teamName, teamPlayersCount(teamName)  1);<br />
        }<br />
        else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;))<br />
            _playersShuffle.add(player);<br />
        <br />
        player._inEventCTF = true;<br />
        player._countCTFflags = 0;<br />
    }<br />
    <br />
    public static synchronized void removeOfflinePlayers()<br />
    {<br />
        try<br />
        {<br />
            if (_playersShuffle == null)<br />
                return;<br />
            else if (_playersShuffle.isEmpty())<br />
                return;<br />
            else if (_playersShuffle.size() &gt; 0)<br />
            {<br />
                for (L2PcInstance player : _playersShuffle)<br />
                {<br />
                    if (player == null)<br />
                        _playersShuffle.remove(player);<br />
                    else if (!player.isOnline() || player.isInJail())<br />
                        removePlayer(player);<br />
                    if (_playersShuffle.size() == 0 || _playersShuffle.isEmpty())<br />
                        break;<br />
                }<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF Engine exception: &quot;  e.getMessage());<br />
            return;<br />
        }<br />
    }<br />
    <br />
    public static boolean checkShufflePlayers(L2PcInstance eventPlayer)<br />
    {<br />
        try<br />
        {<br />
            for (L2PcInstance player : _playersShuffle)<br />
            {<br />
                if (player == null || !player.isOnline())<br />
                {<br />
                    _playersShuffle.remove(player);<br />
                    eventPlayer._inEventCTF = false;<br />
                    continue;<br />
                }<br />
                else if (player.getObjectId() == eventPlayer.getObjectId())<br />
                {<br />
                    eventPlayer._inEventCTF = true;<br />
                    eventPlayer._countCTFflags = 0;<br />
                    return true;<br />
                }<br />
                //this 1 is incase player got new objectid after DC or reconnect<br />
                else if (player.getName().equals(eventPlayer.getName()))<br />
                {<br />
                    _playersShuffle.remove(player);<br />
                    _playersShuffle.add(eventPlayer);<br />
                    eventPlayer._inEventCTF = true;<br />
                    eventPlayer._countCTFflags = 0;<br />
                    return true;<br />
                }<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
        }<br />
        return false;<br />
    }<br />
    <br />
    public static boolean addPlayerOk(String teamName, L2PcInstance eventPlayer)<br />
    {<br />
        try<br />
        {<br />
            if (checkShufflePlayers(eventPlayer) || eventPlayer._inEventCTF)<br />
            {<br />
                eventPlayer.sendMessage(&quot;You are already participating in the event!&quot;);<br />
                return false;<br />
            }<br />
            <br />
            for (L2PcInstance player : _players)<br />
            {<br />
                if (player.getObjectId() == eventPlayer.getObjectId())<br />
                {<br />
                    eventPlayer.sendMessage(&quot;You are already participating in the event!&quot;);<br />
                    return false;<br />
                }<br />
                else if (player.getName() == eventPlayer.getName())<br />
                {<br />
                    eventPlayer.sendMessage(&quot;You are already participating in the event!&quot;);<br />
                    return false;<br />
                }<br />
            }<br />
            if (_players.contains(eventPlayer))<br />
            {<br />
                eventPlayer.sendMessage(&quot;You are already participating in the event!&quot;);<br />
                return false;<br />
            }<br />
        }<br />
        catch (Exception e)<br />
        {<br />
            _log.warning(&quot;CTF Siege Engine exception: &quot;  e.getMessage());<br />
        }<br />
        <br />
        if (Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;))<br />
            return true;<br />
        else if (Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;))<br />
        {<br />
            boolean allTeamsEqual = true;<br />
            int countBefore = -1;<br />
            <br />
            for (int playersCount : _teamPlayersCount)<br />
            {<br />
                if (countBefore == -1)<br />
                    countBefore = playersCount;<br />
                <br />
                if (countBefore != playersCount)<br />
                {<br />
                    allTeamsEqual = false;<br />
                    break;<br />
                }<br />
                <br />
                countBefore = playersCount;<br />
            }<br />
            <br />
            if (allTeamsEqual)<br />
                return true;<br />
            <br />
            countBefore = Integer.MAX_VALUE;<br />
            <br />
            for (int teamPlayerCount : _teamPlayersCount)<br />
            {<br />
                if (teamPlayerCount &lt; countBefore)<br />
                    countBefore = teamPlayerCount;<br />
            }<br />
            <br />
            Vector&lt;String&gt; joinableTeams = new Vector&lt;String&gt;();<br />
            <br />
            for (String team : _teams)<br />
            {<br />
                if (teamPlayersCount(team) == countBefore)<br />
                    joinableTeams.add(team);<br />
            }<br />
            <br />
            if (joinableTeams.contains(teamName))<br />
                return true;<br />
        }<br />
        else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;))<br />
            return true;<br />
        <br />
        eventPlayer.sendMessage(&quot;Too many players in team \&quot;&quot;  teamName  &quot;\&quot;&quot;);<br />
        return false;<br />
    }<br />
    <br />
    public static synchronized void addDisconnectedPlayer(L2PcInstance player)<br />
    {<br />
        /*<br />
         * !!! CAUTION !!!<br />
         * Do NOT fix multiple object Ids on this event or you will ruin the flag reposition check!!!<br />
         * All Multiple object Ids will be collected by the Garbage Collector, after the event ends, memory sweep is made!!!<br />
         */<br />
<br />
        if ((Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; (_teleport || _started)) || (Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;) || Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;) &amp;&amp; (_teleport || _started)))<br />
        {<br />
            if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)<br />
            {<br />
                for (L2Effect e : player.getAllEffects())<br />
                {<br />
                    if (e != null)<br />
                        e.exit();<br />
                }<br />
            }<br />
            <br />
            player._teamNameCTF = _savePlayerTeams.get(_savePlayers.indexOf(player.g  etName()));<br />
            for (L2PcInstance p : _players)<br />
            {<br />
                if (p == null)<br />
                {<br />
                    continue;<br />
                }<br />
                //check by name incase player got new objectId<br />
                else if (p.getName().equals(player.getName()))<br />
                {<br />
                    player._originalNameColorCTF = player.getAppearance().getNameColor();<br />
                    player._originalKarmaCTF = player.getKarma();<br />
                    player._inEventCTF = true;<br />
                    player._countCTFflags = p._countCTFflags;<br />
                    _players.remove(p); //removing old object id from vector<br />
                    _players.add(player); //adding new objectId to vector<br />
                    break;<br />
                }<br />
            }<br />
            player.getAppearance().setNameColor(_teamColors.ge  t(_teams.indexOf(player._teamNameCTF)));<br />
            player.setKarma(0);<br />
            player.broadcastUserInfo();<br />
            if (Config.CTF_BASE_TELEPORT_FIRST)<br />
            {<br />
                player.sendMessage(&quot;We missed you! You will be sent back into battle in 10 seconds!&quot;);<br />
                <br />
                player.teleToLocation(_teamsBaseX.get(_teams.index  Of(player._teamNameCTF)), _teamsBaseY.get(_teams.indexOf(player._teamNameCTF  )), _teamsBaseZ.get(_teams.indexOf(player._teamNameCTF  )));<br />
                <br />
                ThreadPoolManager.getInstance().scheduleGeneral(ne  w BaseTeleportTask(player, false), 10000);<br />
            }<br />
            else<br />
            {<br />
                player.teleToLocation(_teamsX.get(_teams.indexOf(p  layer._teamNameCTF)), _teamsY.get(_teams.indexOf(player._teamNameCTF)), _teamsZ.get(_teams.indexOf(player._teamNameCTF)));<br />
            }<br />
            Started(player);<br />
            CheckRestoreFlags();<br />
        }<br />
    }<br />
    <br />
    public static void removePlayer(L2PcInstance player)<br />
    {<br />
        if (player._inEventCTF)<br />
        {<br />
            if (!_joining)<br />
            {<br />
                player.getAppearance().setNameColor(player._origin  alNameColorCTF);<br />
                player.setKarma(player._originalKarmaCTF);<br />
                player.broadcastUserInfo();<br />
            }<br />
            player._teamNameCTF = new String();<br />
            player._countCTFflags = 0;<br />
            player._inEventCTF = false;<br />
            <br />
            if ((Config.CTF_EVEN_TEAMS.equals(&quot;NO&quot;) || Config.CTF_EVEN_TEAMS.equals(&quot;BALANCE&quot;)) &amp;&amp; _players.contains(player))<br />
            {<br />
                setTeamPlayersCount(player._teamNameCTF, teamPlayersCount(player._teamNameCTF) - 1);<br />
                _players.remove(player);<br />
            }<br />
            else if (Config.CTF_EVEN_TEAMS.equals(&quot;SHUFFLE&quot;) &amp;&amp; (!_playersShuffle.isEmpty() &amp;&amp; _playersShuffle.contains(player)))<br />
                _playersShuffle.remove(player);<br />
        }<br />
    }<br />
    <br />
    public static void cleanCTF()<br />
    {<br />
        _log.warning(&quot;CTF : Cleaning players.&quot;);<br />
        for (L2PcInstance player : _players)<br />
        {<br />
            if (player != null)<br />
            {<br />
                if (player._haveFlagCTF)<br />
                    removeFlagFromPlayer(player);<br />
                else<br />
                    player.getInventory().destroyItemByItemId(&quot;&quot;, CTF._FLAG_IN_HAND_ITEM_ID, 1, player, null);<br />
                player._haveFlagCTF = false;<br />
                removePlayer(player);<br />
                if (_savePlayers.contains(player.getName()))<br />
                    _savePlayers.remove(player.getName());<br />
                player._inEventCTF = false;<br />
            }<br />
        }<br />
        if (_playersShuffle != null &amp;&amp; !_playersShuffle.isEmpty())<br />
        {<br />
            for (L2PcInstance player : _playersShuffle)<br />
            {<br />
                if (player != null)<br />
                    player._inEventCTF = false;<br />
            }<br />
        }<br />
        _log.warning(&quot;CTF : Cleaning teams and flags.&quot;);<br />
        for (String team : _teams)<br />
        {<br />
            int index = _teams.indexOf(team);<br />
            _teamPointsCount.set(index, 0);<br />
            _flagSpawns.set(index, null);<br />
            _flagsTaken.set(index, false);<br />
            _teamPlayersCount.set(index, 0);<br />
            _teamPointsCount.set(index, 0);<br />
            _flagsNotRemoved.set(index, false);<br />
        }<br />
        _topScore = 0;<br />
        _topTeam = new String();<br />
        _players = new Vector&lt;L2PcInstance&gt;();<br />
        _playersShuffle = new Vector&lt;L2PcInstance&gt;();<br />
        _savePlayers = new Vector&lt;String&gt;();<br />
        _savePlayerTeams = new Vector&lt;String&gt;();<br />
        _teamPointsCount = new Vector&lt;Integer&gt;();<br />
        _flagSpawns = new Vector&lt;L2Spawn&gt;();<br />
        _flagsTaken = new Vector&lt;Boolean&gt;();<br />
        _teamPlayersCount = new Vector&lt;Integer&gt;();<br />
        _flagsNotRemoved = new Vector&lt;Boolean&gt;();<br />
        _playerScores = new FastMap&lt;String, Integer&gt;();<br />
        _log.warning(&quot;Cleaning CTF done.&quot;);<br />
        _log.warning(&quot;Loading new data from MySql&quot;);<br />
        loadData();<br />
    }<br />
    <br />
    public static void unspawnEventNpc()<br />
    {<br />
        if (_npcSpawn == null)<br />
            return;<br />
        <br />
        _npcSpawn.getLastSpawn().deleteMe();<br />
        _npcSpawn.stopRespawn();<br />
        SpawnTable.getInstance().deleteSpawn(_npcSpawn, true);<br />
    }<br />
    <br />
    public static void teleportFinish()<br />
    {<br />
        AnnounceToPlayers(false, _eventName  &quot;(CTF): Teleport back to participation NPC in 20 seconds!&quot;);<br />
        ThreadPoolManager.getInstance().scheduleGeneral(ne  w Runnable()<br />
        {<br />
            public void run()<br />
            {<br />
                for (L2PcInstance player : _players)<br />
                {<br />
                    if (player != null)<br />
                    {<br />
                        if (player.isOnline())<br />
                            player.teleToLocation(_npcX, _npcY, _npcZ, false);<br />
                        else<br />
                        {<br />
                            Connection con = null;<br />
                            try<br />
                            {<br />
                                con = L2DatabaseFactory.getInstance().getConnection();<br />
                                <br />
                                PreparedStatement statement = con.prepareStatement(&quot;UPDATE characters SET x=?, y=?, z=? WHERE char_name=?&quot;);<br />
                                statement.setInt(1, _npcX);<br />
                                statement.setInt(2, _npcY);<br />
                                statement.setInt(3, _npcZ);<br />
                                statement.setString(4, player.getName());<br />
                                statement.execute();<br />
                                statement.close();<br />
                            }<br />
                            catch (SQLException se)<br />
                            {<br />
                                _log.warning(&quot;CTF Engine exception: &quot;  se.getMessage());<br />
                            }<br />
                            finally<br />
                            {<br />
                                try<br />
                                {<br />
                                    if (con != null)<br />
                                        con.close();<br />
                                }<br />
                                catch (SQLException e)<br />
                                {<br />
                                    e.printStackTrace();<br />
                                }<br />
                            }<br />
                        }<br />
                    }<br />
                }<br />
                cleanCTF();<br />
            }<br />
        }, 20000);<br />
    }<br />
    <br />
    public static int teamFlagCount(String teamName)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return -1;<br />
        <br />
        return _teamPointsCount.get(index);<br />
    }<br />
    <br />
    public static void setTeamFlagCount(String teamName, int teamFlagCount)<br />
    {<br />
        int index = _teams.indexOf(teamName);<br />
        <br />
        if (index == -1)<br />
            return;<br />
        <br />
        _teamPointsCount.set(index, teamFlagCount);<br />
    }<br />
    <br />
    /**<br />
     * Used to calculate the event CTF area, so that players don't run off with the flag.<br />
     * Essential, since a player may take the flag just so other teams can't score points.<br />
     * This function is Only called upon ONE time on BEGINING OF EACH EVENT right after we spawn the flags.<br />
     */<br />
    private static void calculateOutSideOfCTF()<br />
    {<br />
        if (_teams == null || _flagSpawns == null || _teamsX == null || _teamsY == null || _teamsZ == null)<br />
            return;<br />
        <br />
        int division = _teams.size() * 2, pos = 0;<br />
        int[] locX = new int[division], locY = new int[division], locZ = new int[division];<br />
        //Get all coordinates inorder to create a polygon:<br />
        for (L2Spawn flag : _flagSpawns)<br />
        {<br />
            locX[pos] = flag.getLocx();<br />
            locY[pos] = flag.getLocy();<br />
            locZ[pos] = flag.getLocz();<br />
            pos;<br />
            if (pos &gt; division / 2)<br />
                break;<br />
        }<br />
        <br />
        for (int x = 0; x &lt; _teams.size(); x)<br />
        {<br />
            locX[pos] = _teamsX.get(x);<br />
            locY[pos] = _teamsY.get(x);<br />
            locZ[pos] = _teamsZ.get(x);<br />
            pos;<br />
            if (pos &gt; division)<br />
                break;<br />
        }<br />
        <br />
        //find the polygon center, note that it's not the mathematical center of the polygon, <br />
        //rather than a point which centers all coordinates:<br />
        int centerX = 0, centerY = 0, centerZ = 0;<br />
        for (int x = 0; x &lt; pos; x)<br />
        {<br />
            centerX = (locX[x] / division);<br />
            centerY = (locY[x] / division);<br />
            centerZ = (locZ[x] / division);<br />
        }<br />
        <br />
        //now let's find the furthest distance from the &quot;center&quot; to the egg shaped sphere <br />
        //surrounding the polygon, size x1.5 (for maximum logical area to wander...):<br />
        int maxX = 0, maxY = 0, maxZ = 0;<br />
        for (int x = 0; x &lt; pos; x)<br />
        {<br />
            if (maxX &lt; 2 * Math.abs(centerX - locX[x]))<br />
                maxX = (2 * Math.abs(centerX - locX[x]));<br />
            if (maxY &lt; 2 * Math.abs(centerY - locY[x]))<br />
                maxY = (2 * Math.abs(centerY - locY[x]));<br />
            if (maxZ &lt; 2 * Math.abs(centerZ - locZ[x]))<br />
                maxZ = (2 * Math.abs(centerZ - locZ[x]));<br />
        }<br />
        <br />
        //centerX,centerY,centerZ are the coordinates of the &quot;event center&quot;.<br />
        //so let's save those coordinates to check on the players:<br />
        eventCenterX = centerX;<br />
        eventCenterY = centerY;<br />
        eventCenterZ = centerZ;<br />
        eventOffset = maxX;<br />
        if (eventOffset &lt; maxY)<br />
            eventOffset = maxY;<br />
        if (eventOffset &lt; maxZ)<br />
            eventOffset = maxZ;<br />
    }<br />
    <br />
    public static boolean isOutsideCTFArea(L2PcInstance _player)<br />
    {<br />
        if (_player == null || !_player.isOnline())<br />
            return true;<br />
        if (!(_player.getX() &gt; eventCenterX - eventOffset &amp;&amp; _player.getX() &lt; eventCenterX  eventOffset &amp;&amp; _player.getY() &gt; eventCenterY - eventOffset &amp;&amp; _player.getY() &lt; eventCenterY  eventOffset &amp;&amp; _player.getZ() &gt; eventCenterZ - eventOffset &amp;&amp; _player.getZ() &lt; eventCenterZ  eventOffset))<br />
            return true;<br />
        return false;<br />
    }<br />
}</div>
    </div>
</div></div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=47">Relacionado con el servidor</category>
			<dc:creator>orionprox</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4487</guid>
		</item>
		<item>
			<title>Problema Forgoteen Scroll</title>
			<link>http://elitezone.es/foro/showthread.php?t=4486&amp;goto=newpost</link>
			<pubDate>Sat, 19 May 2012 23:24:47 GMT</pubDate>
			<description>Hola tengo problema cuando el char lee los libros de forgoteen scroll al relogiar se le borran las skill alguna solucion con este tema?
Muchas gracias :D</description>
			<content:encoded><![CDATA[<div>Hola tengo problema cuando el char lee los libros de forgoteen scroll al relogiar se le borran las skill alguna solucion con este tema?<br />
Muchas gracias :D</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=47">Relacionado con el servidor</category>
			<dc:creator>otherwise</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4486</guid>
		</item>
		<item>
			<title>skill Auto  Aprendibles lvl 76-84 o mas</title>
			<link>http://elitezone.es/foro/showthread.php?t=4485&amp;goto=newpost</link>
			<pubDate>Sat, 19 May 2012 23:01:38 GMT</pubDate>
			<description>necesito skill Auto  Aprendibles lvl 76-84 o mas Para Epilogue o algun npc forgoteen que este completo
muchas gracias</description>
			<content:encoded><![CDATA[<div>necesito skill Auto  Aprendibles lvl 76-84 o mas Para Epilogue o algun npc forgoteen que este completo<br />
muchas gracias</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=34">Pedidos relacionados con la administracion</category>
			<dc:creator>otherwise</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4485</guid>
		</item>
		<item>
			<title>Poblema con cabellos GOD.</title>
			<link>http://elitezone.es/foro/showthread.php?t=4484&amp;goto=newpost</link>
			<pubDate>Sat, 19 May 2012 17:49:24 GMT</pubDate>
			<description>Problema con cabellos GOD.A parte de problemas con las texturas que se ven en gris(creo q como lei en el foro se deben a que hay cabellos que no son compatibles con el color del cabello de dependiendo que raza) , el principal problema que tengo es q cuando spawneo las potions H,J,I,H,L a mi inventario y las clickeo cual pocion cualquiera , estás no realizan ningun efecto al pulsarlas nada de nada.

Aver si alguien me puede ayudar Gracias!!!</description>
			<content:encoded><![CDATA[<div><b>Problema con cabellos GOD.</b><br /><br />A parte de problemas con las texturas que se ven en gris(creo q como lei en el foro se deben a que hay cabellos que no son compatibles con el color del cabello de dependiendo que raza) , el principal problema que tengo es q cuando spawneo las potions H,J,I,H,L a mi inventario y las clickeo cual pocion cualquiera , estás no realizan ningun efecto al pulsarlas nada de nada.<br />
<br />
Aver si alguien me puede ayudar Gracias!!!</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=46">Soporte, preguntas y dudas</category>
			<dc:creator>Icaro</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4484</guid>
		</item>
		<item>
			<title>Problema Baium y Valakas no pegan ( Gracia Final)</title>
			<link>http://elitezone.es/foro/showthread.php?t=4477&amp;goto=newpost</link>
			<pubDate>Sat, 19 May 2012 16:41:13 GMT</pubDate>
			<description><![CDATA[Buenos dias, tengo un problema Baium y Valakas no pegan de ninguna manera ni se mueven, probe entrando con quest todo legalmente y tampoco siguen sin moverse, queria saber si alguno sabia como se puede arreglar esto les dejo el Script-AI-Individual-Baium.java y Valakas.java :

Baium :

Código:
---------
/*
 * 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 ai.individual;

import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;

import java.util.Collection;

import javolution.util.FastList;
import ai.group_template.L2AttackableAIScript;

import net.sf.l2j.gameserver.GeoData;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
import net.sf.l2j.gameserver.model.L2Effect;
import net.sf.l2j.gameserver.model.L2Object;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.L2Summon;
import net.sf.l2j.gameserver.model.actor.instance.L2DecoyInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.quest.QuestTimer;
import net.sf.l2j.gameserver.model.zone.type.L2BossZone;
import net.sf.l2j.gameserver.network.serverpackets.Earthquake;
import net.sf.l2j.gameserver.network.serverpackets.MoveToPawn;
import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
import net.sf.l2j.gameserver.templates.StatsSet;
import net.sf.l2j.gameserver.util.Util;
import net.sf.l2j.util.Rnd;

/**
 * Baium AI
 * 
 * Note1: if the server gets rebooted while players are still fighting Baium, there is no lock, but
 *   players also lose their ability to wake baium up.  However, should another person
 *   enter the room and wake him up, the players who had stayed inside may join the raid.
 *   This can be helpful for players who became victims of a reboot (they only need 1 new player to
 *   enter and wake up baium) and is not too exploitable since any player wishing to exploit it
 *   would have to suffer 5 days of being parked in an empty room.
 * Note2: Neither version of Baium should be a permanent spawn.  This script is fully capable of
 *   spawning the statue-version when the lock expires and switching it to the mob version promptly.
 *
 * Additional notes ( source http://aleenaresron.blogspot.com/2006_08_01_archive.html ):
 *   * Baium only first respawns five days after his last death. And from those five days he will
 *       respawn within 1-8 hours of his last death. So, you have to know his last time of death.
 *   * If by some freak chance you are the only one in Baium's chamber and NO ONE comes in
 *       [ha, ha] you or someone else will have to wake Baium. There is a good chance that Baium
 *       will automatically kill whoever wakes him. There are some people that have been able to
 *       wake him and not die, however if you've already gone through the trouble of getting the
 *       bloody fabric and camped him out and researched his spawn time, are you willing to take that 
 *       chance that you'll wake him and not be able to finish your quest? Doubtful.
 *       [ this powerful attack vs the player who wakes him up is NOT yet implemented here]
 *   * once someone starts attacking Baium no one else can port into the chamber where he is.
 *       Unlike with the other raid bosses, you can just show up at any time as long as you are there
 *       when they die. Not true with Baium. Once he gets attacked, the port to Baium closes. byebye,
 *       see you in 5 days.  If nobody attacks baium for 30 minutes, he auto-despawns and unlocks the 
 *       vortex
 * 
 * @author Fulminus version 0.1
 */
public class Baium extends L2AttackableAIScript
{
    private L2Character _target;
    private L2Skill _skill;
    private static final int STONE_BAIUM = 29025;
    private static final int ANGELIC_VORTEX = 31862;
    private static final int LIVE_BAIUM = 29020;

    //Baium status tracking
    private static final byte ASLEEP = 0;  // baium is in the stone version, waiting to be woken up.  Entry is unlocked
    private static final byte AWAKE = 1;   // baium is awake and fighting.  Entry is locked.
    private static final byte DEAD = 2;    // baium has been killed and has not yet spawned.  Entry is locked

    private static long _LastAttackVsBaiumTime = 0;
    private static L2BossZone _Zone;
    
    public Baium (int questId, String name, String descr)
    {
        super(questId, name, descr);
        
        int[] mob = {LIVE_BAIUM};
        this.registerMobs(mob);
        
        // Quest NPC starter initialization
        addStartNpc(STONE_BAIUM);
        addStartNpc(ANGELIC_VORTEX);
        addTalkId(STONE_BAIUM);
        addTalkId(ANGELIC_VORTEX);
        _Zone = GrandBossManager.getInstance().getZone(113100,14500,10077);
        StatsSet info = GrandBossManager.getInstance().getStatsSet(LIVE_BAIUM);
        int status = GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM);
        if (status == DEAD)
        {
            // load the unlock date and time for baium from DB
            long temp = (info.getLong("respawn_time") - System.currentTimeMillis());
            if (temp > 0)
            {
                // the unlock time has not yet expired.  Mark Baium as currently locked (dead).  Setup a timer
                // to fire at the correct time (calculate the time between now and the unlock time,
                // setup a timer to fire after that many msec)
                startQuestTimer("baium_unlock", temp, null, null);
            }
            else
            {
                // the time has already expired while the server was offline.  Delete the saved time and
                // immediately spawn the stone-baium.  Also the state need not be changed from ASLEEP
                addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);
                GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,ASLEEP);
            }
        }
        else if (status == AWAKE)
        {
            int loc_x = info.getInteger("loc_x");
            int loc_y = info.getInteger("loc_y");
            int loc_z = info.getInteger("loc_z");
            int heading = info.getInteger("heading");
            final int hp = info.getInteger("currentHP");
            final int mp = info.getInteger("currentMP");
            L2GrandBossInstance baium = (L2GrandBossInstance) addSpawn(LIVE_BAIUM,loc_x,loc_y,loc_z,heading,false,0);
            GrandBossManager.getInstance().addBoss(baium);
            final L2Npc _baium = baium;
            ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
                public void run()
                {
                    try
                    {
                        _baium.setCurrentHpMp(hp,mp);
                        _baium.setIsInvul(true);
                        _baium.setIsImmobilized(true);
                        _baium.setRunning();
                        _baium.broadcastPacket(new SocialAction(_baium.getObjectId(),2));
                        startQuestTimer("baium_wakeup",15000, _baium, null);
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            },100L);
        }
        else
            addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);
    }

    public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)
    {
        if (event.equalsIgnoreCase("baium_unlock"))
        {
            GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,ASLEEP);
            addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);
        }
        else if (event.equalsIgnoreCase("skill_range") && npc != null)
        {
            callSkillAI(npc);
        }
        else if (event.equalsIgnoreCase("clean_player"))
        {
            _target = getRandomTarget(npc);
        }
        else if (event.equalsIgnoreCase("baium_wakeup") && npc != null)
        {
            if (npc.getNpcId() == LIVE_BAIUM)
            {
                npc.broadcastPacket(new SocialAction(npc.getObjectId(),1));
                npc.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(),40,5));
                // start monitoring baium's inactivity
                _LastAttackVsBaiumTime = System.currentTimeMillis();
                startQuestTimer("baium_despawn", 60000, npc, null, true);
                startQuestTimer("skill_range", 500, npc, null, true);
                final L2Npc baium = npc;
                ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
                    public void run()
                    {
                        try
                        {
                            baium.setIsInvul(false);
                            baium.setIsImmobilized(false);
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                    }
                },11100L);
                // TODO: the person who woke baium up should be knocked across the room, onto a wall, and
                // lose massive amounts of HP.
            }
        // despawn the live baium after 30 minutes of inactivity
        // also check if the players are cheating, having pulled Baium outside his zone...
        }
        else if (event.equalsIgnoreCase("baium_despawn") && npc != null)
        {
            if (npc.getNpcId() == LIVE_BAIUM)
            {
                // just in case the zone reference has been lost (somehow...), restore the reference
                if (_Zone == null)
                    _Zone = GrandBossManager.getInstance().getZone(113100,14500,10077);
                if (_LastAttackVsBaiumTime + 1800000 < System.currentTimeMillis())
                {
                    npc.deleteMe();   // despawn the live-baium
                    addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);  // spawn stone-baium
                    GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,ASLEEP);    // mark that Baium is not awake any more
                    _Zone.oustAllPlayers();
                    cancelQuestTimer("baium_despawn", npc, null);
                }
                else if ((_LastAttackVsBaiumTime + 300000 < System.currentTimeMillis()) && npc.getCurrentHp() < ( ( npc.getMaxHp() * 3 ) / 4 ))
                {
                    npc.setIsCastingNow(false); //just in case
                    npc.setTarget(npc);
                    npc.doCast(SkillTable.getInstance().getInfo(4135,1));
                    npc.setIsCastingNow(true);
                }
                else if (!_Zone.isInsideZone(npc))
                    npc.teleToLocation(116033,17447,10104);
            }
        }
        return super.onAdvEvent(event, npc, player);
    }

    public String onTalk(L2Npc npc,L2PcInstance player)
    {
        int npcId = npc.getNpcId();
        String htmltext = "";
        if (_Zone == null)
            _Zone = GrandBossManager.getInstance().getZone(113100,14500,10077);
        if (_Zone == null)
            return "<html><body>Angelic Vortex:<br>You may not enter while admin disabled this zone</body></html>";
        if (npcId == STONE_BAIUM && GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM) == ASLEEP)
        {
            if (_Zone.isPlayerAllowed(player))
            {
                // once Baium is awaken, no more people may enter until he dies, the server reboots, or 
                // 30 minutes pass with no attacks made against Baium.
                GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,AWAKE);
                npc.deleteMe();
                L2GrandBossInstance baium = (L2GrandBossInstance) addSpawn(LIVE_BAIUM,npc);
                GrandBossManager.getInstance().addBoss(baium);
                final L2Npc _baium = baium;
                ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
                    public void run()
                    {
                        try
                        {
                            _baium.setIsInvul(true);
                            _baium.setRunning();
                            _baium.broadcastPacket(new SocialAction(_baium.getObjectId(),2));
                            startQuestTimer("baium_wakeup",15000, _baium, null);
                        }
                        catch (Throwable e)
                        {
                        }
                    }
                },100L);
            }
            else
                htmltext = "Conditions are not right to wake up Baium";
        }
        else if (npcId == ANGELIC_VORTEX)
        {
            if (GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM) == ASLEEP)
            {
                if (player.isFlying())
                {
                    //print "Player "+player.getName()+" attempted to enter Baium's lair while flying!";
                    htmltext = "<html><body>Angelic Vortex:<br>You may not enter while flying a wyvern</body></html>";
                }
                else if (player.getQuestState("baium").getQuestItemsCount(4295) > 0) // bloody fabric
                {
                    player.getQuestState("baium").takeItems(4295,1);
                    // allow entry for the player for the next 30 secs (more than enough time for the TP to happen)
                    // Note: this just means 30secs to get in, no limits on how long it takes before we get out.
                    _Zone.allowPlayerEntry(player,30);
                    player.teleToLocation(113100,14500,10077);
                }
                else
                    htmltext = "<html><body>Angelic Vortex:<br>You do not have enough items</body></html>";
            }
            else
                htmltext = "<html><body>Angelic Vortex:<br>You may not enter at this time</body></html>";
        }
        return htmltext;
    }
    
    public String onSpellFinished(L2Npc npc, L2PcInstance player, L2Skill skill)
    {
        if (npc.isInvul())
        {
            npc.getAI().setIntention(AI_INTENTION_IDLE);
            return null;
        }
        else if (npc.getNpcId() == LIVE_BAIUM && !npc.isInvul())
        {
            callSkillAI(npc);
        }
        return super.onSpellFinished(npc, player, skill);
    }
    public String onAttack (L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
    {
        if (!_Zone.isInsideZone(attacker))
        {
            attacker.reduceCurrentHp(attacker.getCurrentHp(),attacker,false,false, null);
            return super.onAttack(npc, attacker, damage, isPet);
        }
        if (npc.isInvul())
        {
            npc.getAI().setIntention(AI_INTENTION_IDLE);
            return super.onAttack(npc, attacker, damage, isPet);
        }
        else if (npc.getNpcId() == LIVE_BAIUM && !npc.isInvul())
        {
            if (attacker.getMountType() == 1)
            {
                int sk_4258 = 0;
                L2Effect[] effects = attacker.getAllEffects();
                if (effects.length != 0 || effects != null)
                {
                    for (L2Effect e : effects)
                    {
                        if (e.getSkill().getId() == 4258)
                            sk_4258 = 1;
                    }
                }
                if (sk_4258 == 0)
                {
                    npc.setTarget(attacker);
                    npc.doCast(SkillTable.getInstance().getInfo(4258,1));
                }
            }
            // update a variable with the last action against baium
            _LastAttackVsBaiumTime = System.currentTimeMillis();
            callSkillAI(npc);
        }
        return super.onAttack(npc, attacker, damage, isPet);
    }
    
    public String onKill (L2Npc npc, L2PcInstance killer, boolean isPet) 
    { 
        cancelQuestTimer("baium_despawn", npc, null);
        npc.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
        // spawn the "Teleportation Cubic" for 15 minutes (to allow players to exit the lair)
        addSpawn(29055,115203,16620,10078,0,false,900000); ////should we teleport everyone out if the cubic despawns??
        // "lock" baium for 5 days and 1 to 8 hours [i.e. 432,000,000 +  1*3,600,000 + random-less-than(8*3,600,000) millisecs]
        long respawnTime = ((121 + Rnd.get(8)) * 3600000);
        GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,DEAD);
        startQuestTimer("baium_unlock", respawnTime, null, null);
        // also save the respawn time so that the info is maintained past reboots
        StatsSet info = GrandBossManager.getInstance().getStatsSet(LIVE_BAIUM);
        info.set("respawn_time",(System.currentTimeMillis()) + respawnTime);
        GrandBossManager.getInstance().setStatsSet(LIVE_BAIUM,info);
        if (getQuestTimer("skill_range", npc, null) != null)
            getQuestTimer("skill_range", npc, null).cancel();
        return super.onKill(npc,killer,isPet);
    }

    public L2Character getRandomTarget(L2Npc npc)
    {
        FastList<L2Character> result = new FastList<L2Character>();
        Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values();
        {
            for (L2Object obj : objs)
            {
                if (obj instanceof L2Character)
                {
                    if (((L2Character) obj).getZ() < ( npc.getZ() - 100 ) && ((L2Character) obj).getZ() > ( npc.getZ() + 100 )
                            || !(GeoData.getInstance().canSeeTarget(((L2Character) obj).getX(), ((L2Character) obj).getY(), ((L2Character) obj).getZ(), npc.getX(), npc.getY(), npc.getZ()))||((L2Character) obj).isGM())
                        continue;
                }
                if (obj instanceof L2PcInstance || obj instanceof L2Summon || obj instanceof L2DecoyInstance)
                {
                    if (Util.checkIfInRange(9000, npc, obj, true) && !((L2Character) obj).isDead())
                        result.add((L2Character) obj);
                }
            }
        }
        if (!result.isEmpty() && result.size() != 0)
        {
            Object[] characters = result.toArray();
            QuestTimer timer = getQuestTimer("clean_player", npc, null);
            if (timer != null)
                timer.cancel();
            startQuestTimer("clean_player", 20000, npc, null);
            return (L2Character) characters[Rnd.get(characters.length)];
        }
        return null;
    }

    public synchronized void callSkillAI(L2Npc npc)
    {
        if (npc.isInvul() || npc.isCastingNow()) return;

        if (_target == null || _target.isDead() || !(_Zone.isInsideZone(_target)))
        {
            _target = getRandomTarget(npc);
            if (_target != null)
                _skill = SkillTable.getInstance().getInfo(getRandomSkill(npc),1);
        }

        L2Character target = _target;
        L2Skill skill = _skill;
        if (skill == null)
            skill = SkillTable.getInstance().getInfo(getRandomSkill(npc),1);
        if (target == null || target.isDead() || !(_Zone.isInsideZone(target)))
        {
            npc.setIsCastingNow(false);
            return;
        }

        if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))
        {
            npc.getAI().setIntention(AI_INTENTION_IDLE);
            npc.setTarget(target);
            npc.setIsCastingNow(true);
            _target = null;
            _skill = null;
            if (getDist(skill.getCastRange()) > 0)
                npc.broadcastPacket(new MoveToPawn(npc,target,getDist(skill.getCastRange())));
            try
            {
                Thread.sleep(1000);
                npc.stopMove(null);
                npc.doCast(skill);
            }
            catch (Exception e)
            {e.printStackTrace();}
        }
        else
        {
            npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);
            npc.setIsCastingNow(false);
        }
    }

    public int getRandomSkill(L2Npc npc)
    {
        int skill;
        if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 3 ) / 4 ) )
        {
            if( Rnd.get(100) < 10 )
                skill = 4128;
            else if( Rnd.get(100) < 10 )
                skill = 4129;
            else
                skill = 4127;
        }
        else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 2 ) / 4) )
        {
            if( Rnd.get(100) < 10 )
                skill = 4131;
            else if( Rnd.get(100) < 10 )
                skill = 4128;
            else if( Rnd.get(100) < 10 )
                skill = 4129;
            else
                skill = 4127;
        }
        else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 1 ) / 4 ) )
        {
            if( Rnd.get(100) < 10 )
                skill = 4130;
            else if( Rnd.get(100) < 10 )
                skill = 4131;
            else if( Rnd.get(100) < 10 )
                skill = 4128;
            else if( Rnd.get(100) < 10 )
                skill = 4129;
            else
                skill = 4127;
        }
        else if( Rnd.get(100) < 10 )
            skill = 4130;
        else if( Rnd.get(100) < 10 )
            skill = 4131;
        else if( Rnd.get(100) < 10 )
            skill = 4128;
        else if( Rnd.get(100) < 10 )
            skill = 4129;
        else
            skill = 4127;
        return skill;
    }

    public String onSkillSee (L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet)
    {
        if (npc.isInvul())
        {
            npc.getAI().setIntention(AI_INTENTION_IDLE);
            return null;
        }
        npc.setTarget(caster);
        return super.onSkillSee(npc, caster, skill, targets, isPet);
    }

    public int getDist(int range)
    {
        int dist = 0;
        switch(range)
        {
            case -1:
                break;
            case 100:
                dist = 85;
                break;
            default:
                dist = range-85;
                break;
        }
        return dist;
    }

    public static void main(String[] args)
    {
        // Quest class and state definition
        new Baium(-1, "baium", "ai");
    }
}
---------
Valakas 


Código:
---------
/*
 * 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 ai.individual;

import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;
import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;

import java.util.Collection;

import javolution.util.FastList;
import ai.group_template.L2AttackableAIScript;

import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
import net.sf.l2j.gameserver.model.L2Effect;
import net.sf.l2j.gameserver.model.L2Object;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.L2Summon;
import net.sf.l2j.gameserver.model.actor.instance.L2DecoyInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.quest.QuestTimer;
import net.sf.l2j.gameserver.model.zone.type.L2BossZone;
import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
import net.sf.l2j.gameserver.network.serverpackets.SpecialCamera;
import net.sf.l2j.gameserver.templates.StatsSet;
import net.sf.l2j.gameserver.util.Util;
import net.sf.l2j.util.Rnd;

/**
 * Valakas AI
 * @author Kerberos
 */
public class Valakas extends L2AttackableAIScript
{
    private int i_ai0 = 0;
    private int i_ai1 = 0;
    private int i_ai2 = 0;
    private int i_ai3 = 0;
    private int i_ai4 = 0;
    private int i_quest0 = 0;
    private long i_quest1 = 0; // time to tracking valakas when was last time attacked
    private int i_quest2 = 0; // hate value for 1st player
    private int i_quest3 = 0; // hate value for 2nd player
    private int i_quest4 = 0; // hate value for 3rd player
    private L2Character c_quest2 = null; // 1st most hated target
    private L2Character c_quest3 = null; // 2nd most hated target
    private L2Character c_quest4 = null; // 3rd most hated target

    private static final int VALAKAS = 29028;

    //Valakas Status Tracking :
    private static final byte DORMANT = 0;         //Valakas is spawned and no one has entered yet. Entry is unlocked
    private static final byte WAITING = 1;         //Valakas is spawend and someone has entered, triggering a 30 minute window for additional people to enter
                                                //before he unleashes his attack. Entry is unlocked
    private static final byte FIGHTING = 2;        //Valakas is engaged in battle, annihilating his foes. Entry is locked
    private static final byte DEAD = 3;            //Valakas has been killed. Entry is locked
    
    private static L2BossZone _Zone;
    
    // Boss: Valakas
    public Valakas(int id,String name,String descr)
    {
        super(id,name,descr);
        int[] mob = {VALAKAS};
        this.registerMobs(mob);
        i_ai0 = 0;
        i_ai1 = 0;
        i_ai2 = 0;
        i_ai3 = 0;
        i_ai4 = 0;
        i_quest0 = 0;
        i_quest1 = System.currentTimeMillis();
        _Zone = GrandBossManager.getInstance().getZone(212852,-114842,-1632);
        StatsSet info = GrandBossManager.getInstance().getStatsSet(VALAKAS);
        int status = GrandBossManager.getInstance().getBossStatus(VALAKAS);
        if (status == DEAD)
        {
            // load the unlock date and time for valakas from DB
            long temp = (info.getLong("respawn_time") - System.currentTimeMillis());
            // if valakas is locked until a certain time, mark it so and start the unlock timer
            // the unlock time has not yet expired.  Mark valakas as currently locked.  Setup a timer
            // to fire at the correct time (calculate the time between now and the unlock time,
            // setup a timer to fire after that many msec)
            if (temp > 0)
            {
                this.startQuestTimer("valakas_unlock", temp, null, null);
            }
            else
            {
                // the time has already expired while the server was offline. Immediately spawn valakas in his cave.
                // also, the status needs to be changed to DORMANT
                L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS,-105200,-253104,-15264,0,false,0);
                GrandBossManager.getInstance().setBossStatus(VALAKAS,DORMANT);
                GrandBossManager.getInstance().addBoss(valakas);
                final L2Npc _valakas = valakas;
                ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
                    public void run()
                    {
                        try
                        {
                            _valakas.setIsInvul(true);
                            _valakas.setRunning();
                        }
                        catch (Throwable e)
                        {
                        }
                    }
                },100L);
                startQuestTimer("1003", 60000, valakas, null, true);
            }
        }
        else
        {
            int loc_x = info.getInteger("loc_x");
            int loc_y = info.getInteger("loc_y");
            int loc_z = info.getInteger("loc_z");
            int heading = info.getInteger("heading");
            final int hp = info.getInteger("currentHP");
            final int mp = info.getInteger("currentMP");
            L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS,loc_x,loc_y,loc_z,heading,false,0);
            GrandBossManager.getInstance().addBoss(valakas);
            final L2Npc _valakas = valakas;
            final int _status = status;
            ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
                public void run()
                {
                    try
                    {
                        _valakas.setCurrentHpMp(hp,mp);
                        if (_status != FIGHTING) _valakas.setIsInvul(true);
                        _valakas.setRunning();
                    }
                    catch (Throwable e)
                    {
                    }
                }
            },100L);

            startQuestTimer("1003", 60000, valakas, null, true);
            if (status == WAITING)
            {
                // Start timer to lock entry after 30 minutes
                startQuestTimer("1001",1800000, valakas, null);
            }
            else if (status == FIGHTING)
            {
                // Start repeating timer to check for inactivity
                startQuestTimer("1002",60000, valakas, null, true);
                valakas.setIsInvul(false);
            }
        }
    }

    public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)
    {
        if (npc != null)
        {
            long temp = 0;
            if (event.equalsIgnoreCase("1001"))
            {
                npc.teleToLocation(212852,-114842,-1632);
                // delete me once animations available
                GrandBossManager.getInstance().setBossStatus(VALAKAS,FIGHTING);
                //
                i_quest1 = System.currentTimeMillis();
                final L2Npc _valakas = npc;
                ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
                    public void run()
                    {
                        try
                        {
                            broadcastSpawn(_valakas);
                        }
                        catch (Throwable e)
                        {
                        }
                    }
                },1L);
                startQuestTimer("1004",2000, npc, null);
            }
            else if (event.equalsIgnoreCase("1002"))
            {
                int lvl = 0;
                int sk_4691 = 0;
                L2Effect[] effects = npc.getAllEffects();
                if (effects.length != 0 || effects != null)
                {
                    for (L2Effect e : effects)
                    {
                        if (e.getSkill().getId() == 4629)
                        {
                            sk_4691 = 1;
                            lvl = e.getSkill().getLevel();
                            break;
                        }
                    }
                }
                if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING)
                {
                    temp = (System.currentTimeMillis() - i_quest1);
                    if (temp > 900000)
                    {
                        npc.getAI().setIntention(AI_INTENTION_IDLE);
                        npc.teleToLocation(-105200,-253104,-15264);
                        GrandBossManager.getInstance().setBossStatus(VALAKAS,DORMANT);
                        npc.setCurrentHpMp(npc.getMaxHp(),npc.getMaxMp());
                        _Zone.oustAllPlayers();
                        cancelQuestTimer("1002", npc, null);
                        i_quest2 = 0;
                        i_quest3 = 0;
                        i_quest4 = 0;
                    }
                }
                else if (npc.getCurrentHp() > ( ( npc.getMaxHp() * 1 ) / 4 ) )
                {
                    if (sk_4691 == 0 ||(sk_4691 == 1 && lvl != 4))
                    {
                        npc.setTarget(npc);
                        npc.doCast(SkillTable.getInstance().getInfo(4691,4));
                    }
                }
                else if (npc.getCurrentHp() > ( ( npc.getMaxHp() * 2 ) / 4 ) )
                {
                    if (sk_4691 == 0 ||(sk_4691 == 1 && lvl != 3))
                    {
                        npc.setTarget(npc);
                        npc.doCast(SkillTable.getInstance().getInfo(4691,3));
                    }
                }
                else if (npc.getCurrentHp() > ( ( npc.getMaxHp() * 3 ) / 4 ) )
                {
                    if (sk_4691 == 0 ||(sk_4691 == 1 && lvl != 2))
                    {
                        npc.setTarget(npc);
                        npc.doCast(SkillTable.getInstance().getInfo(4691,2));
                    }
                }
                else if (sk_4691 == 0 ||(sk_4691 == 1 && lvl != 1))
                {
                    npc.setTarget(npc);
                    npc.doCast(SkillTable.getInstance().getInfo(4691,1));
                }
            }
            else if (event.equalsIgnoreCase("1003") && npc != null)
            {
                if (!npc.isInvul())
                    getRandomSkill(npc);
                else
                    npc.getAI().setIntention(AI_INTENTION_IDLE);
            }
            else if (event.equalsIgnoreCase("1004"))
            {
                startQuestTimer("1102",1500, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-1,1500,15000,10000));
            }
            else if (event.equalsIgnoreCase("1102"))
            {
                startQuestTimer("1103",3300, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-5,3000,15000,10000));
            }
            else if (event.equalsIgnoreCase("1103"))
            {
                startQuestTimer("1104",2900, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-8,600,15000,10000));
            }
            else if (event.equalsIgnoreCase("1104"))
            {
                startQuestTimer("1105",2700, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-8,2700,15000,10000));
            }
            else if (event.equalsIgnoreCase("1105"))
            {
                startQuestTimer("1106",1, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),250,70,0,15000,10000));
            }
            else if (event.equalsIgnoreCase("1106"))
            {
                startQuestTimer("1107",3200, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),250,70,2500,15000,10000));
            }
            else if (event.equalsIgnoreCase("1107"))
            {
                startQuestTimer("1108",1400, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),150,30,0,15000,10000));
            }
            else if (event.equalsIgnoreCase("1108"))
            {
                startQuestTimer("1109",6700, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),150,20,2900,15000,10000));
            }
            else if (event.equalsIgnoreCase("1109"))
            {
                startQuestTimer("1110",5700, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),170,-10,3400,15000,4000));
            }
            else if (event.equalsIgnoreCase("1110"))
            {
                // uncoment me once animations available
                //GrandBossManager.getInstance().setBossStatus(VALAKAS,FIGHTING);
                startQuestTimer("1002",60000, npc, null, true);
                npc.setIsInvul(false);
                getRandomSkill(npc);
            }
            else if (event.equalsIgnoreCase("1111"))
            {
                startQuestTimer("1112",3500, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),210,-5,3000,15000,10000));
            }
            else if (event.equalsIgnoreCase("1112"))
            {
                startQuestTimer("1113",4500, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),200,-8,3000,15000,10000));
            }
            else if (event.equalsIgnoreCase("1113"))
            {
                startQuestTimer("1114",500, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),190,0,500,15000,10000));
            }
            else if (event.equalsIgnoreCase("1114"))
            {
                startQuestTimer("1115",4600, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),120,0,2500,15000,10000));
            }
            else if (event.equalsIgnoreCase("1115"))
            {
                startQuestTimer("1116",750, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),20,0,700,15000,10000));
            }
            else if (event.equalsIgnoreCase("1116"))
            {
                startQuestTimer("1117",2500, npc, null);
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),10,0,1000,15000,10000));
            }
            else if (event.equalsIgnoreCase("1117"))
            {
                //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),10,0,300,15000,250));
                addSpawn(31759,212852,-114842,-1632,0,false,900000);
                int radius = 1500;
                for (int i=0; i < 20; i++)
                {
                    int x = (int) (radius*Math.cos(i*.331)); //.331~2pi/19
                    int y = (int) (radius*Math.sin(i*.331));
                    addSpawn(31759,212852+x,-114842+y,-1632,0,false,900000);
                }
                cancelQuestTimer("1002", npc, null);
                startQuestTimer("remove_players",900000, null, null);
                // delete me once animations available
                GrandBossManager.getInstance().setBossStatus(VALAKAS,DEAD);
                //
            }
        }
        else
        {
            if (event.equalsIgnoreCase("valakas_unlock"))
            {
                L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS,-105200,-253104,-15264,32768,false,0);
                GrandBossManager.getInstance().addBoss(valakas);
                GrandBossManager.getInstance().setBossStatus(VALAKAS,DORMANT);
            }
            else if (event.equalsIgnoreCase("remove_players"))
            {
                _Zone.oustAllPlayers();
            }
        }
        return super.onAdvEvent(event, npc, player);
    }

    public String onAttack (L2Npc npc, L2PcInstance attacker, int damage, boolean isPet, L2Skill skill)
    {
        if (npc.isInvul())
        {
            return null;
        }
        i_quest1 = System.currentTimeMillis();
        if (GrandBossManager.getInstance().getBossStatus(VALAKAS) != FIGHTING)
        {
            attacker.teleToLocation(150037,-57255,-2976);
        }
        if (attacker.getMountType() == 1)
        {
            int sk_4258 = 0;
            L2Effect[] effects = attacker.getAllEffects();
            if (effects.length != 0 || effects != null)
            {
                for (L2Effect e : effects)
                {
                    if (e.getSkill().getId() == 4258)
                    {
                        sk_4258 = 1;
                    }
                }
            }
            if (sk_4258 == 0)
            {
                npc.setTarget(attacker);
                npc.doCast(SkillTable.getInstance().getInfo(4258,1));
            }
        }
        if( attacker.getZ() < ( npc.getZ() + 200 ) )
        {
            if( i_ai2 == 0 )
            {
                i_ai1 = ( i_ai1 + damage );
            }
            if( i_quest0 == 0 )
            {
                i_ai4 = ( i_ai4 + damage );
            }
            if( i_quest0 == 0 )
            {
                i_ai3 = ( i_ai3 + damage );
            }
            else if(i_ai2 == 0 )
            {
                i_ai0 = ( i_ai0 + damage );
            }
            if( i_quest0 == 0 )
            {
                if((((i_ai4 / npc.getMaxHp()) * 100)) > 1)
                {
                    if( i_ai3 > ( i_ai4 - i_ai3 ) )
                    {
                        i_ai3 = 0;
                        i_ai4 = 0;
                        npc.setTarget(npc);
                        npc.doCast(SkillTable.getInstance().getInfo(4687,1));
                        i_quest0 = 1;
                    }
                }
            }

        }
        int i1 = 0;
        if (skill == null)
        {
            if (attacker == c_quest2)
            {
                if (((damage * 1000) + 1000) > i_quest2)
                {
                    i_quest2 = ((damage * 1000) + Rnd.get(3000));
                }
            }
            else if (attacker == c_quest3)
            {
                if ((( damage * 1000) + 1000) > i_quest3)
                {
                    i_quest3 = ((damage * 1000) + Rnd.get(3000));
                }
            }
            else if (attacker == c_quest4)
            {
                if ((( damage * 1000) + 1000) > i_quest4)
                {
                    i_quest4 = ((damage * 1000) + Rnd.get(3000));
                }
            }
            else if( i_quest2 > i_quest3 )
            {
                i1 = 3;
            }
            else if( i_quest2 == i_quest3 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 3;
                }
            }
            else if( i_quest2 < i_quest3 )
            {
                i1 = 2;
            }
            if( i1 == 2 )
            {
                if( i_quest2 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest2 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest2 < i_quest4 )
                {
                    i1 = 2;
                }
            }
            else if( i1 == 3 )
            {
                if( i_quest3 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest3 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 3;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if(i_quest3 < i_quest4 )
                {
                    i1 = 3;
                }
            }
            if (i1 == 2)
            {
                i_quest2 = (damage * 1000) + Rnd.get(3000);
                c_quest2 = attacker;
            }
            else if (i1 == 3)
            {
                i_quest3 = (damage * 1000) + Rnd.get(3000);
                c_quest3 = attacker;
            }
            else if (i1 == 4)
            {
                i_quest4 = (damage * 1000) + Rnd.get(3000);
                c_quest4 = attacker;
            }
        }
        else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 1 ) / 4 ))
        {
            if( attacker == c_quest2 )
            {
                if( ( ( ( damage / 30 ) * 1000 ) + 1000 ) > i_quest2 )
                {
                    i_quest2 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( attacker == c_quest3 )
            {
                if( ( ( ( damage / 30 ) * 1000 ) + 1000 ) > i_quest3 )
                {
                    i_quest3 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( attacker == c_quest4 )
            {
                if( ( ( ( damage / 30 ) * 1000 ) + 1000 ) > i_quest4 )
                {
                    i_quest4 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( i_quest2 > i_quest3 )
            {
                i1 = 3;
            }
            else if( i_quest2 == i_quest3 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 3;
                }
            }
            else if( i_quest2 < i_quest3 )
            {
                i1 = 2;
            }
            if( i1 == 2 )
            {
                if( i_quest2 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest2 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest2 < i_quest4 )
                {
                    i1 = 2;
                }
            }
            else if( i1 == 3 )
            {
                if( i_quest3 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest3 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 3;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest3 < i_quest4 )
                {
                    i1 = 3;
                }
            }
            if (i1 == 2)
            {
                    i_quest2 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );
                    c_quest2 = attacker;
            }
            else if (i1 == 3)
            {
                    i_quest3 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );
                    c_quest3 = attacker;
            }
            else if (i1 == 4)
            {
                    i_quest4 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );
                    c_quest4 = attacker;
            }
        }
        else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 2 ) / 4 ))
        {
            if( attacker == c_quest2 )
            {
                if( ( ( ( damage / 50 ) * 1000 ) + 1000 ) > i_quest2 )
                {
                    i_quest2 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( attacker == c_quest3 )
            {
                if( ( ( ( damage / 50 ) * 1000 ) + 1000 ) > i_quest3 )
                {
                    i_quest3 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( attacker == c_quest4 )
            {
                if( ( ( ( damage / 50 ) * 1000 ) + 1000 ) > i_quest4 )
                {
                    i_quest4 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( i_quest2 > i_quest3 )
            {
                i1 = 3;
            }
            else if( i_quest2 == i_quest3 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 3;
                }
            }
            else if( i_quest2 < i_quest3 )
            {
                i1 = 2;
            }
            if( i1 == 2 )
            {
                if( i_quest2 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest2 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest2 < i_quest4 )
                {
                    i1 = 2;
                }
            }
            else if( i1 == 3 )
            {
                if( i_quest3 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest3 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 3;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest3 < i_quest4 )
                {
                    i1 = 3;
                }
            }
            if (i1 == 2)
            {
                    i_quest2 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );
                    c_quest2 = attacker;
            }
            else if (i1 == 3)
            {
                    i_quest3 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );
                    c_quest3 = attacker;
            }
            else if (i1 == 4)
            {
                    i_quest4 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );
                    c_quest4 = attacker;
            }
        }
        else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 3 ) / 4 ))
        {
            if( attacker == c_quest2 )
            {
                if( ( ( ( damage / 100 ) * 1000 ) + 1000 ) > i_quest2 )
                {
                    i_quest2 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( attacker == c_quest3 )
            {
                if( ( ( ( damage / 100 ) * 1000 ) + 1000 ) > i_quest3 )
                {
                    i_quest3 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( attacker == c_quest4 )
            {
                if( ( ( ( damage / 100 ) * 1000 ) + 1000 ) > i_quest4 )
                {
                    i_quest4 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );
                }
            }
            else if( i_quest2 > i_quest3 )
            {
                i1 = 3;
            }
            else if( i_quest2 == i_quest3 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 3;
                }
            }
            else if( i_quest2 < i_quest3 )
            {
                i1 = 2;
            }
            if( i1 == 2 )
            {
                if( i_quest2 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest2 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest2 < i_quest4 )
                {
                    i1 = 2;
                }
            }
            else if( i1 == 3 )
            {
                if( i_quest3 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest3 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 3;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest3 < i_quest4 )
                {
                    i1 = 3;
                }
                if (i1 == 2)
                {
                        i_quest2 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );
                        c_quest2 = attacker;
                }
                else if (i1 == 3)
                {
                        i_quest3 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );
                        c_quest3 = attacker;
                }
                else if (i1 == 4)
                {
                        i_quest4 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );
                        c_quest4 = attacker;
                }
            }
        }
        else if( attacker == c_quest2 )
        {
            if( ( ( ( damage / 150 ) * 1000 ) + 1000 ) > i_quest2 )
            {
                i_quest2 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );
            }
        }
        else if( attacker == c_quest3 )
        {
            if( ( ( ( damage / 150 ) * 1000 ) + 1000 ) > i_quest3 )
            {
                i_quest3 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );
            }
        }
        else if( attacker == c_quest4 )
        {
            if( ( ( ( damage / 150 ) * 1000 ) + 1000 ) > i_quest4 )
            {
                i_quest4 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );
            }
        }
        else if( i_quest2 > i_quest3 )
        {
            i1 = 3;
        }
        else if( i_quest2 == i_quest3 )
        {
            if( Rnd.get(100) < 50 )
            {
                i1 = 2;
            }
            else
            {
                i1 = 3;
            }
        }
        else if( i_quest2 < i_quest3 )
        {
            i1 = 2;
        }
        if( i1 == 2 )
        {
            if( i_quest2 > i_quest4 )
            {
                i1 = 4;
            }
            else if( i_quest2 == i_quest4 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 4;
                }
            }
            else if( i_quest2 < i_quest4 )
            {
                i1 = 2;
            }
        }
        else if( i1 == 3 )
        {
            if( i_quest3 > i_quest4 )
            {
                i1 = 4;
            }
            else if( i_quest3 == i_quest4 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 3;
                }
                else
                {
                    i1 = 4;
                }
            }
            else if( i_quest3 < i_quest4 )
            {
                i1 = 3;
            }
        }
        if (i1 == 2)
        {
                i_quest2 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );
                c_quest2 = attacker;
        }
        else if (i1 == 3)
        {
                i_quest3 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );
                c_quest3 = attacker;
        }
        else if (i1 == 4)
        {
                i_quest4 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );
                c_quest4 = attacker;
        }
        getRandomSkill(npc);
        return super.onAttack(npc, attacker, damage, isPet);
    }

    public String onKill (L2Npc npc, L2PcInstance killer, boolean isPet) 
    { 
        startQuestTimer("1111",500, npc, null);
        npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),2000,130,-1,0,10000));
        npc.broadcastPacket(new PlaySound(1, "B03_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
        // uncoment me once animations available 
        //GrandBossManager.getInstance().setBossStatus(VALAKAS,DEAD);
        long respawnTime = ((192 + Rnd.get(145) ) * 3600000);
        this.startQuestTimer("valakas_unlock", respawnTime, null, null);
        // also save the respawn time so that the info is maintained past reboots
        StatsSet info = GrandBossManager.getInstance().getStatsSet(VALAKAS);
        info.set("respawn_time",(System.currentTimeMillis() + respawnTime));
        GrandBossManager.getInstance().setStatsSet(VALAKAS,info);
        return super.onKill(npc,killer,isPet);
    }

    public void getRandomSkill(L2Npc npc)
    {
        if (npc.isInvul() || npc.isCastingNow())
        {
            return;
        }
        L2Skill skill = null;
        int i0 = 0;
        int i1 = 0;
        int i2 = 0;
        L2Character c2 = null;
        if (c_quest2 == null)
            i_quest2 = 0;
        else if (!Util.checkIfInRange(5000, npc, c_quest2, true) || c_quest2.isDead())
            i_quest2 = 0;
        if (c_quest3 == null)
            i_quest3 = 0;
        else if (!Util.checkIfInRange(5000, npc, c_quest3, true) || c_quest3.isDead())
            i_quest3 = 0;    
        if (c_quest4 == null)
            i_quest4 = 0;
        else if (!Util.checkIfInRange(5000, npc, c_quest4, true) || c_quest4.isDead())
            i_quest4 = 0;
        if (i_quest2 > i_quest3)
        {
            i1 = 2;
            i2 = i_quest2;
            c2 = c_quest2;
        }
        else
        {
            i1 = 3;
            i2 = i_quest3;
            c2 = c_quest3;
        }
        if( i_quest4 > i2 )
        {
            i1 = 4;
            i2 = i_quest4;
            c2 = c_quest4;
        }
        if (i2 == 0)
            c2 = getRandomTarget(npc);
        if( i2 > 0 )
        {
            if( Rnd.get(100) < 70)
            {
                if (i1 == 2)
                    i_quest2 = 500;
                else if (i1 == 3)
                    i_quest3 = 500;
                else if (i1 == 4)
                    i_quest4 = 500;
            }
            if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 1 ) / 4 ) )
            {
                i0 = 0;
                i1 = 0;
                if (Util.checkIfInRange(1423, npc, c2, true))
                {
                    i0 = 1;
                    i1 = 1;
                }
                if (c2.getZ() < (npc.getZ() + 200))
                {
                    if( Rnd.get(100) < 20)
                    {
                        skill = SkillTable.getInstance().getInfo(4690,1);
                    }
                    else if( Rnd.get(100) < 15)
                    {
                        skill = SkillTable.getInstance().getInfo(4689,1);
                    }
                    else if( Rnd.get(100) < 15 && i0 == 1 && i_quest0 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4685,1);
                        i_quest0 = 0;
                    }
                    else if( Rnd.get(100) < 10 && i1 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4688,1);
                    }
                    else if( Rnd.get(100) < 35)
                    {
                        skill = SkillTable.getInstance().getInfo(4683,1);
                    }
                    else
                    {
                        if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas
                            skill = SkillTable.getInstance().getInfo(4681,1); // left hand
                        else
                            skill = SkillTable.getInstance().getInfo(4682,1); // right hand
                    }
                }
                else if( Rnd.get(100) < 20)
                {
                    skill = SkillTable.getInstance().getInfo(4690,1);
                }
                else if( Rnd.get(100) < 15)
                {
                    skill = SkillTable.getInstance().getInfo(4689,1);
                }
                else
                {
                    skill = SkillTable.getInstance().getInfo(4684,1);
                }
            }
            else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 2 ) / 4 ) )
            {
                i0 = 0;
                i1 = 0;
                if (Util.checkIfInRange(1423, npc, c2, true))
                {
                    i0 = 1;
                    i1 = 1;
                }
                if (c2.getZ() < (npc.getZ() + 200))
                {
                    if( Rnd.get(100) < 5 )
                    {
                        skill = SkillTable.getInstance().getInfo(4690,1);
                    }
                    else if( Rnd.get(100) < 10 )
                    {
                        skill = SkillTable.getInstance().getInfo(4689,1);
                    }
                    else if( Rnd.get(100) < 10 && i0 == 1 && i_quest0 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4685,1);
                        i_quest0 = 0;
                    }
                    else if( Rnd.get(100) < 10 && i1 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4688,1);
                    }
                    else if( Rnd.get(100) < 20 )
                    {
                        skill = SkillTable.getInstance().getInfo(4683,1);
                    }
                    else
                    {
                        if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas
                            skill = SkillTable.getInstance().getInfo(4681,1); // left hand
                        else
                            skill = SkillTable.getInstance().getInfo(4682,1); // right hand
                    }
                }
                else if( Rnd.get(100) < 5)
                {
                    skill = SkillTable.getInstance().getInfo(4690,1);
                }
                else if( Rnd.get(100) < 10)
                {
                    skill = SkillTable.getInstance().getInfo(4689,1);
                }
                else
                {
                    skill = SkillTable.getInstance().getInfo(4684,1);
                }
            }
            else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 3 ) / 4 ) )
            {
                i0 = 0;
                i1 = 0;
                if (Util.checkIfInRange(1423, npc, c2, true))
                {
                    i0 = 1;
                    i1 = 1;
                }
                if (c2.getZ() < (npc.getZ() + 200))
                {
                    if( Rnd.get(100) < 0 )
                    {
                        skill = SkillTable.getInstance().getInfo(4690,1);
                    }
                    else if( Rnd.get(100) < 5 )
                    {
                        skill = SkillTable.getInstance().getInfo(4689,1);
                    }
                    else if( Rnd.get(100) < 5 && i0 == 1 && i_quest0 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4685,1);
                        i_quest0 = 0;
                    }
                    else if( Rnd.get(100) < 10 && i1 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4688,1);
                    }
                    else if( Rnd.get(100) < 15 )
                    {
                        skill = SkillTable.getInstance().getInfo(4683,1);
                    }
                    else
                    {
                        if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas
                            skill = SkillTable.getInstance().getInfo(4681,1); // left hand
                        else
                            skill = SkillTable.getInstance().getInfo(4682,1); // right hand
                    }
                }
                else if( Rnd.get(100) < 0)
                {
                    skill = SkillTable.getInstance().getInfo(4690,1);
                }
                else if( Rnd.get(100) < 5)
                {
                    skill = SkillTable.getInstance().getInfo(4689,1);
                }
                else
                {
                    skill = SkillTable.getInstance().getInfo(4684,1);
                }
            }
            else
            {
                i0 = 0;
                i1 = 0;
                if (Util.checkIfInRange(1423, npc, c2, true))
                {
                    i0 = 1;
                    i1 = 1;
                }
                if (c2.getZ() < (npc.getZ() + 200))
                {
                    if( Rnd.get(100) < 0 )
                    {
                        skill = SkillTable.getInstance().getInfo(4690,1);
                    }
                    else if( Rnd.get(100) < 10 )
                    {
                        skill = SkillTable.getInstance().getInfo(4689,1);
                    }
                    else if( Rnd.get(100) < 5 && i0 == 1 && i_quest0 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4685,1);
                        i_quest0 = 0;
                    }
                    else if( Rnd.get(100) < 10 && i1 == 1 )
                    {
                        skill = SkillTable.getInstance().getInfo(4688,1);
                    }
                    else if( Rnd.get(100) < 15 )
                    {
                        skill = SkillTable.getInstance().getInfo(4683,1);
                    }
                    else
                    {
                        if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas
                            skill = SkillTable.getInstance().getInfo(4681,1); // left hand
                        else
                            skill = SkillTable.getInstance().getInfo(4682,1); // right hand
                    }
                }
                else if( Rnd.get(100) < 0)
                {
                    skill = SkillTable.getInstance().getInfo(4690,1);
                }
                else if( Rnd.get(100) < 10)
                {
                    skill = SkillTable.getInstance().getInfo(4689,1);
                }
                else
                {
                    skill = SkillTable.getInstance().getInfo(4684,1);
                }
            }
        }
        if (skill != null)
            callSkillAI(npc,c2,skill);
    }

    public void callSkillAI(L2Npc npc, L2Character c2, L2Skill skill)
    {
        if (npc.isInvul())
            return;
        QuestTimer timer = getQuestTimer("1003", npc, null);

        if (npc == null)
        {
            if (timer != null)
                timer.cancel();
            return;
        }

        if (c2 == null || c2.isDead() || timer == null)
        {
            c2 = getRandomTarget(npc); // just in case if hate AI fail
            if (timer == null)
            {
                startQuestTimer("1003", 500, npc, null, true);
                return;
            }
        }
        L2Character target = c2;
        if (target == null || target.isDead())
        {
            if (timer == null)
                startQuestTimer("1003", 500, npc, null, true);
            return;
        }

        if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))
        {
            if (timer != null)
                timer.cancel();
            npc.getAI().setIntention(AI_INTENTION_IDLE);
            npc.setIsCastingNow(true);
            npc.setTarget(target);
            npc.doCast(skill);
            
        }
        else
        {
            if (timer == null)
                startQuestTimer("1003", 500, npc, null, true);
            npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);
            npc.setIsCastingNow(false);
        }
    }
    public void broadcastSpawn(L2Npc npc)
    {
        Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values();
        {
            for (L2Object obj : objs)
            {
                if (obj instanceof L2PcInstance)
                {
                    if (Util.checkIfInRange(10000, npc, obj, true))
                    {
                        ((L2Character) obj).sendPacket(new PlaySound(1, "B03_A", 1, npc.getObjectId(), 212852,-114842,-1632));
                        ((L2Character) obj).sendPacket(new SocialAction(npc.getObjectId(),3));
                    }
                }
            }
        }
        return;
    }
    
    public L2Character getRandomTarget(L2Npc npc)
    {
        FastList<L2Character> result = new FastList<L2Character>();
        Collection<L2Object> objs = npc.getKnownList().getKnownObjects().values();
        {
            for (L2Object obj : objs)
            {
                if (obj instanceof L2PcInstance || obj instanceof L2Summon || obj instanceof L2DecoyInstance)
                {
                    if (Util.checkIfInRange(5000, npc, obj, true) && !((L2Character) obj).isDead() && !((L2Character) obj).isGM())
                        result.add((L2Character) obj);
                }
            }
        }
        if (!result.isEmpty() && result.size() != 0)
        {
            Object[] characters = result.toArray();
            return (L2Character) characters[Rnd.get(characters.length)];
        }
        return null;
    }

    public String onSpellFinished(L2Npc npc, L2PcInstance player, L2Skill skill)
    {
        if (npc.isInvul())
        {
            return null;
        }
        else if (npc.getNpcId() == VALAKAS && !npc.isInvul())
        {
            getRandomSkill(npc);
        }
        return super.onSpellFinished(npc, player, skill);
    }

    public String onAggroRangeEnter (L2Npc npc, L2PcInstance player, boolean isPet) 
    {
        int i1 = 0;
        if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING)
        {
            if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 1 ) / 4 ))
            {
                if( player == c_quest2 )
                {
                    if( ( ( 10 * 1000 ) + 1000 ) > i_quest2 )
                    {
                        i_quest2 = ((10 * 1000) + Rnd.get(3000));
                    }
                }
                else if( player == c_quest3 )
                {
                    if( ( ( 10 * 1000 ) + 1000 ) > i_quest3 )
                    {
                        i_quest3 = ((10 * 1000) + Rnd.get(3000));
                    }
                }
                else if( player == c_quest4 )
                {
                    if( ( ( 10 * 1000 ) + 1000 ) > i_quest4 )
                    {
                        i_quest4 = ((10 * 1000) + Rnd.get(3000));
                    }
                }
                else if( i_quest2 > i_quest3 )
                {
                    i1 = 3;
                }
                else if( i_quest2 == i_quest3 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 3;
                    }
                }
                else if( i_quest2 < i_quest3 )
                {
                    i1 = 2;
                }
                if( i1 == 2 )
                {
                    if( i_quest2 > i_quest4 )
                    {
                        i1 = 4;
                    }
                    else if( i_quest2 == i_quest4 )
                    {
                        if( Rnd.get(100) < 50 )
                        {
                            i1 = 2;
                        }
                        else
                        {
                            i1 = 4;
                        }
                    }
                    else if( i_quest2 < i_quest4 )
                    {
                        i1 = 2;
                    }
                }
                else if( i1 == 3 )
                {
                    if( i_quest3 > i_quest4 )
                    {
                        i1 = 4;
                    }
                    else if( i_quest3 == i_quest4 )
                    {
                        if( Rnd.get(100) < 50 )
                        {
                            i1 = 3;
                        }
                        else
                        {
                            i1 = 4;
                        }
                    }
                    else if( i_quest3 < i_quest4 )
                    {
                        i1 = 3;
                    }
                }
                if (i1 == 2)
                {
                        i_quest2 = ( ( 10 * 1000 ) + Rnd.get(3000) );
                        c_quest2 = player;
                }
                else if (i1 == 3)
                {
                        i_quest3 = ( ( 10 * 1000 ) + Rnd.get(3000) );
                        c_quest3 = player;
                }
                else if (i1 == 4)
                {
                        i_quest4 = ( ( 10 * 1000 ) + Rnd.get(3000) );
                        c_quest4 = player;
                }
            }
            else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 2 ) / 4 ))
            {
                if( player == c_quest2 )
                {
                    if( ( ( 6 * 1000 ) + 1000 ) > i_quest2 )
                    {
                        i_quest2 = ( ( 6 * 1000 ) + Rnd.get(3000) );
                    }
                }
                else if( player == c_quest3 )
                {
                    if( ( ( 6 * 1000 ) + 1000 ) > i_quest3 )
                    {
                        i_quest3 = ( ( 6 * 1000 ) + Rnd.get(3000) );
                    }
                }
                else if( player == c_quest4 )
                {
                    if( ( ( 6 * 1000 ) + 1000 ) > i_quest4 )
                    {
                        i_quest4 = ( ( 6 * 1000 ) + Rnd.get(3000) );
                    }
                }
                else if( i_quest2 > i_quest3 )
                {
                    i1 = 3;
                }
                else if( i_quest2 == i_quest3 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 3;
                    }
                }
                else if( i_quest2 < i_quest3 )
                {
                    i1 = 2;
                }
                if( i1 == 2 )
                {
                    if( i_quest2 > i_quest4 )
                    {
                        i1 = 4;
                    }
                    else if( i_quest2 == i_quest4 )
                    {
                        if( Rnd.get(100) < 50 )
                        {
                            i1 = 2;
                        }
                        else
                        {
                            i1 = 4;
                        }
                    }
                    else if( i_quest2 < i_quest4 )
                    {
                        i1 = 2;
                    }
                }
                else if( i1 == 3 )
                {
                    if( i_quest3 > i_quest4 )
                    {
                        i1 = 4;
                    }
                    else if( i_quest3 == i_quest4 )
                    {
                        if( Rnd.get(100) < 50 )
                        {
                            i1 = 3;
                        }
                        else
                        {
                            i1 = 4;
                        }
                    }
                    else if( i_quest3 < i_quest4 )
                    {
                        i1 = 3;
                    }
                }
                if (i1 == 2)
                {
                        i_quest2 = ( ( 6 * 1000 ) + Rnd.get(3000) );
                        c_quest2 = player;
                }
                else if (i1 == 3)
                {
                        i_quest3 = ( ( 6 * 1000 ) + Rnd.get(3000) );
                        c_quest3 = player;
                }
                else if (i1 == 4)
                {
                        i_quest4 = ( ( 6 * 1000 ) + Rnd.get(3000) );
                        c_quest4 = player;
                }
            }
            else if( npc.getCurrentHp() > ( ( npc.getMaxHp() * 3 ) / 4 ))
            {
                if( player == c_quest2 )
                {
                    if( ( ( 3 * 1000 ) + 1000 ) > i_quest2 )
                    {
                        i_quest2 = ( ( 3 * 1000 ) + Rnd.get(3000) );
                    }
                }
                else if( player == c_quest3 )
                {
                    if( ( ( 3 * 1000 ) + 1000 ) > i_quest3 )
                    {
                        i_quest3 = ( ( 3 * 1000 ) + Rnd.get(3000) );
                    }
                }
                else if( player == c_quest4 )
                {
                    if( ( ( 3 * 1000 ) + 1000 ) > i_quest4 )
                    {
                        i_quest4 = ( ( 3 * 1000 ) + Rnd.get(3000) );
                    }
                }
                else if( i_quest2 > i_quest3 )
                {
                    i1 = 3;
                }
                else if( i_quest2 == i_quest3 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 3;
                    }
                }
                else if( i_quest2 < i_quest3 )
                {
                    i1 = 2;
                }
                if( i1 == 2 )
                {
                    if( i_quest2 > i_quest4 )
                    {
                        i1 = 4;
                    }
                    else if( i_quest2 == i_quest4 )
                    {
                        if( Rnd.get(100) < 50 )
                        {
                            i1 = 2;
                        }
                        else
                        {
                            i1 = 4;
                        }
                    }
                    else if( i_quest2 < i_quest4 )
                    {
                        i1 = 2;
                    }
                }
                else if( i1 == 3 )
                {
                    if( i_quest3 > i_quest4 )
                    {
                        i1 = 4;
                    }
                    else if( i_quest3 == i_quest4 )
                    {
                        if( Rnd.get(100) < 50 )
                        {
                            i1 = 3;
                        }
                        else
                        {
                            i1 = 4;
                        }
                    }
                    else if( i_quest3 < i_quest4 )
                    {
                        i1 = 3;
                    }
                }
                if (i1 == 2)
                {
                        i_quest2 = ( ( 3 * 1000 ) + Rnd.get(3000) );
                        c_quest2 = player;
                }
                else if (i1 == 3)
                {
                        i_quest3 = ( ( 3 * 1000 ) + Rnd.get(3000) );
                        c_quest3 = player;
                }
                else if (i1 == 4)
                {
                        i_quest4 = ( ( 3 * 1000 ) + Rnd.get(3000) );
                        c_quest4 = player;
                }
            }
            else if( player == c_quest2 )
            {
                if( ( ( 2 * 1000 ) + 1000 ) > i_quest2 )
                {
                    i_quest2 = ( ( 2 * 1000 ) + Rnd.get(3000));
                }
            }
            else if( player == c_quest3 )
            {
                if( ( ( 2 * 1000 ) + 1000 ) > i_quest3 )
                {
                    i_quest3 = ( ( 2 * 1000 ) + Rnd.get(3000));
                }
            }
            else if( player == c_quest4 )
            {
                if( ( ( 2 * 1000 ) + 1000 ) > i_quest4 )
                {
                    i_quest4 = ( ( 2 * 1000 ) + Rnd.get(3000));
                }
            }
            else if( i_quest2 > i_quest3 )
            {
                i1 = 3;
            }
            else if( i_quest2 == i_quest3 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 3;
                }
            }
            else if( i_quest2 < i_quest3 )
            {
                i1 = 2;
            }
            if( i1 == 2 )
            {
                if( i_quest2 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest2 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 2;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest2 < i_quest4 )
                {
                    i1 = 2;
                }
            }
            else if( i1 == 3 )
            {
                if( i_quest3 > i_quest4 )
                {
                    i1 = 4;
                }
                else if( i_quest3 == i_quest4 )
                {
                    if( Rnd.get(100) < 50 )
                    {
                        i1 = 3;
                    }
                    else
                    {
                        i1 = 4;
                    }
                }
                else if( i_quest3 < i_quest4 )
                {
                    i1 = 3;
                }
            }
            if (i1 == 2)
            {
                    i_quest2 = ( ( 2 * 1000 ) + Rnd.get(3000) );
                    c_quest2 = player;
            }
            else if (i1 == 3)
            {
                    i_quest3 = ( ( 2 * 1000 ) + Rnd.get(3000) );
                    c_quest3 = player;
            }
            else if (i1 == 4)
            {
                    i_quest4 = ( ( 2 * 1000 ) + Rnd.get(3000) );
                    c_quest4 = player;
            }
        }
        else if( player == c_quest2 )
        {
            if( ( ( 1 * 1000 ) + 1000 ) > i_quest2 )
            {
                i_quest2 = ( ( 1 * 1000 ) + Rnd.get(3000) );
            }
        }
        else if( player == c_quest3 )
        {
            if( ( ( 1 * 1000 ) + 1000 ) > i_quest3 )
            {
                i_quest3 = ( ( 1 * 1000 ) + Rnd.get(3000) );
            }
        }
        else if( player == c_quest4 )
        {
            if( ( ( 1 * 1000 ) + 1000 ) > i_quest4 )
            {
                i_quest4 = ( ( 1 * 1000 ) + Rnd.get(3000) );
            }
        }
        else if( i_quest2 > i_quest3 )
        {
            i1 = 3;
        }
        else if( i_quest2 == i_quest3 )
        {
            if( Rnd.get(100) < 50 )
            {
                i1 = 2;
            }
            else
            {
                i1 = 3;
            }
        }
        else if( i_quest2 < i_quest3 )
        {
            i1 = 2;
        }
        if( i1 == 2 )
        {
            if( i_quest2 > i_quest4 )
            {
                i1 = 4;
            }
            else if( i_quest2 == i_quest4 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 2;
                }
                else
                {
                    i1 = 4;
                }
            }
            else if( i_quest2 < i_quest4 )
            {
                i1 = 2;
            }
        }
        else if( i1 == 3 )
        {
            if( i_quest3 > i_quest4 )
            {
                i1 = 4;
            }
            else if( i_quest3 == i_quest4 )
            {
                if( Rnd.get(100) < 50 )
                {
                    i1 = 3;
                }
                else
                {
                    i1 = 4;
                }
            }
            else if( i_quest3 < i_quest4 )
            {
                i1 = 3;
            }
        }
        if (i1 == 2)
        {
                i_quest2 = ( ( 1 * 1000 ) + Rnd.get(3000) );
                c_quest2 = player;
        }
        else if (i1 == 3)
        {
                i_quest3 = ( ( 1 * 1000 ) + Rnd.get(3000) );
                c_quest3 = player;
        }
        else if (i1 == 4)
        {
                i_quest4 = ( ( 1 * 1000 ) + Rnd.get(3000) );
                c_quest4 = player;
        }
        if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING && !npc.isInvul())
        {
            getRandomSkill(npc);
        }
        else
            return null;
        return super.onAggroRangeEnter(npc, player, isPet);
    }

    public String onSkillSee (L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet)
    {
        if (npc.isInvul())
        {
            return null;
        }
        npc.setTarget(caster);
        return super.onSkillSee(npc, caster, skill, targets, isPet);
    }

    public static void main(String[] args)
    {
        // now call the constructor (starts up the ai)
        new Valakas(-1,"valakas","ai");
    }
}
---------
Desde ya muchas gracias.

---------- Post actualizado a las 17:41 ---------- Ultima actualizacion del post a las 19:57 ----------

Ninguna solucion?.....]]></description>
			<content:encoded><![CDATA[<div>Buenos dias, tengo un problema Baium y Valakas no pegan de ninguna manera ni se mueven, probe entrando con quest todo legalmente y tampoco siguen sin moverse, queria saber si alguno sabia como se puede arreglar esto les dejo el Script-AI-Individual-Baium.java y Valakas.java :<br />
<br />
Baium :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Código:</div>
	<hr /><code class="bbcode_code">/*<br />
&nbsp;* This program is free software: you can redistribute it and/or modify it under<br />
&nbsp;* the terms of the GNU General Public License as published by the Free Software<br />
&nbsp;* Foundation, either version 3 of the License, or (at your option) any later<br />
&nbsp;* version.<br />
&nbsp;* <br />
&nbsp;* This program is distributed in the hope that it will be useful, but WITHOUT<br />
&nbsp;* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS<br />
&nbsp;* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more<br />
&nbsp;* details.<br />
&nbsp;* <br />
&nbsp;* You should have received a copy of the GNU General Public License along with<br />
&nbsp;* this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.<br />
&nbsp;*/<br />
package ai.individual;<br />
<br />
import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;<br />
import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;<br />
<br />
import java.util.Collection;<br />
<br />
import javolution.util.FastList;<br />
import ai.group_template.L2AttackableAIScript;<br />
<br />
import net.sf.l2j.gameserver.GeoData;<br />
import net.sf.l2j.gameserver.ThreadPoolManager;<br />
import net.sf.l2j.gameserver.datatables.SkillTable;<br />
import net.sf.l2j.gameserver.instancemanager.GrandBossManager;<br />
import net.sf.l2j.gameserver.model.L2Effect;<br />
import net.sf.l2j.gameserver.model.L2Object;<br />
import net.sf.l2j.gameserver.model.L2Skill;<br />
import net.sf.l2j.gameserver.model.actor.L2Character;<br />
import net.sf.l2j.gameserver.model.actor.L2Npc;<br />
import net.sf.l2j.gameserver.model.actor.L2Summon;<br />
import net.sf.l2j.gameserver.model.actor.instance.L2DecoyInstance;<br />
import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;<br />
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;<br />
import net.sf.l2j.gameserver.model.quest.QuestTimer;<br />
import net.sf.l2j.gameserver.model.zone.type.L2BossZone;<br />
import net.sf.l2j.gameserver.network.serverpackets.Earthquake;<br />
import net.sf.l2j.gameserver.network.serverpackets.MoveToPawn;<br />
import net.sf.l2j.gameserver.network.serverpackets.PlaySound;<br />
import net.sf.l2j.gameserver.network.serverpackets.SocialAction;<br />
import net.sf.l2j.gameserver.templates.StatsSet;<br />
import net.sf.l2j.gameserver.util.Util;<br />
import net.sf.l2j.util.Rnd;<br />
<br />
/**<br />
&nbsp;* Baium AI<br />
&nbsp;* <br />
&nbsp;* Note1: if the server gets rebooted while players are still fighting Baium, there is no lock, but<br />
&nbsp;*&nbsp;  players also lose their ability to wake baium up.&nbsp; However, should another person<br />
&nbsp;*&nbsp;  enter the room and wake him up, the players who had stayed inside may join the raid.<br />
&nbsp;*&nbsp;  This can be helpful for players who became victims of a reboot (they only need 1 new player to<br />
&nbsp;*&nbsp;  enter and wake up baium) and is not too exploitable since any player wishing to exploit it<br />
&nbsp;*&nbsp;  would have to suffer 5 days of being parked in an empty room.<br />
&nbsp;* Note2: Neither version of Baium should be a permanent spawn.&nbsp; This script is fully capable of<br />
&nbsp;*&nbsp;  spawning the statue-version when the lock expires and switching it to the mob version promptly.<br />
&nbsp;*<br />
&nbsp;* Additional notes ( source http://aleenaresron.blogspot.com/2006_08_01_archive.html ):<br />
&nbsp;*&nbsp;  * Baium only first respawns five days after his last death. And from those five days he will<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  respawn within 1-8 hours of his last death. So, you have to know his last time of death.<br />
&nbsp;*&nbsp;  * If by some freak chance you are the only one in Baium's chamber and NO ONE comes in<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  [ha, ha] you or someone else will have to wake Baium. There is a good chance that Baium<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  will automatically kill whoever wakes him. There are some people that have been able to<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  wake him and not die, however if you've already gone through the trouble of getting the<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  bloody fabric and camped him out and researched his spawn time, are you willing to take that <br />
&nbsp;*&nbsp; &nbsp; &nbsp;  chance that you'll wake him and not be able to finish your quest? Doubtful.<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  [ this powerful attack vs the player who wakes him up is NOT yet implemented here]<br />
&nbsp;*&nbsp;  * once someone starts attacking Baium no one else can port into the chamber where he is.<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  Unlike with the other raid bosses, you can just show up at any time as long as you are there<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  when they die. Not true with Baium. Once he gets attacked, the port to Baium closes. byebye,<br />
&nbsp;*&nbsp; &nbsp; &nbsp;  see you in 5 days.&nbsp; If nobody attacks baium for 30 minutes, he auto-despawns and unlocks the <br />
&nbsp;*&nbsp; &nbsp; &nbsp;  vortex<br />
&nbsp;* <br />
&nbsp;* @author Fulminus version 0.1<br />
&nbsp;*/<br />
public class Baium extends L2AttackableAIScript<br />
{<br />
&nbsp; &nbsp; private L2Character _target;<br />
&nbsp; &nbsp; private L2Skill _skill;<br />
&nbsp; &nbsp; private static final int STONE_BAIUM = 29025;<br />
&nbsp; &nbsp; private static final int ANGELIC_VORTEX = 31862;<br />
&nbsp; &nbsp; private static final int LIVE_BAIUM = 29020;<br />
<br />
&nbsp; &nbsp; //Baium status tracking<br />
&nbsp; &nbsp; private static final byte ASLEEP = 0;&nbsp; // baium is in the stone version, waiting to be woken up.&nbsp; Entry is unlocked<br />
&nbsp; &nbsp; private static final byte AWAKE = 1;&nbsp;  // baium is awake and fighting.&nbsp; Entry is locked.<br />
&nbsp; &nbsp; private static final byte DEAD = 2;&nbsp; &nbsp; // baium has been killed and has not yet spawned.&nbsp; Entry is locked<br />
<br />
&nbsp; &nbsp; private static long _LastAttackVsBaiumTime = 0;<br />
&nbsp; &nbsp; private static L2BossZone _Zone;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; public Baium (int questId, String name, String descr)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; super(questId, name, descr);<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; int[] mob = {LIVE_BAIUM};<br />
&nbsp; &nbsp; &nbsp; &nbsp; this.registerMobs(mob);<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; // Quest NPC starter initialization<br />
&nbsp; &nbsp; &nbsp; &nbsp; addStartNpc(STONE_BAIUM);<br />
&nbsp; &nbsp; &nbsp; &nbsp; addStartNpc(ANGELIC_VORTEX);<br />
&nbsp; &nbsp; &nbsp; &nbsp; addTalkId(STONE_BAIUM);<br />
&nbsp; &nbsp; &nbsp; &nbsp; addTalkId(ANGELIC_VORTEX);<br />
&nbsp; &nbsp; &nbsp; &nbsp; _Zone = GrandBossManager.getInstance().getZone(113100,14500,10077);<br />
&nbsp; &nbsp; &nbsp; &nbsp; StatsSet info = GrandBossManager.getInstance().getStatsSet(LIVE_BAIUM);<br />
&nbsp; &nbsp; &nbsp; &nbsp; int status = GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (status == DEAD)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // load the unlock date and time for baium from DB<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; long temp = (info.getLong(&quot;respawn_time&quot;) - System.currentTimeMillis());<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (temp &gt; 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // the unlock time has not yet expired.&nbsp; Mark Baium as currently locked (dead).&nbsp; Setup a timer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // to fire at the correct time (calculate the time between now and the unlock time,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // setup a timer to fire after that many msec)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;baium_unlock&quot;, temp, null, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // the time has already expired while the server was offline.&nbsp; Delete the saved time and<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // immediately spawn the stone-baium.&nbsp; Also the state need not be changed from ASLEEP<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,ASLEEP);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (status == AWAKE)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int loc_x = info.getInteger(&quot;loc_x&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int loc_y = info.getInteger(&quot;loc_y&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int loc_z = info.getInteger(&quot;loc_z&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int heading = info.getInteger(&quot;heading&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final int hp = info.getInteger(&quot;currentHP&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final int mp = info.getInteger(&quot;currentMP&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2GrandBossInstance baium = (L2GrandBossInstance) addSpawn(LIVE_BAIUM,loc_x,loc_y,loc_z,heading,false,0);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().addBoss(baium);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final L2Npc _baium = baium;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run()<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.setCurrentHpMp(hp,mp);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.setIsInvul(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.setIsImmobilized(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.setRunning();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.broadcastPacket(new SocialAction(_baium.getObjectId(),2));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;baium_wakeup&quot;,15000, _baium, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Exception e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },100L);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (event.equalsIgnoreCase(&quot;baium_unlock&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,ASLEEP);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;skill_range&quot;) &amp;&amp; npc != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callSkillAI(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;clean_player&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _target = getRandomTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;baium_wakeup&quot;) &amp;&amp; npc != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (npc.getNpcId() == LIVE_BAIUM)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.broadcastPacket(new SocialAction(npc.getObjectId(),1));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.broadcastPacket(new Earthquake(npc.getX(), npc.getY(), npc.getZ(),40,5));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // start monitoring baium's inactivity<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _LastAttackVsBaiumTime = System.currentTimeMillis();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;baium_despawn&quot;, 60000, npc, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;skill_range&quot;, 500, npc, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final L2Npc baium = npc;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run()<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; baium.setIsInvul(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; baium.setIsImmobilized(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Exception e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },11100L);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // TODO: the person who woke baium up should be knocked across the room, onto a wall, and<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // lose massive amounts of HP.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; // despawn the live baium after 30 minutes of inactivity<br />
&nbsp; &nbsp; &nbsp; &nbsp; // also check if the players are cheating, having pulled Baium outside his zone...<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;baium_despawn&quot;) &amp;&amp; npc != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (npc.getNpcId() == LIVE_BAIUM)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // just in case the zone reference has been lost (somehow...), restore the reference<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_Zone == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Zone = GrandBossManager.getInstance().getZone(113100,14500,10077);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_LastAttackVsBaiumTime + 1800000 &lt; System.currentTimeMillis())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.deleteMe();&nbsp;  // despawn the live-baium<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addSpawn(STONE_BAIUM,116033,17447,10104,40188,false,0);&nbsp; // spawn stone-baium<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,ASLEEP);&nbsp; &nbsp; // mark that Baium is not awake any more<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Zone.oustAllPlayers();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelQuestTimer(&quot;baium_despawn&quot;, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if ((_LastAttackVsBaiumTime + 300000 &lt; System.currentTimeMillis()) &amp;&amp; npc.getCurrentHp() &lt; ( ( npc.getMaxHp() * 3 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(false); //just in case<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4135,1));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (!_Zone.isInsideZone(npc))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.teleToLocation(116033,17447,10104);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onAdvEvent(event, npc, player);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onTalk(L2Npc npc,L2PcInstance player)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; int npcId = npc.getNpcId();<br />
&nbsp; &nbsp; &nbsp; &nbsp; String htmltext = &quot;&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (_Zone == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Zone = GrandBossManager.getInstance().getZone(113100,14500,10077);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (_Zone == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &quot;&lt;html&gt;&lt;body&gt;Angelic Vortex:&lt;br&gt;You may not enter while admin disabled this zone&lt;/body&gt;&lt;/html&gt;&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npcId == STONE_BAIUM &amp;&amp; GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM) == ASLEEP)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_Zone.isPlayerAllowed(player))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // once Baium is awaken, no more people may enter until he dies, the server reboots, or <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 30 minutes pass with no attacks made against Baium.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,AWAKE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.deleteMe();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2GrandBossInstance baium = (L2GrandBossInstance) addSpawn(LIVE_BAIUM,npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().addBoss(baium);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final L2Npc _baium = baium;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run()<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.setIsInvul(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.setRunning();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _baium.broadcastPacket(new SocialAction(_baium.getObjectId(),2));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;baium_wakeup&quot;,15000, _baium, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Throwable e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },100L);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; htmltext = &quot;Conditions are not right to wake up Baium&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (npcId == ANGELIC_VORTEX)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (GrandBossManager.getInstance().getBossStatus(LIVE_BAIUM) == ASLEEP)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (player.isFlying())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //print &quot;Player &quot;+player.getName()+&quot; attempted to enter Baium's lair while flying!&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; htmltext = &quot;&lt;html&gt;&lt;body&gt;Angelic Vortex:&lt;br&gt;You may not enter while flying a wyvern&lt;/body&gt;&lt;/html&gt;&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (player.getQuestState(&quot;baium&quot;).getQuestItemsCount(4295) &gt; 0) // bloody fabric<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; player.getQuestState(&quot;baium&quot;).takeItems(4295,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // allow entry for the player for the next 30 secs (more than enough time for the TP to happen)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Note: this just means 30secs to get in, no limits on how long it takes before we get out.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Zone.allowPlayerEntry(player,30);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; player.teleToLocation(113100,14500,10077);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; htmltext = &quot;&lt;html&gt;&lt;body&gt;Angelic Vortex:&lt;br&gt;You do not have enough items&lt;/body&gt;&lt;/html&gt;&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; htmltext = &quot;&lt;html&gt;&lt;body&gt;Angelic Vortex:&lt;br&gt;You may not enter at this time&lt;/body&gt;&lt;/html&gt;&quot;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return htmltext;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; public String onSpellFinished(L2Npc npc, L2PcInstance player, L2Skill skill)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (npc.getNpcId() == LIVE_BAIUM &amp;&amp; !npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callSkillAI(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onSpellFinished(npc, player, skill);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; public String onAttack (L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (!_Zone.isInsideZone(attacker))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attacker.reduceCurrentHp(attacker.getCurrentHp(),attacker,false,false, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return super.onAttack(npc, attacker, damage, isPet);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return super.onAttack(npc, attacker, damage, isPet);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (npc.getNpcId() == LIVE_BAIUM &amp;&amp; !npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (attacker.getMountType() == 1)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int sk_4258 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2Effect[] effects = attacker.getAllEffects();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (effects.length != 0 || effects != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (L2Effect e : effects)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.getSkill().getId() == 4258)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sk_4258 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (sk_4258 == 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(attacker);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4258,1));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // update a variable with the last action against baium<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _LastAttackVsBaiumTime = System.currentTimeMillis();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callSkillAI(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onAttack(npc, attacker, damage, isPet);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; public String onKill (L2Npc npc, L2PcInstance killer, boolean isPet) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; cancelQuestTimer(&quot;baium_despawn&quot;, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; npc.broadcastPacket(new PlaySound(1, &quot;BS01_D&quot;, 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));<br />
&nbsp; &nbsp; &nbsp; &nbsp; // spawn the &quot;Teleportation Cubic&quot; for 15 minutes (to allow players to exit the lair)<br />
&nbsp; &nbsp; &nbsp; &nbsp; addSpawn(29055,115203,16620,10078,0,false,900000); ////should we teleport everyone out if the cubic despawns??<br />
&nbsp; &nbsp; &nbsp; &nbsp; // &quot;lock&quot; baium for 5 days and 1 to 8 hours [i.e. 432,000,000 +&nbsp; 1*3,600,000 + random-less-than(8*3,600,000) millisecs]<br />
&nbsp; &nbsp; &nbsp; &nbsp; long respawnTime = ((121 + Rnd.get(8)) * 3600000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(LIVE_BAIUM,DEAD);<br />
&nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;baium_unlock&quot;, respawnTime, null, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; // also save the respawn time so that the info is maintained past reboots<br />
&nbsp; &nbsp; &nbsp; &nbsp; StatsSet info = GrandBossManager.getInstance().getStatsSet(LIVE_BAIUM);<br />
&nbsp; &nbsp; &nbsp; &nbsp; info.set(&quot;respawn_time&quot;,(System.currentTimeMillis()) + respawnTime);<br />
&nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setStatsSet(LIVE_BAIUM,info);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (getQuestTimer(&quot;skill_range&quot;, npc, null) != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getQuestTimer(&quot;skill_range&quot;, npc, null).cancel();<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onKill(npc,killer,isPet);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public L2Character getRandomTarget(L2Npc npc)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; FastList&lt;L2Character&gt; result = new FastList&lt;L2Character&gt;();<br />
&nbsp; &nbsp; &nbsp; &nbsp; Collection&lt;L2Object&gt; objs = npc.getKnownList().getKnownObjects().values();<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (L2Object obj : objs)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (obj instanceof L2Character)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (((L2Character) obj).getZ() &lt; ( npc.getZ() - 100 ) &amp;&amp; ((L2Character) obj).getZ() &gt; ( npc.getZ() + 100 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || !(GeoData.getInstance().canSeeTarget(((L2Character) obj).getX(), ((L2Character) obj).getY(), ((L2Character) obj).getZ(), npc.getX(), npc.getY(), npc.getZ()))||((L2Character) obj).isGM())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (obj instanceof L2PcInstance || obj instanceof L2Summon || obj instanceof L2DecoyInstance)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(9000, npc, obj, true) &amp;&amp; !((L2Character) obj).isDead())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.add((L2Character) obj);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (!result.isEmpty() &amp;&amp; result.size() != 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Object[] characters = result.toArray();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QuestTimer timer = getQuestTimer(&quot;clean_player&quot;, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (timer != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timer.cancel();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;clean_player&quot;, 20000, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (L2Character) characters[Rnd.get(characters.length)];<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public synchronized void callSkillAI(L2Npc npc)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul() || npc.isCastingNow()) return;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (_target == null || _target.isDead() || !(_Zone.isInsideZone(_target)))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _target = getRandomTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_target != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _skill = SkillTable.getInstance().getInfo(getRandomSkill(npc),1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; L2Character target = _target;<br />
&nbsp; &nbsp; &nbsp; &nbsp; L2Skill skill = _skill;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (skill == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(getRandomSkill(npc),1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (target == null || target.isDead() || !(_Zone.isInsideZone(target)))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(target);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _target = null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _skill = null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (getDist(skill.getCastRange()) &gt; 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.broadcastPacket(new MoveToPawn(npc,target,getDist(skill.getCastRange())));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.sleep(1000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.stopMove(null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(skill);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Exception e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {e.printStackTrace();}<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public int getRandomSkill(L2Npc npc)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; int skill;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 3 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4128;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4129;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4127;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 2 ) / 4) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4131;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4128;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4129;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4127;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 1 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4130;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4131;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4128;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4129;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4127;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4130;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4131;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4128;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4129;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = 4127;<br />
&nbsp; &nbsp; &nbsp; &nbsp; return skill;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onSkillSee (L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(caster);<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onSkillSee(npc, caster, skill, targets, isPet);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public int getDist(int range)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; int dist = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; switch(range)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case -1:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 100:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dist = 85;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; default:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dist = range-85;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return dist;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public static void main(String[] args)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; // Quest class and state definition<br />
&nbsp; &nbsp; &nbsp; &nbsp; new Baium(-1, &quot;baium&quot;, &quot;ai&quot;);<br />
&nbsp; &nbsp; }<br />
}</code><hr />
</div>Valakas <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Código:</div>
	<hr /><code class="bbcode_code">/*<br />
&nbsp;* This program is free software: you can redistribute it and/or modify it under<br />
&nbsp;* the terms of the GNU General Public License as published by the Free Software<br />
&nbsp;* Foundation, either version 3 of the License, or (at your option) any later<br />
&nbsp;* version.<br />
&nbsp;* <br />
&nbsp;* This program is distributed in the hope that it will be useful, but WITHOUT<br />
&nbsp;* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS<br />
&nbsp;* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more<br />
&nbsp;* details.<br />
&nbsp;* <br />
&nbsp;* You should have received a copy of the GNU General Public License along with<br />
&nbsp;* this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.<br />
&nbsp;*/<br />
package ai.individual;<br />
<br />
import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_FOLLOW;<br />
import static net.sf.l2j.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE;<br />
<br />
import java.util.Collection;<br />
<br />
import javolution.util.FastList;<br />
import ai.group_template.L2AttackableAIScript;<br />
<br />
import net.sf.l2j.gameserver.ThreadPoolManager;<br />
import net.sf.l2j.gameserver.datatables.SkillTable;<br />
import net.sf.l2j.gameserver.instancemanager.GrandBossManager;<br />
import net.sf.l2j.gameserver.model.L2Effect;<br />
import net.sf.l2j.gameserver.model.L2Object;<br />
import net.sf.l2j.gameserver.model.L2Skill;<br />
import net.sf.l2j.gameserver.model.actor.L2Character;<br />
import net.sf.l2j.gameserver.model.actor.L2Npc;<br />
import net.sf.l2j.gameserver.model.actor.L2Summon;<br />
import net.sf.l2j.gameserver.model.actor.instance.L2DecoyInstance;<br />
import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;<br />
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;<br />
import net.sf.l2j.gameserver.model.quest.QuestTimer;<br />
import net.sf.l2j.gameserver.model.zone.type.L2BossZone;<br />
import net.sf.l2j.gameserver.network.serverpackets.PlaySound;<br />
import net.sf.l2j.gameserver.network.serverpackets.SocialAction;<br />
import net.sf.l2j.gameserver.network.serverpackets.SpecialCamera;<br />
import net.sf.l2j.gameserver.templates.StatsSet;<br />
import net.sf.l2j.gameserver.util.Util;<br />
import net.sf.l2j.util.Rnd;<br />
<br />
/**<br />
&nbsp;* Valakas AI<br />
&nbsp;* @author Kerberos<br />
&nbsp;*/<br />
public class Valakas extends L2AttackableAIScript<br />
{<br />
&nbsp; &nbsp; private int i_ai0 = 0;<br />
&nbsp; &nbsp; private int i_ai1 = 0;<br />
&nbsp; &nbsp; private int i_ai2 = 0;<br />
&nbsp; &nbsp; private int i_ai3 = 0;<br />
&nbsp; &nbsp; private int i_ai4 = 0;<br />
&nbsp; &nbsp; private int i_quest0 = 0;<br />
&nbsp; &nbsp; private long i_quest1 = 0; // time to tracking valakas when was last time attacked<br />
&nbsp; &nbsp; private int i_quest2 = 0; // hate value for 1st player<br />
&nbsp; &nbsp; private int i_quest3 = 0; // hate value for 2nd player<br />
&nbsp; &nbsp; private int i_quest4 = 0; // hate value for 3rd player<br />
&nbsp; &nbsp; private L2Character c_quest2 = null; // 1st most hated target<br />
&nbsp; &nbsp; private L2Character c_quest3 = null; // 2nd most hated target<br />
&nbsp; &nbsp; private L2Character c_quest4 = null; // 3rd most hated target<br />
<br />
&nbsp; &nbsp; private static final int VALAKAS = 29028;<br />
<br />
&nbsp; &nbsp; //Valakas Status Tracking :<br />
&nbsp; &nbsp; private static final byte DORMANT = 0;&nbsp; &nbsp; &nbsp; &nbsp;  //Valakas is spawned and no one has entered yet. Entry is unlocked<br />
&nbsp; &nbsp; private static final byte WAITING = 1;&nbsp; &nbsp; &nbsp; &nbsp;  //Valakas is spawend and someone has entered, triggering a 30 minute window for additional people to enter<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //before he unleashes his attack. Entry is unlocked<br />
&nbsp; &nbsp; private static final byte FIGHTING = 2;&nbsp; &nbsp; &nbsp; &nbsp; //Valakas is engaged in battle, annihilating his foes. Entry is locked<br />
&nbsp; &nbsp; private static final byte DEAD = 3;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Valakas has been killed. Entry is locked<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; private static L2BossZone _Zone;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; // Boss: Valakas<br />
&nbsp; &nbsp; public Valakas(int id,String name,String descr)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; super(id,name,descr);<br />
&nbsp; &nbsp; &nbsp; &nbsp; int[] mob = {VALAKAS};<br />
&nbsp; &nbsp; &nbsp; &nbsp; this.registerMobs(mob);<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_ai0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_ai1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_ai2 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_ai3 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_ai4 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_quest0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_quest1 = System.currentTimeMillis();<br />
&nbsp; &nbsp; &nbsp; &nbsp; _Zone = GrandBossManager.getInstance().getZone(212852,-114842,-1632);<br />
&nbsp; &nbsp; &nbsp; &nbsp; StatsSet info = GrandBossManager.getInstance().getStatsSet(VALAKAS);<br />
&nbsp; &nbsp; &nbsp; &nbsp; int status = GrandBossManager.getInstance().getBossStatus(VALAKAS);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (status == DEAD)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // load the unlock date and time for valakas from DB<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; long temp = (info.getLong(&quot;respawn_time&quot;) - System.currentTimeMillis());<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // if valakas is locked until a certain time, mark it so and start the unlock timer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // the unlock time has not yet expired.&nbsp; Mark valakas as currently locked.&nbsp; Setup a timer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // to fire at the correct time (calculate the time between now and the unlock time,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // setup a timer to fire after that many msec)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (temp &gt; 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.startQuestTimer(&quot;valakas_unlock&quot;, temp, null, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // the time has already expired while the server was offline. Immediately spawn valakas in his cave.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // also, the status needs to be changed to DORMANT<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS,-105200,-253104,-15264,0,false,0);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(VALAKAS,DORMANT);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().addBoss(valakas);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final L2Npc _valakas = valakas;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run()<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _valakas.setIsInvul(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _valakas.setRunning();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Throwable e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },100L);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1003&quot;, 60000, valakas, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int loc_x = info.getInteger(&quot;loc_x&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int loc_y = info.getInteger(&quot;loc_y&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int loc_z = info.getInteger(&quot;loc_z&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int heading = info.getInteger(&quot;heading&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final int hp = info.getInteger(&quot;currentHP&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final int mp = info.getInteger(&quot;currentMP&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS,loc_x,loc_y,loc_z,heading,false,0);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().addBoss(valakas);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final L2Npc _valakas = valakas;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final int _status = status;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run()<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _valakas.setCurrentHpMp(hp,mp);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_status != FIGHTING) _valakas.setIsInvul(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _valakas.setRunning();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Throwable e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },100L);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1003&quot;, 60000, valakas, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (status == WAITING)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start timer to lock entry after 30 minutes<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1001&quot;,1800000, valakas, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (status == FIGHTING)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Start repeating timer to check for inactivity<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1002&quot;,60000, valakas, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; valakas.setIsInvul(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onAdvEvent (String event, L2Npc npc, L2PcInstance player)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; long temp = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (event.equalsIgnoreCase(&quot;1001&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.teleToLocation(212852,-114842,-1632);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // delete me once animations available<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(VALAKAS,FIGHTING);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest1 = System.currentTimeMillis();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; final L2Npc _valakas = npc;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void run()<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; broadcastSpawn(_valakas);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Throwable e)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },1L);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1004&quot;,2000, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1002&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int lvl = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int sk_4691 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2Effect[] effects = npc.getAllEffects();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (effects.length != 0 || effects != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (L2Effect e : effects)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.getSkill().getId() == 4629)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sk_4691 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lvl = e.getSkill().getLevel();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp = (System.currentTimeMillis() - i_quest1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (temp &gt; 900000)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.teleToLocation(-105200,-253104,-15264);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(VALAKAS,DORMANT);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setCurrentHpMp(npc.getMaxHp(),npc.getMaxMp());<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Zone.oustAllPlayers();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelQuestTimer(&quot;1002&quot;, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 1 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (sk_4691 == 0 ||(sk_4691 == 1 &amp;&amp; lvl != 4))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4691,4));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 2 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (sk_4691 == 0 ||(sk_4691 == 1 &amp;&amp; lvl != 3))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4691,3));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 3 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (sk_4691 == 0 ||(sk_4691 == 1 &amp;&amp; lvl != 2))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4691,2));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (sk_4691 == 0 ||(sk_4691 == 1 &amp;&amp; lvl != 1))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4691,1));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1003&quot;) &amp;&amp; npc != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRandomSkill(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1004&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1102&quot;,1500, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-1,1500,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1102&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1103&quot;,3300, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-5,3000,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1103&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1104&quot;,2900, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-8,600,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1104&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1105&quot;,2700, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),180,-8,2700,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1105&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1106&quot;,1, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),250,70,0,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1106&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1107&quot;,3200, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),250,70,2500,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1107&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1108&quot;,1400, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),150,30,0,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1108&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1109&quot;,6700, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),150,20,2900,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1109&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1110&quot;,5700, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),170,-10,3400,15000,4000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1110&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // uncoment me once animations available<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //GrandBossManager.getInstance().setBossStatus(VALAKAS,FIGHTING);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1002&quot;,60000, npc, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsInvul(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRandomSkill(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1111&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1112&quot;,3500, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),210,-5,3000,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1112&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1113&quot;,4500, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),200,-8,3000,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1113&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1114&quot;,500, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),190,0,500,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1114&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1115&quot;,4600, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),120,0,2500,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1115&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1116&quot;,750, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),20,0,700,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1116&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1117&quot;,2500, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),10,0,1000,15000,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;1117&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),10,0,300,15000,250));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addSpawn(31759,212852,-114842,-1632,0,false,900000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int radius = 1500;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i=0; i &lt; 20; i++)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int x = (int) (radius*Math.cos(i*.331)); //.331~2pi/19<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int y = (int) (radius*Math.sin(i*.331));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addSpawn(31759,212852+x,-114842+y,-1632,0,false,900000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelQuestTimer(&quot;1002&quot;, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;remove_players&quot;,900000, null, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // delete me once animations available<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(VALAKAS,DEAD);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (event.equalsIgnoreCase(&quot;valakas_unlock&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2GrandBossInstance valakas = (L2GrandBossInstance) addSpawn(VALAKAS,-105200,-253104,-15264,32768,false,0);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().addBoss(valakas);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setBossStatus(VALAKAS,DORMANT);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (event.equalsIgnoreCase(&quot;remove_players&quot;))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _Zone.oustAllPlayers();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onAdvEvent(event, npc, player);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onAttack (L2Npc npc, L2PcInstance attacker, int damage, boolean isPet, L2Skill skill)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; i_quest1 = System.currentTimeMillis();<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (GrandBossManager.getInstance().getBossStatus(VALAKAS) != FIGHTING)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attacker.teleToLocation(150037,-57255,-2976);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (attacker.getMountType() == 1)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int sk_4258 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L2Effect[] effects = attacker.getAllEffects();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (effects.length != 0 || effects != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (L2Effect e : effects)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.getSkill().getId() == 4258)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sk_4258 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (sk_4258 == 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(attacker);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4258,1));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if( attacker.getZ() &lt; ( npc.getZ() + 200 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_ai2 == 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_ai1 = ( i_ai1 + damage );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest0 == 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_ai4 = ( i_ai4 + damage );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest0 == 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_ai3 = ( i_ai3 + damage );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if(i_ai2 == 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_ai0 = ( i_ai0 + damage );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest0 == 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if((((i_ai4 / npc.getMaxHp()) * 100)) &gt; 1)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_ai3 &gt; ( i_ai4 - i_ai3 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_ai3 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_ai4 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(SkillTable.getInstance().getInfo(4687,1));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest0 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (skill == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (attacker == c_quest2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (((damage * 1000) + 1000) &gt; i_quest2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ((damage * 1000) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (attacker == c_quest3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((( damage * 1000) + 1000) &gt; i_quest3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ((damage * 1000) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (attacker == c_quest4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((( damage * 1000) + 1000) &gt; i_quest4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ((damage * 1000) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if(i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = (damage * 1000) + Rnd.get(3000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = (damage * 1000) + Rnd.get(3000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = (damage * 1000) + Rnd.get(3000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 1 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( attacker == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 30 ) * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 30 ) * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 30 ) * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 30 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 2 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( attacker == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 50 ) * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 50 ) * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 50 ) * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 50 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 3 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( attacker == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 100 ) * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 100 ) * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 100 ) * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 100 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 150 ) * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 150 ) * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( attacker == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( ( damage / 150 ) * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( ( damage / 150 ) * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = attacker;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; getRandomSkill(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onAttack(npc, attacker, damage, isPet);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onKill (L2Npc npc, L2PcInstance killer, boolean isPet) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1111&quot;,500, npc, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; npc.broadcastPacket(new SpecialCamera(npc.getObjectId(),2000,130,-1,0,10000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; npc.broadcastPacket(new PlaySound(1, &quot;B03_D&quot;, 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));<br />
&nbsp; &nbsp; &nbsp; &nbsp; // uncoment me once animations available <br />
&nbsp; &nbsp; &nbsp; &nbsp; //GrandBossManager.getInstance().setBossStatus(VALAKAS,DEAD);<br />
&nbsp; &nbsp; &nbsp; &nbsp; long respawnTime = ((192 + Rnd.get(145) ) * 3600000);<br />
&nbsp; &nbsp; &nbsp; &nbsp; this.startQuestTimer(&quot;valakas_unlock&quot;, respawnTime, null, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; // also save the respawn time so that the info is maintained past reboots<br />
&nbsp; &nbsp; &nbsp; &nbsp; StatsSet info = GrandBossManager.getInstance().getStatsSet(VALAKAS);<br />
&nbsp; &nbsp; &nbsp; &nbsp; info.set(&quot;respawn_time&quot;,(System.currentTimeMillis() + respawnTime));<br />
&nbsp; &nbsp; &nbsp; &nbsp; GrandBossManager.getInstance().setStatsSet(VALAKAS,info);<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onKill(npc,killer,isPet);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public void getRandomSkill(L2Npc npc)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul() || npc.isCastingNow())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; L2Skill skill = null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i2 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; L2Character c2 = null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (c_quest2 == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (!Util.checkIfInRange(5000, npc, c_quest2, true) || c_quest2.isDead())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (c_quest3 == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (!Util.checkIfInRange(5000, npc, c_quest3, true) || c_quest3.isDead())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = 0;&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; if (c_quest4 == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (!Util.checkIfInRange(5000, npc, c_quest4, true) || c_quest4.isDead())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (i_quest2 &gt; i_quest3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i2 = i_quest2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c2 = c_quest2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i2 = i_quest3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c2 = c_quest3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if( i_quest4 &gt; i2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i2 = i_quest4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c2 = c_quest4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (i2 == 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c2 = getRandomTarget(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if( i2 &gt; 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 70)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = 500;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = 500;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = 500;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 1 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(1423, npc, c2, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (c2.getZ() &lt; (npc.getZ() + 200))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 20)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 15)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 15 &amp;&amp; i0 == 1 &amp;&amp; i_quest0 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4685,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 &amp;&amp; i1 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4688,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 35)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4683,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4681,1); // left hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4682,1); // right hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 20)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 15)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4684,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 2 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(1423, npc, c2, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (c2.getZ() &lt; (npc.getZ() + 200))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 5 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 &amp;&amp; i0 == 1 &amp;&amp; i_quest0 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4685,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 &amp;&amp; i1 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4688,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 20 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4683,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4681,1); // left hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4682,1); // right hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 5)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4684,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 3 ) / 4 ) )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(1423, npc, c2, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (c2.getZ() &lt; (npc.getZ() + 200))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 5 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 5 &amp;&amp; i0 == 1 &amp;&amp; i_quest0 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4685,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 &amp;&amp; i1 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4688,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 15 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4683,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4681,1); // left hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4682,1); // right hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 5)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4684,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(1423, npc, c2, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i0 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 1;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (c2.getZ() &lt; (npc.getZ() + 200))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 0 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 5 &amp;&amp; i0 == 1 &amp;&amp; i_quest0 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4685,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest0 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10 &amp;&amp; i1 == 1 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4688,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 15 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4683,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(2) == 0) // TODO: replace me with direction, to check if player standing on left or right side of valakas<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4681,1); // left hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4682,1); // right hand<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4690,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( Rnd.get(100) &lt; 10)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4689,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; skill = SkillTable.getInstance().getInfo(4684,1);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (skill != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callSkillAI(npc,c2,skill);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public void callSkillAI(L2Npc npc, L2Character c2, L2Skill skill)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; QuestTimer timer = getQuestTimer(&quot;1003&quot;, npc, null);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (timer != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timer.cancel();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (c2 == null || c2.isDead() || timer == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c2 = getRandomTarget(npc); // just in case if hate AI fail<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (timer == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1003&quot;, 500, npc, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; L2Character target = c2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (target == null || target.isDead())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (timer == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1003&quot;, 500, npc, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(skill.getCastRange(), npc, target, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (timer != null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timer.cancel();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_IDLE);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(target);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.doCast(skill);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (timer == null)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startQuestTimer(&quot;1003&quot;, 500, npc, null, true);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.getAI().setIntention(AI_INTENTION_FOLLOW, target, null);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; npc.setIsCastingNow(false);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; public void broadcastSpawn(L2Npc npc)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; Collection&lt;L2Object&gt; objs = npc.getKnownList().getKnownObjects().values();<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (L2Object obj : objs)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (obj instanceof L2PcInstance)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(10000, npc, obj, true))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((L2Character) obj).sendPacket(new PlaySound(1, &quot;B03_A&quot;, 1, npc.getObjectId(), 212852,-114842,-1632));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((L2Character) obj).sendPacket(new SocialAction(npc.getObjectId(),3));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; public L2Character getRandomTarget(L2Npc npc)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; FastList&lt;L2Character&gt; result = new FastList&lt;L2Character&gt;();<br />
&nbsp; &nbsp; &nbsp; &nbsp; Collection&lt;L2Object&gt; objs = npc.getKnownList().getKnownObjects().values();<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (L2Object obj : objs)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (obj instanceof L2PcInstance || obj instanceof L2Summon || obj instanceof L2DecoyInstance)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Util.checkIfInRange(5000, npc, obj, true) &amp;&amp; !((L2Character) obj).isDead() &amp;&amp; !((L2Character) obj).isGM())<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.add((L2Character) obj);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (!result.isEmpty() &amp;&amp; result.size() != 0)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Object[] characters = result.toArray();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (L2Character) characters[Rnd.get(characters.length)];<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onSpellFinished(L2Npc npc, L2PcInstance player, L2Skill skill)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (npc.getNpcId() == VALAKAS &amp;&amp; !npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRandomSkill(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onSpellFinished(npc, player, skill);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onAggroRangeEnter (L2Npc npc, L2PcInstance player, boolean isPet) <br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; int i1 = 0;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 1 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( player == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 10 * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ((10 * 1000) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 10 * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ((10 * 1000) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 10 * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ((10 * 1000) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 10 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 10 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 10 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 2 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( player == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 6 * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 6 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 6 * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 6 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 6 * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 6 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 6 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 6 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 6 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( npc.getCurrentHp() &gt; ( ( npc.getMaxHp() * 3 ) / 4 ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( player == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 3 * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 3 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 3 * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 3 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 3 * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 3 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 3 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 3 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 3 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 2 * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 2 * 1000 ) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 2 * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 2 * 1000 ) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 2 * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 2 * 1000 ) + Rnd.get(3000));<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 2 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 2 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 2 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 1 * 1000 ) + 1000 ) &gt; i_quest2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 1 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 1 * 1000 ) + 1000 ) &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 1 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( player == c_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( ( ( 1 * 1000 ) + 1000 ) &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 1 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &gt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if( i1 == 2 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest2 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest2 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 2;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if( i1 == 3 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( i_quest3 &gt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 == i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( Rnd.get(100) &lt; 50 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 4;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if( i_quest3 &lt; i_quest4 )<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i1 = 3;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (i1 == 2)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest2 = ( ( 1 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest2 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest3 = ( ( 1 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest3 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else if (i1 == 4)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i_quest4 = ( ( 1 * 1000 ) + Rnd.get(3000) );<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c_quest4 = player;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (GrandBossManager.getInstance().getBossStatus(VALAKAS) == FIGHTING &amp;&amp; !npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRandomSkill(npc);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onAggroRangeEnter(npc, player, isPet);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public String onSkillSee (L2Npc npc, L2PcInstance caster, L2Skill skill, L2Object[] targets, boolean isPet)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (npc.isInvul())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; npc.setTarget(caster);<br />
&nbsp; &nbsp; &nbsp; &nbsp; return super.onSkillSee(npc, caster, skill, targets, isPet);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; public static void main(String[] args)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; // now call the constructor (starts up the ai)<br />
&nbsp; &nbsp; &nbsp; &nbsp; new Valakas(-1,&quot;valakas&quot;,&quot;ai&quot;);<br />
&nbsp; &nbsp; }<br />
}</code><hr />
</div>Desde ya muchas gracias.<font color="Silver"><br />
<br />
<font size="1">---------- Post actualizado a las 17:41 ---------- Ultima actualizacion del post a las 19:57 ----------</font><br />
<br />
</font>Ninguna solucion?.....</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=47">Relacionado con el servidor</category>
			<dc:creator>elitechaos</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4477</guid>
		</item>
		<item>
			<title>Busco Web master</title>
			<link>http://elitezone.es/foro/showthread.php?t=4483&amp;goto=newpost</link>
			<pubDate>Sat, 19 May 2012 10:11:13 GMT</pubDate>
			<description>Para un gran proyecto de L2JServer en la Cronica freya.

Interesados pm

Atentamente Icaro.</description>
			<content:encoded><![CDATA[<div>Para un gran proyecto de L2JServer en la Cronica freya.<br />
<br />
Interesados pm<br />
<br />
Atentamente Icaro.</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=23">Oferta y demanda de empleo - Tablones publicos</category>
			<dc:creator>Icaro</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4483</guid>
		</item>
		<item>
			<title>Infracción para javidj: Anuncios Spam</title>
			<link>http://elitezone.es/foro/showthread.php?t=4480&amp;goto=newpost</link>
			<pubDate>Fri, 18 May 2012 23:44:44 GMT</pubDate>
			<description><![CDATA[Mensaje: Otros... [HF] L2europeshare (rev 98) (http://elitezone.es/foro/showthread.php?t=443&p=38554#post38554)
Usuario: javidj (http://elitezone.es/foro/member.php?u=1018)
Infracción: Anuncios Spam
Puntos: 5

Nota administrativa:
---Cita---
Respetar las normas del foro
---Fin de cita---

Mensaje al usuario:
---Cita---
Por favor evitar llenar el foro con mensajes basura. Anteriormente has recibido infracciones por lo mismo.
---Fin de cita---

Mensaje original: 
---Cita---
asdasddddddddddddasdddd
---Fin de cita---
]]></description>
			<content:encoded><![CDATA[<div>Mensaje: <a href="http://elitezone.es/foro/showthread.php?t=443&amp;p=38554#post38554" target="_blank">Otros... [HF] L2europeshare (rev 98)</a><br />
Usuario: <a href="http://elitezone.es/foro/member.php?u=1018" target="_blank">javidj</a><br />
Infracción: Anuncios Spam<br />
Puntos: 5<br />
<br />
Nota administrativa:<div class="bbcode_container">
	<div class="bbcode_description">Cita:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Respetar las normas del foro
			
		<hr />
	</div>
</div><br />
Mensaje al usuario:<div class="bbcode_container">
	<div class="bbcode_description">Cita:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Por favor evitar llenar el foro con mensajes basura. Anteriormente has recibido infracciones por lo mismo. <br />
			
		<hr />
	</div>
</div><br />
Mensaje original: <div class="bbcode_container">
	<div class="bbcode_description">Cita:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			asdasddddddddddddasdddd
			
		<hr />
	</div>
</div></div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=26">Infracciones de usuario</category>
			<dc:creator>crash_8675</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4480</guid>
		</item>
		<item>
			<title>Deleted Post(s)</title>
			<link>http://elitezone.es/foro/showthread.php?t=4482&amp;goto=newpost</link>
			<pubDate>Fri, 18 May 2012 23:39:32 GMT</pubDate>
			<description>asddddddddddddddddddddddddd</description>
			<content:encoded><![CDATA[<div>asddddddddddddddddddddddddd</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=180">Papelera de reciclaje</category>
			<dc:creator>javidj</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4482</guid>
		</item>
		<item>
			<title>Deleted Post(s)</title>
			<link>http://elitezone.es/foro/showthread.php?t=4481&amp;goto=newpost</link>
			<pubDate>Fri, 18 May 2012 23:23:40 GMT</pubDate>
			<description>asdddddddddddddd</description>
			<content:encoded><![CDATA[<div>asdddddddddddddd</div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=180">Papelera de reciclaje</category>
			<dc:creator>javidj</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4481</guid>
		</item>
		<item>
			<title>Freya Npc Buffer Para Freya y H5</title>
			<link>http://elitezone.es/foro/showthread.php?t=4478&amp;goto=newpost</link>
			<pubDate>Fri, 18 May 2012 21:53:15 GMT</pubDate>
			<description><![CDATA[Bueno aca paso a dejarles un buffer... eh visto mucha gente con problemas con ''scheme'' y este buffer que cree no lleva scheme pero si con buff set te dara todos los buffs necesarios.. les dejos fotos para que lo miren.. agrege los buffs aura combat, y para h5 resist earth.. espero que lo disfruten  ;)  Imagen: http://img215.imageshack.us/img215/7124/shot00023u.png Imagen: http://img4.imageshack.us/img4/5606/shot00024s.png Imagen: http://img191.imageshack.us/img191/2379/shot00025h.png Imagen: http://img94.imageshack.us/img94/7451/shot00026wx.png Imagen: http://img843.imageshack.us/img843/962/shot00027d.png 

 





  *Links ;)*

http://www.4shared.com/rar/Iosebcfl/buffer_high_five.html (http://www.4shared.com/rar/Iosebcfl/buffer_high_five.html?) 
http://www.4shared.com/rar/x08TSy_1/Buffer_freya.html (http://www.4shared.com/rar/x08TSy_1/Buffer_freya.html?)

]]></description>
			<content:encoded><![CDATA[<div><font color="#008080"><span style="font-family: comic sans ms"><font size="2">Bueno aca paso a dejarles un buffer... eh visto mucha gente con problemas con ''scheme'' y este buffer que cree no lleva scheme pero si con buff set te dara todos los buffs necesarios.. les dejos fotos para que lo miren.. agrege los buffs aura combat, y para h5 resist earth.. espero que lo disfruten  ;) <a href="http://www.4shared.com/rar/Iosebcfl/buffer_high_five.html?" target="_blank" rel="nofollow"><br />
<br />
</a> </font></span></font><div style="text-align: center;"><img src="http://img215.imageshack.us/img215/7124/shot00023u.png" border="0" alt="" /><img src="http://img4.imageshack.us/img4/5606/shot00024s.png" border="0" alt="" /><img src="http://img191.imageshack.us/img191/2379/shot00025h.png" border="0" alt="" /><img src="http://img94.imageshack.us/img94/7451/shot00026wx.png" border="0" alt="" /><img src="http://img843.imageshack.us/img843/962/shot00027d.png" border="0" alt="" /><br />
</div> <div style="text-align: center;"><br />
<br />
<br />
<br />
<br />
<br />
  <font color="#0000cd"><b>Links ;)</b></font><br />
<br />
<font color="#008080"><span style="font-family: comic sans ms"><font size="2"><a href="http://www.4shared.com/rar/Iosebcfl/buffer_high_five.html?" target="_blank" rel="nofollow">http://www.4shared.com/rar/Iosebcfl/buffer_high_five.html</a> <a href="http://www.4shared.com/rar/x08TSy_1/Buffer_freya.html?" target="_blank" rel="nofollow"><br />
http://www.4shared.com/rar/x08TSy_1/Buffer_freya.html</a></font></span></font><br />
</div></div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=66">Skills - Npcs - mobs</category>
			<dc:creator>EternalSuffering</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4478</guid>
		</item>
		<item>
			<title>Interlude Lineage 2 Cleanse</title>
			<link>http://elitezone.es/foro/showthread.php?t=4476&amp;goto=newpost</link>
			<pubDate>Fri, 18 May 2012 16:47:19 GMT</pubDate>
			<description><![CDATA[Los invitamos a este nuevo servidor L2Cleanse Que abrio el dia 15-05-2012, Server mid rates x70 sin lag y sin custom items, Mucha diversion. Te esperamos!

http://l2cleanse.com.ar/
http://l2cleanse.com.ar/foro

Alguna informacion basica acerca del Servidor.

*Informacion General :*


* [li]Full Interlude Server.[/li]
[li]Rates: Exp: 70x - Adena: 150x - Drop: 10x - Spoil: 15x - Quest: 6x.[/li]
[li]Todos los skills funcionando.[/li]
[li]Clan system funcionando.[/li]
[li]Debuff Bar funcionando.[/li]
[li]Skills Auto-Aprendibles[/li]
[li]Staff Activo.[/li]
[li]Sieges funcionando.[/li]
[li]Grand Boss - Raid Boss funcionando.[/li]
[li]GeoEngine Activada.[/li]
[li]*No auto pick up*[/li]




*Quests :*


* [li]Class Changer : Sin necesidad de quest.[/li]
[li]Sub Class : Gratis, Sin necesidad de quest.[/li]
[li]Noblesse : Quest Full, Items se venden en el shop.[/li]




*Sistema de Enchant :*


* [li]Safe : +3 - Fullbody +4[/li]
[li]Enchante Max : +16[/li]
[li]Enchante Rate: 50% Normal[/li]
[li]Enchante Rate: 75% Blessed[/li]




*Olympiadas :*


* [li]Olympiadas funcionando. Retail Like![/li]
[li]Empieza : 18:00 -4:30 GMT[/li]
[li]Periodo : 2 Semanas.[/li]
[li]9 Marchas - 1 Ganada, Para poder ser heroe.[/li]




*Sistema de Buffs - NPCs :*


* [li]24 Slots + 4 Divine Inspiration (Auto-Aprendible)[/li]
[li]2 Horas : Normal Buff[/li]
[li]2 Horas : Dance y Song[/li]
[li]2 Horas : Prophecies, 2 Horas COV[/li]
[li]2 Min : Cat Buffs.[/li]
[li]NPCs Buffs sin Buff de 3era Clase. Solo Escenciales.[/li]




*Informacion Extra :*


* [li]Al Crear Un Char Empieza Level 20 En Giran Town Con 100k de Adena y 5 Items Llamados "Cupo Cadivi" Con esos Items Podran Comprar Ropa Grado D y Weapon Grado D.[/li]
[li]Donaciones : No hay donaciones por items exagerados, Solo que lo mostrara el npc de donaciones que se encuentra en Giran Town.[/li]
[li]Ciudad Main : Giran Castle Town.[/li]

[li]Misc Shop : Vende todo lo necesario, Dyes, Scroll, Consumables, Quest Items, Etc.[/li]
[li]Armor Shop : Grado C y B se vende por adena.[/li]
[li]Grado A: Se vende en el Shop por Adena y Medallas.[/li]
[li]Grado S: Se vende en el shop por Adena y Medallas.[/li]

[li]Weapon Shop : Grado C y B se vende por adena.[/li]
[li]Grado A: Se vende en el Shop por Adena y Medallas. El SA Se habilita en el weapon shop y solo pide Adenas[/li]
[li]Grado S: Se vende en el shop por Adena, Medallas y un items Special. "Special Item - Weapon S". El SA se habilita en el weapon shop y pide Crystal Lv 13 y Adena + El arma Sin SA.[/li]

]]></description>
			<content:encoded><![CDATA[<div>Los invitamos a este nuevo servidor L2Cleanse Que abrio el dia 15-05-2012, Server mid rates x70 sin lag y sin custom items, Mucha diversion. Te esperamos!<br />
<br />
<a href="http://l2cleanse.com.ar/" target="_blank" rel="nofollow">http://l2cleanse.com.ar/</a><br />
<a href="http://l2cleanse.com.ar/foro" target="_blank" rel="nofollow">http://l2cleanse.com.ar/foro</a><br />
<br />
Alguna informacion basica acerca del Servidor.<br />
<br />
<b>Informacion General :</b><br />
<br />
<ul><li style="">[li]Full Interlude Server.[/li]<br />
[li]Rates: Exp: 70x - Adena: 150x - Drop: 10x - Spoil: 15x - Quest: 6x.[/li]<br />
[li]Todos los skills funcionando.[/li]<br />
[li]Clan system funcionando.[/li]<br />
[li]Debuff Bar funcionando.[/li]<br />
[li]Skills Auto-Aprendibles[/li]<br />
[li]Staff Activo.[/li]<br />
[li]Sieges funcionando.[/li]<br />
[li]Grand Boss - Raid Boss funcionando.[/li]<br />
[li]GeoEngine Activada.[/li]<br />
[li]<b>No auto pick up</b>[/li]</li></ul><br />
<br />
<br />
<b>Quests :</b><br />
<br />
<ul><li style="">[li]Class Changer : Sin necesidad de quest.[/li]<br />
[li]Sub Class : Gratis, Sin necesidad de quest.[/li]<br />
[li]Noblesse : Quest Full, Items se venden en el shop.[/li]</li></ul><br />
<br />
<br />
<b>Sistema de Enchant :</b><br />
<br />
<ul><li style="">[li]Safe : +3 - Fullbody +4[/li]<br />
[li]Enchante Max : +16[/li]<br />
[li]Enchante Rate: 50% Normal[/li]<br />
[li]Enchante Rate: 75% Blessed[/li]</li></ul><br />
<br />
<br />
<b>Olympiadas :</b><br />
<br />
<ul><li style="">[li]Olympiadas funcionando. Retail Like![/li]<br />
[li]Empieza : 18:00 -4:30 GMT[/li]<br />
[li]Periodo : 2 Semanas.[/li]<br />
[li]9 Marchas - 1 Ganada, Para poder ser heroe.[/li]</li></ul><br />
<br />
<br />
<b>Sistema de Buffs - NPCs :</b><br />
<br />
<ul><li style="">[li]24 Slots + 4 Divine Inspiration (Auto-Aprendible)[/li]<br />
[li]2 Horas : Normal Buff[/li]<br />
[li]2 Horas : Dance y Song[/li]<br />
[li]2 Horas : Prophecies, 2 Horas COV[/li]<br />
[li]2 Min : Cat Buffs.[/li]<br />
[li]NPCs Buffs sin Buff de 3era Clase. Solo Escenciales.[/li]</li></ul><br />
<br />
<br />
<b>Informacion Extra :</b><br />
<br />
<ul><li style="">[li]Al Crear Un Char Empieza Level 20 En Giran Town Con 100k de Adena y 5 Items Llamados &quot;Cupo Cadivi&quot; Con esos Items Podran Comprar Ropa Grado D y Weapon Grado D.[/li]<br />
[li]Donaciones : No hay donaciones por items exagerados, Solo que lo mostrara el npc de donaciones que se encuentra en Giran Town.[/li]<br />
[li]Ciudad Main : Giran Castle Town.[/li]<br />
<br />
[li]Misc Shop : Vende todo lo necesario, Dyes, Scroll, Consumables, Quest Items, Etc.[/li]<br />
[li]Armor Shop : Grado C y B se vende por adena.[/li]<br />
[li]Grado A: Se vende en el Shop por Adena y Medallas.[/li]<br />
[li]Grado S: Se vende en el shop por Adena y Medallas.[/li]<br />
<br />
[li]Weapon Shop : Grado C y B se vende por adena.[/li]<br />
[li]Grado A: Se vende en el Shop por Adena y Medallas. El SA Se habilita en el weapon shop y solo pide Adenas[/li]<br />
[li]Grado S: Se vende en el shop por Adena, Medallas y un items Special. &quot;Special Item - Weapon S&quot;. El SA se habilita en el weapon shop y pide Crystal Lv 13 y Adena + El arma Sin SA.[/li]</li></ul></div>

]]></content:encoded>
			<category domain="http://elitezone.es/foro/forumdisplay.php?f=10">Presentacion de servidores de Lineage II</category>
			<dc:creator>josex56</dc:creator>
			<guid isPermaLink="true">http://elitezone.es/foro/showthread.php?t=4476</guid>
		</item>
	</channel>
</rss>

