AdminAdmin.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  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 net.sf.l2j.gameserver.handler.admincommandhandlers;
  16. import java.util.StringTokenizer;
  17. import net.sf.l2j.Config;
  18. import net.sf.l2j.gameserver.GmListTable;
  19. import net.sf.l2j.gameserver.Olympiad;
  20. import net.sf.l2j.gameserver.cache.HtmCache;
  21. import net.sf.l2j.gameserver.datatables.AccessLevels;
  22. import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights;
  23. import net.sf.l2j.gameserver.datatables.ItemTable;
  24. import net.sf.l2j.gameserver.datatables.NpcTable;
  25. import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
  26. import net.sf.l2j.gameserver.datatables.SkillTable;
  27. import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
  28. import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  29. import net.sf.l2j.gameserver.instancemanager.Manager;
  30. import net.sf.l2j.gameserver.model.L2Multisell;
  31. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  32. import net.sf.l2j.gameserver.network.SystemMessageId;
  33. import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  34. /**
  35. * This class handles following admin commands:
  36. * - admin|admin1/admin2/admin3/admin4/admin5 = slots for the 5 starting admin menus
  37. * - gmliston/gmlistoff = includes/excludes active character from /gmlist results
  38. * - silence = toggles private messages acceptance mode
  39. * - diet = toggles weight penalty mode
  40. * - tradeoff = toggles trade acceptance mode
  41. * - reload = reloads specified component from multisell|skill|npc|htm|item|instancemanager
  42. * - set/set_menu/set_mod = alters specified server setting
  43. * - saveolymp = saves olympiad state manually
  44. * - manualhero = cycles olympiad and calculate new heroes.
  45. * @version $Revision: 1.3.2.1.2.4 $ $Date: 2007/07/28 10:06:06 $
  46. */
  47. public class AdminAdmin implements IAdminCommandHandler
  48. {
  49. private static final String[] ADMIN_COMMANDS =
  50. {
  51. "admin_admin",
  52. "admin_admin1",
  53. "admin_admin2",
  54. "admin_admin3",
  55. "admin_admin4",
  56. "admin_admin5",
  57. "admin_gmliston",
  58. "admin_gmlistoff",
  59. "admin_silence",
  60. "admin_diet",
  61. "admin_tradeoff",
  62. "admin_reload",
  63. "admin_set",
  64. "admin_set_menu",
  65. "admin_set_mod",
  66. "admin_saveolymp",
  67. "admin_manualhero",
  68. "admin_sethero",
  69. "admin_endolympiad"
  70. };
  71. public boolean useAdminCommand(String command, L2PcInstance activeChar)
  72. {
  73. if (command.startsWith("admin_admin"))
  74. {
  75. showMainPage(activeChar, command);
  76. }
  77. else if (command.startsWith("admin_gmliston"))
  78. {
  79. GmListTable.getInstance().showGm(activeChar);
  80. activeChar.sendMessage("Registered into gm list");
  81. }
  82. else if (command.startsWith("admin_gmlistoff"))
  83. {
  84. GmListTable.getInstance().hideGm(activeChar);
  85. activeChar.sendMessage("Removed from gm list");
  86. }
  87. else if (command.startsWith("admin_silence"))
  88. {
  89. if (activeChar.getMessageRefusal()) // already in message refusal mode
  90. {
  91. activeChar.setMessageRefusal(false);
  92. activeChar.sendPacket(new SystemMessage(SystemMessageId.MESSAGE_ACCEPTANCE_MODE));
  93. }
  94. else
  95. {
  96. activeChar.setMessageRefusal(true);
  97. activeChar.sendPacket(new SystemMessage(SystemMessageId.MESSAGE_REFUSAL_MODE));
  98. }
  99. }
  100. else if (command.startsWith("admin_saveolymp"))
  101. {
  102. try
  103. {
  104. Olympiad.getInstance().save();
  105. }
  106. catch (Exception e)
  107. {
  108. e.printStackTrace();
  109. }
  110. activeChar.sendMessage("olympiad stuff saved!!");
  111. }
  112. else if (command.startsWith("admin_endolympiad"))
  113. {
  114. try
  115. {
  116. Olympiad.getInstance().manualSelectHeroes();
  117. }
  118. catch (Exception e)
  119. {
  120. e.printStackTrace();
  121. }
  122. activeChar.sendMessage("Heroes formed");
  123. }
  124. else if (command.startsWith("admin_manualhero") || command.startsWith("admin_sethero"))
  125. {
  126. L2PcInstance target = null;
  127. if (activeChar.getTarget() instanceof L2PcInstance)
  128. {
  129. target = (L2PcInstance) activeChar.getTarget();
  130. target.setHero(target.isHero() ? false : true);
  131. }
  132. else
  133. {
  134. target = activeChar;
  135. target.setHero(target.isHero() ? false : true);
  136. }
  137. }
  138. else if (command.startsWith("admin_diet"))
  139. {
  140. try
  141. {
  142. StringTokenizer st = new StringTokenizer(command);
  143. st.nextToken();
  144. if (st.nextToken().equalsIgnoreCase("on"))
  145. {
  146. activeChar.setDietMode(true);
  147. activeChar.sendMessage("Diet mode on");
  148. }
  149. else if (st.nextToken().equalsIgnoreCase("off"))
  150. {
  151. activeChar.setDietMode(false);
  152. activeChar.sendMessage("Diet mode off");
  153. }
  154. }
  155. catch (Exception ex)
  156. {
  157. if (activeChar.getDietMode())
  158. {
  159. activeChar.setDietMode(false);
  160. activeChar.sendMessage("Diet mode off");
  161. }
  162. else
  163. {
  164. activeChar.setDietMode(true);
  165. activeChar.sendMessage("Diet mode on");
  166. }
  167. }
  168. finally
  169. {
  170. activeChar.refreshOverloaded();
  171. }
  172. }
  173. else if (command.startsWith("admin_tradeoff"))
  174. {
  175. try
  176. {
  177. String mode = command.substring(15);
  178. if (mode.equalsIgnoreCase("on"))
  179. {
  180. activeChar.setTradeRefusal(true);
  181. activeChar.sendMessage("Trade refusal enabled");
  182. }
  183. else if (mode.equalsIgnoreCase("off"))
  184. {
  185. activeChar.setTradeRefusal(false);
  186. activeChar.sendMessage("Trade refusal disabled");
  187. }
  188. }
  189. catch (Exception ex)
  190. {
  191. if (activeChar.getTradeRefusal())
  192. {
  193. activeChar.setTradeRefusal(false);
  194. activeChar.sendMessage("Trade refusal disabled");
  195. }
  196. else
  197. {
  198. activeChar.setTradeRefusal(true);
  199. activeChar.sendMessage("Trade refusal enabled");
  200. }
  201. }
  202. }
  203. else if (command.startsWith("admin_reload"))
  204. {
  205. StringTokenizer st = new StringTokenizer(command);
  206. st.nextToken();
  207. try
  208. {
  209. String type = st.nextToken();
  210. if (type.equals("multisell"))
  211. {
  212. L2Multisell.getInstance().reload();
  213. activeChar.sendMessage("multisell reloaded");
  214. }
  215. else if (type.startsWith("teleport"))
  216. {
  217. TeleportLocationTable.getInstance().reloadAll();
  218. activeChar.sendMessage("teleport location table reloaded");
  219. }
  220. else if (type.startsWith("skill"))
  221. {
  222. SkillTable.getInstance().reload();
  223. activeChar.sendMessage("skills reloaded");
  224. }
  225. else if (type.equals("npc"))
  226. {
  227. NpcTable.getInstance().reloadAllNpc();
  228. activeChar.sendMessage("npcs reloaded");
  229. }
  230. else if (type.startsWith("htm"))
  231. {
  232. HtmCache.getInstance().reload();
  233. activeChar.sendMessage("Cache[HTML]: " + HtmCache.getInstance().getMemoryUsage() + " megabytes on " + HtmCache.getInstance().getLoadedFiles() + " files loaded");
  234. }
  235. else if (type.startsWith("item"))
  236. {
  237. ItemTable.getInstance().reload();
  238. activeChar.sendMessage("Item templates reloaded");
  239. }
  240. else if (type.startsWith("instancemanager"))
  241. {
  242. Manager.reloadAll();
  243. activeChar.sendMessage("All instance manager has been reloaded");
  244. }
  245. else if (type.startsWith("npcwalkers"))
  246. {
  247. NpcWalkerRoutesTable.getInstance().load();
  248. activeChar.sendMessage("All NPC walker routes have been reloaded");
  249. }
  250. else if (type.startsWith("access"))
  251. {
  252. AccessLevels.getInstance().reloadAccessLevels();
  253. AdminCommandAccessRights.getInstance().reloadAdminCommandAccessRights();
  254. activeChar.sendMessage("Access Rights have been reloaded");
  255. }
  256. }
  257. catch (Exception e)
  258. {
  259. activeChar.sendMessage("Usage: //reload <multisell|skill|npc|htm|item|instancemanager>");
  260. }
  261. }
  262. else if (command.startsWith("admin_set"))
  263. {
  264. StringTokenizer st = new StringTokenizer(command);
  265. String[] cmd = st.nextToken().split("_");
  266. try
  267. {
  268. String[] parameter = st.nextToken().split("=");
  269. String pName = parameter[0].trim();
  270. String pValue = parameter[1].trim();
  271. if (Config.setParameterValue(pName, pValue))
  272. activeChar.sendMessage("parameter " + pName + " succesfully set to " + pValue);
  273. else
  274. activeChar.sendMessage("Invalid parameter!");
  275. }
  276. catch (Exception e)
  277. {
  278. if (cmd.length == 2)
  279. activeChar.sendMessage("Usage: //set parameter=value");
  280. }
  281. finally
  282. {
  283. if (cmd.length == 3)
  284. {
  285. if (cmd[2].equalsIgnoreCase("menu"))
  286. AdminHelpPage.showHelpPage(activeChar, "settings.htm");
  287. else if (cmd[2].equalsIgnoreCase("mod"))
  288. AdminHelpPage.showHelpPage(activeChar, "mods_menu.htm");
  289. }
  290. }
  291. }
  292. return true;
  293. }
  294. public String[] getAdminCommandList()
  295. {
  296. return ADMIN_COMMANDS;
  297. }
  298. private void showMainPage(L2PcInstance activeChar, String command)
  299. {
  300. int mode = 0;
  301. String filename = null;
  302. try
  303. {
  304. mode = Integer.parseInt(command.substring(11));
  305. }
  306. catch (Exception e)
  307. {
  308. }
  309. switch (mode)
  310. {
  311. case 1:
  312. filename = "main";
  313. break;
  314. case 2:
  315. filename = "game";
  316. break;
  317. case 3:
  318. filename = "effects";
  319. break;
  320. case 4:
  321. filename = "server";
  322. break;
  323. case 5:
  324. filename = "mods";
  325. break;
  326. default:
  327. if (Config.GM_ADMIN_MENU_STYLE.equals("modern"))
  328. filename = "main";
  329. else
  330. filename = "classic";
  331. break;
  332. }
  333. AdminHelpPage.showHelpPage(activeChar, filename + "_menu.htm");
  334. }
  335. }