AdminBuffs.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. package handlers.admincommandhandlers;
  2. import java.util.StringTokenizer;
  3. import com.l2jserver.Config;
  4. import com.l2jserver.gameserver.datatables.GMSkillTable;
  5. import com.l2jserver.gameserver.handler.IAdminCommandHandler;
  6. import com.l2jserver.gameserver.model.L2Effect;
  7. import com.l2jserver.gameserver.model.L2World;
  8. import com.l2jserver.gameserver.model.actor.L2Character;
  9. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  10. import com.l2jserver.gameserver.network.SystemMessageId;
  11. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  12. import com.l2jserver.gameserver.network.serverpackets.SkillCoolTime;
  13. import com.l2jserver.gameserver.util.GMAudit;
  14. import com.l2jserver.util.StringUtil;
  15. public class AdminBuffs implements IAdminCommandHandler
  16. {
  17. private final static int PAGE_LIMIT = 20;
  18. private static final String[] ADMIN_COMMANDS =
  19. {
  20. "admin_getbuffs",
  21. "admin_stopbuff",
  22. "admin_stopallbuffs",
  23. "admin_areacancel",
  24. "admin_removereuse",
  25. "admin_switch_gm_buffs"
  26. };
  27. public boolean useAdminCommand(String command, L2PcInstance activeChar)
  28. {
  29. if (command.startsWith("admin_getbuffs"))
  30. {
  31. StringTokenizer st = new StringTokenizer(command, " ");
  32. command = st.nextToken();
  33. if (st.hasMoreTokens())
  34. {
  35. L2PcInstance player = null;
  36. String playername = st.nextToken();
  37. try
  38. {
  39. player = L2World.getInstance().getPlayer(playername);
  40. }
  41. catch (Exception e)
  42. {
  43. }
  44. if (player != null)
  45. {
  46. int page = 1;
  47. if (st.hasMoreTokens())
  48. page = Integer.parseInt(st.nextToken());
  49. showBuffs(activeChar, player, page);
  50. return true;
  51. }
  52. else
  53. {
  54. activeChar.sendMessage("The player " + playername + " is not online");
  55. return false;
  56. }
  57. }
  58. else if ((activeChar.getTarget() != null) && (activeChar.getTarget() instanceof L2Character))
  59. {
  60. showBuffs(activeChar, (L2Character) activeChar.getTarget(), 1);
  61. return true;
  62. }
  63. else
  64. {
  65. activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
  66. return false;
  67. }
  68. }
  69. else if (command.startsWith("admin_stopbuff"))
  70. {
  71. try
  72. {
  73. StringTokenizer st = new StringTokenizer(command, " ");
  74. st.nextToken();
  75. int objectId = Integer.parseInt(st.nextToken());
  76. int skillId = Integer.parseInt(st.nextToken());
  77. removeBuff(activeChar, objectId, skillId);
  78. return true;
  79. }
  80. catch (Exception e)
  81. {
  82. activeChar.sendMessage("Failed removing effect: " + e.getMessage());
  83. activeChar.sendMessage("Usage: //stopbuff <objectId> <skillId>");
  84. return false;
  85. }
  86. }
  87. else if (command.startsWith("admin_stopallbuffs"))
  88. {
  89. try
  90. {
  91. StringTokenizer st = new StringTokenizer(command, " ");
  92. st.nextToken();
  93. int objectId = Integer.parseInt(st.nextToken());
  94. removeAllBuffs(activeChar, objectId);
  95. return true;
  96. }
  97. catch (Exception e)
  98. {
  99. activeChar.sendMessage("Failed removing all effects: " + e.getMessage());
  100. activeChar.sendMessage("Usage: //stopallbuffs <objectId>");
  101. return false;
  102. }
  103. }
  104. else if (command.startsWith("admin_areacancel"))
  105. {
  106. StringTokenizer st = new StringTokenizer(command, " ");
  107. st.nextToken();
  108. String val = st.nextToken();
  109. try
  110. {
  111. int radius = Integer.parseInt(val);
  112. for (L2Character knownChar : activeChar.getKnownList().getKnownCharactersInRadius(radius))
  113. {
  114. if ((knownChar instanceof L2PcInstance) && !(knownChar.equals(activeChar)))
  115. knownChar.stopAllEffects();
  116. }
  117. activeChar.sendMessage("All effects canceled within raidus " + radius);
  118. return true;
  119. }
  120. catch (NumberFormatException e)
  121. {
  122. activeChar.sendMessage("Usage: //areacancel <radius>");
  123. return false;
  124. }
  125. }
  126. else if (command.startsWith("admin_removereuse"))
  127. {
  128. StringTokenizer st = new StringTokenizer(command, " ");
  129. command = st.nextToken();
  130. L2PcInstance player = null;
  131. if (st.hasMoreTokens())
  132. {
  133. String playername = st.nextToken();
  134. try
  135. {
  136. player = L2World.getInstance().getPlayer(playername);
  137. }
  138. catch (Exception e)
  139. {
  140. }
  141. if (player == null)
  142. {
  143. activeChar.sendMessage("The player " + playername + " is not online.");
  144. return false;
  145. }
  146. }
  147. else if (activeChar.getTarget() instanceof L2PcInstance)
  148. {
  149. player = (L2PcInstance) activeChar.getTarget();
  150. }
  151. else
  152. {
  153. activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
  154. return false;
  155. }
  156. try
  157. {
  158. player.getReuseTimeStamp().clear();
  159. player.getDisabledSkills().clear();
  160. player.sendPacket(new SkillCoolTime(player));
  161. activeChar.sendMessage("Skill reuse was removed from " + player.getName() + ".");
  162. return true;
  163. }
  164. catch (NullPointerException e)
  165. {
  166. return false;
  167. }
  168. }
  169. else if (command.startsWith("admin_switch_gm_buffs"))
  170. {
  171. if (Config.GM_GIVE_SPECIAL_SKILLS != Config.GM_GIVE_SPECIAL_AURA_SKILLS)
  172. {
  173. final boolean toAuraSkills = activeChar.getKnownSkill(7041) != null;
  174. GMSkillTable.getInstance().switchSkills(activeChar, toAuraSkills);
  175. activeChar.sendSkillList();
  176. activeChar.sendMessage("You have succefully changed to target " + (toAuraSkills ? "aura" : "one") + " special skills.");
  177. return true;
  178. }
  179. else
  180. {
  181. activeChar.sendMessage("There is nothing to switch.");
  182. return false;
  183. }
  184. }
  185. else
  186. {
  187. return true;
  188. }
  189. }
  190. public String[] getAdminCommandList()
  191. {
  192. return ADMIN_COMMANDS;
  193. }
  194. public void showBuffs(L2PcInstance activeChar, L2Character target, int page)
  195. {
  196. final L2Effect[] effects = target.getAllEffects();
  197. if (page > effects.length / PAGE_LIMIT + 1 || page < 1)
  198. return;
  199. int max = effects.length / PAGE_LIMIT;
  200. if (effects.length > PAGE_LIMIT * max)
  201. max++;
  202. final StringBuilder html = StringUtil.startAppend(500 + effects.length * 200,
  203. "<html><table width=\"100%\"><tr><td width=45><button value=\"Main\" action=\"bypass -h admin_admin\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td><td width=180><center><font color=\"LEVEL\">Effects of ",
  204. target.getName(),
  205. "</font></td><td width=45><button value=\"Back\" action=\"bypass -h admin_current_player\" width=45 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr></table><br><table width=\"100%\"><tr><td width=200>Skill</td><td width=30>Rem. Time</td><td width=70>Action</td></tr>");
  206. int start = ((page - 1) * PAGE_LIMIT);
  207. int end = Math.min(((page - 1) * PAGE_LIMIT) + PAGE_LIMIT, effects.length);
  208. for (int i = start; i < end; i++)
  209. {
  210. L2Effect e = effects[i];
  211. if (e != null)
  212. {
  213. StringUtil.append(html,
  214. "<tr><td>",
  215. e.getSkill().getName(),
  216. "</td><td>",
  217. e.getSkill().isToggle() ? "toggle" : e.getAbnormalTime() - e.getTime() + "s",
  218. "</td><td><button value=\"Remove\" action=\"bypass -h admin_stopbuff ",
  219. Integer.toString(target.getObjectId()),
  220. " ",
  221. String.valueOf(e.getSkill().getId()),
  222. "\" width=60 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
  223. }
  224. }
  225. html.append("</table><table width=300 bgcolor=444444><tr>");
  226. for (int x = 0; x < max; x++)
  227. {
  228. int pagenr = x + 1;
  229. if (page == pagenr)
  230. {
  231. html.append("<td>Page ");
  232. html.append(pagenr);
  233. html.append("</td>");
  234. }
  235. else
  236. {
  237. html.append("<td><a action=\"bypass -h admin_getbuffs ");
  238. html.append(target.getName());
  239. html.append(" ");
  240. html.append(x + 1);
  241. html.append("\"> Page ");
  242. html.append(pagenr);
  243. html.append(" </a></td>");
  244. }
  245. }
  246. html.append("</tr></table>");
  247. StringUtil.append(html, "<br><center><button value=\"Remove All\" action=\"bypass -h admin_stopallbuffs ",
  248. Integer.toString(target.getObjectId()),
  249. "\" width=80 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></html>");
  250. NpcHtmlMessage ms = new NpcHtmlMessage(1);
  251. ms.setHtml(html.toString());
  252. activeChar.sendPacket(ms);
  253. if (Config.GMAUDIT)
  254. GMAudit.auditGMAction(activeChar.getName()+" ["+activeChar.getObjectId()+"]", "getbuffs", target.getName() + " (" + Integer.toString(target.getObjectId()) + ")", "");
  255. }
  256. private void removeBuff(L2PcInstance activeChar, int objId, int skillId)
  257. {
  258. L2Character target = null;
  259. try
  260. {
  261. target = (L2Character) L2World.getInstance().findObject(objId);
  262. }
  263. catch (Exception e)
  264. {
  265. }
  266. if ((target != null) && (skillId > 0))
  267. {
  268. L2Effect[] effects = target.getAllEffects();
  269. for (L2Effect e : effects)
  270. {
  271. if ((e != null) && (e.getSkill().getId() == skillId))
  272. {
  273. e.exit();
  274. activeChar.sendMessage("Removed " + e.getSkill().getName() + " level " + e.getSkill().getLevel() + " from " + target.getName() + " (" + objId + ")");
  275. }
  276. }
  277. showBuffs(activeChar, target, 1);
  278. if (Config.GMAUDIT)
  279. GMAudit.auditGMAction(activeChar.getName()+" ["+activeChar.getObjectId()+"]", "stopbuff", target.getName() + " (" + objId + ")", Integer.toString(skillId));
  280. }
  281. }
  282. private void removeAllBuffs(L2PcInstance activeChar, int objId)
  283. {
  284. L2Character target = null;
  285. try
  286. {
  287. target = (L2Character) L2World.getInstance().findObject(objId);
  288. }
  289. catch (Exception e)
  290. {
  291. }
  292. if (target != null)
  293. {
  294. target.stopAllEffects();
  295. activeChar.sendMessage("Removed all effects from " + target.getName() + " (" + objId + ")");
  296. showBuffs(activeChar, target, 1);
  297. if (Config.GMAUDIT)
  298. GMAudit.auditGMAction(activeChar.getName()+" ["+activeChar.getObjectId()+"]", "stopallbuffs", target.getName() + " (" + objId + ")", "");
  299. }
  300. }
  301. }