AdminBuffs.java 9.0 KB

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