OlympiadObservation.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package handlers.bypasshandlers;
  16. import java.util.logging.Level;
  17. import com.l2jserver.gameserver.handler.IBypassHandler;
  18. import com.l2jserver.gameserver.model.actor.L2Character;
  19. import com.l2jserver.gameserver.model.actor.instance.L2OlympiadManagerInstance;
  20. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  21. import com.l2jserver.gameserver.model.entity.TvTEvent;
  22. import com.l2jserver.gameserver.model.olympiad.Olympiad;
  23. import com.l2jserver.gameserver.model.olympiad.OlympiadGameManager;
  24. import com.l2jserver.gameserver.model.olympiad.OlympiadGameTask;
  25. import com.l2jserver.gameserver.model.olympiad.OlympiadManager;
  26. import com.l2jserver.gameserver.network.SystemMessageId;
  27. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  28. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  29. import com.l2jserver.util.StringUtil;
  30. /**
  31. *
  32. * @author DS
  33. *
  34. */
  35. public class OlympiadObservation implements IBypassHandler
  36. {
  37. private static final String[] COMMANDS =
  38. {
  39. "arenalist",
  40. "arenachange"
  41. };
  42. public final boolean useBypass(String command, L2PcInstance activeChar, L2Character target)
  43. {
  44. try
  45. {
  46. final boolean isManager = target instanceof L2OlympiadManagerInstance;
  47. if (!isManager)
  48. {
  49. // without npc command can be used only in observer mode on arena
  50. if (!activeChar.inObserverMode()
  51. || activeChar.isInOlympiadMode()
  52. || activeChar.getOlympiadGameId() < 0)
  53. return false;
  54. }
  55. if (command.startsWith(COMMANDS[0])) //list
  56. {
  57. NpcHtmlMessage message = new NpcHtmlMessage(0);
  58. if (command.length() < 10)
  59. {
  60. if (isManager)
  61. {
  62. message.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_observe.htm");
  63. message.replace("%objectId%", String.valueOf(target.getObjectId()));
  64. }
  65. else
  66. message.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_arena_observe.htm");
  67. activeChar.sendPacket(message);
  68. return true;
  69. }
  70. final int firstArena, lastArena;
  71. switch (Integer.parseInt(command.substring(10).trim()))
  72. {
  73. case 1:
  74. firstArena = 0;
  75. lastArena = 21;
  76. break;
  77. case 2:
  78. firstArena = 22;
  79. lastArena = 43;
  80. break;
  81. case 3:
  82. firstArena = 44;
  83. lastArena = 65;
  84. break;
  85. case 4:
  86. firstArena = 66;
  87. lastArena = 87;
  88. break;
  89. default:
  90. return false;
  91. }
  92. StringBuilder list = new StringBuilder(3500);
  93. OlympiadGameTask task;
  94. if (isManager)
  95. {
  96. message.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_observe_list.htm");
  97. for (int i = firstArena; i <= lastArena; i++)
  98. {
  99. task = OlympiadGameManager.getInstance().getOlympiadTask(i);
  100. if (task != null)
  101. {
  102. StringUtil.append(list,
  103. "<a action=\"bypass -h npc_%objectId%_arenachange ",
  104. String.valueOf(i),
  105. "\">Arena ",
  106. String.valueOf(i + 1),
  107. "&nbsp;&nbsp;&nbsp;");
  108. if (task.isGameStarted())
  109. {
  110. if (task.isBattleStarted())
  111. StringUtil.append(list, "&$1719;"); // Playing
  112. else
  113. StringUtil.append(list, "&$1718;"); // Standby
  114. StringUtil.append(list,
  115. "&nbsp;&nbsp;&nbsp;",
  116. task.getGame().getPlayerNames()[0],
  117. "&nbsp; : &nbsp;",
  118. task.getGame().getPlayerNames()[1]);
  119. }
  120. else
  121. {
  122. StringUtil.append(list, "&$906;", // Initial State
  123. "</td><td>&nbsp;");
  124. }
  125. StringUtil.append(list, "</a><br>");
  126. }
  127. }
  128. message.replace("%list%", list.toString());
  129. message.replace("%objectId%", String.valueOf(target.getObjectId()));
  130. }
  131. else
  132. {
  133. message.setFile(activeChar.getHtmlPrefix(), Olympiad.OLYMPIAD_HTML_PATH + "olympiad_arena_observe_list.htm");
  134. for (int i = firstArena; i <= lastArena; i++)
  135. {
  136. task = OlympiadGameManager.getInstance().getOlympiadTask(i);
  137. if (task != null)
  138. {
  139. StringUtil.append(list,
  140. "<tr><td fixwidth=30><a action=\"bypass arenachange ",
  141. String.valueOf(i),
  142. "\">",
  143. String.valueOf(i + 1),
  144. "</a></td><td fixwidth=60>");
  145. if (task.isGameStarted())
  146. {
  147. if (task.isBattleStarted())
  148. StringUtil.append(list, "&$1719;"); // Playing
  149. else
  150. StringUtil.append(list, "&$1718;"); // Standby
  151. StringUtil.append(list,
  152. "</td><td>",
  153. task.getGame().getPlayerNames()[0],
  154. "&nbsp;",
  155. task.getGame().getPlayerNames()[1]);
  156. }
  157. else
  158. {
  159. StringUtil.append(list, "&$906;", // Initial State
  160. "</td><td>&nbsp;");
  161. }
  162. StringUtil.append(list, "</td><td><font color=\"aaccff\"></font></td></tr>");
  163. }
  164. }
  165. }
  166. for (int i = firstArena; i <= lastArena; i++)
  167. {
  168. task = OlympiadGameManager.getInstance().getOlympiadTask(i);
  169. if (task != null)
  170. {
  171. StringUtil.append(list,
  172. "<tr><td fixwidth=30><a action=\"bypass arenachange ",
  173. String.valueOf(i),
  174. "\">",
  175. String.valueOf(i + 1),
  176. "</a></td><td fixwidth=60>");
  177. if (task.isGameStarted())
  178. {
  179. if (task.isBattleStarted())
  180. StringUtil.append(list, "&$1719;"); // Playing
  181. else
  182. StringUtil.append(list, "&$1718;"); // Standby
  183. StringUtil.append(list,
  184. "</td><td>",
  185. task.getGame().getPlayerNames()[0],
  186. "&nbsp;",
  187. task.getGame().getPlayerNames()[1]);
  188. }
  189. else
  190. {
  191. StringUtil.append(list, "&$906;", // Initial State
  192. "</td><td>&nbsp;");
  193. }
  194. StringUtil.append(list,
  195. "</td><td><font color=\"aaccff\"></font></td></tr>");
  196. }
  197. message.replace("%list%", list.toString());
  198. }
  199. activeChar.sendPacket(message);
  200. return true;
  201. }
  202. else //change
  203. {
  204. if (isManager)
  205. {
  206. if (OlympiadManager.getInstance().isRegisteredInComp(activeChar))
  207. {
  208. activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WHILE_YOU_ARE_ON_THE_WAITING_LIST_YOU_ARE_NOT_ALLOWED_TO_WATCH_THE_GAME));
  209. return false;
  210. }
  211. if (!TvTEvent.isInactive() && TvTEvent.isPlayerParticipant(activeChar.getObjectId()))
  212. {
  213. activeChar.sendMessage("You can not observe games while registered for TvT");
  214. return false;
  215. }
  216. }
  217. final int arenaId = Integer.parseInt(command.substring(12).trim());
  218. final OlympiadGameTask nextArena = OlympiadGameManager.getInstance().getOlympiadTask(arenaId);
  219. if (nextArena != null)
  220. {
  221. activeChar.enterOlympiadObserverMode(nextArena.getZone().getSpawns().get(0), arenaId);
  222. activeChar.setInstanceId(OlympiadGameManager.getInstance().getOlympiadTask(arenaId).getZone().getInstanceId());
  223. return true;
  224. }
  225. }
  226. }
  227. catch (Exception e)
  228. {
  229. _log.log(Level.INFO, "Exception in " + e.getMessage(), e);
  230. }
  231. return false;
  232. }
  233. public final String[] getBypassList()
  234. {
  235. return COMMANDS;
  236. }
  237. }