AdminAnnouncements.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  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.admincommandhandlers;
  16. import java.util.List;
  17. import java.util.StringTokenizer;
  18. import javolution.text.TextBuilder;
  19. import com.l2jserver.Config;
  20. import com.l2jserver.gameserver.Announcements;
  21. import com.l2jserver.gameserver.cache.HtmCache;
  22. import com.l2jserver.gameserver.handler.IAdminCommandHandler;
  23. import com.l2jserver.gameserver.model.L2World;
  24. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  25. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  26. import com.l2jserver.gameserver.taskmanager.AutoAnnounceTaskManager;
  27. import com.l2jserver.gameserver.taskmanager.AutoAnnounceTaskManager.AutoAnnouncement;
  28. import com.l2jserver.gameserver.util.Util;
  29. import com.l2jserver.util.StringUtil;
  30. /**
  31. * This class handles following admin commands:
  32. * - announce text = announces text to all players
  33. * - list_announcements = show menu
  34. * - reload_announcements = reloads announcements from txt file
  35. * - announce_announcements = announce all stored announcements to all players
  36. * - add_announcement text = adds text to startup announcements
  37. * - del_announcement id = deletes announcement with respective id
  38. *
  39. * @version $Revision: 1.4.4.5 $ $Date: 2005/04/11 10:06:06 $
  40. */
  41. public class AdminAnnouncements implements IAdminCommandHandler
  42. {
  43. private static final String[] ADMIN_COMMANDS =
  44. {
  45. "admin_list_announcements",
  46. "admin_list_critannouncements",
  47. "admin_reload_announcements",
  48. "admin_announce_announcements",
  49. "admin_add_announcement",
  50. "admin_del_announcement",
  51. "admin_add_critannouncement",
  52. "admin_del_critannouncement",
  53. "admin_announce",
  54. "admin_critannounce",
  55. "admin_announce_menu",
  56. "admin_critannounce_menu",
  57. "admin_list_autoann",
  58. "admin_reload_autoann",
  59. "admin_add_autoann",
  60. "admin_del_autoann"
  61. };
  62. @Override
  63. public boolean useAdminCommand(String command, L2PcInstance activeChar)
  64. {
  65. if (command.equals("admin_list_announcements"))
  66. {
  67. Announcements.getInstance().listAnnouncements(activeChar);
  68. }
  69. else if (command.equals("admin_list_critannouncements"))
  70. {
  71. Announcements.getInstance().listCritAnnouncements(activeChar);
  72. }
  73. else if (command.equals("admin_reload_announcements"))
  74. {
  75. Announcements.getInstance().loadAnnouncements();
  76. Announcements.getInstance().listAnnouncements(activeChar);
  77. }
  78. else if (command.startsWith("admin_announce_menu"))
  79. {
  80. if (Config.GM_ANNOUNCER_NAME && command.length() > 20)
  81. command += " ("+activeChar.getName()+")";
  82. Announcements.getInstance().handleAnnounce(command, 20, false);
  83. AdminHelpPage.showHelpPage(activeChar, "gm_menu.htm");
  84. }
  85. else if (command.startsWith("admin_critannounce_menu"))
  86. {
  87. try
  88. {
  89. command = command.substring(24);
  90. if (Config.GM_CRITANNOUNCER_NAME && command.length() > 0)
  91. command = activeChar.getName() + ": " + command;
  92. Announcements.getInstance().handleAnnounce(command, 0, true);
  93. }
  94. catch (StringIndexOutOfBoundsException e)
  95. {
  96. }
  97. AdminHelpPage.showHelpPage(activeChar, "gm_menu.htm");
  98. }
  99. else if (command.equals("admin_announce_announcements"))
  100. {
  101. for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
  102. Announcements.getInstance().showAnnouncements(player);
  103. Announcements.getInstance().listAnnouncements(activeChar);
  104. }
  105. else if (command.startsWith("admin_add_announcement"))
  106. {
  107. // FIXME the player can send only 16 chars (if you try to send more
  108. // it sends null), remove this function or not?
  109. if (!command.equals("admin_add_announcement"))
  110. {
  111. try
  112. {
  113. String val = command.substring(23);
  114. Announcements.getInstance().addAnnouncement(val);
  115. Announcements.getInstance().listAnnouncements(activeChar);
  116. }
  117. catch (StringIndexOutOfBoundsException e)
  118. {
  119. }// ignore errors
  120. }
  121. }
  122. else if (command.startsWith("admin_add_critannouncement"))
  123. {
  124. // FIXME the player can send only 16 chars (if you try to send more
  125. // it sends null), remove this function or not?
  126. if (!command.equals("admin_add_critannouncement"))
  127. {
  128. try
  129. {
  130. String val = command.substring(27);
  131. Announcements.getInstance().addCritAnnouncement(val);
  132. Announcements.getInstance().listCritAnnouncements(activeChar);
  133. }
  134. catch (StringIndexOutOfBoundsException e)
  135. {
  136. }// ignore errors
  137. }
  138. }
  139. else if (command.startsWith("admin_del_announcement"))
  140. {
  141. try
  142. {
  143. int val = Integer.parseInt(command.substring(23));
  144. Announcements.getInstance().delAnnouncement(val);
  145. Announcements.getInstance().listAnnouncements(activeChar);
  146. }
  147. catch (StringIndexOutOfBoundsException e)
  148. {
  149. }
  150. }
  151. else if (command.startsWith("admin_del_critannouncement"))
  152. {
  153. try
  154. {
  155. int val = Integer.parseInt(command.substring(27));
  156. Announcements.getInstance().delCritAnnouncement(val);
  157. Announcements.getInstance().listCritAnnouncements(activeChar);
  158. }
  159. catch (StringIndexOutOfBoundsException e)
  160. {
  161. }
  162. }
  163. // Command is admin announce
  164. else if (command.startsWith("admin_announce"))
  165. {
  166. if (Config.GM_ANNOUNCER_NAME && command.length() > 15)
  167. command += " ("+activeChar.getName()+")";
  168. // Call method from another class
  169. Announcements.getInstance().handleAnnounce(command, 15, false);
  170. }
  171. else if (command.startsWith("admin_critannounce"))
  172. {
  173. try
  174. {
  175. command = command.substring(19);
  176. if (Config.GM_CRITANNOUNCER_NAME && command.length() > 0)
  177. command = activeChar.getName() + ": " + command;
  178. Announcements.getInstance().handleAnnounce(command, 0, true);
  179. }
  180. catch (StringIndexOutOfBoundsException e)
  181. {
  182. }
  183. }
  184. else if (command.startsWith("admin_list_autoann"))
  185. {
  186. listAutoAnnouncements(activeChar);
  187. }
  188. else if (command.startsWith("admin_reload_autoann"))
  189. {
  190. AutoAnnounceTaskManager.getInstance().restore();
  191. activeChar.sendMessage("AutoAnnouncement Reloaded.");
  192. listAutoAnnouncements(activeChar);
  193. }
  194. else if (command.startsWith("admin_add_autoann"))
  195. {
  196. StringTokenizer st = new StringTokenizer(command);
  197. st.nextToken();
  198. if (!st.hasMoreTokens())
  199. {
  200. activeChar.sendMessage("Not enough parameters for adding autoannounce!");
  201. return false;
  202. }
  203. String token = st.nextToken();
  204. if (!Util.isDigit(token))
  205. {
  206. activeChar.sendMessage("Not a valid initial value!");
  207. return false;
  208. }
  209. long initial = Long.parseLong(token);
  210. if (!st.hasMoreTokens())
  211. {
  212. activeChar.sendMessage("Not enough parameters for adding autoannounce!");
  213. return false;
  214. }
  215. token = st.nextToken();
  216. if (!Util.isDigit(token))
  217. {
  218. activeChar.sendMessage("Not a valid delay value!");
  219. return false;
  220. }
  221. long delay = Long.parseLong(token);
  222. if (!st.hasMoreTokens())
  223. {
  224. activeChar.sendMessage("Not enough parameters for adding autoannounce!");
  225. return false;
  226. }
  227. token = st.nextToken();
  228. if (!token.equals("-1") && !Util.isDigit(token))
  229. {
  230. activeChar.sendMessage("Not a valid repeat value!");
  231. return false;
  232. }
  233. int repeat = Integer.parseInt(token);
  234. if (!st.hasMoreTokens())
  235. {
  236. activeChar.sendMessage("Not enough parameters for adding autoannounce!");
  237. return false;
  238. }
  239. boolean isCritical = Boolean.valueOf(st.nextToken());
  240. if (!st.hasMoreTokens())
  241. {
  242. activeChar.sendMessage("Not enough parameters for adding autoannounce!");
  243. return false;
  244. }
  245. TextBuilder memo = new TextBuilder();
  246. while (st.hasMoreTokens())
  247. {
  248. memo.append(st.nextToken());
  249. memo.append(" ");
  250. }
  251. AutoAnnounceTaskManager.getInstance().addAutoAnnounce(initial*1000, delay*1000, repeat, memo.toString().trim(), isCritical);
  252. listAutoAnnouncements(activeChar);
  253. }
  254. else if (command.startsWith("admin_del_autoann"))
  255. {
  256. StringTokenizer st = new StringTokenizer(command);
  257. st.nextToken();
  258. if (!st.hasMoreTokens())
  259. {
  260. activeChar.sendMessage("Not enough parameters for deleting autoannounce!");
  261. return false;
  262. }
  263. String token = st.nextToken();
  264. if (!Util.isDigit(token))
  265. {
  266. activeChar.sendMessage("Not a valid auto announce Id value!");
  267. return false;
  268. }
  269. AutoAnnounceTaskManager.getInstance().deleteAutoAnnounce(Integer.parseInt(token));
  270. listAutoAnnouncements(activeChar);
  271. }
  272. return true;
  273. }
  274. private void listAutoAnnouncements(L2PcInstance activeChar)
  275. {
  276. String content = HtmCache.getInstance().getHtmForce(activeChar.getHtmlPrefix(), "data/html/admin/autoannounce.htm");
  277. NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
  278. adminReply.setHtml(content);
  279. final StringBuilder replyMSG = StringUtil.startAppend(500, "<br>");
  280. List<AutoAnnouncement> autoannouncements = AutoAnnounceTaskManager.getInstance().getAutoAnnouncements();
  281. for (int i = 0; i < autoannouncements.size(); i++)
  282. {
  283. AutoAnnouncement autoann = autoannouncements.get(i);
  284. TextBuilder memo2 = new TextBuilder();
  285. for (String memo0 : autoann.getMemo())
  286. {
  287. memo2.append(memo0);
  288. memo2.append("/n");
  289. }
  290. replyMSG.append("<table width=260><tr><td width=220><font color=\"" + (autoann.isCritical() ? "00FCFC" : "7FFCFC") + "\">");
  291. replyMSG.append(memo2.toString().trim());
  292. replyMSG.append("</font></td><td width=40><button value=\"Delete\" action=\"bypass -h admin_del_autoann ");
  293. replyMSG.append(i);
  294. replyMSG.append("\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table>");
  295. }
  296. adminReply.replace("%announces%", replyMSG.toString());
  297. activeChar.sendPacket(adminReply);
  298. }
  299. @Override
  300. public String[] getAdminCommandList()
  301. {
  302. return ADMIN_COMMANDS;
  303. }
  304. }