Jeriko90

FactionFrozen2020

Jan 20th, 2020
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 453.60 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P L2jFrozen_GameServer
  3. Index: head-src/com/l2jfrozen/gameserver/event/FormalLMS.java
  4. ===================================================================
  5. --- head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (nonexistent)
  6. +++ head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (working copy)
  7. @@ -0,0 +1,54 @@
  8. +/*
  9. + * This program is free software; you can redistribute it and/or modify
  10. + * it under the terms of the GNU General Public License as published by
  11. + * the Free Software Foundation; either version 2, or (at your option)
  12. + * any later version.
  13. + *
  14. + * This program is distributed in the hope that it will be useful,
  15. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. + * GNU General Public License for more details.
  18. + *
  19. + * You should have received a copy of the GNU General Public License
  20. + * along with this program; if not, write to the Free Software
  21. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  22. + * 02111-1307, USA.
  23. + *
  24. + * http://www.gnu.org/copyleft/gpl.html
  25. + */
  26. +package com.l2jfrozen.gameserver.event;
  27. +
  28. +
  29. +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  30. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  31. +
  32. +/**
  33. + *
  34. + *
  35. + * @author Rizel
  36. + */
  37. +public class FormalLMS
  38. +{
  39. + private L2ItemInstance formalWear;
  40. +
  41. + @SuppressWarnings("synthetic-access")
  42. + private static class SingletonHolder
  43. + {
  44. + protected static final FormalLMS _instance = new FormalLMS();
  45. + }
  46. +
  47. + public static FormalLMS getInstance()
  48. + {
  49. + return SingletonHolder._instance;
  50. + }
  51. +
  52. + public FormalLMS()
  53. + {
  54. + formalWear = ItemTable.getInstance().createItem("", 6408, 1, null, null);
  55. + }
  56. +
  57. + public int getOID()
  58. + {
  59. + return formalWear.getObjectId();
  60. + }
  61. +}
  62. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java
  63. ===================================================================
  64. --- head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (revision 1132)
  65. +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/Logout.java (working copy)
  66. @@ -21,6 +21,7 @@
  67. import com.l2jfrozen.Config;
  68. import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
  69. import com.l2jfrozen.gameserver.datatables.SkillTable;
  70. +import com.l2jfrozen.gameserver.event.EventManager;
  71. import com.l2jfrozen.gameserver.model.L2Character;
  72. import com.l2jfrozen.gameserver.model.L2Party;
  73. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  74. @@ -96,6 +97,13 @@
  75. return;
  76. }
  77.  
  78. + if (EventManager.getInstance().isRegistered(player) && !EventManager.getInstance().getBoolean("restartAllowed"))
  79. + {
  80. + player.sendMessage("You cannot logout while you are a participant in an event.");
  81. + sendPacket(new ActionFailed());
  82. + return;
  83. + }
  84. +
  85. if (player.isInOlympiadMode() || Olympiad.getInstance().isRegistered(player))
  86. {
  87. player.sendMessage("You can't Logout in Olympiad mode.");
  88. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java
  89. ===================================================================
  90. --- head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (revision 1132)
  91. +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/UseItem.java (working copy)
  92. @@ -25,6 +25,7 @@
  93. import org.apache.log4j.Logger;
  94.  
  95. import com.l2jfrozen.Config;
  96. +import com.l2jfrozen.gameserver.event.EventManager;
  97. import com.l2jfrozen.gameserver.ai.CtrlIntention;
  98. import com.l2jfrozen.gameserver.datatables.SkillTable;
  99. import com.l2jfrozen.gameserver.handler.IItemHandler;
  100. @@ -175,6 +176,9 @@
  101. activeChar.sendMessage("Blessed Scroll of Escape: Castle cannot be used due to unsuitable terms.");
  102. return;
  103. }
  104. + if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(activeChar))
  105. + if (!EventManager.getInstance().getCurrentEvent().onUseItem(activeChar,item))
  106. + return;
  107.  
  108. if (activeChar.isFishing() && (itemId < 6535 || itemId > 6540))
  109. {
  110. Index: head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java
  111. ===================================================================
  112. --- head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (nonexistent)
  113. +++ head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (working copy)
  114. @@ -0,0 +1,280 @@
  115. +/*
  116. + * This program is free software: you can redistribute it and/or modify it under
  117. + * the terms of the GNU General Public License as published by the Free Software
  118. + * Foundation, either version 3 of the License, or (at your option) any later
  119. + * version.
  120. + *
  121. + * This program is distributed in the hope that it will be useful, but WITHOUT
  122. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  123. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  124. + * details.
  125. + *
  126. + * You should have received a copy of the GNU General Public License along with
  127. + * this program. If not, see <http://www.gnu.org/licenses/>.
  128. + */
  129. +package com.l2jfrozen.gameserver.event;
  130. +
  131. +import javolution.text.TextBuilder;
  132. +import javolution.util.FastMap;
  133. +
  134. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  135. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  136. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  137. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  138. +
  139. +/**
  140. + * @author Rizel
  141. + *
  142. + */
  143. +public class DoubleDomination extends Event
  144. +{
  145. + private class Core implements Runnable
  146. + {
  147. + public void run()
  148. + {
  149. + try
  150. + {
  151. + switch (eventState)
  152. + {
  153. + case START:
  154. + divideIntoTeams(2);
  155. + preparePlayers();
  156. + teleportToTeamPos();
  157. + createPartyOfTeam(1);
  158. + createPartyOfTeam(2);
  159. + forceSitAll();
  160. + setStatus(EventState.FIGHT);
  161. + debug("The event started with " + players.size() + " players");
  162. + schedule(20000);
  163. + break;
  164. +
  165. + case FIGHT:
  166. + forceStandAll();
  167. + setStatus(EventState.END);
  168. + debug("The fight started");
  169. + clock.startClock(getInt("matchTime"));
  170. + break;
  171. +
  172. + case END:
  173. + clock.setTime(0);
  174. + if (winnerTeam == 0)
  175. + winnerTeam = getWinnerTeam();
  176. +
  177. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  178. + unSpawnZones();
  179. + setStatus(EventState.INACTIVE);
  180. + debug("The event ended. Winner: " + winnerTeam);
  181. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Domination points!");
  182. + break;
  183. + }
  184. + }
  185. + catch (Throwable e)
  186. + {
  187. + e.printStackTrace();
  188. + EventManager.getInstance().end("Error! Event ended.");
  189. + }
  190. + }
  191. + }
  192. +
  193. + private enum EventState
  194. + {
  195. + START, FIGHT, END, INACTIVE
  196. + }
  197. +
  198. + private EventState eventState;
  199. +
  200. + private Core task;
  201. +
  202. + private FastMap<L2Spawn, Integer> zones;
  203. +
  204. + private int time;
  205. +
  206. + private int holder;
  207. +
  208. + public DoubleDomination()
  209. + {
  210. + super();
  211. + eventId = 3;
  212. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  213. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  214. + task = new Core();
  215. + zones = new FastMap<L2Spawn, Integer>();
  216. + winnerTeam = 0;
  217. + time = 0;
  218. + holder = 0;
  219. + }
  220. +
  221. + @Override
  222. + protected void clockTick()
  223. + {
  224. + int team1 = 0;
  225. + int team2 = 0;
  226. +
  227. + for (L2Spawn zone : zones.keySet())
  228. + {
  229. + for (L2PcInstance player : getPlayerList())
  230. + switch (getTeam(player))
  231. + {
  232. + case 1:
  233. + if (Math.sqrt(player.getPlanDistanceSq(zone.getLastSpawn())) <= getInt("zoneRadius"))
  234. + team1++;
  235. + break;
  236. +
  237. + case 2:
  238. + if (Math.sqrt(player.getPlanDistanceSq(zone.getLastSpawn())) <= getInt("zoneRadius"))
  239. + team2++;
  240. + break;
  241. + }
  242. +
  243. + if (team1 > team2)
  244. + zones.getEntry(zone).setValue(1);
  245. +
  246. + if (team2 > team1)
  247. + zones.getEntry(zone).setValue(2);
  248. +
  249. + if (team1 == team2)
  250. + zones.getEntry(zone).setValue(0);
  251. +
  252. + team1 = 0;
  253. + team2 = 0;
  254. + }
  255. +
  256. + if (zones.containsValue(1) && (!zones.containsValue(0) && !zones.containsValue(2)))
  257. + {
  258. + if (holder != 1)
  259. + {
  260. + announce(getPlayerList(), "The " + teams.get(1).getName() + " team captured both zones. Score in 10sec!");
  261. + holder = 1;
  262. + time = 0;
  263. + }
  264. +
  265. + if (time == getInt("timeToScore") - 1)
  266. + {
  267. + for (L2PcInstance player : getPlayersOfTeam(1))
  268. + increasePlayersScore(player);
  269. + teams.get(1).increaseScore();
  270. + teleportToTeamPos();
  271. + time = 0;
  272. + announce(getPlayerList(), "The " + teams.get(1).getName() + " team scored!");
  273. + holder = 0;
  274. + }
  275. + else
  276. + time++;
  277. +
  278. + }
  279. + else if (zones.containsValue(2) && (!zones.containsValue(0) && !zones.containsValue(1)))
  280. + {
  281. + if (holder != 2)
  282. + {
  283. + announce(getPlayerList(), "The " + teams.get(2).getName() + " team captured both zones. Score in 10sec!");
  284. + holder = 1;
  285. + time = 0;
  286. + }
  287. +
  288. + if (time == getInt("timeToScore") - 1)
  289. + {
  290. + for (L2PcInstance player : getPlayersOfTeam(2))
  291. + increasePlayersScore(player);
  292. + teams.get(2).increaseScore();
  293. + teleportToTeamPos();
  294. + time = 0;
  295. + announce(getPlayerList(), "The " + teams.get(2).getName() + " team scored!");
  296. + holder = 0;
  297. + }
  298. + else
  299. + time++;
  300. + }
  301. + else
  302. + {
  303. + if (holder != 0)
  304. + announce(getPlayerList(), "Canceled!");
  305. +
  306. + holder = 0;
  307. + time = 0;
  308. + }
  309. +
  310. + }
  311. +
  312. + /**
  313. + * @see net.sf.l2j.gameserver.event.Event#endEvent()
  314. + */
  315. + @Override
  316. + protected void endEvent()
  317. + {
  318. + setStatus(EventState.END);
  319. + clock.setTime(0);
  320. +
  321. + }
  322. +
  323. + @Override
  324. + protected String getScorebar()
  325. + {
  326. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  327. + }
  328. +
  329. + @Override
  330. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  331. + {
  332. + super.onDie(victim, killer);
  333. + addToResurrector(victim);
  334. + }
  335. +
  336. + @Override
  337. + protected void schedule(int time)
  338. + {
  339. + tpm.scheduleGeneral(task, time);
  340. + }
  341. +
  342. + private void setStatus(EventState s)
  343. + {
  344. + eventState = s;
  345. + }
  346. +
  347. + @Override
  348. + protected void showHtml(L2PcInstance player, int obj)
  349. + {
  350. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  351. + TextBuilder sb = new TextBuilder();
  352. +
  353. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  354. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  355. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  356. + sb.append("<br><table width=270>");
  357. + int i = 0;
  358. + for (EventTeam team : teams.values())
  359. + {
  360. + i++;
  361. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  362. + for (L2PcInstance p : getPlayersOfTeam(i))
  363. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  364. + }
  365. +
  366. + sb.append("</table></body></html>");
  367. + html.setHtml(sb.toString());
  368. + player.sendPacket(html);
  369. +
  370. + }
  371. +
  372. + @Override
  373. + protected void start()
  374. + {
  375. + int[] z1pos = getPosition("Zone", 1);
  376. + int[] z2pos = getPosition("Zone", 2);
  377. + zones.put(spawnNPC(z1pos[0], z1pos[1], z1pos[2], getInt("zoneNpcId")), 0);
  378. + zones.put(spawnNPC(z2pos[0], z2pos[1], z2pos[2], getInt("zoneNpcId")), 0);
  379. + setStatus(EventState.START);
  380. + schedule(1);
  381. + }
  382. +
  383. + private void unSpawnZones()
  384. + {
  385. + for (L2Spawn s : zones.keySet())
  386. + {
  387. + s.getLastSpawn().deleteMe();
  388. + s.stopRespawn();
  389. + SpawnTable.getInstance().deleteSpawn(s, true);
  390. + zones.remove(s);
  391. + }
  392. + }
  393. +
  394. +}
  395. \ No newline at end of file
  396. Index: head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java
  397. ===================================================================
  398. --- head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java (nonexistent)
  399. +++ head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Capture.java (working copy)
  400. @@ -0,0 +1,35 @@
  401. +package com.l2jfrozen.gameserver.handler.skillhandlers;
  402. +
  403. +import com.l2jfrozen.gameserver.handler.ISkillHandler;
  404. +import com.l2jfrozen.gameserver.model.L2Object;
  405. +import com.l2jfrozen.gameserver.model.L2Skill;
  406. +import com.l2jfrozen.gameserver.model.L2Character;
  407. +import com.l2jfrozen.gameserver.model.L2Skill.SkillType;
  408. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  409. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  410. +import com.l2jfrozen.gameserver.event.EventManager;
  411. +
  412. +public class Capture implements ISkillHandler
  413. +{
  414. +private static final SkillType[] SKILL_IDS =
  415. +{ SkillType.CAPTURE };
  416. +
  417. +public void useSkill(L2Character activeChar, L2Skill skill, L2Object[] targets)
  418. +{
  419. +if (!(activeChar instanceof L2PcInstance))
  420. +return;
  421. +
  422. +if(!(targets[0] instanceof L2NpcInstance))
  423. +return;
  424. +
  425. +L2PcInstance player = (L2PcInstance) activeChar;
  426. +L2NpcInstance target = (L2NpcInstance) targets[0];
  427. +
  428. +EventManager.getInstance().getCurrentEvent().useCapture(player, target);
  429. +}
  430. +
  431. +public SkillType[] getSkillIds()
  432. +{
  433. +return SKILL_IDS;
  434. +}
  435. +}
  436. \ No newline at end of file
  437. Index: head-src/com/l2jfrozen/gameserver/event/CTF.java
  438. ===================================================================
  439. --- head-src/com/l2jfrozen/gameserver/event/CTF.java (nonexistent)
  440. +++ head-src/com/l2jfrozen/gameserver/event/CTF.java (working copy)
  441. @@ -0,0 +1,401 @@
  442. +package com.l2jfrozen.gameserver.event;
  443. +
  444. +import javolution.text.TextBuilder;
  445. +
  446. +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  447. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  448. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  449. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  450. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  451. +import com.l2jfrozen.gameserver.model.Inventory;
  452. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  453. +import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
  454. +import com.l2jfrozen.gameserver.network.serverpackets.ItemList;
  455. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  456. +import com.l2jfrozen.gameserver.network.serverpackets.SocialAction;
  457. +import com.l2jfrozen.gameserver.templates.L2EtcItemType;
  458. +
  459. +public class CTF extends Event
  460. +{
  461. + private class Core implements Runnable
  462. + {
  463. +
  464. + public void run()
  465. + {
  466. + try
  467. + {
  468. + switch (eventState)
  469. + {
  470. + case START:
  471. + divideIntoTeams(2);
  472. + preparePlayers();
  473. + teleportToTeamPos();
  474. + createPartyOfTeam(1);
  475. + createPartyOfTeam(2);
  476. + forceSitAll();
  477. + spawnFlagsAndHolders();
  478. + setStatus(EventState.FIGHT);
  479. + debug("The event started with " + players.size() + " players");
  480. + schedule(20000);
  481. + break;
  482. +
  483. + case FIGHT:
  484. + forceStandAll();
  485. + setStatus(EventState.END);
  486. + debug("The fight started");
  487. + clock.startClock(getInt("matchTime"));
  488. + break;
  489. +
  490. + case END:
  491. + clock.setTime(0);
  492. + if (winnerTeam == 0)
  493. + winnerTeam = getWinnerTeam();
  494. +
  495. + unspawnFlagsAndHolders();
  496. + debug("The flags unspawned");
  497. + if (playerWithRedFlag != null)
  498. + unequipFlag(playerWithRedFlag);
  499. + if (playerWithBlueFlag != null)
  500. + unequipFlag(playerWithBlueFlag);
  501. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  502. + setStatus(EventState.INACTIVE);
  503. + debug("The event ended. Winner: " + winnerTeam);
  504. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Flags taken!");
  505. + break;
  506. + }
  507. + }
  508. + catch (Throwable e)
  509. + {
  510. + e.printStackTrace();
  511. + EventManager.getInstance().end("Error! Event ended.");
  512. + }
  513. + }
  514. + }
  515. +
  516. + private enum EventState
  517. + {
  518. + START, FIGHT, END, TELEPORT, INACTIVE
  519. + }
  520. +
  521. + private EventState eventState;
  522. +
  523. + private Core task;
  524. +
  525. + private L2Spawn redFlagNpc;
  526. + private L2Spawn blueFlagNpc;
  527. + private L2Spawn redHolderNpc;
  528. + private L2Spawn blueHolderNpc;
  529. + private int redFlagStatus;
  530. + private int blueFlagStatus;
  531. + private L2PcInstance playerWithRedFlag;
  532. + private L2PcInstance playerWithBlueFlag;
  533. +
  534. + public CTF()
  535. + {
  536. + super();
  537. + eventId = 10;
  538. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  539. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  540. + task = new Core();
  541. + winnerTeam = 0;
  542. + playerWithRedFlag = null;
  543. + playerWithBlueFlag = null;
  544. + blueFlagStatus = 0;
  545. + redFlagStatus = 0;
  546. +
  547. + }
  548. +
  549. + @Override
  550. + protected void endEvent()
  551. + {
  552. + winnerTeam = players.head().getNext().getValue()[0];
  553. +
  554. + setStatus(EventState.END);
  555. + clock.setTime(0);
  556. +
  557. + }
  558. +
  559. + private void equipFlag(L2PcInstance player, int flag)
  560. + {
  561. + L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  562. + if (wpn != null)
  563. + player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_RHAND);
  564. +
  565. + wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
  566. + if (wpn != null)
  567. + player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_LHAND);
  568. +
  569. + player.getInventory().equipItem(ItemTable.getInstance().createItem("", 6718, 1, player, null));
  570. + player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
  571. + switch (flag)
  572. + {
  573. + case 1:
  574. + playerWithBlueFlag = player;
  575. + announce(getPlayerList(), player.getName() + " took the Blue flag!");
  576. + unspawnNPC(blueFlagNpc);
  577. + break;
  578. + case 2:
  579. + playerWithRedFlag = player;
  580. + announce(getPlayerList(), player.getName() + " took the Red flag!");
  581. + unspawnNPC(redFlagNpc);
  582. + break;
  583. + default:
  584. + break;
  585. + }
  586. + player.broadcastUserInfo();
  587. + CreatureSay cs = new CreatureSay(player.getObjectId(), 15, ":", "You got it! Run back! ::"); // 8D
  588. + player.sendPacket(cs);
  589. + }
  590. +
  591. + @Override
  592. + protected String getScorebar()
  593. + {
  594. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  595. + }
  596. +
  597. + @Override
  598. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  599. + {
  600. + super.onDie(victim, killer);
  601. + if (playerWithRedFlag == victim)
  602. + {
  603. + announce(getPlayerList(), victim.getName() + " dropped the Red flag!");
  604. + redFlagStatus = 2;
  605. + unequipFlag(victim);
  606. + redFlagNpc = spawnNPC(victim.getX(), victim.getY(), victim.getZ(), getInt("redFlagId"));
  607. + }
  608. + if (playerWithBlueFlag == victim)
  609. + {
  610. + announce(getPlayerList(), victim.getName() + " dropped the Blue flag!");
  611. + blueFlagStatus = 2;
  612. + unequipFlag(victim);
  613. + blueFlagNpc = spawnNPC(victim.getX(), victim.getY(), victim.getZ(), getInt("blueFlagId"));
  614. + }
  615. +
  616. + addToResurrector(victim);
  617. + }
  618. +
  619. + @Override
  620. + public void onLogout(L2PcInstance player)
  621. + {
  622. + super.onLogout(player);
  623. +
  624. + if (playerWithRedFlag == player)
  625. + {
  626. + announce(getPlayerList(), player.getName() + " dropped the Red flag!");
  627. + redFlagStatus = 2;
  628. + unequipFlag(player);
  629. + redFlagNpc = spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("redFlagId"));
  630. + }
  631. + if (playerWithBlueFlag == player)
  632. + {
  633. + announce(getPlayerList(), player.getName() + " dropped the Blue flag!");
  634. + blueFlagStatus = 2;
  635. + unequipFlag(player);
  636. + blueFlagNpc = spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("blueFlagId"));
  637. + }
  638. +
  639. + }
  640. +
  641. + @Override
  642. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  643. + {
  644. + if (!(npc.getNpcId() == getInt("blueFlagId") || npc.getNpcId() == getInt("blueFlagHolderId") || npc.getNpcId() == getInt("redFlagId") || npc.getNpcId() == getInt("redFlagHolderId")))
  645. + return false;
  646. +
  647. + //Blue holder
  648. + if (npc.getNpcId() == getInt("blueFlagHolderId"))
  649. + if (player == playerWithRedFlag && blueFlagStatus == 0)
  650. + {
  651. + announce(getPlayerList(), "The Blue team scored!");
  652. + teams.get(getTeam(player)).increaseScore();
  653. + increasePlayersScore(player);
  654. + player.addItem("Event", 6392, 4, player, true);
  655. + returnFlag(2);
  656. + }
  657. +
  658. + //Red holder
  659. + if (npc.getNpcId() == getInt("redFlagHolderId"))
  660. + if (player == playerWithBlueFlag && redFlagStatus == 0)
  661. + {
  662. + announce(getPlayerList(), "The Red team scored!");
  663. + teams.get(getTeam(player)).increaseScore();
  664. + increasePlayersScore(player);
  665. + player.addItem("Event", 6392, 4, player, true);
  666. + returnFlag(1);
  667. + }
  668. +
  669. + //Blue flag
  670. + if (npc.getNpcId() == getInt("blueFlagId"))
  671. + {
  672. + if (blueFlagStatus == 2)
  673. + {
  674. + //blue player
  675. + if (getTeam(player) == 1)
  676. + returnFlag(1);
  677. +
  678. + //red player
  679. + if (getTeam(player) == 2)
  680. + equipFlag(player, 1);
  681. + }
  682. + if (blueFlagStatus == 0)
  683. + if (getTeam(player) == 2)
  684. + {
  685. + equipFlag(player, 1);
  686. + unspawnNPC(blueFlagNpc);
  687. + blueFlagStatus = 1;
  688. + }
  689. +
  690. + }
  691. +
  692. + //Red flag
  693. + if (npc.getNpcId() == getInt("redFlagId"))
  694. + {
  695. + if (redFlagStatus == 2)
  696. + {
  697. + //red player
  698. + if (getTeam(player) == 2)
  699. + returnFlag(2);
  700. +
  701. + //blue player
  702. + if (getTeam(player) == 1)
  703. + equipFlag(player, 2);
  704. + }
  705. + if (redFlagStatus == 0)
  706. + if (getTeam(player) == 1)
  707. + {
  708. + equipFlag(player, 2);
  709. + unspawnNPC(redFlagNpc);
  710. + redFlagStatus = 1;
  711. + }
  712. + }
  713. + return true;
  714. + }
  715. +
  716. + @Override
  717. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  718. + {
  719. + if (playerWithRedFlag == player || playerWithBlueFlag == player)
  720. + return false;
  721. +
  722. + if (item.getItemType() == L2EtcItemType.POTION)
  723. + return false;
  724. +
  725. + return true;
  726. + }
  727. +
  728. + private void returnFlag(int flag)
  729. + {
  730. + int[] pos;
  731. + switch (flag)
  732. + {
  733. + case 1:
  734. + if (playerWithBlueFlag != null)
  735. + unequipFlag(playerWithBlueFlag);
  736. + if (blueFlagStatus == 2)
  737. + unspawnNPC(blueFlagNpc);
  738. +
  739. + pos = getPosition("BlueFlag", 1);
  740. + blueFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("blueFlagId"));
  741. + blueFlagStatus = 0;
  742. + announce(getPlayerList(), "The Blue flag returned!");
  743. + break;
  744. +
  745. + case 2:
  746. + if (playerWithRedFlag != null)
  747. + unequipFlag(playerWithRedFlag);
  748. + if (redFlagStatus == 2)
  749. + unspawnNPC(redFlagNpc);
  750. +
  751. + pos = getPosition("RedFlag", 1);
  752. + redFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("redFlagId"));
  753. + redFlagStatus = 0;
  754. + announce(getPlayerList(), "The Red flag returned!");
  755. + break;
  756. + }
  757. + }
  758. +
  759. + @Override
  760. + protected void schedule(int time)
  761. + {
  762. + tpm.scheduleGeneral(task, time);
  763. + }
  764. +
  765. + private void setStatus(EventState s)
  766. + {
  767. + eventState = s;
  768. + }
  769. +
  770. + @Override
  771. + protected void showHtml(L2PcInstance player, int obj)
  772. + {
  773. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  774. + TextBuilder sb = new TextBuilder();
  775. +
  776. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  777. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  778. + sb.append("<center><table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  779. + sb.append("<br><table width=270>");
  780. + int i = 0;
  781. + for (EventTeam team : teams.values())
  782. + {
  783. + i++;
  784. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  785. + for (L2PcInstance p : getPlayersOfTeam(i))
  786. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  787. + }
  788. +
  789. + sb.append("</table></body></html>");
  790. + html.setHtml(sb.toString());
  791. + player.sendPacket(html);
  792. +
  793. + }
  794. +
  795. + private void spawnFlagsAndHolders()
  796. + {
  797. + int[] pos = getPosition("BlueFlag", 1);
  798. + blueFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("blueFlagId"));
  799. + blueHolderNpc = spawnNPC(pos[0]+50, pos[1], pos[2], getInt("blueFlagHolderId"));
  800. +
  801. + pos = getPosition("RedFlag", 1);
  802. + redFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("redFlagId"));
  803. + redHolderNpc = spawnNPC(pos[0]+50, pos[1], pos[2], getInt("redFlagHolderId"));
  804. + debug("The flags spawned.");
  805. + }
  806. +
  807. + @Override
  808. + protected void start()
  809. + {
  810. + setStatus(EventState.START);
  811. + schedule(1);
  812. + }
  813. +
  814. + private void unequipFlag(L2PcInstance player)
  815. + {
  816. + L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  817. + if (wpn != null)
  818. + {
  819. + L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart());
  820. + player.getInventory().destroyItemByItemId("", 6718, 1, player, null);
  821. + InventoryUpdate iu = new InventoryUpdate();
  822. + for (L2ItemInstance element : unequiped)
  823. + iu.addModifiedItem(element);
  824. + player.sendPacket(iu);
  825. + player.sendPacket(new ItemList(player, true));
  826. + player.broadcastUserInfo();
  827. + }
  828. +
  829. + if (player == playerWithRedFlag)
  830. + playerWithRedFlag = null;
  831. + if (player == playerWithBlueFlag)
  832. + playerWithBlueFlag = null;
  833. + }
  834. +
  835. + private void unspawnFlagsAndHolders()
  836. + {
  837. + unspawnNPC(blueFlagNpc);
  838. + unspawnNPC(blueHolderNpc);
  839. + unspawnNPC(redFlagNpc);
  840. + unspawnNPC(redHolderNpc);
  841. + }
  842. +}
  843. \ No newline at end of file
  844. Index: head-src/com/l2jfrozen/gameserver/event/EventBuffer.java
  845. ===================================================================
  846. --- head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (nonexistent)
  847. +++ head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (working copy)
  848. @@ -0,0 +1,315 @@
  849. +/*
  850. + * This program is free software: you can redistribute it and/or modify it under
  851. + * the terms of the GNU General Public License as published by the Free Software
  852. + * Foundation, either version 3 of the License, or (at your option) any later
  853. + * version.
  854. + *
  855. + * This program is distributed in the hope that it will be useful, but WITHOUT
  856. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  857. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  858. + * details.
  859. + *
  860. + * You should have received a copy of the GNU General Public License along with
  861. + * this program. If not, see <http://www.gnu.org/licenses/>.
  862. + */
  863. +package com.l2jfrozen.gameserver.event;
  864. +
  865. +import java.sql.Connection;
  866. +import java.sql.PreparedStatement;
  867. +import java.sql.ResultSet;
  868. +import java.util.Map;
  869. +import java.util.StringTokenizer;
  870. +
  871. +import javolution.text.TextBuilder;
  872. +import javolution.util.FastList;
  873. +import javolution.util.FastMap;
  874. +
  875. +import com.l2jfrozen.util.database.L2DatabaseFactory;
  876. +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  877. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  878. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  879. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  880. +
  881. +/**
  882. + * @author Rizel
  883. + *
  884. + */
  885. +public class EventBuffer
  886. +{
  887. + private static class SingletonHolder
  888. + {
  889. + protected static final EventBuffer _instance = new EventBuffer();
  890. + }
  891. + private class UpdateTask implements Runnable
  892. + {
  893. + public void run()
  894. + {
  895. + updateSQL();
  896. + }
  897. + }
  898. + public static EventBuffer getInstance()
  899. + {
  900. + return SingletonHolder._instance;
  901. + }
  902. +
  903. + private FastMap<String, FastList<Integer>> buffTemplates;
  904. +
  905. + private FastMap<String, Boolean> changes;
  906. +
  907. + private UpdateTask updateTask;
  908. +
  909. + public EventBuffer()
  910. + {
  911. + updateTask = new UpdateTask();
  912. + changes = new FastMap<String, Boolean>();
  913. + buffTemplates = new FastMap<String, FastList<Integer>>();
  914. + loadSQL();
  915. + ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(updateTask, 600000, 600000);
  916. + }
  917. +
  918. + protected void buffPlayer(L2PcInstance player)
  919. + {
  920. + boolean bss = player.checkBss();
  921. + boolean sps = player.checkSps();
  922. + boolean ss = player.checkSs();
  923. +
  924. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  925. +
  926. + if(!buffTemplates.containsKey(playerId))
  927. + {
  928. + EventManager.getInstance().debug("The player : "+player.getName()+" ("+playerId+") without template");
  929. + return;
  930. + }
  931. +
  932. + for (int skillId : buffTemplates.get(playerId))
  933. + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getEffects(player, player, ss, sps, bss);
  934. + }
  935. +
  936. + public void changeList(L2PcInstance player, int buff, boolean action)
  937. + {
  938. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  939. +
  940. + if (!buffTemplates.containsKey(playerId))
  941. + {
  942. + buffTemplates.put(playerId, new FastList<Integer>());
  943. + changes.put(playerId, true);
  944. + }
  945. + else
  946. + {
  947. + if (!changes.containsKey(playerId))
  948. + changes.put(playerId, false);
  949. +
  950. + if (action)
  951. + buffTemplates.get(playerId).add(buff);
  952. + else
  953. + buffTemplates.get(playerId).remove(buffTemplates.get(playerId).indexOf(buff));
  954. +
  955. + }
  956. +
  957. + }
  958. +
  959. + private void loadSQL()
  960. + {
  961. + if (!EventManager.getInstance().getBoolean("eventBufferEnabled"))
  962. + return;
  963. +
  964. + Connection con = null;
  965. + PreparedStatement statement = null;
  966. + try
  967. + {
  968. + con = L2DatabaseFactory.getInstance().getConnection();
  969. + statement = con.prepareStatement("SELECT * FROM event_buffs");
  970. + ResultSet rset = statement.executeQuery();
  971. + int count = 0;
  972. + while (rset.next())
  973. + {
  974. + count++;
  975. +
  976. + buffTemplates.put(rset.getString("player"), new FastList<Integer>());
  977. +
  978. + StringTokenizer st = new StringTokenizer(rset.getString("buffs"), ",");
  979. +
  980. + FastList<Integer> templist = new FastList<Integer>();
  981. +
  982. + while (st.hasMoreTokens())
  983. + templist.add(Integer.parseInt(st.nextToken()));
  984. +
  985. + buffTemplates.getEntry(rset.getString("player")).setValue(templist);
  986. + }
  987. + rset.close();
  988. + statement.close();
  989. +
  990. + EventManager.getInstance().debug("Buffer loaded: " + count + " players template.");
  991. + }
  992. + catch (Exception e)
  993. + {
  994. + System.out.println("EventBuffs SQL catch");
  995. + }
  996. + finally
  997. + {
  998. + try { con.close(); } catch (Exception e) {}
  999. + }
  1000. + }
  1001. +
  1002. + protected boolean playerHaveTemplate(L2PcInstance player)
  1003. + {
  1004. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  1005. +
  1006. + if (buffTemplates.containsKey(playerId))
  1007. + return true;
  1008. + else
  1009. + return false;
  1010. + }
  1011. +
  1012. + public void showHtml(L2PcInstance player)
  1013. + {
  1014. + try{
  1015. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  1016. +
  1017. + if (!buffTemplates.containsKey(playerId))
  1018. + {
  1019. + buffTemplates.put(playerId, new FastList<Integer>());
  1020. + changes.put(playerId, true);
  1021. + }
  1022. +
  1023. + StringTokenizer st = new StringTokenizer(EventManager.getInstance().getString("allowedBuffsList"), ",");
  1024. +
  1025. + FastList<Integer> skillList = new FastList<Integer>();
  1026. +
  1027. + while (st.hasMoreTokens())
  1028. + skillList.add(Integer.parseInt(st.nextToken()));
  1029. +
  1030. + NpcHtmlMessage html = new NpcHtmlMessage(0);
  1031. + TextBuilder sb = new TextBuilder();
  1032. +
  1033. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  1034. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Edit Buffs</td><td width=80></td><td width=120>Remaining slots: " + (EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) + "</td></tr></table><br><br>");
  1035. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td>Added buffs:</td></tr></table><br>");
  1036. + sb.append("<center><table width=270>");
  1037. +
  1038. + int c = 0;
  1039. + for (int skillId : buffTemplates.get(playerId))
  1040. + {
  1041. + c++;
  1042. + String skillStr = "0000";
  1043. + if (skillId < 100)
  1044. + skillStr = "00" + skillId;
  1045. + else if (skillId > 99 && skillId < 1000)
  1046. + skillStr = "0" + skillId;
  1047. + else if (skillId > 4698 && skillId < 4701)
  1048. + skillStr = "1331";
  1049. + else if (skillId > 4701 && skillId < 4704)
  1050. + skillStr = "1332";
  1051. + else
  1052. + skillStr = "" + skillId;
  1053. +
  1054. + if (c % 2 == 1)
  1055. + sb.append("<tr><td width=33><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100><a action=\"bypass -h eventbuffer " + skillId + " 0\">" + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + "</a></td>");
  1056. + if (c % 2 == 0)
  1057. + sb.append("<td width=33><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100><a action=\"bypass -h eventbuffer " + skillId + " 0\">" + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + "</a></td></tr>");
  1058. + }
  1059. +
  1060. + if (c % 2 == 1)
  1061. + sb.append("<td width=33></td><td width=100></td></tr>");
  1062. +
  1063. + sb.append("</table><br>");
  1064. +
  1065. + sb.append("<br><br><center><table width=270 bgcolor=5A5A5A><tr><td>Available buffs:</td></tr></table><br>");
  1066. + sb.append("<center><table width=270>");
  1067. +
  1068. + c = 0;
  1069. + for (int skillId : skillList)
  1070. + {
  1071. + String skillStr = "0000";
  1072. + if (skillId < 100)
  1073. + skillStr = "00" + skillId;
  1074. + else if (skillId > 99 && skillId < 1000)
  1075. + skillStr = "0" + skillId;
  1076. + else if (skillId > 4698 && skillId < 4701)
  1077. + skillStr = "1331";
  1078. + else if (skillId > 4701 && skillId < 4704)
  1079. + skillStr = "1332";
  1080. + else
  1081. + skillStr = "" + skillId;
  1082. +
  1083. + if (!buffTemplates.get(playerId).contains(skillId))
  1084. + {
  1085. + c++;
  1086. + if (c % 2 == 1)
  1087. + sb.append("<tr><td width=32><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100>" + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "<a action=\"bypass -h eventbuffer " + skillId + " 1\">" : "") + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "</a>" : "") + "</td>");
  1088. + if (c % 2 == 0)
  1089. + sb.append("<td width=32><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100>" + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "<a action=\"bypass -h eventbuffer " + skillId + " 1\">" : "") + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "</a>" : "") + "</td></tr>");
  1090. + }
  1091. + }
  1092. +
  1093. + if (c % 2 == 1)
  1094. + sb.append("<td width=33></td><td width=100></td></tr>");
  1095. +
  1096. + sb.append("</table>");
  1097. +
  1098. + sb.append("</body></html>");
  1099. + html.setHtml(sb.toString());
  1100. + player.sendPacket(html);
  1101. + }
  1102. + catch(Throwable e)
  1103. + {
  1104. + e.printStackTrace();
  1105. + }
  1106. + }
  1107. +
  1108. + public void updateSQL()
  1109. + {
  1110. + Connection con = null;
  1111. + PreparedStatement statement = null;
  1112. +
  1113. + try
  1114. + {
  1115. + con = L2DatabaseFactory.getInstance().getConnection();
  1116. +
  1117. + for (Map.Entry<String, Boolean> player : changes.entrySet())
  1118. + {
  1119. +
  1120. + TextBuilder sb = new TextBuilder();
  1121. +
  1122. + int c = 0;
  1123. + for (int buffid : buffTemplates.get(player.getKey()))
  1124. + if (c == 0)
  1125. + {
  1126. + sb.append(buffid);
  1127. + c++;
  1128. + }
  1129. + else
  1130. + sb.append("," + buffid);
  1131. +
  1132. + if (player.getValue())
  1133. + {
  1134. + statement = con.prepareStatement("INSERT INTO event_buffs(player,buffs) VALUES (?,?)");
  1135. + statement.setString(1, player.getKey());
  1136. + statement.setString(2, sb.toString());
  1137. +
  1138. + statement.executeUpdate();
  1139. + statement.close();
  1140. + }
  1141. + else
  1142. + {
  1143. + statement = con.prepareStatement("UPDATE event_buffs SET buffs=? WHERE player=?");
  1144. + statement.setString(1, sb.toString());
  1145. + statement.setString(2, player.getKey());
  1146. +
  1147. + statement.executeUpdate();
  1148. + statement.close();
  1149. + }
  1150. + }
  1151. + }
  1152. + catch (Exception e)
  1153. + {
  1154. + System.out.println("EventBuffs SQL catch");
  1155. + }
  1156. + finally
  1157. + {
  1158. + try { con.close(); } catch (Exception e) {}
  1159. + }
  1160. +
  1161. + changes.clear();
  1162. + }
  1163. +}
  1164. \ No newline at end of file
  1165. Index: head-src/com/l2jfrozen/gameserver/event/TvT.java
  1166. ===================================================================
  1167. --- head-src/com/l2jfrozen/gameserver/event/TvT.java (nonexistent)
  1168. +++ head-src/com/l2jfrozen/gameserver/event/TvT.java (working copy)
  1169. @@ -0,0 +1,151 @@
  1170. +package com.l2jfrozen.gameserver.event;
  1171. +
  1172. +import javolution.text.TextBuilder;
  1173. +
  1174. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  1175. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  1176. +
  1177. +public class TvT extends Event
  1178. +{
  1179. + private class Core implements Runnable
  1180. + {
  1181. + public void run()
  1182. + {
  1183. + try
  1184. + {
  1185. + switch (eventState)
  1186. + {
  1187. + case START:
  1188. + divideIntoTeams(2);
  1189. + preparePlayers();
  1190. + teleportToTeamPos();
  1191. + createPartyOfTeam(1);
  1192. + createPartyOfTeam(2);
  1193. + forceSitAll();
  1194. + setStatus(EventState.FIGHT);
  1195. + schedule(20000);
  1196. + break;
  1197. +
  1198. + case FIGHT:
  1199. + forceStandAll();
  1200. + setStatus(EventState.END);
  1201. + clock.startClock(getInt("matchTime"));
  1202. + break;
  1203. +
  1204. + case END:
  1205. + clock.setTime(0);
  1206. + if (winnerTeam == 0)
  1207. + winnerTeam = getWinnerTeam();
  1208. +
  1209. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  1210. + setStatus(EventState.INACTIVE);
  1211. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " kills!");
  1212. + break;
  1213. + }
  1214. + }
  1215. + catch (Throwable e)
  1216. + {
  1217. + e.printStackTrace();
  1218. + EventManager.getInstance().end("Error! Event ended.");
  1219. + }
  1220. + }
  1221. + }
  1222. +
  1223. + private enum EventState
  1224. + {
  1225. + START, FIGHT, END, TELEPORT, INACTIVE
  1226. + }
  1227. +
  1228. + private EventState eventState;
  1229. +
  1230. + private Core task;
  1231. +
  1232. + public TvT()
  1233. + {
  1234. + super();
  1235. + eventId = 7;
  1236. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  1237. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  1238. + task = new Core();
  1239. + winnerTeam = 0;
  1240. + }
  1241. +
  1242. + @Override
  1243. + protected void endEvent()
  1244. + {
  1245. + winnerTeam = players.head().getNext().getValue()[0];
  1246. +
  1247. + setStatus(EventState.END);
  1248. + clock.setTime(0);
  1249. +
  1250. + }
  1251. +
  1252. + @Override
  1253. + protected String getScorebar()
  1254. + {
  1255. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  1256. + }
  1257. +
  1258. + @Override
  1259. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  1260. + {
  1261. + super.onDie(victim, killer);
  1262. + addToResurrector(victim);
  1263. + }
  1264. +
  1265. + @Override
  1266. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  1267. + {
  1268. + super.onKill(victim, killer);
  1269. + if (getPlayersTeam(killer) != getPlayersTeam(victim))
  1270. + {
  1271. + getPlayersTeam(killer).increaseScore();
  1272. + killer.addItem("Event", 6392, 1, killer, true);
  1273. + increasePlayersScore(killer);
  1274. + }
  1275. +
  1276. + }
  1277. +
  1278. + @Override
  1279. + protected void schedule(int time)
  1280. + {
  1281. + tpm.scheduleGeneral(task, time);
  1282. + }
  1283. +
  1284. + private void setStatus(EventState s)
  1285. + {
  1286. + eventState = s;
  1287. + }
  1288. +
  1289. + @Override
  1290. + protected void showHtml(L2PcInstance player, int obj)
  1291. + {
  1292. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  1293. + TextBuilder sb = new TextBuilder();
  1294. +
  1295. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  1296. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  1297. + sb.append("<center><table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  1298. + sb.append("<br><table width=270>");
  1299. + int i = 0;
  1300. + for (EventTeam team : teams.values())
  1301. + {
  1302. + i++;
  1303. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  1304. + for (L2PcInstance p : getPlayersOfTeam(i))
  1305. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  1306. + }
  1307. +
  1308. + sb.append("</table></body></html>");
  1309. + html.setHtml(sb.toString());
  1310. + player.sendPacket(html);
  1311. +
  1312. + }
  1313. +
  1314. + @Override
  1315. + protected void start()
  1316. + {
  1317. + setStatus(EventState.START);
  1318. + schedule(1);
  1319. + }
  1320. +}
  1321. \ No newline at end of file
  1322. Index: head-src/com/l2jfrozen/gameserver/event/Zombie.java
  1323. ===================================================================
  1324. --- head-src/com/l2jfrozen/gameserver/event/Zombie.java (nonexistent)
  1325. +++ head-src/com/l2jfrozen/gameserver/event/Zombie.java (working copy)
  1326. @@ -0,0 +1,212 @@
  1327. +package com.l2jfrozen.gameserver.event;
  1328. +
  1329. +import javolution.text.TextBuilder;
  1330. +
  1331. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  1332. +import com.l2jfrozen.gameserver.model.L2Object;
  1333. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  1334. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  1335. +
  1336. +/**
  1337. + * @author Rizel
  1338. + *
  1339. + */
  1340. +public class Zombie extends Event
  1341. +{
  1342. + private class Core implements Runnable
  1343. + {
  1344. + public void run()
  1345. + {
  1346. + try
  1347. + {
  1348. + switch (eventState)
  1349. + {
  1350. + case START:
  1351. + divideIntoTeams(1);
  1352. + preparePlayers();
  1353. + teleportToRandom();
  1354. + forceSitAll();
  1355. + unequip();
  1356. + setStatus(EventState.FIGHT);
  1357. + schedule(20000);
  1358. + break;
  1359. +
  1360. + case FIGHT:
  1361. + forceStandAll();
  1362. + transform(getRandomPlayer());
  1363. + setStatus(EventState.END);
  1364. + clock.startClock(getInt("matchTime"));
  1365. + break;
  1366. +
  1367. + case END:
  1368. + setStatus(EventState.INACTIVE);
  1369. + clock.setTime(0);
  1370. +
  1371. + if (getPlayersWithStatus(0).size() != 1)
  1372. + {
  1373. + msgToAll("Tie!");
  1374. + EventManager.getInstance().end("The match has ended in a tie!");
  1375. + }
  1376. +
  1377. + else
  1378. + {
  1379. + L2PcInstance winner = getWinner();
  1380. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  1381. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event!");
  1382. + }
  1383. +
  1384. + break;
  1385. + }
  1386. + }
  1387. + catch (Throwable e)
  1388. + {
  1389. + e.printStackTrace();
  1390. + EventManager.getInstance().end("Error! Event ended.");
  1391. + }
  1392. + }
  1393. + }
  1394. +
  1395. + private enum EventState
  1396. + {
  1397. + START, FIGHT, END, INACTIVE
  1398. + }
  1399. +
  1400. + private EventState eventState;
  1401. +
  1402. + private Core task;
  1403. +
  1404. + public Zombie()
  1405. + {
  1406. + super();
  1407. + eventId = 9;
  1408. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  1409. + task = new Core();
  1410. + }
  1411. +
  1412. + @Override
  1413. + public boolean canAttack(L2PcInstance player, L2Object target)
  1414. + {
  1415. + if (target instanceof L2PcInstance)
  1416. + if (getStatus(player) == 1 && getStatus((L2PcInstance) target) == 0)
  1417. + return true;
  1418. +
  1419. + return false;
  1420. + }
  1421. +
  1422. + @Override
  1423. + protected void endEvent()
  1424. + {
  1425. + setStatus(EventState.END);
  1426. + clock.setTime(0);
  1427. + }
  1428. +
  1429. + @Override
  1430. + protected String getScorebar()
  1431. + {
  1432. + return "Humans: " + getPlayersWithStatus(0).size() + " Time: " + clock.getTime();
  1433. + }
  1434. +
  1435. + private L2PcInstance getWinner()
  1436. + {
  1437. + return getPlayersWithStatus(0).head().getNext().getValue();
  1438. + }
  1439. +
  1440. + @Override
  1441. + public void onHit(L2PcInstance actor, L2PcInstance target)
  1442. + {
  1443. + if (eventState == EventState.END)
  1444. + {
  1445. + if (getStatus(actor) == 1 && getStatus(target) == 0)
  1446. + {
  1447. + transform(target);
  1448. + increasePlayersScore(actor);
  1449. + actor.addItem("Event", 6392, 2, actor, true);
  1450. + }
  1451. +
  1452. + if (getPlayersWithStatus(0).size() == 1)
  1453. + schedule(1);
  1454. + }
  1455. +
  1456. + }
  1457. +
  1458. + @Override
  1459. + public void onLogout(L2PcInstance player)
  1460. + {
  1461. + if (getStatus(player) == 1 && getPlayersWithStatus(1).size() == 1)
  1462. + {
  1463. + super.onLogout(player);
  1464. + transform(getRandomPlayer());
  1465. + }
  1466. + else
  1467. + {
  1468. + super.onLogout(player);
  1469. + }
  1470. +
  1471. + }
  1472. +
  1473. + @Override
  1474. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  1475. + {
  1476. + return false;
  1477. + }
  1478. +
  1479. + @Override
  1480. + protected void schedule(int time)
  1481. + {
  1482. + tpm.scheduleGeneral(task, time);
  1483. + }
  1484. +
  1485. + private void setStatus(EventState s)
  1486. + {
  1487. + eventState = s;
  1488. + }
  1489. +
  1490. + /* (non-Javadoc)
  1491. + * @see net.sf.l2j.gameserver.event.Event#showHtml(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, int)
  1492. + */
  1493. + @Override
  1494. + protected void showHtml(L2PcInstance player, int obj)
  1495. + {
  1496. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  1497. + TextBuilder sb = new TextBuilder();
  1498. +
  1499. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  1500. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  1501. + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
  1502. + sb.append("<br><table width=270>");
  1503. +
  1504. + for (L2PcInstance p : getPlayersOfTeam(1))
  1505. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Zombie" : "Human") + "</td></tr>");
  1506. +
  1507. + sb.append("</table></body></html>");
  1508. + html.setHtml(sb.toString());
  1509. + player.sendPacket(html);
  1510. +
  1511. + }
  1512. +
  1513. + @Override
  1514. + protected void start()
  1515. + {
  1516. + setStatus(EventState.START);
  1517. + schedule(1);
  1518. + }
  1519. +
  1520. + private void teleportToRandom()
  1521. + {
  1522. + for (L2PcInstance player : players.keySet())
  1523. + {
  1524. + int[] loc = getPosition("All", 0);
  1525. + player.teleToLocation(loc[0], loc[1], loc[2]);
  1526. + }
  1527. + }
  1528. +
  1529. + protected void transform(L2PcInstance player)
  1530. + {
  1531. + setStatus(player, 1);
  1532. + polymorph(player,25375);
  1533. + player.getAppearance().setNameColor(255, 0, 0);
  1534. + player.broadcastUserInfo();
  1535. + player.getInventory().unEquipItemInSlot(10);
  1536. + player.getInventory().unEquipItemInSlot(16);
  1537. + }
  1538. +}
  1539. \ No newline at end of file
  1540. Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java
  1541. ===================================================================
  1542. --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (revision 1132)
  1543. +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2PcInstance.java (working copy)
  1544. @@ -145,7 +145,7 @@
  1545. import com.l2jfrozen.gameserver.model.entity.L2Rebirth;
  1546. import com.l2jfrozen.gameserver.model.entity.event.CTF;
  1547. import com.l2jfrozen.gameserver.model.entity.event.DM;
  1548. -import com.l2jfrozen.gameserver.model.entity.event.L2Event;
  1549. +//import com.l2jfrozen.gameserver.model.entity.event.L2Event;
  1550. import com.l2jfrozen.gameserver.model.entity.event.TvT;
  1551. import com.l2jfrozen.gameserver.model.entity.event.VIP;
  1552. import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
  1553. @@ -245,6 +245,8 @@
  1554. import com.l2jfrozen.util.database.L2DatabaseFactory;
  1555. import com.l2jfrozen.util.random.Rnd;
  1556.  
  1557. +import com.l2jfrozen.gameserver.event.EventManager;
  1558. +
  1559. /**
  1560. * This class represents all player characters in the world.<br>
  1561. * There is always a client-thread connected to this (except if a player-store is activated upon logout).
  1562. @@ -4441,7 +4443,7 @@
  1563. return;
  1564. }
  1565.  
  1566. - if (L2Event.active && eventSitForced)
  1567. + if (EventManager.getInstance().isRunning() && eventSitForced)
  1568. {
  1569. sendMessage("A dark force beyond your mortal understanding makes your knees to shake when you try to stand up ...");
  1570. }
  1571. @@ -5832,6 +5834,13 @@
  1572. return;
  1573. }
  1574. }
  1575. +
  1576. + if (!EventManager.getInstance().canTargetPlayer(this, player))
  1577. + {
  1578. + player.sendPacket(new ActionFailed());
  1579. + return;
  1580. + }
  1581. +
  1582. // Check if the L2PcInstance is confused
  1583. if (player.isOutOfControl())
  1584. {
  1585. @@ -7401,6 +7410,19 @@
  1586. doPkInfo(pk);
  1587. }
  1588.  
  1589. + L2PcInstance ek = null;
  1590. +
  1591. + if (killer instanceof L2PcInstance)
  1592. + ek = (L2PcInstance) killer;
  1593. + if (killer instanceof L2Summon)
  1594. + ek = ((L2Summon) killer).getOwner();
  1595. +
  1596. + if (ek != null && EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered(ek))
  1597. + {
  1598. + EventManager.getInstance().getCurrentEvent().onKill(this,ek);
  1599. + EventManager.getInstance().getCurrentEvent().onDie(this,ek);
  1600. + }
  1601. +
  1602. if (atEvent)
  1603. {
  1604. pk.kills.add(getName());
  1605. @@ -7852,6 +7874,9 @@
  1606. if (isInDuel() && targetPlayer.isInDuel())
  1607. return;
  1608.  
  1609. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered(targetPlayer))
  1610. + return;
  1611. +
  1612. // If in Arena, do nothing
  1613. if (isInsideZone(ZONE_PVP) || targetPlayer.isInsideZone(ZONE_PVP))
  1614. return;
  1615. @@ -8525,6 +8550,9 @@
  1616. if (isInsideZone(ZONE_PVP))
  1617. return;
  1618.  
  1619. + if(EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
  1620. + return;
  1621. +
  1622. setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_NORMAL_TIME);
  1623.  
  1624. if (getPvpFlag() == 0)
  1625. @@ -8553,6 +8581,9 @@
  1626. if (player_target == null)
  1627. return;
  1628.  
  1629. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
  1630. + return;
  1631. +
  1632. if ((TvT.is_started() && _inEventTvT && player_target._inEventTvT) || (DM.is_started() && _inEventDM && player_target._inEventDM) || (CTF.is_started() && _inEventCTF && player_target._inEventCTF) || (VIP._started && _inEventVIP && player_target._inEventVIP))
  1633. return;
  1634.  
  1635. @@ -8667,6 +8698,9 @@
  1636. LOGGER.debug(getName() + " died and lost " + lostExp + " experience.");
  1637. }
  1638.  
  1639. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
  1640. + lostExp = 0;
  1641. +
  1642. // Set the new Experience value of the L2PcInstance
  1643. getStat().addExp(-lostExp);
  1644. }
  1645. @@ -11843,6 +11877,9 @@
  1646. if (isInsideZone(ZONE_PVP) && ((L2PcInstance) attacker).isInsideZone(ZONE_PVP))
  1647. return true;
  1648.  
  1649. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered((L2PcInstance)attacker) && EventManager.getInstance().isRunning())
  1650. + return true;
  1651. +
  1652. if (getClan() != null)
  1653. {
  1654. Siege siege = SiegeManager.getInstance().getSiege(getX(), getY(), getZ());
  1655. @@ -11928,6 +11965,10 @@
  1656. */
  1657. public void useMagic(final L2Skill skill, final boolean forceUse, final boolean dontMove)
  1658. {
  1659. + if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(this))
  1660. + if(!EventManager.getInstance().getCurrentEvent().onUseMagic(skill))
  1661. + return;
  1662. +
  1663. if (isDead())
  1664. {
  1665. abortCast();
  1666. @@ -12637,6 +12678,9 @@
  1667. // SkillDat skilldatpet = getCurrentPetSkill();
  1668. if (skill.isPvpSkill()) // pvp skill
  1669. {
  1670. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered((L2PcInstance)target) && EventManager.getInstance().isRunning())
  1671. + return true;
  1672. +
  1673. if (getClan() != null && ((L2PcInstance) target).getClan() != null)
  1674. {
  1675. if (getClan().isAtWarWith(((L2PcInstance) target).getClan().getClanId()) && ((L2PcInstance) target).getClan().isAtWarWith(getClan().getClanId()))
  1676. @@ -12650,11 +12694,15 @@
  1677. else if ((skilldat != null && !skilldat.isCtrlPressed() && skill.isOffensive() && !srcIsSummon)
  1678. /* || (skilldatpet != null && !skilldatpet.isCtrlPressed() && skill.isOffensive() && srcIsSummon) */)
  1679. {
  1680. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRegistered((L2PcInstance)target) && EventManager.getInstance().isRunning())
  1681. + return true;
  1682. +
  1683. if (getClan() != null && ((L2PcInstance) target).getClan() != null)
  1684. {
  1685. if (getClan().isAtWarWith(((L2PcInstance) target).getClan().getClanId()) && ((L2PcInstance) target).getClan().isAtWarWith(getClan().getClanId()))
  1686. return true; // in clan war player can attack whites even without ctrl
  1687. }
  1688. +
  1689. if (((L2PcInstance) target).getPvpFlag() == 0 && // target's pvp flag is not set and
  1690. ((L2PcInstance) target).getKarma() == 0 // target has no karma
  1691. )
  1692. @@ -14843,6 +14891,9 @@
  1693. */
  1694. public synchronized boolean setActiveClass(final int classIndex)
  1695. {
  1696. + if (EventManager.getInstance().players.contains(this))
  1697. + return false;
  1698. +
  1699. if (isInCombat() || this.getAI().getIntention() == CtrlIntention.AI_INTENTION_ATTACK)
  1700. {
  1701. sendMessage("Impossible switch class if in combat");
  1702. @@ -16339,6 +16390,10 @@
  1703. setXYZ(_obsX, _obsY, _obsZ);
  1704. }
  1705.  
  1706. + EventManager.getInstance().onLogout(this);
  1707. + if(EventManager.getInstance().isRegistered(this))
  1708. + EventManager.getInstance().getCurrentEvent().onLogout(this);
  1709. +
  1710. if (isTeleporting())
  1711. {
  1712. try
  1713. @@ -17587,6 +17642,9 @@
  1714. if (getDeathPenaltyBuffLevel() >= 15) // maximum level reached
  1715. return;
  1716.  
  1717. + if (EventManager.getInstance().isRegistered(this) && EventManager.getInstance().isRunning())
  1718. + return;
  1719. +
  1720. if (getDeathPenaltyBuffLevel() != 0)
  1721. {
  1722. L2Skill skill = SkillTable.getInstance().getInfo(5076, getDeathPenaltyBuffLevel());
  1723. Index: head-src/com/l2jfrozen/gameserver/event/Bomb.java
  1724. ===================================================================
  1725. --- head-src/com/l2jfrozen/gameserver/event/Bomb.java (nonexistent)
  1726. +++ head-src/com/l2jfrozen/gameserver/event/Bomb.java (working copy)
  1727. @@ -0,0 +1,261 @@
  1728. +package com.l2jfrozen.gameserver.event;
  1729. +
  1730. +import javolution.text.TextBuilder;
  1731. +import javolution.util.FastList;
  1732. +import javolution.util.FastMap;
  1733. +
  1734. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  1735. +import com.l2jfrozen.gameserver.model.L2Object;
  1736. +import com.l2jfrozen.gameserver.model.L2Skill;
  1737. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  1738. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  1739. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  1740. +import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillLaunched;
  1741. +import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillUser;
  1742. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  1743. +import com.l2jfrozen.gameserver.network.serverpackets.NpcInfo;
  1744. +import com.l2jfrozen.util.random.Rnd;
  1745. +
  1746. +public class Bomb extends Event
  1747. +{
  1748. + private class Bomber implements Runnable
  1749. + {
  1750. + public void run()
  1751. + {
  1752. + explode(bombs.head().getNext().getKey());
  1753. + bombs.remove(bombs.head().getNext().getKey());
  1754. + }
  1755. + }
  1756. +
  1757. + private class Core implements Runnable
  1758. + {
  1759. + public void run()
  1760. + {
  1761. + try
  1762. + {
  1763. + switch (eventState)
  1764. + {
  1765. + case START:
  1766. + divideIntoTeams(2);
  1767. + preparePlayers();
  1768. + teleportToTeamPos();
  1769. + createPartyOfTeam(1);
  1770. + createPartyOfTeam(2);
  1771. + forceSitAll();
  1772. + unequip();
  1773. + giveSkill();
  1774. + debug("The event initialized with " + players.size() + " players");
  1775. + setStatus(EventState.FIGHT);
  1776. + schedule(20000);
  1777. + break;
  1778. +
  1779. + case FIGHT:
  1780. + forceStandAll();
  1781. + setStatus(EventState.END);
  1782. + debug("The fight started");
  1783. + clock.startClock(getInt("matchTime"));
  1784. + break;
  1785. +
  1786. + case END:
  1787. + clock.setTime(0);
  1788. + if (winnerTeam == 0)
  1789. + winnerTeam = getWinnerTeam();
  1790. +
  1791. + removeSkill();
  1792. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  1793. + debug("The event ended. Winner: " + winnerTeam);
  1794. + setStatus(EventState.INACTIVE);
  1795. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " kills!");
  1796. + break;
  1797. + }
  1798. + }
  1799. + catch (Throwable e)
  1800. + {
  1801. + e.printStackTrace();
  1802. + EventManager.getInstance().end("Error! Event ended.");
  1803. + }
  1804. + }
  1805. + }
  1806. +
  1807. + private enum EventState
  1808. + {
  1809. + START, FIGHT, END, TELEPORT, INACTIVE
  1810. + }
  1811. +
  1812. + private EventState eventState;
  1813. +
  1814. + private Core task;
  1815. +
  1816. + private FastMap<L2Spawn, L2PcInstance> bombs;
  1817. +
  1818. + private Bomber bomber;
  1819. +
  1820. + public Bomb()
  1821. + {
  1822. + super();
  1823. + eventId = 12;
  1824. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  1825. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  1826. + task = new Core();
  1827. + bomber = new Bomber();
  1828. + bombs = new FastMap<L2Spawn, L2PcInstance>();
  1829. + winnerTeam = 0;
  1830. + }
  1831. +
  1832. + @Override
  1833. + public void dropBomb(L2PcInstance player)
  1834. + {
  1835. + bombs.put(spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("bombNpcId")), player);
  1836. + bombs.tail().getPrevious().getKey().getLastSpawn().setTitle((getTeam(player) == 1 ? "Blue" : "Red"));
  1837. + bombs.tail().getPrevious().getKey().getLastSpawn().broadcastStatusUpdate();
  1838. +
  1839. + for(L2PcInstance p : getPlayerList())
  1840. + p.sendPacket(new NpcInfo(bombs.tail().getPrevious().getKey().getLastSpawn(), p));
  1841. +
  1842. + tpm.scheduleGeneral(bomber, 3000);
  1843. + }
  1844. +
  1845. + @Override
  1846. + protected void endEvent()
  1847. + {
  1848. + winnerTeam = players.head().getNext().getValue()[0];
  1849. +
  1850. + setStatus(EventState.END);
  1851. + clock.setTime(0);
  1852. +
  1853. + }
  1854. +
  1855. + private void explode(L2Spawn bomb)
  1856. + {
  1857. + FastList<L2Object> victims = new FastList<L2Object>();
  1858. +
  1859. + for (L2PcInstance player : getPlayerList())
  1860. + {
  1861. + if(player == null)
  1862. + continue;
  1863. +
  1864. + if(player.isInvul())
  1865. + continue;
  1866. +
  1867. + if (getTeam(bombs.get(bomb)) != getTeam(player) && Math.sqrt(player.getPlanDistanceSq(bomb.getLastSpawn())) <= getInt("bombRadius"))
  1868. + {
  1869. + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, bomb.getLastSpawn());
  1870. + increasePlayersScore(bombs.get(bomb));
  1871. + EventStats.getInstance().tempTable.get(player.getObjectId())[2] = EventStats.getInstance().tempTable.get(player.getObjectId())[2] + 1;
  1872. + addToResurrector(player);
  1873. +
  1874. + victims.add(player);
  1875. +
  1876. + if (getTeam(player) == 1)
  1877. + teams.get(2).increaseScore();
  1878. + if (getTeam(player) == 2)
  1879. + teams.get(1).increaseScore();
  1880. + }
  1881. + if (victims.size() != 0)
  1882. + {
  1883. + bomb.getLastSpawn().broadcastPacket(new MagicSkillUser(bomb.getLastSpawn(), (L2PcInstance) victims.head().getNext().getValue(), 18, 1, 0, 0));
  1884. + bomb.getLastSpawn().broadcastPacket(new MagicSkillLaunched(bomb.getLastSpawn(), 18, 1, victims.toArray(new L2Object[victims.size()])));
  1885. + victims.clear();
  1886. + }
  1887. + }
  1888. + unspawnNPC(bomb);
  1889. + }
  1890. +
  1891. + @Override
  1892. + protected String getScorebar()
  1893. + {
  1894. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  1895. + }
  1896. +
  1897. + @Override
  1898. + protected int getWinnerTeam()
  1899. + {
  1900. + if (teams.get(1).getScore() > teams.get(2).getScore())
  1901. + return 1;
  1902. + if (teams.get(2).getScore() > teams.get(1).getScore())
  1903. + return 2;
  1904. + if (teams.get(1).getScore() == teams.get(2).getScore())
  1905. + if (Rnd.nextInt(1) == 1)
  1906. + return 1;
  1907. + else
  1908. + return 2;
  1909. +
  1910. + return 1;
  1911. + }
  1912. +
  1913. + private void giveSkill()
  1914. + {
  1915. + for (L2PcInstance player : getPlayerList())
  1916. + player.addSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
  1917. + }
  1918. +
  1919. +
  1920. + @Override
  1921. + public void onLogout(L2PcInstance player)
  1922. + {
  1923. + player.removeSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
  1924. + }
  1925. +
  1926. + @Override
  1927. + public boolean onUseMagic(L2Skill skill)
  1928. + {
  1929. + if (skill.getId() == getInt("bombSkillId"))
  1930. + return true;
  1931. +
  1932. + return false;
  1933. +
  1934. + }
  1935. +
  1936. + private void removeSkill()
  1937. + {
  1938. + for (L2PcInstance player : getPlayerList())
  1939. + player.removeSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
  1940. + }
  1941. +
  1942. + @Override
  1943. + protected void schedule(int time)
  1944. + {
  1945. + tpm.scheduleGeneral(task, time);
  1946. + }
  1947. +
  1948. + private void setStatus(EventState s)
  1949. + {
  1950. + eventState = s;
  1951. + }
  1952. +
  1953. + @Override
  1954. + protected void showHtml(L2PcInstance player, int obj)
  1955. + {
  1956. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  1957. + TextBuilder sb = new TextBuilder();
  1958. +
  1959. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  1960. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  1961. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  1962. + sb.append("<br><table width=270>");
  1963. + int i = 0;
  1964. + for (EventTeam team : teams.values())
  1965. + {
  1966. + i++;
  1967. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  1968. + for (L2PcInstance p : getPlayersOfTeam(i))
  1969. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  1970. + }
  1971. +
  1972. + sb.append("</table></body></html>");
  1973. + html.setHtml(sb.toString());
  1974. + player.sendPacket(html);
  1975. +
  1976. + }
  1977. +
  1978. + @Override
  1979. + protected void start()
  1980. + {
  1981. + setStatus(EventState.START);
  1982. + schedule(1);
  1983. + }
  1984. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  1985. + {
  1986. + return false;
  1987. + }
  1988. +}
  1989. \ No newline at end of file
  1990. Index: config/Events.xml
  1991. ===================================================================
  1992. --- config/Events.xml (nonexistent)
  1993. +++ config/Events.xml (working copy)
  1994. @@ -0,0 +1,350 @@
  1995. +<?xml version="1.0" encoding="UTF-8"?>
  1996. +<events>
  1997. + <!-- Core settings -->
  1998. + <event id="0">
  1999. + <property name="registerTime" value="300" />
  2000. + <property name="betweenEventsTime" value="10800" />
  2001. + <property name="firstAfterStartTime" value="1800" />
  2002. + <property name="managerNpcId" value="50001" />
  2003. + <property name="showVotePopupAt" value="600" />
  2004. + <property name="votePopupEnabled" value="false" />
  2005. + <property name="debug" value="false" />
  2006. + <property name="statTrackingEnabled" value="true" />
  2007. + <property name="eventBufferEnabled" value="false" />
  2008. + <property name="allowedBuffsList" value="1068,1085,1086,1087" />
  2009. + <property name="maxBuffNum" value="2" />
  2010. + <property name="friendlyFireEnabled" value="false" />
  2011. + <property name="restartAllowed" value="false" />
  2012. + <restriction type="item" ids="" />
  2013. + <restriction type="skill" ids="1374,1375,1376,395,396" />
  2014. + </event>
  2015. +
  2016. + <!-- DeathMatch -->
  2017. + <event id="1">
  2018. + <property name="minLvl" value="70" />
  2019. + <property name="maxLvl" value="80" />
  2020. + <property name="eventName" value="Deathmatch" />
  2021. + <property name="ids" value="1" />
  2022. + <property name="matchTime" value="240" />
  2023. + <property name="rewardId" value="6392" />
  2024. + <property name="rewardAmmount" value="20" />
  2025. + <property name="allowPotions" value="false" />
  2026. + <property name="allowUseMagic" value="true" />
  2027. + <property name="removeBuffs" value="false" />
  2028. + <property name="minPlayers" value="8" />
  2029. + <color owner="All" r="255" g="255" b="255"/>
  2030. + <position owner="All" x="106037" y="114816" z="-1560" radius="700" />
  2031. + <restriction type="item" ids="" />
  2032. + <restriction type="skill" ids="" />
  2033. + </event>
  2034. +
  2035. + <!-- Domination -->
  2036. + <event id="2">
  2037. + <property name="minLvl" value="70" />
  2038. + <property name="maxLvl" value="80" />
  2039. + <property name="eventName" value="Domination" />
  2040. + <property name="ids" value="2" />
  2041. + <property name="matchTime" value="240" />
  2042. + <property name="rewardId" value="6392" />
  2043. + <property name="rewardAmmount" value="10" />
  2044. + <property name="allowPotions" value="false" />
  2045. + <property name="allowUseMagic" value="true" />
  2046. + <property name="removeBuffs" value="false" />
  2047. + <property name="minPlayers" value="8" />
  2048. + <property name="zoneRadius" value="170" />
  2049. + <property name="zoneNpcId" value="9103" />
  2050. + <color owner="Blue" r="0" g="0" b="255"/>
  2051. + <color owner="Red" r="255" g="0" b="0"/>
  2052. + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
  2053. + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
  2054. + <position owner="Zone" x="106108" y="114969" z="-1587" radius="0" />
  2055. + <restriction type="item" ids="" />
  2056. + <restriction type="skill" ids="" />
  2057. + </event>
  2058. +
  2059. + <!-- Double Domination -->
  2060. + <event id="3">
  2061. + <property name="minLvl" value="70" />
  2062. + <property name="maxLvl" value="80" />
  2063. + <property name="eventName" value="Double Domination" />
  2064. + <property name="ids" value="3" />
  2065. + <property name="matchTime" value="240" />
  2066. + <property name="rewardId" value="6392" />
  2067. + <property name="rewardAmmount" value="10" />
  2068. + <property name="allowPotions" value="false" />
  2069. + <property name="allowUseMagic" value="true" />
  2070. + <property name="removeBuffs" value="false" />
  2071. + <property name="minPlayers" value="8" />
  2072. + <property name="zoneRadius" value="170" />
  2073. + <property name="zoneNpcId" value="9103" />
  2074. + <property name="timeToScore" value="10" />
  2075. + <color owner="Blue" r="0" g="0" b="255"/>
  2076. + <color owner="Red" r="255" g="0" b="0"/>
  2077. + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
  2078. + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
  2079. + <position owner="Zone" x="106995" y="114556" z="-1587" radius="0" />
  2080. + <position owner="Zone" x="104823" y="115175" z="-1587" radius="0" />
  2081. + <restriction type="item" ids="" />
  2082. + <restriction type="skill" ids="" />
  2083. + </event>
  2084. +
  2085. + <!-- Last Man Standing -->
  2086. + <event id="4">
  2087. + <property name="minLvl" value="70" />
  2088. + <property name="maxLvl" value="80" />
  2089. + <property name="eventName" value="Last Man Standing" />
  2090. + <property name="ids" value="4" />
  2091. + <property name="matchTime" value="300" />
  2092. + <property name="rewardId" value="6392" />
  2093. + <property name="rewardAmmount" value="25" />
  2094. + <property name="allowPotions" value="false" />
  2095. + <property name="allowUseMagic" value="true" />
  2096. + <property name="removeBuffs" value="false" />
  2097. + <property name="minPlayers" value="8" />
  2098. + <color owner="All" r="255" g="255" b="255"/>
  2099. + <position owner="All" x="106037" y="114816" z="-1560" radius="700" />
  2100. + <restriction type="item" ids="" />
  2101. + <restriction type="skill" ids="" />
  2102. + </event>
  2103. +
  2104. + <!-- Lucky Chests -->
  2105. + <event id="5">
  2106. + <property name="minLvl" value="40" />
  2107. + <property name="maxLvl" value="80" />
  2108. + <property name="eventName" value="Lucky Chests" />
  2109. + <property name="ids" value="5" />
  2110. + <property name="matchTime" value="180" />
  2111. + <property name="rewardId" value="6392" />
  2112. + <property name="rewardAmmount" value="20" />
  2113. + <property name="allowPotions" value="false" />
  2114. + <property name="allowUseMagic" value="false" />
  2115. + <property name="removeBuffs" value="true" />
  2116. + <property name="minPlayers" value="8" />
  2117. + <property name="chestNpcId" value="9102" />
  2118. + <property name="numberOfChests" value="300" />
  2119. + <color owner="All" r="255" g="255" b="255"/>
  2120. + <position owner="All" x="106037" y="114816" z="-1560" radius="100" />
  2121. + <position owner="Chests" x="106037" y="114816" z="-1560" radius="700" />
  2122. + <restriction type="item" ids="" />
  2123. + <restriction type="skill" ids="" />
  2124. + </event>
  2125. +
  2126. + <!-- Simon Says -->
  2127. + <event id="6">
  2128. + <property name="minLvl" value="40" />
  2129. + <property name="maxLvl" value="80" />
  2130. + <property name="eventName" value="Simon Says" />
  2131. + <property name="ids" value="6" />
  2132. + <property name="roundTime" value="10" />
  2133. + <property name="rewardId" value="6392" />
  2134. + <property name="rewardAmmount" value="25" />
  2135. + <property name="allowPotions" value="false" />
  2136. + <property name="allowUseMagic" value="false" />
  2137. + <property name="removeBuffs" value="false" />
  2138. + <property name="minPlayers" value="8" />
  2139. + <property name="simonNpcId" value="9101" />
  2140. + <property name="lengthOfFirstWord" value="3" />
  2141. + <property name="increasePerRound" value="1" />
  2142. + <color owner="All" r="255" g="255" b="255"/>
  2143. + <position owner="All" x="106037" y="114816" z="-1560" radius="100" />
  2144. + <position owner="Simon" x="106037" y="114816" z="-1560" radius="0" />
  2145. + <restriction type="item" ids="" />
  2146. + <restriction type="skill" ids="" />
  2147. + </event>
  2148. +
  2149. + <!-- Team vs Team -->
  2150. + <event id="7">
  2151. + <property name="minLvl" value="70" />
  2152. + <property name="maxLvl" value="80" />
  2153. + <property name="eventName" value="Team vs Team" />
  2154. + <property name="ids" value="7" />
  2155. + <property name="matchTime" value="300" />
  2156. + <property name="rewardId" value="6392" />
  2157. + <property name="rewardAmmount" value="10" />
  2158. + <property name="allowPotions" value="false" />
  2159. + <property name="allowUseMagic" value="true" />
  2160. + <property name="removeBuffs" value="true" />
  2161. + <property name="minPlayers" value="8" />
  2162. + <color owner="Blue" r="0" g="0" b="255"/>
  2163. + <color owner="Red" r="255" g="0" b="0"/>
  2164. + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
  2165. + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
  2166. + <restriction type="item" ids="" />
  2167. + <restriction type="skill" ids="" />
  2168. + </event>
  2169. +
  2170. + <!-- VIP Team vs Team -->
  2171. + <event id="8">
  2172. + <property name="minLvl" value="70" />
  2173. + <property name="maxLvl" value="80" />
  2174. + <property name="eventName" value="VIP Team vs Team" />
  2175. + <property name="ids" value="8" />
  2176. + <property name="matchTime" value="300" />
  2177. + <property name="rewardId" value="6392" />
  2178. + <property name="rewardAmmount" value="10" />
  2179. + <property name="allowPotions" value="false" />
  2180. + <property name="allowUseMagic" value="true" />
  2181. + <property name="removeBuffs" value="true" />
  2182. + <property name="minPlayers" value="8" />
  2183. + <color owner="Blue" r="0" g="0" b="255"/>
  2184. + <color owner="Red" r="255" g="0" b="0"/>
  2185. + <color owner="BlueVIP" r="0" g="255" b="255"/>
  2186. + <color owner="RedVIP" r="255" g="155" b="0"/>
  2187. + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
  2188. + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
  2189. + <restriction type="item" ids="" />
  2190. + <restriction type="skill" ids="" />
  2191. + </event>
  2192. +
  2193. + <!-- Zombie -->
  2194. + <event id="9">
  2195. + <property name="minLvl" value="40" />
  2196. + <property name="maxLvl" value="80" />
  2197. + <property name="eventName" value="Zombie" />
  2198. + <property name="ids" value="9" />
  2199. + <property name="matchTime" value="240" />
  2200. + <property name="rewardId" value="6392" />
  2201. + <property name="rewardAmmount" value="25" />
  2202. + <property name="allowPotions" value="false" />
  2203. + <property name="allowUseMagic" value="false" />
  2204. + <property name="removeBuffs" value="true" />
  2205. + <property name="minPlayers" value="8" />
  2206. + <color owner="All" r="255" g="255" b="255"/>
  2207. + <color owner="Zombie" r="255" g="0" b="0"/>
  2208. + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
  2209. + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
  2210. + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
  2211. + <position owner="All" x="106037" y="114816" z="-1560" radius="50" />
  2212. + <restriction type="item" ids="" />
  2213. + <restriction type="skill" ids="" />
  2214. + </event>
  2215. +
  2216. + <!-- Capture the Flag -->
  2217. + <event id="10">
  2218. + <property name="minLvl" value="70" />
  2219. + <property name="maxLvl" value="80" />
  2220. + <property name="eventName" value="Capture the Flag" />
  2221. + <property name="ids" value="10" />
  2222. + <property name="matchTime" value="300" />
  2223. + <property name="rewardId" value="6392" />
  2224. + <property name="rewardAmmount" value="10" />
  2225. + <property name="allowPotions" value="false" />
  2226. + <property name="allowUseMagic" value="true" />
  2227. + <property name="removeBuffs" value="true" />
  2228. + <property name="minPlayers" value="8" />
  2229. + <property name="blueFlagId" value="9104" />
  2230. + <property name="redFlagId" value="9105" />
  2231. + <property name="blueFlagHolderId" value="9106" />
  2232. + <property name="redFlagHolderId" value="9107" />
  2233. + <color owner="Blue" r="0" g="0" b="255"/>
  2234. + <color owner="Red" r="255" g="0" b="0"/>
  2235. + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
  2236. + <position owner="BlueFlag" x="106391" y="116331" z="-1587" radius="0" />
  2237. + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
  2238. + <position owner="RedFlag" x="105696" y="113522" z="-1587" radius="0" />
  2239. + <restriction type="item" ids="" />
  2240. + <restriction type="skill" ids="" />
  2241. + </event>
  2242. +
  2243. +
  2244. + <!-- Russian Roulette -->
  2245. + <event id="11">
  2246. + <property name="minLvl" value="40" />
  2247. + <property name="maxLvl" value="80" />
  2248. + <property name="eventName" value="Russian Roulette" />
  2249. + <property name="ids" value="11" />
  2250. + <property name="matchTime" value="240" />
  2251. + <property name="rewardId" value="6392" />
  2252. + <property name="rewardAmmount" value="15" />
  2253. + <property name="allowPotions" value="false" />
  2254. + <property name="allowUseMagic" value="false" />
  2255. + <property name="removeBuffs" value="false" />
  2256. + <property name="minPlayers" value="8" />
  2257. + <property name="russianNpcId" value="9108" />
  2258. + <property name="numberOfRussians" value="6" />
  2259. + <property name="roundTime" value="10" />
  2260. + <color owner="All" r="255" g="255" b="255"/>
  2261. + <position owner="All" x="106037" y="114816" z="-1560" radius="100" />
  2262. + <position owner="Russian" x="106109" y="114947" z="-1587" radius="0" />
  2263. + <position owner="Russian" x="106176" y="114792" z="-1587" radius="0" />
  2264. + <position owner="Russian" x="106138" y="114658" z="-1587" radius="0" />
  2265. + <position owner="Russian" x="106010" y="114607" z="-1587" radius="0" />
  2266. + <position owner="Russian" x="105859" y="114672" z="-1587" radius="0" />
  2267. + <position owner="Russian" x="105875" y="114837" z="-1587" radius="0" />
  2268. + <restriction type="item" ids="" />
  2269. + <restriction type="skill" ids="" />
  2270. + </event>
  2271. +
  2272. + <!-- Bomb Fight -->
  2273. + <event id="12">
  2274. + <property name="minLvl" value="40" />
  2275. + <property name="maxLvl" value="80" />
  2276. + <property name="eventName" value="Bomb Fight" />
  2277. + <property name="ids" value="12" />
  2278. + <property name="matchTime" value="300" />
  2279. + <property name="rewardId" value="6392" />
  2280. + <property name="rewardAmmount" value="10" />
  2281. + <property name="allowPotions" value="false" />
  2282. + <property name="allowUseMagic" value="true" />
  2283. + <property name="removeBuffs" value="true" />
  2284. + <property name="minPlayers" value="8" />
  2285. + <property name="bombNpcId" value="9109" />
  2286. + <property name="bombRadius" value="100" />
  2287. + <property name="bombSkillId" value="5220" />
  2288. + <color owner="Blue" r="0" g="0" b="255"/>
  2289. + <color owner="Red" r="255" g="0" b="0"/>
  2290. + <position owner="Blue" x="11619" y="-49691" z="-3008" radius="50" />
  2291. + <position owner="Red" x="12720" y="-48594" z="-3035" radius="50" />
  2292. + <restriction type="item" ids="" />
  2293. + <restriction type="skill" ids="" />
  2294. + </event>
  2295. +
  2296. + <!-- Mutant -->
  2297. + <event id="13">
  2298. + <property name="minLvl" value="70" />
  2299. + <property name="maxLvl" value="80" />
  2300. + <property name="eventName" value="Mutant" />
  2301. + <property name="ids" value="13" />
  2302. + <property name="matchTime" value="240" />
  2303. + <property name="rewardId" value="6392" />
  2304. + <property name="rewardAmmount" value="25" />
  2305. + <property name="allowPotions" value="false" />
  2306. + <property name="allowUseMagic" value="true" />
  2307. + <property name="removeBuffs" value="true" />
  2308. + <property name="minPlayers" value="8" />
  2309. + <property name="mutantBuffId" value="9007" />
  2310. + <color owner="All" r="255" g="255" b="255"/>
  2311. + <position owner="All" x="106037" y="114816" z="-1560" radius="700" />
  2312. + <restriction type="item" ids="" />
  2313. + <restriction type="skill" ids="" />
  2314. + </event>
  2315. +
  2316. + <!-- Battlefield -->
  2317. + <event id="14">
  2318. + <property name="minLvl" value="70" />
  2319. + <property name="maxLvl" value="80" />
  2320. + <property name="eventName" value="Battlefield" />
  2321. + <property name="ids" value="14" />
  2322. + <property name="matchTime" value="300" />
  2323. + <property name="rewardId" value="6392" />
  2324. + <property name="rewardAmmount" value="10" />
  2325. + <property name="allowPotions" value="false" />
  2326. + <property name="allowUseMagic" value="true" />
  2327. + <property name="removeBuffs" value="false" />
  2328. + <property name="minPlayers" value="8" />
  2329. + <property name="numOfBases" value="5" />
  2330. + <property name="baseNpcId" value="9110" />
  2331. + <property name="captureSkillId" value="5219" />
  2332. + <color owner="Blue" r="0" g="0" b="255"/>
  2333. + <color owner="Red" r="255" g="0" b="0"/>
  2334. + <position owner="Blue" x="106679" y="116319" z="-1587" radius="50" />
  2335. + <position owner="Red" x="105914" y="113368" z="-1587" radius="50" />
  2336. + <position owner="Base" x="106037" y="114816" z="-1587" radius="0" />
  2337. + <position owner="Base" x="106995" y="114556" z="-1587" radius="0" />
  2338. + <position owner="Base" x="104823" y="115175" z="-1587" radius="0" />
  2339. + <position owner="Base" x="105752" y="116245" z="-1587" radius="0" />
  2340. + <position owner="Base" x="106907" y="113671" z="-1587" radius="0" />
  2341. + <restriction type="item" ids="" />
  2342. + <restriction type="skill" ids="" />
  2343. + </event>
  2344. +</events>
  2345. \ No newline at end of file
  2346. Index: head-src/com/l2jfrozen/gameserver/event/Mutant.java
  2347. ===================================================================
  2348. --- head-src/com/l2jfrozen/gameserver/event/Mutant.java (nonexistent)
  2349. +++ head-src/com/l2jfrozen/gameserver/event/Mutant.java (working copy)
  2350. @@ -0,0 +1,212 @@
  2351. +/*
  2352. + * This program is free software: you can redistribute it and/or modify it under
  2353. + * the terms of the GNU General Public License as published by the Free Software
  2354. + * Foundation, either version 3 of the License, or (at your option) any later
  2355. + * version.
  2356. + *
  2357. + * This program is distributed in the hope that it will be useful, but WITHOUT
  2358. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  2359. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  2360. + * details.
  2361. + *
  2362. + * You should have received a copy of the GNU General Public License along with
  2363. + * this program. If not, see <http://www.gnu.org/licenses/>.
  2364. + */
  2365. +package com.l2jfrozen.gameserver.event;
  2366. +
  2367. +import javolution.text.TextBuilder;
  2368. +
  2369. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  2370. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  2371. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  2372. +import com.l2jfrozen.gameserver.model.L2Object;
  2373. +
  2374. +/**
  2375. + * @author Rizel
  2376. + *
  2377. + */
  2378. +public class Mutant extends Event
  2379. +{
  2380. +
  2381. + private class Core implements Runnable
  2382. + {
  2383. + public void run()
  2384. + {
  2385. + try
  2386. + {
  2387. + switch (eventState)
  2388. + {
  2389. + case START:
  2390. + divideIntoTeams(1);
  2391. + preparePlayers();
  2392. + teleportToTeamPos();
  2393. + forceSitAll();
  2394. + setStatus(EventState.FIGHT);
  2395. + schedule(20000);
  2396. + break;
  2397. +
  2398. + case FIGHT:
  2399. + forceStandAll();
  2400. + transformMutant(getRandomPlayer());
  2401. + setStatus(EventState.END);
  2402. + clock.startClock(getInt("matchTime"));
  2403. + break;
  2404. +
  2405. + case END:
  2406. + clock.setTime(0);
  2407. + untransformMutant();
  2408. + L2PcInstance winner = getPlayerWithMaxScore();
  2409. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  2410. + setStatus(EventState.INACTIVE);
  2411. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " kills!");
  2412. + break;
  2413. + }
  2414. + }
  2415. + catch (Throwable e)
  2416. + {
  2417. + e.printStackTrace();
  2418. + EventManager.getInstance().end("Error! Event ended.");
  2419. + }
  2420. + }
  2421. + }
  2422. +
  2423. + private enum EventState
  2424. + {
  2425. + START, FIGHT, END, INACTIVE
  2426. + }
  2427. +
  2428. + private EventState eventState;
  2429. +
  2430. + private Core task;
  2431. +
  2432. + private L2PcInstance mutant;
  2433. +
  2434. + public Mutant()
  2435. + {
  2436. + super();
  2437. + eventId = 13;
  2438. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  2439. + task = new Core();
  2440. + }
  2441. +
  2442. + /**
  2443. + * @see net.sf.l2j.gameserver.event.Event#endEvent()
  2444. + */
  2445. + @Override
  2446. + protected void endEvent()
  2447. + {
  2448. + setStatus(EventState.END);
  2449. + clock.setTime(0);
  2450. + }
  2451. +
  2452. + @Override
  2453. + protected String getScorebar()
  2454. + {
  2455. + return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
  2456. + }
  2457. +
  2458. + @Override
  2459. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  2460. + {
  2461. + super.onDie(victim, killer);
  2462. + addToResurrector(victim);
  2463. + }
  2464. +
  2465. + @Override
  2466. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  2467. + {
  2468. + super.onKill(victim, killer);
  2469. + if (getStatus(killer) == 1)
  2470. + increasePlayersScore(killer);
  2471. + if (getStatus(killer) == 0 && getStatus(victim) == 1)
  2472. + transformMutant(killer);
  2473. + killer.addItem("Event", 6392, 1, killer, true);
  2474. + }
  2475. +
  2476. + @Override
  2477. + public void onLogout(L2PcInstance player)
  2478. + {
  2479. + super.onLogout(player);
  2480. +
  2481. + if (mutant == player)
  2482. + transformMutant(getRandomPlayer());
  2483. + }
  2484. +
  2485. + @Override
  2486. + protected void schedule(int time)
  2487. + {
  2488. + tpm.scheduleGeneral(task, time);
  2489. + }
  2490. +
  2491. + private void setStatus(EventState s)
  2492. + {
  2493. + eventState = s;
  2494. + }
  2495. +
  2496. + @Override
  2497. + protected void showHtml(L2PcInstance player, int obj)
  2498. + {
  2499. + if (players.size() > 0)
  2500. + {
  2501. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  2502. + TextBuilder sb = new TextBuilder();
  2503. +
  2504. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  2505. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  2506. + sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
  2507. + sb.append("<br><table width=270>");
  2508. +
  2509. + for (L2PcInstance p : getPlayersOfTeam(1))
  2510. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  2511. +
  2512. + sb.append("</table></body></html>");
  2513. + html.setHtml(sb.toString());
  2514. + player.sendPacket(html);
  2515. + }
  2516. +
  2517. + }
  2518. +
  2519. + @Override
  2520. + protected void start()
  2521. + {
  2522. + setStatus(EventState.START);
  2523. + schedule(1);
  2524. + }
  2525. +
  2526. + private void transformMutant(L2PcInstance player)
  2527. + {
  2528. + player.addSkill(SkillTable.getInstance().getInfo(getInt("mutantBuffId"), 1), false);
  2529. + setStatus(player, 1);
  2530. + untransformMutant();
  2531. + polymorph(player,25286);
  2532. + player.getAppearance().setNameColor(255, 0, 0);
  2533. + player.broadcastUserInfo();
  2534. + mutant = player;
  2535. +
  2536. + }
  2537. +
  2538. + private void untransformMutant()
  2539. + {
  2540. + if (mutant != null)
  2541. + {
  2542. + mutant.getAppearance().setNameColor(getColor("All")[0], getColor("All")[1], getColor("All")[2]);
  2543. + mutant.removeSkill(SkillTable.getInstance().getInfo(getInt("mutantBuffId"), 1), false);
  2544. + setStatus(mutant, 0);
  2545. + unpolymorph(mutant);
  2546. + mutant.broadcastUserInfo();
  2547. + mutant = null;
  2548. + }
  2549. + }
  2550. + @Override
  2551. + public boolean canAttack(L2PcInstance player, L2Object target)
  2552. + {
  2553. + if (target instanceof L2PcInstance)
  2554. + if (getStatus(player) == 0 && getStatus((L2PcInstance) target) == 0)
  2555. + return false;
  2556. + else
  2557. + return true;
  2558. +
  2559. + return false;
  2560. + }
  2561. +
  2562. +}
  2563. \ No newline at end of file
  2564. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java
  2565. ===================================================================
  2566. --- head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java (revision 1132)
  2567. +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/Say2.java (working copy)
  2568. @@ -30,6 +30,8 @@
  2569.  
  2570. import com.l2jfrozen.Config;
  2571. import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable;
  2572. +import com.l2jfrozen.gameserver.event.EventManager;
  2573. +import com.l2jfrozen.gameserver.event.LMS;
  2574. import com.l2jfrozen.gameserver.handler.IVoicedCommandHandler;
  2575. import com.l2jfrozen.gameserver.handler.VoicedCommandHandler;
  2576. import com.l2jfrozen.gameserver.managers.PetitionManager;
  2577. @@ -68,6 +70,8 @@
  2578. public final static int HERO_VOICE = 17; // %
  2579. public final static int CRITICAL_ANNOUNCE = 18;
  2580.  
  2581. + private boolean _isInLMS;
  2582. +
  2583. private final static String[] CHAT_NAMES =
  2584. {
  2585. "ALL ",
  2586. @@ -268,7 +272,18 @@
  2587. }
  2588.  
  2589. final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), _type, activeChar.getName(), _text);
  2590. - switch (_type)
  2591. + if (EventManager.getInstance().isRegistered(activeChar))
  2592. + EventManager.getInstance().getCurrentEvent().onSay(_type, activeChar, _text);
  2593. +
  2594. + _isInLMS = EventManager.getInstance().isRegistered(activeChar) && EventManager.getInstance().getCurrentEvent() instanceof LMS;
  2595. +
  2596. + if(_isInLMS)
  2597. + {
  2598. + activeChar.sendMessage("You cannot talk while in LMS");
  2599. + return;
  2600. + }
  2601. +
  2602. + switch (_type)
  2603. {
  2604. case TELL:
  2605. final L2PcInstance receiver = L2World.getInstance().getPlayer(_target);
  2606. Index: head-src/com/l2jfrozen/gameserver/Shutdown.java
  2607. ===================================================================
  2608. --- head-src/com/l2jfrozen/gameserver/Shutdown.java (revision 1132)
  2609. +++ head-src/com/l2jfrozen/gameserver/Shutdown.java (working copy)
  2610. @@ -23,6 +23,8 @@
  2611. import org.apache.log4j.Logger;
  2612.  
  2613. import com.l2jfrozen.Config;
  2614. +import com.l2jfrozen.gameserver.event.EventBuffer;
  2615. +import com.l2jfrozen.gameserver.event.EventManager;
  2616. import com.l2jfrozen.gameserver.controllers.GameTimeController;
  2617. import com.l2jfrozen.gameserver.controllers.TradeController;
  2618. import com.l2jfrozen.gameserver.datatables.CharSchemesTable;
  2619. @@ -706,6 +708,9 @@
  2620.  
  2621. CharSchemesTable.getInstance().onServerShutdown();
  2622.  
  2623. + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
  2624. + EventBuffer.getInstance().updateSQL();
  2625. +
  2626. // Save items on ground before closing
  2627. if (Config.SAVE_DROPPED_ITEM)
  2628. {
  2629. Index: head-src/com/l2jfrozen/gameserver/model/L2Character.java
  2630. ===================================================================
  2631. --- head-src/com/l2jfrozen/gameserver/model/L2Character.java (revision 1132)
  2632. +++ head-src/com/l2jfrozen/gameserver/model/L2Character.java (working copy)
  2633. @@ -47,6 +47,7 @@
  2634. import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable;
  2635. import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable.TeleportWhereType;
  2636. import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
  2637. +import com.l2jfrozen.gameserver.event.EventManager;
  2638. import com.l2jfrozen.gameserver.geo.GeoData;
  2639. import com.l2jfrozen.gameserver.geo.pathfinding.Node;
  2640. import com.l2jfrozen.gameserver.geo.pathfinding.PathFinding;
  2641. @@ -1006,6 +1007,53 @@
  2642. */
  2643. protected void doAttack(final L2Character target)
  2644. {
  2645. + if (this instanceof L2PcInstance)
  2646. + if (EventManager.getInstance().isRegistered((L2PcInstance) this))
  2647. + {
  2648. +
  2649. + if (target instanceof L2PcInstance)
  2650. + if (EventManager.getInstance().areTeammates(
  2651. + (L2PcInstance) this, (L2PcInstance) target)
  2652. + && !EventManager.getInstance().getBoolean(
  2653. + "friendlyFireEnabled"))
  2654. + {
  2655. + sendPacket(new ActionFailed());
  2656. + return;
  2657. + }
  2658. +
  2659. + if (!EventManager.getInstance().getCurrentEvent()
  2660. + .canAttack((L2PcInstance) this, target))
  2661. + {
  2662. + sendPacket(new ActionFailed());
  2663. + return;
  2664. + }
  2665. + }
  2666. +
  2667. + if (this instanceof L2Summon)
  2668. + {
  2669. + if (EventManager.getInstance().isRegistered(
  2670. + ((L2Summon) this).getOwner()))
  2671. + {
  2672. + if (target instanceof L2PcInstance)
  2673. + if (EventManager.getInstance()
  2674. + .areTeammates(((L2Summon) this).getOwner(),
  2675. + (L2PcInstance) target)
  2676. + && !EventManager.getInstance().getBoolean(
  2677. + "friendlyFireEnabled"))
  2678. + {
  2679. + sendPacket(new ActionFailed());
  2680. + return;
  2681. + }
  2682. +
  2683. + if (!EventManager.getInstance().getCurrentEvent()
  2684. + .canAttack(((L2Summon) this).getOwner(), target))
  2685. + {
  2686. + sendPacket(new ActionFailed());
  2687. + return;
  2688. + }
  2689. + }
  2690. + }
  2691. +
  2692. if (Config.DEBUG)
  2693. {
  2694. LOGGER.debug(getName() + " doAttack: target=" + target);
  2695. @@ -1360,6 +1408,10 @@
  2696. weaponInst.setChargedSoulshot(L2ItemInstance.CHARGED_NONE);
  2697. }
  2698.  
  2699. + if(this instanceof L2PcInstance && target instanceof L2PcInstance)
  2700. + if(EventManager.getInstance().isRegistered((L2PcInstance)this))
  2701. + EventManager.getInstance().getCurrentEvent().onHit((L2PcInstance)this,(L2PcInstance)target);
  2702. +
  2703. if (player != null)
  2704. {
  2705. if (player.isCursedWeaponEquiped())
  2706. @@ -1716,6 +1768,75 @@
  2707. */
  2708. public void doCast(final L2Skill skill)
  2709. {
  2710. + try{
  2711. + if(getTarget() != null)
  2712. + {
  2713. + if (this instanceof L2PcInstance)
  2714. + {
  2715. + if (EventManager.getInstance().isRegistered((L2PcInstance) this))
  2716. + {
  2717. + if (!EventManager.getInstance().getCurrentEvent()
  2718. + .canAttack((L2PcInstance) this, getTarget()))
  2719. + return;
  2720. +
  2721. + if (this.getTarget() instanceof L2PcInstance)
  2722. + if (EventManager.getInstance().areTeammates(
  2723. + (L2PcInstance) this,
  2724. + (L2PcInstance) this.getTarget())
  2725. + && !EventManager.getInstance().getBoolean(
  2726. + "friendlyFireEnabled")
  2727. + && skill.isOffensive())
  2728. + {
  2729. + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
  2730. + return;
  2731. + }
  2732. +
  2733. + if (!EventManager.getInstance().getCurrentEvent()
  2734. + .canAttack((L2PcInstance) this, this.getTarget()))
  2735. + {
  2736. + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
  2737. + return;
  2738. + }
  2739. + }
  2740. + }
  2741. +
  2742. + if (this instanceof L2Summon)
  2743. + {
  2744. + if(((L2Summon) this).getOwner() != null)
  2745. + if (EventManager.getInstance().isRegistered(
  2746. + ((L2Summon) this).getOwner()))
  2747. + {
  2748. + if (!EventManager.getInstance().getCurrentEvent()
  2749. + .canAttack(((L2Summon) this).getOwner(), getTarget()))
  2750. + return;
  2751. +
  2752. + if (this.getTarget() instanceof L2PcInstance)
  2753. + if (EventManager.getInstance().areTeammates(
  2754. + ((L2Summon) this).getOwner(),
  2755. + (L2PcInstance) this.getTarget())
  2756. + && !EventManager.getInstance().getBoolean(
  2757. + "friendlyFireEnabled")
  2758. + && skill.isOffensive())
  2759. + {
  2760. + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
  2761. + return;
  2762. + }
  2763. +
  2764. + if (!EventManager
  2765. + .getInstance()
  2766. + .getCurrentEvent()
  2767. + .canAttack(((L2Summon) this).getOwner(),
  2768. + this.getTarget()))
  2769. + {
  2770. + getAI().notifyEvent(CtrlEvent.EVT_CANCEL);
  2771. + return;
  2772. +
  2773. + }
  2774. + }
  2775. + }
  2776. + }
  2777. + }catch(ClassCastException e){}
  2778. +
  2779. final L2Character activeChar = this;
  2780.  
  2781. if (skill == null)
  2782. Index: head-src/com/l2jfrozen/gameserver/event/Simon.java
  2783. ===================================================================
  2784. --- head-src/com/l2jfrozen/gameserver/event/Simon.java (nonexistent)
  2785. +++ head-src/com/l2jfrozen/gameserver/event/Simon.java (working copy)
  2786. @@ -0,0 +1,308 @@
  2787. +package com.l2jfrozen.gameserver.event;
  2788. +
  2789. +import javolution.text.TextBuilder;
  2790. +
  2791. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  2792. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  2793. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  2794. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  2795. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  2796. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  2797. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  2798. +import com.l2jfrozen.util.random.Rnd;
  2799. +
  2800. +/**
  2801. + * @author Rizel
  2802. + *
  2803. + */
  2804. +public class Simon extends Event
  2805. +{
  2806. +
  2807. + private class Core implements Runnable
  2808. + {
  2809. + public void run()
  2810. + {
  2811. + try
  2812. + {
  2813. + switch (eventState)
  2814. + {
  2815. + case START:
  2816. + divideIntoTeams(1);
  2817. + preparePlayers();
  2818. + teleportToTeamPos();
  2819. + forceSitAll();
  2820. + unequip();
  2821. + setStatus(EventState.SAY);
  2822. + schedule(30000);
  2823. + break;
  2824. +
  2825. + case SAY:
  2826. + round++;
  2827. + say = createNewRandomString(getInt("lengthOfFirstWord") + getInt("increasePerRound") * round);
  2828. + sendToPlayers(say.toUpperCase());
  2829. + setStatus(EventState.CHECK);
  2830. + schedule(getInt("roundTime") * 1000);
  2831. + break;
  2832. +
  2833. + case CHECK:
  2834. + if (removeAfkers())
  2835. + {
  2836. + setAllToFalse();
  2837. + setStatus(EventState.SAY);
  2838. + schedule(getInt("roundTime") * 1000);
  2839. + }
  2840. + break;
  2841. +
  2842. + case END:
  2843. + setStatus(EventState.INACTIVE);
  2844. + forceStandAll();
  2845. +
  2846. + if (winner != null)
  2847. + {
  2848. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  2849. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event!");
  2850. + }
  2851. + else
  2852. + EventManager.getInstance().end("The match ended in a tie!");
  2853. + break;
  2854. + }
  2855. + }
  2856. + catch (Throwable e)
  2857. + {
  2858. + e.printStackTrace();
  2859. + EventManager.getInstance().end("Error! Event ended.");
  2860. + }
  2861. + }
  2862. + }
  2863. +
  2864. + private enum EventState
  2865. + {
  2866. + START, SAY, CHECK, END, INACTIVE
  2867. + }
  2868. +
  2869. + private EventState eventState;
  2870. +
  2871. + private Core task;
  2872. +
  2873. + private int round;
  2874. +
  2875. + private String say;
  2876. +
  2877. + private L2NpcInstance npc;
  2878. +
  2879. + private L2Spawn spawn;
  2880. +
  2881. + private CreatureSay message;
  2882. +
  2883. + private L2PcInstance winner;
  2884. +
  2885. + public Simon()
  2886. + {
  2887. + super();
  2888. + eventId = 6;
  2889. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  2890. + task = new Core();
  2891. + round = 0;
  2892. + spawn = null;
  2893. + npc = null;
  2894. + winner = null;
  2895. + }
  2896. +
  2897. + private String createNewRandomString(int size)
  2898. + {
  2899. + String str = "";
  2900. +
  2901. + for (int i = 0; i < size; i++)
  2902. + str = str + (char) (Rnd.nextInt(26) + 97);
  2903. +
  2904. + return str;
  2905. + }
  2906. +
  2907. + @Override
  2908. + protected void endEvent()
  2909. + {
  2910. + winner = players.head().getNext().getKey();
  2911. + setStatus(EventState.END);
  2912. + schedule(1);
  2913. +
  2914. + }
  2915. +
  2916. + @Override
  2917. + protected String getScorebar()
  2918. + {
  2919. + return "";
  2920. + }
  2921. +
  2922. + @Override
  2923. + public void onSay(int type, L2PcInstance player, String text)
  2924. + {
  2925. + if (eventState == EventState.CHECK && getStatus(player) != -1)
  2926. + {
  2927. + if (text.equalsIgnoreCase(say))
  2928. + {
  2929. + setStatus(player, 1);
  2930. + player.sendMessage("Correct!");
  2931. + increasePlayersScore(player);
  2932. + player.getAppearance().setNameColor(0, 255, 0);
  2933. + player.broadcastUserInfo();
  2934. + }
  2935. +
  2936. + else
  2937. + {
  2938. + setStatus(player, -1);
  2939. + player.sendMessage("Wrong!");
  2940. + player.getAppearance().setNameColor(255, 0, 0);
  2941. + player.broadcastUserInfo();
  2942. + }
  2943. +
  2944. + int falses = 0;
  2945. + L2PcInstance falsed = null;
  2946. + for (L2PcInstance p : getPlayerList())
  2947. + if (getStatus(p) == 0)
  2948. + {
  2949. + falses++;
  2950. + falsed = p;
  2951. + }
  2952. +
  2953. + if (falses == 1)
  2954. + {
  2955. + int count = 0;
  2956. + for (L2PcInstance pla : getPlayerList())
  2957. + if (getStatus(pla) == 1)
  2958. + count++;
  2959. +
  2960. + if (count >= 1)
  2961. + {
  2962. + falsed.sendMessage("Last one!");
  2963. + falsed.getAppearance().setNameColor(255, 0, 0);
  2964. + falsed.broadcastUserInfo();
  2965. + setStatus(falsed, -1);
  2966. + }
  2967. +
  2968. + if (count == 0)
  2969. + {
  2970. + winner = getPlayersWithStatus(0).head().getNext().getValue();
  2971. + setStatus(EventState.END);
  2972. + schedule(1);
  2973. + }
  2974. +
  2975. + }
  2976. +
  2977. + if (countOfPositiveStatus() == 1)
  2978. + {
  2979. + winner = getPlayersWithStatus(1).head().getNext().getValue();
  2980. + setStatus(EventState.END);
  2981. + schedule(1);
  2982. + }
  2983. +
  2984. + }
  2985. +
  2986. + }
  2987. +
  2988. + private boolean removeAfkers()
  2989. + {
  2990. +
  2991. + for (L2PcInstance player : getPlayerList())
  2992. + {
  2993. + if (getStatus(player) == 0)
  2994. + {
  2995. +
  2996. + player.sendMessage("Timeout!");
  2997. + player.getAppearance().setNameColor(255, 0, 0);
  2998. + player.broadcastUserInfo();
  2999. + setStatus(player, -1);
  3000. + }
  3001. +
  3002. + if (countOfPositiveStatus() == 1)
  3003. + {
  3004. + if (getPlayersWithStatus(1).size() == 1)
  3005. + winner = getPlayersWithStatus(1).head().getNext().getValue();
  3006. + else
  3007. + winner = null;
  3008. +
  3009. + setStatus(EventState.END);
  3010. + schedule(1);
  3011. + return false;
  3012. + }
  3013. + }
  3014. + return true;
  3015. + }
  3016. +
  3017. + @Override
  3018. + public void reset()
  3019. + {
  3020. + super.reset();
  3021. + round = 0;
  3022. + players.clear();
  3023. + say = "";
  3024. + npc.deleteMe();
  3025. + spawn.stopRespawn();
  3026. + SpawnTable.getInstance().deleteSpawn(spawn, true);
  3027. + npc = null;
  3028. + spawn = null;
  3029. + }
  3030. +
  3031. + @Override
  3032. + protected void schedule(int time)
  3033. + {
  3034. + tpm.scheduleGeneral(task, time);
  3035. + }
  3036. +
  3037. + private void sendToPlayers(String text)
  3038. + {
  3039. + message = new CreatureSay(npc.getObjectId(), 1, "Simon", text);
  3040. + for (L2PcInstance player : getPlayerList())
  3041. + player.sendPacket(message);
  3042. + }
  3043. +
  3044. + private void setAllToFalse()
  3045. + {
  3046. + for (L2PcInstance player : getPlayerList())
  3047. + if (getStatus(player) != -1)
  3048. + {
  3049. + setStatus(player, 0);
  3050. + player.getAppearance().setNameColor(255, 255, 255);
  3051. + player.broadcastUserInfo();
  3052. + }
  3053. + }
  3054. +
  3055. + private void setStatus(EventState s)
  3056. + {
  3057. + eventState = s;
  3058. + }
  3059. +
  3060. + @Override
  3061. + protected void showHtml(L2PcInstance player, int obj)
  3062. + {
  3063. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  3064. + TextBuilder sb = new TextBuilder();
  3065. +
  3066. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  3067. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: ?</td></tr></table>");
  3068. + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
  3069. + sb.append("<br><table width=270>");
  3070. +
  3071. + for (L2PcInstance p : getPlayersOfTeam(1))
  3072. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  3073. +
  3074. + sb.append("</table></body></html>");
  3075. + html.setHtml(sb.toString());
  3076. + player.sendPacket(html);
  3077. + }
  3078. +
  3079. + @Override
  3080. + protected void start()
  3081. + {
  3082. + int[] npcpos = getPosition("Simon", 1);
  3083. + spawn = spawnNPC(npcpos[0], npcpos[1], npcpos[2], getInt("simonNpcId"));
  3084. + npc = spawn.getLastSpawn();
  3085. + setStatus(EventState.START);
  3086. + schedule(1);
  3087. + }
  3088. +
  3089. + @Override
  3090. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  3091. + {
  3092. + return false;
  3093. + }
  3094. +}
  3095. \ No newline at end of file
  3096. Index: head-src/com/l2jfrozen/gameserver/event/dm.java
  3097. ===================================================================
  3098. --- head-src/com/l2jfrozen/gameserver/event/dm.java (nonexistent)
  3099. +++ head-src/com/l2jfrozen/gameserver/event/dm.java (working copy)
  3100. @@ -0,0 +1,139 @@
  3101. +package com.l2jfrozen.gameserver.event;
  3102. +
  3103. +import javolution.text.TextBuilder;
  3104. +
  3105. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  3106. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  3107. +
  3108. +public class dm extends Event
  3109. +{
  3110. +private class Core implements Runnable
  3111. +{
  3112. +public void run()
  3113. +{
  3114. +try
  3115. +{
  3116. +switch (eventState)
  3117. +{
  3118. +case START:
  3119. +divideIntoTeams(1);
  3120. +preparePlayers();
  3121. +teleportToTeamPos();
  3122. +forceSitAll();
  3123. +setStatus(EventState.FIGHT);
  3124. +debug("The event started with " + players.size() + " player");
  3125. +schedule(20000);
  3126. +break;
  3127. +
  3128. +case FIGHT:
  3129. +forceStandAll();
  3130. +setStatus(EventState.END);
  3131. +debug("The fight started");
  3132. +clock.startClock(getInt("matchTime"));
  3133. +break;
  3134. +
  3135. +case END:
  3136. +clock.setTime(0);
  3137. +L2PcInstance winner = getPlayerWithMaxScore();
  3138. +giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  3139. +setStatus(EventState.INACTIVE);
  3140. +debug("The event ended. Winner: " + winner.getName());
  3141. +EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " kills!");
  3142. +break;
  3143. +}
  3144. +}
  3145. +catch (Throwable e)
  3146. +{
  3147. +e.printStackTrace();
  3148. +EventManager.getInstance().end("Error! Event ended.");
  3149. +}
  3150. +}
  3151. +}
  3152. +
  3153. +private enum EventState
  3154. +{
  3155. +START, FIGHT, END, INACTIVE
  3156. +}
  3157. +
  3158. +private EventState eventState;
  3159. +
  3160. +private Core task;
  3161. +
  3162. +public dm()
  3163. +{
  3164. +super();
  3165. +eventId = 1;
  3166. +createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  3167. +task = new Core();
  3168. +}
  3169. +
  3170. +@Override
  3171. +protected void endEvent()
  3172. +{
  3173. +setStatus(EventState.END);
  3174. +clock.setTime(0);
  3175. +
  3176. +}
  3177. +
  3178. +@Override
  3179. +protected String getScorebar()
  3180. +{
  3181. +return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
  3182. +}
  3183. +
  3184. +@Override
  3185. +public void onDie(L2PcInstance victim, L2PcInstance killer)
  3186. +{
  3187. +super.onDie(victim, killer);
  3188. +addToResurrector(victim);
  3189. +}
  3190. +
  3191. +@Override
  3192. +public void onKill(L2PcInstance victim, L2PcInstance killer)
  3193. +{
  3194. +super.onKill(victim, killer);
  3195. +killer.addItem("Event", 6392, 1, killer, true);
  3196. +increasePlayersScore(killer);
  3197. +}
  3198. +
  3199. +@Override
  3200. +protected void schedule(int time)
  3201. +{
  3202. +tpm.scheduleGeneral(task, time);
  3203. +}
  3204. +
  3205. +private void setStatus(EventState s)
  3206. +{
  3207. +eventState = s;
  3208. +}
  3209. +
  3210. +@Override
  3211. +protected void showHtml(L2PcInstance player, int obj)
  3212. +{
  3213. +if (players.size() > 0)
  3214. +{
  3215. +NpcHtmlMessage html = new NpcHtmlMessage(obj);
  3216. +TextBuilder sb = new TextBuilder();
  3217. +
  3218. +sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  3219. +sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  3220. +sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
  3221. +sb.append("<br><table width=270>");
  3222. +
  3223. +for (L2PcInstance p : getPlayersOfTeam(1))
  3224. +sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  3225. +
  3226. +sb.append("</table></body></html>");
  3227. +html.setHtml(sb.toString());
  3228. +player.sendPacket(html);
  3229. +}
  3230. +}
  3231. +
  3232. +@Override
  3233. +protected void start()
  3234. +{
  3235. +setStatus(EventState.START);
  3236. +schedule(1);
  3237. +}
  3238. +
  3239. +}
  3240. \ No newline at end of file
  3241. Index: head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java
  3242. ===================================================================
  3243. --- head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java (nonexistent)
  3244. +++ head-src/com/l2jfrozen/gameserver/handler/skillhandlers/Bomb.java (working copy)
  3245. @@ -0,0 +1,30 @@
  3246. +package com.l2jfrozen.gameserver.handler.skillhandlers;
  3247. +
  3248. +import com.l2jfrozen.gameserver.event.EventManager;
  3249. +import com.l2jfrozen.gameserver.handler.ISkillHandler;
  3250. +import com.l2jfrozen.gameserver.model.L2Character;
  3251. +import com.l2jfrozen.gameserver.model.L2Object;
  3252. +import com.l2jfrozen.gameserver.model.L2Skill;
  3253. +import com.l2jfrozen.gameserver.model.L2Skill.SkillType;
  3254. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  3255. +
  3256. +public class Bomb implements ISkillHandler
  3257. +{
  3258. +private static final SkillType[] SKILL_IDS =
  3259. +{ SkillType.BOMB };
  3260. +
  3261. +public void useSkill(L2Character activeChar, L2Skill skill,
  3262. +L2Object[] targets)
  3263. +{
  3264. +
  3265. +if (!(activeChar instanceof L2PcInstance))
  3266. +return;
  3267. +
  3268. +EventManager.getInstance().getCurrentEvent().dropBomb((L2PcInstance)activeChar);
  3269. +}
  3270. +
  3271. +public SkillType[] getSkillIds()
  3272. +{
  3273. +return SKILL_IDS;
  3274. +}
  3275. +}
  3276. \ No newline at end of file
  3277. Index: head-src/com/l2jfrozen/gameserver/GameServer.java
  3278. ===================================================================
  3279. --- head-src/com/l2jfrozen/gameserver/GameServer.java (revision 1132)
  3280. +++ head-src/com/l2jfrozen/gameserver/GameServer.java (working copy)
  3281. @@ -78,6 +78,9 @@
  3282. import com.l2jfrozen.gameserver.datatables.xml.AugmentationData;
  3283. import com.l2jfrozen.gameserver.datatables.xml.ExperienceData;
  3284. import com.l2jfrozen.gameserver.datatables.xml.ZoneData;
  3285. +import com.l2jfrozen.gameserver.event.EventBuffer;
  3286. +import com.l2jfrozen.gameserver.event.EventManager;
  3287. +import com.l2jfrozen.gameserver.event.EventStats;
  3288. import com.l2jfrozen.gameserver.geo.GeoData;
  3289. import com.l2jfrozen.gameserver.geo.geoeditorcon.GeoEditorListener;
  3290. import com.l2jfrozen.gameserver.geo.pathfinding.PathFinding;
  3291. @@ -122,7 +125,6 @@
  3292. import com.l2jfrozen.gameserver.model.entity.Announcements;
  3293. import com.l2jfrozen.gameserver.model.entity.Hero;
  3294. import com.l2jfrozen.gameserver.model.entity.MonsterRace;
  3295. -import com.l2jfrozen.gameserver.model.entity.event.manager.EventManager;
  3296. import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
  3297. import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
  3298. import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSignsFestival;
  3299. @@ -559,7 +561,7 @@
  3300. else
  3301. LOGGER.info("All custom mods are Disabled.");
  3302.  
  3303. - Util.printSection("EventManager");
  3304. + /*Util.printSection("EventManager");
  3305. EventManager.getInstance().startEventRegistration();
  3306.  
  3307. if (EventManager.TVT_EVENT_ENABLED || EventManager.CTF_EVENT_ENABLED || EventManager.DM_EVENT_ENABLED)
  3308. @@ -572,7 +574,7 @@
  3309. LOGGER.info("DM Event is Enabled.");
  3310. }
  3311. else
  3312. - LOGGER.info("All events are Disabled.");
  3313. + LOGGER.info("All events are Disabled.");*/
  3314.  
  3315. if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
  3316. OfflineTradeTable.restoreOfflineTraders();
  3317. @@ -610,6 +612,11 @@
  3318. LOGGER.info("GameServer Started, free memory " + Memory.getFreeMemory() + " Mb of " + Memory.getTotalMemory() + " Mb");
  3319. LOGGER.info("Used memory: " + Memory.getUsedMemory() + " MB");
  3320.  
  3321. + EventManager.getInstance();
  3322. + EventStats.getInstance();
  3323. + if (EventManager.getInstance().getBoolean("eventBufferEnabled"))
  3324. + EventBuffer.getInstance();
  3325. +
  3326. Util.printSection("Java specific");
  3327. LOGGER.info("JRE name: " + System.getProperty("java.vendor"));
  3328. LOGGER.info("JRE specification version: " + System.getProperty("java.specification.version"));
  3329. Index: head-src/com/l2jfrozen/gameserver/event/Battlefield.java
  3330. ===================================================================
  3331. --- head-src/com/l2jfrozen/gameserver/event/Battlefield.java (nonexistent)
  3332. +++ head-src/com/l2jfrozen/gameserver/event/Battlefield.java (working copy)
  3333. @@ -0,0 +1,238 @@
  3334. +package com.l2jfrozen.gameserver.event;
  3335. +
  3336. +import java.util.Map;
  3337. +
  3338. +import javolution.text.TextBuilder;
  3339. +import javolution.util.FastMap;
  3340. +
  3341. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  3342. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  3343. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  3344. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  3345. +import com.l2jfrozen.gameserver.network.serverpackets.NpcInfo;
  3346. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  3347. +import com.l2jfrozen.util.random.Rnd;
  3348. +
  3349. +public class Battlefield extends Event
  3350. +{
  3351. + private class Core implements Runnable
  3352. + {
  3353. +
  3354. + public void run()
  3355. + {
  3356. + try{
  3357. + switch (eventState)
  3358. + {
  3359. + case START:
  3360. + divideIntoTeams(2);
  3361. + preparePlayers();
  3362. + teleportToTeamPos();
  3363. + createPartyOfTeam(1);
  3364. + createPartyOfTeam(2);
  3365. + forceSitAll();
  3366. + giveSkill();
  3367. + spawnBases();
  3368. + setStatus(EventState.FIGHT);
  3369. + schedule(20000);
  3370. + break;
  3371. +
  3372. + case FIGHT:
  3373. + forceStandAll();
  3374. + setStatus(EventState.END);
  3375. + clock.startClock(getInt("matchTime"));
  3376. + break;
  3377. +
  3378. + case END:
  3379. + clock.setTime(0);
  3380. + if (winnerTeam == 0)
  3381. + winnerTeam = getWinnerTeam();
  3382. +
  3383. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  3384. + unspawnBases();
  3385. + removeSkill();
  3386. + setStatus(EventState.INACTIVE);
  3387. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " points!");
  3388. + break;
  3389. + }
  3390. + }
  3391. + catch (Throwable e)
  3392. + {
  3393. + e.printStackTrace();
  3394. + EventManager.getInstance().end("Error! Event ended.");
  3395. + }
  3396. + }
  3397. +
  3398. + }
  3399. +
  3400. + private enum EventState
  3401. + {
  3402. + START, FIGHT, END, TELEPORT, INACTIVE
  3403. + }
  3404. +
  3405. + private EventState eventState;
  3406. +
  3407. + private Core task;
  3408. +
  3409. + private int winnerTeam;
  3410. +
  3411. + private FastMap<Integer,L2Spawn> bases;
  3412. +
  3413. + private FastMap<Integer,Integer> owners;
  3414. +
  3415. + public Battlefield()
  3416. + {
  3417. + super();
  3418. + eventId = 14;
  3419. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  3420. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  3421. + bases = new FastMap<Integer,L2Spawn>();
  3422. + owners = new FastMap<Integer,Integer>();
  3423. + task = new Core();
  3424. + winnerTeam = 0;
  3425. + }
  3426. +
  3427. + @Override
  3428. + protected void endEvent()
  3429. + {
  3430. + winnerTeam = players.head().getNext().getValue()[0];
  3431. +
  3432. + setStatus(EventState.END);
  3433. + schedule(1);
  3434. + }
  3435. +
  3436. + @Override
  3437. + protected String getScorebar()
  3438. + {
  3439. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  3440. + }
  3441. +
  3442. + @Override
  3443. + protected int getWinnerTeam()
  3444. + {
  3445. + if (teams.get(1).getScore() > teams.get(2).getScore())
  3446. + return 1;
  3447. + if (teams.get(2).getScore() > teams.get(1).getScore())
  3448. + return 2;
  3449. + if (teams.get(1).getScore() == teams.get(2).getScore())
  3450. + if (Rnd.nextInt(1) == 1)
  3451. + return 1;
  3452. + else
  3453. + return 2;
  3454. +
  3455. + return 1;
  3456. + }
  3457. +
  3458. + @Override
  3459. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  3460. + {
  3461. + super.onDie(victim, killer);
  3462. + addToResurrector(victim);
  3463. + }
  3464. +
  3465. + @Override
  3466. + protected void schedule(int time)
  3467. + {
  3468. + tpm.scheduleGeneral(task, time);
  3469. + }
  3470. +
  3471. + private void setStatus(EventState s)
  3472. + {
  3473. + eventState = s;
  3474. + }
  3475. +
  3476. + @Override
  3477. + protected void showHtml(L2PcInstance player, int obj)
  3478. + {
  3479. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  3480. + TextBuilder sb = new TextBuilder();
  3481. + sb.append("<html><body><table width=300>" + "<tr><td><center>Event phase</td></tr>" + "<tr><td><center>" + getString("eventName") + " - " + clock.getTime() + "</td></tr>" + "<tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr>" + "</table><br><table width=300>");
  3482. +
  3483. + int i = 0;
  3484. + for (EventTeam team : teams.values())
  3485. + {
  3486. + i++;
  3487. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  3488. + for (L2PcInstance p : getPlayersOfTeam(i))
  3489. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  3490. + }
  3491. +
  3492. + sb.append("</table><br></body></html>");
  3493. + html.setHtml(sb.toString());
  3494. + player.sendPacket(html);
  3495. +
  3496. + }
  3497. +
  3498. + @Override
  3499. + protected void start()
  3500. + {
  3501. + setStatus(EventState.START);
  3502. + schedule(1);
  3503. + }
  3504. +
  3505. + private void spawnBases()
  3506. + {
  3507. + for(int i = 1; i <= getInt("numOfBases"); i++)
  3508. + {
  3509. + bases.put(i, spawnNPC(getPosition("Base",i)[0],getPosition("Base",i)[1],getPosition("Base",i)[2],getInt("baseNpcId")));
  3510. + bases.get(i).getLastSpawn().setTitle("- Neutral -");
  3511. + owners.put(i, 0);
  3512. + }
  3513. + }
  3514. +
  3515. + private void unspawnBases()
  3516. + {
  3517. + for(L2Spawn base: bases.values())
  3518. + unspawnNPC(base);
  3519. + }
  3520. +
  3521. + @Override
  3522. + public void reset()
  3523. + {
  3524. + super.reset();
  3525. + bases.clear();
  3526. + owners.clear();
  3527. + }
  3528. +
  3529. + @Override
  3530. + protected void clockTick()
  3531. + {
  3532. + for(int owner : owners.values())
  3533. + if(owner != 0)
  3534. + teams.get(owner).increaseScore(1);
  3535. + }
  3536. +
  3537. + @Override
  3538. + public void useCapture(L2PcInstance player, L2NpcInstance base)
  3539. + {
  3540. + if(base.getNpcId() != getInt("baseNpcId"))
  3541. + return;
  3542. +
  3543. + for(Map.Entry<Integer, L2Spawn> baseSpawn: bases.entrySet())
  3544. + if(baseSpawn.getValue().getLastSpawn().getObjectId() == base.getObjectId())
  3545. + {
  3546. + if(owners.get(baseSpawn.getKey()) == getTeam(player))
  3547. + return;
  3548. +
  3549. + owners.getEntry(baseSpawn.getKey()).setValue(getTeam(player));
  3550. + baseSpawn.getValue().getLastSpawn().setTitle("- "+teams.get(getTeam(player)).getName()+" -");
  3551. + for(L2PcInstance p : getPlayerList())
  3552. + p.sendPacket(new NpcInfo(baseSpawn.getValue().getLastSpawn(), p));
  3553. +
  3554. + announce(getPlayerList(),"The "+teams.get(getTeam(player)).getName()+" team captured a base!");
  3555. + increasePlayersScore(player);
  3556. + player.addItem("Event", 6392, 2, player, true);
  3557. + }
  3558. + }
  3559. +
  3560. + private void removeSkill()
  3561. + {
  3562. + for (L2PcInstance player : getPlayerList())
  3563. + player.removeSkill(SkillTable.getInstance().getInfo(getInt("captureSkillId"), 1), false);
  3564. + }
  3565. +
  3566. + private void giveSkill()
  3567. + {
  3568. + for (L2PcInstance player : getPlayerList())
  3569. + player.addSkill(SkillTable.getInstance().getInfo(getInt("captureSkillId"), 1), false);
  3570. + }
  3571. +}
  3572. \ No newline at end of file
  3573. Index: head-src/com/l2jfrozen/gameserver/event/Bomb.java
  3574. ===================================================================
  3575. --- head-src/com/l2jfrozen/gameserver/event/Bomb.java (nonexistent)
  3576. +++ head-src/com/l2jfrozen/gameserver/event/Bomb.java (working copy)
  3577. @@ -0,0 +1,261 @@
  3578. +package com.l2jfrozen.gameserver.event;
  3579. +
  3580. +import javolution.text.TextBuilder;
  3581. +import javolution.util.FastList;
  3582. +import javolution.util.FastMap;
  3583. +
  3584. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  3585. +import com.l2jfrozen.gameserver.model.L2Object;
  3586. +import com.l2jfrozen.gameserver.model.L2Skill;
  3587. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  3588. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  3589. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  3590. +import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillLaunched;
  3591. +import com.l2jfrozen.gameserver.network.serverpackets.MagicSkillUser;
  3592. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  3593. +import com.l2jfrozen.gameserver.network.serverpackets.NpcInfo;
  3594. +import com.l2jfrozen.util.random.Rnd;
  3595. +
  3596. +public class Bomb extends Event
  3597. +{
  3598. + private class Bomber implements Runnable
  3599. + {
  3600. + public void run()
  3601. + {
  3602. + explode(bombs.head().getNext().getKey());
  3603. + bombs.remove(bombs.head().getNext().getKey());
  3604. + }
  3605. + }
  3606. +
  3607. + private class Core implements Runnable
  3608. + {
  3609. + public void run()
  3610. + {
  3611. + try
  3612. + {
  3613. + switch (eventState)
  3614. + {
  3615. + case START:
  3616. + divideIntoTeams(2);
  3617. + preparePlayers();
  3618. + teleportToTeamPos();
  3619. + createPartyOfTeam(1);
  3620. + createPartyOfTeam(2);
  3621. + forceSitAll();
  3622. + unequip();
  3623. + giveSkill();
  3624. + debug("The event initialized with " + players.size() + " players");
  3625. + setStatus(EventState.FIGHT);
  3626. + schedule(20000);
  3627. + break;
  3628. +
  3629. + case FIGHT:
  3630. + forceStandAll();
  3631. + setStatus(EventState.END);
  3632. + debug("The fight started");
  3633. + clock.startClock(getInt("matchTime"));
  3634. + break;
  3635. +
  3636. + case END:
  3637. + clock.setTime(0);
  3638. + if (winnerTeam == 0)
  3639. + winnerTeam = getWinnerTeam();
  3640. +
  3641. + removeSkill();
  3642. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  3643. + debug("The event ended. Winner: " + winnerTeam);
  3644. + setStatus(EventState.INACTIVE);
  3645. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " kills!");
  3646. + break;
  3647. + }
  3648. + }
  3649. + catch (Throwable e)
  3650. + {
  3651. + e.printStackTrace();
  3652. + EventManager.getInstance().end("Error! Event ended.");
  3653. + }
  3654. + }
  3655. + }
  3656. +
  3657. + private enum EventState
  3658. + {
  3659. + START, FIGHT, END, TELEPORT, INACTIVE
  3660. + }
  3661. +
  3662. + private EventState eventState;
  3663. +
  3664. + private Core task;
  3665. +
  3666. + private FastMap<L2Spawn, L2PcInstance> bombs;
  3667. +
  3668. + private Bomber bomber;
  3669. +
  3670. + public Bomb()
  3671. + {
  3672. + super();
  3673. + eventId = 12;
  3674. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  3675. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  3676. + task = new Core();
  3677. + bomber = new Bomber();
  3678. + bombs = new FastMap<L2Spawn, L2PcInstance>();
  3679. + winnerTeam = 0;
  3680. + }
  3681. +
  3682. + @Override
  3683. + public void dropBomb(L2PcInstance player)
  3684. + {
  3685. + bombs.put(spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("bombNpcId")), player);
  3686. + bombs.tail().getPrevious().getKey().getLastSpawn().setTitle((getTeam(player) == 1 ? "Blue" : "Red"));
  3687. + bombs.tail().getPrevious().getKey().getLastSpawn().broadcastStatusUpdate();
  3688. +
  3689. + for(L2PcInstance p : getPlayerList())
  3690. + p.sendPacket(new NpcInfo(bombs.tail().getPrevious().getKey().getLastSpawn(), p));
  3691. +
  3692. + tpm.scheduleGeneral(bomber, 3000);
  3693. + }
  3694. +
  3695. + @Override
  3696. + protected void endEvent()
  3697. + {
  3698. + winnerTeam = players.head().getNext().getValue()[0];
  3699. +
  3700. + setStatus(EventState.END);
  3701. + clock.setTime(0);
  3702. +
  3703. + }
  3704. +
  3705. + private void explode(L2Spawn bomb)
  3706. + {
  3707. + FastList<L2Object> victims = new FastList<L2Object>();
  3708. +
  3709. + for (L2PcInstance player : getPlayerList())
  3710. + {
  3711. + if(player == null)
  3712. + continue;
  3713. +
  3714. + if(player.isInvul())
  3715. + continue;
  3716. +
  3717. + if (getTeam(bombs.get(bomb)) != getTeam(player) && Math.sqrt(player.getPlanDistanceSq(bomb.getLastSpawn())) <= getInt("bombRadius"))
  3718. + {
  3719. + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, bomb.getLastSpawn());
  3720. + increasePlayersScore(bombs.get(bomb));
  3721. + EventStats.getInstance().tempTable.get(player.getObjectId())[2] = EventStats.getInstance().tempTable.get(player.getObjectId())[2] + 1;
  3722. + addToResurrector(player);
  3723. +
  3724. + victims.add(player);
  3725. +
  3726. + if (getTeam(player) == 1)
  3727. + teams.get(2).increaseScore();
  3728. + if (getTeam(player) == 2)
  3729. + teams.get(1).increaseScore();
  3730. + }
  3731. + if (victims.size() != 0)
  3732. + {
  3733. + bomb.getLastSpawn().broadcastPacket(new MagicSkillUser(bomb.getLastSpawn(), (L2PcInstance) victims.head().getNext().getValue(), 18, 1, 0, 0));
  3734. + bomb.getLastSpawn().broadcastPacket(new MagicSkillLaunched(bomb.getLastSpawn(), 18, 1, victims.toArray(new L2Object[victims.size()])));
  3735. + victims.clear();
  3736. + }
  3737. + }
  3738. + unspawnNPC(bomb);
  3739. + }
  3740. +
  3741. + @Override
  3742. + protected String getScorebar()
  3743. + {
  3744. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  3745. + }
  3746. +
  3747. + @Override
  3748. + protected int getWinnerTeam()
  3749. + {
  3750. + if (teams.get(1).getScore() > teams.get(2).getScore())
  3751. + return 1;
  3752. + if (teams.get(2).getScore() > teams.get(1).getScore())
  3753. + return 2;
  3754. + if (teams.get(1).getScore() == teams.get(2).getScore())
  3755. + if (Rnd.nextInt(1) == 1)
  3756. + return 1;
  3757. + else
  3758. + return 2;
  3759. +
  3760. + return 1;
  3761. + }
  3762. +
  3763. + private void giveSkill()
  3764. + {
  3765. + for (L2PcInstance player : getPlayerList())
  3766. + player.addSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
  3767. + }
  3768. +
  3769. +
  3770. + @Override
  3771. + public void onLogout(L2PcInstance player)
  3772. + {
  3773. + player.removeSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
  3774. + }
  3775. +
  3776. + @Override
  3777. + public boolean onUseMagic(L2Skill skill)
  3778. + {
  3779. + if (skill.getId() == getInt("bombSkillId"))
  3780. + return true;
  3781. +
  3782. + return false;
  3783. +
  3784. + }
  3785. +
  3786. + private void removeSkill()
  3787. + {
  3788. + for (L2PcInstance player : getPlayerList())
  3789. + player.removeSkill(SkillTable.getInstance().getInfo(getInt("bombSkillId"), 1), false);
  3790. + }
  3791. +
  3792. + @Override
  3793. + protected void schedule(int time)
  3794. + {
  3795. + tpm.scheduleGeneral(task, time);
  3796. + }
  3797. +
  3798. + private void setStatus(EventState s)
  3799. + {
  3800. + eventState = s;
  3801. + }
  3802. +
  3803. + @Override
  3804. + protected void showHtml(L2PcInstance player, int obj)
  3805. + {
  3806. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  3807. + TextBuilder sb = new TextBuilder();
  3808. +
  3809. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  3810. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  3811. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  3812. + sb.append("<br><table width=270>");
  3813. + int i = 0;
  3814. + for (EventTeam team : teams.values())
  3815. + {
  3816. + i++;
  3817. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  3818. + for (L2PcInstance p : getPlayersOfTeam(i))
  3819. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  3820. + }
  3821. +
  3822. + sb.append("</table></body></html>");
  3823. + html.setHtml(sb.toString());
  3824. + player.sendPacket(html);
  3825. +
  3826. + }
  3827. +
  3828. + @Override
  3829. + protected void start()
  3830. + {
  3831. + setStatus(EventState.START);
  3832. + schedule(1);
  3833. + }
  3834. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  3835. + {
  3836. + return false;
  3837. + }
  3838. +}
  3839. \ No newline at end of file
  3840. Index: head-src/com/l2jfrozen/gameserver/event/CTF.java
  3841. ===================================================================
  3842. --- head-src/com/l2jfrozen/gameserver/event/CTF.java (nonexistent)
  3843. +++ head-src/com/l2jfrozen/gameserver/event/CTF.java (working copy)
  3844. @@ -0,0 +1,401 @@
  3845. +package com.l2jfrozen.gameserver.event;
  3846. +
  3847. +import javolution.text.TextBuilder;
  3848. +
  3849. +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  3850. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  3851. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  3852. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  3853. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  3854. +import com.l2jfrozen.gameserver.model.Inventory;
  3855. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  3856. +import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate;
  3857. +import com.l2jfrozen.gameserver.network.serverpackets.ItemList;
  3858. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  3859. +import com.l2jfrozen.gameserver.network.serverpackets.SocialAction;
  3860. +import com.l2jfrozen.gameserver.templates.L2EtcItemType;
  3861. +
  3862. +public class CTF extends Event
  3863. +{
  3864. + private class Core implements Runnable
  3865. + {
  3866. +
  3867. + public void run()
  3868. + {
  3869. + try
  3870. + {
  3871. + switch (eventState)
  3872. + {
  3873. + case START:
  3874. + divideIntoTeams(2);
  3875. + preparePlayers();
  3876. + teleportToTeamPos();
  3877. + createPartyOfTeam(1);
  3878. + createPartyOfTeam(2);
  3879. + forceSitAll();
  3880. + spawnFlagsAndHolders();
  3881. + setStatus(EventState.FIGHT);
  3882. + debug("The event started with " + players.size() + " players");
  3883. + schedule(20000);
  3884. + break;
  3885. +
  3886. + case FIGHT:
  3887. + forceStandAll();
  3888. + setStatus(EventState.END);
  3889. + debug("The fight started");
  3890. + clock.startClock(getInt("matchTime"));
  3891. + break;
  3892. +
  3893. + case END:
  3894. + clock.setTime(0);
  3895. + if (winnerTeam == 0)
  3896. + winnerTeam = getWinnerTeam();
  3897. +
  3898. + unspawnFlagsAndHolders();
  3899. + debug("The flags unspawned");
  3900. + if (playerWithRedFlag != null)
  3901. + unequipFlag(playerWithRedFlag);
  3902. + if (playerWithBlueFlag != null)
  3903. + unequipFlag(playerWithBlueFlag);
  3904. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  3905. + setStatus(EventState.INACTIVE);
  3906. + debug("The event ended. Winner: " + winnerTeam);
  3907. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Flags taken!");
  3908. + break;
  3909. + }
  3910. + }
  3911. + catch (Throwable e)
  3912. + {
  3913. + e.printStackTrace();
  3914. + EventManager.getInstance().end("Error! Event ended.");
  3915. + }
  3916. + }
  3917. + }
  3918. +
  3919. + private enum EventState
  3920. + {
  3921. + START, FIGHT, END, TELEPORT, INACTIVE
  3922. + }
  3923. +
  3924. + private EventState eventState;
  3925. +
  3926. + private Core task;
  3927. +
  3928. + private L2Spawn redFlagNpc;
  3929. + private L2Spawn blueFlagNpc;
  3930. + private L2Spawn redHolderNpc;
  3931. + private L2Spawn blueHolderNpc;
  3932. + private int redFlagStatus;
  3933. + private int blueFlagStatus;
  3934. + private L2PcInstance playerWithRedFlag;
  3935. + private L2PcInstance playerWithBlueFlag;
  3936. +
  3937. + public CTF()
  3938. + {
  3939. + super();
  3940. + eventId = 10;
  3941. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  3942. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  3943. + task = new Core();
  3944. + winnerTeam = 0;
  3945. + playerWithRedFlag = null;
  3946. + playerWithBlueFlag = null;
  3947. + blueFlagStatus = 0;
  3948. + redFlagStatus = 0;
  3949. +
  3950. + }
  3951. +
  3952. + @Override
  3953. + protected void endEvent()
  3954. + {
  3955. + winnerTeam = players.head().getNext().getValue()[0];
  3956. +
  3957. + setStatus(EventState.END);
  3958. + clock.setTime(0);
  3959. +
  3960. + }
  3961. +
  3962. + private void equipFlag(L2PcInstance player, int flag)
  3963. + {
  3964. + L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  3965. + if (wpn != null)
  3966. + player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_RHAND);
  3967. +
  3968. + wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
  3969. + if (wpn != null)
  3970. + player.getInventory().unEquipItemInBodySlotAndRecord(Inventory.PAPERDOLL_LHAND);
  3971. +
  3972. + player.getInventory().equipItem(ItemTable.getInstance().createItem("", 6718, 1, player, null));
  3973. + player.broadcastPacket(new SocialAction(player.getObjectId(), 16));
  3974. + switch (flag)
  3975. + {
  3976. + case 1:
  3977. + playerWithBlueFlag = player;
  3978. + announce(getPlayerList(), player.getName() + " took the Blue flag!");
  3979. + unspawnNPC(blueFlagNpc);
  3980. + break;
  3981. + case 2:
  3982. + playerWithRedFlag = player;
  3983. + announce(getPlayerList(), player.getName() + " took the Red flag!");
  3984. + unspawnNPC(redFlagNpc);
  3985. + break;
  3986. + default:
  3987. + break;
  3988. + }
  3989. + player.broadcastUserInfo();
  3990. + CreatureSay cs = new CreatureSay(player.getObjectId(), 15, ":", "You got it! Run back! ::"); // 8D
  3991. + player.sendPacket(cs);
  3992. + }
  3993. +
  3994. + @Override
  3995. + protected String getScorebar()
  3996. + {
  3997. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  3998. + }
  3999. +
  4000. + @Override
  4001. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  4002. + {
  4003. + super.onDie(victim, killer);
  4004. + if (playerWithRedFlag == victim)
  4005. + {
  4006. + announce(getPlayerList(), victim.getName() + " dropped the Red flag!");
  4007. + redFlagStatus = 2;
  4008. + unequipFlag(victim);
  4009. + redFlagNpc = spawnNPC(victim.getX(), victim.getY(), victim.getZ(), getInt("redFlagId"));
  4010. + }
  4011. + if (playerWithBlueFlag == victim)
  4012. + {
  4013. + announce(getPlayerList(), victim.getName() + " dropped the Blue flag!");
  4014. + blueFlagStatus = 2;
  4015. + unequipFlag(victim);
  4016. + blueFlagNpc = spawnNPC(victim.getX(), victim.getY(), victim.getZ(), getInt("blueFlagId"));
  4017. + }
  4018. +
  4019. + addToResurrector(victim);
  4020. + }
  4021. +
  4022. + @Override
  4023. + public void onLogout(L2PcInstance player)
  4024. + {
  4025. + super.onLogout(player);
  4026. +
  4027. + if (playerWithRedFlag == player)
  4028. + {
  4029. + announce(getPlayerList(), player.getName() + " dropped the Red flag!");
  4030. + redFlagStatus = 2;
  4031. + unequipFlag(player);
  4032. + redFlagNpc = spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("redFlagId"));
  4033. + }
  4034. + if (playerWithBlueFlag == player)
  4035. + {
  4036. + announce(getPlayerList(), player.getName() + " dropped the Blue flag!");
  4037. + blueFlagStatus = 2;
  4038. + unequipFlag(player);
  4039. + blueFlagNpc = spawnNPC(player.getX(), player.getY(), player.getZ(), getInt("blueFlagId"));
  4040. + }
  4041. +
  4042. + }
  4043. +
  4044. + @Override
  4045. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  4046. + {
  4047. + if (!(npc.getNpcId() == getInt("blueFlagId") || npc.getNpcId() == getInt("blueFlagHolderId") || npc.getNpcId() == getInt("redFlagId") || npc.getNpcId() == getInt("redFlagHolderId")))
  4048. + return false;
  4049. +
  4050. + //Blue holder
  4051. + if (npc.getNpcId() == getInt("blueFlagHolderId"))
  4052. + if (player == playerWithRedFlag && blueFlagStatus == 0)
  4053. + {
  4054. + announce(getPlayerList(), "The Blue team scored!");
  4055. + teams.get(getTeam(player)).increaseScore();
  4056. + increasePlayersScore(player);
  4057. + player.addItem("Event", 6392, 4, player, true);
  4058. + returnFlag(2);
  4059. + }
  4060. +
  4061. + //Red holder
  4062. + if (npc.getNpcId() == getInt("redFlagHolderId"))
  4063. + if (player == playerWithBlueFlag && redFlagStatus == 0)
  4064. + {
  4065. + announce(getPlayerList(), "The Red team scored!");
  4066. + teams.get(getTeam(player)).increaseScore();
  4067. + increasePlayersScore(player);
  4068. + player.addItem("Event", 6392, 4, player, true);
  4069. + returnFlag(1);
  4070. + }
  4071. +
  4072. + //Blue flag
  4073. + if (npc.getNpcId() == getInt("blueFlagId"))
  4074. + {
  4075. + if (blueFlagStatus == 2)
  4076. + {
  4077. + //blue player
  4078. + if (getTeam(player) == 1)
  4079. + returnFlag(1);
  4080. +
  4081. + //red player
  4082. + if (getTeam(player) == 2)
  4083. + equipFlag(player, 1);
  4084. + }
  4085. + if (blueFlagStatus == 0)
  4086. + if (getTeam(player) == 2)
  4087. + {
  4088. + equipFlag(player, 1);
  4089. + unspawnNPC(blueFlagNpc);
  4090. + blueFlagStatus = 1;
  4091. + }
  4092. +
  4093. + }
  4094. +
  4095. + //Red flag
  4096. + if (npc.getNpcId() == getInt("redFlagId"))
  4097. + {
  4098. + if (redFlagStatus == 2)
  4099. + {
  4100. + //red player
  4101. + if (getTeam(player) == 2)
  4102. + returnFlag(2);
  4103. +
  4104. + //blue player
  4105. + if (getTeam(player) == 1)
  4106. + equipFlag(player, 2);
  4107. + }
  4108. + if (redFlagStatus == 0)
  4109. + if (getTeam(player) == 1)
  4110. + {
  4111. + equipFlag(player, 2);
  4112. + unspawnNPC(redFlagNpc);
  4113. + redFlagStatus = 1;
  4114. + }
  4115. + }
  4116. + return true;
  4117. + }
  4118. +
  4119. + @Override
  4120. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  4121. + {
  4122. + if (playerWithRedFlag == player || playerWithBlueFlag == player)
  4123. + return false;
  4124. +
  4125. + if (item.getItemType() == L2EtcItemType.POTION)
  4126. + return false;
  4127. +
  4128. + return true;
  4129. + }
  4130. +
  4131. + private void returnFlag(int flag)
  4132. + {
  4133. + int[] pos;
  4134. + switch (flag)
  4135. + {
  4136. + case 1:
  4137. + if (playerWithBlueFlag != null)
  4138. + unequipFlag(playerWithBlueFlag);
  4139. + if (blueFlagStatus == 2)
  4140. + unspawnNPC(blueFlagNpc);
  4141. +
  4142. + pos = getPosition("BlueFlag", 1);
  4143. + blueFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("blueFlagId"));
  4144. + blueFlagStatus = 0;
  4145. + announce(getPlayerList(), "The Blue flag returned!");
  4146. + break;
  4147. +
  4148. + case 2:
  4149. + if (playerWithRedFlag != null)
  4150. + unequipFlag(playerWithRedFlag);
  4151. + if (redFlagStatus == 2)
  4152. + unspawnNPC(redFlagNpc);
  4153. +
  4154. + pos = getPosition("RedFlag", 1);
  4155. + redFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("redFlagId"));
  4156. + redFlagStatus = 0;
  4157. + announce(getPlayerList(), "The Red flag returned!");
  4158. + break;
  4159. + }
  4160. + }
  4161. +
  4162. + @Override
  4163. + protected void schedule(int time)
  4164. + {
  4165. + tpm.scheduleGeneral(task, time);
  4166. + }
  4167. +
  4168. + private void setStatus(EventState s)
  4169. + {
  4170. + eventState = s;
  4171. + }
  4172. +
  4173. + @Override
  4174. + protected void showHtml(L2PcInstance player, int obj)
  4175. + {
  4176. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  4177. + TextBuilder sb = new TextBuilder();
  4178. +
  4179. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  4180. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  4181. + sb.append("<center><table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  4182. + sb.append("<br><table width=270>");
  4183. + int i = 0;
  4184. + for (EventTeam team : teams.values())
  4185. + {
  4186. + i++;
  4187. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  4188. + for (L2PcInstance p : getPlayersOfTeam(i))
  4189. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  4190. + }
  4191. +
  4192. + sb.append("</table></body></html>");
  4193. + html.setHtml(sb.toString());
  4194. + player.sendPacket(html);
  4195. +
  4196. + }
  4197. +
  4198. + private void spawnFlagsAndHolders()
  4199. + {
  4200. + int[] pos = getPosition("BlueFlag", 1);
  4201. + blueFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("blueFlagId"));
  4202. + blueHolderNpc = spawnNPC(pos[0]+50, pos[1], pos[2], getInt("blueFlagHolderId"));
  4203. +
  4204. + pos = getPosition("RedFlag", 1);
  4205. + redFlagNpc = spawnNPC(pos[0], pos[1], pos[2], getInt("redFlagId"));
  4206. + redHolderNpc = spawnNPC(pos[0]+50, pos[1], pos[2], getInt("redFlagHolderId"));
  4207. + debug("The flags spawned.");
  4208. + }
  4209. +
  4210. + @Override
  4211. + protected void start()
  4212. + {
  4213. + setStatus(EventState.START);
  4214. + schedule(1);
  4215. + }
  4216. +
  4217. + private void unequipFlag(L2PcInstance player)
  4218. + {
  4219. + L2ItemInstance wpn = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
  4220. + if (wpn != null)
  4221. + {
  4222. + L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(wpn.getItem().getBodyPart());
  4223. + player.getInventory().destroyItemByItemId("", 6718, 1, player, null);
  4224. + InventoryUpdate iu = new InventoryUpdate();
  4225. + for (L2ItemInstance element : unequiped)
  4226. + iu.addModifiedItem(element);
  4227. + player.sendPacket(iu);
  4228. + player.sendPacket(new ItemList(player, true));
  4229. + player.broadcastUserInfo();
  4230. + }
  4231. +
  4232. + if (player == playerWithRedFlag)
  4233. + playerWithRedFlag = null;
  4234. + if (player == playerWithBlueFlag)
  4235. + playerWithBlueFlag = null;
  4236. + }
  4237. +
  4238. + private void unspawnFlagsAndHolders()
  4239. + {
  4240. + unspawnNPC(blueFlagNpc);
  4241. + unspawnNPC(blueHolderNpc);
  4242. + unspawnNPC(redFlagNpc);
  4243. + unspawnNPC(redHolderNpc);
  4244. + }
  4245. +}
  4246. \ No newline at end of file
  4247. Index: head-src/com/l2jfrozen/gameserver/event/Domination.java
  4248. ===================================================================
  4249. --- head-src/com/l2jfrozen/gameserver/event/Domination.java (nonexistent)
  4250. +++ head-src/com/l2jfrozen/gameserver/event/Domination.java (working copy)
  4251. @@ -0,0 +1,197 @@
  4252. +package com.l2jfrozen.gameserver.event;
  4253. +
  4254. +import javolution.text.TextBuilder;
  4255. +import javolution.util.FastList;
  4256. +
  4257. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  4258. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  4259. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  4260. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  4261. +
  4262. +public class Domination extends Event
  4263. +{
  4264. + private class Core implements Runnable
  4265. + {
  4266. + public void run()
  4267. + {
  4268. + try
  4269. + {
  4270. + switch (eventState)
  4271. + {
  4272. + case START:
  4273. + divideIntoTeams(2);
  4274. + preparePlayers();
  4275. + teleportToTeamPos();
  4276. + createPartyOfTeam(1);
  4277. + createPartyOfTeam(2);
  4278. + forceSitAll();
  4279. + debug("The event started with " + players.size() + " player");
  4280. + setStatus(EventState.FIGHT);
  4281. + schedule(20000);
  4282. + break;
  4283. +
  4284. + case FIGHT:
  4285. + forceStandAll();
  4286. + setStatus(EventState.END);
  4287. + debug("The event started");
  4288. + clock.startClock(getInt("matchTime"));
  4289. + break;
  4290. +
  4291. + case END:
  4292. + clock.setTime(0);
  4293. + if (winnerTeam == 0)
  4294. + winnerTeam = getWinnerTeam();
  4295. +
  4296. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  4297. + unSpawnZones();
  4298. + setStatus(EventState.INACTIVE);
  4299. + debug("The event ended. Winner: " + winnerTeam);
  4300. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Domination points!");
  4301. + break;
  4302. + }
  4303. + }
  4304. + catch (Throwable e)
  4305. + {
  4306. + e.printStackTrace();
  4307. + EventManager.getInstance().end("Error! Event ended.");
  4308. + }
  4309. + }
  4310. + }
  4311. +
  4312. + private enum EventState
  4313. + {
  4314. + START, FIGHT, END, INACTIVE
  4315. + }
  4316. +
  4317. + private EventState eventState;
  4318. +
  4319. + private Core task;
  4320. +
  4321. + private FastList<L2Spawn> zones;
  4322. +
  4323. + public Domination()
  4324. + {
  4325. + super();
  4326. + eventId = 2;
  4327. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  4328. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  4329. + task = new Core();
  4330. + zones = new FastList<L2Spawn>();
  4331. + winnerTeam = 0;
  4332. + }
  4333. +
  4334. + @Override
  4335. + protected void clockTick()
  4336. + {
  4337. + int team1 = 0;
  4338. + int team2 = 0;
  4339. +
  4340. + for (L2PcInstance player : getPlayerList())
  4341. + switch (getTeam(player))
  4342. + {
  4343. + case 1:
  4344. + if (Math.sqrt(player.getPlanDistanceSq(zones.getFirst().getLastSpawn())) <= getInt("zoneRadius"))
  4345. + team1++;
  4346. + break;
  4347. +
  4348. + case 2:
  4349. + if (Math.sqrt(player.getPlanDistanceSq(zones.getFirst().getLastSpawn())) <= getInt("zoneRadius"))
  4350. + team2++;
  4351. + break;
  4352. + }
  4353. +
  4354. + if (team1 > team2)
  4355. + {
  4356. + for (L2PcInstance player : getPlayersOfTeam(1))
  4357. + increasePlayersScore(player);
  4358. + teams.get(1).increaseScore();
  4359. + }
  4360. +
  4361. + if (team2 > team1)
  4362. + {
  4363. + for (L2PcInstance player : getPlayersOfTeam(2))
  4364. + increasePlayersScore(player);
  4365. + teams.get(2).increaseScore();
  4366. + }
  4367. +
  4368. + }
  4369. +
  4370. + @Override
  4371. + protected void endEvent()
  4372. + {
  4373. + setStatus(EventState.END);
  4374. + clock.setTime(0);
  4375. +
  4376. + }
  4377. +
  4378. + @Override
  4379. + protected String getScorebar()
  4380. + {
  4381. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  4382. + }
  4383. +
  4384. + @Override
  4385. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  4386. + {
  4387. + super.onDie(victim, killer);
  4388. + killer.addItem("Event", 6392, 1, killer, true);
  4389. + addToResurrector(victim);
  4390. + }
  4391. +
  4392. + @Override
  4393. + protected void schedule(int time)
  4394. + {
  4395. + tpm.scheduleGeneral(task, time);
  4396. + }
  4397. +
  4398. + private void setStatus(EventState s)
  4399. + {
  4400. + eventState = s;
  4401. + }
  4402. +
  4403. + @Override
  4404. + protected void showHtml(L2PcInstance player, int obj)
  4405. + {
  4406. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  4407. + TextBuilder sb = new TextBuilder();
  4408. +
  4409. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  4410. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  4411. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  4412. + sb.append("<br><table width=270>");
  4413. + int i = 0;
  4414. + for (EventTeam team : teams.values())
  4415. + {
  4416. + i++;
  4417. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  4418. + for (L2PcInstance p : getPlayersOfTeam(i))
  4419. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  4420. + }
  4421. +
  4422. + sb.append("</table></body></html>");
  4423. + html.setHtml(sb.toString());
  4424. + player.sendPacket(html);
  4425. +
  4426. + }
  4427. +
  4428. + @Override
  4429. + protected void start()
  4430. + {
  4431. + int[] npcpos = getPosition("Zone", 1);
  4432. + zones.add(spawnNPC(npcpos[0], npcpos[1], npcpos[2], getInt("zoneNpcId")));
  4433. + setStatus(EventState.START);
  4434. + schedule(1);
  4435. + }
  4436. +
  4437. + private void unSpawnZones()
  4438. + {
  4439. + for (L2Spawn s : zones)
  4440. + {
  4441. + s.getLastSpawn().deleteMe();
  4442. + s.stopRespawn();
  4443. + SpawnTable.getInstance().deleteSpawn(s, true);
  4444. + zones.remove(s);
  4445. + }
  4446. + }
  4447. +
  4448. +}
  4449. \ No newline at end of file
  4450. Index: head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java
  4451. ===================================================================
  4452. --- head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (nonexistent)
  4453. +++ head-src/com/l2jfrozen/gameserver/event/DoubleDomination.java (working copy)
  4454. @@ -0,0 +1,280 @@
  4455. +/*
  4456. + * This program is free software: you can redistribute it and/or modify it under
  4457. + * the terms of the GNU General Public License as published by the Free Software
  4458. + * Foundation, either version 3 of the License, or (at your option) any later
  4459. + * version.
  4460. + *
  4461. + * This program is distributed in the hope that it will be useful, but WITHOUT
  4462. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  4463. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  4464. + * details.
  4465. + *
  4466. + * You should have received a copy of the GNU General Public License along with
  4467. + * this program. If not, see <http://www.gnu.org/licenses/>.
  4468. + */
  4469. +package com.l2jfrozen.gameserver.event;
  4470. +
  4471. +import javolution.text.TextBuilder;
  4472. +import javolution.util.FastMap;
  4473. +
  4474. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  4475. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  4476. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  4477. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  4478. +
  4479. +/**
  4480. + * @author Rizel
  4481. + *
  4482. + */
  4483. +public class DoubleDomination extends Event
  4484. +{
  4485. + private class Core implements Runnable
  4486. + {
  4487. + public void run()
  4488. + {
  4489. + try
  4490. + {
  4491. + switch (eventState)
  4492. + {
  4493. + case START:
  4494. + divideIntoTeams(2);
  4495. + preparePlayers();
  4496. + teleportToTeamPos();
  4497. + createPartyOfTeam(1);
  4498. + createPartyOfTeam(2);
  4499. + forceSitAll();
  4500. + setStatus(EventState.FIGHT);
  4501. + debug("The event started with " + players.size() + " players");
  4502. + schedule(20000);
  4503. + break;
  4504. +
  4505. + case FIGHT:
  4506. + forceStandAll();
  4507. + setStatus(EventState.END);
  4508. + debug("The fight started");
  4509. + clock.startClock(getInt("matchTime"));
  4510. + break;
  4511. +
  4512. + case END:
  4513. + clock.setTime(0);
  4514. + if (winnerTeam == 0)
  4515. + winnerTeam = getWinnerTeam();
  4516. +
  4517. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  4518. + unSpawnZones();
  4519. + setStatus(EventState.INACTIVE);
  4520. + debug("The event ended. Winner: " + winnerTeam);
  4521. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Domination points!");
  4522. + break;
  4523. + }
  4524. + }
  4525. + catch (Throwable e)
  4526. + {
  4527. + e.printStackTrace();
  4528. + EventManager.getInstance().end("Error! Event ended.");
  4529. + }
  4530. + }
  4531. + }
  4532. +
  4533. + private enum EventState
  4534. + {
  4535. + START, FIGHT, END, INACTIVE
  4536. + }
  4537. +
  4538. + private EventState eventState;
  4539. +
  4540. + private Core task;
  4541. +
  4542. + private FastMap<L2Spawn, Integer> zones;
  4543. +
  4544. + private int time;
  4545. +
  4546. + private int holder;
  4547. +
  4548. + public DoubleDomination()
  4549. + {
  4550. + super();
  4551. + eventId = 3;
  4552. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  4553. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  4554. + task = new Core();
  4555. + zones = new FastMap<L2Spawn, Integer>();
  4556. + winnerTeam = 0;
  4557. + time = 0;
  4558. + holder = 0;
  4559. + }
  4560. +
  4561. + @Override
  4562. + protected void clockTick()
  4563. + {
  4564. + int team1 = 0;
  4565. + int team2 = 0;
  4566. +
  4567. + for (L2Spawn zone : zones.keySet())
  4568. + {
  4569. + for (L2PcInstance player : getPlayerList())
  4570. + switch (getTeam(player))
  4571. + {
  4572. + case 1:
  4573. + if (Math.sqrt(player.getPlanDistanceSq(zone.getLastSpawn())) <= getInt("zoneRadius"))
  4574. + team1++;
  4575. + break;
  4576. +
  4577. + case 2:
  4578. + if (Math.sqrt(player.getPlanDistanceSq(zone.getLastSpawn())) <= getInt("zoneRadius"))
  4579. + team2++;
  4580. + break;
  4581. + }
  4582. +
  4583. + if (team1 > team2)
  4584. + zones.getEntry(zone).setValue(1);
  4585. +
  4586. + if (team2 > team1)
  4587. + zones.getEntry(zone).setValue(2);
  4588. +
  4589. + if (team1 == team2)
  4590. + zones.getEntry(zone).setValue(0);
  4591. +
  4592. + team1 = 0;
  4593. + team2 = 0;
  4594. + }
  4595. +
  4596. + if (zones.containsValue(1) && (!zones.containsValue(0) && !zones.containsValue(2)))
  4597. + {
  4598. + if (holder != 1)
  4599. + {
  4600. + announce(getPlayerList(), "The " + teams.get(1).getName() + " team captured both zones. Score in 10sec!");
  4601. + holder = 1;
  4602. + time = 0;
  4603. + }
  4604. +
  4605. + if (time == getInt("timeToScore") - 1)
  4606. + {
  4607. + for (L2PcInstance player : getPlayersOfTeam(1))
  4608. + increasePlayersScore(player);
  4609. + teams.get(1).increaseScore();
  4610. + teleportToTeamPos();
  4611. + time = 0;
  4612. + announce(getPlayerList(), "The " + teams.get(1).getName() + " team scored!");
  4613. + holder = 0;
  4614. + }
  4615. + else
  4616. + time++;
  4617. +
  4618. + }
  4619. + else if (zones.containsValue(2) && (!zones.containsValue(0) && !zones.containsValue(1)))
  4620. + {
  4621. + if (holder != 2)
  4622. + {
  4623. + announce(getPlayerList(), "The " + teams.get(2).getName() + " team captured both zones. Score in 10sec!");
  4624. + holder = 1;
  4625. + time = 0;
  4626. + }
  4627. +
  4628. + if (time == getInt("timeToScore") - 1)
  4629. + {
  4630. + for (L2PcInstance player : getPlayersOfTeam(2))
  4631. + increasePlayersScore(player);
  4632. + teams.get(2).increaseScore();
  4633. + teleportToTeamPos();
  4634. + time = 0;
  4635. + announce(getPlayerList(), "The " + teams.get(2).getName() + " team scored!");
  4636. + holder = 0;
  4637. + }
  4638. + else
  4639. + time++;
  4640. + }
  4641. + else
  4642. + {
  4643. + if (holder != 0)
  4644. + announce(getPlayerList(), "Canceled!");
  4645. +
  4646. + holder = 0;
  4647. + time = 0;
  4648. + }
  4649. +
  4650. + }
  4651. +
  4652. + /**
  4653. + * @see net.sf.l2j.gameserver.event.Event#endEvent()
  4654. + */
  4655. + @Override
  4656. + protected void endEvent()
  4657. + {
  4658. + setStatus(EventState.END);
  4659. + clock.setTime(0);
  4660. +
  4661. + }
  4662. +
  4663. + @Override
  4664. + protected String getScorebar()
  4665. + {
  4666. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  4667. + }
  4668. +
  4669. + @Override
  4670. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  4671. + {
  4672. + super.onDie(victim, killer);
  4673. + addToResurrector(victim);
  4674. + }
  4675. +
  4676. + @Override
  4677. + protected void schedule(int time)
  4678. + {
  4679. + tpm.scheduleGeneral(task, time);
  4680. + }
  4681. +
  4682. + private void setStatus(EventState s)
  4683. + {
  4684. + eventState = s;
  4685. + }
  4686. +
  4687. + @Override
  4688. + protected void showHtml(L2PcInstance player, int obj)
  4689. + {
  4690. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  4691. + TextBuilder sb = new TextBuilder();
  4692. +
  4693. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  4694. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  4695. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  4696. + sb.append("<br><table width=270>");
  4697. + int i = 0;
  4698. + for (EventTeam team : teams.values())
  4699. + {
  4700. + i++;
  4701. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  4702. + for (L2PcInstance p : getPlayersOfTeam(i))
  4703. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  4704. + }
  4705. +
  4706. + sb.append("</table></body></html>");
  4707. + html.setHtml(sb.toString());
  4708. + player.sendPacket(html);
  4709. +
  4710. + }
  4711. +
  4712. + @Override
  4713. + protected void start()
  4714. + {
  4715. + int[] z1pos = getPosition("Zone", 1);
  4716. + int[] z2pos = getPosition("Zone", 2);
  4717. + zones.put(spawnNPC(z1pos[0], z1pos[1], z1pos[2], getInt("zoneNpcId")), 0);
  4718. + zones.put(spawnNPC(z2pos[0], z2pos[1], z2pos[2], getInt("zoneNpcId")), 0);
  4719. + setStatus(EventState.START);
  4720. + schedule(1);
  4721. + }
  4722. +
  4723. + private void unSpawnZones()
  4724. + {
  4725. + for (L2Spawn s : zones.keySet())
  4726. + {
  4727. + s.getLastSpawn().deleteMe();
  4728. + s.stopRespawn();
  4729. + SpawnTable.getInstance().deleteSpawn(s, true);
  4730. + zones.remove(s);
  4731. + }
  4732. + }
  4733. +
  4734. +}
  4735. \ No newline at end of file
  4736. Index: head-src/com/l2jfrozen/gameserver/event/Event.java
  4737. ===================================================================
  4738. --- head-src/com/l2jfrozen/gameserver/event/Event.java (nonexistent)
  4739. +++ head-src/com/l2jfrozen/gameserver/event/Event.java (working copy)
  4740. @@ -0,0 +1,696 @@
  4741. +package com.l2jfrozen.gameserver.event;
  4742. +
  4743. +import java.util.Set;
  4744. +
  4745. +import javolution.util.FastList;
  4746. +import javolution.util.FastMap;
  4747. +
  4748. +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  4749. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  4750. +import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
  4751. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  4752. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  4753. +import com.l2jfrozen.gameserver.model.L2Object;
  4754. +import com.l2jfrozen.gameserver.model.L2Party;
  4755. +import com.l2jfrozen.gameserver.model.L2Skill;
  4756. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  4757. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  4758. +import com.l2jfrozen.gameserver.model.L2Summon;
  4759. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  4760. +import com.l2jfrozen.gameserver.model.actor.instance.L2PetInstance;
  4761. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  4762. +import com.l2jfrozen.gameserver.network.serverpackets.ExShowScreenMessage;
  4763. +import com.l2jfrozen.gameserver.network.serverpackets.Ride;
  4764. +import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  4765. +import com.l2jfrozen.gameserver.templates.L2EtcItemType;
  4766. +import com.l2jfrozen.gameserver.util.Broadcast;
  4767. +import com.l2jfrozen.util.random.Rnd;
  4768. +
  4769. +/**
  4770. + * @author Rizel
  4771. + *
  4772. + */
  4773. +public abstract class Event
  4774. +{
  4775. + protected class Clock implements Runnable
  4776. + {
  4777. + protected String getTime()
  4778. + {
  4779. + String mins = "" + time / 60;
  4780. + String secs = (time % 60 < 10 ? "0" + time % 60 : "" + time % 60);
  4781. + return "" + mins + ":" + secs + "";
  4782. + }
  4783. +
  4784. + public void run()
  4785. + {
  4786. + clockTick();
  4787. + scorebartext = getScorebar();
  4788. + for (L2PcInstance player : getPlayerList())
  4789. + player.sendPacket(new ExShowScreenMessage(1, -1, 2, false, 1, 0, 0, false, 2000, false, scorebartext));
  4790. +
  4791. + if (time <= 0)
  4792. + schedule(1);
  4793. + else
  4794. + {
  4795. + time--;
  4796. + tpm.scheduleGeneral(clock, 1000);
  4797. + }
  4798. + }
  4799. +
  4800. + protected void setTime(int t)
  4801. + {
  4802. + time = t;
  4803. + }
  4804. +
  4805. + protected void startClock(int mt)
  4806. + {
  4807. + time = mt;
  4808. + tpm.scheduleGeneral(clock, 1);
  4809. + }
  4810. + }
  4811. +
  4812. + protected class ResurrectorTask implements Runnable
  4813. + {
  4814. + private L2PcInstance player;
  4815. +
  4816. + public ResurrectorTask(L2PcInstance p)
  4817. + {
  4818. + player = p;
  4819. + ThreadPoolManager.getInstance().scheduleGeneral(this, 7000);
  4820. + debug("Resurrector task created: " + player.getName());
  4821. + }
  4822. +
  4823. + public void run()
  4824. + {
  4825. + if (EventManager.getInstance().isRegistered(player))
  4826. + {
  4827. + debug("Resurrector task executed: " + player.getName());
  4828. + player.doRevive();
  4829. +
  4830. + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
  4831. + EventBuffer.getInstance().buffPlayer(player);
  4832. +
  4833. + player.setCurrentCp(player.getMaxCp());
  4834. + player.setCurrentHp(player.getMaxHp());
  4835. + player.setCurrentMp(player.getMaxMp());
  4836. + teleportToTeamPos(player);
  4837. + }
  4838. +
  4839. + }
  4840. + }
  4841. +
  4842. + protected int eventId;
  4843. +
  4844. + //Config
  4845. + protected EventConfig config = EventConfig.getInstance();
  4846. +
  4847. + protected static int[] startpos = EventManager.npcPos;
  4848. +
  4849. + protected FastMap<Integer, EventTeam> teams;
  4850. +
  4851. + //TEAM-STATUS-SCORE
  4852. + protected FastMap<L2PcInstance, int[]> players;
  4853. +
  4854. + protected ThreadPoolManager tpm;
  4855. +
  4856. + protected ResurrectorTask resurrectorTask;
  4857. +
  4858. + private String scorebartext;
  4859. +
  4860. + protected Clock clock;
  4861. +
  4862. + protected int time;
  4863. +
  4864. + protected int winnerTeam;
  4865. +
  4866. + protected int loserTeam;
  4867. +
  4868. + public Event()
  4869. + {
  4870. + teams = new FastMap<Integer, EventTeam>();
  4871. + clock = new Clock();
  4872. + tpm = ThreadPoolManager.getInstance();
  4873. + players = new FastMap<L2PcInstance, int[]>();
  4874. + time = 0;
  4875. + }
  4876. +
  4877. + protected void addToResurrector(L2PcInstance player)
  4878. + {
  4879. + new ResurrectorTask(player);
  4880. + }
  4881. +
  4882. + protected void announce(Set<L2PcInstance> list, String text)
  4883. + {
  4884. + for (L2PcInstance player : list)
  4885. + player.sendPacket(new CreatureSay(0, 18, "", "[Event] " + text));
  4886. + }
  4887. +
  4888. + public boolean canAttack(L2PcInstance player, L2Object target)
  4889. + {
  4890. + return true;
  4891. + }
  4892. +
  4893. + protected void clockTick()
  4894. + {
  4895. +
  4896. + }
  4897. +
  4898. + protected int countOfPositiveStatus()
  4899. + {
  4900. + int count = 0;
  4901. + for (L2PcInstance player : getPlayerList())
  4902. + if (getStatus(player) >= 0)
  4903. + count++;
  4904. +
  4905. + return count;
  4906. + }
  4907. +
  4908. + protected void createNewTeam(int id, String name, int[] color, int[] startPos)
  4909. + {
  4910. + teams.put(id, new EventTeam(id, name, color, startPos));
  4911. + }
  4912. +
  4913. + protected void createPartyOfTeam(int teamId)
  4914. + {
  4915. + int count = 0;
  4916. + L2Party party = null;
  4917. +
  4918. + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
  4919. +
  4920. + for (L2PcInstance p : players.keySet())
  4921. + if (getTeam(p) == teamId)
  4922. + list.add(p);
  4923. +
  4924. + for (L2PcInstance player : list)
  4925. + {
  4926. + if (count % 9 == 0 && list.size() - count != 1)
  4927. + party = new L2Party(player, 1);
  4928. + if (count % 9 < 9)
  4929. + player.joinParty(party);
  4930. + count++;
  4931. + }
  4932. + }
  4933. +
  4934. + protected void debug(String text)
  4935. + {
  4936. + EventManager.getInstance().debug(text);
  4937. + }
  4938. +
  4939. + protected void divideIntoTeams(int number)
  4940. + {
  4941. + int i = 0;
  4942. + while (EventManager.getInstance().players.size() != 0)
  4943. + {
  4944. + i++;
  4945. + L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
  4946. + players.put(player, new int[] { i, 0, 0 });
  4947. + EventManager.getInstance().players.remove(player);
  4948. + if (i == number)
  4949. + i = 0;
  4950. + }
  4951. + }
  4952. +
  4953. + public void dropBomb(L2PcInstance player)
  4954. + {
  4955. +
  4956. + }
  4957. +
  4958. + protected abstract void endEvent();
  4959. +
  4960. + protected void forceSitAll()
  4961. + {
  4962. + for (L2PcInstance player : players.keySet())
  4963. + {
  4964. + if (player.isCastingNow())
  4965. + player.abortCast();
  4966. + if (player.isAttackingNow())
  4967. + player.abortAttack();
  4968. + player.sitDown();
  4969. + player.eventSitForced = true;
  4970. + }
  4971. + }
  4972. +
  4973. + protected void forceStandAll()
  4974. + {
  4975. + for (L2PcInstance player : players.keySet())
  4976. + {
  4977. + player.eventSitForced = false;
  4978. + player.standUp();
  4979. + }
  4980. +
  4981. + }
  4982. +
  4983. + public boolean getBoolean(String propName)
  4984. + {
  4985. + return config.getBoolean(eventId, propName);
  4986. + }
  4987. +
  4988. + public int[] getColor(String owner)
  4989. + {
  4990. + return config.getColor(eventId, owner);
  4991. + }
  4992. +
  4993. + public int getInt(String propName)
  4994. + {
  4995. + return config.getInt(eventId, propName);
  4996. + }
  4997. +
  4998. + protected Set<L2PcInstance> getPlayerList()
  4999. + {
  5000. + return players.keySet();
  5001. + }
  5002. +
  5003. + protected FastList<L2PcInstance> getPlayersOfTeam(int team)
  5004. + {
  5005. + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
  5006. +
  5007. + for (L2PcInstance player : getPlayerList())
  5008. + if (getTeam(player) == team)
  5009. + list.add(player);
  5010. +
  5011. + return list;
  5012. + }
  5013. +
  5014. + protected EventTeam getPlayersTeam(L2PcInstance player)
  5015. + {
  5016. + return teams.get(players.get(player)[0]);
  5017. + }
  5018. +
  5019. + protected FastList<L2PcInstance> getPlayersWithStatus(int status)
  5020. + {
  5021. + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
  5022. +
  5023. + for (L2PcInstance player : getPlayerList())
  5024. + if (getStatus(player) == status)
  5025. + list.add(player);
  5026. +
  5027. + return list;
  5028. + }
  5029. +
  5030. + protected L2PcInstance getPlayerWithMaxScore()
  5031. + {
  5032. + L2PcInstance max;
  5033. + max = players.head().getNext().getKey();
  5034. + for (L2PcInstance player : players.keySet())
  5035. + if (players.get(player)[2] > players.get(max)[2])
  5036. + max = player;
  5037. +
  5038. + return max;
  5039. + }
  5040. +
  5041. + protected void unequip(){
  5042. + for (L2PcInstance player : players.keySet())
  5043. + {
  5044. + player.getInventory().unEquipItemInSlot(7);
  5045. + player.getInventory().unEquipItemInSlot(8);
  5046. + player.getInventory().unEquipItemInSlot(14);
  5047. + }
  5048. + }
  5049. +
  5050. + public int[] getPosition(String owner, int num)
  5051. + {
  5052. + return config.getPosition(eventId, owner, num);
  5053. + }
  5054. +
  5055. + protected L2PcInstance getRandomPlayer()
  5056. + {
  5057. + FastList<L2PcInstance> temp = new FastList<L2PcInstance>();
  5058. + for (L2PcInstance player : players.keySet())
  5059. + temp.add(player);
  5060. +
  5061. + return temp.get(Rnd.get(temp.size()));
  5062. + }
  5063. +
  5064. + protected L2PcInstance getRandomPlayerFromTeam(int team)
  5065. + {
  5066. + FastList<L2PcInstance> temp = new FastList<L2PcInstance>();
  5067. + for (L2PcInstance player : players.keySet())
  5068. + if (getTeam(player) == team)
  5069. + temp.add(player);
  5070. +
  5071. + return temp.get(Rnd.get(temp.size()));
  5072. + }
  5073. +
  5074. + public FastList<Integer> getRestriction(String type)
  5075. + {
  5076. + return config.getRestriction(eventId, type);
  5077. + }
  5078. +
  5079. + protected int getScore(L2PcInstance player)
  5080. + {
  5081. + return players.get(player)[2];
  5082. + }
  5083. +
  5084. + protected abstract String getScorebar();
  5085. +
  5086. + protected int getStatus(L2PcInstance player)
  5087. + {
  5088. + return players.get(player)[1];
  5089. + }
  5090. +
  5091. + public String getString(String propName)
  5092. + {
  5093. + return config.getString(eventId, propName);
  5094. + }
  5095. +
  5096. + public int getTeam(L2PcInstance player)
  5097. + {
  5098. + return players.get(player)[0];
  5099. + }
  5100. +
  5101. + protected int getWinnerTeam()
  5102. + {
  5103. + FastList<EventTeam> t = new FastList<EventTeam>();
  5104. +
  5105. + for (EventTeam team : teams.values())
  5106. + {
  5107. + if (t.size() == 0)
  5108. + {
  5109. + t.add(team);
  5110. + continue;
  5111. + }
  5112. +
  5113. + if (team.getScore() > t.getFirst().getScore())
  5114. + {
  5115. + t.clear();
  5116. + t.add(team);
  5117. + continue;
  5118. + }
  5119. + if (team.getScore() == t.getFirst().getScore())
  5120. + t.add(team);
  5121. +
  5122. + }
  5123. +
  5124. + if (t.size() > 1)
  5125. + return t.get(Rnd.get(t.size())).getId();
  5126. + else
  5127. + return t.getFirst().getId();
  5128. +
  5129. + }
  5130. +
  5131. + protected void giveReward(FastList<L2PcInstance> players, int id, int ammount)
  5132. + {
  5133. + for (L2PcInstance player : players)
  5134. + {
  5135. + if(player == null)
  5136. + continue;
  5137. +
  5138. + player.addItem("Event", id, ammount, player, true);
  5139. + EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
  5140. + }
  5141. +
  5142. + }
  5143. +
  5144. + protected void giveReward(L2PcInstance player, int id, int ammount)
  5145. + {
  5146. + EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
  5147. +
  5148. + player.addItem("Event", id, ammount, player, true);
  5149. + }
  5150. +
  5151. + protected void increasePlayersScore(L2PcInstance player)
  5152. + {
  5153. + int old = getScore(player);
  5154. + setScore(player, old + 1);
  5155. + EventStats.getInstance().tempTable.get(player.getObjectId())[3] = EventStats.getInstance().tempTable.get(player.getObjectId())[3] + 1;
  5156. + }
  5157. +
  5158. + protected void msgToAll(String text)
  5159. + {
  5160. + for (L2PcInstance player : players.keySet())
  5161. + player.sendMessage(text);
  5162. + }
  5163. +
  5164. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  5165. + {
  5166. + EventStats.getInstance().tempTable.get(victim.getObjectId())[2] = EventStats.getInstance().tempTable.get(victim.getObjectId())[2] + 1;
  5167. + return;
  5168. + }
  5169. +
  5170. + public void onHit(L2PcInstance actor, L2PcInstance target)
  5171. + {
  5172. + }
  5173. +
  5174. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  5175. + {
  5176. + EventStats.getInstance().tempTable.get(killer.getObjectId())[1] = EventStats.getInstance().tempTable.get(killer.getObjectId())[1] + 1;
  5177. + return;
  5178. + }
  5179. +
  5180. + public void onLogout(L2PcInstance player)
  5181. + {
  5182. + if (players.containsKey(player))
  5183. + removePlayer(player);
  5184. +
  5185. + player.setXYZ(EventManager.getInstance().positions.get(player)[0], EventManager.getInstance().positions.get(player)[1], EventManager.getInstance().positions.get(player)[2]);
  5186. + player.setTitle(EventManager.getInstance().titles.get(player));
  5187. +
  5188. + if (teams.size() == 1)
  5189. + if (getPlayerList().size() == 1)
  5190. + {
  5191. + endEvent();
  5192. + return;
  5193. + }
  5194. +
  5195. + if (teams.size() > 1)
  5196. + {
  5197. + int t = players.head().getNext().getValue()[0];
  5198. + for (L2PcInstance p : getPlayerList())
  5199. + if (getTeam(p) != t)
  5200. + return;
  5201. +
  5202. + endEvent();
  5203. + return;
  5204. +
  5205. + }
  5206. + }
  5207. +
  5208. + public void onSay(int type, L2PcInstance player, String text)
  5209. + {
  5210. + return;
  5211. + }
  5212. +
  5213. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  5214. + {
  5215. + return false;
  5216. + }
  5217. +
  5218. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  5219. + {
  5220. + if (EventManager.getInstance().getRestriction("item").contains(item.getItemId()) || getRestriction("item").contains(item.getItemId()))
  5221. + return false;
  5222. +
  5223. + if (item.getItemType() == L2EtcItemType.POTION && !getBoolean("allowPotions"))
  5224. + return false;
  5225. +
  5226. + if (item.getItemType() == L2EtcItemType.SCROLL)
  5227. + return false;
  5228. +
  5229. + return true;
  5230. + }
  5231. +
  5232. + public boolean onUseMagic(L2Skill skill)
  5233. + {
  5234. + if (EventManager.getInstance().getRestriction("skill").contains(skill.getId()) || getRestriction("skill").contains(skill.getId()))
  5235. + return false;
  5236. +
  5237. + if (skill.getSkillType() == L2Skill.SkillType.RESURRECT)
  5238. + return false;
  5239. +
  5240. + if (skill.getSkillType() == L2Skill.SkillType.SUMMON_FRIEND)
  5241. + return false;
  5242. +
  5243. + if (skill.getSkillType() == L2Skill.SkillType.RECALL)
  5244. + return false;
  5245. +
  5246. + if (skill.getSkillType() == L2Skill.SkillType.FAKE_DEATH)
  5247. + return false;
  5248. +
  5249. + return true;
  5250. + }
  5251. +
  5252. + protected void prepare(L2PcInstance player)
  5253. + {
  5254. + if (player.isCastingNow())
  5255. + player.abortCast();
  5256. + player.getAppearance().setVisible();
  5257. +
  5258. + if (player.getPet() != null)
  5259. + {
  5260. + L2Summon summon = player.getPet();
  5261. + if (summon instanceof L2PetInstance)
  5262. + summon.unSummon(player);
  5263. + }
  5264. +
  5265. + if(player.isMounted())
  5266. + {
  5267. + if(player.setMountType(0))
  5268. + {
  5269. + if(player.isFlying())
  5270. + {
  5271. + player.removeSkill(SkillTable.getInstance().getInfo(4289, 1));
  5272. + }
  5273. + Ride dismount = new Ride(player.getObjectId(), Ride.ACTION_DISMOUNT, 0);
  5274. + Broadcast.toSelfAndKnownPlayers(player, dismount);
  5275. + player.setMountObjectID(0);
  5276. + dismount = null;
  5277. + }
  5278. + }
  5279. +
  5280. + if (getBoolean("removeBuffs"))
  5281. + {
  5282. + player.stopAllEffects();
  5283. + if (player.getPet() != null)
  5284. + {
  5285. + L2Summon summon = player.getPet();
  5286. + if (summon instanceof L2Summon)
  5287. + summon.unSummon(player);
  5288. + }
  5289. + }
  5290. +
  5291. + if (player.getParty() != null)
  5292. + {
  5293. + L2Party party = player.getParty();
  5294. + party.removePartyMember(player);
  5295. + }
  5296. + int[] nameColor = getPlayersTeam(player).getTeamColor();
  5297. + player.getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
  5298. + player.setTitle("<- 0 ->");
  5299. +
  5300. + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
  5301. + EventBuffer.getInstance().buffPlayer(player);
  5302. +
  5303. + player.broadcastUserInfo();
  5304. + }
  5305. +
  5306. + protected void preparePlayers()
  5307. + {
  5308. + for (L2PcInstance player : players.keySet())
  5309. + prepare(player);
  5310. + }
  5311. +
  5312. + protected void removePlayer(L2PcInstance player)
  5313. + {
  5314. + players.remove(player);
  5315. + }
  5316. +
  5317. + public void reset()
  5318. + {
  5319. + players.clear();
  5320. + tpm.purge();
  5321. + winnerTeam = 0;
  5322. +
  5323. + for (EventTeam team : teams.values())
  5324. + team.setScore(0);
  5325. +
  5326. + debug("Event reseted");
  5327. + }
  5328. +
  5329. + protected abstract void schedule(int time);
  5330. +
  5331. + protected void selectPlayers(int teamId, int playerCount)
  5332. + {
  5333. + for (int i = 0; i < playerCount; i++)
  5334. + {
  5335. + L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
  5336. + players.put(player, new int[] { teamId, 0, 0 });
  5337. + EventManager.getInstance().players.remove(player);
  5338. + }
  5339. +
  5340. + }
  5341. +
  5342. + protected void setScore(L2PcInstance player, int score)
  5343. + {
  5344. + players.get(player)[2] = score;
  5345. + player.setTitle("<- " + score + " ->");
  5346. + player.broadcastUserInfo();
  5347. + }
  5348. +
  5349. + protected void setStatus(L2PcInstance player, int status)
  5350. + {
  5351. + if (players.containsKey(player))
  5352. + players.get(player)[1] = status;
  5353. + }
  5354. +
  5355. + protected void setTeam(L2PcInstance player, int team)
  5356. + {
  5357. + players.get(player)[0] = team;
  5358. + }
  5359. +
  5360. + protected abstract void showHtml(L2PcInstance player, int obj);
  5361. +
  5362. + protected L2Spawn spawnNPC(int xPos, int yPos, int zPos, int npcId)
  5363. + {
  5364. + final L2NpcTemplate template = NpcTable.getInstance().getTemplate(npcId);
  5365. + try
  5366. + {
  5367. + final L2Spawn spawn = new L2Spawn(template);
  5368. + spawn.setLocx(xPos);
  5369. + spawn.setLocy(yPos);
  5370. + spawn.setLocz(zPos);
  5371. + spawn.setAmount(1);
  5372. + spawn.setHeading(0);
  5373. + spawn.setRespawnDelay(1);
  5374. + SpawnTable.getInstance().addNewSpawn(spawn, false);
  5375. + spawn.init();
  5376. + return spawn;
  5377. + }
  5378. + catch (Exception e)
  5379. + {
  5380. + return null;
  5381. + }
  5382. + }
  5383. +
  5384. + protected abstract void start();
  5385. +
  5386. + protected void teleportPlayer(L2PcInstance player, int[] coordinates)
  5387. + {
  5388. + player.teleToLocation(coordinates[0] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[1] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[2]);
  5389. + }
  5390. +
  5391. + protected void teleportToTeamPos()
  5392. + {
  5393. + for (L2PcInstance player : players.keySet())
  5394. + {
  5395. + teleportToTeamPos(player);
  5396. + }
  5397. +
  5398. + }
  5399. +
  5400. + protected void teleportToTeamPos(L2PcInstance player)
  5401. + {
  5402. + int[] pos = getPosition(teams.get(getTeam(player)).getName(), 0);
  5403. + teleportPlayer(player, pos);
  5404. + }
  5405. +
  5406. + protected void unspawnNPC(L2Spawn npcSpawn)
  5407. + {
  5408. + if (npcSpawn == null)
  5409. + return;
  5410. +
  5411. + npcSpawn.getLastSpawn().deleteMe();
  5412. + npcSpawn.stopRespawn();
  5413. + SpawnTable.getInstance().deleteSpawn(npcSpawn, true);
  5414. + }
  5415. +
  5416. + public int numberOfTeams()
  5417. + {
  5418. + return teams.size();
  5419. + }
  5420. +
  5421. + public void useCapture(L2PcInstance player, L2NpcInstance base){}
  5422. +
  5423. + protected void polymorph(L2PcInstance player, int id)
  5424. + {
  5425. + player.getPoly().setPolyInfo("", String.valueOf(id));
  5426. + player.decayMe();
  5427. + player.spawnMe(player.getX(),player.getY(),player.getZ());
  5428. + }
  5429. +
  5430. + protected void unpolymorph(L2PcInstance player)
  5431. + {
  5432. + player.getPoly().setPolyInfo(null, "1");
  5433. + player.decayMe();
  5434. + player.spawnMe(player.getX(),player.getY(),player.getZ());
  5435. + }
  5436. +}
  5437. \ No newline at end of file
  5438. Index: head-src/com/l2jfrozen/gameserver/event/EventBuffer.java
  5439. ===================================================================
  5440. --- head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (nonexistent)
  5441. +++ head-src/com/l2jfrozen/gameserver/event/EventBuffer.java (working copy)
  5442. @@ -0,0 +1,315 @@
  5443. +/*
  5444. + * This program is free software: you can redistribute it and/or modify it under
  5445. + * the terms of the GNU General Public License as published by the Free Software
  5446. + * Foundation, either version 3 of the License, or (at your option) any later
  5447. + * version.
  5448. + *
  5449. + * This program is distributed in the hope that it will be useful, but WITHOUT
  5450. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  5451. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  5452. + * details.
  5453. + *
  5454. + * You should have received a copy of the GNU General Public License along with
  5455. + * this program. If not, see <http://www.gnu.org/licenses/>.
  5456. + */
  5457. +package com.l2jfrozen.gameserver.event;
  5458. +
  5459. +import java.sql.Connection;
  5460. +import java.sql.PreparedStatement;
  5461. +import java.sql.ResultSet;
  5462. +import java.util.Map;
  5463. +import java.util.StringTokenizer;
  5464. +
  5465. +import javolution.text.TextBuilder;
  5466. +import javolution.util.FastList;
  5467. +import javolution.util.FastMap;
  5468. +
  5469. +import com.l2jfrozen.util.database.L2DatabaseFactory;
  5470. +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  5471. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  5472. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  5473. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  5474. +
  5475. +/**
  5476. + * @author Rizel
  5477. + *
  5478. + */
  5479. +public class EventBuffer
  5480. +{
  5481. + private static class SingletonHolder
  5482. + {
  5483. + protected static final EventBuffer _instance = new EventBuffer();
  5484. + }
  5485. + private class UpdateTask implements Runnable
  5486. + {
  5487. + public void run()
  5488. + {
  5489. + updateSQL();
  5490. + }
  5491. + }
  5492. + public static EventBuffer getInstance()
  5493. + {
  5494. + return SingletonHolder._instance;
  5495. + }
  5496. +
  5497. + private FastMap<String, FastList<Integer>> buffTemplates;
  5498. +
  5499. + private FastMap<String, Boolean> changes;
  5500. +
  5501. + private UpdateTask updateTask;
  5502. +
  5503. + public EventBuffer()
  5504. + {
  5505. + updateTask = new UpdateTask();
  5506. + changes = new FastMap<String, Boolean>();
  5507. + buffTemplates = new FastMap<String, FastList<Integer>>();
  5508. + loadSQL();
  5509. + ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(updateTask, 600000, 600000);
  5510. + }
  5511. +
  5512. + protected void buffPlayer(L2PcInstance player)
  5513. + {
  5514. + boolean bss = player.checkBss();
  5515. + boolean sps = player.checkSps();
  5516. + boolean ss = player.checkSs();
  5517. +
  5518. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  5519. +
  5520. + if(!buffTemplates.containsKey(playerId))
  5521. + {
  5522. + EventManager.getInstance().debug("The player : "+player.getName()+" ("+playerId+") without template");
  5523. + return;
  5524. + }
  5525. +
  5526. + for (int skillId : buffTemplates.get(playerId))
  5527. + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getEffects(player, player, ss, sps, bss);
  5528. + }
  5529. +
  5530. + public void changeList(L2PcInstance player, int buff, boolean action)
  5531. + {
  5532. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  5533. +
  5534. + if (!buffTemplates.containsKey(playerId))
  5535. + {
  5536. + buffTemplates.put(playerId, new FastList<Integer>());
  5537. + changes.put(playerId, true);
  5538. + }
  5539. + else
  5540. + {
  5541. + if (!changes.containsKey(playerId))
  5542. + changes.put(playerId, false);
  5543. +
  5544. + if (action)
  5545. + buffTemplates.get(playerId).add(buff);
  5546. + else
  5547. + buffTemplates.get(playerId).remove(buffTemplates.get(playerId).indexOf(buff));
  5548. +
  5549. + }
  5550. +
  5551. + }
  5552. +
  5553. + private void loadSQL()
  5554. + {
  5555. + if (!EventManager.getInstance().getBoolean("eventBufferEnabled"))
  5556. + return;
  5557. +
  5558. + Connection con = null;
  5559. + PreparedStatement statement = null;
  5560. + try
  5561. + {
  5562. + con = L2DatabaseFactory.getInstance().getConnection();
  5563. + statement = con.prepareStatement("SELECT * FROM event_buffs");
  5564. + ResultSet rset = statement.executeQuery();
  5565. + int count = 0;
  5566. + while (rset.next())
  5567. + {
  5568. + count++;
  5569. +
  5570. + buffTemplates.put(rset.getString("player"), new FastList<Integer>());
  5571. +
  5572. + StringTokenizer st = new StringTokenizer(rset.getString("buffs"), ",");
  5573. +
  5574. + FastList<Integer> templist = new FastList<Integer>();
  5575. +
  5576. + while (st.hasMoreTokens())
  5577. + templist.add(Integer.parseInt(st.nextToken()));
  5578. +
  5579. + buffTemplates.getEntry(rset.getString("player")).setValue(templist);
  5580. + }
  5581. + rset.close();
  5582. + statement.close();
  5583. +
  5584. + EventManager.getInstance().debug("Buffer loaded: " + count + " players template.");
  5585. + }
  5586. + catch (Exception e)
  5587. + {
  5588. + System.out.println("EventBuffs SQL catch");
  5589. + }
  5590. + finally
  5591. + {
  5592. + try { con.close(); } catch (Exception e) {}
  5593. + }
  5594. + }
  5595. +
  5596. + protected boolean playerHaveTemplate(L2PcInstance player)
  5597. + {
  5598. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  5599. +
  5600. + if (buffTemplates.containsKey(playerId))
  5601. + return true;
  5602. + else
  5603. + return false;
  5604. + }
  5605. +
  5606. + public void showHtml(L2PcInstance player)
  5607. + {
  5608. + try{
  5609. + String playerId = "" + player.getObjectId() + player.getClassIndex();
  5610. +
  5611. + if (!buffTemplates.containsKey(playerId))
  5612. + {
  5613. + buffTemplates.put(playerId, new FastList<Integer>());
  5614. + changes.put(playerId, true);
  5615. + }
  5616. +
  5617. + StringTokenizer st = new StringTokenizer(EventManager.getInstance().getString("allowedBuffsList"), ",");
  5618. +
  5619. + FastList<Integer> skillList = new FastList<Integer>();
  5620. +
  5621. + while (st.hasMoreTokens())
  5622. + skillList.add(Integer.parseInt(st.nextToken()));
  5623. +
  5624. + NpcHtmlMessage html = new NpcHtmlMessage(0);
  5625. + TextBuilder sb = new TextBuilder();
  5626. +
  5627. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  5628. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Edit Buffs</td><td width=80></td><td width=120>Remaining slots: " + (EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) + "</td></tr></table><br><br>");
  5629. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td>Added buffs:</td></tr></table><br>");
  5630. + sb.append("<center><table width=270>");
  5631. +
  5632. + int c = 0;
  5633. + for (int skillId : buffTemplates.get(playerId))
  5634. + {
  5635. + c++;
  5636. + String skillStr = "0000";
  5637. + if (skillId < 100)
  5638. + skillStr = "00" + skillId;
  5639. + else if (skillId > 99 && skillId < 1000)
  5640. + skillStr = "0" + skillId;
  5641. + else if (skillId > 4698 && skillId < 4701)
  5642. + skillStr = "1331";
  5643. + else if (skillId > 4701 && skillId < 4704)
  5644. + skillStr = "1332";
  5645. + else
  5646. + skillStr = "" + skillId;
  5647. +
  5648. + if (c % 2 == 1)
  5649. + sb.append("<tr><td width=33><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100><a action=\"bypass -h eventbuffer " + skillId + " 0\">" + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + "</a></td>");
  5650. + if (c % 2 == 0)
  5651. + sb.append("<td width=33><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100><a action=\"bypass -h eventbuffer " + skillId + " 0\">" + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + "</a></td></tr>");
  5652. + }
  5653. +
  5654. + if (c % 2 == 1)
  5655. + sb.append("<td width=33></td><td width=100></td></tr>");
  5656. +
  5657. + sb.append("</table><br>");
  5658. +
  5659. + sb.append("<br><br><center><table width=270 bgcolor=5A5A5A><tr><td>Available buffs:</td></tr></table><br>");
  5660. + sb.append("<center><table width=270>");
  5661. +
  5662. + c = 0;
  5663. + for (int skillId : skillList)
  5664. + {
  5665. + String skillStr = "0000";
  5666. + if (skillId < 100)
  5667. + skillStr = "00" + skillId;
  5668. + else if (skillId > 99 && skillId < 1000)
  5669. + skillStr = "0" + skillId;
  5670. + else if (skillId > 4698 && skillId < 4701)
  5671. + skillStr = "1331";
  5672. + else if (skillId > 4701 && skillId < 4704)
  5673. + skillStr = "1332";
  5674. + else
  5675. + skillStr = "" + skillId;
  5676. +
  5677. + if (!buffTemplates.get(playerId).contains(skillId))
  5678. + {
  5679. + c++;
  5680. + if (c % 2 == 1)
  5681. + sb.append("<tr><td width=32><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100>" + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "<a action=\"bypass -h eventbuffer " + skillId + " 1\">" : "") + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "</a>" : "") + "</td>");
  5682. + if (c % 2 == 0)
  5683. + sb.append("<td width=32><img src=\"Icon.skill" + skillStr + "\" width=32 height=32></td><td width=100>" + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "<a action=\"bypass -h eventbuffer " + skillId + " 1\">" : "") + SkillTable.getInstance().getInfo(skillId, SkillTable.getInstance().getMaxLevel(skillId,1)).getName() + ((EventManager.getInstance().getInt("maxBuffNum") - buffTemplates.get(playerId).size()) != 0 ? "</a>" : "") + "</td></tr>");
  5684. + }
  5685. + }
  5686. +
  5687. + if (c % 2 == 1)
  5688. + sb.append("<td width=33></td><td width=100></td></tr>");
  5689. +
  5690. + sb.append("</table>");
  5691. +
  5692. + sb.append("</body></html>");
  5693. + html.setHtml(sb.toString());
  5694. + player.sendPacket(html);
  5695. + }
  5696. + catch(Throwable e)
  5697. + {
  5698. + e.printStackTrace();
  5699. + }
  5700. + }
  5701. +
  5702. + public void updateSQL()
  5703. + {
  5704. + Connection con = null;
  5705. + PreparedStatement statement = null;
  5706. +
  5707. + try
  5708. + {
  5709. + con = L2DatabaseFactory.getInstance().getConnection();
  5710. +
  5711. + for (Map.Entry<String, Boolean> player : changes.entrySet())
  5712. + {
  5713. +
  5714. + TextBuilder sb = new TextBuilder();
  5715. +
  5716. + int c = 0;
  5717. + for (int buffid : buffTemplates.get(player.getKey()))
  5718. + if (c == 0)
  5719. + {
  5720. + sb.append(buffid);
  5721. + c++;
  5722. + }
  5723. + else
  5724. + sb.append("," + buffid);
  5725. +
  5726. + if (player.getValue())
  5727. + {
  5728. + statement = con.prepareStatement("INSERT INTO event_buffs(player,buffs) VALUES (?,?)");
  5729. + statement.setString(1, player.getKey());
  5730. + statement.setString(2, sb.toString());
  5731. +
  5732. + statement.executeUpdate();
  5733. + statement.close();
  5734. + }
  5735. + else
  5736. + {
  5737. + statement = con.prepareStatement("UPDATE event_buffs SET buffs=? WHERE player=?");
  5738. + statement.setString(1, sb.toString());
  5739. + statement.setString(2, player.getKey());
  5740. +
  5741. + statement.executeUpdate();
  5742. + statement.close();
  5743. + }
  5744. + }
  5745. + }
  5746. + catch (Exception e)
  5747. + {
  5748. + System.out.println("EventBuffs SQL catch");
  5749. + }
  5750. + finally
  5751. + {
  5752. + try { con.close(); } catch (Exception e) {}
  5753. + }
  5754. +
  5755. + changes.clear();
  5756. + }
  5757. +}
  5758. \ No newline at end of file
  5759. Index: head-src/com/l2jfrozen/gameserver/event/EventConfig.java
  5760. ===================================================================
  5761. --- head-src/com/l2jfrozen/gameserver/event/EventConfig.java (nonexistent)
  5762. +++ head-src/com/l2jfrozen/gameserver/event/EventConfig.java (working copy)
  5763. @@ -0,0 +1,270 @@
  5764. +package com.l2jfrozen.gameserver.event;
  5765. +
  5766. +import java.io.File;
  5767. +import java.util.StringTokenizer;
  5768. +import java.util.logging.Logger;
  5769. +
  5770. +import javax.xml.parsers.DocumentBuilder;
  5771. +import javax.xml.parsers.DocumentBuilderFactory;
  5772. +
  5773. +import javolution.util.FastList;
  5774. +import javolution.util.FastMap;
  5775. +
  5776. +import org.w3c.dom.Document;
  5777. +import org.w3c.dom.NamedNodeMap;
  5778. +import org.w3c.dom.Node;
  5779. +
  5780. +import com.l2jfrozen.util.random.Rnd;
  5781. +
  5782. +public class EventConfig
  5783. +{
  5784. +
  5785. + @SuppressWarnings("synthetic-access")
  5786. + private static class SingletonHolder
  5787. + {
  5788. + protected static final EventConfig _instance = new EventConfig();
  5789. + }
  5790. +
  5791. + public static EventConfig getInstance()
  5792. + {
  5793. + return SingletonHolder._instance;
  5794. + }
  5795. +
  5796. + private Logger _log = Logger.getLogger(EventConfig.class.getName());
  5797. + public FastMap<Integer, FastMap<String, String>> config;
  5798. +
  5799. + public FastMap<Integer, FastMap<String, FastMap<Integer, int[]>>> positions;
  5800. +
  5801. + public FastMap<Integer, FastMap<String, int[]>> colors;
  5802. +
  5803. + public FastMap<Integer, FastMap<String, FastList<Integer>>> restrictions;
  5804. +
  5805. + public EventConfig()
  5806. + {
  5807. + config = new FastMap<Integer, FastMap<String, String>>();
  5808. + positions = new FastMap<Integer, FastMap<String, FastMap<Integer, int[]>>>();
  5809. + colors = new FastMap<Integer, FastMap<String, int[]>>();
  5810. + restrictions = new FastMap<Integer, FastMap<String, FastList<Integer>>>();
  5811. + loadConfigs();
  5812. + }
  5813. +
  5814. + private void addColor(int id, String owner, int[] color)
  5815. + {
  5816. + if (!colors.containsKey(id))
  5817. + colors.put(id, new FastMap<String, int[]>());
  5818. +
  5819. + colors.get(id).put(owner, color);
  5820. + }
  5821. +
  5822. + private void addPosition(int id, String owner, int x, int y, int z, int radius)
  5823. + {
  5824. +
  5825. + if (!positions.containsKey(id))
  5826. + positions.put(id, new FastMap<String, FastMap<Integer, int[]>>());
  5827. + if (!positions.get(id).containsKey(owner))
  5828. + positions.get(id).put(owner, new FastMap<Integer, int[]>());
  5829. +
  5830. + positions.get(id).get(owner).put(positions.get(id).get(owner).size() + 1, new int[] { x, y, z, radius });
  5831. + }
  5832. +
  5833. + private void addProperty(int id, String propName, String value)
  5834. + {
  5835. + if (!config.containsKey(id))
  5836. + config.put(id, new FastMap<String, String>());
  5837. +
  5838. + config.get(id).put(propName, value);
  5839. + }
  5840. +
  5841. + private void addRestriction(int id, String type, String ids)
  5842. + {
  5843. + if (!restrictions.containsKey(id))
  5844. + restrictions.put(id, new FastMap<String, FastList<Integer>>());
  5845. +
  5846. + FastList<Integer> idlist = new FastList<Integer>();
  5847. + StringTokenizer st = new StringTokenizer(ids, ",");
  5848. + while (st.hasMoreTokens())
  5849. + idlist.add(Integer.parseInt(st.nextToken()));
  5850. +
  5851. + restrictions.get(id).put(type, idlist);
  5852. + }
  5853. +
  5854. + public boolean getBoolean(int event, String propName)
  5855. + {
  5856. + if (!(config.containsKey(event)))
  5857. + {
  5858. + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
  5859. + return false;
  5860. + }
  5861. +
  5862. + if (config.get(event).containsKey(propName))
  5863. + return Boolean.parseBoolean(config.get(event).get(propName));
  5864. + else
  5865. + {
  5866. + _log.warning("Event: Try to get a non existing property: " + propName);
  5867. + return false;
  5868. + }
  5869. +
  5870. + }
  5871. +
  5872. + public int[] getColor(int event, String owner)
  5873. + {
  5874. + if (!(colors.containsKey(event)))
  5875. + {
  5876. + _log.warning("Event: Try to get a color of a non existing event: ID: " + event);
  5877. + return new int[] { 255, 255, 255 };
  5878. + }
  5879. +
  5880. + if (colors.get(event).containsKey(owner))
  5881. + return colors.get(event).get(owner);
  5882. + else
  5883. + {
  5884. + _log.warning("Event: Try to get a non existing color: " + owner);
  5885. + return new int[] { 255, 255, 255 };
  5886. + }
  5887. + }
  5888. +
  5889. + public int getInt(int event, String propName)
  5890. + {
  5891. + if (!(config.containsKey(event)))
  5892. + {
  5893. + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
  5894. + return -1;
  5895. + }
  5896. +
  5897. + if (config.get(event).containsKey(propName))
  5898. + return Integer.parseInt(config.get(event).get(propName));
  5899. + else
  5900. + {
  5901. + _log.warning("Event: Try to get a non existing property: " + propName);
  5902. + return -1;
  5903. + }
  5904. + }
  5905. +
  5906. + public int[] getPosition(int event, String owner, int num)
  5907. + {
  5908. + if (!positions.containsKey(event))
  5909. + {
  5910. + _log.warning("Event: Try to get a position of a non existing event: ID: " + event);
  5911. + return new int[] {};
  5912. + }
  5913. + if (!positions.get(event).containsKey(owner))
  5914. + {
  5915. + _log.warning("Event: Try to get a position of a non existing owner: " + owner);
  5916. + return new int[] {};
  5917. + }
  5918. + if (!positions.get(event).get(owner).containsKey(num) && num != 0)
  5919. + {
  5920. + _log.warning("Event: Try to get a non existing position: " + num);
  5921. + return new int[] {};
  5922. + }
  5923. +
  5924. + if (num == 0)
  5925. + return positions.get(event).get(owner).get(Rnd.get(positions.get(event).get(owner).size()) + 1);
  5926. + else
  5927. + return positions.get(event).get(owner).get(num);
  5928. + }
  5929. +
  5930. + public FastList<Integer> getRestriction(int event, String type)
  5931. + {
  5932. + if (!(restrictions.containsKey(event)))
  5933. + {
  5934. + _log.warning("Event: Try to get a restriction of a non existing event: ID: " + event);
  5935. + return null;
  5936. + }
  5937. + if (restrictions.get(event).containsKey(type))
  5938. + return restrictions.get(event).get(type);
  5939. + else
  5940. + {
  5941. + _log.warning("Event: Try to get a non existing restriction: " + type);
  5942. + return null;
  5943. + }
  5944. + }
  5945. +
  5946. + public String getString(int event, String propName)
  5947. + {
  5948. + if (!(config.containsKey(event)))
  5949. + {
  5950. + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
  5951. + return null;
  5952. + }
  5953. +
  5954. + if (config.get(event).containsKey(propName))
  5955. + return config.get(event).get(propName);
  5956. + else
  5957. + {
  5958. + _log.warning("Event: Try to get a non existing property: " + propName);
  5959. + return null;
  5960. + }
  5961. +
  5962. + }
  5963. +
  5964. + private void loadConfigs()
  5965. + {
  5966. + File configFile = new File("./config/Events.xml");
  5967. + Document doc = null;
  5968. + try
  5969. + {
  5970. + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  5971. + dbf.setIgnoringComments(true);
  5972. + dbf.setValidating(false);
  5973. + DocumentBuilder db = dbf.newDocumentBuilder();
  5974. + doc = db.parse(configFile);
  5975. +
  5976. + for (Node root = doc.getFirstChild(); root != null; root = root.getNextSibling())
  5977. + if ("events".equalsIgnoreCase(root.getNodeName()))
  5978. + for (Node event = root.getFirstChild(); event != null; event = event.getNextSibling())
  5979. + if ("event".equalsIgnoreCase(event.getNodeName()))
  5980. + {
  5981. + NamedNodeMap eventAttrs = event.getAttributes();
  5982. + int eventId = Integer.parseInt(eventAttrs.getNamedItem("id").getNodeValue());
  5983. +
  5984. + for (Node property = event.getFirstChild(); property != null; property = property.getNextSibling())
  5985. + {
  5986. +
  5987. + if ("property".equalsIgnoreCase(property.getNodeName()))
  5988. + {
  5989. + NamedNodeMap propAttrs = property.getAttributes();
  5990. + String name = propAttrs.getNamedItem("name").getNodeValue();
  5991. + String value = propAttrs.getNamedItem("value").getNodeValue();
  5992. + addProperty(eventId, name, value);
  5993. + }
  5994. +
  5995. + if ("position".equalsIgnoreCase(property.getNodeName()))
  5996. + {
  5997. + NamedNodeMap propAttrs = property.getAttributes();
  5998. + String owner = propAttrs.getNamedItem("owner").getNodeValue();
  5999. + String x = propAttrs.getNamedItem("x").getNodeValue();
  6000. + String y = propAttrs.getNamedItem("y").getNodeValue();
  6001. + String z = propAttrs.getNamedItem("z").getNodeValue();
  6002. + String radius = propAttrs.getNamedItem("radius").getNodeValue();
  6003. + addPosition(eventId, owner, Integer.parseInt(x), Integer.parseInt(y), Integer.parseInt(z), Integer.parseInt(radius));
  6004. +
  6005. + }
  6006. +
  6007. + if ("color".equalsIgnoreCase(property.getNodeName()))
  6008. + {
  6009. + NamedNodeMap propAttrs = property.getAttributes();
  6010. + String owner = propAttrs.getNamedItem("owner").getNodeValue();
  6011. + int r = Integer.parseInt(propAttrs.getNamedItem("r").getNodeValue());
  6012. + int g = Integer.parseInt(propAttrs.getNamedItem("g").getNodeValue());
  6013. + int b = Integer.parseInt(propAttrs.getNamedItem("b").getNodeValue());
  6014. + addColor(eventId, owner, new int[] { r, g, b });
  6015. + }
  6016. +
  6017. + if ("restriction".equalsIgnoreCase(property.getNodeName()))
  6018. + {
  6019. + NamedNodeMap propAttrs = property.getAttributes();
  6020. + String type = propAttrs.getNamedItem("type").getNodeValue();
  6021. + String ids = propAttrs.getNamedItem("ids").getNodeValue();
  6022. + addRestriction(eventId, type, ids);
  6023. + }
  6024. + }
  6025. + }
  6026. + }
  6027. + catch (Exception e)
  6028. + {
  6029. +
  6030. + }
  6031. +
  6032. + }
  6033. +}
  6034. \ No newline at end of file
  6035. Index: head-src/com/l2jfrozen/gameserver/event/EventManager.java
  6036. ===================================================================
  6037. --- head-src/com/l2jfrozen/gameserver/event/EventManager.java (nonexistent)
  6038. +++ head-src/com/l2jfrozen/gameserver/event/EventManager.java (working copy)
  6039. @@ -0,0 +1,727 @@
  6040. +package com.l2jfrozen.gameserver.event;
  6041. +
  6042. +import java.io.FileWriter;
  6043. +import java.io.IOException;
  6044. +import java.text.SimpleDateFormat;
  6045. +import java.util.Date;
  6046. +import java.util.Map;
  6047. +import java.util.Random;
  6048. +
  6049. +import javolution.text.TextBuilder;
  6050. +import javolution.util.FastList;
  6051. +import javolution.util.FastMap;
  6052. +
  6053. +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  6054. +import com.l2jfrozen.gameserver.model.L2Character;
  6055. +import com.l2jfrozen.gameserver.model.L2Party;
  6056. +import com.l2jfrozen.gameserver.model.L2World;
  6057. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  6058. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  6059. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  6060. +import com.l2jfrozen.gameserver.util.Broadcast;
  6061. +
  6062. +public final class EventManager
  6063. +{
  6064. +
  6065. + private class Countdown implements Runnable
  6066. + {
  6067. + protected String getTime()
  6068. + {
  6069. + String mins = "" + counter / 60;
  6070. + String secs = (counter % 60 < 10 ? "0" + counter % 60 : "" + counter % 60);
  6071. + return "" + mins + ":" + secs + "";
  6072. + }
  6073. +
  6074. + @SuppressWarnings("synthetic-access")
  6075. + public void run()
  6076. + {
  6077. + if (status == State.REGISTERING)
  6078. +
  6079. + switch (counter)
  6080. + {
  6081. + case 300:
  6082. + case 240:
  6083. + case 180:
  6084. + case 120:
  6085. + case 60:
  6086. + announce("" + counter / 60 + " min(s) left to register, " + getCurrentEvent().getString("eventName"));
  6087. + break;
  6088. + case 30:
  6089. + case 10:
  6090. + announce("" + counter + " seconds left to register!");
  6091. + break;
  6092. + }
  6093. +
  6094. + if (status == State.VOTING)
  6095. + if (counter == getInt("showVotePopupAt") && getBoolean("votePopupEnabled"))
  6096. + {
  6097. + NpcHtmlMessage html = new NpcHtmlMessage(0);
  6098. + TextBuilder sb = new TextBuilder();
  6099. + int count = 0;
  6100. +
  6101. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  6102. +
  6103. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Voting</td><td width=130><center>Time left: " + cdtask.getTime() + "</td><td width=70>Votes: " + votes.size() + "</td></tr></table><br>");
  6104. +
  6105. + for (Map.Entry<Integer, Event> event : events.entrySet())
  6106. + {
  6107. + count++;
  6108. + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=180>" + event.getValue().getString("eventName") + "</td><td width=30>Info</td><td width=30>");
  6109. + sb.append("<a action=\"bypass -h eventvote " + event.getKey() + "\">Vote</a>");
  6110. + sb.append("</td><td width=30><center>" + getVoteCount(event.getKey()) + "</td></tr></table>");
  6111. + }
  6112. +
  6113. + sb.append("</body></html>");
  6114. + html.setHtml(sb.toString());
  6115. +
  6116. + for (L2PcInstance player : L2World.getInstance().getAllPlayers())
  6117. + {
  6118. + if (votes.containsKey(player) || player.getLevel() < 40)
  6119. + continue;
  6120. +
  6121. + player.sendPacket(html);
  6122. + }
  6123. + }
  6124. +
  6125. + if (counter == 0)
  6126. + schedule(1);
  6127. + else
  6128. + {
  6129. + counter--;
  6130. + tpm.scheduleGeneral(cdtask, 1000);
  6131. + }
  6132. +
  6133. + }
  6134. + }
  6135. +
  6136. + private class Scheduler implements Runnable
  6137. + {
  6138. + @SuppressWarnings("synthetic-access")
  6139. + public void run()
  6140. + {
  6141. + switch (status)
  6142. + {
  6143. + case VOTING:
  6144. + if (votes.size() > 0)
  6145. + setCurrentEvent(getVoteWinner());
  6146. + else
  6147. + setCurrentEvent(eventIds.get(rnd.nextInt(eventIds.size())));
  6148. +
  6149. + announce("The next event will be: " + getCurrentEvent().getString("eventName"));
  6150. + announce("Registering phase started! You have " + getInt("registerTime") / 60 + " mins to register!");
  6151. + announce("Event joinable in giran.");
  6152. + setStatus(State.REGISTERING);
  6153. + debug("Registering phase started.");
  6154. + counter = getInt("registerTime") - 1;
  6155. + tpm.scheduleGeneral(cdtask, 1);
  6156. + break;
  6157. +
  6158. + case REGISTERING:
  6159. + announce("Registering phase ended!");
  6160. + debug("Registering phase ended.");
  6161. + if (countOfRegistered() < getCurrentEvent().getInt("minPlayers"))
  6162. + {
  6163. + debug("Lack of participants.");
  6164. + announce("Theres not enough participants! Next event in " + getInt("betweenEventsTime") / 60 + "mins!");
  6165. + players.clear();
  6166. + colors.clear();
  6167. + positions.clear();
  6168. + setStatus(State.VOTING);
  6169. + counter = getInt("betweenEventsTime") - 1;
  6170. + tpm.scheduleGeneral(cdtask, 1);
  6171. + }
  6172. + else
  6173. + {
  6174. + debug("Event starts.");
  6175. + announce("Event started!");
  6176. + setStatus(State.RUNNING);
  6177. + msgToAll("You'll be teleported to the event in 10 secs");
  6178. + schedule(10000);
  6179. + }
  6180. + break;
  6181. +
  6182. + case RUNNING:
  6183. + getCurrentEvent().start();
  6184. +
  6185. + for (L2PcInstance player : players)
  6186. + EventStats.getInstance().tempTable.put(player.getObjectId(), new int[] { 0, 0, 0, 0 });
  6187. +
  6188. + break;
  6189. +
  6190. + case TELE_BACK:
  6191. + msgToAll("You'll be teleported back in 10 secs");
  6192. + setStatus(State.END);
  6193. + debug("Teleporting back.");
  6194. + schedule(10000);
  6195. + break;
  6196. +
  6197. + case END:
  6198. + teleBackEveryone();
  6199. + if (getBoolean("statTrackingEnabled"))
  6200. + {
  6201. + EventStats.getInstance().applyChanges();
  6202. + EventStats.getInstance().tempTable.clear();
  6203. + EventStats.getInstance().updateSQL(getCurrentEvent().getPlayerList(), getCurrentEvent().eventId);
  6204. + }
  6205. + getCurrentEvent().reset();
  6206. + setCurrentEvent(0);
  6207. + players.clear();
  6208. + colors.clear();
  6209. + positions.clear();
  6210. + titles.clear();
  6211. + announce("Event ended! Next event in " + getInt("betweenEventsTime") / 60 + "mins!");
  6212. + setStatus(State.VOTING);
  6213. + counter = getInt("betweenEventsTime") - 1;
  6214. + debug("Event ended.");
  6215. + tpm.scheduleGeneral(cdtask, 1);
  6216. + break;
  6217. +
  6218. + }
  6219. + }
  6220. + }
  6221. +
  6222. + @SuppressWarnings("synthetic-access")
  6223. + private static class SingletonHolder
  6224. + {
  6225. + protected static final EventManager _instance = new EventManager();
  6226. + }
  6227. +
  6228. + // Manager Statuses
  6229. + protected enum State
  6230. + {
  6231. + REGISTERING, VOTING, RUNNING, TELE_BACK, END
  6232. + }
  6233. +
  6234. + public static EventManager getInstance()
  6235. + {
  6236. + return SingletonHolder._instance;
  6237. + }
  6238. +
  6239. + private EventConfig config;
  6240. + // Event instances
  6241. + public FastMap<Integer, Event> events;
  6242. +
  6243. + // The list of registered players
  6244. + public FastList<L2PcInstance> players;
  6245. +
  6246. + // The current event
  6247. + private Event current;
  6248. +
  6249. + // Original name colors
  6250. + private FastMap<L2PcInstance, Integer> colors;
  6251. +
  6252. + //Original titles
  6253. + protected FastMap<L2PcInstance, String> titles;
  6254. +
  6255. + //Original positions
  6256. + protected FastMap<L2PcInstance, int[]> positions;
  6257. +
  6258. + // Votes for the events
  6259. + private FastMap<L2PcInstance, Integer> votes;
  6260. +
  6261. + private State status;
  6262. +
  6263. + private int counter;
  6264. +
  6265. + private Countdown cdtask;
  6266. +
  6267. + // NPC location
  6268. + public static int[] npcPos = { 82698, 148638, -3473 };
  6269. +
  6270. + // Threadpoolmanager
  6271. + private ThreadPoolManager tpm;
  6272. +
  6273. + // Scheduler
  6274. + private Scheduler task;
  6275. +
  6276. + private Random rnd = new Random();
  6277. +
  6278. + private FileWriter writer;
  6279. +
  6280. + private FastList<Integer> eventIds;
  6281. +
  6282. + private static final SimpleDateFormat _formatter = new SimpleDateFormat("dd/MM/yyyy H:mm:ss");
  6283. +
  6284. + public EventManager()
  6285. + {
  6286. + config = EventConfig.getInstance();
  6287. +
  6288. + events = new FastMap<Integer, Event>();
  6289. + players = new FastList<L2PcInstance>();
  6290. + votes = new FastMap<L2PcInstance, Integer>();
  6291. + titles = new FastMap<L2PcInstance, String>();
  6292. + colors = new FastMap<L2PcInstance, Integer>();
  6293. + positions = new FastMap<L2PcInstance, int[]>();
  6294. + eventIds = new FastList<Integer>();
  6295. + status = State.VOTING;
  6296. + tpm = ThreadPoolManager.getInstance();
  6297. + task = new Scheduler();
  6298. + cdtask = new Countdown();
  6299. + counter = 0;
  6300. +
  6301. + // Add the events to the list
  6302. + events.put(1, new dm());
  6303. + events.put(2, new Domination());
  6304. + events.put(3, new DoubleDomination());
  6305. + events.put(4, new LMS());
  6306. + events.put(5, new Lucky());
  6307. + events.put(6, new Simon());
  6308. + events.put(7, new TvT());
  6309. + events.put(8, new VIPTvT());
  6310. + events.put(9, new Zombie());
  6311. + events.put(10, new CTF());
  6312. + events.put(11, new Russian());
  6313. + events.put(12, new Bomb());
  6314. + events.put(13, new Mutant());
  6315. + events.put(14, new Battlefield());
  6316. +
  6317. + for(int eventId : events.keySet())
  6318. + eventIds.add(eventId);
  6319. +
  6320. + debug(events.size() + " event imported.");
  6321. +
  6322. + // Start the scheduler
  6323. + counter = getInt("firstAfterStartTime") - 1;
  6324. + tpm.scheduleGeneral(cdtask, 1);
  6325. +
  6326. + System.out.println("Event Engine Started");
  6327. + }
  6328. +
  6329. + public boolean addVote(L2PcInstance player, int eventId)
  6330. + {
  6331. + if (getStatus() != State.VOTING)
  6332. + {
  6333. + player.sendMessage("You cant vote now!");
  6334. + return false;
  6335. + }
  6336. + if (votes.containsKey(player))
  6337. + {
  6338. + player.sendMessage("You already voted for an event!");
  6339. + return false;
  6340. + }
  6341. + if (player.getLevel() < 40)
  6342. + {
  6343. + player.sendMessage("Your level is too low to vote for events!");
  6344. + return false;
  6345. + }
  6346. + else
  6347. + {
  6348. + player.sendMessage("You succesfully voted for the event");
  6349. + votes.put(player, eventId);
  6350. + return true;
  6351. + }
  6352. + }
  6353. +
  6354. + private void announce(String text)
  6355. + {
  6356. + Broadcast.toAllOnlinePlayers(new CreatureSay(0, 18, "", "[Event] " + text));
  6357. + }
  6358. +
  6359. + private boolean canRegister(L2PcInstance player)
  6360. + {
  6361. + if (players.contains(player))
  6362. + {
  6363. + player.sendMessage("You already registered to the event!");
  6364. + return false;
  6365. + }
  6366. +
  6367. + if (player.isInJail())
  6368. + {
  6369. + player.sendMessage("You cant register from the jail.");
  6370. + return false;
  6371. + }
  6372. +
  6373. + if (player.isInOlympiadMode())
  6374. + {
  6375. + player.sendMessage("You cant register while youre in the olympiad.");
  6376. + return false;
  6377. + }
  6378. +
  6379. + if (player.getLevel() > getCurrentEvent().getInt("maxLvl"))
  6380. + {
  6381. + player.sendMessage("Youre greater than the max allowed lvl.");
  6382. + return false;
  6383. + }
  6384. +
  6385. + if (player.getLevel() < getCurrentEvent().getInt("minLvl"))
  6386. + {
  6387. + player.sendMessage("Youre lower than the min allowed lvl.");
  6388. + return false;
  6389. + }
  6390. +
  6391. + if (player.getKarma() > 0)
  6392. + {
  6393. + player.sendMessage("You cant register if you have karma.");
  6394. + return false;
  6395. + }
  6396. +
  6397. + if (player.isCursedWeaponEquiped())
  6398. + {
  6399. + player.sendMessage("You cant register with a cursed weapon.");
  6400. + return false;
  6401. + }
  6402. +
  6403. + if (player.isDead())
  6404. + {
  6405. + player.sendMessage("You cant register while youre dead.");
  6406. + return false;
  6407. + }
  6408. +
  6409. + return true;
  6410. + } /*
  6411. + * If theres a running event and
  6412. + */
  6413. +
  6414. + public boolean canTargetPlayer(L2PcInstance target, L2PcInstance self)
  6415. + {
  6416. + if (getStatus() == State.RUNNING)
  6417. + {
  6418. + if ((isRegistered(target) && isRegistered(self)) || (!isRegistered(target) && !isRegistered(self)))
  6419. + return true;
  6420. + else
  6421. + return false;
  6422. + }
  6423. + else
  6424. + return true;
  6425. + }
  6426. +
  6427. + protected int countOfRegistered()
  6428. + {
  6429. + return players.size();
  6430. + }
  6431. +
  6432. + protected void debug(String message)
  6433. + {
  6434. + if (!getBoolean("debug"))
  6435. + return;
  6436. +
  6437. + String today = _formatter.format(new Date());
  6438. +
  6439. + try
  6440. + {
  6441. + writer = new FileWriter("log/EventEngine.log", true);
  6442. + writer.write(today + " - " + message + "\r\n");
  6443. + }
  6444. + catch (IOException e)
  6445. + {
  6446. +
  6447. + }
  6448. + finally
  6449. + {
  6450. + try
  6451. + {
  6452. + writer.close();
  6453. + }
  6454. + catch (Exception e)
  6455. + {
  6456. + }
  6457. + }
  6458. + }
  6459. +
  6460. + protected void end(String text)
  6461. + {
  6462. + announce(text);
  6463. + status = State.TELE_BACK;
  6464. + schedule(1);
  6465. + }
  6466. +
  6467. + public boolean getBoolean(String propName)
  6468. + {
  6469. + return config.getBoolean(0, propName);
  6470. + }
  6471. +
  6472. + public Event getCurrentEvent()
  6473. + {
  6474. + return current;
  6475. + }
  6476. +
  6477. + public FastList<String> getEventNames()
  6478. + {
  6479. + FastList<String> map = new FastList<String>();
  6480. + for (Event event : events.values())
  6481. + map.add(event.getString("eventName"));
  6482. + return map;
  6483. + }
  6484. +
  6485. + public int getInt(String propName)
  6486. + {
  6487. + return config.getInt(0, propName);
  6488. + }
  6489. +
  6490. + protected int[] getPosition(String owner, int num)
  6491. + {
  6492. + return config.getPosition(0, owner, num);
  6493. + }
  6494. +
  6495. + public FastList<Integer> getRestriction(String type)
  6496. + {
  6497. + return config.getRestriction(0, type);
  6498. + }
  6499. +
  6500. + private State getStatus()
  6501. + {
  6502. + return status;
  6503. + }
  6504. +
  6505. + protected String getString(String propName)
  6506. + {
  6507. + return config.getString(0, propName);
  6508. + }
  6509. +
  6510. + private int getVoteCount(int event)
  6511. + {
  6512. + int count = 0;
  6513. + for (int e : votes.values())
  6514. + if (e == event)
  6515. + count++;
  6516. +
  6517. + return count;
  6518. + }
  6519. +
  6520. + private int getVoteWinner()
  6521. + {
  6522. + int old = 0;
  6523. + FastMap<Integer, Integer> temp = new FastMap<Integer, Integer>();
  6524. +
  6525. + for (int vote : votes.values())
  6526. + if (!temp.containsKey(vote))
  6527. + temp.put(vote, 1);
  6528. + else
  6529. + {
  6530. + old = temp.get(vote);
  6531. + old++;
  6532. + temp.getEntry(vote).setValue(old);
  6533. + }
  6534. +
  6535. + int max = temp.head().getNext().getValue();
  6536. + int result = temp.head().getNext().getKey();
  6537. +
  6538. + for (Map.Entry<Integer, Integer> entry : temp.entrySet())
  6539. + if (entry.getValue() > max)
  6540. + {
  6541. + max = entry.getValue();
  6542. + result = entry.getKey();
  6543. + }
  6544. +
  6545. + votes.clear();
  6546. + temp = null;
  6547. + return result;
  6548. +
  6549. + }
  6550. +
  6551. + public boolean isRegistered(L2PcInstance player)
  6552. + {
  6553. + if (getCurrentEvent() != null)
  6554. + return getCurrentEvent().players.containsKey(player);
  6555. + else
  6556. + return false;
  6557. + }
  6558. +
  6559. + public boolean isRegistered(L2Character player)
  6560. + {
  6561. + if (getCurrentEvent() != null)
  6562. + return getCurrentEvent().players.containsKey(player);
  6563. + else
  6564. + return false;
  6565. + }
  6566. +
  6567. + public boolean isRunning()
  6568. + {
  6569. + if (getStatus() == State.RUNNING)
  6570. + return true;
  6571. + else
  6572. + return false;
  6573. + }
  6574. +
  6575. + private void msgToAll(String text)
  6576. + {
  6577. + for (L2PcInstance player : players)
  6578. + player.sendMessage(text);
  6579. + }
  6580. +
  6581. + public void onLogout(L2PcInstance player)
  6582. + {
  6583. + if (votes.containsKey(player))
  6584. + votes.remove(player);
  6585. + if (players.contains(player))
  6586. + {
  6587. + players.remove(player);
  6588. + colors.remove(player);
  6589. + titles.remove(player);
  6590. + positions.remove(player);
  6591. + }
  6592. + }
  6593. +
  6594. + public boolean registerPlayer(L2PcInstance player)
  6595. + {
  6596. + if (getStatus() != State.REGISTERING)
  6597. + {
  6598. + player.sendMessage("You can't register now!");
  6599. + return false;
  6600. + }
  6601. +
  6602. + if(getBoolean("eventBufferEnabled"))
  6603. + if (!EventBuffer.getInstance().playerHaveTemplate(player))
  6604. + {
  6605. + player.sendMessage("You have to set a buff template first!");
  6606. + EventBuffer.getInstance().showHtml(player);
  6607. + return false;
  6608. + }
  6609. +
  6610. + if (canRegister(player))
  6611. + {
  6612. + player.sendMessage("You succesfully registered to the event!");
  6613. + players.add(player);
  6614. + titles.put(player, player.getTitle());
  6615. + colors.put(player, player.getAppearance().getNameColor());
  6616. + positions.put(player, new int[] { player.getX(), player.getY(), player.getZ() });
  6617. + return true;
  6618. + }
  6619. + else
  6620. + {
  6621. + player.sendMessage("You failed on registering to the event!");
  6622. + return false;
  6623. + }
  6624. + }
  6625. +
  6626. + protected void schedule(int time)
  6627. + {
  6628. + tpm.scheduleGeneral(task, time);
  6629. + }
  6630. +
  6631. + private void setCurrentEvent(int eventId)
  6632. + {
  6633. + if (eventId == 0)
  6634. + current = null;
  6635. + else
  6636. + current = events.get(eventId);
  6637. +
  6638. + debug("Changed current event to: " + (current == null ? "null" : current.getString("eventName")));
  6639. + }
  6640. +
  6641. + protected void setStatus(State s)
  6642. + {
  6643. + status = s;
  6644. + }
  6645. +
  6646. + public void showFirstHtml(L2PcInstance player, int obj)
  6647. + {
  6648. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  6649. + TextBuilder sb = new TextBuilder();
  6650. + int count = 0;
  6651. +
  6652. + sb.append("<html><body><table width=270><tr><td width=130>Event Engine </td><td width=70>"+(getBoolean("eventBufferEnabled") ? "<a action=\"bypass -h eventbuffershow\">Buffer</a>" : "")+"</td><td width=70><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  6653. +
  6654. + if (getStatus() == State.VOTING)
  6655. + {
  6656. +
  6657. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Events</td><td width=130><center>Time left: " + cdtask.getTime() + "</td>"+/*<td width=70>Votes: " + votes.size() + "</td>*/"</tr></table><br>");
  6658. +
  6659. + for (Map.Entry<Integer, Event> event : events.entrySet())
  6660. + {
  6661. + count++;
  6662. + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=180>" + event.getValue().getString("eventName") + "</td><td width=30><a action=\"bypass -h eventinfo "+event.getKey()+"\">Info</a></td>"/*<td width=30>*/);
  6663. +
  6664. + /*if (!votes.containsKey(player))
  6665. + sb.append("<a action=\"bypass -h npc_" + obj + "_" + event.getKey() + "\">Vote</a>");
  6666. + else
  6667. + sb.append("Vote");*/
  6668. +
  6669. + sb.append(/*</td><td width=30><center>" + getVoteCount(event.getKey()) + "</td>*/"</tr></table>");
  6670. + }
  6671. + sb.append("</body></html>");
  6672. + html.setHtml(sb.toString());
  6673. + player.sendPacket(html);
  6674. + }
  6675. +
  6676. + if (getStatus() == State.REGISTERING)
  6677. + {
  6678. +
  6679. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>");
  6680. + if (players.contains(player))
  6681. + sb.append("<a action=\"bypass -h npc_" + obj + "_unreg\">Unregister</a>");
  6682. + else
  6683. + sb.append("<a action=\"bypass -h npc_" + obj + "_reg\">Register</a>");
  6684. +
  6685. + sb.append("</td><td width=130><center><a action=\"bypass -h eventinfo "+getCurrentEvent().getInt("ids")+"\">" + getCurrentEvent().getString("eventName") + "</a></td><td width=70>Time: " + cdtask.getTime() + "</td></tr></table><br>");
  6686. +
  6687. + for (L2PcInstance p : EventManager.getInstance().players)
  6688. + {
  6689. + count++;
  6690. + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=120>" + p.getName() + "</td><td width=40>lvl " + p.getLevel() + "</td><td width=110>" + p.getTemplate().className + "</td></tr></table>");
  6691. + }
  6692. +
  6693. + sb.append("</body></html>");
  6694. + html.setHtml(sb.toString());
  6695. + player.sendPacket(html);
  6696. + }
  6697. + if (getStatus() == State.RUNNING)
  6698. + getCurrentEvent().showHtml(player, obj);
  6699. +
  6700. + }
  6701. +
  6702. + private void teleBackEveryone()
  6703. + {
  6704. + for (L2PcInstance player : getCurrentEvent().getPlayerList())
  6705. + {
  6706. + if(player.getPoly().isMorphed())
  6707. + {
  6708. + player.getPoly().setPolyInfo(null, "1");
  6709. + player.decayMe();
  6710. + player.spawnMe(player.getX(),player.getY(),player.getZ());
  6711. + }
  6712. + player.teleToLocation(positions.get(player)[0], positions.get(player)[1], positions.get(player)[2]);
  6713. + player.getAppearance().setNameColor(colors.get(player));
  6714. + player.setTitle(titles.get(player));
  6715. + if (player.getParty() != null)
  6716. + {
  6717. + L2Party party = player.getParty();
  6718. + party.removePartyMember(player);
  6719. + }
  6720. +
  6721. + player.broadcastUserInfo();
  6722. + if (player.isDead())
  6723. + player.doRevive();
  6724. + }
  6725. +
  6726. + }
  6727. +
  6728. + public boolean unregisterPlayer(L2PcInstance player)
  6729. + {
  6730. + if (!players.contains(player))
  6731. + {
  6732. + player.sendMessage("You're not registered to the event!");
  6733. + return false;
  6734. + }
  6735. + if (getStatus() != State.REGISTERING)
  6736. + {
  6737. + player.sendMessage("You can't unregister now!");
  6738. + return false;
  6739. + }
  6740. + else
  6741. + {
  6742. + player.sendMessage("You succesfully unregistered from the event!");
  6743. + players.remove(player);
  6744. + colors.remove(player);
  6745. + positions.remove(player);
  6746. + return true;
  6747. + }
  6748. + }
  6749. +
  6750. + public boolean areTeammates(L2PcInstance player, L2PcInstance target)
  6751. + {
  6752. + if(getCurrentEvent() == null)
  6753. + return false;
  6754. +
  6755. + if(getCurrentEvent().numberOfTeams() == 1)
  6756. + return false;
  6757. +
  6758. + if(getCurrentEvent().numberOfTeams() > 1)
  6759. + if(getCurrentEvent().getTeam(player) == getCurrentEvent().getTeam(target))
  6760. + return true;
  6761. + else
  6762. + return false;
  6763. +
  6764. + return false;
  6765. + }
  6766. +}
  6767. \ No newline at end of file
  6768. Index: head-src/com/l2jfrozen/gameserver/event/EventStats.java
  6769. ===================================================================
  6770. --- head-src/com/l2jfrozen/gameserver/event/EventStats.java (nonexistent)
  6771. +++ head-src/com/l2jfrozen/gameserver/event/EventStats.java (working copy)
  6772. @@ -0,0 +1,383 @@
  6773. +package com.l2jfrozen.gameserver.event;
  6774. +
  6775. +import java.sql.Connection;
  6776. +import java.sql.PreparedStatement;
  6777. +import java.sql.ResultSet;
  6778. +import java.util.Map;
  6779. +import java.util.Set;
  6780. +
  6781. +import javolution.text.TextBuilder;
  6782. +import javolution.util.FastMap;
  6783. +
  6784. +import com.l2jfrozen.util.database.L2DatabaseFactory;
  6785. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  6786. +import com.l2jfrozen.gameserver.network.serverpackets.ShowBoard;
  6787. +
  6788. +public class EventStats
  6789. +{
  6790. +
  6791. + private static class SingletonHolder
  6792. + {
  6793. + protected static final EventStats _instance = new EventStats();
  6794. + }
  6795. +
  6796. + private class StatModell
  6797. + {
  6798. + protected int num;
  6799. + protected int wins;
  6800. + protected int losses;
  6801. + protected int kills;
  6802. + protected int deaths;
  6803. + protected int scores;
  6804. +
  6805. + private StatModell(int num, int wins, int losses, int kills, int deaths, int scores)
  6806. + {
  6807. + this.num = num;
  6808. + this.wins = wins;
  6809. + this.losses = losses;
  6810. + this.kills = kills;
  6811. + this.deaths = deaths;
  6812. + this.scores = scores;
  6813. + }
  6814. +
  6815. + }
  6816. +
  6817. + public static EventStats getInstance()
  6818. + {
  6819. + return SingletonHolder._instance;
  6820. + }
  6821. +
  6822. + private FastMap<Integer, FastMap<Integer, StatModell>> stats;
  6823. +
  6824. + protected FastMap<Integer, int[]> tempTable;
  6825. +
  6826. + private FastMap<Integer, ShowBoard> htmls;
  6827. +
  6828. + private FastMap<Integer, int[]> statSums;
  6829. +
  6830. + public EventStats()
  6831. + {
  6832. + stats = new FastMap<Integer, FastMap<Integer, StatModell>>();
  6833. + tempTable = new FastMap<Integer, int[]>();
  6834. + htmls = new FastMap<Integer, ShowBoard>();
  6835. + statSums = new FastMap<Integer, int[]>();
  6836. + loadSQL();
  6837. + }
  6838. +
  6839. + protected void applyChanges()
  6840. + {
  6841. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  6842. + return;
  6843. +
  6844. + int eventId = EventManager.getInstance().getCurrentEvent().eventId;
  6845. + for (L2PcInstance player : EventManager.getInstance().getCurrentEvent().getPlayerList())
  6846. + {
  6847. + int playerId = player.getObjectId();
  6848. +
  6849. + if (!stats.containsKey(playerId))
  6850. + stats.put(playerId, new FastMap<Integer, StatModell>());
  6851. +
  6852. + if (!stats.get(playerId).containsKey(eventId))
  6853. + stats.get(playerId).put(eventId, new StatModell(0, 0, 0, 0, 0, 0));
  6854. +
  6855. + if (tempTable.get(playerId)[0] == 1)
  6856. + stats.get(playerId).get(eventId).wins = stats.get(playerId).get(eventId).wins + 1;
  6857. + else
  6858. + stats.get(playerId).get(eventId).losses = stats.get(playerId).get(eventId).losses + 1;
  6859. +
  6860. + stats.get(playerId).get(eventId).num = stats.get(playerId).get(eventId).num + 1;
  6861. + stats.get(playerId).get(eventId).kills = stats.get(playerId).get(eventId).kills + tempTable.get(playerId)[1];
  6862. + stats.get(playerId).get(eventId).deaths = stats.get(playerId).get(eventId).deaths + tempTable.get(playerId)[2];
  6863. + stats.get(playerId).get(eventId).scores = stats.get(playerId).get(eventId).scores + tempTable.get(playerId)[3];
  6864. + }
  6865. + EventManager.getInstance().debug("applyChanges finished");
  6866. + }
  6867. +
  6868. + protected void createHtmls()
  6869. + {
  6870. + htmls.clear();
  6871. + TextBuilder sb = new TextBuilder();
  6872. + Connection con = null;
  6873. + PreparedStatement statement = null;
  6874. + try
  6875. + {
  6876. + con = L2DatabaseFactory.getInstance().getConnection();
  6877. + statement = con.prepareStatement("SELECT characters.char_name, event_stats_full.* FROM event_stats_full INNER JOIN characters ON characters.obj_Id = event_stats_full.player ORDER BY event_stats_full.wins DESC");
  6878. + ResultSet rset = statement.executeQuery();
  6879. + rset.last();
  6880. + rset.beforeFirst();
  6881. + int count = 0;
  6882. + while (rset.next())
  6883. + {
  6884. + count++;
  6885. + if (count % 10 == 1)
  6886. + sb.append("<html><body><br><br><center><table width=615 bgcolor=5A5A5A><tr><td width=30><center>Rank</td><td width=100><center>Name</td><td width=55><center>Events</td><td width=55><center>Win%</td><td width=55><center>K:D</td><td width=55><center>Wins</td><td width=55><center>Losses</td><td width=55><center>Kills</td><td width=55><center>Deaths</td><td width=100><center>Favourite Event</td></tr></table><br>" + "<center><table width=635>");
  6887. +
  6888. + sb.append("<tr><td width=30><center>" + count + "</td><td width=100>" + rset.getString("char_name") + "</td><td width=55><center>" + rset.getInt("num") + "</td><td width=55><center>" + rset.getInt("winpercent") + "%</td><td width=55><center>" + rset.getDouble("kdratio") + "</td><td width=55><center>" + rset.getInt("wins") + "</td><td width=55><center>" + rset.getInt("losses") + "</td><td width=55><center>" + rset.getInt("kills") + "</td>" + "<td width=55><center>" + rset.getInt("deaths") + "</td><td width=120><center>" + EventManager.getInstance().events.get(rset.getInt("favevent")).getString("eventName") + "</td></tr>");
  6889. +
  6890. + if (count % 10 == 0)
  6891. + {
  6892. + sb.append("</table></body></html>");
  6893. + htmls.put(count / 10, new ShowBoard(sb.toString(), "101"));
  6894. + sb.clear();
  6895. + }
  6896. + }
  6897. + if (count % 10 != 0 && !htmls.containsKey(count / 10 + 1))
  6898. + {
  6899. + sb.append("</table></body></html>");
  6900. + htmls.put((count / 10 + 1), new ShowBoard(sb.toString(), "101"));
  6901. + sb.clear();
  6902. + }
  6903. + rset.close();
  6904. + statement.close();
  6905. + }
  6906. + catch (Exception e)
  6907. + {
  6908. + System.out.println("create SQL exception.");
  6909. + }
  6910. + finally
  6911. + {
  6912. + try { con.close(); } catch (Exception e) {}
  6913. + }
  6914. + EventManager.getInstance().debug("createHtmls finished");
  6915. + }
  6916. +
  6917. + private void loadSQL()
  6918. + {
  6919. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  6920. + return;
  6921. +
  6922. + Connection con = null;
  6923. + PreparedStatement statement = null;
  6924. + try
  6925. + {
  6926. + con = L2DatabaseFactory.getInstance().getConnection();
  6927. + statement = con.prepareStatement("SELECT * FROM event_stats");
  6928. + ResultSet rset = statement.executeQuery();
  6929. + int count = 0;
  6930. + while (rset.next())
  6931. + {
  6932. + count++;
  6933. + if (!stats.containsKey(rset.getInt("player")))
  6934. + stats.put(rset.getInt("player"), new FastMap<Integer, StatModell>());
  6935. +
  6936. + stats.get(rset.getInt("player")).put(rset.getInt("event"), new StatModell(rset.getInt("num"), rset.getInt("wins"), rset.getInt("losses"), rset.getInt("kills"), rset.getInt("deaths"), rset.getInt("scores")));
  6937. + }
  6938. + rset.close();
  6939. + statement.close();
  6940. +
  6941. + EventManager.getInstance().debug("Stats loaded: " + count + " records.");
  6942. + }
  6943. + catch (Exception e)
  6944. + {
  6945. + System.out.println("EventStats SQL catch");
  6946. + }
  6947. + finally
  6948. + {
  6949. + try { con.close(); } catch (Exception e) {}
  6950. + }
  6951. + createHtmls();
  6952. + }
  6953. +
  6954. + public void showHtml(int id, L2PcInstance player)
  6955. + {
  6956. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  6957. + {
  6958. + player.sendMessage("The stat tracking is disabled.");
  6959. + return;
  6960. + }
  6961. + player.sendPacket(htmls.get(id));
  6962. + player.sendPacket(new ShowBoard(null, "102"));
  6963. + player.sendPacket(new ShowBoard(null, "103"));
  6964. + }
  6965. +
  6966. + public void showPlayerStats(int playerId, L2PcInstance player)
  6967. + {
  6968. + TextBuilder sb = new TextBuilder();
  6969. + sb.append("<html><body><br><br><center><table width=640 bgcolor=5A5A5A><tr><td width=120><center>Event</td><td width=65><center>Count</td><td width=65><center>Win%</td><td width=65><center>K:D</td><td width=65><center>Wins</td><td width=65><center>Losses</td><td width=65><center>Kills</td><td width=65><center>Deaths</td><td width=65><center>Scores</td></tr></table><br>" + "<center><table width=640>");
  6970. +
  6971. + if (stats.containsKey(playerId))
  6972. + for (Map.Entry<Integer, StatModell> event : stats.get(playerId).entrySet())
  6973. + {
  6974. + StatModell stats = event.getValue();
  6975. +
  6976. + if(EventManager.getInstance().events.containsKey(event.getKey()))
  6977. + sb.append("<tr><td width=120>" + EventManager.getInstance().events.get(event.getKey()).getString("eventName") + "</td><td width=65><center>" + stats.num + "</td><td width=65><center>" + (stats.wins / stats.num) * 100 + "%</td><td width=65><center>" + (stats.deaths == 0 ? (double) stats.kills / stats.num : (double) ((stats.kills / stats.deaths) / stats.num)) + "</td><td width=65><center>" + stats.wins + "</td><td width=65><center>" + stats.losses + "</td><td width=65><center>" + stats.kills / stats.num + "</td><td width=65><center>" + stats.deaths / stats.num + "</td><td width=65><center>" + stats.scores / stats.num + "</td></tr>");
  6978. + }
  6979. +
  6980. + sb.append("</table></body></html>");
  6981. + player.sendPacket(new ShowBoard(sb.toString(), "101"));
  6982. + player.sendPacket(new ShowBoard(null, "102"));
  6983. + player.sendPacket(new ShowBoard(null, "103"));
  6984. + }
  6985. +
  6986. + public int getEventKills(int playerId)
  6987. + {
  6988. + int kills = 0;
  6989. +
  6990. + if(!stats.containsKey(playerId))
  6991. + return 0;
  6992. + else
  6993. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  6994. + kills += statmodell.getValue().kills;
  6995. +
  6996. + return kills;
  6997. + }
  6998. +
  6999. + public int getEvents(int playerId)
  7000. + {
  7001. + int num = 0;
  7002. +
  7003. + if(!stats.containsKey(playerId))
  7004. + return 0;
  7005. + else
  7006. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  7007. + num += statmodell.getValue().num;
  7008. +
  7009. + return num;
  7010. + }
  7011. +
  7012. + public int getEventWins(int playerId)
  7013. + {
  7014. + int wins = 0;
  7015. +
  7016. + if(!stats.containsKey(playerId))
  7017. + return 0;
  7018. + else
  7019. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  7020. + wins += statmodell.getValue().wins;
  7021. +
  7022. + return wins;
  7023. + }
  7024. +
  7025. + // num | wins | losses | kills | deaths | fav_event_id
  7026. + protected void sumPlayerStats()
  7027. + {
  7028. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  7029. + return;
  7030. +
  7031. + statSums.clear();
  7032. +
  7033. + for (int playerId : stats.keySet())
  7034. + {
  7035. +
  7036. + int num = 0;
  7037. + int wins = 0;
  7038. + int losses = 0;
  7039. + int kills = 0;
  7040. + int deaths = 0;
  7041. + int faveventid = 0;
  7042. + int faveventamm = 0;
  7043. +
  7044. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  7045. + {
  7046. + num += statmodell.getValue().num;
  7047. + wins += statmodell.getValue().wins;
  7048. + losses += statmodell.getValue().losses;
  7049. + kills += statmodell.getValue().kills;
  7050. + deaths += statmodell.getValue().deaths;
  7051. +
  7052. + if (statmodell.getValue().num > faveventamm)
  7053. + {
  7054. + faveventamm = statmodell.getValue().num;
  7055. + faveventid = statmodell.getKey();
  7056. + }
  7057. + }
  7058. +
  7059. + statSums.put(playerId, new int[] { num, wins, losses, kills, deaths, faveventid });
  7060. +
  7061. + }
  7062. + EventManager.getInstance().debug("sumPlayerStats finished");
  7063. + }
  7064. +
  7065. + protected void updateSQL(Set<L2PcInstance> players, int eventId)
  7066. + {
  7067. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  7068. + return;
  7069. +
  7070. + sumPlayerStats();
  7071. + Connection con = null;
  7072. + PreparedStatement statement = null;
  7073. + try
  7074. + {
  7075. + con = L2DatabaseFactory.getInstance().getConnection();
  7076. +
  7077. + for (L2PcInstance player : players)
  7078. + {
  7079. + int id = player.getObjectId();
  7080. +
  7081. + if (statSums.get(id)[0] != 1)
  7082. + {
  7083. + statement = con.prepareStatement("UPDATE event_stats_full SET num=?, winpercent=?, kdratio=?, wins=?, losses=?, kills=?, deaths=?, favevent=? WHERE player=?");
  7084. + statement.setInt(1, statSums.get(id)[0]);
  7085. + statement.setInt(2, (statSums.get(id)[0] == 0 ? 1 : statSums.get(id)[1] / statSums.get(id)[0]) * 100);
  7086. + statement.setDouble(3, (statSums.get(id)[4] == 0 ? (double) statSums.get(id)[3] : (double) (statSums.get(id)[3] / statSums.get(id)[4])));
  7087. + statement.setInt(4, statSums.get(id)[1]);
  7088. + statement.setInt(5, statSums.get(id)[2]);
  7089. + statement.setInt(6, statSums.get(id)[3]);
  7090. + statement.setInt(7, statSums.get(id)[4]);
  7091. + statement.setInt(8, statSums.get(id)[5]);
  7092. + statement.setInt(9, id);
  7093. +
  7094. + statement.executeUpdate();
  7095. + statement.close();
  7096. + }
  7097. + else
  7098. + {
  7099. + statement = con.prepareStatement("INSERT INTO event_stats_full(player,num,winpercent,kdratio,wins,losses,kills,deaths,favevent) VALUES (?,?,?,?,?,?,?,?,?)");
  7100. + statement.setInt(1, id);
  7101. + statement.setInt(2, statSums.get(id)[0]);
  7102. + statement.setInt(3, (statSums.get(id)[0] == 0 ? 1 : statSums.get(id)[1] / statSums.get(id)[0]) * 100);
  7103. + statement.setDouble(4, (statSums.get(id)[4] == 0 ? (double) statSums.get(id)[3] : (double) (statSums.get(id)[3] / statSums.get(id)[4])));
  7104. + statement.setInt(5, statSums.get(id)[1]);
  7105. + statement.setInt(6, statSums.get(id)[2]);
  7106. + statement.setInt(7, statSums.get(id)[3]);
  7107. + statement.setInt(8, statSums.get(id)[4]);
  7108. + statement.setInt(9, statSums.get(id)[5]);
  7109. + statement.executeUpdate();
  7110. + statement.close();
  7111. + }
  7112. +
  7113. + if (stats.get(id).get(eventId).num != 1)
  7114. + {
  7115. + statement = con.prepareStatement("UPDATE event_stats SET num=?, wins=?, losses=?, kills=?, deaths=?, scores=? WHERE player=? AND event=?");
  7116. + statement.setInt(1, stats.get(id).get(eventId).num);
  7117. + statement.setInt(2, stats.get(id).get(eventId).wins);
  7118. + statement.setInt(3, stats.get(id).get(eventId).losses);
  7119. + statement.setInt(4, stats.get(id).get(eventId).kills);
  7120. + statement.setInt(5, stats.get(id).get(eventId).deaths);
  7121. + statement.setInt(6, stats.get(id).get(eventId).scores);
  7122. + statement.setInt(7, id);
  7123. + statement.setInt(8, eventId);
  7124. + statement.executeUpdate();
  7125. + statement.close();
  7126. + }
  7127. + else
  7128. + {
  7129. + statement = con.prepareStatement("INSERT INTO event_stats(player,event,num,wins,losses,kills,deaths,scores) VALUES (?,?,?,?,?,?,?,?)");
  7130. + statement.setInt(1, id);
  7131. + statement.setInt(2, eventId);
  7132. + statement.setInt(3, stats.get(id).get(eventId).num);
  7133. + statement.setInt(4, stats.get(id).get(eventId).wins);
  7134. + statement.setInt(5, stats.get(id).get(eventId).losses);
  7135. + statement.setInt(6, stats.get(id).get(eventId).kills);
  7136. + statement.setInt(7, stats.get(id).get(eventId).deaths);
  7137. + statement.setInt(8, stats.get(id).get(eventId).scores);
  7138. + statement.executeUpdate();
  7139. + statement.close();
  7140. + }
  7141. +
  7142. + }
  7143. + }
  7144. + catch (Exception e)
  7145. + {
  7146. + System.out.println("EventStats SQL catch");
  7147. + }
  7148. + finally
  7149. + {
  7150. + try { con.close(); } catch (Exception e) {}
  7151. + }
  7152. + EventManager.getInstance().debug("updateSQL finished");
  7153. + createHtmls();
  7154. + }
  7155. +}
  7156. \ No newline at end of file
  7157. Index: head-src/com/l2jfrozen/gameserver/event/EventTeam.java
  7158. ===================================================================
  7159. --- head-src/com/l2jfrozen/gameserver/event/EventTeam.java (nonexistent)
  7160. +++ head-src/com/l2jfrozen/gameserver/event/EventTeam.java (working copy)
  7161. @@ -0,0 +1,109 @@
  7162. +/*
  7163. + * This program is free software: you can redistribute it and/or modify it under
  7164. + * the terms of the GNU General Public License as published by the Free Software
  7165. + * Foundation, either version 3 of the License, or (at your option) any later
  7166. + * version.
  7167. + *
  7168. + * This program is distributed in the hope that it will be useful, but WITHOUT
  7169. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  7170. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  7171. + * details.
  7172. + *
  7173. + * You should have received a copy of the GNU General Public License along with
  7174. + * this program. If not, see <http://www.gnu.org/licenses/>.
  7175. + */
  7176. +package com.l2jfrozen.gameserver.event;
  7177. +
  7178. +/**
  7179. + * @author Rizel
  7180. + *
  7181. + */
  7182. +public class EventTeam implements Comparable<EventTeam>
  7183. +{
  7184. + private int score;
  7185. +
  7186. + private String name;
  7187. +
  7188. + private int[] nameColor;
  7189. +
  7190. + private int[] startPos;
  7191. +
  7192. + private int id;
  7193. +
  7194. + public EventTeam(int id, String name, int[] color, int[] startPos)
  7195. + {
  7196. + this.id = id;
  7197. + score = 0;
  7198. + this.name = name;
  7199. + nameColor = color;
  7200. + this.startPos = startPos;
  7201. + }
  7202. +
  7203. + public int compareTo(EventTeam second)
  7204. + {
  7205. +
  7206. + if (getScore() > second.getScore())
  7207. + return 1;
  7208. + if (getScore() < second.getScore())
  7209. + return -1;
  7210. + if (getScore() == second.getScore())
  7211. + return 0;
  7212. +
  7213. + return 0;
  7214. +
  7215. + }
  7216. +
  7217. + protected String getHexaColor()
  7218. + {
  7219. + String hexa;
  7220. + Integer i1 = nameColor[0];
  7221. + Integer i2 = nameColor[1];
  7222. + Integer i3 = nameColor[2];
  7223. + hexa = "" + (i1 > 15 ? Integer.toHexString(i1) : "0" + Integer.toHexString(i1)) + (i2 > 15 ? Integer.toHexString(i2) : "0" + Integer.toHexString(i2)) + (i3 > 15 ? Integer.toHexString(i3) : "0" + Integer.toHexString(i3));
  7224. + return hexa;
  7225. + }
  7226. +
  7227. + protected int getId()
  7228. + {
  7229. + return id;
  7230. + }
  7231. +
  7232. + protected String getName()
  7233. + {
  7234. + return name;
  7235. + }
  7236. +
  7237. + protected int getScore()
  7238. + {
  7239. + return score;
  7240. + }
  7241. +
  7242. + protected int[] getTeamColor()
  7243. + {
  7244. + return nameColor;
  7245. + }
  7246. +
  7247. + protected int[] getTeamPos()
  7248. + {
  7249. + return startPos;
  7250. + }
  7251. +
  7252. + protected void increaseScore()
  7253. + {
  7254. + score++;
  7255. + }
  7256. +
  7257. + /* (non-Javadoc)
  7258. + * @see java.lang.Comparable#compareTo(java.lang.Object)
  7259. + */
  7260. +
  7261. + protected void increaseScore(int ammount)
  7262. + {
  7263. + score += ammount;
  7264. + }
  7265. +
  7266. + protected void setScore(int ammount)
  7267. + {
  7268. + score = ammount;
  7269. + }
  7270. +}
  7271. \ No newline at end of file
  7272. Index: head-src/com/l2jfrozen/gameserver/event/FormalLMS.java
  7273. ===================================================================
  7274. --- head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (nonexistent)
  7275. +++ head-src/com/l2jfrozen/gameserver/event/FormalLMS.java (working copy)
  7276. @@ -0,0 +1,54 @@
  7277. +/*
  7278. + * This program is free software; you can redistribute it and/or modify
  7279. + * it under the terms of the GNU General Public License as published by
  7280. + * the Free Software Foundation; either version 2, or (at your option)
  7281. + * any later version.
  7282. + *
  7283. + * This program is distributed in the hope that it will be useful,
  7284. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  7285. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  7286. + * GNU General Public License for more details.
  7287. + *
  7288. + * You should have received a copy of the GNU General Public License
  7289. + * along with this program; if not, write to the Free Software
  7290. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  7291. + * 02111-1307, USA.
  7292. + *
  7293. + * http://www.gnu.org/copyleft/gpl.html
  7294. + */
  7295. +package com.l2jfrozen.gameserver.event;
  7296. +
  7297. +
  7298. +import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  7299. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  7300. +
  7301. +/**
  7302. + *
  7303. + *
  7304. + * @author Rizel
  7305. + */
  7306. +public class FormalLMS
  7307. +{
  7308. + private L2ItemInstance formalWear;
  7309. +
  7310. + @SuppressWarnings("synthetic-access")
  7311. + private static class SingletonHolder
  7312. + {
  7313. + protected static final FormalLMS _instance = new FormalLMS();
  7314. + }
  7315. +
  7316. + public static FormalLMS getInstance()
  7317. + {
  7318. + return SingletonHolder._instance;
  7319. + }
  7320. +
  7321. + public FormalLMS()
  7322. + {
  7323. + formalWear = ItemTable.getInstance().createItem("", 6408, 1, null, null);
  7324. + }
  7325. +
  7326. + public int getOID()
  7327. + {
  7328. + return formalWear.getObjectId();
  7329. + }
  7330. +}
  7331. Index: head-src/com/l2jfrozen/gameserver/event/LMS.java
  7332. ===================================================================
  7333. --- head-src/com/l2jfrozen/gameserver/event/LMS.java (nonexistent)
  7334. +++ head-src/com/l2jfrozen/gameserver/event/LMS.java (working copy)
  7335. @@ -0,0 +1,141 @@
  7336. +package com.l2jfrozen.gameserver.event;
  7337. +
  7338. +import javolution.text.TextBuilder;
  7339. +
  7340. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  7341. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  7342. +import com.l2jfrozen.util.random.Rnd;
  7343. +
  7344. +/**
  7345. + * @author Rizel
  7346. + *
  7347. + */
  7348. +public class LMS extends Event
  7349. +{
  7350. + private class Core implements Runnable
  7351. + {
  7352. + public void run()
  7353. + {
  7354. + try
  7355. + {
  7356. + switch (eventState)
  7357. + {
  7358. + case START:
  7359. + divideIntoTeams(1);
  7360. + preparePlayers();
  7361. + teleportToTeamPos();
  7362. + forceSitAll();
  7363. + setStatus(EventState.FIGHT);
  7364. + debug("The event started with " + players.size() + " players.");
  7365. + schedule(20000);
  7366. + break;
  7367. +
  7368. + case FIGHT:
  7369. + forceStandAll();
  7370. + setStatus(EventState.END);
  7371. + debug("The event started.");
  7372. + clock.startClock(getInt("matchTime"));
  7373. + break;
  7374. +
  7375. + case END:
  7376. + clock.setTime(0);
  7377. + debug("The event ended.");
  7378. + L2PcInstance winner = getPlayersWithStatus(0).get(Rnd.get(getPlayersWithStatus(0).size()));
  7379. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  7380. + setStatus(EventState.INACTIVE);
  7381. + EventManager.getInstance().end(winner.getName() + " is the Last Man Standing!");
  7382. + break;
  7383. + }
  7384. + }
  7385. + catch (Throwable e)
  7386. + {
  7387. + e.printStackTrace();
  7388. + EventManager.getInstance().end("Error! Event ended.");
  7389. + }
  7390. + }
  7391. + }
  7392. +
  7393. + private enum EventState
  7394. + {
  7395. + START, FIGHT, END, INACTIVE
  7396. + }
  7397. +
  7398. + private EventState eventState;
  7399. +
  7400. + private Core task;
  7401. +
  7402. + public LMS()
  7403. + {
  7404. + super();
  7405. + eventId = 4;
  7406. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  7407. + task = new Core();
  7408. + }
  7409. +
  7410. + @Override
  7411. + protected void endEvent()
  7412. + {
  7413. + setStatus(EventState.END);
  7414. + clock.setTime(0);
  7415. + }
  7416. +
  7417. + @Override
  7418. + protected String getScorebar()
  7419. + {
  7420. + return "Players: " + getPlayersWithStatus(0).size() + " Time: " + clock.getTime();
  7421. + }
  7422. +
  7423. + @Override
  7424. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  7425. + {
  7426. + super.onKill(victim, killer);
  7427. + increasePlayersScore(killer);
  7428. + setStatus(victim, 1);
  7429. + if (getPlayersWithStatus(0).size() == 1)
  7430. + {
  7431. + setStatus(EventState.END);
  7432. + clock.setTime(0);
  7433. + }
  7434. + }
  7435. +
  7436. + @Override
  7437. + protected void schedule(int time)
  7438. + {
  7439. + tpm.scheduleGeneral(task, time);
  7440. + }
  7441. +
  7442. + private void setStatus(EventState s)
  7443. + {
  7444. + eventState = s;
  7445. + }
  7446. +
  7447. + /* (non-Javadoc)
  7448. + * @see net.sf.l2j.gameserver.event.Event#showHtml(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, int)
  7449. + */
  7450. + @Override
  7451. + protected void showHtml(L2PcInstance player, int obj)
  7452. + {
  7453. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  7454. + TextBuilder sb = new TextBuilder();
  7455. +
  7456. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  7457. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  7458. + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
  7459. + sb.append("<br><table width=270>");
  7460. +
  7461. + for (L2PcInstance p : getPlayersOfTeam(1))
  7462. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Dead" : "Alive") + "</td></tr>");
  7463. +
  7464. + sb.append("</table></body></html>");
  7465. + html.setHtml(sb.toString());
  7466. + player.sendPacket(html);
  7467. +
  7468. + }
  7469. +
  7470. + @Override
  7471. + protected void start()
  7472. + {
  7473. + setStatus(EventState.START);
  7474. + schedule(1);
  7475. + }
  7476. +}
  7477. \ No newline at end of file
  7478. Index: head-src/com/l2jfrozen/gameserver/event/Lucky.java
  7479. ===================================================================
  7480. --- head-src/com/l2jfrozen/gameserver/event/Lucky.java (nonexistent)
  7481. +++ head-src/com/l2jfrozen/gameserver/event/Lucky.java (working copy)
  7482. @@ -0,0 +1,215 @@
  7483. +/*
  7484. + * This program is free software: you can redistribute it and/or modify it under
  7485. + * the terms of the GNU General Public License as published by the Free Software
  7486. + * Foundation, either version 3 of the License, or (at your option) any later
  7487. + * version.
  7488. + *
  7489. + * This program is distributed in the hope that it will be useful, but WITHOUT
  7490. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  7491. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  7492. + * details.
  7493. + *
  7494. + * You should have received a copy of the GNU General Public License along with
  7495. + * this program. If not, see <http://www.gnu.org/licenses/>.
  7496. + */
  7497. +package com.l2jfrozen.gameserver.event;
  7498. +
  7499. +import javolution.text.TextBuilder;
  7500. +import javolution.util.FastList;
  7501. +
  7502. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  7503. +import com.l2jfrozen.gameserver.model.L2Skill;
  7504. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  7505. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  7506. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  7507. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  7508. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  7509. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  7510. +import com.l2jfrozen.util.random.Rnd;
  7511. +
  7512. +/**
  7513. + * @author Rizel
  7514. + *
  7515. + */
  7516. +public class Lucky extends Event
  7517. +{
  7518. + private class Core implements Runnable
  7519. + {
  7520. + public void run()
  7521. + {
  7522. + try
  7523. + {
  7524. + switch (eventState)
  7525. + {
  7526. + case START:
  7527. + divideIntoTeams(1);
  7528. + preparePlayers();
  7529. + teleportToTeamPos();
  7530. + forceSitAll();
  7531. + unequip();
  7532. + setStatus(EventState.FIGHT);
  7533. + schedule(30000);
  7534. + break;
  7535. +
  7536. + case FIGHT:
  7537. + forceStandAll();
  7538. + int[] coor = getPosition("Chests", 1);
  7539. + for (int i = 0; i < getInt("numberOfChests"); i++)
  7540. + chests.add(spawnNPC(coor[0] + (Rnd.get(coor[3] * 2) - coor[3]), coor[1] + (Rnd.get(coor[3] * 2) - coor[3]), coor[2], getInt("chestNpcId")));
  7541. + setStatus(EventState.END);
  7542. + clock.startClock(getInt("matchTime"));
  7543. + break;
  7544. +
  7545. + case END:
  7546. + clock.setTime(0);
  7547. + unSpawnChests();
  7548. + L2PcInstance winner = getPlayerWithMaxScore();
  7549. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  7550. + setStatus(EventState.INACTIVE);
  7551. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " opened chests!");
  7552. + break;
  7553. + }
  7554. + }
  7555. + catch (Throwable e)
  7556. + {
  7557. + e.printStackTrace();
  7558. + EventManager.getInstance().end("Error! Event ended.");
  7559. + }
  7560. + }
  7561. + }
  7562. +
  7563. + private enum EventState
  7564. + {
  7565. + START, FIGHT, END, INACTIVE
  7566. + }
  7567. +
  7568. + private EventState eventState;
  7569. +
  7570. + private Core task;
  7571. +
  7572. + private FastList<L2Spawn> chests;
  7573. +
  7574. + public Lucky()
  7575. + {
  7576. + super();
  7577. + eventId = 5;
  7578. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  7579. + task = new Core();
  7580. + chests = new FastList<L2Spawn>();
  7581. + }
  7582. +
  7583. + /**
  7584. + * @see net.sf.l2j.gameserver.event.Event#endEvent()
  7585. + */
  7586. + @Override
  7587. + protected void endEvent()
  7588. + {
  7589. +
  7590. + setStatus(EventState.END);
  7591. + clock.setTime(0);
  7592. +
  7593. + }
  7594. +
  7595. + @Override
  7596. + protected String getScorebar()
  7597. + {
  7598. + return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
  7599. + }
  7600. +
  7601. + @Override
  7602. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  7603. + {
  7604. + if (npc.getNpcId() != getInt("chestNpcId"))
  7605. + return false;
  7606. +
  7607. + if (Rnd.get(3) == 0)
  7608. + {
  7609. + player.sendPacket(new CreatureSay(npc.getObjectId(), 0, "Chest", "BoOoOoMm!"));
  7610. + player.stopAllEffects();
  7611. + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, player);
  7612. + EventStats.getInstance().tempTable.get(player.getObjectId())[2] = EventStats.getInstance().tempTable.get(player.getObjectId())[2] + 1;
  7613. + addToResurrector(player);
  7614. + }
  7615. + else
  7616. + {
  7617. + npc.doDie(npc);
  7618. + player.addItem("Event", 6392, 1, player, true);
  7619. + increasePlayersScore(player);
  7620. + }
  7621. +
  7622. + npc.deleteMe();
  7623. + npc.getSpawn().stopRespawn();
  7624. + SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), true);
  7625. + chests.remove(npc.getSpawn());
  7626. +
  7627. + if (chests.size() == 0)
  7628. + clock.setTime(0);
  7629. +
  7630. + return true;
  7631. + }
  7632. +
  7633. + @Override
  7634. + protected void schedule(int time)
  7635. + {
  7636. + tpm.scheduleGeneral(task, time);
  7637. + }
  7638. +
  7639. + private void setStatus(EventState s)
  7640. + {
  7641. + eventState = s;
  7642. + }
  7643. + public boolean onUseMagic(L2Skill skill)
  7644. + {
  7645. + return false;
  7646. + }
  7647. +
  7648. + @Override
  7649. + protected void showHtml(L2PcInstance player, int obj)
  7650. + {
  7651. + if (players.size() > 0)
  7652. + {
  7653. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  7654. + TextBuilder sb = new TextBuilder();
  7655. +
  7656. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  7657. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  7658. + sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
  7659. + sb.append("<br><table width=270>");
  7660. +
  7661. + for (L2PcInstance p : getPlayersOfTeam(1))
  7662. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  7663. +
  7664. + sb.append("</table></body></html>");
  7665. + html.setHtml(sb.toString());
  7666. + player.sendPacket(html);
  7667. +
  7668. + }
  7669. +
  7670. + }
  7671. +
  7672. + /* (non-Javadoc)
  7673. + * @see net.sf.l2j.gameserver.event.Event#start()
  7674. + */
  7675. + @Override
  7676. + protected void start()
  7677. + {
  7678. + setStatus(EventState.START);
  7679. + schedule(1);
  7680. + }
  7681. +
  7682. + private void unSpawnChests()
  7683. + {
  7684. + for (L2Spawn s : chests)
  7685. + {
  7686. + s.getLastSpawn().deleteMe();
  7687. + s.stopRespawn();
  7688. + SpawnTable.getInstance().deleteSpawn(s, true);
  7689. + chests.remove(s);
  7690. + }
  7691. + }
  7692. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  7693. + {
  7694. + return false;
  7695. + }
  7696. +
  7697. +}
  7698. \ No newline at end of file
  7699. Index: head-src/com/l2jfrozen/gameserver/event/Mutant.java
  7700. ===================================================================
  7701. --- head-src/com/l2jfrozen/gameserver/event/Mutant.java (nonexistent)
  7702. +++ head-src/com/l2jfrozen/gameserver/event/Mutant.java (working copy)
  7703. @@ -0,0 +1,212 @@
  7704. +/*
  7705. + * This program is free software: you can redistribute it and/or modify it under
  7706. + * the terms of the GNU General Public License as published by the Free Software
  7707. + * Foundation, either version 3 of the License, or (at your option) any later
  7708. + * version.
  7709. + *
  7710. + * This program is distributed in the hope that it will be useful, but WITHOUT
  7711. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  7712. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  7713. + * details.
  7714. + *
  7715. + * You should have received a copy of the GNU General Public License along with
  7716. + * this program. If not, see <http://www.gnu.org/licenses/>.
  7717. + */
  7718. +package com.l2jfrozen.gameserver.event;
  7719. +
  7720. +import javolution.text.TextBuilder;
  7721. +
  7722. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  7723. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  7724. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  7725. +import com.l2jfrozen.gameserver.model.L2Object;
  7726. +
  7727. +/**
  7728. + * @author Rizel
  7729. + *
  7730. + */
  7731. +public class Mutant extends Event
  7732. +{
  7733. +
  7734. + private class Core implements Runnable
  7735. + {
  7736. + public void run()
  7737. + {
  7738. + try
  7739. + {
  7740. + switch (eventState)
  7741. + {
  7742. + case START:
  7743. + divideIntoTeams(1);
  7744. + preparePlayers();
  7745. + teleportToTeamPos();
  7746. + forceSitAll();
  7747. + setStatus(EventState.FIGHT);
  7748. + schedule(20000);
  7749. + break;
  7750. +
  7751. + case FIGHT:
  7752. + forceStandAll();
  7753. + transformMutant(getRandomPlayer());
  7754. + setStatus(EventState.END);
  7755. + clock.startClock(getInt("matchTime"));
  7756. + break;
  7757. +
  7758. + case END:
  7759. + clock.setTime(0);
  7760. + untransformMutant();
  7761. + L2PcInstance winner = getPlayerWithMaxScore();
  7762. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  7763. + setStatus(EventState.INACTIVE);
  7764. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " kills!");
  7765. + break;
  7766. + }
  7767. + }
  7768. + catch (Throwable e)
  7769. + {
  7770. + e.printStackTrace();
  7771. + EventManager.getInstance().end("Error! Event ended.");
  7772. + }
  7773. + }
  7774. + }
  7775. +
  7776. + private enum EventState
  7777. + {
  7778. + START, FIGHT, END, INACTIVE
  7779. + }
  7780. +
  7781. + private EventState eventState;
  7782. +
  7783. + private Core task;
  7784. +
  7785. + private L2PcInstance mutant;
  7786. +
  7787. + public Mutant()
  7788. + {
  7789. + super();
  7790. + eventId = 13;
  7791. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  7792. + task = new Core();
  7793. + }
  7794. +
  7795. + /**
  7796. + * @see net.sf.l2j.gameserver.event.Event#endEvent()
  7797. + */
  7798. + @Override
  7799. + protected void endEvent()
  7800. + {
  7801. + setStatus(EventState.END);
  7802. + clock.setTime(0);
  7803. + }
  7804. +
  7805. + @Override
  7806. + protected String getScorebar()
  7807. + {
  7808. + return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
  7809. + }
  7810. +
  7811. + @Override
  7812. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  7813. + {
  7814. + super.onDie(victim, killer);
  7815. + addToResurrector(victim);
  7816. + }
  7817. +
  7818. + @Override
  7819. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  7820. + {
  7821. + super.onKill(victim, killer);
  7822. + if (getStatus(killer) == 1)
  7823. + increasePlayersScore(killer);
  7824. + if (getStatus(killer) == 0 && getStatus(victim) == 1)
  7825. + transformMutant(killer);
  7826. + killer.addItem("Event", 6392, 1, killer, true);
  7827. + }
  7828. +
  7829. + @Override
  7830. + public void onLogout(L2PcInstance player)
  7831. + {
  7832. + super.onLogout(player);
  7833. +
  7834. + if (mutant == player)
  7835. + transformMutant(getRandomPlayer());
  7836. + }
  7837. +
  7838. + @Override
  7839. + protected void schedule(int time)
  7840. + {
  7841. + tpm.scheduleGeneral(task, time);
  7842. + }
  7843. +
  7844. + private void setStatus(EventState s)
  7845. + {
  7846. + eventState = s;
  7847. + }
  7848. +
  7849. + @Override
  7850. + protected void showHtml(L2PcInstance player, int obj)
  7851. + {
  7852. + if (players.size() > 0)
  7853. + {
  7854. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  7855. + TextBuilder sb = new TextBuilder();
  7856. +
  7857. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  7858. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  7859. + sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
  7860. + sb.append("<br><table width=270>");
  7861. +
  7862. + for (L2PcInstance p : getPlayersOfTeam(1))
  7863. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  7864. +
  7865. + sb.append("</table></body></html>");
  7866. + html.setHtml(sb.toString());
  7867. + player.sendPacket(html);
  7868. + }
  7869. +
  7870. + }
  7871. +
  7872. + @Override
  7873. + protected void start()
  7874. + {
  7875. + setStatus(EventState.START);
  7876. + schedule(1);
  7877. + }
  7878. +
  7879. + private void transformMutant(L2PcInstance player)
  7880. + {
  7881. + player.addSkill(SkillTable.getInstance().getInfo(getInt("mutantBuffId"), 1), false);
  7882. + setStatus(player, 1);
  7883. + untransformMutant();
  7884. + polymorph(player,25286);
  7885. + player.getAppearance().setNameColor(255, 0, 0);
  7886. + player.broadcastUserInfo();
  7887. + mutant = player;
  7888. +
  7889. + }
  7890. +
  7891. + private void untransformMutant()
  7892. + {
  7893. + if (mutant != null)
  7894. + {
  7895. + mutant.getAppearance().setNameColor(getColor("All")[0], getColor("All")[1], getColor("All")[2]);
  7896. + mutant.removeSkill(SkillTable.getInstance().getInfo(getInt("mutantBuffId"), 1), false);
  7897. + setStatus(mutant, 0);
  7898. + unpolymorph(mutant);
  7899. + mutant.broadcastUserInfo();
  7900. + mutant = null;
  7901. + }
  7902. + }
  7903. + @Override
  7904. + public boolean canAttack(L2PcInstance player, L2Object target)
  7905. + {
  7906. + if (target instanceof L2PcInstance)
  7907. + if (getStatus(player) == 0 && getStatus((L2PcInstance) target) == 0)
  7908. + return false;
  7909. + else
  7910. + return true;
  7911. +
  7912. + return false;
  7913. + }
  7914. +
  7915. +}
  7916. \ No newline at end of file
  7917. Index: head-src/com/l2jfrozen/gameserver/event/Russian.java
  7918. ===================================================================
  7919. --- head-src/com/l2jfrozen/gameserver/event/Russian.java (nonexistent)
  7920. +++ head-src/com/l2jfrozen/gameserver/event/Russian.java (working copy)
  7921. @@ -0,0 +1,289 @@
  7922. +package com.l2jfrozen.gameserver.event;
  7923. +
  7924. +import java.util.Map;
  7925. +
  7926. +import javolution.text.TextBuilder;
  7927. +import javolution.util.FastList;
  7928. +import javolution.util.FastMap;
  7929. +
  7930. +import com.l2jfrozen.gameserver.model.L2Object;
  7931. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  7932. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  7933. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  7934. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  7935. +import com.l2jfrozen.util.random.Rnd;
  7936. +
  7937. +/**
  7938. + * @author Rizel
  7939. + *
  7940. + */
  7941. +public class Russian extends Event
  7942. +{
  7943. +
  7944. + private class Core implements Runnable
  7945. + {
  7946. + public void run()
  7947. + {
  7948. + try
  7949. + {
  7950. + switch (eventState)
  7951. + {
  7952. + case START:
  7953. + divideIntoTeams(1);
  7954. + preparePlayers();
  7955. + teleportToTeamPos();
  7956. + forceSitAll();
  7957. + spawnRussians();
  7958. + setStatus(EventState.CHOOSE);
  7959. + debug("The event started with " + players.size() + " players");
  7960. + schedule(30000);
  7961. + break;
  7962. +
  7963. + case CHOOSE:
  7964. + if (round == 0)
  7965. + forceStandAll();
  7966. +
  7967. + round++;
  7968. + setStatus(EventState.CHECK);
  7969. + debug("Choose phase.");
  7970. + schedule(getInt("roundTime") * 1000);
  7971. + break;
  7972. +
  7973. + case CHECK:
  7974. + debug("Check phase");
  7975. + removeAfkers();
  7976. + killRandomRussian();
  7977. +
  7978. + if (countOfPositiveStatus() != 0)
  7979. + {
  7980. + if (russians.size() != 1)
  7981. + {
  7982. + for (L2PcInstance player : getPlayersWithStatus(1))
  7983. + {
  7984. + setStatus(player, 0);
  7985. + increasePlayersScore(player);
  7986. + player.getAppearance().setNameColor(255, 255, 255);
  7987. + player.broadcastUserInfo();
  7988. + }
  7989. +
  7990. + for (FastList<L2PcInstance> chose : choses.values())
  7991. + chose.reset();
  7992. +
  7993. + setStatus(EventState.CHOOSE);
  7994. + schedule(getInt("roundTime") * 1000);
  7995. + }
  7996. + else
  7997. + {
  7998. + for (L2PcInstance player : getPlayersWithStatus(1))
  7999. + giveReward(player, getInt("rewardId"), getInt("rewardAmmount"));
  8000. +
  8001. + unspawnRussians();
  8002. + debug("Event ended. " + countOfPositiveStatus() + " players survived");
  8003. + EventManager.getInstance().end("Congratulation! " + countOfPositiveStatus() + " players survived the event!");
  8004. + }
  8005. +
  8006. + }
  8007. + else
  8008. + {
  8009. + unspawnRussians();
  8010. + debug("Event ended. Noone survived");
  8011. + EventManager.getInstance().end("Unfortunatly no-one survived the event!");
  8012. + }
  8013. + break;
  8014. + }
  8015. + }
  8016. + catch (Throwable e)
  8017. + {
  8018. + e.printStackTrace();
  8019. + EventManager.getInstance().end("Error! Event ended.");
  8020. + }
  8021. +
  8022. + }
  8023. + }
  8024. +
  8025. + private enum EventState
  8026. + {
  8027. + START, CHOOSE, CHECK, INACTIVE
  8028. + }
  8029. +
  8030. + private EventState eventState;
  8031. +
  8032. + private Core task;
  8033. +
  8034. + private int round;
  8035. +
  8036. + private FastMap<Integer, L2Spawn> russians;
  8037. +
  8038. + private FastMap<Integer, FastList<L2PcInstance>> choses;
  8039. +
  8040. + public Russian()
  8041. + {
  8042. + super();
  8043. + eventId = 11;
  8044. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  8045. + task = new Core();
  8046. + round = 0;
  8047. + russians = new FastMap<Integer, L2Spawn>();
  8048. + choses = new FastMap<Integer, FastList<L2PcInstance>>();
  8049. + }
  8050. +
  8051. + @Override
  8052. + public boolean canAttack(L2PcInstance player, L2Object target)
  8053. + {
  8054. + return false;
  8055. + }
  8056. +
  8057. + @Override
  8058. + protected void endEvent()
  8059. + {
  8060. + L2PcInstance winner = players.head().getNext().getKey();
  8061. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  8062. +
  8063. + unspawnRussians();
  8064. + debug("Event ended. 1 player survived");
  8065. + EventManager.getInstance().end("Congratulation! 1 player survived the event!");
  8066. +
  8067. + }
  8068. +
  8069. + @Override
  8070. + protected String getScorebar()
  8071. + {
  8072. + return "";
  8073. + }
  8074. +
  8075. + private void killRandomRussian()
  8076. + {
  8077. + FastList<Integer> ids = new FastList<Integer>();
  8078. + for (int id : russians.keySet())
  8079. + ids.add(id);
  8080. + int russnum = ids.get(Rnd.get(ids.size()));
  8081. + L2Spawn russian = russians.get(russnum);
  8082. + unspawnNPC(russian);
  8083. + announce(getPlayerList(), "The #" + russnum + " russian died.");
  8084. +
  8085. + for (L2PcInstance victim : choses.get(russnum))
  8086. + {
  8087. + setStatus(victim, -1);
  8088. + victim.stopAllEffects();
  8089. + victim.reduceCurrentHp(victim.getMaxHp() + victim.getMaxCp() + 1, victim);
  8090. + victim.sendMessage("Your russian died!");
  8091. + victim.getAppearance().setNameColor(255, 255, 255);
  8092. + }
  8093. + debug("Russian #" + russnum + " died");
  8094. + russians.remove(russnum);
  8095. + }
  8096. +
  8097. + @Override
  8098. + public void onLogout(L2PcInstance player)
  8099. + {
  8100. + super.onLogout(player);
  8101. +
  8102. + for (FastList<L2PcInstance> list : choses.values())
  8103. + if (list.contains(player))
  8104. + list.remove(player);
  8105. + }
  8106. +
  8107. + @Override
  8108. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  8109. + {
  8110. + if (npc.getNpcId() != getInt("russianNpcId"))
  8111. + return false;
  8112. +
  8113. + if (getStatus(player) != 0)
  8114. + return true;
  8115. +
  8116. + for (Map.Entry<Integer, L2Spawn> russian : russians.entrySet())
  8117. + if (russian.getValue().getLastSpawn().getObjectId() == npc.getObjectId())
  8118. + {
  8119. + choses.get(russian.getKey()).add(player);
  8120. + player.getAppearance().setNameColor(0, 255, 0);
  8121. + player.broadcastUserInfo();
  8122. + setStatus(player, 1);
  8123. + }
  8124. +
  8125. + return true;
  8126. + }
  8127. +
  8128. + private void removeAfkers()
  8129. + {
  8130. + int c = 0;
  8131. + for (L2PcInstance player : getPlayerList())
  8132. + if (getStatus(player) == 0)
  8133. + {
  8134. +
  8135. + player.sendMessage("Timeout!");
  8136. + player.stopAllEffects();
  8137. + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, player);
  8138. + setStatus(player, -1);
  8139. + c++;
  8140. + }
  8141. + debug(c + " afkers removed");
  8142. + }
  8143. +
  8144. + @Override
  8145. + public void reset()
  8146. + {
  8147. + super.reset();
  8148. + round = 0;
  8149. + russians.clear();
  8150. + choses.clear();
  8151. + }
  8152. +
  8153. + @Override
  8154. + protected void schedule(int time)
  8155. + {
  8156. + tpm.scheduleGeneral(task, time);
  8157. + }
  8158. +
  8159. + private void setStatus(EventState s)
  8160. + {
  8161. + eventState = s;
  8162. + }
  8163. +
  8164. + @Override
  8165. + protected void showHtml(L2PcInstance player, int obj)
  8166. + {
  8167. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  8168. + TextBuilder sb = new TextBuilder();
  8169. +
  8170. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  8171. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  8172. + sb.append("<table width=270><tr><td><center>Russians left: " + russians.size() + "</td></tr></table>");
  8173. + sb.append("<br><table width=270>");
  8174. +
  8175. + for (L2PcInstance p : getPlayersOfTeam(1))
  8176. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Dead" : "Alive") + "</td></tr>");
  8177. +
  8178. + sb.append("</table></body></html>");
  8179. + html.setHtml(sb.toString());
  8180. + player.sendPacket(html);
  8181. +
  8182. + }
  8183. +
  8184. + private void spawnRussians()
  8185. + {
  8186. + for (int i = 1; i <= getInt("numberOfRussians"); i++)
  8187. + {
  8188. + int[] pos = getPosition("Russian", i);
  8189. + russians.put(i, spawnNPC(pos[0], pos[1], pos[2], getInt("russianNpcId")));
  8190. + choses.put(i, new FastList<L2PcInstance>());
  8191. + russians.get(i).getLastSpawn().setTitle("--" + i + "--");
  8192. + }
  8193. + debug("Russians spawned");
  8194. + }
  8195. +
  8196. + @Override
  8197. + protected void start()
  8198. + {
  8199. + setStatus(EventState.START);
  8200. + schedule(1);
  8201. + }
  8202. +
  8203. + private void unspawnRussians()
  8204. + {
  8205. + for (L2Spawn russian : russians.values())
  8206. + unspawnNPC(russian);
  8207. +
  8208. + debug("Russians unspawned");
  8209. + }
  8210. +}
  8211. \ No newline at end of file
  8212. Index: head-src/com/l2jfrozen/gameserver/event/Simon.java
  8213. ===================================================================
  8214. --- head-src/com/l2jfrozen/gameserver/event/Simon.java (nonexistent)
  8215. +++ head-src/com/l2jfrozen/gameserver/event/Simon.java (working copy)
  8216. @@ -0,0 +1,308 @@
  8217. +package com.l2jfrozen.gameserver.event;
  8218. +
  8219. +import javolution.text.TextBuilder;
  8220. +
  8221. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  8222. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  8223. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  8224. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  8225. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  8226. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  8227. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  8228. +import com.l2jfrozen.util.random.Rnd;
  8229. +
  8230. +/**
  8231. + * @author Rizel
  8232. + *
  8233. + */
  8234. +public class Simon extends Event
  8235. +{
  8236. +
  8237. + private class Core implements Runnable
  8238. + {
  8239. + public void run()
  8240. + {
  8241. + try
  8242. + {
  8243. + switch (eventState)
  8244. + {
  8245. + case START:
  8246. + divideIntoTeams(1);
  8247. + preparePlayers();
  8248. + teleportToTeamPos();
  8249. + forceSitAll();
  8250. + unequip();
  8251. + setStatus(EventState.SAY);
  8252. + schedule(30000);
  8253. + break;
  8254. +
  8255. + case SAY:
  8256. + round++;
  8257. + say = createNewRandomString(getInt("lengthOfFirstWord") + getInt("increasePerRound") * round);
  8258. + sendToPlayers(say.toUpperCase());
  8259. + setStatus(EventState.CHECK);
  8260. + schedule(getInt("roundTime") * 1000);
  8261. + break;
  8262. +
  8263. + case CHECK:
  8264. + if (removeAfkers())
  8265. + {
  8266. + setAllToFalse();
  8267. + setStatus(EventState.SAY);
  8268. + schedule(getInt("roundTime") * 1000);
  8269. + }
  8270. + break;
  8271. +
  8272. + case END:
  8273. + setStatus(EventState.INACTIVE);
  8274. + forceStandAll();
  8275. +
  8276. + if (winner != null)
  8277. + {
  8278. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  8279. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event!");
  8280. + }
  8281. + else
  8282. + EventManager.getInstance().end("The match ended in a tie!");
  8283. + break;
  8284. + }
  8285. + }
  8286. + catch (Throwable e)
  8287. + {
  8288. + e.printStackTrace();
  8289. + EventManager.getInstance().end("Error! Event ended.");
  8290. + }
  8291. + }
  8292. + }
  8293. +
  8294. + private enum EventState
  8295. + {
  8296. + START, SAY, CHECK, END, INACTIVE
  8297. + }
  8298. +
  8299. + private EventState eventState;
  8300. +
  8301. + private Core task;
  8302. +
  8303. + private int round;
  8304. +
  8305. + private String say;
  8306. +
  8307. + private L2NpcInstance npc;
  8308. +
  8309. + private L2Spawn spawn;
  8310. +
  8311. + private CreatureSay message;
  8312. +
  8313. + private L2PcInstance winner;
  8314. +
  8315. + public Simon()
  8316. + {
  8317. + super();
  8318. + eventId = 6;
  8319. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  8320. + task = new Core();
  8321. + round = 0;
  8322. + spawn = null;
  8323. + npc = null;
  8324. + winner = null;
  8325. + }
  8326. +
  8327. + private String createNewRandomString(int size)
  8328. + {
  8329. + String str = "";
  8330. +
  8331. + for (int i = 0; i < size; i++)
  8332. + str = str + (char) (Rnd.nextInt(26) + 97);
  8333. +
  8334. + return str;
  8335. + }
  8336. +
  8337. + @Override
  8338. + protected void endEvent()
  8339. + {
  8340. + winner = players.head().getNext().getKey();
  8341. + setStatus(EventState.END);
  8342. + schedule(1);
  8343. +
  8344. + }
  8345. +
  8346. + @Override
  8347. + protected String getScorebar()
  8348. + {
  8349. + return "";
  8350. + }
  8351. +
  8352. + @Override
  8353. + public void onSay(int type, L2PcInstance player, String text)
  8354. + {
  8355. + if (eventState == EventState.CHECK && getStatus(player) != -1)
  8356. + {
  8357. + if (text.equalsIgnoreCase(say))
  8358. + {
  8359. + setStatus(player, 1);
  8360. + player.sendMessage("Correct!");
  8361. + increasePlayersScore(player);
  8362. + player.getAppearance().setNameColor(0, 255, 0);
  8363. + player.broadcastUserInfo();
  8364. + }
  8365. +
  8366. + else
  8367. + {
  8368. + setStatus(player, -1);
  8369. + player.sendMessage("Wrong!");
  8370. + player.getAppearance().setNameColor(255, 0, 0);
  8371. + player.broadcastUserInfo();
  8372. + }
  8373. +
  8374. + int falses = 0;
  8375. + L2PcInstance falsed = null;
  8376. + for (L2PcInstance p : getPlayerList())
  8377. + if (getStatus(p) == 0)
  8378. + {
  8379. + falses++;
  8380. + falsed = p;
  8381. + }
  8382. +
  8383. + if (falses == 1)
  8384. + {
  8385. + int count = 0;
  8386. + for (L2PcInstance pla : getPlayerList())
  8387. + if (getStatus(pla) == 1)
  8388. + count++;
  8389. +
  8390. + if (count >= 1)
  8391. + {
  8392. + falsed.sendMessage("Last one!");
  8393. + falsed.getAppearance().setNameColor(255, 0, 0);
  8394. + falsed.broadcastUserInfo();
  8395. + setStatus(falsed, -1);
  8396. + }
  8397. +
  8398. + if (count == 0)
  8399. + {
  8400. + winner = getPlayersWithStatus(0).head().getNext().getValue();
  8401. + setStatus(EventState.END);
  8402. + schedule(1);
  8403. + }
  8404. +
  8405. + }
  8406. +
  8407. + if (countOfPositiveStatus() == 1)
  8408. + {
  8409. + winner = getPlayersWithStatus(1).head().getNext().getValue();
  8410. + setStatus(EventState.END);
  8411. + schedule(1);
  8412. + }
  8413. +
  8414. + }
  8415. +
  8416. + }
  8417. +
  8418. + private boolean removeAfkers()
  8419. + {
  8420. +
  8421. + for (L2PcInstance player : getPlayerList())
  8422. + {
  8423. + if (getStatus(player) == 0)
  8424. + {
  8425. +
  8426. + player.sendMessage("Timeout!");
  8427. + player.getAppearance().setNameColor(255, 0, 0);
  8428. + player.broadcastUserInfo();
  8429. + setStatus(player, -1);
  8430. + }
  8431. +
  8432. + if (countOfPositiveStatus() == 1)
  8433. + {
  8434. + if (getPlayersWithStatus(1).size() == 1)
  8435. + winner = getPlayersWithStatus(1).head().getNext().getValue();
  8436. + else
  8437. + winner = null;
  8438. +
  8439. + setStatus(EventState.END);
  8440. + schedule(1);
  8441. + return false;
  8442. + }
  8443. + }
  8444. + return true;
  8445. + }
  8446. +
  8447. + @Override
  8448. + public void reset()
  8449. + {
  8450. + super.reset();
  8451. + round = 0;
  8452. + players.clear();
  8453. + say = "";
  8454. + npc.deleteMe();
  8455. + spawn.stopRespawn();
  8456. + SpawnTable.getInstance().deleteSpawn(spawn, true);
  8457. + npc = null;
  8458. + spawn = null;
  8459. + }
  8460. +
  8461. + @Override
  8462. + protected void schedule(int time)
  8463. + {
  8464. + tpm.scheduleGeneral(task, time);
  8465. + }
  8466. +
  8467. + private void sendToPlayers(String text)
  8468. + {
  8469. + message = new CreatureSay(npc.getObjectId(), 1, "Simon", text);
  8470. + for (L2PcInstance player : getPlayerList())
  8471. + player.sendPacket(message);
  8472. + }
  8473. +
  8474. + private void setAllToFalse()
  8475. + {
  8476. + for (L2PcInstance player : getPlayerList())
  8477. + if (getStatus(player) != -1)
  8478. + {
  8479. + setStatus(player, 0);
  8480. + player.getAppearance().setNameColor(255, 255, 255);
  8481. + player.broadcastUserInfo();
  8482. + }
  8483. + }
  8484. +
  8485. + private void setStatus(EventState s)
  8486. + {
  8487. + eventState = s;
  8488. + }
  8489. +
  8490. + @Override
  8491. + protected void showHtml(L2PcInstance player, int obj)
  8492. + {
  8493. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  8494. + TextBuilder sb = new TextBuilder();
  8495. +
  8496. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  8497. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: ?</td></tr></table>");
  8498. + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
  8499. + sb.append("<br><table width=270>");
  8500. +
  8501. + for (L2PcInstance p : getPlayersOfTeam(1))
  8502. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  8503. +
  8504. + sb.append("</table></body></html>");
  8505. + html.setHtml(sb.toString());
  8506. + player.sendPacket(html);
  8507. + }
  8508. +
  8509. + @Override
  8510. + protected void start()
  8511. + {
  8512. + int[] npcpos = getPosition("Simon", 1);
  8513. + spawn = spawnNPC(npcpos[0], npcpos[1], npcpos[2], getInt("simonNpcId"));
  8514. + npc = spawn.getLastSpawn();
  8515. + setStatus(EventState.START);
  8516. + schedule(1);
  8517. + }
  8518. +
  8519. + @Override
  8520. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  8521. + {
  8522. + return false;
  8523. + }
  8524. +}
  8525. \ No newline at end of file
  8526. Index: head-src/com/l2jfrozen/gameserver/event/TvT.java
  8527. ===================================================================
  8528. --- head-src/com/l2jfrozen/gameserver/event/TvT.java (nonexistent)
  8529. +++ head-src/com/l2jfrozen/gameserver/event/TvT.java (working copy)
  8530. @@ -0,0 +1,151 @@
  8531. +package com.l2jfrozen.gameserver.event;
  8532. +
  8533. +import javolution.text.TextBuilder;
  8534. +
  8535. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  8536. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  8537. +
  8538. +public class TvT extends Event
  8539. +{
  8540. + private class Core implements Runnable
  8541. + {
  8542. + public void run()
  8543. + {
  8544. + try
  8545. + {
  8546. + switch (eventState)
  8547. + {
  8548. + case START:
  8549. + divideIntoTeams(2);
  8550. + preparePlayers();
  8551. + teleportToTeamPos();
  8552. + createPartyOfTeam(1);
  8553. + createPartyOfTeam(2);
  8554. + forceSitAll();
  8555. + setStatus(EventState.FIGHT);
  8556. + schedule(20000);
  8557. + break;
  8558. +
  8559. + case FIGHT:
  8560. + forceStandAll();
  8561. + setStatus(EventState.END);
  8562. + clock.startClock(getInt("matchTime"));
  8563. + break;
  8564. +
  8565. + case END:
  8566. + clock.setTime(0);
  8567. + if (winnerTeam == 0)
  8568. + winnerTeam = getWinnerTeam();
  8569. +
  8570. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  8571. + setStatus(EventState.INACTIVE);
  8572. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " kills!");
  8573. + break;
  8574. + }
  8575. + }
  8576. + catch (Throwable e)
  8577. + {
  8578. + e.printStackTrace();
  8579. + EventManager.getInstance().end("Error! Event ended.");
  8580. + }
  8581. + }
  8582. + }
  8583. +
  8584. + private enum EventState
  8585. + {
  8586. + START, FIGHT, END, TELEPORT, INACTIVE
  8587. + }
  8588. +
  8589. + private EventState eventState;
  8590. +
  8591. + private Core task;
  8592. +
  8593. + public TvT()
  8594. + {
  8595. + super();
  8596. + eventId = 7;
  8597. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  8598. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  8599. + task = new Core();
  8600. + winnerTeam = 0;
  8601. + }
  8602. +
  8603. + @Override
  8604. + protected void endEvent()
  8605. + {
  8606. + winnerTeam = players.head().getNext().getValue()[0];
  8607. +
  8608. + setStatus(EventState.END);
  8609. + clock.setTime(0);
  8610. +
  8611. + }
  8612. +
  8613. + @Override
  8614. + protected String getScorebar()
  8615. + {
  8616. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  8617. + }
  8618. +
  8619. + @Override
  8620. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  8621. + {
  8622. + super.onDie(victim, killer);
  8623. + addToResurrector(victim);
  8624. + }
  8625. +
  8626. + @Override
  8627. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  8628. + {
  8629. + super.onKill(victim, killer);
  8630. + if (getPlayersTeam(killer) != getPlayersTeam(victim))
  8631. + {
  8632. + getPlayersTeam(killer).increaseScore();
  8633. + killer.addItem("Event", 6392, 1, killer, true);
  8634. + increasePlayersScore(killer);
  8635. + }
  8636. +
  8637. + }
  8638. +
  8639. + @Override
  8640. + protected void schedule(int time)
  8641. + {
  8642. + tpm.scheduleGeneral(task, time);
  8643. + }
  8644. +
  8645. + private void setStatus(EventState s)
  8646. + {
  8647. + eventState = s;
  8648. + }
  8649. +
  8650. + @Override
  8651. + protected void showHtml(L2PcInstance player, int obj)
  8652. + {
  8653. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  8654. + TextBuilder sb = new TextBuilder();
  8655. +
  8656. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  8657. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  8658. + sb.append("<center><table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  8659. + sb.append("<br><table width=270>");
  8660. + int i = 0;
  8661. + for (EventTeam team : teams.values())
  8662. + {
  8663. + i++;
  8664. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  8665. + for (L2PcInstance p : getPlayersOfTeam(i))
  8666. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  8667. + }
  8668. +
  8669. + sb.append("</table></body></html>");
  8670. + html.setHtml(sb.toString());
  8671. + player.sendPacket(html);
  8672. +
  8673. + }
  8674. +
  8675. + @Override
  8676. + protected void start()
  8677. + {
  8678. + setStatus(EventState.START);
  8679. + schedule(1);
  8680. + }
  8681. +}
  8682. \ No newline at end of file
  8683. Index: head-src/com/l2jfrozen/gameserver/event/VIPTvT.java
  8684. ===================================================================
  8685. --- head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (nonexistent)
  8686. +++ head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (working copy)
  8687. @@ -0,0 +1,207 @@
  8688. +package com.l2jfrozen.gameserver.event;
  8689. +
  8690. +import javolution.text.TextBuilder;
  8691. +import javolution.util.FastMap;
  8692. +
  8693. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  8694. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  8695. +
  8696. +public class VIPTvT extends Event
  8697. +{
  8698. + private class Core implements Runnable
  8699. + {
  8700. + public void run()
  8701. + {
  8702. + try
  8703. + {
  8704. + switch (eventState)
  8705. + {
  8706. + case START:
  8707. + divideIntoTeams(2);
  8708. + preparePlayers();
  8709. + teleportToTeamPos();
  8710. + createPartyOfTeam(1);
  8711. + createPartyOfTeam(2);
  8712. + selectNewVipOfTeam(1);
  8713. + selectNewVipOfTeam(2);
  8714. + forceSitAll();
  8715. + setStatus(EventState.FIGHT);
  8716. + schedule(20000);
  8717. + break;
  8718. +
  8719. + case FIGHT:
  8720. + forceStandAll();
  8721. + setStatus(EventState.END);
  8722. + clock.startClock(getInt("matchTime"));
  8723. + break;
  8724. +
  8725. + case END:
  8726. + clock.setTime(0);
  8727. + if (winnerTeam == 0)
  8728. + winnerTeam = getWinnerTeam();
  8729. +
  8730. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  8731. + setStatus(EventState.INACTIVE);
  8732. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " VIP kills!");
  8733. + break;
  8734. + }
  8735. + }
  8736. + catch (Throwable e)
  8737. + {
  8738. + e.printStackTrace();
  8739. + EventManager.getInstance().end("Error! Event ended.");
  8740. + }
  8741. +
  8742. + }
  8743. + }
  8744. +
  8745. + private enum EventState
  8746. + {
  8747. + START, FIGHT, END, TELEPORT, INACTIVE
  8748. + }
  8749. +
  8750. + private EventState eventState;
  8751. +
  8752. + private Core task;
  8753. +
  8754. + private FastMap<Integer, L2PcInstance> vips;
  8755. +
  8756. + public VIPTvT()
  8757. + {
  8758. + super();
  8759. + eventId = 8;
  8760. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  8761. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  8762. + task = new Core();
  8763. + vips = new FastMap<Integer, L2PcInstance>();
  8764. + winnerTeam = 0;
  8765. + }
  8766. +
  8767. + @Override
  8768. + protected void endEvent()
  8769. + {
  8770. + winnerTeam = players.head().getNext().getValue()[0];
  8771. +
  8772. + setStatus(EventState.END);
  8773. + clock.setTime(0);
  8774. +
  8775. + }
  8776. +
  8777. + @Override
  8778. + protected String getScorebar()
  8779. + {
  8780. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  8781. + }
  8782. +
  8783. + @Override
  8784. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  8785. + {
  8786. + super.onDie(victim, killer);
  8787. + if (vips.get(1) == victim)
  8788. + {
  8789. + teams.get(2).increaseScore();
  8790. + increasePlayersScore(killer);
  8791. + killer.addItem("Event", 6392, 3, killer, true);
  8792. + selectNewVipOfTeam(1);
  8793. + }
  8794. + if (vips.get(2) == victim)
  8795. + {
  8796. + teams.get(1).increaseScore();
  8797. + increasePlayersScore(killer);
  8798. + killer.addItem("Event", 6392, 3, killer, true);
  8799. + selectNewVipOfTeam(2);
  8800. + }
  8801. +
  8802. + addToResurrector(victim);
  8803. + }
  8804. +
  8805. + @Override
  8806. + protected void schedule(int time)
  8807. + {
  8808. + tpm.scheduleGeneral(task, time);
  8809. + }
  8810. +
  8811. + private void selectNewVipOfTeam(int team)
  8812. + {
  8813. + if (vips.get(team) != null)
  8814. + {
  8815. + int[] nameColor = teams.get(getTeam(vips.get(team))).getTeamColor();
  8816. + vips.get(team).getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
  8817. + }
  8818. +
  8819. + L2PcInstance newvip = getRandomPlayerFromTeam(team);
  8820. + vips.getEntry(team).setValue(newvip);
  8821. + if (team == 1)
  8822. + {
  8823. + int[] c = getColor("BlueVIP");
  8824. + newvip.getAppearance().setNameColor(c[0], c[1], c[2]);
  8825. + }
  8826. +
  8827. + if (team == 2)
  8828. + {
  8829. + int[] c = getColor("RedVIP");
  8830. + newvip.getAppearance().setNameColor(c[0], c[1], c[2]);
  8831. + }
  8832. +
  8833. + if (!newvip.isDead())
  8834. + {
  8835. + newvip.setCurrentCp(newvip.getMaxCp());
  8836. + newvip.setCurrentMp(newvip.getMaxMp());
  8837. + newvip.setCurrentHp(newvip.getMaxHp());
  8838. + }
  8839. +
  8840. + newvip.broadcastUserInfo();
  8841. +
  8842. + }
  8843. +
  8844. + private void setStatus(EventState s)
  8845. + {
  8846. + eventState = s;
  8847. + }
  8848. +
  8849. + @Override
  8850. + protected void showHtml(L2PcInstance player, int obj)
  8851. + {
  8852. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  8853. + TextBuilder sb = new TextBuilder();
  8854. +
  8855. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  8856. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  8857. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  8858. + sb.append("<br><table width=270>");
  8859. + int i = 0;
  8860. + for (EventTeam team : teams.values())
  8861. + {
  8862. + i++;
  8863. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  8864. + for (L2PcInstance p : getPlayersOfTeam(i))
  8865. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  8866. + }
  8867. +
  8868. + sb.append("</table></body></html>");
  8869. + html.setHtml(sb.toString());
  8870. + player.sendPacket(html);
  8871. +
  8872. + }
  8873. +
  8874. + @Override
  8875. + protected void start()
  8876. + {
  8877. + vips.put(1, null);
  8878. + vips.put(2, null);
  8879. + setStatus(EventState.START);
  8880. + schedule(1);
  8881. + }
  8882. +
  8883. + @Override
  8884. + public void onLogout(L2PcInstance player)
  8885. + {
  8886. + super.onLogout(player);
  8887. +
  8888. + if(vips.get(1) == player)
  8889. + selectNewVipOfTeam(1);
  8890. + if(vips.get(2) == player)
  8891. + selectNewVipOfTeam(2);
  8892. +
  8893. + }
  8894. +}
  8895. \ No newline at end of file
  8896. Index: head-src/com/l2jfrozen/gameserver/event/Zombie.java
  8897. ===================================================================
  8898. --- head-src/com/l2jfrozen/gameserver/event/Zombie.java (nonexistent)
  8899. +++ head-src/com/l2jfrozen/gameserver/event/Zombie.java (working copy)
  8900. @@ -0,0 +1,212 @@
  8901. +package com.l2jfrozen.gameserver.event;
  8902. +
  8903. +import javolution.text.TextBuilder;
  8904. +
  8905. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  8906. +import com.l2jfrozen.gameserver.model.L2Object;
  8907. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  8908. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  8909. +
  8910. +/**
  8911. + * @author Rizel
  8912. + *
  8913. + */
  8914. +public class Zombie extends Event
  8915. +{
  8916. + private class Core implements Runnable
  8917. + {
  8918. + public void run()
  8919. + {
  8920. + try
  8921. + {
  8922. + switch (eventState)
  8923. + {
  8924. + case START:
  8925. + divideIntoTeams(1);
  8926. + preparePlayers();
  8927. + teleportToRandom();
  8928. + forceSitAll();
  8929. + unequip();
  8930. + setStatus(EventState.FIGHT);
  8931. + schedule(20000);
  8932. + break;
  8933. +
  8934. + case FIGHT:
  8935. + forceStandAll();
  8936. + transform(getRandomPlayer());
  8937. + setStatus(EventState.END);
  8938. + clock.startClock(getInt("matchTime"));
  8939. + break;
  8940. +
  8941. + case END:
  8942. + setStatus(EventState.INACTIVE);
  8943. + clock.setTime(0);
  8944. +
  8945. + if (getPlayersWithStatus(0).size() != 1)
  8946. + {
  8947. + msgToAll("Tie!");
  8948. + EventManager.getInstance().end("The match has ended in a tie!");
  8949. + }
  8950. +
  8951. + else
  8952. + {
  8953. + L2PcInstance winner = getWinner();
  8954. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  8955. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event!");
  8956. + }
  8957. +
  8958. + break;
  8959. + }
  8960. + }
  8961. + catch (Throwable e)
  8962. + {
  8963. + e.printStackTrace();
  8964. + EventManager.getInstance().end("Error! Event ended.");
  8965. + }
  8966. + }
  8967. + }
  8968. +
  8969. + private enum EventState
  8970. + {
  8971. + START, FIGHT, END, INACTIVE
  8972. + }
  8973. +
  8974. + private EventState eventState;
  8975. +
  8976. + private Core task;
  8977. +
  8978. + public Zombie()
  8979. + {
  8980. + super();
  8981. + eventId = 9;
  8982. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  8983. + task = new Core();
  8984. + }
  8985. +
  8986. + @Override
  8987. + public boolean canAttack(L2PcInstance player, L2Object target)
  8988. + {
  8989. + if (target instanceof L2PcInstance)
  8990. + if (getStatus(player) == 1 && getStatus((L2PcInstance) target) == 0)
  8991. + return true;
  8992. +
  8993. + return false;
  8994. + }
  8995. +
  8996. + @Override
  8997. + protected void endEvent()
  8998. + {
  8999. + setStatus(EventState.END);
  9000. + clock.setTime(0);
  9001. + }
  9002. +
  9003. + @Override
  9004. + protected String getScorebar()
  9005. + {
  9006. + return "Humans: " + getPlayersWithStatus(0).size() + " Time: " + clock.getTime();
  9007. + }
  9008. +
  9009. + private L2PcInstance getWinner()
  9010. + {
  9011. + return getPlayersWithStatus(0).head().getNext().getValue();
  9012. + }
  9013. +
  9014. + @Override
  9015. + public void onHit(L2PcInstance actor, L2PcInstance target)
  9016. + {
  9017. + if (eventState == EventState.END)
  9018. + {
  9019. + if (getStatus(actor) == 1 && getStatus(target) == 0)
  9020. + {
  9021. + transform(target);
  9022. + increasePlayersScore(actor);
  9023. + actor.addItem("Event", 6392, 2, actor, true);
  9024. + }
  9025. +
  9026. + if (getPlayersWithStatus(0).size() == 1)
  9027. + schedule(1);
  9028. + }
  9029. +
  9030. + }
  9031. +
  9032. + @Override
  9033. + public void onLogout(L2PcInstance player)
  9034. + {
  9035. + if (getStatus(player) == 1 && getPlayersWithStatus(1).size() == 1)
  9036. + {
  9037. + super.onLogout(player);
  9038. + transform(getRandomPlayer());
  9039. + }
  9040. + else
  9041. + {
  9042. + super.onLogout(player);
  9043. + }
  9044. +
  9045. + }
  9046. +
  9047. + @Override
  9048. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  9049. + {
  9050. + return false;
  9051. + }
  9052. +
  9053. + @Override
  9054. + protected void schedule(int time)
  9055. + {
  9056. + tpm.scheduleGeneral(task, time);
  9057. + }
  9058. +
  9059. + private void setStatus(EventState s)
  9060. + {
  9061. + eventState = s;
  9062. + }
  9063. +
  9064. + /* (non-Javadoc)
  9065. + * @see net.sf.l2j.gameserver.event.Event#showHtml(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, int)
  9066. + */
  9067. + @Override
  9068. + protected void showHtml(L2PcInstance player, int obj)
  9069. + {
  9070. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  9071. + TextBuilder sb = new TextBuilder();
  9072. +
  9073. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  9074. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  9075. + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
  9076. + sb.append("<br><table width=270>");
  9077. +
  9078. + for (L2PcInstance p : getPlayersOfTeam(1))
  9079. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Zombie" : "Human") + "</td></tr>");
  9080. +
  9081. + sb.append("</table></body></html>");
  9082. + html.setHtml(sb.toString());
  9083. + player.sendPacket(html);
  9084. +
  9085. + }
  9086. +
  9087. + @Override
  9088. + protected void start()
  9089. + {
  9090. + setStatus(EventState.START);
  9091. + schedule(1);
  9092. + }
  9093. +
  9094. + private void teleportToRandom()
  9095. + {
  9096. + for (L2PcInstance player : players.keySet())
  9097. + {
  9098. + int[] loc = getPosition("All", 0);
  9099. + player.teleToLocation(loc[0], loc[1], loc[2]);
  9100. + }
  9101. + }
  9102. +
  9103. + protected void transform(L2PcInstance player)
  9104. + {
  9105. + setStatus(player, 1);
  9106. + polymorph(player,25375);
  9107. + player.getAppearance().setNameColor(255, 0, 0);
  9108. + player.broadcastUserInfo();
  9109. + player.getInventory().unEquipItemInSlot(10);
  9110. + player.getInventory().unEquipItemInSlot(16);
  9111. + }
  9112. +}
  9113. \ No newline at end of file
  9114. Index: head-src/com/l2jfrozen/gameserver/event/dm.java
  9115. ===================================================================
  9116. --- head-src/com/l2jfrozen/gameserver/event/dm.java (nonexistent)
  9117. +++ head-src/com/l2jfrozen/gameserver/event/dm.java (working copy)
  9118. @@ -0,0 +1,139 @@
  9119. +package com.l2jfrozen.gameserver.event;
  9120. +
  9121. +import javolution.text.TextBuilder;
  9122. +
  9123. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  9124. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  9125. +
  9126. +public class dm extends Event
  9127. +{
  9128. +private class Core implements Runnable
  9129. +{
  9130. +public void run()
  9131. +{
  9132. +try
  9133. +{
  9134. +switch (eventState)
  9135. +{
  9136. +case START:
  9137. +divideIntoTeams(1);
  9138. +preparePlayers();
  9139. +teleportToTeamPos();
  9140. +forceSitAll();
  9141. +setStatus(EventState.FIGHT);
  9142. +debug("The event started with " + players.size() + " player");
  9143. +schedule(20000);
  9144. +break;
  9145. +
  9146. +case FIGHT:
  9147. +forceStandAll();
  9148. +setStatus(EventState.END);
  9149. +debug("The fight started");
  9150. +clock.startClock(getInt("matchTime"));
  9151. +break;
  9152. +
  9153. +case END:
  9154. +clock.setTime(0);
  9155. +L2PcInstance winner = getPlayerWithMaxScore();
  9156. +giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  9157. +setStatus(EventState.INACTIVE);
  9158. +debug("The event ended. Winner: " + winner.getName());
  9159. +EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " kills!");
  9160. +break;
  9161. +}
  9162. +}
  9163. +catch (Throwable e)
  9164. +{
  9165. +e.printStackTrace();
  9166. +EventManager.getInstance().end("Error! Event ended.");
  9167. +}
  9168. +}
  9169. +}
  9170. +
  9171. +private enum EventState
  9172. +{
  9173. +START, FIGHT, END, INACTIVE
  9174. +}
  9175. +
  9176. +private EventState eventState;
  9177. +
  9178. +private Core task;
  9179. +
  9180. +public dm()
  9181. +{
  9182. +super();
  9183. +eventId = 1;
  9184. +createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  9185. +task = new Core();
  9186. +}
  9187. +
  9188. +@Override
  9189. +protected void endEvent()
  9190. +{
  9191. +setStatus(EventState.END);
  9192. +clock.setTime(0);
  9193. +
  9194. +}
  9195. +
  9196. +@Override
  9197. +protected String getScorebar()
  9198. +{
  9199. +return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
  9200. +}
  9201. +
  9202. +@Override
  9203. +public void onDie(L2PcInstance victim, L2PcInstance killer)
  9204. +{
  9205. +super.onDie(victim, killer);
  9206. +addToResurrector(victim);
  9207. +}
  9208. +
  9209. +@Override
  9210. +public void onKill(L2PcInstance victim, L2PcInstance killer)
  9211. +{
  9212. +super.onKill(victim, killer);
  9213. +killer.addItem("Event", 6392, 1, killer, true);
  9214. +increasePlayersScore(killer);
  9215. +}
  9216. +
  9217. +@Override
  9218. +protected void schedule(int time)
  9219. +{
  9220. +tpm.scheduleGeneral(task, time);
  9221. +}
  9222. +
  9223. +private void setStatus(EventState s)
  9224. +{
  9225. +eventState = s;
  9226. +}
  9227. +
  9228. +@Override
  9229. +protected void showHtml(L2PcInstance player, int obj)
  9230. +{
  9231. +if (players.size() > 0)
  9232. +{
  9233. +NpcHtmlMessage html = new NpcHtmlMessage(obj);
  9234. +TextBuilder sb = new TextBuilder();
  9235. +
  9236. +sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  9237. +sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  9238. +sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
  9239. +sb.append("<br><table width=270>");
  9240. +
  9241. +for (L2PcInstance p : getPlayersOfTeam(1))
  9242. +sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  9243. +
  9244. +sb.append("</table></body></html>");
  9245. +html.setHtml(sb.toString());
  9246. +player.sendPacket(html);
  9247. +}
  9248. +}
  9249. +
  9250. +@Override
  9251. +protected void start()
  9252. +{
  9253. +setStatus(EventState.START);
  9254. +schedule(1);
  9255. +}
  9256. +
  9257. +}
  9258. \ No newline at end of file
  9259. Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java
  9260. ===================================================================
  9261. --- head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java (revision 1132)
  9262. +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/ExShowScreenMessage.java (working copy)
  9263. @@ -21,26 +21,40 @@
  9264. */
  9265. public class ExShowScreenMessage extends L2GameServerPacket
  9266. {
  9267. + public static enum SMPOS
  9268. + {
  9269. + DUMMY,
  9270. + TOP_LEFT,
  9271. + TOP_CENTER,
  9272. + TOP_RIGHT,
  9273. + MIDDLE_LEFT,
  9274. + MIDDLE_CENTER,
  9275. + MIDDLE_RIGHT,
  9276. + BOTTOM_CENTER,
  9277. + BOTTOM_RIGHT,
  9278. + }
  9279. +
  9280. private final int _type;
  9281. private final int _sysMessageId;
  9282. - private final int _unk1;
  9283. + private final boolean _hide;
  9284. private final int _unk2;
  9285. private final int _unk3;
  9286. - private final int _unk4;
  9287. + private final boolean _fade;
  9288. private final int _size;
  9289. private final int _position;
  9290. private final boolean _effect;
  9291. private final String _text;
  9292. private final int _time;
  9293.  
  9294. +
  9295. public ExShowScreenMessage(final String text, final int time)
  9296. {
  9297. _type = 1;
  9298. _sysMessageId = -1;
  9299. - _unk1 = 0;
  9300. + _hide = false;
  9301. _unk2 = 0;
  9302. _unk3 = 0;
  9303. - _unk4 = 0;
  9304. + _fade = false;
  9305. _position = 0x02;
  9306. _text = text;
  9307. _time = time;
  9308. @@ -48,14 +62,34 @@
  9309. _effect = false;
  9310. }
  9311.  
  9312. - public ExShowScreenMessage(final int type, final int messageId, final int position, final int unk1, final int size, final int unk2, final int unk3, final boolean showEffect, final int time, final int unk4, final String text)
  9313. +
  9314. + public ExShowScreenMessage(String text, int time, SMPOS pos, boolean effect)
  9315. + {
  9316. + this(text, time, pos.ordinal(), effect);
  9317. + }
  9318. +
  9319. + public ExShowScreenMessage(String text, int time, int pos, boolean effect)
  9320. {
  9321. + _type = 1;
  9322. + _sysMessageId = -1;
  9323. + _hide = false;
  9324. + _unk2 = 0;
  9325. + _unk3 = 0;
  9326. + _fade = false;
  9327. + _position = pos;
  9328. + _text = text;
  9329. + _time = time;
  9330. + _size = 0;
  9331. + _effect = effect;
  9332. + }
  9333. +
  9334. + public ExShowScreenMessage(int type, int messageId, int position, boolean hide, int size, int unk2, int unk3, boolean showEffect, int time, boolean fade, String text){
  9335. _type = type;
  9336. _sysMessageId = messageId;
  9337. - _unk1 = unk1;
  9338. + _hide = hide;
  9339. _unk2 = unk2;
  9340. _unk3 = unk3;
  9341. - _unk4 = unk4;
  9342. + _fade = fade;
  9343. _position = position;
  9344. _text = text;
  9345. _time = time;
  9346. @@ -64,12 +98,6 @@
  9347. }
  9348.  
  9349. @Override
  9350. - public String getType()
  9351. - {
  9352. - return "[S]FE:39 ExShowScreenMessage";
  9353. - }
  9354. -
  9355. - @Override
  9356. protected void writeImpl()
  9357. {
  9358. writeC(0xfe);
  9359. @@ -77,13 +105,19 @@
  9360. writeD(_type); // 0 - system messages, 1 - your defined text
  9361. writeD(_sysMessageId); // system message id (_type must be 0 otherwise no effect)
  9362. writeD(_position); // message position
  9363. - writeD(_unk1); // ?
  9364. + writeD(_hide == true ? 1 : 0); // hide
  9365. writeD(_size); // font size 0 - normal, 1 - small
  9366. writeD(_unk2); // ?
  9367. writeD(_unk3); // ?
  9368. writeD(_effect ? 1 : 0); // upper effect (0 - disabled, 1 enabled) - _position must be 2 (center) otherwise no effect
  9369. writeD(_time); // time
  9370. - writeD(_unk4); // ?
  9371. + writeD(_fade == true ? 1 : 0); // fade effect (0 - disabled, 1 enabled)
  9372. writeS(_text); // your text (_type must be 1, otherwise no effect)
  9373. }
  9374. +
  9375. + @Override
  9376. + public String getType()
  9377. + {
  9378. + return "[S]FE:38 ExShowScreenMessage";
  9379. + }
  9380. }
  9381. \ No newline at end of file
  9382. Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java
  9383. ===================================================================
  9384. --- head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (revision 1132)
  9385. +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/Die.java (working copy)
  9386. @@ -20,6 +20,7 @@
  9387. */
  9388. package com.l2jfrozen.gameserver.network.serverpackets;
  9389.  
  9390. +import com.l2jfrozen.gameserver.event.EventManager;
  9391. import com.l2jfrozen.gameserver.datatables.AccessLevel;
  9392. import com.l2jfrozen.gameserver.datatables.sql.AccessLevels;
  9393. import com.l2jfrozen.gameserver.managers.CastleManager;
  9394. @@ -46,6 +47,7 @@
  9395. private boolean _sweepable;
  9396. private boolean _canTeleport;
  9397. private AccessLevel _access = AccessLevels.getInstance()._userAccessLevel;
  9398. + private boolean _event;
  9399. private com.l2jfrozen.gameserver.model.L2Clan _clan;
  9400. L2Character _activeChar;
  9401.  
  9402. @@ -60,6 +62,7 @@
  9403. final L2PcInstance player = (L2PcInstance) cha;
  9404. _access = player.getAccessLevel();
  9405. _clan = player.getClan();
  9406. + _event = EventManager.getInstance().isRegistered((L2PcInstance)cha);
  9407. _canTeleport = !((TvT.is_started() && player._inEventTvT) || (DM.is_started() && player._inEventDM) || (CTF.is_started() && player._inEventCTF) || player.isInFunEvent() || player.isPendingRevive());
  9408. }
  9409. _charObjId = cha.getObjectId();
  9410. @@ -88,45 +91,57 @@
  9411. // sweepable
  9412. // 6d 04 00 00 00 - FIXED
  9413.  
  9414. - writeD(_canTeleport ? 0x01 : 0); // 6d 00 00 00 00 - to nearest village
  9415. + if(_event)
  9416. + {
  9417. + writeD(0x00);
  9418. + writeD(0x00); // 6d 01 00 00 00 - to hide away
  9419. + writeD(0x00); // 6d 02 00 00 00 - to castle
  9420. + writeD(0x00);
  9421. + }
  9422. + else
  9423. + {
  9424. + writeD(_canTeleport ? 0x01 : 0); // 6d 00 00 00 00 - to nearest village
  9425.  
  9426. - if (_canTeleport && _clan != null)
  9427. + if(_canTeleport && _clan != null)
  9428. {
  9429. - L2SiegeClan siegeClan = null;
  9430. - Boolean isInDefense = false;
  9431. - final Castle castle = CastleManager.getInstance().getCastle(_activeChar);
  9432. - final Fort fort = FortManager.getInstance().getFort(_activeChar);
  9433. -
  9434. - if (castle != null && castle.getSiege().getIsInProgress())
  9435. - {
  9436. // siege in progress
  9437. - siegeClan = castle.getSiege().getAttackerClan(_clan);
  9438. - if (siegeClan == null && castle.getSiege().checkIsDefender(_clan))
  9439. + L2SiegeClan siegeClan = null;
  9440. + Boolean isInDefense = false;
  9441. + Castle castle = CastleManager.getInstance().getCastle(_activeChar);
  9442. + Fort fort = FortManager.getInstance().getFort(_activeChar);
  9443. +
  9444. + if (castle != null && castle.getSiege().getIsInProgress())
  9445. {
  9446. - isInDefense = true;
  9447. + //siege in progress
  9448. + siegeClan = castle.getSiege().getAttackerClan(_clan);
  9449. + if (siegeClan == null && castle.getSiege().checkIsDefender(_clan))
  9450. + {
  9451. + isInDefense = true;
  9452. + }
  9453. }
  9454. - }
  9455. - else if (fort != null && fort.getSiege().getIsInProgress())
  9456. - {
  9457. - // siege in progress
  9458. - siegeClan = fort.getSiege().getAttackerClan(_clan);
  9459. - if (siegeClan == null && fort.getSiege().checkIsDefender(_clan))
  9460. - {
  9461. - isInDefense = true;
  9462. - }
  9463. - }
  9464. -
  9465. - writeD(_clan.getHasHideout() > 0 ? 0x01 : 0x00); // 6d 01 00 00 00 - to hide away
  9466. - writeD(_clan.getHasCastle() > 0 || _clan.getHasFort() > 0 || isInDefense ? 0x01 : 0x00); // 6d 02 00 00 00 - to castle
  9467. - writeD(siegeClan != null && !isInDefense && siegeClan.getFlag().size() > 0 ? 0x01 : 0x00); // 6d 03 00 00 00 - to siege HQ
  9468. - }
  9469. - else
  9470. - {
  9471. - writeD(0x00); // 6d 01 00 00 00 - to hide away
  9472. - writeD(0x00); // 6d 02 00 00 00 - to castle
  9473. - writeD(0x00); // 6d 03 00 00 00 - to siege HQ
  9474. + else if(fort != null && fort.getSiege().getIsInProgress())
  9475. + {
  9476. + //siege in progress
  9477. + siegeClan = fort.getSiege().getAttackerClan(_clan);
  9478. + if(siegeClan == null && fort.getSiege().checkIsDefender(_clan))
  9479. + {
  9480. + isInDefense = true;
  9481. + }
  9482. + }
  9483. +
  9484. + writeD(_clan.getHasHideout() > 0 ? 0x01 : 0x00); // 6d 01 00 00 00 - to hide away
  9485. + writeD(_clan.getHasCastle() > 0 || _clan.getHasFort() > 0 || isInDefense ? 0x01 : 0x00); // 6d 02 00 00 00 - to castle
  9486. + writeD(siegeClan != null && !isInDefense && siegeClan.getFlag().size() > 0 ? 0x01 : 0x00); // 6d 03 00 00 00 - to siege HQ
  9487. }
  9488.  
  9489. + else
  9490. + {
  9491. + writeD(0x00); // 6d 01 00 00 00 - to hide away
  9492. + writeD(0x00); // 6d 02 00 00 00 - to castle
  9493. + writeD(0x00); // 6d 03 00 00 00 - to siege HQ
  9494. + }
  9495. + }
  9496. +
  9497. writeD(_sweepable ? 0x01 : 0x00); // sweepable (blue glow)
  9498. writeD(_access.allowFixedRes() ? 0x01 : 0x00); // 6d 04 00 00 00 - to FIXED
  9499. }
  9500. Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java
  9501. ===================================================================
  9502. --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java (revision 1132)
  9503. +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2NpcInstance.java (working copy)
  9504. @@ -39,6 +39,7 @@
  9505. import com.l2jfrozen.gameserver.datatables.sql.HelperBuffTable;
  9506. import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  9507. import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  9508. +import com.l2jfrozen.gameserver.event.EventManager;
  9509. import com.l2jfrozen.gameserver.idfactory.IdFactory;
  9510. import com.l2jfrozen.gameserver.managers.CastleManager;
  9511. import com.l2jfrozen.gameserver.managers.CustomNpcInstanceManager;
  9512. @@ -2966,6 +2967,20 @@
  9513. break;
  9514. }
  9515.  
  9516. + if (npcId == EventManager.getInstance().getInt("managerNpcId"))
  9517. + {
  9518. + EventManager.getInstance().showFirstHtml(player,getObjectId());
  9519. + player.sendPacket( new ActionFailed() );
  9520. + return;
  9521. + }
  9522. +
  9523. + if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(player))
  9524. + if (EventManager.getInstance().getCurrentEvent().onTalkNpc(this,player))
  9525. + {
  9526. + player.sendPacket( new ActionFailed() );
  9527. + return;
  9528. + }
  9529. +
  9530. if (this instanceof L2CastleTeleporterInstance)
  9531. {
  9532. ((L2CastleTeleporterInstance) this).showChatWindow(player);
  9533. Index: head-src/com/l2jfrozen/gameserver/event/EventStats.java
  9534. ===================================================================
  9535. --- head-src/com/l2jfrozen/gameserver/event/EventStats.java (nonexistent)
  9536. +++ head-src/com/l2jfrozen/gameserver/event/EventStats.java (working copy)
  9537. @@ -0,0 +1,383 @@
  9538. +package com.l2jfrozen.gameserver.event;
  9539. +
  9540. +import java.sql.Connection;
  9541. +import java.sql.PreparedStatement;
  9542. +import java.sql.ResultSet;
  9543. +import java.util.Map;
  9544. +import java.util.Set;
  9545. +
  9546. +import javolution.text.TextBuilder;
  9547. +import javolution.util.FastMap;
  9548. +
  9549. +import com.l2jfrozen.util.database.L2DatabaseFactory;
  9550. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  9551. +import com.l2jfrozen.gameserver.network.serverpackets.ShowBoard;
  9552. +
  9553. +public class EventStats
  9554. +{
  9555. +
  9556. + private static class SingletonHolder
  9557. + {
  9558. + protected static final EventStats _instance = new EventStats();
  9559. + }
  9560. +
  9561. + private class StatModell
  9562. + {
  9563. + protected int num;
  9564. + protected int wins;
  9565. + protected int losses;
  9566. + protected int kills;
  9567. + protected int deaths;
  9568. + protected int scores;
  9569. +
  9570. + private StatModell(int num, int wins, int losses, int kills, int deaths, int scores)
  9571. + {
  9572. + this.num = num;
  9573. + this.wins = wins;
  9574. + this.losses = losses;
  9575. + this.kills = kills;
  9576. + this.deaths = deaths;
  9577. + this.scores = scores;
  9578. + }
  9579. +
  9580. + }
  9581. +
  9582. + public static EventStats getInstance()
  9583. + {
  9584. + return SingletonHolder._instance;
  9585. + }
  9586. +
  9587. + private FastMap<Integer, FastMap<Integer, StatModell>> stats;
  9588. +
  9589. + protected FastMap<Integer, int[]> tempTable;
  9590. +
  9591. + private FastMap<Integer, ShowBoard> htmls;
  9592. +
  9593. + private FastMap<Integer, int[]> statSums;
  9594. +
  9595. + public EventStats()
  9596. + {
  9597. + stats = new FastMap<Integer, FastMap<Integer, StatModell>>();
  9598. + tempTable = new FastMap<Integer, int[]>();
  9599. + htmls = new FastMap<Integer, ShowBoard>();
  9600. + statSums = new FastMap<Integer, int[]>();
  9601. + loadSQL();
  9602. + }
  9603. +
  9604. + protected void applyChanges()
  9605. + {
  9606. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  9607. + return;
  9608. +
  9609. + int eventId = EventManager.getInstance().getCurrentEvent().eventId;
  9610. + for (L2PcInstance player : EventManager.getInstance().getCurrentEvent().getPlayerList())
  9611. + {
  9612. + int playerId = player.getObjectId();
  9613. +
  9614. + if (!stats.containsKey(playerId))
  9615. + stats.put(playerId, new FastMap<Integer, StatModell>());
  9616. +
  9617. + if (!stats.get(playerId).containsKey(eventId))
  9618. + stats.get(playerId).put(eventId, new StatModell(0, 0, 0, 0, 0, 0));
  9619. +
  9620. + if (tempTable.get(playerId)[0] == 1)
  9621. + stats.get(playerId).get(eventId).wins = stats.get(playerId).get(eventId).wins + 1;
  9622. + else
  9623. + stats.get(playerId).get(eventId).losses = stats.get(playerId).get(eventId).losses + 1;
  9624. +
  9625. + stats.get(playerId).get(eventId).num = stats.get(playerId).get(eventId).num + 1;
  9626. + stats.get(playerId).get(eventId).kills = stats.get(playerId).get(eventId).kills + tempTable.get(playerId)[1];
  9627. + stats.get(playerId).get(eventId).deaths = stats.get(playerId).get(eventId).deaths + tempTable.get(playerId)[2];
  9628. + stats.get(playerId).get(eventId).scores = stats.get(playerId).get(eventId).scores + tempTable.get(playerId)[3];
  9629. + }
  9630. + EventManager.getInstance().debug("applyChanges finished");
  9631. + }
  9632. +
  9633. + protected void createHtmls()
  9634. + {
  9635. + htmls.clear();
  9636. + TextBuilder sb = new TextBuilder();
  9637. + Connection con = null;
  9638. + PreparedStatement statement = null;
  9639. + try
  9640. + {
  9641. + con = L2DatabaseFactory.getInstance().getConnection();
  9642. + statement = con.prepareStatement("SELECT characters.char_name, event_stats_full.* FROM event_stats_full INNER JOIN characters ON characters.obj_Id = event_stats_full.player ORDER BY event_stats_full.wins DESC");
  9643. + ResultSet rset = statement.executeQuery();
  9644. + rset.last();
  9645. + rset.beforeFirst();
  9646. + int count = 0;
  9647. + while (rset.next())
  9648. + {
  9649. + count++;
  9650. + if (count % 10 == 1)
  9651. + sb.append("<html><body><br><br><center><table width=615 bgcolor=5A5A5A><tr><td width=30><center>Rank</td><td width=100><center>Name</td><td width=55><center>Events</td><td width=55><center>Win%</td><td width=55><center>K:D</td><td width=55><center>Wins</td><td width=55><center>Losses</td><td width=55><center>Kills</td><td width=55><center>Deaths</td><td width=100><center>Favourite Event</td></tr></table><br>" + "<center><table width=635>");
  9652. +
  9653. + sb.append("<tr><td width=30><center>" + count + "</td><td width=100>" + rset.getString("char_name") + "</td><td width=55><center>" + rset.getInt("num") + "</td><td width=55><center>" + rset.getInt("winpercent") + "%</td><td width=55><center>" + rset.getDouble("kdratio") + "</td><td width=55><center>" + rset.getInt("wins") + "</td><td width=55><center>" + rset.getInt("losses") + "</td><td width=55><center>" + rset.getInt("kills") + "</td>" + "<td width=55><center>" + rset.getInt("deaths") + "</td><td width=120><center>" + EventManager.getInstance().events.get(rset.getInt("favevent")).getString("eventName") + "</td></tr>");
  9654. +
  9655. + if (count % 10 == 0)
  9656. + {
  9657. + sb.append("</table></body></html>");
  9658. + htmls.put(count / 10, new ShowBoard(sb.toString(), "101"));
  9659. + sb.clear();
  9660. + }
  9661. + }
  9662. + if (count % 10 != 0 && !htmls.containsKey(count / 10 + 1))
  9663. + {
  9664. + sb.append("</table></body></html>");
  9665. + htmls.put((count / 10 + 1), new ShowBoard(sb.toString(), "101"));
  9666. + sb.clear();
  9667. + }
  9668. + rset.close();
  9669. + statement.close();
  9670. + }
  9671. + catch (Exception e)
  9672. + {
  9673. + System.out.println("create SQL exception.");
  9674. + }
  9675. + finally
  9676. + {
  9677. + try { con.close(); } catch (Exception e) {}
  9678. + }
  9679. + EventManager.getInstance().debug("createHtmls finished");
  9680. + }
  9681. +
  9682. + private void loadSQL()
  9683. + {
  9684. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  9685. + return;
  9686. +
  9687. + Connection con = null;
  9688. + PreparedStatement statement = null;
  9689. + try
  9690. + {
  9691. + con = L2DatabaseFactory.getInstance().getConnection();
  9692. + statement = con.prepareStatement("SELECT * FROM event_stats");
  9693. + ResultSet rset = statement.executeQuery();
  9694. + int count = 0;
  9695. + while (rset.next())
  9696. + {
  9697. + count++;
  9698. + if (!stats.containsKey(rset.getInt("player")))
  9699. + stats.put(rset.getInt("player"), new FastMap<Integer, StatModell>());
  9700. +
  9701. + stats.get(rset.getInt("player")).put(rset.getInt("event"), new StatModell(rset.getInt("num"), rset.getInt("wins"), rset.getInt("losses"), rset.getInt("kills"), rset.getInt("deaths"), rset.getInt("scores")));
  9702. + }
  9703. + rset.close();
  9704. + statement.close();
  9705. +
  9706. + EventManager.getInstance().debug("Stats loaded: " + count + " records.");
  9707. + }
  9708. + catch (Exception e)
  9709. + {
  9710. + System.out.println("EventStats SQL catch");
  9711. + }
  9712. + finally
  9713. + {
  9714. + try { con.close(); } catch (Exception e) {}
  9715. + }
  9716. + createHtmls();
  9717. + }
  9718. +
  9719. + public void showHtml(int id, L2PcInstance player)
  9720. + {
  9721. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  9722. + {
  9723. + player.sendMessage("The stat tracking is disabled.");
  9724. + return;
  9725. + }
  9726. + player.sendPacket(htmls.get(id));
  9727. + player.sendPacket(new ShowBoard(null, "102"));
  9728. + player.sendPacket(new ShowBoard(null, "103"));
  9729. + }
  9730. +
  9731. + public void showPlayerStats(int playerId, L2PcInstance player)
  9732. + {
  9733. + TextBuilder sb = new TextBuilder();
  9734. + sb.append("<html><body><br><br><center><table width=640 bgcolor=5A5A5A><tr><td width=120><center>Event</td><td width=65><center>Count</td><td width=65><center>Win%</td><td width=65><center>K:D</td><td width=65><center>Wins</td><td width=65><center>Losses</td><td width=65><center>Kills</td><td width=65><center>Deaths</td><td width=65><center>Scores</td></tr></table><br>" + "<center><table width=640>");
  9735. +
  9736. + if (stats.containsKey(playerId))
  9737. + for (Map.Entry<Integer, StatModell> event : stats.get(playerId).entrySet())
  9738. + {
  9739. + StatModell stats = event.getValue();
  9740. +
  9741. + if(EventManager.getInstance().events.containsKey(event.getKey()))
  9742. + sb.append("<tr><td width=120>" + EventManager.getInstance().events.get(event.getKey()).getString("eventName") + "</td><td width=65><center>" + stats.num + "</td><td width=65><center>" + (stats.wins / stats.num) * 100 + "%</td><td width=65><center>" + (stats.deaths == 0 ? (double) stats.kills / stats.num : (double) ((stats.kills / stats.deaths) / stats.num)) + "</td><td width=65><center>" + stats.wins + "</td><td width=65><center>" + stats.losses + "</td><td width=65><center>" + stats.kills / stats.num + "</td><td width=65><center>" + stats.deaths / stats.num + "</td><td width=65><center>" + stats.scores / stats.num + "</td></tr>");
  9743. + }
  9744. +
  9745. + sb.append("</table></body></html>");
  9746. + player.sendPacket(new ShowBoard(sb.toString(), "101"));
  9747. + player.sendPacket(new ShowBoard(null, "102"));
  9748. + player.sendPacket(new ShowBoard(null, "103"));
  9749. + }
  9750. +
  9751. + public int getEventKills(int playerId)
  9752. + {
  9753. + int kills = 0;
  9754. +
  9755. + if(!stats.containsKey(playerId))
  9756. + return 0;
  9757. + else
  9758. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  9759. + kills += statmodell.getValue().kills;
  9760. +
  9761. + return kills;
  9762. + }
  9763. +
  9764. + public int getEvents(int playerId)
  9765. + {
  9766. + int num = 0;
  9767. +
  9768. + if(!stats.containsKey(playerId))
  9769. + return 0;
  9770. + else
  9771. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  9772. + num += statmodell.getValue().num;
  9773. +
  9774. + return num;
  9775. + }
  9776. +
  9777. + public int getEventWins(int playerId)
  9778. + {
  9779. + int wins = 0;
  9780. +
  9781. + if(!stats.containsKey(playerId))
  9782. + return 0;
  9783. + else
  9784. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  9785. + wins += statmodell.getValue().wins;
  9786. +
  9787. + return wins;
  9788. + }
  9789. +
  9790. + // num | wins | losses | kills | deaths | fav_event_id
  9791. + protected void sumPlayerStats()
  9792. + {
  9793. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  9794. + return;
  9795. +
  9796. + statSums.clear();
  9797. +
  9798. + for (int playerId : stats.keySet())
  9799. + {
  9800. +
  9801. + int num = 0;
  9802. + int wins = 0;
  9803. + int losses = 0;
  9804. + int kills = 0;
  9805. + int deaths = 0;
  9806. + int faveventid = 0;
  9807. + int faveventamm = 0;
  9808. +
  9809. + for (Map.Entry<Integer, StatModell> statmodell : stats.get(playerId).entrySet())
  9810. + {
  9811. + num += statmodell.getValue().num;
  9812. + wins += statmodell.getValue().wins;
  9813. + losses += statmodell.getValue().losses;
  9814. + kills += statmodell.getValue().kills;
  9815. + deaths += statmodell.getValue().deaths;
  9816. +
  9817. + if (statmodell.getValue().num > faveventamm)
  9818. + {
  9819. + faveventamm = statmodell.getValue().num;
  9820. + faveventid = statmodell.getKey();
  9821. + }
  9822. + }
  9823. +
  9824. + statSums.put(playerId, new int[] { num, wins, losses, kills, deaths, faveventid });
  9825. +
  9826. + }
  9827. + EventManager.getInstance().debug("sumPlayerStats finished");
  9828. + }
  9829. +
  9830. + protected void updateSQL(Set<L2PcInstance> players, int eventId)
  9831. + {
  9832. + if (!EventManager.getInstance().getBoolean("statTrackingEnabled"))
  9833. + return;
  9834. +
  9835. + sumPlayerStats();
  9836. + Connection con = null;
  9837. + PreparedStatement statement = null;
  9838. + try
  9839. + {
  9840. + con = L2DatabaseFactory.getInstance().getConnection();
  9841. +
  9842. + for (L2PcInstance player : players)
  9843. + {
  9844. + int id = player.getObjectId();
  9845. +
  9846. + if (statSums.get(id)[0] != 1)
  9847. + {
  9848. + statement = con.prepareStatement("UPDATE event_stats_full SET num=?, winpercent=?, kdratio=?, wins=?, losses=?, kills=?, deaths=?, favevent=? WHERE player=?");
  9849. + statement.setInt(1, statSums.get(id)[0]);
  9850. + statement.setInt(2, (statSums.get(id)[0] == 0 ? 1 : statSums.get(id)[1] / statSums.get(id)[0]) * 100);
  9851. + statement.setDouble(3, (statSums.get(id)[4] == 0 ? (double) statSums.get(id)[3] : (double) (statSums.get(id)[3] / statSums.get(id)[4])));
  9852. + statement.setInt(4, statSums.get(id)[1]);
  9853. + statement.setInt(5, statSums.get(id)[2]);
  9854. + statement.setInt(6, statSums.get(id)[3]);
  9855. + statement.setInt(7, statSums.get(id)[4]);
  9856. + statement.setInt(8, statSums.get(id)[5]);
  9857. + statement.setInt(9, id);
  9858. +
  9859. + statement.executeUpdate();
  9860. + statement.close();
  9861. + }
  9862. + else
  9863. + {
  9864. + statement = con.prepareStatement("INSERT INTO event_stats_full(player,num,winpercent,kdratio,wins,losses,kills,deaths,favevent) VALUES (?,?,?,?,?,?,?,?,?)");
  9865. + statement.setInt(1, id);
  9866. + statement.setInt(2, statSums.get(id)[0]);
  9867. + statement.setInt(3, (statSums.get(id)[0] == 0 ? 1 : statSums.get(id)[1] / statSums.get(id)[0]) * 100);
  9868. + statement.setDouble(4, (statSums.get(id)[4] == 0 ? (double) statSums.get(id)[3] : (double) (statSums.get(id)[3] / statSums.get(id)[4])));
  9869. + statement.setInt(5, statSums.get(id)[1]);
  9870. + statement.setInt(6, statSums.get(id)[2]);
  9871. + statement.setInt(7, statSums.get(id)[3]);
  9872. + statement.setInt(8, statSums.get(id)[4]);
  9873. + statement.setInt(9, statSums.get(id)[5]);
  9874. + statement.executeUpdate();
  9875. + statement.close();
  9876. + }
  9877. +
  9878. + if (stats.get(id).get(eventId).num != 1)
  9879. + {
  9880. + statement = con.prepareStatement("UPDATE event_stats SET num=?, wins=?, losses=?, kills=?, deaths=?, scores=? WHERE player=? AND event=?");
  9881. + statement.setInt(1, stats.get(id).get(eventId).num);
  9882. + statement.setInt(2, stats.get(id).get(eventId).wins);
  9883. + statement.setInt(3, stats.get(id).get(eventId).losses);
  9884. + statement.setInt(4, stats.get(id).get(eventId).kills);
  9885. + statement.setInt(5, stats.get(id).get(eventId).deaths);
  9886. + statement.setInt(6, stats.get(id).get(eventId).scores);
  9887. + statement.setInt(7, id);
  9888. + statement.setInt(8, eventId);
  9889. + statement.executeUpdate();
  9890. + statement.close();
  9891. + }
  9892. + else
  9893. + {
  9894. + statement = con.prepareStatement("INSERT INTO event_stats(player,event,num,wins,losses,kills,deaths,scores) VALUES (?,?,?,?,?,?,?,?)");
  9895. + statement.setInt(1, id);
  9896. + statement.setInt(2, eventId);
  9897. + statement.setInt(3, stats.get(id).get(eventId).num);
  9898. + statement.setInt(4, stats.get(id).get(eventId).wins);
  9899. + statement.setInt(5, stats.get(id).get(eventId).losses);
  9900. + statement.setInt(6, stats.get(id).get(eventId).kills);
  9901. + statement.setInt(7, stats.get(id).get(eventId).deaths);
  9902. + statement.setInt(8, stats.get(id).get(eventId).scores);
  9903. + statement.executeUpdate();
  9904. + statement.close();
  9905. + }
  9906. +
  9907. + }
  9908. + }
  9909. + catch (Exception e)
  9910. + {
  9911. + System.out.println("EventStats SQL catch");
  9912. + }
  9913. + finally
  9914. + {
  9915. + try { con.close(); } catch (Exception e) {}
  9916. + }
  9917. + EventManager.getInstance().debug("updateSQL finished");
  9918. + createHtmls();
  9919. + }
  9920. +}
  9921. \ No newline at end of file
  9922. Index: head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java
  9923. ===================================================================
  9924. --- head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java (revision 1132)
  9925. +++ head-src/com/l2jfrozen/gameserver/network/serverpackets/CharInfo.java (working copy)
  9926. @@ -26,12 +26,15 @@
  9927. import org.apache.log4j.Logger;
  9928.  
  9929. import com.l2jfrozen.Config;
  9930. +import com.l2jfrozen.gameserver.event.EventManager;
  9931. import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
  9932. import com.l2jfrozen.gameserver.managers.CursedWeaponsManager;
  9933. import com.l2jfrozen.gameserver.model.Inventory;
  9934. import com.l2jfrozen.gameserver.model.L2Character;
  9935. import com.l2jfrozen.gameserver.model.actor.instance.L2CubicInstance;
  9936. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  9937. +import com.l2jfrozen.gameserver.event.LMS;
  9938. +import com.l2jfrozen.gameserver.event.dm;
  9939. import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  9940.  
  9941. /**
  9942. @@ -89,6 +92,8 @@
  9943. private int _flyWalkSpd;
  9944. private final float _moveMultiplier, _attackSpeedMultiplier;
  9945. private final int _maxCp;
  9946. + private boolean _isInLMS;
  9947. + private boolean _isInDM;
  9948.  
  9949. /**
  9950. * @param cha
  9951. @@ -110,6 +115,8 @@
  9952. _swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd;
  9953. _swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd;
  9954. _maxCp = _activeChar.getMaxCp();
  9955. + _isInLMS = EventManager.getInstance().isRegistered(_activeChar) && EventManager.getInstance().getCurrentEvent() instanceof LMS;
  9956. + _isInDM = EventManager.getInstance().isRegistered(_activeChar) && EventManager.getInstance().getCurrentEvent() instanceof dm;
  9957. }
  9958.  
  9959. @Override
  9960. @@ -172,7 +179,16 @@
  9961. // writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
  9962. // }
  9963.  
  9964. - writeS(_activeChar.getName());
  9965. + //writeS(_activeChar.getName());
  9966. + if(_isInLMS || _isInDM)
  9967. + {
  9968. + writeS("Player");
  9969. + }
  9970. + else
  9971. + {
  9972. + writeS(_activeChar.getName());
  9973. + }
  9974. + //->writeS(_activeChar.getName());
  9975.  
  9976. if (_activeChar.getAppearance().getInvisible())
  9977. // if(gmSeeInvis)
  9978. @@ -218,6 +234,14 @@
  9979. writeD(_heading);
  9980. writeD(_activeChar.getObjectId());
  9981. writeS(_activeChar.getName());
  9982. + if (_isInLMS || _isInDM)
  9983. + {
  9984. + writeS("Player");
  9985. + }
  9986. + else
  9987. + {
  9988. + writeS(_activeChar.getName());
  9989. + }
  9990. writeD(_activeChar.getRace().ordinal());
  9991. writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
  9992.  
  9993. @@ -230,18 +254,48 @@
  9994. writeD(_activeChar.getBaseClass());
  9995. }
  9996.  
  9997. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  9998. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  9999. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  10000. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  10001. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  10002. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  10003. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  10004. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  10005. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  10006. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  10007. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  10008. - writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  10009. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  10010. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  10011. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  10012. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  10013. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  10014. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  10015. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  10016. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  10017. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  10018. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  10019. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  10020. + //writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  10021. + if(_isInLMS || _isInDM)
  10022. + {
  10023. + writeD(0);
  10024. + writeD(0);
  10025. + writeD(0);
  10026. + writeD(0);
  10027. + writeD(0);
  10028. + writeD(6408);
  10029. + writeD(0);
  10030. + writeD(0);
  10031. + writeD(0);
  10032. + writeD(0);
  10033. + writeD(0);
  10034. + writeD(0);
  10035. + }
  10036. + else
  10037. + {
  10038. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
  10039. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  10040. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  10041. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  10042. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  10043. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  10044. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  10045. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  10046. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  10047. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  10048. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  10049. + writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
  10050. + }
  10051.  
  10052. // c6 new h's
  10053. writeH(0x00);
  10054. @@ -303,10 +357,24 @@
  10055. writeS(_activeChar.getTitle());
  10056. }
  10057.  
  10058. - writeD(_activeChar.getClanId());
  10059. - writeD(_activeChar.getClanCrestId());
  10060. - writeD(_activeChar.getAllyId());
  10061. - writeD(_activeChar.getAllyCrestId());
  10062. + //writeD(_activeChar.getClanId());
  10063. + //writeD(_activeChar.getClanCrestId());
  10064. + //writeD(_activeChar.getAllyId());
  10065. + //writeD(_activeChar.getAllyCrestId());
  10066. + if (_isInLMS || _isInDM)
  10067. + {
  10068. + writeD(0);
  10069. + writeD(0);
  10070. + writeD(0);
  10071. + writeD(0);
  10072. + }
  10073. + else
  10074. + {
  10075. + writeD(_activeChar.getClanId());
  10076. + writeD(_activeChar.getClanCrestId());
  10077. + writeD(_activeChar.getAllyId());
  10078. + writeD(_activeChar.getAllyCrestId());
  10079. + }
  10080. // In UserInfo leader rights and siege flags, but here found nothing??
  10081. // Therefore RelationChanged packet with that info is required
  10082. writeD(0);
  10083. Index: head-src/com/l2jfrozen/gameserver/event/Lucky.java
  10084. ===================================================================
  10085. --- head-src/com/l2jfrozen/gameserver/event/Lucky.java (nonexistent)
  10086. +++ head-src/com/l2jfrozen/gameserver/event/Lucky.java (working copy)
  10087. @@ -0,0 +1,215 @@
  10088. +/*
  10089. + * This program is free software: you can redistribute it and/or modify it under
  10090. + * the terms of the GNU General Public License as published by the Free Software
  10091. + * Foundation, either version 3 of the License, or (at your option) any later
  10092. + * version.
  10093. + *
  10094. + * This program is distributed in the hope that it will be useful, but WITHOUT
  10095. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  10096. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10097. + * details.
  10098. + *
  10099. + * You should have received a copy of the GNU General Public License along with
  10100. + * this program. If not, see <http://www.gnu.org/licenses/>.
  10101. + */
  10102. +package com.l2jfrozen.gameserver.event;
  10103. +
  10104. +import javolution.text.TextBuilder;
  10105. +import javolution.util.FastList;
  10106. +
  10107. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  10108. +import com.l2jfrozen.gameserver.model.L2Skill;
  10109. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  10110. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  10111. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  10112. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  10113. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  10114. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  10115. +import com.l2jfrozen.util.random.Rnd;
  10116. +
  10117. +/**
  10118. + * @author Rizel
  10119. + *
  10120. + */
  10121. +public class Lucky extends Event
  10122. +{
  10123. + private class Core implements Runnable
  10124. + {
  10125. + public void run()
  10126. + {
  10127. + try
  10128. + {
  10129. + switch (eventState)
  10130. + {
  10131. + case START:
  10132. + divideIntoTeams(1);
  10133. + preparePlayers();
  10134. + teleportToTeamPos();
  10135. + forceSitAll();
  10136. + unequip();
  10137. + setStatus(EventState.FIGHT);
  10138. + schedule(30000);
  10139. + break;
  10140. +
  10141. + case FIGHT:
  10142. + forceStandAll();
  10143. + int[] coor = getPosition("Chests", 1);
  10144. + for (int i = 0; i < getInt("numberOfChests"); i++)
  10145. + chests.add(spawnNPC(coor[0] + (Rnd.get(coor[3] * 2) - coor[3]), coor[1] + (Rnd.get(coor[3] * 2) - coor[3]), coor[2], getInt("chestNpcId")));
  10146. + setStatus(EventState.END);
  10147. + clock.startClock(getInt("matchTime"));
  10148. + break;
  10149. +
  10150. + case END:
  10151. + clock.setTime(0);
  10152. + unSpawnChests();
  10153. + L2PcInstance winner = getPlayerWithMaxScore();
  10154. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  10155. + setStatus(EventState.INACTIVE);
  10156. + EventManager.getInstance().end("Congratulation! " + winner.getName() + " won the event with " + getScore(winner) + " opened chests!");
  10157. + break;
  10158. + }
  10159. + }
  10160. + catch (Throwable e)
  10161. + {
  10162. + e.printStackTrace();
  10163. + EventManager.getInstance().end("Error! Event ended.");
  10164. + }
  10165. + }
  10166. + }
  10167. +
  10168. + private enum EventState
  10169. + {
  10170. + START, FIGHT, END, INACTIVE
  10171. + }
  10172. +
  10173. + private EventState eventState;
  10174. +
  10175. + private Core task;
  10176. +
  10177. + private FastList<L2Spawn> chests;
  10178. +
  10179. + public Lucky()
  10180. + {
  10181. + super();
  10182. + eventId = 5;
  10183. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  10184. + task = new Core();
  10185. + chests = new FastList<L2Spawn>();
  10186. + }
  10187. +
  10188. + /**
  10189. + * @see net.sf.l2j.gameserver.event.Event#endEvent()
  10190. + */
  10191. + @Override
  10192. + protected void endEvent()
  10193. + {
  10194. +
  10195. + setStatus(EventState.END);
  10196. + clock.setTime(0);
  10197. +
  10198. + }
  10199. +
  10200. + @Override
  10201. + protected String getScorebar()
  10202. + {
  10203. + return "Max: " + getScore(getPlayerWithMaxScore()) + " Time: " + clock.getTime() + "";
  10204. + }
  10205. +
  10206. + @Override
  10207. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  10208. + {
  10209. + if (npc.getNpcId() != getInt("chestNpcId"))
  10210. + return false;
  10211. +
  10212. + if (Rnd.get(3) == 0)
  10213. + {
  10214. + player.sendPacket(new CreatureSay(npc.getObjectId(), 0, "Chest", "BoOoOoMm!"));
  10215. + player.stopAllEffects();
  10216. + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, player);
  10217. + EventStats.getInstance().tempTable.get(player.getObjectId())[2] = EventStats.getInstance().tempTable.get(player.getObjectId())[2] + 1;
  10218. + addToResurrector(player);
  10219. + }
  10220. + else
  10221. + {
  10222. + npc.doDie(npc);
  10223. + player.addItem("Event", 6392, 1, player, true);
  10224. + increasePlayersScore(player);
  10225. + }
  10226. +
  10227. + npc.deleteMe();
  10228. + npc.getSpawn().stopRespawn();
  10229. + SpawnTable.getInstance().deleteSpawn(npc.getSpawn(), true);
  10230. + chests.remove(npc.getSpawn());
  10231. +
  10232. + if (chests.size() == 0)
  10233. + clock.setTime(0);
  10234. +
  10235. + return true;
  10236. + }
  10237. +
  10238. + @Override
  10239. + protected void schedule(int time)
  10240. + {
  10241. + tpm.scheduleGeneral(task, time);
  10242. + }
  10243. +
  10244. + private void setStatus(EventState s)
  10245. + {
  10246. + eventState = s;
  10247. + }
  10248. + public boolean onUseMagic(L2Skill skill)
  10249. + {
  10250. + return false;
  10251. + }
  10252. +
  10253. + @Override
  10254. + protected void showHtml(L2PcInstance player, int obj)
  10255. + {
  10256. + if (players.size() > 0)
  10257. + {
  10258. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  10259. + TextBuilder sb = new TextBuilder();
  10260. +
  10261. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  10262. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  10263. + sb.append("<table width=270><tr><td><center>" + getPlayerWithMaxScore().getName() + " - " + getScore(getPlayerWithMaxScore()) + "</td></tr></table>");
  10264. + sb.append("<br><table width=270>");
  10265. +
  10266. + for (L2PcInstance p : getPlayersOfTeam(1))
  10267. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  10268. +
  10269. + sb.append("</table></body></html>");
  10270. + html.setHtml(sb.toString());
  10271. + player.sendPacket(html);
  10272. +
  10273. + }
  10274. +
  10275. + }
  10276. +
  10277. + /* (non-Javadoc)
  10278. + * @see net.sf.l2j.gameserver.event.Event#start()
  10279. + */
  10280. + @Override
  10281. + protected void start()
  10282. + {
  10283. + setStatus(EventState.START);
  10284. + schedule(1);
  10285. + }
  10286. +
  10287. + private void unSpawnChests()
  10288. + {
  10289. + for (L2Spawn s : chests)
  10290. + {
  10291. + s.getLastSpawn().deleteMe();
  10292. + s.stopRespawn();
  10293. + SpawnTable.getInstance().deleteSpawn(s, true);
  10294. + chests.remove(s);
  10295. + }
  10296. + }
  10297. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  10298. + {
  10299. + return false;
  10300. + }
  10301. +
  10302. +}
  10303. \ No newline at end of file
  10304. Index: head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java
  10305. ===================================================================
  10306. --- head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java (revision 1132)
  10307. +++ head-src/com/l2jfrozen/gameserver/model/entity/olympiad/Olympiad.java (working copy)
  10308. @@ -48,6 +48,7 @@
  10309. import org.apache.log4j.Logger;
  10310.  
  10311. import com.l2jfrozen.Config;
  10312. +import com.l2jfrozen.gameserver.event.EventManager;
  10313. import com.l2jfrozen.gameserver.managers.OlympiadStadiaManager;
  10314. import com.l2jfrozen.gameserver.model.L2World;
  10315. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  10316. @@ -425,6 +426,11 @@
  10317. noble.sendPacket(sm);
  10318. return false;
  10319. }
  10320. + if (EventManager.getInstance().players.contains(noble))
  10321. + {
  10322. + noble.sendMessage("You can't join olympiad while participating on an Event.");
  10323. + return false;
  10324. + }
  10325.  
  10326. if (!noble.isNoble())
  10327. {
  10328. @@ -971,12 +977,16 @@
  10329. spectator.sendPacket(new SystemMessage(SystemMessageId.WHILE_YOU_ARE_ON_THE_WAITING_LIST_YOU_ARE_NOT_ALLOWED_TO_WATCH_THE_GAME));
  10330. return;
  10331. }
  10332. + if (EventManager.getInstance().players.contains(spectator))
  10333. + {
  10334. + spectator.sendMessage("You can not observe games while registered for an event!");
  10335. + return;
  10336. + }
  10337. if (spectator.isRegisteredInFunEvent())
  10338. {
  10339. spectator.sendMessage("You are already registered to an Event");
  10340. return;
  10341. }
  10342. -
  10343. OlympiadManager.STADIUMS[id].addSpectator(id, spectator, storeCoords);
  10344. if (OlympiadManager.getInstance().getOlympiadGame(id) != null)
  10345. {
  10346. Index: head-src/com/l2jfrozen/gameserver/event/VIPTvT.java
  10347. ===================================================================
  10348. --- head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (nonexistent)
  10349. +++ head-src/com/l2jfrozen/gameserver/event/VIPTvT.java (working copy)
  10350. @@ -0,0 +1,207 @@
  10351. +package com.l2jfrozen.gameserver.event;
  10352. +
  10353. +import javolution.text.TextBuilder;
  10354. +import javolution.util.FastMap;
  10355. +
  10356. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  10357. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  10358. +
  10359. +public class VIPTvT extends Event
  10360. +{
  10361. + private class Core implements Runnable
  10362. + {
  10363. + public void run()
  10364. + {
  10365. + try
  10366. + {
  10367. + switch (eventState)
  10368. + {
  10369. + case START:
  10370. + divideIntoTeams(2);
  10371. + preparePlayers();
  10372. + teleportToTeamPos();
  10373. + createPartyOfTeam(1);
  10374. + createPartyOfTeam(2);
  10375. + selectNewVipOfTeam(1);
  10376. + selectNewVipOfTeam(2);
  10377. + forceSitAll();
  10378. + setStatus(EventState.FIGHT);
  10379. + schedule(20000);
  10380. + break;
  10381. +
  10382. + case FIGHT:
  10383. + forceStandAll();
  10384. + setStatus(EventState.END);
  10385. + clock.startClock(getInt("matchTime"));
  10386. + break;
  10387. +
  10388. + case END:
  10389. + clock.setTime(0);
  10390. + if (winnerTeam == 0)
  10391. + winnerTeam = getWinnerTeam();
  10392. +
  10393. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  10394. + setStatus(EventState.INACTIVE);
  10395. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " VIP kills!");
  10396. + break;
  10397. + }
  10398. + }
  10399. + catch (Throwable e)
  10400. + {
  10401. + e.printStackTrace();
  10402. + EventManager.getInstance().end("Error! Event ended.");
  10403. + }
  10404. +
  10405. + }
  10406. + }
  10407. +
  10408. + private enum EventState
  10409. + {
  10410. + START, FIGHT, END, TELEPORT, INACTIVE
  10411. + }
  10412. +
  10413. + private EventState eventState;
  10414. +
  10415. + private Core task;
  10416. +
  10417. + private FastMap<Integer, L2PcInstance> vips;
  10418. +
  10419. + public VIPTvT()
  10420. + {
  10421. + super();
  10422. + eventId = 8;
  10423. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  10424. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  10425. + task = new Core();
  10426. + vips = new FastMap<Integer, L2PcInstance>();
  10427. + winnerTeam = 0;
  10428. + }
  10429. +
  10430. + @Override
  10431. + protected void endEvent()
  10432. + {
  10433. + winnerTeam = players.head().getNext().getValue()[0];
  10434. +
  10435. + setStatus(EventState.END);
  10436. + clock.setTime(0);
  10437. +
  10438. + }
  10439. +
  10440. + @Override
  10441. + protected String getScorebar()
  10442. + {
  10443. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  10444. + }
  10445. +
  10446. + @Override
  10447. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  10448. + {
  10449. + super.onDie(victim, killer);
  10450. + if (vips.get(1) == victim)
  10451. + {
  10452. + teams.get(2).increaseScore();
  10453. + increasePlayersScore(killer);
  10454. + killer.addItem("Event", 6392, 3, killer, true);
  10455. + selectNewVipOfTeam(1);
  10456. + }
  10457. + if (vips.get(2) == victim)
  10458. + {
  10459. + teams.get(1).increaseScore();
  10460. + increasePlayersScore(killer);
  10461. + killer.addItem("Event", 6392, 3, killer, true);
  10462. + selectNewVipOfTeam(2);
  10463. + }
  10464. +
  10465. + addToResurrector(victim);
  10466. + }
  10467. +
  10468. + @Override
  10469. + protected void schedule(int time)
  10470. + {
  10471. + tpm.scheduleGeneral(task, time);
  10472. + }
  10473. +
  10474. + private void selectNewVipOfTeam(int team)
  10475. + {
  10476. + if (vips.get(team) != null)
  10477. + {
  10478. + int[] nameColor = teams.get(getTeam(vips.get(team))).getTeamColor();
  10479. + vips.get(team).getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
  10480. + }
  10481. +
  10482. + L2PcInstance newvip = getRandomPlayerFromTeam(team);
  10483. + vips.getEntry(team).setValue(newvip);
  10484. + if (team == 1)
  10485. + {
  10486. + int[] c = getColor("BlueVIP");
  10487. + newvip.getAppearance().setNameColor(c[0], c[1], c[2]);
  10488. + }
  10489. +
  10490. + if (team == 2)
  10491. + {
  10492. + int[] c = getColor("RedVIP");
  10493. + newvip.getAppearance().setNameColor(c[0], c[1], c[2]);
  10494. + }
  10495. +
  10496. + if (!newvip.isDead())
  10497. + {
  10498. + newvip.setCurrentCp(newvip.getMaxCp());
  10499. + newvip.setCurrentMp(newvip.getMaxMp());
  10500. + newvip.setCurrentHp(newvip.getMaxHp());
  10501. + }
  10502. +
  10503. + newvip.broadcastUserInfo();
  10504. +
  10505. + }
  10506. +
  10507. + private void setStatus(EventState s)
  10508. + {
  10509. + eventState = s;
  10510. + }
  10511. +
  10512. + @Override
  10513. + protected void showHtml(L2PcInstance player, int obj)
  10514. + {
  10515. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  10516. + TextBuilder sb = new TextBuilder();
  10517. +
  10518. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  10519. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  10520. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  10521. + sb.append("<br><table width=270>");
  10522. + int i = 0;
  10523. + for (EventTeam team : teams.values())
  10524. + {
  10525. + i++;
  10526. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  10527. + for (L2PcInstance p : getPlayersOfTeam(i))
  10528. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  10529. + }
  10530. +
  10531. + sb.append("</table></body></html>");
  10532. + html.setHtml(sb.toString());
  10533. + player.sendPacket(html);
  10534. +
  10535. + }
  10536. +
  10537. + @Override
  10538. + protected void start()
  10539. + {
  10540. + vips.put(1, null);
  10541. + vips.put(2, null);
  10542. + setStatus(EventState.START);
  10543. + schedule(1);
  10544. + }
  10545. +
  10546. + @Override
  10547. + public void onLogout(L2PcInstance player)
  10548. + {
  10549. + super.onLogout(player);
  10550. +
  10551. + if(vips.get(1) == player)
  10552. + selectNewVipOfTeam(1);
  10553. + if(vips.get(2) == player)
  10554. + selectNewVipOfTeam(2);
  10555. +
  10556. + }
  10557. +}
  10558. \ No newline at end of file
  10559. Index: head-src/com/l2jfrozen/gameserver/event/Domination.java
  10560. ===================================================================
  10561. --- head-src/com/l2jfrozen/gameserver/event/Domination.java (nonexistent)
  10562. +++ head-src/com/l2jfrozen/gameserver/event/Domination.java (working copy)
  10563. @@ -0,0 +1,197 @@
  10564. +package com.l2jfrozen.gameserver.event;
  10565. +
  10566. +import javolution.text.TextBuilder;
  10567. +import javolution.util.FastList;
  10568. +
  10569. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  10570. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  10571. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  10572. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  10573. +
  10574. +public class Domination extends Event
  10575. +{
  10576. + private class Core implements Runnable
  10577. + {
  10578. + public void run()
  10579. + {
  10580. + try
  10581. + {
  10582. + switch (eventState)
  10583. + {
  10584. + case START:
  10585. + divideIntoTeams(2);
  10586. + preparePlayers();
  10587. + teleportToTeamPos();
  10588. + createPartyOfTeam(1);
  10589. + createPartyOfTeam(2);
  10590. + forceSitAll();
  10591. + debug("The event started with " + players.size() + " player");
  10592. + setStatus(EventState.FIGHT);
  10593. + schedule(20000);
  10594. + break;
  10595. +
  10596. + case FIGHT:
  10597. + forceStandAll();
  10598. + setStatus(EventState.END);
  10599. + debug("The event started");
  10600. + clock.startClock(getInt("matchTime"));
  10601. + break;
  10602. +
  10603. + case END:
  10604. + clock.setTime(0);
  10605. + if (winnerTeam == 0)
  10606. + winnerTeam = getWinnerTeam();
  10607. +
  10608. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  10609. + unSpawnZones();
  10610. + setStatus(EventState.INACTIVE);
  10611. + debug("The event ended. Winner: " + winnerTeam);
  10612. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " Domination points!");
  10613. + break;
  10614. + }
  10615. + }
  10616. + catch (Throwable e)
  10617. + {
  10618. + e.printStackTrace();
  10619. + EventManager.getInstance().end("Error! Event ended.");
  10620. + }
  10621. + }
  10622. + }
  10623. +
  10624. + private enum EventState
  10625. + {
  10626. + START, FIGHT, END, INACTIVE
  10627. + }
  10628. +
  10629. + private EventState eventState;
  10630. +
  10631. + private Core task;
  10632. +
  10633. + private FastList<L2Spawn> zones;
  10634. +
  10635. + public Domination()
  10636. + {
  10637. + super();
  10638. + eventId = 2;
  10639. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  10640. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  10641. + task = new Core();
  10642. + zones = new FastList<L2Spawn>();
  10643. + winnerTeam = 0;
  10644. + }
  10645. +
  10646. + @Override
  10647. + protected void clockTick()
  10648. + {
  10649. + int team1 = 0;
  10650. + int team2 = 0;
  10651. +
  10652. + for (L2PcInstance player : getPlayerList())
  10653. + switch (getTeam(player))
  10654. + {
  10655. + case 1:
  10656. + if (Math.sqrt(player.getPlanDistanceSq(zones.getFirst().getLastSpawn())) <= getInt("zoneRadius"))
  10657. + team1++;
  10658. + break;
  10659. +
  10660. + case 2:
  10661. + if (Math.sqrt(player.getPlanDistanceSq(zones.getFirst().getLastSpawn())) <= getInt("zoneRadius"))
  10662. + team2++;
  10663. + break;
  10664. + }
  10665. +
  10666. + if (team1 > team2)
  10667. + {
  10668. + for (L2PcInstance player : getPlayersOfTeam(1))
  10669. + increasePlayersScore(player);
  10670. + teams.get(1).increaseScore();
  10671. + }
  10672. +
  10673. + if (team2 > team1)
  10674. + {
  10675. + for (L2PcInstance player : getPlayersOfTeam(2))
  10676. + increasePlayersScore(player);
  10677. + teams.get(2).increaseScore();
  10678. + }
  10679. +
  10680. + }
  10681. +
  10682. + @Override
  10683. + protected void endEvent()
  10684. + {
  10685. + setStatus(EventState.END);
  10686. + clock.setTime(0);
  10687. +
  10688. + }
  10689. +
  10690. + @Override
  10691. + protected String getScorebar()
  10692. + {
  10693. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  10694. + }
  10695. +
  10696. + @Override
  10697. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  10698. + {
  10699. + super.onDie(victim, killer);
  10700. + killer.addItem("Event", 6392, 1, killer, true);
  10701. + addToResurrector(victim);
  10702. + }
  10703. +
  10704. + @Override
  10705. + protected void schedule(int time)
  10706. + {
  10707. + tpm.scheduleGeneral(task, time);
  10708. + }
  10709. +
  10710. + private void setStatus(EventState s)
  10711. + {
  10712. + eventState = s;
  10713. + }
  10714. +
  10715. + @Override
  10716. + protected void showHtml(L2PcInstance player, int obj)
  10717. + {
  10718. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  10719. + TextBuilder sb = new TextBuilder();
  10720. +
  10721. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  10722. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  10723. + sb.append("<table width=270><tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr></table>");
  10724. + sb.append("<br><table width=270>");
  10725. + int i = 0;
  10726. + for (EventTeam team : teams.values())
  10727. + {
  10728. + i++;
  10729. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  10730. + for (L2PcInstance p : getPlayersOfTeam(i))
  10731. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  10732. + }
  10733. +
  10734. + sb.append("</table></body></html>");
  10735. + html.setHtml(sb.toString());
  10736. + player.sendPacket(html);
  10737. +
  10738. + }
  10739. +
  10740. + @Override
  10741. + protected void start()
  10742. + {
  10743. + int[] npcpos = getPosition("Zone", 1);
  10744. + zones.add(spawnNPC(npcpos[0], npcpos[1], npcpos[2], getInt("zoneNpcId")));
  10745. + setStatus(EventState.START);
  10746. + schedule(1);
  10747. + }
  10748. +
  10749. + private void unSpawnZones()
  10750. + {
  10751. + for (L2Spawn s : zones)
  10752. + {
  10753. + s.getLastSpawn().deleteMe();
  10754. + s.stopRespawn();
  10755. + SpawnTable.getInstance().deleteSpawn(s, true);
  10756. + zones.remove(s);
  10757. + }
  10758. + }
  10759. +
  10760. +}
  10761. \ No newline at end of file
  10762. Index: head-src/com/l2jfrozen/gameserver/event/EventManager.java
  10763. ===================================================================
  10764. --- head-src/com/l2jfrozen/gameserver/event/EventManager.java (nonexistent)
  10765. +++ head-src/com/l2jfrozen/gameserver/event/EventManager.java (working copy)
  10766. @@ -0,0 +1,727 @@
  10767. +package com.l2jfrozen.gameserver.event;
  10768. +
  10769. +import java.io.FileWriter;
  10770. +import java.io.IOException;
  10771. +import java.text.SimpleDateFormat;
  10772. +import java.util.Date;
  10773. +import java.util.Map;
  10774. +import java.util.Random;
  10775. +
  10776. +import javolution.text.TextBuilder;
  10777. +import javolution.util.FastList;
  10778. +import javolution.util.FastMap;
  10779. +
  10780. +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  10781. +import com.l2jfrozen.gameserver.model.L2Character;
  10782. +import com.l2jfrozen.gameserver.model.L2Party;
  10783. +import com.l2jfrozen.gameserver.model.L2World;
  10784. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  10785. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  10786. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  10787. +import com.l2jfrozen.gameserver.util.Broadcast;
  10788. +
  10789. +public final class EventManager
  10790. +{
  10791. +
  10792. + private class Countdown implements Runnable
  10793. + {
  10794. + protected String getTime()
  10795. + {
  10796. + String mins = "" + counter / 60;
  10797. + String secs = (counter % 60 < 10 ? "0" + counter % 60 : "" + counter % 60);
  10798. + return "" + mins + ":" + secs + "";
  10799. + }
  10800. +
  10801. + @SuppressWarnings("synthetic-access")
  10802. + public void run()
  10803. + {
  10804. + if (status == State.REGISTERING)
  10805. +
  10806. + switch (counter)
  10807. + {
  10808. + case 300:
  10809. + case 240:
  10810. + case 180:
  10811. + case 120:
  10812. + case 60:
  10813. + announce("" + counter / 60 + " min(s) left to register, " + getCurrentEvent().getString("eventName"));
  10814. + break;
  10815. + case 30:
  10816. + case 10:
  10817. + announce("" + counter + " seconds left to register!");
  10818. + break;
  10819. + }
  10820. +
  10821. + if (status == State.VOTING)
  10822. + if (counter == getInt("showVotePopupAt") && getBoolean("votePopupEnabled"))
  10823. + {
  10824. + NpcHtmlMessage html = new NpcHtmlMessage(0);
  10825. + TextBuilder sb = new TextBuilder();
  10826. + int count = 0;
  10827. +
  10828. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  10829. +
  10830. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Voting</td><td width=130><center>Time left: " + cdtask.getTime() + "</td><td width=70>Votes: " + votes.size() + "</td></tr></table><br>");
  10831. +
  10832. + for (Map.Entry<Integer, Event> event : events.entrySet())
  10833. + {
  10834. + count++;
  10835. + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=180>" + event.getValue().getString("eventName") + "</td><td width=30>Info</td><td width=30>");
  10836. + sb.append("<a action=\"bypass -h eventvote " + event.getKey() + "\">Vote</a>");
  10837. + sb.append("</td><td width=30><center>" + getVoteCount(event.getKey()) + "</td></tr></table>");
  10838. + }
  10839. +
  10840. + sb.append("</body></html>");
  10841. + html.setHtml(sb.toString());
  10842. +
  10843. + for (L2PcInstance player : L2World.getInstance().getAllPlayers())
  10844. + {
  10845. + if (votes.containsKey(player) || player.getLevel() < 40)
  10846. + continue;
  10847. +
  10848. + player.sendPacket(html);
  10849. + }
  10850. + }
  10851. +
  10852. + if (counter == 0)
  10853. + schedule(1);
  10854. + else
  10855. + {
  10856. + counter--;
  10857. + tpm.scheduleGeneral(cdtask, 1000);
  10858. + }
  10859. +
  10860. + }
  10861. + }
  10862. +
  10863. + private class Scheduler implements Runnable
  10864. + {
  10865. + @SuppressWarnings("synthetic-access")
  10866. + public void run()
  10867. + {
  10868. + switch (status)
  10869. + {
  10870. + case VOTING:
  10871. + if (votes.size() > 0)
  10872. + setCurrentEvent(getVoteWinner());
  10873. + else
  10874. + setCurrentEvent(eventIds.get(rnd.nextInt(eventIds.size())));
  10875. +
  10876. + announce("The next event will be: " + getCurrentEvent().getString("eventName"));
  10877. + announce("Registering phase started! You have " + getInt("registerTime") / 60 + " mins to register!");
  10878. + announce("Event joinable in giran.");
  10879. + setStatus(State.REGISTERING);
  10880. + debug("Registering phase started.");
  10881. + counter = getInt("registerTime") - 1;
  10882. + tpm.scheduleGeneral(cdtask, 1);
  10883. + break;
  10884. +
  10885. + case REGISTERING:
  10886. + announce("Registering phase ended!");
  10887. + debug("Registering phase ended.");
  10888. + if (countOfRegistered() < getCurrentEvent().getInt("minPlayers"))
  10889. + {
  10890. + debug("Lack of participants.");
  10891. + announce("Theres not enough participants! Next event in " + getInt("betweenEventsTime") / 60 + "mins!");
  10892. + players.clear();
  10893. + colors.clear();
  10894. + positions.clear();
  10895. + setStatus(State.VOTING);
  10896. + counter = getInt("betweenEventsTime") - 1;
  10897. + tpm.scheduleGeneral(cdtask, 1);
  10898. + }
  10899. + else
  10900. + {
  10901. + debug("Event starts.");
  10902. + announce("Event started!");
  10903. + setStatus(State.RUNNING);
  10904. + msgToAll("You'll be teleported to the event in 10 secs");
  10905. + schedule(10000);
  10906. + }
  10907. + break;
  10908. +
  10909. + case RUNNING:
  10910. + getCurrentEvent().start();
  10911. +
  10912. + for (L2PcInstance player : players)
  10913. + EventStats.getInstance().tempTable.put(player.getObjectId(), new int[] { 0, 0, 0, 0 });
  10914. +
  10915. + break;
  10916. +
  10917. + case TELE_BACK:
  10918. + msgToAll("You'll be teleported back in 10 secs");
  10919. + setStatus(State.END);
  10920. + debug("Teleporting back.");
  10921. + schedule(10000);
  10922. + break;
  10923. +
  10924. + case END:
  10925. + teleBackEveryone();
  10926. + if (getBoolean("statTrackingEnabled"))
  10927. + {
  10928. + EventStats.getInstance().applyChanges();
  10929. + EventStats.getInstance().tempTable.clear();
  10930. + EventStats.getInstance().updateSQL(getCurrentEvent().getPlayerList(), getCurrentEvent().eventId);
  10931. + }
  10932. + getCurrentEvent().reset();
  10933. + setCurrentEvent(0);
  10934. + players.clear();
  10935. + colors.clear();
  10936. + positions.clear();
  10937. + titles.clear();
  10938. + announce("Event ended! Next event in " + getInt("betweenEventsTime") / 60 + "mins!");
  10939. + setStatus(State.VOTING);
  10940. + counter = getInt("betweenEventsTime") - 1;
  10941. + debug("Event ended.");
  10942. + tpm.scheduleGeneral(cdtask, 1);
  10943. + break;
  10944. +
  10945. + }
  10946. + }
  10947. + }
  10948. +
  10949. + @SuppressWarnings("synthetic-access")
  10950. + private static class SingletonHolder
  10951. + {
  10952. + protected static final EventManager _instance = new EventManager();
  10953. + }
  10954. +
  10955. + // Manager Statuses
  10956. + protected enum State
  10957. + {
  10958. + REGISTERING, VOTING, RUNNING, TELE_BACK, END
  10959. + }
  10960. +
  10961. + public static EventManager getInstance()
  10962. + {
  10963. + return SingletonHolder._instance;
  10964. + }
  10965. +
  10966. + private EventConfig config;
  10967. + // Event instances
  10968. + public FastMap<Integer, Event> events;
  10969. +
  10970. + // The list of registered players
  10971. + public FastList<L2PcInstance> players;
  10972. +
  10973. + // The current event
  10974. + private Event current;
  10975. +
  10976. + // Original name colors
  10977. + private FastMap<L2PcInstance, Integer> colors;
  10978. +
  10979. + //Original titles
  10980. + protected FastMap<L2PcInstance, String> titles;
  10981. +
  10982. + //Original positions
  10983. + protected FastMap<L2PcInstance, int[]> positions;
  10984. +
  10985. + // Votes for the events
  10986. + private FastMap<L2PcInstance, Integer> votes;
  10987. +
  10988. + private State status;
  10989. +
  10990. + private int counter;
  10991. +
  10992. + private Countdown cdtask;
  10993. +
  10994. + // NPC location
  10995. + public static int[] npcPos = { 82698, 148638, -3473 };
  10996. +
  10997. + // Threadpoolmanager
  10998. + private ThreadPoolManager tpm;
  10999. +
  11000. + // Scheduler
  11001. + private Scheduler task;
  11002. +
  11003. + private Random rnd = new Random();
  11004. +
  11005. + private FileWriter writer;
  11006. +
  11007. + private FastList<Integer> eventIds;
  11008. +
  11009. + private static final SimpleDateFormat _formatter = new SimpleDateFormat("dd/MM/yyyy H:mm:ss");
  11010. +
  11011. + public EventManager()
  11012. + {
  11013. + config = EventConfig.getInstance();
  11014. +
  11015. + events = new FastMap<Integer, Event>();
  11016. + players = new FastList<L2PcInstance>();
  11017. + votes = new FastMap<L2PcInstance, Integer>();
  11018. + titles = new FastMap<L2PcInstance, String>();
  11019. + colors = new FastMap<L2PcInstance, Integer>();
  11020. + positions = new FastMap<L2PcInstance, int[]>();
  11021. + eventIds = new FastList<Integer>();
  11022. + status = State.VOTING;
  11023. + tpm = ThreadPoolManager.getInstance();
  11024. + task = new Scheduler();
  11025. + cdtask = new Countdown();
  11026. + counter = 0;
  11027. +
  11028. + // Add the events to the list
  11029. + events.put(1, new dm());
  11030. + events.put(2, new Domination());
  11031. + events.put(3, new DoubleDomination());
  11032. + events.put(4, new LMS());
  11033. + events.put(5, new Lucky());
  11034. + events.put(6, new Simon());
  11035. + events.put(7, new TvT());
  11036. + events.put(8, new VIPTvT());
  11037. + events.put(9, new Zombie());
  11038. + events.put(10, new CTF());
  11039. + events.put(11, new Russian());
  11040. + events.put(12, new Bomb());
  11041. + events.put(13, new Mutant());
  11042. + events.put(14, new Battlefield());
  11043. +
  11044. + for(int eventId : events.keySet())
  11045. + eventIds.add(eventId);
  11046. +
  11047. + debug(events.size() + " event imported.");
  11048. +
  11049. + // Start the scheduler
  11050. + counter = getInt("firstAfterStartTime") - 1;
  11051. + tpm.scheduleGeneral(cdtask, 1);
  11052. +
  11053. + System.out.println("Event Engine Started");
  11054. + }
  11055. +
  11056. + public boolean addVote(L2PcInstance player, int eventId)
  11057. + {
  11058. + if (getStatus() != State.VOTING)
  11059. + {
  11060. + player.sendMessage("You cant vote now!");
  11061. + return false;
  11062. + }
  11063. + if (votes.containsKey(player))
  11064. + {
  11065. + player.sendMessage("You already voted for an event!");
  11066. + return false;
  11067. + }
  11068. + if (player.getLevel() < 40)
  11069. + {
  11070. + player.sendMessage("Your level is too low to vote for events!");
  11071. + return false;
  11072. + }
  11073. + else
  11074. + {
  11075. + player.sendMessage("You succesfully voted for the event");
  11076. + votes.put(player, eventId);
  11077. + return true;
  11078. + }
  11079. + }
  11080. +
  11081. + private void announce(String text)
  11082. + {
  11083. + Broadcast.toAllOnlinePlayers(new CreatureSay(0, 18, "", "[Event] " + text));
  11084. + }
  11085. +
  11086. + private boolean canRegister(L2PcInstance player)
  11087. + {
  11088. + if (players.contains(player))
  11089. + {
  11090. + player.sendMessage("You already registered to the event!");
  11091. + return false;
  11092. + }
  11093. +
  11094. + if (player.isInJail())
  11095. + {
  11096. + player.sendMessage("You cant register from the jail.");
  11097. + return false;
  11098. + }
  11099. +
  11100. + if (player.isInOlympiadMode())
  11101. + {
  11102. + player.sendMessage("You cant register while youre in the olympiad.");
  11103. + return false;
  11104. + }
  11105. +
  11106. + if (player.getLevel() > getCurrentEvent().getInt("maxLvl"))
  11107. + {
  11108. + player.sendMessage("Youre greater than the max allowed lvl.");
  11109. + return false;
  11110. + }
  11111. +
  11112. + if (player.getLevel() < getCurrentEvent().getInt("minLvl"))
  11113. + {
  11114. + player.sendMessage("Youre lower than the min allowed lvl.");
  11115. + return false;
  11116. + }
  11117. +
  11118. + if (player.getKarma() > 0)
  11119. + {
  11120. + player.sendMessage("You cant register if you have karma.");
  11121. + return false;
  11122. + }
  11123. +
  11124. + if (player.isCursedWeaponEquiped())
  11125. + {
  11126. + player.sendMessage("You cant register with a cursed weapon.");
  11127. + return false;
  11128. + }
  11129. +
  11130. + if (player.isDead())
  11131. + {
  11132. + player.sendMessage("You cant register while youre dead.");
  11133. + return false;
  11134. + }
  11135. +
  11136. + return true;
  11137. + } /*
  11138. + * If theres a running event and
  11139. + */
  11140. +
  11141. + public boolean canTargetPlayer(L2PcInstance target, L2PcInstance self)
  11142. + {
  11143. + if (getStatus() == State.RUNNING)
  11144. + {
  11145. + if ((isRegistered(target) && isRegistered(self)) || (!isRegistered(target) && !isRegistered(self)))
  11146. + return true;
  11147. + else
  11148. + return false;
  11149. + }
  11150. + else
  11151. + return true;
  11152. + }
  11153. +
  11154. + protected int countOfRegistered()
  11155. + {
  11156. + return players.size();
  11157. + }
  11158. +
  11159. + protected void debug(String message)
  11160. + {
  11161. + if (!getBoolean("debug"))
  11162. + return;
  11163. +
  11164. + String today = _formatter.format(new Date());
  11165. +
  11166. + try
  11167. + {
  11168. + writer = new FileWriter("log/EventEngine.log", true);
  11169. + writer.write(today + " - " + message + "\r\n");
  11170. + }
  11171. + catch (IOException e)
  11172. + {
  11173. +
  11174. + }
  11175. + finally
  11176. + {
  11177. + try
  11178. + {
  11179. + writer.close();
  11180. + }
  11181. + catch (Exception e)
  11182. + {
  11183. + }
  11184. + }
  11185. + }
  11186. +
  11187. + protected void end(String text)
  11188. + {
  11189. + announce(text);
  11190. + status = State.TELE_BACK;
  11191. + schedule(1);
  11192. + }
  11193. +
  11194. + public boolean getBoolean(String propName)
  11195. + {
  11196. + return config.getBoolean(0, propName);
  11197. + }
  11198. +
  11199. + public Event getCurrentEvent()
  11200. + {
  11201. + return current;
  11202. + }
  11203. +
  11204. + public FastList<String> getEventNames()
  11205. + {
  11206. + FastList<String> map = new FastList<String>();
  11207. + for (Event event : events.values())
  11208. + map.add(event.getString("eventName"));
  11209. + return map;
  11210. + }
  11211. +
  11212. + public int getInt(String propName)
  11213. + {
  11214. + return config.getInt(0, propName);
  11215. + }
  11216. +
  11217. + protected int[] getPosition(String owner, int num)
  11218. + {
  11219. + return config.getPosition(0, owner, num);
  11220. + }
  11221. +
  11222. + public FastList<Integer> getRestriction(String type)
  11223. + {
  11224. + return config.getRestriction(0, type);
  11225. + }
  11226. +
  11227. + private State getStatus()
  11228. + {
  11229. + return status;
  11230. + }
  11231. +
  11232. + protected String getString(String propName)
  11233. + {
  11234. + return config.getString(0, propName);
  11235. + }
  11236. +
  11237. + private int getVoteCount(int event)
  11238. + {
  11239. + int count = 0;
  11240. + for (int e : votes.values())
  11241. + if (e == event)
  11242. + count++;
  11243. +
  11244. + return count;
  11245. + }
  11246. +
  11247. + private int getVoteWinner()
  11248. + {
  11249. + int old = 0;
  11250. + FastMap<Integer, Integer> temp = new FastMap<Integer, Integer>();
  11251. +
  11252. + for (int vote : votes.values())
  11253. + if (!temp.containsKey(vote))
  11254. + temp.put(vote, 1);
  11255. + else
  11256. + {
  11257. + old = temp.get(vote);
  11258. + old++;
  11259. + temp.getEntry(vote).setValue(old);
  11260. + }
  11261. +
  11262. + int max = temp.head().getNext().getValue();
  11263. + int result = temp.head().getNext().getKey();
  11264. +
  11265. + for (Map.Entry<Integer, Integer> entry : temp.entrySet())
  11266. + if (entry.getValue() > max)
  11267. + {
  11268. + max = entry.getValue();
  11269. + result = entry.getKey();
  11270. + }
  11271. +
  11272. + votes.clear();
  11273. + temp = null;
  11274. + return result;
  11275. +
  11276. + }
  11277. +
  11278. + public boolean isRegistered(L2PcInstance player)
  11279. + {
  11280. + if (getCurrentEvent() != null)
  11281. + return getCurrentEvent().players.containsKey(player);
  11282. + else
  11283. + return false;
  11284. + }
  11285. +
  11286. + public boolean isRegistered(L2Character player)
  11287. + {
  11288. + if (getCurrentEvent() != null)
  11289. + return getCurrentEvent().players.containsKey(player);
  11290. + else
  11291. + return false;
  11292. + }
  11293. +
  11294. + public boolean isRunning()
  11295. + {
  11296. + if (getStatus() == State.RUNNING)
  11297. + return true;
  11298. + else
  11299. + return false;
  11300. + }
  11301. +
  11302. + private void msgToAll(String text)
  11303. + {
  11304. + for (L2PcInstance player : players)
  11305. + player.sendMessage(text);
  11306. + }
  11307. +
  11308. + public void onLogout(L2PcInstance player)
  11309. + {
  11310. + if (votes.containsKey(player))
  11311. + votes.remove(player);
  11312. + if (players.contains(player))
  11313. + {
  11314. + players.remove(player);
  11315. + colors.remove(player);
  11316. + titles.remove(player);
  11317. + positions.remove(player);
  11318. + }
  11319. + }
  11320. +
  11321. + public boolean registerPlayer(L2PcInstance player)
  11322. + {
  11323. + if (getStatus() != State.REGISTERING)
  11324. + {
  11325. + player.sendMessage("You can't register now!");
  11326. + return false;
  11327. + }
  11328. +
  11329. + if(getBoolean("eventBufferEnabled"))
  11330. + if (!EventBuffer.getInstance().playerHaveTemplate(player))
  11331. + {
  11332. + player.sendMessage("You have to set a buff template first!");
  11333. + EventBuffer.getInstance().showHtml(player);
  11334. + return false;
  11335. + }
  11336. +
  11337. + if (canRegister(player))
  11338. + {
  11339. + player.sendMessage("You succesfully registered to the event!");
  11340. + players.add(player);
  11341. + titles.put(player, player.getTitle());
  11342. + colors.put(player, player.getAppearance().getNameColor());
  11343. + positions.put(player, new int[] { player.getX(), player.getY(), player.getZ() });
  11344. + return true;
  11345. + }
  11346. + else
  11347. + {
  11348. + player.sendMessage("You failed on registering to the event!");
  11349. + return false;
  11350. + }
  11351. + }
  11352. +
  11353. + protected void schedule(int time)
  11354. + {
  11355. + tpm.scheduleGeneral(task, time);
  11356. + }
  11357. +
  11358. + private void setCurrentEvent(int eventId)
  11359. + {
  11360. + if (eventId == 0)
  11361. + current = null;
  11362. + else
  11363. + current = events.get(eventId);
  11364. +
  11365. + debug("Changed current event to: " + (current == null ? "null" : current.getString("eventName")));
  11366. + }
  11367. +
  11368. + protected void setStatus(State s)
  11369. + {
  11370. + status = s;
  11371. + }
  11372. +
  11373. + public void showFirstHtml(L2PcInstance player, int obj)
  11374. + {
  11375. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  11376. + TextBuilder sb = new TextBuilder();
  11377. + int count = 0;
  11378. +
  11379. + sb.append("<html><body><table width=270><tr><td width=130>Event Engine </td><td width=70>"+(getBoolean("eventBufferEnabled") ? "<a action=\"bypass -h eventbuffershow\">Buffer</a>" : "")+"</td><td width=70><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  11380. +
  11381. + if (getStatus() == State.VOTING)
  11382. + {
  11383. +
  11384. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Events</td><td width=130><center>Time left: " + cdtask.getTime() + "</td>"+/*<td width=70>Votes: " + votes.size() + "</td>*/"</tr></table><br>");
  11385. +
  11386. + for (Map.Entry<Integer, Event> event : events.entrySet())
  11387. + {
  11388. + count++;
  11389. + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=180>" + event.getValue().getString("eventName") + "</td><td width=30><a action=\"bypass -h eventinfo "+event.getKey()+"\">Info</a></td>"/*<td width=30>*/);
  11390. +
  11391. + /*if (!votes.containsKey(player))
  11392. + sb.append("<a action=\"bypass -h npc_" + obj + "_" + event.getKey() + "\">Vote</a>");
  11393. + else
  11394. + sb.append("Vote");*/
  11395. +
  11396. + sb.append(/*</td><td width=30><center>" + getVoteCount(event.getKey()) + "</td>*/"</tr></table>");
  11397. + }
  11398. + sb.append("</body></html>");
  11399. + html.setHtml(sb.toString());
  11400. + player.sendPacket(html);
  11401. + }
  11402. +
  11403. + if (getStatus() == State.REGISTERING)
  11404. + {
  11405. +
  11406. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>");
  11407. + if (players.contains(player))
  11408. + sb.append("<a action=\"bypass -h npc_" + obj + "_unreg\">Unregister</a>");
  11409. + else
  11410. + sb.append("<a action=\"bypass -h npc_" + obj + "_reg\">Register</a>");
  11411. +
  11412. + sb.append("</td><td width=130><center><a action=\"bypass -h eventinfo "+getCurrentEvent().getInt("ids")+"\">" + getCurrentEvent().getString("eventName") + "</a></td><td width=70>Time: " + cdtask.getTime() + "</td></tr></table><br>");
  11413. +
  11414. + for (L2PcInstance p : EventManager.getInstance().players)
  11415. + {
  11416. + count++;
  11417. + sb.append("<center><table width=270 " + (count % 2 == 1 ? "" : "bgcolor=5A5A5A") + "><tr><td width=120>" + p.getName() + "</td><td width=40>lvl " + p.getLevel() + "</td><td width=110>" + p.getTemplate().className + "</td></tr></table>");
  11418. + }
  11419. +
  11420. + sb.append("</body></html>");
  11421. + html.setHtml(sb.toString());
  11422. + player.sendPacket(html);
  11423. + }
  11424. + if (getStatus() == State.RUNNING)
  11425. + getCurrentEvent().showHtml(player, obj);
  11426. +
  11427. + }
  11428. +
  11429. + private void teleBackEveryone()
  11430. + {
  11431. + for (L2PcInstance player : getCurrentEvent().getPlayerList())
  11432. + {
  11433. + if(player.getPoly().isMorphed())
  11434. + {
  11435. + player.getPoly().setPolyInfo(null, "1");
  11436. + player.decayMe();
  11437. + player.spawnMe(player.getX(),player.getY(),player.getZ());
  11438. + }
  11439. + player.teleToLocation(positions.get(player)[0], positions.get(player)[1], positions.get(player)[2]);
  11440. + player.getAppearance().setNameColor(colors.get(player));
  11441. + player.setTitle(titles.get(player));
  11442. + if (player.getParty() != null)
  11443. + {
  11444. + L2Party party = player.getParty();
  11445. + party.removePartyMember(player);
  11446. + }
  11447. +
  11448. + player.broadcastUserInfo();
  11449. + if (player.isDead())
  11450. + player.doRevive();
  11451. + }
  11452. +
  11453. + }
  11454. +
  11455. + public boolean unregisterPlayer(L2PcInstance player)
  11456. + {
  11457. + if (!players.contains(player))
  11458. + {
  11459. + player.sendMessage("You're not registered to the event!");
  11460. + return false;
  11461. + }
  11462. + if (getStatus() != State.REGISTERING)
  11463. + {
  11464. + player.sendMessage("You can't unregister now!");
  11465. + return false;
  11466. + }
  11467. + else
  11468. + {
  11469. + player.sendMessage("You succesfully unregistered from the event!");
  11470. + players.remove(player);
  11471. + colors.remove(player);
  11472. + positions.remove(player);
  11473. + return true;
  11474. + }
  11475. + }
  11476. +
  11477. + public boolean areTeammates(L2PcInstance player, L2PcInstance target)
  11478. + {
  11479. + if(getCurrentEvent() == null)
  11480. + return false;
  11481. +
  11482. + if(getCurrentEvent().numberOfTeams() == 1)
  11483. + return false;
  11484. +
  11485. + if(getCurrentEvent().numberOfTeams() > 1)
  11486. + if(getCurrentEvent().getTeam(player) == getCurrentEvent().getTeam(target))
  11487. + return true;
  11488. + else
  11489. + return false;
  11490. +
  11491. + return false;
  11492. + }
  11493. +}
  11494. \ No newline at end of file
  11495. Index: head-src/com/l2jfrozen/gameserver/model/L2Skill.java
  11496. ===================================================================
  11497. --- head-src/com/l2jfrozen/gameserver/model/L2Skill.java (revision 1132)
  11498. +++ head-src/com/l2jfrozen/gameserver/model/L2Skill.java (working copy)
  11499. @@ -33,6 +33,7 @@
  11500. import com.l2jfrozen.gameserver.datatables.HeroSkillTable;
  11501. import com.l2jfrozen.gameserver.datatables.SkillTable;
  11502. import com.l2jfrozen.gameserver.datatables.sql.SkillTreeTable;
  11503. +import com.l2jfrozen.gameserver.event.EventManager;
  11504. import com.l2jfrozen.gameserver.geo.GeoData;
  11505. import com.l2jfrozen.gameserver.managers.SiegeManager;
  11506. import com.l2jfrozen.gameserver.model.actor.instance.L2ArtefactInstance;
  11507. @@ -264,6 +265,8 @@
  11508. COREDONE,
  11509. ZAKENPLAYER,
  11510. ZAKENSELF,
  11511. + BOMB,
  11512. + CAPTURE,
  11513.  
  11514. // unimplemented
  11515. NOTDONE;
  11516. @@ -2009,6 +2012,20 @@
  11517. }
  11518. }
  11519.  
  11520. + if (obj instanceof L2PcInstance && activeChar instanceof L2PcInstance)
  11521. + if(EventManager.getInstance().getCurrentEvent().numberOfTeams() > 1 &&
  11522. + EventManager.getInstance().isRegistered((L2PcInstance)activeChar) &&
  11523. + EventManager.getInstance().isRegistered((L2PcInstance)obj) &&
  11524. + EventManager.getInstance().getCurrentEvent().getTeam((L2PcInstance)obj) == EventManager.getInstance().getCurrentEvent().getTeam((L2PcInstance)activeChar))
  11525. + continue;
  11526. +
  11527. + if (obj instanceof L2Summon && activeChar instanceof L2PcInstance)
  11528. + if(EventManager.getInstance().getCurrentEvent().numberOfTeams() > 1 &&
  11529. + EventManager.getInstance().isRegistered((L2PcInstance)activeChar) &&
  11530. + EventManager.getInstance().isRegistered(((L2Summon)obj).getOwner()) &&
  11531. + EventManager.getInstance().getCurrentEvent().getTeam(((L2Summon)obj).getOwner()) == EventManager.getInstance().getCurrentEvent().getTeam((L2PcInstance)activeChar))
  11532. + continue;
  11533. +
  11534. targetList.add((L2Character) obj);
  11535. }
  11536. }
  11537. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java
  11538. ===================================================================
  11539. --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java (revision 1132)
  11540. +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestJoinParty.java (working copy)
  11541. @@ -23,6 +23,8 @@
  11542. import org.apache.log4j.Logger;
  11543.  
  11544. import com.l2jfrozen.Config;
  11545. +import com.l2jfrozen.gameserver.event.EventManager;
  11546. +import com.l2jfrozen.gameserver.event.LMS;
  11547. import com.l2jfrozen.gameserver.model.L2Party;
  11548. import com.l2jfrozen.gameserver.model.L2World;
  11549. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  11550. @@ -39,6 +41,7 @@
  11551.  
  11552. private String _name;
  11553. private int _itemDistribution;
  11554. + private boolean _isInLMS;
  11555.  
  11556. @Override
  11557. protected void readImpl()
  11558. @@ -52,10 +55,15 @@
  11559. {
  11560. final L2PcInstance requestor = getClient().getActiveChar();
  11561. final L2PcInstance target = L2World.getInstance().getPlayer(_name);
  11562. + _isInLMS = EventManager.getInstance().isRegistered(requestor) && EventManager.getInstance().getCurrentEvent() instanceof LMS;
  11563.  
  11564. if (requestor == null)
  11565. return;
  11566. -
  11567. + if (_isInLMS)
  11568. + {
  11569. + requestor.sendMessage("You cannot make party in LMS");
  11570. + return;
  11571. + }
  11572. if (!getClient().getFloodProtectors().getPartyInvitation().tryPerformAction("PartyInvitation"))
  11573. {
  11574. requestor.sendMessage("You Cannot Invite into Party So Fast!");
  11575. Index: head-src/com/l2jfrozen/gameserver/event/Event.java
  11576. ===================================================================
  11577. --- head-src/com/l2jfrozen/gameserver/event/Event.java (nonexistent)
  11578. +++ head-src/com/l2jfrozen/gameserver/event/Event.java (working copy)
  11579. @@ -0,0 +1,696 @@
  11580. +package com.l2jfrozen.gameserver.event;
  11581. +
  11582. +import java.util.Set;
  11583. +
  11584. +import javolution.util.FastList;
  11585. +import javolution.util.FastMap;
  11586. +
  11587. +import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
  11588. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  11589. +import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
  11590. +import com.l2jfrozen.gameserver.datatables.sql.SpawnTable;
  11591. +import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
  11592. +import com.l2jfrozen.gameserver.model.L2Object;
  11593. +import com.l2jfrozen.gameserver.model.L2Party;
  11594. +import com.l2jfrozen.gameserver.model.L2Skill;
  11595. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  11596. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  11597. +import com.l2jfrozen.gameserver.model.L2Summon;
  11598. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  11599. +import com.l2jfrozen.gameserver.model.actor.instance.L2PetInstance;
  11600. +import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
  11601. +import com.l2jfrozen.gameserver.network.serverpackets.ExShowScreenMessage;
  11602. +import com.l2jfrozen.gameserver.network.serverpackets.Ride;
  11603. +import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  11604. +import com.l2jfrozen.gameserver.templates.L2EtcItemType;
  11605. +import com.l2jfrozen.gameserver.util.Broadcast;
  11606. +import com.l2jfrozen.util.random.Rnd;
  11607. +
  11608. +/**
  11609. + * @author Rizel
  11610. + *
  11611. + */
  11612. +public abstract class Event
  11613. +{
  11614. + protected class Clock implements Runnable
  11615. + {
  11616. + protected String getTime()
  11617. + {
  11618. + String mins = "" + time / 60;
  11619. + String secs = (time % 60 < 10 ? "0" + time % 60 : "" + time % 60);
  11620. + return "" + mins + ":" + secs + "";
  11621. + }
  11622. +
  11623. + public void run()
  11624. + {
  11625. + clockTick();
  11626. + scorebartext = getScorebar();
  11627. + for (L2PcInstance player : getPlayerList())
  11628. + player.sendPacket(new ExShowScreenMessage(1, -1, 2, false, 1, 0, 0, false, 2000, false, scorebartext));
  11629. +
  11630. + if (time <= 0)
  11631. + schedule(1);
  11632. + else
  11633. + {
  11634. + time--;
  11635. + tpm.scheduleGeneral(clock, 1000);
  11636. + }
  11637. + }
  11638. +
  11639. + protected void setTime(int t)
  11640. + {
  11641. + time = t;
  11642. + }
  11643. +
  11644. + protected void startClock(int mt)
  11645. + {
  11646. + time = mt;
  11647. + tpm.scheduleGeneral(clock, 1);
  11648. + }
  11649. + }
  11650. +
  11651. + protected class ResurrectorTask implements Runnable
  11652. + {
  11653. + private L2PcInstance player;
  11654. +
  11655. + public ResurrectorTask(L2PcInstance p)
  11656. + {
  11657. + player = p;
  11658. + ThreadPoolManager.getInstance().scheduleGeneral(this, 7000);
  11659. + debug("Resurrector task created: " + player.getName());
  11660. + }
  11661. +
  11662. + public void run()
  11663. + {
  11664. + if (EventManager.getInstance().isRegistered(player))
  11665. + {
  11666. + debug("Resurrector task executed: " + player.getName());
  11667. + player.doRevive();
  11668. +
  11669. + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
  11670. + EventBuffer.getInstance().buffPlayer(player);
  11671. +
  11672. + player.setCurrentCp(player.getMaxCp());
  11673. + player.setCurrentHp(player.getMaxHp());
  11674. + player.setCurrentMp(player.getMaxMp());
  11675. + teleportToTeamPos(player);
  11676. + }
  11677. +
  11678. + }
  11679. + }
  11680. +
  11681. + protected int eventId;
  11682. +
  11683. + //Config
  11684. + protected EventConfig config = EventConfig.getInstance();
  11685. +
  11686. + protected static int[] startpos = EventManager.npcPos;
  11687. +
  11688. + protected FastMap<Integer, EventTeam> teams;
  11689. +
  11690. + //TEAM-STATUS-SCORE
  11691. + protected FastMap<L2PcInstance, int[]> players;
  11692. +
  11693. + protected ThreadPoolManager tpm;
  11694. +
  11695. + protected ResurrectorTask resurrectorTask;
  11696. +
  11697. + private String scorebartext;
  11698. +
  11699. + protected Clock clock;
  11700. +
  11701. + protected int time;
  11702. +
  11703. + protected int winnerTeam;
  11704. +
  11705. + protected int loserTeam;
  11706. +
  11707. + public Event()
  11708. + {
  11709. + teams = new FastMap<Integer, EventTeam>();
  11710. + clock = new Clock();
  11711. + tpm = ThreadPoolManager.getInstance();
  11712. + players = new FastMap<L2PcInstance, int[]>();
  11713. + time = 0;
  11714. + }
  11715. +
  11716. + protected void addToResurrector(L2PcInstance player)
  11717. + {
  11718. + new ResurrectorTask(player);
  11719. + }
  11720. +
  11721. + protected void announce(Set<L2PcInstance> list, String text)
  11722. + {
  11723. + for (L2PcInstance player : list)
  11724. + player.sendPacket(new CreatureSay(0, 18, "", "[Event] " + text));
  11725. + }
  11726. +
  11727. + public boolean canAttack(L2PcInstance player, L2Object target)
  11728. + {
  11729. + return true;
  11730. + }
  11731. +
  11732. + protected void clockTick()
  11733. + {
  11734. +
  11735. + }
  11736. +
  11737. + protected int countOfPositiveStatus()
  11738. + {
  11739. + int count = 0;
  11740. + for (L2PcInstance player : getPlayerList())
  11741. + if (getStatus(player) >= 0)
  11742. + count++;
  11743. +
  11744. + return count;
  11745. + }
  11746. +
  11747. + protected void createNewTeam(int id, String name, int[] color, int[] startPos)
  11748. + {
  11749. + teams.put(id, new EventTeam(id, name, color, startPos));
  11750. + }
  11751. +
  11752. + protected void createPartyOfTeam(int teamId)
  11753. + {
  11754. + int count = 0;
  11755. + L2Party party = null;
  11756. +
  11757. + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
  11758. +
  11759. + for (L2PcInstance p : players.keySet())
  11760. + if (getTeam(p) == teamId)
  11761. + list.add(p);
  11762. +
  11763. + for (L2PcInstance player : list)
  11764. + {
  11765. + if (count % 9 == 0 && list.size() - count != 1)
  11766. + party = new L2Party(player, 1);
  11767. + if (count % 9 < 9)
  11768. + player.joinParty(party);
  11769. + count++;
  11770. + }
  11771. + }
  11772. +
  11773. + protected void debug(String text)
  11774. + {
  11775. + EventManager.getInstance().debug(text);
  11776. + }
  11777. +
  11778. + protected void divideIntoTeams(int number)
  11779. + {
  11780. + int i = 0;
  11781. + while (EventManager.getInstance().players.size() != 0)
  11782. + {
  11783. + i++;
  11784. + L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
  11785. + players.put(player, new int[] { i, 0, 0 });
  11786. + EventManager.getInstance().players.remove(player);
  11787. + if (i == number)
  11788. + i = 0;
  11789. + }
  11790. + }
  11791. +
  11792. + public void dropBomb(L2PcInstance player)
  11793. + {
  11794. +
  11795. + }
  11796. +
  11797. + protected abstract void endEvent();
  11798. +
  11799. + protected void forceSitAll()
  11800. + {
  11801. + for (L2PcInstance player : players.keySet())
  11802. + {
  11803. + if (player.isCastingNow())
  11804. + player.abortCast();
  11805. + if (player.isAttackingNow())
  11806. + player.abortAttack();
  11807. + player.sitDown();
  11808. + player.eventSitForced = true;
  11809. + }
  11810. + }
  11811. +
  11812. + protected void forceStandAll()
  11813. + {
  11814. + for (L2PcInstance player : players.keySet())
  11815. + {
  11816. + player.eventSitForced = false;
  11817. + player.standUp();
  11818. + }
  11819. +
  11820. + }
  11821. +
  11822. + public boolean getBoolean(String propName)
  11823. + {
  11824. + return config.getBoolean(eventId, propName);
  11825. + }
  11826. +
  11827. + public int[] getColor(String owner)
  11828. + {
  11829. + return config.getColor(eventId, owner);
  11830. + }
  11831. +
  11832. + public int getInt(String propName)
  11833. + {
  11834. + return config.getInt(eventId, propName);
  11835. + }
  11836. +
  11837. + protected Set<L2PcInstance> getPlayerList()
  11838. + {
  11839. + return players.keySet();
  11840. + }
  11841. +
  11842. + protected FastList<L2PcInstance> getPlayersOfTeam(int team)
  11843. + {
  11844. + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
  11845. +
  11846. + for (L2PcInstance player : getPlayerList())
  11847. + if (getTeam(player) == team)
  11848. + list.add(player);
  11849. +
  11850. + return list;
  11851. + }
  11852. +
  11853. + protected EventTeam getPlayersTeam(L2PcInstance player)
  11854. + {
  11855. + return teams.get(players.get(player)[0]);
  11856. + }
  11857. +
  11858. + protected FastList<L2PcInstance> getPlayersWithStatus(int status)
  11859. + {
  11860. + FastList<L2PcInstance> list = new FastList<L2PcInstance>();
  11861. +
  11862. + for (L2PcInstance player : getPlayerList())
  11863. + if (getStatus(player) == status)
  11864. + list.add(player);
  11865. +
  11866. + return list;
  11867. + }
  11868. +
  11869. + protected L2PcInstance getPlayerWithMaxScore()
  11870. + {
  11871. + L2PcInstance max;
  11872. + max = players.head().getNext().getKey();
  11873. + for (L2PcInstance player : players.keySet())
  11874. + if (players.get(player)[2] > players.get(max)[2])
  11875. + max = player;
  11876. +
  11877. + return max;
  11878. + }
  11879. +
  11880. + protected void unequip(){
  11881. + for (L2PcInstance player : players.keySet())
  11882. + {
  11883. + player.getInventory().unEquipItemInSlot(7);
  11884. + player.getInventory().unEquipItemInSlot(8);
  11885. + player.getInventory().unEquipItemInSlot(14);
  11886. + }
  11887. + }
  11888. +
  11889. + public int[] getPosition(String owner, int num)
  11890. + {
  11891. + return config.getPosition(eventId, owner, num);
  11892. + }
  11893. +
  11894. + protected L2PcInstance getRandomPlayer()
  11895. + {
  11896. + FastList<L2PcInstance> temp = new FastList<L2PcInstance>();
  11897. + for (L2PcInstance player : players.keySet())
  11898. + temp.add(player);
  11899. +
  11900. + return temp.get(Rnd.get(temp.size()));
  11901. + }
  11902. +
  11903. + protected L2PcInstance getRandomPlayerFromTeam(int team)
  11904. + {
  11905. + FastList<L2PcInstance> temp = new FastList<L2PcInstance>();
  11906. + for (L2PcInstance player : players.keySet())
  11907. + if (getTeam(player) == team)
  11908. + temp.add(player);
  11909. +
  11910. + return temp.get(Rnd.get(temp.size()));
  11911. + }
  11912. +
  11913. + public FastList<Integer> getRestriction(String type)
  11914. + {
  11915. + return config.getRestriction(eventId, type);
  11916. + }
  11917. +
  11918. + protected int getScore(L2PcInstance player)
  11919. + {
  11920. + return players.get(player)[2];
  11921. + }
  11922. +
  11923. + protected abstract String getScorebar();
  11924. +
  11925. + protected int getStatus(L2PcInstance player)
  11926. + {
  11927. + return players.get(player)[1];
  11928. + }
  11929. +
  11930. + public String getString(String propName)
  11931. + {
  11932. + return config.getString(eventId, propName);
  11933. + }
  11934. +
  11935. + public int getTeam(L2PcInstance player)
  11936. + {
  11937. + return players.get(player)[0];
  11938. + }
  11939. +
  11940. + protected int getWinnerTeam()
  11941. + {
  11942. + FastList<EventTeam> t = new FastList<EventTeam>();
  11943. +
  11944. + for (EventTeam team : teams.values())
  11945. + {
  11946. + if (t.size() == 0)
  11947. + {
  11948. + t.add(team);
  11949. + continue;
  11950. + }
  11951. +
  11952. + if (team.getScore() > t.getFirst().getScore())
  11953. + {
  11954. + t.clear();
  11955. + t.add(team);
  11956. + continue;
  11957. + }
  11958. + if (team.getScore() == t.getFirst().getScore())
  11959. + t.add(team);
  11960. +
  11961. + }
  11962. +
  11963. + if (t.size() > 1)
  11964. + return t.get(Rnd.get(t.size())).getId();
  11965. + else
  11966. + return t.getFirst().getId();
  11967. +
  11968. + }
  11969. +
  11970. + protected void giveReward(FastList<L2PcInstance> players, int id, int ammount)
  11971. + {
  11972. + for (L2PcInstance player : players)
  11973. + {
  11974. + if(player == null)
  11975. + continue;
  11976. +
  11977. + player.addItem("Event", id, ammount, player, true);
  11978. + EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
  11979. + }
  11980. +
  11981. + }
  11982. +
  11983. + protected void giveReward(L2PcInstance player, int id, int ammount)
  11984. + {
  11985. + EventStats.getInstance().tempTable.get(player.getObjectId())[0] = 1;
  11986. +
  11987. + player.addItem("Event", id, ammount, player, true);
  11988. + }
  11989. +
  11990. + protected void increasePlayersScore(L2PcInstance player)
  11991. + {
  11992. + int old = getScore(player);
  11993. + setScore(player, old + 1);
  11994. + EventStats.getInstance().tempTable.get(player.getObjectId())[3] = EventStats.getInstance().tempTable.get(player.getObjectId())[3] + 1;
  11995. + }
  11996. +
  11997. + protected void msgToAll(String text)
  11998. + {
  11999. + for (L2PcInstance player : players.keySet())
  12000. + player.sendMessage(text);
  12001. + }
  12002. +
  12003. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  12004. + {
  12005. + EventStats.getInstance().tempTable.get(victim.getObjectId())[2] = EventStats.getInstance().tempTable.get(victim.getObjectId())[2] + 1;
  12006. + return;
  12007. + }
  12008. +
  12009. + public void onHit(L2PcInstance actor, L2PcInstance target)
  12010. + {
  12011. + }
  12012. +
  12013. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  12014. + {
  12015. + EventStats.getInstance().tempTable.get(killer.getObjectId())[1] = EventStats.getInstance().tempTable.get(killer.getObjectId())[1] + 1;
  12016. + return;
  12017. + }
  12018. +
  12019. + public void onLogout(L2PcInstance player)
  12020. + {
  12021. + if (players.containsKey(player))
  12022. + removePlayer(player);
  12023. +
  12024. + player.setXYZ(EventManager.getInstance().positions.get(player)[0], EventManager.getInstance().positions.get(player)[1], EventManager.getInstance().positions.get(player)[2]);
  12025. + player.setTitle(EventManager.getInstance().titles.get(player));
  12026. +
  12027. + if (teams.size() == 1)
  12028. + if (getPlayerList().size() == 1)
  12029. + {
  12030. + endEvent();
  12031. + return;
  12032. + }
  12033. +
  12034. + if (teams.size() > 1)
  12035. + {
  12036. + int t = players.head().getNext().getValue()[0];
  12037. + for (L2PcInstance p : getPlayerList())
  12038. + if (getTeam(p) != t)
  12039. + return;
  12040. +
  12041. + endEvent();
  12042. + return;
  12043. +
  12044. + }
  12045. + }
  12046. +
  12047. + public void onSay(int type, L2PcInstance player, String text)
  12048. + {
  12049. + return;
  12050. + }
  12051. +
  12052. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  12053. + {
  12054. + return false;
  12055. + }
  12056. +
  12057. + public boolean onUseItem(L2PcInstance player, L2ItemInstance item)
  12058. + {
  12059. + if (EventManager.getInstance().getRestriction("item").contains(item.getItemId()) || getRestriction("item").contains(item.getItemId()))
  12060. + return false;
  12061. +
  12062. + if (item.getItemType() == L2EtcItemType.POTION && !getBoolean("allowPotions"))
  12063. + return false;
  12064. +
  12065. + if (item.getItemType() == L2EtcItemType.SCROLL)
  12066. + return false;
  12067. +
  12068. + return true;
  12069. + }
  12070. +
  12071. + public boolean onUseMagic(L2Skill skill)
  12072. + {
  12073. + if (EventManager.getInstance().getRestriction("skill").contains(skill.getId()) || getRestriction("skill").contains(skill.getId()))
  12074. + return false;
  12075. +
  12076. + if (skill.getSkillType() == L2Skill.SkillType.RESURRECT)
  12077. + return false;
  12078. +
  12079. + if (skill.getSkillType() == L2Skill.SkillType.SUMMON_FRIEND)
  12080. + return false;
  12081. +
  12082. + if (skill.getSkillType() == L2Skill.SkillType.RECALL)
  12083. + return false;
  12084. +
  12085. + if (skill.getSkillType() == L2Skill.SkillType.FAKE_DEATH)
  12086. + return false;
  12087. +
  12088. + return true;
  12089. + }
  12090. +
  12091. + protected void prepare(L2PcInstance player)
  12092. + {
  12093. + if (player.isCastingNow())
  12094. + player.abortCast();
  12095. + player.getAppearance().setVisible();
  12096. +
  12097. + if (player.getPet() != null)
  12098. + {
  12099. + L2Summon summon = player.getPet();
  12100. + if (summon instanceof L2PetInstance)
  12101. + summon.unSummon(player);
  12102. + }
  12103. +
  12104. + if(player.isMounted())
  12105. + {
  12106. + if(player.setMountType(0))
  12107. + {
  12108. + if(player.isFlying())
  12109. + {
  12110. + player.removeSkill(SkillTable.getInstance().getInfo(4289, 1));
  12111. + }
  12112. + Ride dismount = new Ride(player.getObjectId(), Ride.ACTION_DISMOUNT, 0);
  12113. + Broadcast.toSelfAndKnownPlayers(player, dismount);
  12114. + player.setMountObjectID(0);
  12115. + dismount = null;
  12116. + }
  12117. + }
  12118. +
  12119. + if (getBoolean("removeBuffs"))
  12120. + {
  12121. + player.stopAllEffects();
  12122. + if (player.getPet() != null)
  12123. + {
  12124. + L2Summon summon = player.getPet();
  12125. + if (summon instanceof L2Summon)
  12126. + summon.unSummon(player);
  12127. + }
  12128. + }
  12129. +
  12130. + if (player.getParty() != null)
  12131. + {
  12132. + L2Party party = player.getParty();
  12133. + party.removePartyMember(player);
  12134. + }
  12135. + int[] nameColor = getPlayersTeam(player).getTeamColor();
  12136. + player.getAppearance().setNameColor(nameColor[0], nameColor[1], nameColor[2]);
  12137. + player.setTitle("<- 0 ->");
  12138. +
  12139. + if(EventManager.getInstance().getBoolean("eventBufferEnabled"))
  12140. + EventBuffer.getInstance().buffPlayer(player);
  12141. +
  12142. + player.broadcastUserInfo();
  12143. + }
  12144. +
  12145. + protected void preparePlayers()
  12146. + {
  12147. + for (L2PcInstance player : players.keySet())
  12148. + prepare(player);
  12149. + }
  12150. +
  12151. + protected void removePlayer(L2PcInstance player)
  12152. + {
  12153. + players.remove(player);
  12154. + }
  12155. +
  12156. + public void reset()
  12157. + {
  12158. + players.clear();
  12159. + tpm.purge();
  12160. + winnerTeam = 0;
  12161. +
  12162. + for (EventTeam team : teams.values())
  12163. + team.setScore(0);
  12164. +
  12165. + debug("Event reseted");
  12166. + }
  12167. +
  12168. + protected abstract void schedule(int time);
  12169. +
  12170. + protected void selectPlayers(int teamId, int playerCount)
  12171. + {
  12172. + for (int i = 0; i < playerCount; i++)
  12173. + {
  12174. + L2PcInstance player = EventManager.getInstance().players.get(Rnd.get(EventManager.getInstance().players.size()));
  12175. + players.put(player, new int[] { teamId, 0, 0 });
  12176. + EventManager.getInstance().players.remove(player);
  12177. + }
  12178. +
  12179. + }
  12180. +
  12181. + protected void setScore(L2PcInstance player, int score)
  12182. + {
  12183. + players.get(player)[2] = score;
  12184. + player.setTitle("<- " + score + " ->");
  12185. + player.broadcastUserInfo();
  12186. + }
  12187. +
  12188. + protected void setStatus(L2PcInstance player, int status)
  12189. + {
  12190. + if (players.containsKey(player))
  12191. + players.get(player)[1] = status;
  12192. + }
  12193. +
  12194. + protected void setTeam(L2PcInstance player, int team)
  12195. + {
  12196. + players.get(player)[0] = team;
  12197. + }
  12198. +
  12199. + protected abstract void showHtml(L2PcInstance player, int obj);
  12200. +
  12201. + protected L2Spawn spawnNPC(int xPos, int yPos, int zPos, int npcId)
  12202. + {
  12203. + final L2NpcTemplate template = NpcTable.getInstance().getTemplate(npcId);
  12204. + try
  12205. + {
  12206. + final L2Spawn spawn = new L2Spawn(template);
  12207. + spawn.setLocx(xPos);
  12208. + spawn.setLocy(yPos);
  12209. + spawn.setLocz(zPos);
  12210. + spawn.setAmount(1);
  12211. + spawn.setHeading(0);
  12212. + spawn.setRespawnDelay(1);
  12213. + SpawnTable.getInstance().addNewSpawn(spawn, false);
  12214. + spawn.init();
  12215. + return spawn;
  12216. + }
  12217. + catch (Exception e)
  12218. + {
  12219. + return null;
  12220. + }
  12221. + }
  12222. +
  12223. + protected abstract void start();
  12224. +
  12225. + protected void teleportPlayer(L2PcInstance player, int[] coordinates)
  12226. + {
  12227. + player.teleToLocation(coordinates[0] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[1] + (Rnd.get(coordinates[3] * 2) - coordinates[3]), coordinates[2]);
  12228. + }
  12229. +
  12230. + protected void teleportToTeamPos()
  12231. + {
  12232. + for (L2PcInstance player : players.keySet())
  12233. + {
  12234. + teleportToTeamPos(player);
  12235. + }
  12236. +
  12237. + }
  12238. +
  12239. + protected void teleportToTeamPos(L2PcInstance player)
  12240. + {
  12241. + int[] pos = getPosition(teams.get(getTeam(player)).getName(), 0);
  12242. + teleportPlayer(player, pos);
  12243. + }
  12244. +
  12245. + protected void unspawnNPC(L2Spawn npcSpawn)
  12246. + {
  12247. + if (npcSpawn == null)
  12248. + return;
  12249. +
  12250. + npcSpawn.getLastSpawn().deleteMe();
  12251. + npcSpawn.stopRespawn();
  12252. + SpawnTable.getInstance().deleteSpawn(npcSpawn, true);
  12253. + }
  12254. +
  12255. + public int numberOfTeams()
  12256. + {
  12257. + return teams.size();
  12258. + }
  12259. +
  12260. + public void useCapture(L2PcInstance player, L2NpcInstance base){}
  12261. +
  12262. + protected void polymorph(L2PcInstance player, int id)
  12263. + {
  12264. + player.getPoly().setPolyInfo("", String.valueOf(id));
  12265. + player.decayMe();
  12266. + player.spawnMe(player.getX(),player.getY(),player.getZ());
  12267. + }
  12268. +
  12269. + protected void unpolymorph(L2PcInstance player)
  12270. + {
  12271. + player.getPoly().setPolyInfo(null, "1");
  12272. + player.decayMe();
  12273. + player.spawnMe(player.getX(),player.getY(),player.getZ());
  12274. + }
  12275. +}
  12276. \ No newline at end of file
  12277. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java
  12278. ===================================================================
  12279. --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java (revision 1132)
  12280. +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
  12281. @@ -20,11 +20,17 @@
  12282. */
  12283. package com.l2jfrozen.gameserver.network.clientpackets;
  12284.  
  12285. +import java.sql.Connection;
  12286. +import java.sql.PreparedStatement;
  12287. +import java.sql.ResultSet;
  12288. import org.apache.log4j.Logger;
  12289.  
  12290. import com.l2jfrozen.Config;
  12291. import com.l2jfrozen.gameserver.ai.CtrlIntention;
  12292. import com.l2jfrozen.gameserver.communitybbs.CommunityBoard;
  12293. +import com.l2jfrozen.gameserver.event.EventBuffer;
  12294. +import com.l2jfrozen.gameserver.event.EventManager;
  12295. +import com.l2jfrozen.gameserver.event.EventStats;
  12296. import com.l2jfrozen.gameserver.datatables.sql.AdminCommandAccessRights;
  12297. import com.l2jfrozen.gameserver.handler.AdminCommandHandler;
  12298. import com.l2jfrozen.gameserver.handler.IAdminCommandHandler;
  12299. @@ -45,6 +51,7 @@
  12300. import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
  12301. import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  12302. import com.l2jfrozen.gameserver.util.GMAudit;
  12303. +import com.l2jfrozen.util.database.L2DatabaseFactory;
  12304.  
  12305. public final class RequestBypassToServer extends L2GameClientPacket
  12306. {
  12307. @@ -117,6 +124,18 @@
  12308.  
  12309. ach.useAdminCommand(_command, activeChar);
  12310. }
  12311. + else if (_command.startsWith("event_vote"))
  12312. + {
  12313. + EventManager.getInstance().addVote(activeChar, Integer.parseInt(_command.substring(11)));
  12314. + }
  12315. + else if(_command.equals("event_register"))
  12316. + {
  12317. + EventManager.getInstance().registerPlayer(activeChar);
  12318. + }
  12319. + else if(_command.equals("event_unregister"))
  12320. + {
  12321. + EventManager.getInstance().unregisterPlayer(activeChar);
  12322. + }
  12323. else if (_command.equals("come_here") && activeChar.isGM())
  12324. {
  12325. comeHere(activeChar);
  12326. @@ -307,7 +326,52 @@
  12327. player.processQuestEvent(p.substring(0, idx), p.substring(idx).trim());
  12328. }
  12329. }
  12330. -
  12331. + else if (_command.startsWith("eventvote "))
  12332. + {
  12333. + EventManager.getInstance().addVote(activeChar, Integer.parseInt(_command.substring(10)));
  12334. + }
  12335. + else if (_command.startsWith("eventstats "))
  12336. + {
  12337. + Connection con = null;
  12338. + PreparedStatement statement = null;
  12339. + con = L2DatabaseFactory.getInstance().getConnection();
  12340. + statement = con.prepareStatement("SELECT characters.char_name, event_stats_full.* FROM event_stats_full INNER JOIN characters ON characters.obj_Id = event_stats_full.player ORDER BY event_stats_full.wins DESC");
  12341. + ResultSet rset = statement.executeQuery();
  12342. + if (!rset.last())
  12343. + {
  12344. + rset.close();
  12345. + statement.close();
  12346. + con.close();
  12347. + this.getClient().activeChar.sendMessage("Currently there are no statistics to show.");
  12348. + return;
  12349. + }
  12350. + rset.close();
  12351. + statement.close();
  12352. + con.close();
  12353. + EventStats.getInstance().showHtml(Integer.parseInt(_command.substring(11)),activeChar);
  12354. + }
  12355. + else if (_command.startsWith("eventstats_show "))
  12356. + {
  12357. + EventStats.getInstance().showPlayerStats(Integer.parseInt(_command.substring(16)),activeChar);
  12358. + }
  12359. + else if (_command.equals("eventbuffershow"))
  12360. + {
  12361. + EventBuffer.getInstance().showHtml(activeChar);
  12362. + }
  12363. + else if (_command.startsWith("eventbuffer "))
  12364. + {
  12365. + EventBuffer.getInstance().changeList(activeChar, Integer.parseInt(_command.substring(12,_command.length()-2)), (Integer.parseInt(_command.substring(_command.length()-1)) == 0 ? false : true));
  12366. + EventBuffer.getInstance().showHtml(activeChar);
  12367. + }
  12368. + else if (_command.startsWith("eventinfo "))
  12369. + {
  12370. + int eventId = Integer.valueOf(_command.substring(10));
  12371. +
  12372. + NpcHtmlMessage html = new NpcHtmlMessage(0);
  12373. + html.setFile("data/html/eventinfo/"+eventId+".htm");
  12374. + activeChar.sendPacket(html);
  12375. + activeChar.sendPacket(ActionFailed.STATIC_PACKET);
  12376. + }
  12377. // Jstar's Custom Bypass Caller!
  12378. else if (_command.startsWith("custom_"))
  12379. {
  12380. Index: head-src/com/l2jfrozen/gameserver/event/EventTeam.java
  12381. ===================================================================
  12382. --- head-src/com/l2jfrozen/gameserver/event/EventTeam.java (nonexistent)
  12383. +++ head-src/com/l2jfrozen/gameserver/event/EventTeam.java (working copy)
  12384. @@ -0,0 +1,109 @@
  12385. +/*
  12386. + * This program is free software: you can redistribute it and/or modify it under
  12387. + * the terms of the GNU General Public License as published by the Free Software
  12388. + * Foundation, either version 3 of the License, or (at your option) any later
  12389. + * version.
  12390. + *
  12391. + * This program is distributed in the hope that it will be useful, but WITHOUT
  12392. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  12393. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  12394. + * details.
  12395. + *
  12396. + * You should have received a copy of the GNU General Public License along with
  12397. + * this program. If not, see <http://www.gnu.org/licenses/>.
  12398. + */
  12399. +package com.l2jfrozen.gameserver.event;
  12400. +
  12401. +/**
  12402. + * @author Rizel
  12403. + *
  12404. + */
  12405. +public class EventTeam implements Comparable<EventTeam>
  12406. +{
  12407. + private int score;
  12408. +
  12409. + private String name;
  12410. +
  12411. + private int[] nameColor;
  12412. +
  12413. + private int[] startPos;
  12414. +
  12415. + private int id;
  12416. +
  12417. + public EventTeam(int id, String name, int[] color, int[] startPos)
  12418. + {
  12419. + this.id = id;
  12420. + score = 0;
  12421. + this.name = name;
  12422. + nameColor = color;
  12423. + this.startPos = startPos;
  12424. + }
  12425. +
  12426. + public int compareTo(EventTeam second)
  12427. + {
  12428. +
  12429. + if (getScore() > second.getScore())
  12430. + return 1;
  12431. + if (getScore() < second.getScore())
  12432. + return -1;
  12433. + if (getScore() == second.getScore())
  12434. + return 0;
  12435. +
  12436. + return 0;
  12437. +
  12438. + }
  12439. +
  12440. + protected String getHexaColor()
  12441. + {
  12442. + String hexa;
  12443. + Integer i1 = nameColor[0];
  12444. + Integer i2 = nameColor[1];
  12445. + Integer i3 = nameColor[2];
  12446. + hexa = "" + (i1 > 15 ? Integer.toHexString(i1) : "0" + Integer.toHexString(i1)) + (i2 > 15 ? Integer.toHexString(i2) : "0" + Integer.toHexString(i2)) + (i3 > 15 ? Integer.toHexString(i3) : "0" + Integer.toHexString(i3));
  12447. + return hexa;
  12448. + }
  12449. +
  12450. + protected int getId()
  12451. + {
  12452. + return id;
  12453. + }
  12454. +
  12455. + protected String getName()
  12456. + {
  12457. + return name;
  12458. + }
  12459. +
  12460. + protected int getScore()
  12461. + {
  12462. + return score;
  12463. + }
  12464. +
  12465. + protected int[] getTeamColor()
  12466. + {
  12467. + return nameColor;
  12468. + }
  12469. +
  12470. + protected int[] getTeamPos()
  12471. + {
  12472. + return startPos;
  12473. + }
  12474. +
  12475. + protected void increaseScore()
  12476. + {
  12477. + score++;
  12478. + }
  12479. +
  12480. + /* (non-Javadoc)
  12481. + * @see java.lang.Comparable#compareTo(java.lang.Object)
  12482. + */
  12483. +
  12484. + protected void increaseScore(int ammount)
  12485. + {
  12486. + score += ammount;
  12487. + }
  12488. +
  12489. + protected void setScore(int ammount)
  12490. + {
  12491. + score = ammount;
  12492. + }
  12493. +}
  12494. \ No newline at end of file
  12495. Index: head-src/com/l2jfrozen/gameserver/event/EventConfig.java
  12496. ===================================================================
  12497. --- head-src/com/l2jfrozen/gameserver/event/EventConfig.java (nonexistent)
  12498. +++ head-src/com/l2jfrozen/gameserver/event/EventConfig.java (working copy)
  12499. @@ -0,0 +1,270 @@
  12500. +package com.l2jfrozen.gameserver.event;
  12501. +
  12502. +import java.io.File;
  12503. +import java.util.StringTokenizer;
  12504. +import java.util.logging.Logger;
  12505. +
  12506. +import javax.xml.parsers.DocumentBuilder;
  12507. +import javax.xml.parsers.DocumentBuilderFactory;
  12508. +
  12509. +import javolution.util.FastList;
  12510. +import javolution.util.FastMap;
  12511. +
  12512. +import org.w3c.dom.Document;
  12513. +import org.w3c.dom.NamedNodeMap;
  12514. +import org.w3c.dom.Node;
  12515. +
  12516. +import com.l2jfrozen.util.random.Rnd;
  12517. +
  12518. +public class EventConfig
  12519. +{
  12520. +
  12521. + @SuppressWarnings("synthetic-access")
  12522. + private static class SingletonHolder
  12523. + {
  12524. + protected static final EventConfig _instance = new EventConfig();
  12525. + }
  12526. +
  12527. + public static EventConfig getInstance()
  12528. + {
  12529. + return SingletonHolder._instance;
  12530. + }
  12531. +
  12532. + private Logger _log = Logger.getLogger(EventConfig.class.getName());
  12533. + public FastMap<Integer, FastMap<String, String>> config;
  12534. +
  12535. + public FastMap<Integer, FastMap<String, FastMap<Integer, int[]>>> positions;
  12536. +
  12537. + public FastMap<Integer, FastMap<String, int[]>> colors;
  12538. +
  12539. + public FastMap<Integer, FastMap<String, FastList<Integer>>> restrictions;
  12540. +
  12541. + public EventConfig()
  12542. + {
  12543. + config = new FastMap<Integer, FastMap<String, String>>();
  12544. + positions = new FastMap<Integer, FastMap<String, FastMap<Integer, int[]>>>();
  12545. + colors = new FastMap<Integer, FastMap<String, int[]>>();
  12546. + restrictions = new FastMap<Integer, FastMap<String, FastList<Integer>>>();
  12547. + loadConfigs();
  12548. + }
  12549. +
  12550. + private void addColor(int id, String owner, int[] color)
  12551. + {
  12552. + if (!colors.containsKey(id))
  12553. + colors.put(id, new FastMap<String, int[]>());
  12554. +
  12555. + colors.get(id).put(owner, color);
  12556. + }
  12557. +
  12558. + private void addPosition(int id, String owner, int x, int y, int z, int radius)
  12559. + {
  12560. +
  12561. + if (!positions.containsKey(id))
  12562. + positions.put(id, new FastMap<String, FastMap<Integer, int[]>>());
  12563. + if (!positions.get(id).containsKey(owner))
  12564. + positions.get(id).put(owner, new FastMap<Integer, int[]>());
  12565. +
  12566. + positions.get(id).get(owner).put(positions.get(id).get(owner).size() + 1, new int[] { x, y, z, radius });
  12567. + }
  12568. +
  12569. + private void addProperty(int id, String propName, String value)
  12570. + {
  12571. + if (!config.containsKey(id))
  12572. + config.put(id, new FastMap<String, String>());
  12573. +
  12574. + config.get(id).put(propName, value);
  12575. + }
  12576. +
  12577. + private void addRestriction(int id, String type, String ids)
  12578. + {
  12579. + if (!restrictions.containsKey(id))
  12580. + restrictions.put(id, new FastMap<String, FastList<Integer>>());
  12581. +
  12582. + FastList<Integer> idlist = new FastList<Integer>();
  12583. + StringTokenizer st = new StringTokenizer(ids, ",");
  12584. + while (st.hasMoreTokens())
  12585. + idlist.add(Integer.parseInt(st.nextToken()));
  12586. +
  12587. + restrictions.get(id).put(type, idlist);
  12588. + }
  12589. +
  12590. + public boolean getBoolean(int event, String propName)
  12591. + {
  12592. + if (!(config.containsKey(event)))
  12593. + {
  12594. + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
  12595. + return false;
  12596. + }
  12597. +
  12598. + if (config.get(event).containsKey(propName))
  12599. + return Boolean.parseBoolean(config.get(event).get(propName));
  12600. + else
  12601. + {
  12602. + _log.warning("Event: Try to get a non existing property: " + propName);
  12603. + return false;
  12604. + }
  12605. +
  12606. + }
  12607. +
  12608. + public int[] getColor(int event, String owner)
  12609. + {
  12610. + if (!(colors.containsKey(event)))
  12611. + {
  12612. + _log.warning("Event: Try to get a color of a non existing event: ID: " + event);
  12613. + return new int[] { 255, 255, 255 };
  12614. + }
  12615. +
  12616. + if (colors.get(event).containsKey(owner))
  12617. + return colors.get(event).get(owner);
  12618. + else
  12619. + {
  12620. + _log.warning("Event: Try to get a non existing color: " + owner);
  12621. + return new int[] { 255, 255, 255 };
  12622. + }
  12623. + }
  12624. +
  12625. + public int getInt(int event, String propName)
  12626. + {
  12627. + if (!(config.containsKey(event)))
  12628. + {
  12629. + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
  12630. + return -1;
  12631. + }
  12632. +
  12633. + if (config.get(event).containsKey(propName))
  12634. + return Integer.parseInt(config.get(event).get(propName));
  12635. + else
  12636. + {
  12637. + _log.warning("Event: Try to get a non existing property: " + propName);
  12638. + return -1;
  12639. + }
  12640. + }
  12641. +
  12642. + public int[] getPosition(int event, String owner, int num)
  12643. + {
  12644. + if (!positions.containsKey(event))
  12645. + {
  12646. + _log.warning("Event: Try to get a position of a non existing event: ID: " + event);
  12647. + return new int[] {};
  12648. + }
  12649. + if (!positions.get(event).containsKey(owner))
  12650. + {
  12651. + _log.warning("Event: Try to get a position of a non existing owner: " + owner);
  12652. + return new int[] {};
  12653. + }
  12654. + if (!positions.get(event).get(owner).containsKey(num) && num != 0)
  12655. + {
  12656. + _log.warning("Event: Try to get a non existing position: " + num);
  12657. + return new int[] {};
  12658. + }
  12659. +
  12660. + if (num == 0)
  12661. + return positions.get(event).get(owner).get(Rnd.get(positions.get(event).get(owner).size()) + 1);
  12662. + else
  12663. + return positions.get(event).get(owner).get(num);
  12664. + }
  12665. +
  12666. + public FastList<Integer> getRestriction(int event, String type)
  12667. + {
  12668. + if (!(restrictions.containsKey(event)))
  12669. + {
  12670. + _log.warning("Event: Try to get a restriction of a non existing event: ID: " + event);
  12671. + return null;
  12672. + }
  12673. + if (restrictions.get(event).containsKey(type))
  12674. + return restrictions.get(event).get(type);
  12675. + else
  12676. + {
  12677. + _log.warning("Event: Try to get a non existing restriction: " + type);
  12678. + return null;
  12679. + }
  12680. + }
  12681. +
  12682. + public String getString(int event, String propName)
  12683. + {
  12684. + if (!(config.containsKey(event)))
  12685. + {
  12686. + _log.warning("Event: Try to get a property of a non existing event: ID: " + event);
  12687. + return null;
  12688. + }
  12689. +
  12690. + if (config.get(event).containsKey(propName))
  12691. + return config.get(event).get(propName);
  12692. + else
  12693. + {
  12694. + _log.warning("Event: Try to get a non existing property: " + propName);
  12695. + return null;
  12696. + }
  12697. +
  12698. + }
  12699. +
  12700. + private void loadConfigs()
  12701. + {
  12702. + File configFile = new File("./config/Events.xml");
  12703. + Document doc = null;
  12704. + try
  12705. + {
  12706. + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  12707. + dbf.setIgnoringComments(true);
  12708. + dbf.setValidating(false);
  12709. + DocumentBuilder db = dbf.newDocumentBuilder();
  12710. + doc = db.parse(configFile);
  12711. +
  12712. + for (Node root = doc.getFirstChild(); root != null; root = root.getNextSibling())
  12713. + if ("events".equalsIgnoreCase(root.getNodeName()))
  12714. + for (Node event = root.getFirstChild(); event != null; event = event.getNextSibling())
  12715. + if ("event".equalsIgnoreCase(event.getNodeName()))
  12716. + {
  12717. + NamedNodeMap eventAttrs = event.getAttributes();
  12718. + int eventId = Integer.parseInt(eventAttrs.getNamedItem("id").getNodeValue());
  12719. +
  12720. + for (Node property = event.getFirstChild(); property != null; property = property.getNextSibling())
  12721. + {
  12722. +
  12723. + if ("property".equalsIgnoreCase(property.getNodeName()))
  12724. + {
  12725. + NamedNodeMap propAttrs = property.getAttributes();
  12726. + String name = propAttrs.getNamedItem("name").getNodeValue();
  12727. + String value = propAttrs.getNamedItem("value").getNodeValue();
  12728. + addProperty(eventId, name, value);
  12729. + }
  12730. +
  12731. + if ("position".equalsIgnoreCase(property.getNodeName()))
  12732. + {
  12733. + NamedNodeMap propAttrs = property.getAttributes();
  12734. + String owner = propAttrs.getNamedItem("owner").getNodeValue();
  12735. + String x = propAttrs.getNamedItem("x").getNodeValue();
  12736. + String y = propAttrs.getNamedItem("y").getNodeValue();
  12737. + String z = propAttrs.getNamedItem("z").getNodeValue();
  12738. + String radius = propAttrs.getNamedItem("radius").getNodeValue();
  12739. + addPosition(eventId, owner, Integer.parseInt(x), Integer.parseInt(y), Integer.parseInt(z), Integer.parseInt(radius));
  12740. +
  12741. + }
  12742. +
  12743. + if ("color".equalsIgnoreCase(property.getNodeName()))
  12744. + {
  12745. + NamedNodeMap propAttrs = property.getAttributes();
  12746. + String owner = propAttrs.getNamedItem("owner").getNodeValue();
  12747. + int r = Integer.parseInt(propAttrs.getNamedItem("r").getNodeValue());
  12748. + int g = Integer.parseInt(propAttrs.getNamedItem("g").getNodeValue());
  12749. + int b = Integer.parseInt(propAttrs.getNamedItem("b").getNodeValue());
  12750. + addColor(eventId, owner, new int[] { r, g, b });
  12751. + }
  12752. +
  12753. + if ("restriction".equalsIgnoreCase(property.getNodeName()))
  12754. + {
  12755. + NamedNodeMap propAttrs = property.getAttributes();
  12756. + String type = propAttrs.getNamedItem("type").getNodeValue();
  12757. + String ids = propAttrs.getNamedItem("ids").getNodeValue();
  12758. + addRestriction(eventId, type, ids);
  12759. + }
  12760. + }
  12761. + }
  12762. + }
  12763. + catch (Exception e)
  12764. + {
  12765. +
  12766. + }
  12767. +
  12768. + }
  12769. +}
  12770. \ No newline at end of file
  12771. Index: head-src/com/l2jfrozen/gameserver/event/Battlefield.java
  12772. ===================================================================
  12773. --- head-src/com/l2jfrozen/gameserver/event/Battlefield.java (nonexistent)
  12774. +++ head-src/com/l2jfrozen/gameserver/event/Battlefield.java (working copy)
  12775. @@ -0,0 +1,238 @@
  12776. +package com.l2jfrozen.gameserver.event;
  12777. +
  12778. +import java.util.Map;
  12779. +
  12780. +import javolution.text.TextBuilder;
  12781. +import javolution.util.FastMap;
  12782. +
  12783. +import com.l2jfrozen.gameserver.datatables.SkillTable;
  12784. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  12785. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  12786. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  12787. +import com.l2jfrozen.gameserver.network.serverpackets.NpcInfo;
  12788. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  12789. +import com.l2jfrozen.util.random.Rnd;
  12790. +
  12791. +public class Battlefield extends Event
  12792. +{
  12793. + private class Core implements Runnable
  12794. + {
  12795. +
  12796. + public void run()
  12797. + {
  12798. + try{
  12799. + switch (eventState)
  12800. + {
  12801. + case START:
  12802. + divideIntoTeams(2);
  12803. + preparePlayers();
  12804. + teleportToTeamPos();
  12805. + createPartyOfTeam(1);
  12806. + createPartyOfTeam(2);
  12807. + forceSitAll();
  12808. + giveSkill();
  12809. + spawnBases();
  12810. + setStatus(EventState.FIGHT);
  12811. + schedule(20000);
  12812. + break;
  12813. +
  12814. + case FIGHT:
  12815. + forceStandAll();
  12816. + setStatus(EventState.END);
  12817. + clock.startClock(getInt("matchTime"));
  12818. + break;
  12819. +
  12820. + case END:
  12821. + clock.setTime(0);
  12822. + if (winnerTeam == 0)
  12823. + winnerTeam = getWinnerTeam();
  12824. +
  12825. + giveReward(getPlayersOfTeam(winnerTeam), getInt("rewardId"), getInt("rewardAmmount"));
  12826. + unspawnBases();
  12827. + removeSkill();
  12828. + setStatus(EventState.INACTIVE);
  12829. + EventManager.getInstance().end("Congratulation! The " + teams.get(winnerTeam).getName() + " team won the event with " + teams.get(winnerTeam).getScore() + " points!");
  12830. + break;
  12831. + }
  12832. + }
  12833. + catch (Throwable e)
  12834. + {
  12835. + e.printStackTrace();
  12836. + EventManager.getInstance().end("Error! Event ended.");
  12837. + }
  12838. + }
  12839. +
  12840. + }
  12841. +
  12842. + private enum EventState
  12843. + {
  12844. + START, FIGHT, END, TELEPORT, INACTIVE
  12845. + }
  12846. +
  12847. + private EventState eventState;
  12848. +
  12849. + private Core task;
  12850. +
  12851. + private int winnerTeam;
  12852. +
  12853. + private FastMap<Integer,L2Spawn> bases;
  12854. +
  12855. + private FastMap<Integer,Integer> owners;
  12856. +
  12857. + public Battlefield()
  12858. + {
  12859. + super();
  12860. + eventId = 14;
  12861. + createNewTeam(1, "Blue", getColor("Blue"), getPosition("Blue", 1));
  12862. + createNewTeam(2, "Red", getColor("Red"), getPosition("Red", 1));
  12863. + bases = new FastMap<Integer,L2Spawn>();
  12864. + owners = new FastMap<Integer,Integer>();
  12865. + task = new Core();
  12866. + winnerTeam = 0;
  12867. + }
  12868. +
  12869. + @Override
  12870. + protected void endEvent()
  12871. + {
  12872. + winnerTeam = players.head().getNext().getValue()[0];
  12873. +
  12874. + setStatus(EventState.END);
  12875. + schedule(1);
  12876. + }
  12877. +
  12878. + @Override
  12879. + protected String getScorebar()
  12880. + {
  12881. + return "" + teams.get(1).getName() + ": " + teams.get(1).getScore() + " " + teams.get(2).getName() + ": " + teams.get(2).getScore() + " Time: " + clock.getTime();
  12882. + }
  12883. +
  12884. + @Override
  12885. + protected int getWinnerTeam()
  12886. + {
  12887. + if (teams.get(1).getScore() > teams.get(2).getScore())
  12888. + return 1;
  12889. + if (teams.get(2).getScore() > teams.get(1).getScore())
  12890. + return 2;
  12891. + if (teams.get(1).getScore() == teams.get(2).getScore())
  12892. + if (Rnd.nextInt(1) == 1)
  12893. + return 1;
  12894. + else
  12895. + return 2;
  12896. +
  12897. + return 1;
  12898. + }
  12899. +
  12900. + @Override
  12901. + public void onDie(L2PcInstance victim, L2PcInstance killer)
  12902. + {
  12903. + super.onDie(victim, killer);
  12904. + addToResurrector(victim);
  12905. + }
  12906. +
  12907. + @Override
  12908. + protected void schedule(int time)
  12909. + {
  12910. + tpm.scheduleGeneral(task, time);
  12911. + }
  12912. +
  12913. + private void setStatus(EventState s)
  12914. + {
  12915. + eventState = s;
  12916. + }
  12917. +
  12918. + @Override
  12919. + protected void showHtml(L2PcInstance player, int obj)
  12920. + {
  12921. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  12922. + TextBuilder sb = new TextBuilder();
  12923. + sb.append("<html><body><table width=300>" + "<tr><td><center>Event phase</td></tr>" + "<tr><td><center>" + getString("eventName") + " - " + clock.getTime() + "</td></tr>" + "<tr><td><center><font color=" + teams.get(1).getHexaColor() + ">" + teams.get(1).getScore() + "</font> - " + "<font color=" + teams.get(2).getHexaColor() + ">" + teams.get(2).getScore() + "</font></td></tr>" + "</table><br><table width=300>");
  12924. +
  12925. + int i = 0;
  12926. + for (EventTeam team : teams.values())
  12927. + {
  12928. + i++;
  12929. + sb.append("<tr><td><font color=" + team.getHexaColor() + ">" + team.getName() + "</font> team</td><td></td><td></td><td></td></tr>");
  12930. + for (L2PcInstance p : getPlayersOfTeam(i))
  12931. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + getScore(p) + "</td></tr>");
  12932. + }
  12933. +
  12934. + sb.append("</table><br></body></html>");
  12935. + html.setHtml(sb.toString());
  12936. + player.sendPacket(html);
  12937. +
  12938. + }
  12939. +
  12940. + @Override
  12941. + protected void start()
  12942. + {
  12943. + setStatus(EventState.START);
  12944. + schedule(1);
  12945. + }
  12946. +
  12947. + private void spawnBases()
  12948. + {
  12949. + for(int i = 1; i <= getInt("numOfBases"); i++)
  12950. + {
  12951. + bases.put(i, spawnNPC(getPosition("Base",i)[0],getPosition("Base",i)[1],getPosition("Base",i)[2],getInt("baseNpcId")));
  12952. + bases.get(i).getLastSpawn().setTitle("- Neutral -");
  12953. + owners.put(i, 0);
  12954. + }
  12955. + }
  12956. +
  12957. + private void unspawnBases()
  12958. + {
  12959. + for(L2Spawn base: bases.values())
  12960. + unspawnNPC(base);
  12961. + }
  12962. +
  12963. + @Override
  12964. + public void reset()
  12965. + {
  12966. + super.reset();
  12967. + bases.clear();
  12968. + owners.clear();
  12969. + }
  12970. +
  12971. + @Override
  12972. + protected void clockTick()
  12973. + {
  12974. + for(int owner : owners.values())
  12975. + if(owner != 0)
  12976. + teams.get(owner).increaseScore(1);
  12977. + }
  12978. +
  12979. + @Override
  12980. + public void useCapture(L2PcInstance player, L2NpcInstance base)
  12981. + {
  12982. + if(base.getNpcId() != getInt("baseNpcId"))
  12983. + return;
  12984. +
  12985. + for(Map.Entry<Integer, L2Spawn> baseSpawn: bases.entrySet())
  12986. + if(baseSpawn.getValue().getLastSpawn().getObjectId() == base.getObjectId())
  12987. + {
  12988. + if(owners.get(baseSpawn.getKey()) == getTeam(player))
  12989. + return;
  12990. +
  12991. + owners.getEntry(baseSpawn.getKey()).setValue(getTeam(player));
  12992. + baseSpawn.getValue().getLastSpawn().setTitle("- "+teams.get(getTeam(player)).getName()+" -");
  12993. + for(L2PcInstance p : getPlayerList())
  12994. + p.sendPacket(new NpcInfo(baseSpawn.getValue().getLastSpawn(), p));
  12995. +
  12996. + announce(getPlayerList(),"The "+teams.get(getTeam(player)).getName()+" team captured a base!");
  12997. + increasePlayersScore(player);
  12998. + player.addItem("Event", 6392, 2, player, true);
  12999. + }
  13000. + }
  13001. +
  13002. + private void removeSkill()
  13003. + {
  13004. + for (L2PcInstance player : getPlayerList())
  13005. + player.removeSkill(SkillTable.getInstance().getInfo(getInt("captureSkillId"), 1), false);
  13006. + }
  13007. +
  13008. + private void giveSkill()
  13009. + {
  13010. + for (L2PcInstance player : getPlayerList())
  13011. + player.addSkill(SkillTable.getInstance().getInfo(getInt("captureSkillId"), 1), false);
  13012. + }
  13013. +}
  13014. \ No newline at end of file
  13015. Index: head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java
  13016. ===================================================================
  13017. --- head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java (nonexistent)
  13018. +++ head-src/com/l2jfrozen/gameserver/model/actor/instance/L2EventManagerInstance.java (working copy)
  13019. @@ -0,0 +1,50 @@
  13020. +package com.l2jfrozen.gameserver.model.actor.instance;
  13021. +
  13022. +import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  13023. +import com.l2jfrozen.gameserver.event.EventManager;
  13024. +import javolution.text.TextBuilder;
  13025. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  13026. +
  13027. +public class L2EventManagerInstance extends L2FolkInstance
  13028. +{
  13029. +private int objectId;
  13030. +
  13031. + public L2EventManagerInstance(int objectId, L2NpcTemplate template)
  13032. + {
  13033. + super(objectId, template);
  13034. + this.objectId = objectId;
  13035. + }
  13036. +
  13037. + @Override
  13038. + public void onBypassFeedback(L2PcInstance player, String command)
  13039. + {
  13040. + if (command.startsWith("reg"))
  13041. + {
  13042. + EventManager.getInstance().registerPlayer(player);
  13043. + }
  13044. + if (command.startsWith("unreg"))
  13045. + {
  13046. + EventManager.getInstance().unregisterPlayer(player);
  13047. + }
  13048. + if (command.startsWith("list"))
  13049. + {
  13050. + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  13051. + TextBuilder sb = new TextBuilder();
  13052. + sb.append("<html><body><center>Select an event to vote for it:<br>");
  13053. +
  13054. + int i = 0;
  13055. + for(String name: EventManager.getInstance().getEventNames())
  13056. + {
  13057. + i++;
  13058. + sb.append (" <a action=\"bypass -h npc_"+objectId+"_"+i+"\">- "+name+" -</a> <br>");
  13059. + }
  13060. + sb.append("</center></body></html>");
  13061. + html.setHtml(sb.toString());
  13062. + player.sendPacket(html);
  13063. + }
  13064. + else
  13065. + {
  13066. + EventManager.getInstance().addVote(player,Integer.parseInt(command));
  13067. + }
  13068. + }
  13069. +}
  13070. \ No newline at end of file
  13071. Index: head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java
  13072. ===================================================================
  13073. --- head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java (revision 1132)
  13074. +++ head-src/com/l2jfrozen/gameserver/handler/SkillHandler.java (working copy)
  13075. @@ -29,6 +29,8 @@
  13076. import com.l2jfrozen.gameserver.handler.skillhandlers.BalanceLife;
  13077. import com.l2jfrozen.gameserver.handler.skillhandlers.BeastFeed;
  13078. import com.l2jfrozen.gameserver.handler.skillhandlers.Blow;
  13079. +import com.l2jfrozen.gameserver.handler.skillhandlers.Bomb;
  13080. +import com.l2jfrozen.gameserver.handler.skillhandlers.Capture;
  13081. import com.l2jfrozen.gameserver.handler.skillhandlers.Charge;
  13082. import com.l2jfrozen.gameserver.handler.skillhandlers.ClanGate;
  13083. import com.l2jfrozen.gameserver.handler.skillhandlers.CombatPointHeal;
  13084. @@ -122,6 +124,8 @@
  13085. registerSkillHandler(new GetPlayer());
  13086. registerSkillHandler(new ZakenPlayer());
  13087. registerSkillHandler(new ZakenSelf());
  13088. + registerSkillHandler(new Bomb());
  13089. + registerSkillHandler(new Capture());
  13090. LOGGER.info("SkillHandler: Loaded " + _datatable.size() + " handlers.");
  13091.  
  13092. }
  13093. Index: head-src/com/l2jfrozen/gameserver/event/Russian.java
  13094. ===================================================================
  13095. --- head-src/com/l2jfrozen/gameserver/event/Russian.java (nonexistent)
  13096. +++ head-src/com/l2jfrozen/gameserver/event/Russian.java (working copy)
  13097. @@ -0,0 +1,289 @@
  13098. +package com.l2jfrozen.gameserver.event;
  13099. +
  13100. +import java.util.Map;
  13101. +
  13102. +import javolution.text.TextBuilder;
  13103. +import javolution.util.FastList;
  13104. +import javolution.util.FastMap;
  13105. +
  13106. +import com.l2jfrozen.gameserver.model.L2Object;
  13107. +import com.l2jfrozen.gameserver.model.spawn.L2Spawn;
  13108. +import com.l2jfrozen.gameserver.model.actor.instance.L2NpcInstance;
  13109. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  13110. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  13111. +import com.l2jfrozen.util.random.Rnd;
  13112. +
  13113. +/**
  13114. + * @author Rizel
  13115. + *
  13116. + */
  13117. +public class Russian extends Event
  13118. +{
  13119. +
  13120. + private class Core implements Runnable
  13121. + {
  13122. + public void run()
  13123. + {
  13124. + try
  13125. + {
  13126. + switch (eventState)
  13127. + {
  13128. + case START:
  13129. + divideIntoTeams(1);
  13130. + preparePlayers();
  13131. + teleportToTeamPos();
  13132. + forceSitAll();
  13133. + spawnRussians();
  13134. + setStatus(EventState.CHOOSE);
  13135. + debug("The event started with " + players.size() + " players");
  13136. + schedule(30000);
  13137. + break;
  13138. +
  13139. + case CHOOSE:
  13140. + if (round == 0)
  13141. + forceStandAll();
  13142. +
  13143. + round++;
  13144. + setStatus(EventState.CHECK);
  13145. + debug("Choose phase.");
  13146. + schedule(getInt("roundTime") * 1000);
  13147. + break;
  13148. +
  13149. + case CHECK:
  13150. + debug("Check phase");
  13151. + removeAfkers();
  13152. + killRandomRussian();
  13153. +
  13154. + if (countOfPositiveStatus() != 0)
  13155. + {
  13156. + if (russians.size() != 1)
  13157. + {
  13158. + for (L2PcInstance player : getPlayersWithStatus(1))
  13159. + {
  13160. + setStatus(player, 0);
  13161. + increasePlayersScore(player);
  13162. + player.getAppearance().setNameColor(255, 255, 255);
  13163. + player.broadcastUserInfo();
  13164. + }
  13165. +
  13166. + for (FastList<L2PcInstance> chose : choses.values())
  13167. + chose.reset();
  13168. +
  13169. + setStatus(EventState.CHOOSE);
  13170. + schedule(getInt("roundTime") * 1000);
  13171. + }
  13172. + else
  13173. + {
  13174. + for (L2PcInstance player : getPlayersWithStatus(1))
  13175. + giveReward(player, getInt("rewardId"), getInt("rewardAmmount"));
  13176. +
  13177. + unspawnRussians();
  13178. + debug("Event ended. " + countOfPositiveStatus() + " players survived");
  13179. + EventManager.getInstance().end("Congratulation! " + countOfPositiveStatus() + " players survived the event!");
  13180. + }
  13181. +
  13182. + }
  13183. + else
  13184. + {
  13185. + unspawnRussians();
  13186. + debug("Event ended. Noone survived");
  13187. + EventManager.getInstance().end("Unfortunatly no-one survived the event!");
  13188. + }
  13189. + break;
  13190. + }
  13191. + }
  13192. + catch (Throwable e)
  13193. + {
  13194. + e.printStackTrace();
  13195. + EventManager.getInstance().end("Error! Event ended.");
  13196. + }
  13197. +
  13198. + }
  13199. + }
  13200. +
  13201. + private enum EventState
  13202. + {
  13203. + START, CHOOSE, CHECK, INACTIVE
  13204. + }
  13205. +
  13206. + private EventState eventState;
  13207. +
  13208. + private Core task;
  13209. +
  13210. + private int round;
  13211. +
  13212. + private FastMap<Integer, L2Spawn> russians;
  13213. +
  13214. + private FastMap<Integer, FastList<L2PcInstance>> choses;
  13215. +
  13216. + public Russian()
  13217. + {
  13218. + super();
  13219. + eventId = 11;
  13220. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  13221. + task = new Core();
  13222. + round = 0;
  13223. + russians = new FastMap<Integer, L2Spawn>();
  13224. + choses = new FastMap<Integer, FastList<L2PcInstance>>();
  13225. + }
  13226. +
  13227. + @Override
  13228. + public boolean canAttack(L2PcInstance player, L2Object target)
  13229. + {
  13230. + return false;
  13231. + }
  13232. +
  13233. + @Override
  13234. + protected void endEvent()
  13235. + {
  13236. + L2PcInstance winner = players.head().getNext().getKey();
  13237. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  13238. +
  13239. + unspawnRussians();
  13240. + debug("Event ended. 1 player survived");
  13241. + EventManager.getInstance().end("Congratulation! 1 player survived the event!");
  13242. +
  13243. + }
  13244. +
  13245. + @Override
  13246. + protected String getScorebar()
  13247. + {
  13248. + return "";
  13249. + }
  13250. +
  13251. + private void killRandomRussian()
  13252. + {
  13253. + FastList<Integer> ids = new FastList<Integer>();
  13254. + for (int id : russians.keySet())
  13255. + ids.add(id);
  13256. + int russnum = ids.get(Rnd.get(ids.size()));
  13257. + L2Spawn russian = russians.get(russnum);
  13258. + unspawnNPC(russian);
  13259. + announce(getPlayerList(), "The #" + russnum + " russian died.");
  13260. +
  13261. + for (L2PcInstance victim : choses.get(russnum))
  13262. + {
  13263. + setStatus(victim, -1);
  13264. + victim.stopAllEffects();
  13265. + victim.reduceCurrentHp(victim.getMaxHp() + victim.getMaxCp() + 1, victim);
  13266. + victim.sendMessage("Your russian died!");
  13267. + victim.getAppearance().setNameColor(255, 255, 255);
  13268. + }
  13269. + debug("Russian #" + russnum + " died");
  13270. + russians.remove(russnum);
  13271. + }
  13272. +
  13273. + @Override
  13274. + public void onLogout(L2PcInstance player)
  13275. + {
  13276. + super.onLogout(player);
  13277. +
  13278. + for (FastList<L2PcInstance> list : choses.values())
  13279. + if (list.contains(player))
  13280. + list.remove(player);
  13281. + }
  13282. +
  13283. + @Override
  13284. + public boolean onTalkNpc(L2NpcInstance npc, L2PcInstance player)
  13285. + {
  13286. + if (npc.getNpcId() != getInt("russianNpcId"))
  13287. + return false;
  13288. +
  13289. + if (getStatus(player) != 0)
  13290. + return true;
  13291. +
  13292. + for (Map.Entry<Integer, L2Spawn> russian : russians.entrySet())
  13293. + if (russian.getValue().getLastSpawn().getObjectId() == npc.getObjectId())
  13294. + {
  13295. + choses.get(russian.getKey()).add(player);
  13296. + player.getAppearance().setNameColor(0, 255, 0);
  13297. + player.broadcastUserInfo();
  13298. + setStatus(player, 1);
  13299. + }
  13300. +
  13301. + return true;
  13302. + }
  13303. +
  13304. + private void removeAfkers()
  13305. + {
  13306. + int c = 0;
  13307. + for (L2PcInstance player : getPlayerList())
  13308. + if (getStatus(player) == 0)
  13309. + {
  13310. +
  13311. + player.sendMessage("Timeout!");
  13312. + player.stopAllEffects();
  13313. + player.reduceCurrentHp(player.getMaxHp() + player.getMaxCp() + 1, player);
  13314. + setStatus(player, -1);
  13315. + c++;
  13316. + }
  13317. + debug(c + " afkers removed");
  13318. + }
  13319. +
  13320. + @Override
  13321. + public void reset()
  13322. + {
  13323. + super.reset();
  13324. + round = 0;
  13325. + russians.clear();
  13326. + choses.clear();
  13327. + }
  13328. +
  13329. + @Override
  13330. + protected void schedule(int time)
  13331. + {
  13332. + tpm.scheduleGeneral(task, time);
  13333. + }
  13334. +
  13335. + private void setStatus(EventState s)
  13336. + {
  13337. + eventState = s;
  13338. + }
  13339. +
  13340. + @Override
  13341. + protected void showHtml(L2PcInstance player, int obj)
  13342. + {
  13343. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  13344. + TextBuilder sb = new TextBuilder();
  13345. +
  13346. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  13347. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  13348. + sb.append("<table width=270><tr><td><center>Russians left: " + russians.size() + "</td></tr></table>");
  13349. + sb.append("<br><table width=270>");
  13350. +
  13351. + for (L2PcInstance p : getPlayersOfTeam(1))
  13352. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Dead" : "Alive") + "</td></tr>");
  13353. +
  13354. + sb.append("</table></body></html>");
  13355. + html.setHtml(sb.toString());
  13356. + player.sendPacket(html);
  13357. +
  13358. + }
  13359. +
  13360. + private void spawnRussians()
  13361. + {
  13362. + for (int i = 1; i <= getInt("numberOfRussians"); i++)
  13363. + {
  13364. + int[] pos = getPosition("Russian", i);
  13365. + russians.put(i, spawnNPC(pos[0], pos[1], pos[2], getInt("russianNpcId")));
  13366. + choses.put(i, new FastList<L2PcInstance>());
  13367. + russians.get(i).getLastSpawn().setTitle("--" + i + "--");
  13368. + }
  13369. + debug("Russians spawned");
  13370. + }
  13371. +
  13372. + @Override
  13373. + protected void start()
  13374. + {
  13375. + setStatus(EventState.START);
  13376. + schedule(1);
  13377. + }
  13378. +
  13379. + private void unspawnRussians()
  13380. + {
  13381. + for (L2Spawn russian : russians.values())
  13382. + unspawnNPC(russian);
  13383. +
  13384. + debug("Russians unspawned");
  13385. + }
  13386. +}
  13387. \ No newline at end of file
  13388. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java
  13389. ===================================================================
  13390. --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (revision 1132)
  13391. +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (working copy)
  13392. @@ -26,6 +26,7 @@
  13393. import com.l2jfrozen.gameserver.GameServer;
  13394. import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
  13395. import com.l2jfrozen.gameserver.datatables.SkillTable;
  13396. +import com.l2jfrozen.gameserver.event.EventManager;
  13397. import com.l2jfrozen.gameserver.model.Inventory;
  13398. import com.l2jfrozen.gameserver.model.L2Party;
  13399. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  13400. @@ -113,7 +114,12 @@
  13401. sendPacket(RestartResponse.valueOf(false));
  13402. return;
  13403. }
  13404. -
  13405. + if (EventManager.getInstance().isRegistered(player) && !EventManager.getInstance().getBoolean("restartAllowed"))
  13406. + {
  13407. + player.sendMessage("You cannot restart while you are a participant in an event.");
  13408. + sendPacket(new ActionFailed());
  13409. + return;
  13410. + }
  13411. // Prevent player from restarting if they are a festival participant
  13412. // and it is in progress, otherwise notify party members that the player
  13413. // is not longer a participant.
  13414. Index: head-src/com/l2jfrozen/gameserver/event/LMS.java
  13415. ===================================================================
  13416. --- head-src/com/l2jfrozen/gameserver/event/LMS.java (nonexistent)
  13417. +++ head-src/com/l2jfrozen/gameserver/event/LMS.java (working copy)
  13418. @@ -0,0 +1,141 @@
  13419. +package com.l2jfrozen.gameserver.event;
  13420. +
  13421. +import javolution.text.TextBuilder;
  13422. +
  13423. +import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  13424. +import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
  13425. +import com.l2jfrozen.util.random.Rnd;
  13426. +
  13427. +/**
  13428. + * @author Rizel
  13429. + *
  13430. + */
  13431. +public class LMS extends Event
  13432. +{
  13433. + private class Core implements Runnable
  13434. + {
  13435. + public void run()
  13436. + {
  13437. + try
  13438. + {
  13439. + switch (eventState)
  13440. + {
  13441. + case START:
  13442. + divideIntoTeams(1);
  13443. + preparePlayers();
  13444. + teleportToTeamPos();
  13445. + forceSitAll();
  13446. + setStatus(EventState.FIGHT);
  13447. + debug("The event started with " + players.size() + " players.");
  13448. + schedule(20000);
  13449. + break;
  13450. +
  13451. + case FIGHT:
  13452. + forceStandAll();
  13453. + setStatus(EventState.END);
  13454. + debug("The event started.");
  13455. + clock.startClock(getInt("matchTime"));
  13456. + break;
  13457. +
  13458. + case END:
  13459. + clock.setTime(0);
  13460. + debug("The event ended.");
  13461. + L2PcInstance winner = getPlayersWithStatus(0).get(Rnd.get(getPlayersWithStatus(0).size()));
  13462. + giveReward(winner, getInt("rewardId"), getInt("rewardAmmount"));
  13463. + setStatus(EventState.INACTIVE);
  13464. + EventManager.getInstance().end(winner.getName() + " is the Last Man Standing!");
  13465. + break;
  13466. + }
  13467. + }
  13468. + catch (Throwable e)
  13469. + {
  13470. + e.printStackTrace();
  13471. + EventManager.getInstance().end("Error! Event ended.");
  13472. + }
  13473. + }
  13474. + }
  13475. +
  13476. + private enum EventState
  13477. + {
  13478. + START, FIGHT, END, INACTIVE
  13479. + }
  13480. +
  13481. + private EventState eventState;
  13482. +
  13483. + private Core task;
  13484. +
  13485. + public LMS()
  13486. + {
  13487. + super();
  13488. + eventId = 4;
  13489. + createNewTeam(1, "All", getColor("All"), getPosition("All", 1));
  13490. + task = new Core();
  13491. + }
  13492. +
  13493. + @Override
  13494. + protected void endEvent()
  13495. + {
  13496. + setStatus(EventState.END);
  13497. + clock.setTime(0);
  13498. + }
  13499. +
  13500. + @Override
  13501. + protected String getScorebar()
  13502. + {
  13503. + return "Players: " + getPlayersWithStatus(0).size() + " Time: " + clock.getTime();
  13504. + }
  13505. +
  13506. + @Override
  13507. + public void onKill(L2PcInstance victim, L2PcInstance killer)
  13508. + {
  13509. + super.onKill(victim, killer);
  13510. + increasePlayersScore(killer);
  13511. + setStatus(victim, 1);
  13512. + if (getPlayersWithStatus(0).size() == 1)
  13513. + {
  13514. + setStatus(EventState.END);
  13515. + clock.setTime(0);
  13516. + }
  13517. + }
  13518. +
  13519. + @Override
  13520. + protected void schedule(int time)
  13521. + {
  13522. + tpm.scheduleGeneral(task, time);
  13523. + }
  13524. +
  13525. + private void setStatus(EventState s)
  13526. + {
  13527. + eventState = s;
  13528. + }
  13529. +
  13530. + /* (non-Javadoc)
  13531. + * @see net.sf.l2j.gameserver.event.Event#showHtml(net.sf.l2j.gameserver.model.actor.instance.L2PcInstance, int)
  13532. + */
  13533. + @Override
  13534. + protected void showHtml(L2PcInstance player, int obj)
  13535. + {
  13536. + NpcHtmlMessage html = new NpcHtmlMessage(obj);
  13537. + TextBuilder sb = new TextBuilder();
  13538. +
  13539. + sb.append("<html><body><table width=270><tr><td width=200>Event Engine </td><td><a action=\"bypass -h eventstats 1\">Statistics</a></td></tr></table><br>");
  13540. + sb.append("<center><table width=270 bgcolor=5A5A5A><tr><td width=70>Running</td><td width=130><center>" + getString("eventName") + "</td><td width=70>Time: " + clock.getTime() + "</td></tr></table>");
  13541. + sb.append("<table width=270><tr><td><center>Players left: " + getPlayersWithStatus(0).size() + "</td></tr></table>");
  13542. + sb.append("<br><table width=270>");
  13543. +
  13544. + for (L2PcInstance p : getPlayersOfTeam(1))
  13545. + sb.append("<tr><td>" + p.getName() + "</td><td>lvl " + p.getLevel() + "</td><td>" + p.getTemplate().className + "</td><td>" + (getStatus(p) == 1 ? "Dead" : "Alive") + "</td></tr>");
  13546. +
  13547. + sb.append("</table></body></html>");
  13548. + html.setHtml(sb.toString());
  13549. + player.sendPacket(html);
  13550. +
  13551. + }
  13552. +
  13553. + @Override
  13554. + protected void start()
  13555. + {
  13556. + setStatus(EventState.START);
  13557. + schedule(1);
  13558. + }
  13559. +}
  13560. \ No newline at end of file
  13561. #P L2jFrozen_DataPack
  13562. Index: data/html/default/9110.htm
  13563. ===================================================================
  13564. --- data/html/default/9110.htm (nonexistent)
  13565. +++ data/html/default/9110.htm (working copy)
  13566. @@ -0,0 +1,3 @@
  13567. +<html><body>
  13568. +Use the Capture skill on the base in order to capture it and score for your team!
  13569. +</body></html>
  13570. \ No newline at end of file
  13571. Index: data/html/eventinfo/12.htm
  13572. ===================================================================
  13573. --- data/html/eventinfo/12.htm (nonexistent)
  13574. +++ data/html/eventinfo/12.htm (working copy)
  13575. @@ -0,0 +1,23 @@
  13576. +<html><body>
  13577. +<table><tr><td><center><font color="FFFF00">Bomb Fight<br></font></center></td></tr>
  13578. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13579. +<tr><td>All players get a new skill Bomb</td></tr>
  13580. +<tr><td>This is the only skill you can deal dmg with</td></tr>
  13581. +<tr><td>3 seconds after you put a bomb, all surrounding enemies dies and you get scored</td></tr>
  13582. +<tr><td>Team with most kills wins</td></tr>
  13583. +<tr><td>If both teams got same score then a random team wins</td></tr>
  13584. +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
  13585. +<tr><td>Event reward: 1 apigas</td></tr>
  13586. +<tr><td>Event duration: 5 minutes</td></tr>
  13587. +<tr><td>Levels allowed: 40-80</td></tr>
  13588. +<tr><td>Minimum players: 8</td></tr>
  13589. +<tr><td>Self buff event</td></tr>
  13590. +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
  13591. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13592. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13593. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13594. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13595. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13596. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13597. +</table>
  13598. +</body></html>
  13599. \ No newline at end of file
  13600. Index: data/html/eventinfo/6.htm
  13601. ===================================================================
  13602. --- data/html/eventinfo/6.htm (nonexistent)
  13603. +++ data/html/eventinfo/6.htm (working copy)
  13604. @@ -0,0 +1,25 @@
  13605. +<html><body>
  13606. +<table><tr><td><center><font color="FFFF00">Simon says<br></font></center></td></tr>
  13607. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13608. +<tr><td>The goal is to say exact text as the NPC says as fast as possible</td></tr>
  13609. +<tr><td>If player didnt say the text within 10 seconds he's out</td></tr>
  13610. +<tr><td>If player said the word wrong he is out</td></tr>
  13611. +<tr><td>If player said the word last he is out</td></tr>
  13612. +<tr><td>Red nick means you're out</td></tr>
  13613. +<tr><td>Green nick means you said the word correct</td></tr>
  13614. +<tr><td>All players are in sitting position during the event</td></tr>
  13615. +<tr><td>The winner is the last person to stay with green nick</td></tr>
  13616. +<tr><td>Event reward: 25 medals</td></tr>
  13617. +<tr><td>Levels allowed: 40-80</td></tr>
  13618. +<tr><td>Event duration: Until there's 1 winner</td></tr>
  13619. +<tr><td>Minimum players: 8</td></tr>
  13620. +<tr><td>Self buff event</td></tr>
  13621. +<tr><td>Ressurection time: None<br></td></tr>
  13622. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13623. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13624. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13625. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13626. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13627. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13628. +</table>
  13629. +</body></html>
  13630. \ No newline at end of file
  13631. Index: data/html/default/9101.htm
  13632. ===================================================================
  13633. --- data/html/default/9101.htm (nonexistent)
  13634. +++ data/html/default/9101.htm (working copy)
  13635. @@ -0,0 +1,3 @@
  13636. +<html><body>
  13637. +Say excactly what i say as soon as possible.
  13638. +</body></html>
  13639. \ No newline at end of file
  13640. Index: data/html/eventinfo/5.htm
  13641. ===================================================================
  13642. --- data/html/eventinfo/5.htm (nonexistent)
  13643. +++ data/html/eventinfo/5.htm (working copy)
  13644. @@ -0,0 +1,23 @@
  13645. +<html><body>
  13646. +<table><tr><td><center><font color="FFFF00">Lucky Chests<br></font></center></td></tr>
  13647. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13648. +<tr><td>The goal is to have most chests succesfully opened</td></tr>
  13649. +<tr><td>There is a chance that a chest will explode and get you killed</td></tr>
  13650. +<tr><td>The event ends when alll chests are opened or time runs out</td></tr>
  13651. +<tr><td>The player with most chests opened wins</td></tr>
  13652. +<tr><td>If there's more than 1 player with max score, then a random player wins</td></tr>
  13653. +<tr><td>Reward for every Chest opened: 1 Medal</td></tr>
  13654. +<tr><td>Event reward: 20 medals</td></tr>
  13655. +<tr><td>Levels allowed: 40-80</td></tr>
  13656. +<tr><td>Event duration: 3 minutes</td></tr>
  13657. +<tr><td>Minimum players: 8</td></tr>
  13658. +<tr><td>Self buff event</td></tr>
  13659. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13660. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13661. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13662. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13663. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13664. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13665. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13666. +</table>
  13667. +</body></html>
  13668. \ No newline at end of file
  13669. Index: sql/npc.sql
  13670. ===================================================================
  13671. --- sql/npc.sql (revision 1132)
  13672. +++ sql/npc.sql (working copy)
  13673. @@ -6637,8 +6637,17 @@
  13674. INSERT INTO `npc` VALUES ('35654', '35654', 'Court Magician', '0', 'Goddard', '0', 'Monster3.Elite_Mage', '6.50', '21.96', '70', 'male', 'L2CastleMagician', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '8687', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
  13675. INSERT INTO `npc` VALUES ('35655', '35655', 'Court Magician', '0', 'Rune', '0', 'Monster3.Elite_Mage', '6.50', '21.96', '70', 'male', 'L2CastleMagician', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '8687', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
  13676. INSERT INTO `npc` VALUES ('35656', '35656', 'Court Magician', '0', 'Schuttgart', '0', 'Monster3.Elite_Mage', '6.50', '21.96', '70', 'male', 'L2CastleMagician', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '8687', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
  13677. +INSERT INTO `npc` VALUES ('9101', '30026', 'Simon', 1, 'Event', 1, 'NPC.a_fighterguild_master_Mhuman', 8.00, 23.50, 70, 'male', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT'),
  13678. +INSERT INTO `npc` VALUES ('9102', '18284', 'Treasure Chest', '0', '', '0', 'LineageMonster.mimic', '8.50', '8.50', '78', 'male', 'L2Npc', 40, 4428, 1784, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 7300, 799, 1715, 555, 1069, 451, 278, 0, 333, 0, 0, 0, 88, 181, NULL, NULL, 0, 0, 'LAST_HIT'),
  13679. +INSERT INTO `npc` VALUES ('9103', '31772', 'Zone', 1, '', 0, 'LineageNPC.heroes_obelisk_dwarf', 23.00, 80.00, 70, 'etc', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 50, 120, NULL, NULL, 1, 0, 'LAST_HIT'),
  13680. +INSERT INTO `npc` VALUES ('9104', '35062', 'Blue Flag', 1, '', 0, 'Deco.flag_a', 21.00, 82.00, 1, 'etc', 'L2Npc', 40, 158000, 989, 3.16, 0.91, 40, 43, 30, 21, 20, 10, 0, 0, 652, 753, 358, 295, 423, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT'),
  13681. +INSERT INTO `npc` VALUES ('9105', '35062', 'Red Flag', 1, '', 0, 'Deco.flag_a', 21.00, 82.00, 1, 'etc', 'L2Npc', 40, 158000, 989, 3.16, 0.91, 40, 43, 30, 21, 20, 10, 0, 0, 652, 753, 358, 295, 423, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT'),
  13682. +INSERT INTO `npc` VALUES ('9106', '32027', 'Blue Flag Holder', 0, '', 0, 'NpcEV.grail_brazier_b', 9.50, 29.00, 78, 'male', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 88, 132, NULL, 0, 0, 0, 'LAST_HIT'),
  13683. +INSERT INTO `npc` VALUES ('9107', '32027', 'Red Flag Holder', 0, '', 0, 'NpcEV.grail_brazier_b', 9.50, 29.00, 78, 'male', 'L2Npc', 40, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 1314, 470, 780, 382, 278, 0, 333, 0, 0, 0, 88, 132, NULL, 0, 0, 0, 'LAST_HIT'),
  13684. +INSERT INTO `npc` VALUES ('9108', '18284', 'Russian', 0, '', 0, 'LineageMonster.mimic', 8.50, 8.50, 78, 'male', 'L2Npc', 40, 4428, 1784, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 7300, 799, 1715, 555, 1069, 451, 278, 0, 333, 0, 0, 0, 88, 181, NULL, NULL, 0, 0, 'LAST_HIT'),
  13685. +INSERT INTO `npc` VALUES ('9109', '18284', 'Bomb', 1, '', 0, 'LineageMonster.mimic', 8.50, 8.50, 78, 'male', 'L2Npc', 40, 4428, 1784, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 7300, 799, 1715, 555, 1069, 451, 278, 0, 333, 0, 0, 0, 88, 181, NULL, NULL, 0, 0, 'LAST_HIT'),
  13686. +INSERT INTO `npc` VALUES ('9110', '35062', 'Base', 1, '', 0, 'Deco.flag_a', 21.00, 82.00, 1, 'etc', 'L2Npc', 40, 158000, 989, 3.16, 0.91, 40, 43, 30, 21, 20, 10, 0, 0, 652, 753, 358, 295, 423, 0, 333, 0, 0, 0, 55, 132, NULL, 0, 1, 0, 'LAST_HIT');
  13687. INSERT INTO `npc` VALUES ('55559', '32001', 'Preacher of Doom', '0', '', '0', 'Monster.dark_horror', '9.50', '29.00', '70', 'male', 'L2Npc', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '0', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
  13688. -
  13689. INSERT INTO `npc` VALUES ('25164', '25164', 'Pet of Skylancer', '0', 'Raid Fighter', '0', 'Monster.skeleton_archer', '11.00', '27.00', '69', 'male', 'L2Minion', '500', '21176', '1493', '223.73', '8.75', '40', '43', '30', '41', '35', '10', '22852', '2260', '19755', '1840', '15424', '747', '249', '0', '227', '279', '0', '0', '80', '120', null, '0', '1', '0', 'LAST_HIT');
  13690. INSERT INTO `npc` VALUES ('25165', '25165', 'Slave Warrior of Skylancer', '0', 'Raid Fighter', '0', 'Monster.bugbear', '17.00', '35.00', '69', 'male', 'L2Minion', '40', '15898', '1493', '223.73', '8.75', '40', '43', '30', '41', '35', '10', '22852', '2260', '6668', '1840', '8676', '747', '278', '0', '253', '0', '0', '0', '80', '120', null, '0', '0', '0', 'LAST_HIT');
  13691. INSERT INTO `npc` VALUES ('27198', '27198', 'Gremlin', '0', '', '0', 'Monster.gremlin', '10.00', '15.00', '1', 'male', 'L2Monster', '40', '62', '44', '3.16', '0.91', '40', '43', '30', '21', '35', '10', '29', '2', '9', '39', '3', '32', '278', '0', '253', '0', '0', '0', '20', '50', null, '0', '0', '0', 'LAST_HIT');
  13692. Index: data/html/eventinfo/2.htm
  13693. ===================================================================
  13694. --- data/html/eventinfo/2.htm (nonexistent)
  13695. +++ data/html/eventinfo/2.htm (working copy)
  13696. @@ -0,0 +1,23 @@
  13697. +<html><body>
  13698. +<table><tr><td><center><font color="FFFF00">Domination<br></font></center></td></tr>
  13699. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13700. +<tr><td>Team vs team event</td></tr>
  13701. +<tr><td>The goal is to have more players near the Zone than the enemy team</td></tr>
  13702. +<tr><td>For every second a team got more players than enemy team near zone, they get a point.</td></tr>
  13703. +<tr><td>the team with most Domination points wins</td></tr>
  13704. +<tr><td>If both team got same score, then a random team wins</td></tr>
  13705. +<tr><td>Reward for every kill: 1 medal</td></tr>
  13706. +<tr><td>Event reward: 10 medals</td></tr>
  13707. +<tr><td>Levels allowed: 70-80</td></tr>
  13708. +<tr><td>Event duration: 4 minutes</td></tr>
  13709. +<tr><td>Minimum players: 8</td></tr>
  13710. +<tr><td>Full buff event</td></tr>
  13711. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13712. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13713. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13714. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13715. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13716. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13717. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13718. +</table>
  13719. +</body></html>
  13720. \ No newline at end of file
  13721. Index: data/html/eventinfo/10.htm
  13722. ===================================================================
  13723. --- data/html/eventinfo/10.htm (nonexistent)
  13724. +++ data/html/eventinfo/10.htm (working copy)
  13725. @@ -0,0 +1,22 @@
  13726. +<html><body>
  13727. +<table><tr><td><center><font color="FFFF00">Capture the flag<br></font></center></td></tr>
  13728. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13729. +<tr><td>Each team has a flag they got to protect</td></tr>
  13730. +<tr><td>If a team takes enemy flag and bring it back they get scored</td></tr>
  13731. +<tr><td>Team with most flags taken wins</td></tr>
  13732. +<tr><td>If both teams has same score then a random team wins</td></tr>
  13733. +<tr><td>Reward for each flag taken: 4 medals</td></tr>
  13734. +<tr><td>Event reward: 10 medals</td></tr>
  13735. +<tr><td>Event duration: 5 minutes</td></tr>
  13736. +<tr><td>Levels allowed: 70-80</td></tr>
  13737. +<tr><td>Minimum players: 8</td></tr>
  13738. +<tr><td>Self buff event</td></tr>
  13739. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13740. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13741. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13742. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13743. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13744. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13745. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13746. +</table>
  13747. +</body></html>
  13748. \ No newline at end of file
  13749. Index: data/html/eventinfo/3.htm
  13750. ===================================================================
  13751. --- data/html/eventinfo/3.htm (nonexistent)
  13752. +++ data/html/eventinfo/3.htm (working copy)
  13753. @@ -0,0 +1,23 @@
  13754. +<html><body>
  13755. +<table><tr><td><center><font color="FFFF00">Double Domination<br></font></center></td></tr>
  13756. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13757. +<tr><td>Team vs team event</td></tr>
  13758. +<tr><td>The goal is to have more players near both Zones than the enemy team</td></tr>
  13759. +<tr><td>If a team got more players in both zones for 10 seconds, they get a point</td></tr>
  13760. +<tr><td>After a team gets scored, both teams gets teleported to intial locations</td></tr>
  13761. +<tr><td>the team with most domination points wins</td></tr>
  13762. +<tr><td>If both team got same score, then a random team wins</td></tr>
  13763. +<tr><td>Event reward: 2 apigas</td></tr>
  13764. +<tr><td>Levels allowed: 70-80</td></tr>
  13765. +<tr><td>Event duration: 4 minutes</td></tr>
  13766. +<tr><td>Minimum players: 8</td></tr>
  13767. +<tr><td>Full buff event</td></tr>
  13768. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13769. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13770. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13771. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13772. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13773. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13774. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13775. +</table>
  13776. +</body></html>
  13777. \ No newline at end of file
  13778. Index: data/html/eventinfo/1.htm
  13779. ===================================================================
  13780. --- data/html/eventinfo/1.htm (nonexistent)
  13781. +++ data/html/eventinfo/1.htm (working copy)
  13782. @@ -0,0 +1,21 @@
  13783. +<html><body>
  13784. +<table><tr><td><center><font color="FFFF00">Death Match<br></font></center></td></tr>
  13785. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13786. +<tr><td>All vs all event</td></tr>
  13787. +<tr><td>the player with most kills wins</td></tr>
  13788. +<tr><td>If there is more than 1 player with max score, then a random player wins</td></tr>
  13789. +<tr><td>Players will get 1 medal for every kill</td></tr>
  13790. +<tr><td>Event reward: 20 medals</td></tr>
  13791. +<tr><td>Levels allowed: 70-80</td></tr>
  13792. +<tr><td>Event duration: 4 minutes</td></tr>
  13793. +<tr><td>Minimum players: 8</td></tr>
  13794. +<tr><td>Full buff event</td></tr>
  13795. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13796. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13797. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13798. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13799. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13800. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13801. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13802. +</table>
  13803. +</body></html>
  13804. \ No newline at end of file
  13805. Index: data/html/eventinfo/10.htm
  13806. ===================================================================
  13807. --- data/html/eventinfo/10.htm (nonexistent)
  13808. +++ data/html/eventinfo/10.htm (working copy)
  13809. @@ -0,0 +1,22 @@
  13810. +<html><body>
  13811. +<table><tr><td><center><font color="FFFF00">Capture the flag<br></font></center></td></tr>
  13812. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13813. +<tr><td>Each team has a flag they got to protect</td></tr>
  13814. +<tr><td>If a team takes enemy flag and bring it back they get scored</td></tr>
  13815. +<tr><td>Team with most flags taken wins</td></tr>
  13816. +<tr><td>If both teams has same score then a random team wins</td></tr>
  13817. +<tr><td>Reward for each flag taken: 4 medals</td></tr>
  13818. +<tr><td>Event reward: 10 medals</td></tr>
  13819. +<tr><td>Event duration: 5 minutes</td></tr>
  13820. +<tr><td>Levels allowed: 70-80</td></tr>
  13821. +<tr><td>Minimum players: 8</td></tr>
  13822. +<tr><td>Self buff event</td></tr>
  13823. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13824. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13825. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13826. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13827. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13828. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13829. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13830. +</table>
  13831. +</body></html>
  13832. \ No newline at end of file
  13833. Index: data/html/eventinfo/11.htm
  13834. ===================================================================
  13835. --- data/html/eventinfo/11.htm (nonexistent)
  13836. +++ data/html/eventinfo/11.htm (working copy)
  13837. @@ -0,0 +1,24 @@
  13838. +<html><body>
  13839. +<table><tr><td><center><font color="FFFF00">Russian Roluette<br></font></center></td></tr>
  13840. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13841. +<tr><td>6 Chests spawns</td></tr>
  13842. +<tr><td>Every person need to choose a chest on every round</td></tr>
  13843. +<tr><td>Each round lasts for 10 seconds</td></tr>
  13844. +<tr><td>Green nick means u have choosen a chest for the round</td></tr>
  13845. +<tr><td>If you haven't choosen any chest you die</td></tr>
  13846. +<tr><td>If your chest dies you die</td></tr>
  13847. +<tr><td>Winners are all players who succesfully survived to the last chest</td></tr>
  13848. +<tr><td>Event reward: 15 medals</td></tr>
  13849. +<tr><td>Event duration: 4 minutes</td></tr>
  13850. +<tr><td>Levels allowed: 40-80</td></tr>
  13851. +<tr><td>Minimum players: 8</td></tr>
  13852. +<tr><td>Full buff event</td></tr>
  13853. +<tr><td>Ressurection time: None<br></td></tr>
  13854. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13855. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13856. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13857. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13858. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13859. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13860. +</table>
  13861. +</body></html>
  13862. \ No newline at end of file
  13863. Index: data/html/eventinfo/12.htm
  13864. ===================================================================
  13865. --- data/html/eventinfo/12.htm (nonexistent)
  13866. +++ data/html/eventinfo/12.htm (working copy)
  13867. @@ -0,0 +1,23 @@
  13868. +<html><body>
  13869. +<table><tr><td><center><font color="FFFF00">Bomb Fight<br></font></center></td></tr>
  13870. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13871. +<tr><td>All players get a new skill Bomb</td></tr>
  13872. +<tr><td>This is the only skill you can deal dmg with</td></tr>
  13873. +<tr><td>3 seconds after you put a bomb, all surrounding enemies dies and you get scored</td></tr>
  13874. +<tr><td>Team with most kills wins</td></tr>
  13875. +<tr><td>If both teams got same score then a random team wins</td></tr>
  13876. +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
  13877. +<tr><td>Event reward: 1 apigas</td></tr>
  13878. +<tr><td>Event duration: 5 minutes</td></tr>
  13879. +<tr><td>Levels allowed: 40-80</td></tr>
  13880. +<tr><td>Minimum players: 8</td></tr>
  13881. +<tr><td>Self buff event</td></tr>
  13882. +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
  13883. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13884. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13885. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13886. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13887. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13888. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13889. +</table>
  13890. +</body></html>
  13891. \ No newline at end of file
  13892. Index: data/html/eventinfo/13.htm
  13893. ===================================================================
  13894. --- data/html/eventinfo/13.htm (nonexistent)
  13895. +++ data/html/eventinfo/13.htm (working copy)
  13896. @@ -0,0 +1,22 @@
  13897. +<html><body>
  13898. +<table><tr><td><center><font color="FFFF00">Mutant<br></font></center></td></tr>
  13899. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13900. +<tr><td>1 random player becomes a mutant</td></tr>
  13901. +<tr><td>Mutant gets: 3x p.def/m.def 2x p.atk/m.atk/c.spd/atk.spd and 30% resist to debuffs</td></tr>
  13902. +<tr><td>Only the mutant can score</td></tr>
  13903. +<tr><td>Everyone else can kill mutant only</td></tr>
  13904. +<tr><td>If 2 or more players get same score then a random player wins</td></tr>
  13905. +<tr><td>Event reward: 2 apigas</td></tr>
  13906. +<tr><td>Event duration: 4 minutes</td></tr>
  13907. +<tr><td>Levels allowed: 70-80</td></tr>
  13908. +<tr><td>Minimum players: 8</td></tr>
  13909. +<tr><td>Self buff event</td></tr>
  13910. +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
  13911. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13912. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13913. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13914. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13915. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13916. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13917. +</table>
  13918. +</body></html>
  13919. \ No newline at end of file
  13920. Index: data/html/eventinfo/14.htm
  13921. ===================================================================
  13922. --- data/html/eventinfo/14.htm (nonexistent)
  13923. +++ data/html/eventinfo/14.htm (working copy)
  13924. @@ -0,0 +1,23 @@
  13925. +<html><body>
  13926. +<table><tr><td><center><font color="FFFF00">Battlefield<br></font></center></td></tr>
  13927. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13928. +<tr><td>All players get skill "Capture"</td></tr>
  13929. +<tr><td>The goal is to capture as much bases as possible</td></tr>
  13930. +<tr><td>For each base a team got they will get 1 point every second</td></tr>
  13931. +<tr><td>Team with most score wins</td></tr>
  13932. +<tr><td>If both teams got same score then a random team wins</td></tr>
  13933. +<tr><td>Reward for every base capture: 2 medals</td></tr>
  13934. +<tr><td>Event reward: 10 medals</td></tr>
  13935. +<tr><td>Event duration: 5 minutes</td></tr>
  13936. +<tr><td>Levels allowed: 70-80</td></tr>
  13937. +<tr><td>Minimum players: 8</td></tr>
  13938. +<tr><td>Full buff event</td></tr>
  13939. +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
  13940. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13941. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13942. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13943. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13944. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13945. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13946. +</table>
  13947. +</body></html>
  13948. \ No newline at end of file
  13949. Index: data/html/eventinfo/2.htm
  13950. ===================================================================
  13951. --- data/html/eventinfo/2.htm (nonexistent)
  13952. +++ data/html/eventinfo/2.htm (working copy)
  13953. @@ -0,0 +1,23 @@
  13954. +<html><body>
  13955. +<table><tr><td><center><font color="FFFF00">Domination<br></font></center></td></tr>
  13956. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13957. +<tr><td>Team vs team event</td></tr>
  13958. +<tr><td>The goal is to have more players near the Zone than the enemy team</td></tr>
  13959. +<tr><td>For every second a team got more players than enemy team near zone, they get a point.</td></tr>
  13960. +<tr><td>the team with most Domination points wins</td></tr>
  13961. +<tr><td>If both team got same score, then a random team wins</td></tr>
  13962. +<tr><td>Reward for every kill: 1 medal</td></tr>
  13963. +<tr><td>Event reward: 10 medals</td></tr>
  13964. +<tr><td>Levels allowed: 70-80</td></tr>
  13965. +<tr><td>Event duration: 4 minutes</td></tr>
  13966. +<tr><td>Minimum players: 8</td></tr>
  13967. +<tr><td>Full buff event</td></tr>
  13968. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13969. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13970. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  13971. +<tr><td>Dualboxing is not allowed during event</td></tr>
  13972. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  13973. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  13974. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  13975. +</table>
  13976. +</body></html>
  13977. \ No newline at end of file
  13978. Index: data/html/eventinfo/3.htm
  13979. ===================================================================
  13980. --- data/html/eventinfo/3.htm (nonexistent)
  13981. +++ data/html/eventinfo/3.htm (working copy)
  13982. @@ -0,0 +1,23 @@
  13983. +<html><body>
  13984. +<table><tr><td><center><font color="FFFF00">Double Domination<br></font></center></td></tr>
  13985. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  13986. +<tr><td>Team vs team event</td></tr>
  13987. +<tr><td>The goal is to have more players near both Zones than the enemy team</td></tr>
  13988. +<tr><td>If a team got more players in both zones for 10 seconds, they get a point</td></tr>
  13989. +<tr><td>After a team gets scored, both teams gets teleported to intial locations</td></tr>
  13990. +<tr><td>the team with most domination points wins</td></tr>
  13991. +<tr><td>If both team got same score, then a random team wins</td></tr>
  13992. +<tr><td>Event reward: 2 apigas</td></tr>
  13993. +<tr><td>Levels allowed: 70-80</td></tr>
  13994. +<tr><td>Event duration: 4 minutes</td></tr>
  13995. +<tr><td>Minimum players: 8</td></tr>
  13996. +<tr><td>Full buff event</td></tr>
  13997. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  13998. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  13999. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14000. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14001. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14002. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14003. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14004. +</table>
  14005. +</body></html>
  14006. \ No newline at end of file
  14007. Index: data/html/eventinfo/4.htm
  14008. ===================================================================
  14009. --- data/html/eventinfo/4.htm (nonexistent)
  14010. +++ data/html/eventinfo/4.htm (working copy)
  14011. @@ -0,0 +1,20 @@
  14012. +<html><body>
  14013. +<table><tr><td><center><font color="FFFF00">Last man standing<br></font></center></td></tr>
  14014. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14015. +<tr><td>Free for all event</td></tr>
  14016. +<tr><td>The last person to stay alive is the winner</td></tr>
  14017. +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
  14018. +<tr><td>Event reward: 25 medals</td></tr>
  14019. +<tr><td>Levels allowed: 70-80</td></tr>
  14020. +<tr><td>Event duration: 5 minutes</td></tr>
  14021. +<tr><td>Minimum players: 8</td></tr>
  14022. +<tr><td>Full buff event</td></tr>
  14023. +<tr><td>Ressurection time: None<br></td></tr>
  14024. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14025. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14026. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14027. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14028. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14029. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14030. +</table>
  14031. +</body></html>
  14032. \ No newline at end of file
  14033. Index: data/html/eventinfo/5.htm
  14034. ===================================================================
  14035. --- data/html/eventinfo/5.htm (nonexistent)
  14036. +++ data/html/eventinfo/5.htm (working copy)
  14037. @@ -0,0 +1,23 @@
  14038. +<html><body>
  14039. +<table><tr><td><center><font color="FFFF00">Lucky Chests<br></font></center></td></tr>
  14040. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14041. +<tr><td>The goal is to have most chests succesfully opened</td></tr>
  14042. +<tr><td>There is a chance that a chest will explode and get you killed</td></tr>
  14043. +<tr><td>The event ends when alll chests are opened or time runs out</td></tr>
  14044. +<tr><td>The player with most chests opened wins</td></tr>
  14045. +<tr><td>If there's more than 1 player with max score, then a random player wins</td></tr>
  14046. +<tr><td>Reward for every Chest opened: 1 Medal</td></tr>
  14047. +<tr><td>Event reward: 20 medals</td></tr>
  14048. +<tr><td>Levels allowed: 40-80</td></tr>
  14049. +<tr><td>Event duration: 3 minutes</td></tr>
  14050. +<tr><td>Minimum players: 8</td></tr>
  14051. +<tr><td>Self buff event</td></tr>
  14052. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  14053. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14054. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14055. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14056. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14057. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14058. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14059. +</table>
  14060. +</body></html>
  14061. \ No newline at end of file
  14062. Index: data/html/eventinfo/6.htm
  14063. ===================================================================
  14064. --- data/html/eventinfo/6.htm (nonexistent)
  14065. +++ data/html/eventinfo/6.htm (working copy)
  14066. @@ -0,0 +1,25 @@
  14067. +<html><body>
  14068. +<table><tr><td><center><font color="FFFF00">Simon says<br></font></center></td></tr>
  14069. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14070. +<tr><td>The goal is to say exact text as the NPC says as fast as possible</td></tr>
  14071. +<tr><td>If player didnt say the text within 10 seconds he's out</td></tr>
  14072. +<tr><td>If player said the word wrong he is out</td></tr>
  14073. +<tr><td>If player said the word last he is out</td></tr>
  14074. +<tr><td>Red nick means you're out</td></tr>
  14075. +<tr><td>Green nick means you said the word correct</td></tr>
  14076. +<tr><td>All players are in sitting position during the event</td></tr>
  14077. +<tr><td>The winner is the last person to stay with green nick</td></tr>
  14078. +<tr><td>Event reward: 25 medals</td></tr>
  14079. +<tr><td>Levels allowed: 40-80</td></tr>
  14080. +<tr><td>Event duration: Until there's 1 winner</td></tr>
  14081. +<tr><td>Minimum players: 8</td></tr>
  14082. +<tr><td>Self buff event</td></tr>
  14083. +<tr><td>Ressurection time: None<br></td></tr>
  14084. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14085. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14086. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14087. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14088. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14089. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14090. +</table>
  14091. +</body></html>
  14092. \ No newline at end of file
  14093. Index: data/html/eventinfo/7.htm
  14094. ===================================================================
  14095. --- data/html/eventinfo/7.htm (nonexistent)
  14096. +++ data/html/eventinfo/7.htm (working copy)
  14097. @@ -0,0 +1,21 @@
  14098. +<html><body>
  14099. +<table><tr><td><center><font color="FFFF00">Team vs team<br></font></center></td></tr>
  14100. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14101. +<tr><td>The goal is to get more kills than enemy team</td></tr>
  14102. +<tr><td>team with most score wins</td></tr>
  14103. +<tr><td>If both teams has same score then a random team wins</td></tr>
  14104. +<tr><td>Reward for every kill: 1 medal</td></tr>
  14105. +<tr><td>Event reward: 10 medals</td></tr>
  14106. +<tr><td>Event Duration: 5 minutes</td></tr>
  14107. +<tr><td>Levels allowed: 70-80</td></tr>
  14108. +<tr><td>Minimum players: 8</td></tr>
  14109. +<tr><td>Self buff event</td></tr>
  14110. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  14111. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14112. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14113. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14114. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14115. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14116. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14117. +</table>
  14118. +</body></html>
  14119. \ No newline at end of file
  14120. Index: data/html/eventinfo/8.htm
  14121. ===================================================================
  14122. --- data/html/eventinfo/8.htm (nonexistent)
  14123. +++ data/html/eventinfo/8.htm (working copy)
  14124. @@ -0,0 +1,22 @@
  14125. +<html><body>
  14126. +<table><tr><td><center><font color="FFFF00">VIP<br></font></center></td></tr>
  14127. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14128. +<tr><td>The goal is to kill the enemy VIP</td></tr>
  14129. +<tr><td>team get score for every VIP kill</td></tr>
  14130. +<tr><td>If both teams has same score then a random team wins</td></tr>
  14131. +<tr><td>Event duration: 5 minutes</td></tr>
  14132. +<tr><td>team with most VIP kills wins</td></tr>
  14133. +<tr><td>Reward per VIP kill: 3 medals</td></tr>
  14134. +<tr><td>Event reward: 10 medals</td></tr>
  14135. +<tr><td>Levels allowed: 70-80</td></tr>
  14136. +<tr><td>Minimum players: 8</td></tr>
  14137. +<tr><td>Self buff event</td></tr>
  14138. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  14139. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14140. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14141. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14142. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14143. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14144. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14145. +</table>
  14146. +</body></html>
  14147. \ No newline at end of file
  14148. Index: data/html/eventinfo/9.htm
  14149. ===================================================================
  14150. --- data/html/eventinfo/9.htm (nonexistent)
  14151. +++ data/html/eventinfo/9.htm (working copy)
  14152. @@ -0,0 +1,20 @@
  14153. +<html><body>
  14154. +<table><tr><td><center><font color="FFFF00">Zombies<br></font></center></td></tr>
  14155. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14156. +<tr><td>1 Random person turns into a zombie</td></tr>
  14157. +<tr><td>zombie gets 2 medal for every "kill"</td></tr>
  14158. +<tr><td>Last to stay human wins</td></tr>
  14159. +<tr><td>Event reward: 2 apigas</td></tr>
  14160. +<tr><td>Event duration: 4 minutes</td></tr>
  14161. +<tr><td>Levels allowed: 40-80</td></tr>
  14162. +<tr><td>Minimum players: 8</td></tr>
  14163. +<tr><td>Self buff event</td></tr>
  14164. +<tr><td>Ressurection time: None<br></td></tr>
  14165. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14166. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14167. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14168. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14169. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14170. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14171. +</table>
  14172. +</body></html>
  14173. \ No newline at end of file
  14174. Index: data/html/eventinfo/7.htm
  14175. ===================================================================
  14176. --- data/html/eventinfo/7.htm (nonexistent)
  14177. +++ data/html/eventinfo/7.htm (working copy)
  14178. @@ -0,0 +1,21 @@
  14179. +<html><body>
  14180. +<table><tr><td><center><font color="FFFF00">Team vs team<br></font></center></td></tr>
  14181. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14182. +<tr><td>The goal is to get more kills than enemy team</td></tr>
  14183. +<tr><td>team with most score wins</td></tr>
  14184. +<tr><td>If both teams has same score then a random team wins</td></tr>
  14185. +<tr><td>Reward for every kill: 1 medal</td></tr>
  14186. +<tr><td>Event reward: 10 medals</td></tr>
  14187. +<tr><td>Event Duration: 5 minutes</td></tr>
  14188. +<tr><td>Levels allowed: 70-80</td></tr>
  14189. +<tr><td>Minimum players: 8</td></tr>
  14190. +<tr><td>Self buff event</td></tr>
  14191. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  14192. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14193. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14194. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14195. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14196. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14197. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14198. +</table>
  14199. +</body></html>
  14200. \ No newline at end of file
  14201. Index: data/html/eventinfo/11.htm
  14202. ===================================================================
  14203. --- data/html/eventinfo/11.htm (nonexistent)
  14204. +++ data/html/eventinfo/11.htm (working copy)
  14205. @@ -0,0 +1,24 @@
  14206. +<html><body>
  14207. +<table><tr><td><center><font color="FFFF00">Russian Roluette<br></font></center></td></tr>
  14208. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14209. +<tr><td>6 Chests spawns</td></tr>
  14210. +<tr><td>Every person need to choose a chest on every round</td></tr>
  14211. +<tr><td>Each round lasts for 10 seconds</td></tr>
  14212. +<tr><td>Green nick means u have choosen a chest for the round</td></tr>
  14213. +<tr><td>If you haven't choosen any chest you die</td></tr>
  14214. +<tr><td>If your chest dies you die</td></tr>
  14215. +<tr><td>Winners are all players who succesfully survived to the last chest</td></tr>
  14216. +<tr><td>Event reward: 15 medals</td></tr>
  14217. +<tr><td>Event duration: 4 minutes</td></tr>
  14218. +<tr><td>Levels allowed: 40-80</td></tr>
  14219. +<tr><td>Minimum players: 8</td></tr>
  14220. +<tr><td>Full buff event</td></tr>
  14221. +<tr><td>Ressurection time: None<br></td></tr>
  14222. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14223. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14224. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14225. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14226. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14227. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14228. +</table>
  14229. +</body></html>
  14230. \ No newline at end of file
  14231. Index: data/html/eventinfo/4.htm
  14232. ===================================================================
  14233. --- data/html/eventinfo/4.htm (nonexistent)
  14234. +++ data/html/eventinfo/4.htm (working copy)
  14235. @@ -0,0 +1,20 @@
  14236. +<html><body>
  14237. +<table><tr><td><center><font color="FFFF00">Last man standing<br></font></center></td></tr>
  14238. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14239. +<tr><td>Free for all event</td></tr>
  14240. +<tr><td>The last person to stay alive is the winner</td></tr>
  14241. +<tr><td>Reward for every 2 kills: 1 Medal</td></tr>
  14242. +<tr><td>Event reward: 25 medals</td></tr>
  14243. +<tr><td>Levels allowed: 70-80</td></tr>
  14244. +<tr><td>Event duration: 5 minutes</td></tr>
  14245. +<tr><td>Minimum players: 8</td></tr>
  14246. +<tr><td>Full buff event</td></tr>
  14247. +<tr><td>Ressurection time: None<br></td></tr>
  14248. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14249. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14250. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14251. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14252. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14253. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14254. +</table>
  14255. +</body></html>
  14256. \ No newline at end of file
  14257. Index: sql/custom_npc.sql
  14258. ===================================================================
  14259. --- sql/custom_npc.sql (revision 1132)
  14260. +++ sql/custom_npc.sql (working copy)
  14261. @@ -51,3 +51,5 @@
  14262. INSERT ignore INTO custom_npc
  14263. values
  14264. ('31228', '31228', 'Roy the Cat', '1', 'Classes Trader', '1', 'Monster.cat_the_cat', '9.00', '16.00', '70', 'male', 'L2ClassMaster', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '490', '10', '1335', '470', '780', '382', '278', '0', '333', '0', '0', '0', '88', '132', null, '0', '0', '0', 'LAST_HIT');
  14265. +
  14266. +INSERT INTO `custom_npc` VALUES ('50001', '31822', 'Event Manager', '1', 'L2Warcraft', '1', 'LineageMonster5.br_wooldie', '10', '16', '80', 'male', 'L2EventManager', '40', '20000000', '40', '8.5', '3', '40', '43', '30', '21', '20', '20', '0', '0', '8', '40', '5', '30', '253', '0', '333', '0', '0', '0', '25', '120', 'Null', '0', '0', '0', 'LAST_HIT');
  14267. \ No newline at end of file
  14268. Index: data/stats/skills/5200-5299.xml
  14269. ===================================================================
  14270. --- data/stats/skills/5200-5299.xml (revision 1132)
  14271. +++ data/stats/skills/5200-5299.xml (working copy)
  14272. @@ -298,7 +298,7 @@
  14273. <set name="effectRange" val="900"/>
  14274. </skill>
  14275. <!-- Status:Fixed Pack:l2jfrozen author:Nefer -->
  14276. - <skill id="5219" levels="1" name="Huge Pig Stun">
  14277. + <!-- <skill id="5219" levels="1" name="Huge Pig Stun">
  14278. <set name="magicLvl" val="95"/>
  14279. <set name="lvlDepend" val="1"/>
  14280. <set name="power" val="50"/>
  14281. @@ -332,7 +332,31 @@
  14282. <for>
  14283. <effect count="5" name="Fear" time="6" val="0"/>
  14284. </for>
  14285. - </skill>
  14286. + </skill> -->
  14287. + <skill id="5219" levels="1" name="Capture">
  14288. + <set name="mpInitialConsume" val="50" />
  14289. + <set name="target" val="TARGET_ONE" />
  14290. + <set name="reuseDelay" val="10000" />
  14291. + <set name="hitTime" val="2000" />
  14292. + <set name="staticReuse" val="true" />
  14293. + <set name="staticHitTime" val="true" />
  14294. + <set name="skillType" val="CAPTURE" />
  14295. + <set name="operateType" val="OP_ACTIVE" />
  14296. + <set name="castRange" val="85" />
  14297. + <set name="effectRange" val="400" />
  14298. + </skill>
  14299. + <skill id="5220" levels="1" name="Bomb">
  14300. + <set name="mpInitialConsume" val="50" />
  14301. + <set name="target" val="TARGET_SELF" />
  14302. + <set name="reuseDelay" val="10000" />
  14303. + <set name="hitTime" val="1000" />
  14304. + <set name="staticReuse" val="true" />
  14305. + <set name="staticHitTime" val="true" />
  14306. + <set name="skillType" val="BOMB" />
  14307. + <set name="operateType" val="OP_ACTIVE" />
  14308. + <set name="castRange" val="85" />
  14309. + <set name="effectRange" val="400" />
  14310. +</skill>
  14311. <!-- Status:Fixed Pack:l2jfrozen author:Nefer -->
  14312. <skill id="5267" levels="9" name="Trap Explosion">
  14313. <table name="#magicLvl">28 36 44 48 52 56 60 68 74</table>
  14314. Index: data/html/eventinfo/1.htm
  14315. ===================================================================
  14316. --- data/html/eventinfo/1.htm (nonexistent)
  14317. +++ data/html/eventinfo/1.htm (working copy)
  14318. @@ -0,0 +1,21 @@
  14319. +<html><body>
  14320. +<table><tr><td><center><font color="FFFF00">Death Match<br></font></center></td></tr>
  14321. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14322. +<tr><td>All vs all event</td></tr>
  14323. +<tr><td>the player with most kills wins</td></tr>
  14324. +<tr><td>If there is more than 1 player with max score, then a random player wins</td></tr>
  14325. +<tr><td>Players will get 1 medal for every kill</td></tr>
  14326. +<tr><td>Event reward: 20 medals</td></tr>
  14327. +<tr><td>Levels allowed: 70-80</td></tr>
  14328. +<tr><td>Event duration: 4 minutes</td></tr>
  14329. +<tr><td>Minimum players: 8</td></tr>
  14330. +<tr><td>Full buff event</td></tr>
  14331. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  14332. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14333. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14334. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14335. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14336. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14337. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14338. +</table>
  14339. +</body></html>
  14340. \ No newline at end of file
  14341. Index: sql/phoenix.sql
  14342. ===================================================================
  14343. --- sql/phoenix.sql (nonexistent)
  14344. +++ sql/phoenix.sql (working copy)
  14345. @@ -0,0 +1,32 @@
  14346. +CREATE TABLE IF NOT EXISTS `event_stats` (
  14347. + `id` int(11) NOT NULL AUTO_INCREMENT,
  14348. + `player` int(11) NOT NULL,
  14349. + `event` int(2) NOT NULL,
  14350. + `num` int(11) NOT NULL,
  14351. + `wins` int(11) NOT NULL,
  14352. + `losses` int(11) NOT NULL,
  14353. + `kills` int(11) NOT NULL,
  14354. + `deaths` int(11) NOT NULL,
  14355. + `scores` int(11) NOT NULL,
  14356. + PRIMARY KEY (`id`)
  14357. +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  14358. +
  14359. +CREATE TABLE IF NOT EXISTS `event_stats_full` (
  14360. + `id` int(11) NOT NULL AUTO_INCREMENT,
  14361. + `player` int(11) NOT NULL,
  14362. + `num` int(11) NOT NULL,
  14363. + `winpercent` int(11) NOT NULL,
  14364. + `kdratio` double NOT NULL,
  14365. + `wins` int(11) NOT NULL,
  14366. + `losses` int(11) NOT NULL,
  14367. + `kills` int(11) NOT NULL,
  14368. + `deaths` int(11) NOT NULL,
  14369. + `favevent` int(11) NOT NULL,
  14370. + PRIMARY KEY (`id`)
  14371. +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  14372. +
  14373. +CREATE TABLE IF NOT EXISTS `event_buffs` (
  14374. + `player` varchar(30) NOT NULL,
  14375. + `buffs` varchar(200) NOT NULL,
  14376. + PRIMARY KEY (`player`)
  14377. +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  14378. \ No newline at end of file
  14379. Index: data/html/eventinfo/13.htm
  14380. ===================================================================
  14381. --- data/html/eventinfo/13.htm (nonexistent)
  14382. +++ data/html/eventinfo/13.htm (working copy)
  14383. @@ -0,0 +1,22 @@
  14384. +<html><body>
  14385. +<table><tr><td><center><font color="FFFF00">Mutant<br></font></center></td></tr>
  14386. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14387. +<tr><td>1 random player becomes a mutant</td></tr>
  14388. +<tr><td>Mutant gets: 3x p.def/m.def 2x p.atk/m.atk/c.spd/atk.spd and 30% resist to debuffs</td></tr>
  14389. +<tr><td>Only the mutant can score</td></tr>
  14390. +<tr><td>Everyone else can kill mutant only</td></tr>
  14391. +<tr><td>If 2 or more players get same score then a random player wins</td></tr>
  14392. +<tr><td>Event reward: 2 apigas</td></tr>
  14393. +<tr><td>Event duration: 4 minutes</td></tr>
  14394. +<tr><td>Levels allowed: 70-80</td></tr>
  14395. +<tr><td>Minimum players: 8</td></tr>
  14396. +<tr><td>Self buff event</td></tr>
  14397. +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
  14398. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14399. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14400. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14401. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14402. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14403. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14404. +</table>
  14405. +</body></html>
  14406. \ No newline at end of file
  14407. Index: data/stats/skills/9000-9099.xml
  14408. ===================================================================
  14409. --- data/stats/skills/9000-9099.xml (revision 1132)
  14410. +++ data/stats/skills/9000-9099.xml (working copy)
  14411. @@ -109,4 +109,20 @@
  14412. <add order="0x10" stat="STR" val="#lvl"/>
  14413. </for>
  14414. </skill>
  14415. + <skill id="9007" levels="1" name="Mutant">
  14416. + <set name="target" val="TARGET_SELF" />
  14417. + <set name="skillType" val="BUFF" />
  14418. + <set name="operateType" val="OP_PASSIVE" />
  14419. + <for>
  14420. + <mul order="0x30" stat="pDef" val="5" />
  14421. + <mul order="0x30" stat="mDef" val="5" />
  14422. + <mul order="0x30" stat="mAtk" val="3" />
  14423. + <mul order="0x30" stat="pAtk" val="3" />
  14424. + <mul order="0x30" stat="mAtkSpd" val="2" />
  14425. + <mul order="0x30" stat="pAtkSpd" val="2" />
  14426. + <mul order="0x30" stat="rootVuln" val="0.7"/>
  14427. + <mul order="0x30" stat="stunVuln" val="0.7"/>
  14428. + <mul order="0x30" stat="paralyzeVuln" val="0.7"/>
  14429. + </for>
  14430. + </skill>
  14431. </list>
  14432. \ No newline at end of file
  14433. Index: data/html/eventinfo/9.htm
  14434. ===================================================================
  14435. --- data/html/eventinfo/9.htm (nonexistent)
  14436. +++ data/html/eventinfo/9.htm (working copy)
  14437. @@ -0,0 +1,20 @@
  14438. +<html><body>
  14439. +<table><tr><td><center><font color="FFFF00">Zombies<br></font></center></td></tr>
  14440. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14441. +<tr><td>1 Random person turns into a zombie</td></tr>
  14442. +<tr><td>zombie gets 2 medal for every "kill"</td></tr>
  14443. +<tr><td>Last to stay human wins</td></tr>
  14444. +<tr><td>Event reward: 2 apigas</td></tr>
  14445. +<tr><td>Event duration: 4 minutes</td></tr>
  14446. +<tr><td>Levels allowed: 40-80</td></tr>
  14447. +<tr><td>Minimum players: 8</td></tr>
  14448. +<tr><td>Self buff event</td></tr>
  14449. +<tr><td>Ressurection time: None<br></td></tr>
  14450. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14451. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14452. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14453. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14454. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14455. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14456. +</table>
  14457. +</body></html>
  14458. \ No newline at end of file
  14459. Index: data/html/eventinfo/8.htm
  14460. ===================================================================
  14461. --- data/html/eventinfo/8.htm (nonexistent)
  14462. +++ data/html/eventinfo/8.htm (working copy)
  14463. @@ -0,0 +1,22 @@
  14464. +<html><body>
  14465. +<table><tr><td><center><font color="FFFF00">VIP<br></font></center></td></tr>
  14466. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14467. +<tr><td>The goal is to kill the enemy VIP</td></tr>
  14468. +<tr><td>team get score for every VIP kill</td></tr>
  14469. +<tr><td>If both teams has same score then a random team wins</td></tr>
  14470. +<tr><td>Event duration: 5 minutes</td></tr>
  14471. +<tr><td>team with most VIP kills wins</td></tr>
  14472. +<tr><td>Reward per VIP kill: 3 medals</td></tr>
  14473. +<tr><td>Event reward: 10 medals</td></tr>
  14474. +<tr><td>Levels allowed: 70-80</td></tr>
  14475. +<tr><td>Minimum players: 8</td></tr>
  14476. +<tr><td>Self buff event</td></tr>
  14477. +<tr><td>Ressurection time: 7 sec<br></td></tr>
  14478. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14479. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14480. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14481. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14482. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14483. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14484. +</table>
  14485. +</body></html>
  14486. \ No newline at end of file
  14487. Index: data/html/eventinfo/14.htm
  14488. ===================================================================
  14489. --- data/html/eventinfo/14.htm (nonexistent)
  14490. +++ data/html/eventinfo/14.htm (working copy)
  14491. @@ -0,0 +1,23 @@
  14492. +<html><body>
  14493. +<table><tr><td><center><font color="FFFF00">Battlefield<br></font></center></td></tr>
  14494. +<tr><td><font color="00CCFF"><b>Event Information</b></font></td></tr>
  14495. +<tr><td>All players get skill "Capture"</td></tr>
  14496. +<tr><td>The goal is to capture as much bases as possible</td></tr>
  14497. +<tr><td>For each base a team got they will get 1 point every second</td></tr>
  14498. +<tr><td>Team with most score wins</td></tr>
  14499. +<tr><td>If both teams got same score then a random team wins</td></tr>
  14500. +<tr><td>Reward for every base capture: 2 medals</td></tr>
  14501. +<tr><td>Event reward: 10 medals</td></tr>
  14502. +<tr><td>Event duration: 5 minutes</td></tr>
  14503. +<tr><td>Levels allowed: 70-80</td></tr>
  14504. +<tr><td>Minimum players: 8</td></tr>
  14505. +<tr><td>Full buff event</td></tr>
  14506. +<tr><td>Ressurection time: 7 Seconds<br></td></tr>
  14507. +<tr><td><font color="00CCFF"><b>Rules</b></font></td></tr>
  14508. +<tr><td><font color="FF0000">Be Warned!</font></td></tr>
  14509. +<tr><td>Dualboxing is not allowed during event</td></tr>
  14510. +<tr><td>Feeding enemy team is not allowed, this means buffing/going in naked etc.</td></tr>
  14511. +<tr><td>In general if a char registers just to ruin event he gets risked getting punished.<br></td></tr>
  14512. +<tr><td><center><font color="9933FF">www.L2Warcraft.com<br></font></center></td></tr>
  14513. +</table>
  14514. +</body></html>
  14515. \ No newline at end of file
  14516. Index: data/html/default/9103.htm
  14517. ===================================================================
  14518. --- data/html/default/9103.htm (nonexistent)
  14519. +++ data/html/default/9103.htm (working copy)
  14520. @@ -0,0 +1,7 @@
  14521. +<html><body>
  14522. +Instructions:<br>
  14523. +Incase of Domination:<br>
  14524. +The team must have more players near the Zone than the enemy in order to score.<br><br>
  14525. +Incase of Double Domination:<br>
  14526. +The team must have more players in both zones for 10 seconds than the enemy in order to score.
  14527. +</body></html>
  14528. \ No newline at end of file
Add Comment
Please, Sign In to add comment