/* * This file is part of the L2J Mobius project. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package handlers.admincommandhandlers; import java.util.Arrays; import java.util.StringTokenizer; import com.l2jmobius.Config; import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.enums.Movie; import com.l2jmobius.gameserver.enums.Team; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2ChestInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.holders.MovieHolder; import com.l2jmobius.gameserver.model.html.PageBuilder; import com.l2jmobius.gameserver.model.html.PageResult; import com.l2jmobius.gameserver.model.html.styles.ButtonsStyle; import com.l2jmobius.gameserver.model.skills.AbnormalVisualEffect; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.Earthquake; import com.l2jmobius.gameserver.network.serverpackets.ExRedSky; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger; import com.l2jmobius.gameserver.network.serverpackets.PlaySound; import com.l2jmobius.gameserver.network.serverpackets.SocialAction; import com.l2jmobius.gameserver.network.serverpackets.SunRise; import com.l2jmobius.gameserver.network.serverpackets.SunSet; import com.l2jmobius.gameserver.util.Broadcast; import com.l2jmobius.gameserver.util.Util; /** * This class handles following admin commands: *
  • invis/invisible/vis/visible = makes yourself invisible or visible *
  • earthquake = causes an earthquake of a given intensity and duration around you *
  • bighead/shrinkhead = changes head size *
  • gmspeed = temporary Super Haste effect. *
  • para/unpara = paralyze/remove paralysis from target *
  • para_all/unpara_all = same as para/unpara, affects the whole world. *
  • polyself/unpolyself = makes you look as a specified mob. *
  • changename = temporary change name *
  • clearteams/setteam_close/setteam = team related commands *
  • social = forces an L2Character instance to broadcast social action packets. *
  • effect = forces an L2Character instance to broadcast MSU packets. *
  • abnormal = force changes over an L2Character instance's abnormal state. *
  • play_sound/play_sounds = Music broadcasting related commands *
  • atmosphere = sky change related commands. */ public class AdminEffects implements IAdminCommandHandler { private static final String[] ADMIN_COMMANDS = { "admin_invis", "admin_invisible", "admin_setinvis", "admin_vis", "admin_visible", "admin_invis_menu", "admin_earthquake", "admin_earthquake_menu", "admin_bighead", "admin_shrinkhead", "admin_gmspeed", "admin_gmspeed_menu", "admin_unpara_all", "admin_para_all", "admin_unpara", "admin_para", "admin_unpara_all_menu", "admin_para_all_menu", "admin_unpara_menu", "admin_para_menu", "admin_polyself", "admin_unpolyself", "admin_polyself_menu", "admin_unpolyself_menu", "admin_clearteams", "admin_setteam_close", "admin_setteam", "admin_social", "admin_effect", "admin_effect_menu", "admin_ave_abnormal", "admin_social_menu", "admin_play_sounds", "admin_play_sound", "admin_atmosphere", "admin_atmosphere_menu", "admin_set_displayeffect", "admin_set_displayeffect_menu", "admin_event_trigger", "admin_settargetable", "admin_playmovie", }; @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { final StringTokenizer st = new StringTokenizer(command); st.nextToken(); if (command.equals("admin_invis_menu")) { if (!activeChar.isInvisible()) { activeChar.setInvisible(true); activeChar.broadcastUserInfo(); activeChar.decayMe(); activeChar.spawnMe(); activeChar.startAbnormalVisualEffect(AbnormalVisualEffect.STEALTH); activeChar.sendMessage("You are now invisible."); } else { activeChar.setInvisible(false); activeChar.broadcastUserInfo(); activeChar.stopAbnormalVisualEffect(AbnormalVisualEffect.STEALTH); activeChar.sendMessage("You are now visible."); } command = ""; AdminHtml.showAdminHtml(activeChar, "gm_menu.htm"); } else if (command.startsWith("admin_invis")) { activeChar.setInvisible(true); activeChar.broadcastUserInfo(); activeChar.decayMe(); activeChar.spawnMe(); activeChar.startAbnormalVisualEffect(AbnormalVisualEffect.STEALTH); activeChar.sendMessage("You are now invisible."); } else if (command.startsWith("admin_vis")) { activeChar.setInvisible(false); activeChar.broadcastUserInfo(); activeChar.stopAbnormalVisualEffect(AbnormalVisualEffect.STEALTH); activeChar.sendMessage("You are now visible."); } else if (command.startsWith("admin_setinvis")) { if ((activeChar.getTarget() == null) || !activeChar.getTarget().isCharacter()) { activeChar.sendPacket(SystemMessageId.INVALID_TARGET); return false; } final L2Character target = (L2Character) activeChar.getTarget(); target.setInvisible(!target.isInvisible()); activeChar.sendMessage("You've made " + target.getName() + " " + (target.isInvisible() ? "invisible" : "visible") + "."); if (target.isPlayer()) { ((L2PcInstance) target).broadcastUserInfo(); } } else if (command.startsWith("admin_earthquake")) { try { final String val1 = st.nextToken(); final int intensity = Integer.parseInt(val1); final String val2 = st.nextToken(); final int duration = Integer.parseInt(val2); final Earthquake eq = new Earthquake(activeChar.getX(), activeChar.getY(), activeChar.getZ(), intensity, duration); activeChar.broadcastPacket(eq); } catch (Exception e) { activeChar.sendMessage("Usage: //earthquake "); } } else if (command.startsWith("admin_atmosphere")) { try { final String type = st.nextToken(); final String state = st.nextToken(); final int duration = Integer.parseInt(st.nextToken()); adminAtmosphere(type, state, duration, activeChar); } catch (Exception ex) { activeChar.sendMessage("Usage: //atmosphere | "); } } else if (command.equals("admin_play_sounds")) { AdminHtml.showAdminHtml(activeChar, "songs/songs.htm"); } else if (command.startsWith("admin_play_sounds")) { try { AdminHtml.showAdminHtml(activeChar, "songs/songs" + command.substring(18) + ".htm"); } catch (StringIndexOutOfBoundsException e) { activeChar.sendMessage("Usage: //play_sounds "); } } else if (command.startsWith("admin_play_sound")) { try { playAdminSound(activeChar, command.substring(17)); } catch (StringIndexOutOfBoundsException e) { activeChar.sendMessage("Usage: //play_sound "); } } else if (command.equals("admin_para_all")) { L2World.getInstance().forEachVisibleObject(activeChar, L2PcInstance.class, player -> { if (!player.isGM()) { player.startAbnormalVisualEffect(AbnormalVisualEffect.PARALYZE); player.setBlockActions(true); player.startParalyze(); player.broadcastInfo(); } }); } else if (command.equals("admin_unpara_all")) { L2World.getInstance().forEachVisibleObject(activeChar, L2PcInstance.class, player -> { player.stopAbnormalVisualEffect(AbnormalVisualEffect.PARALYZE); player.setBlockActions(false); player.broadcastInfo(); }); } else if (command.startsWith("admin_para")) // || command.startsWith("admin_para_menu")) { String type = "1"; try { type = st.nextToken(); } catch (Exception e) { } try { final L2Object target = activeChar.getTarget(); L2Character player = null; if (target instanceof L2Character) { player = (L2Character) target; if (type.equals("1")) { player.startAbnormalVisualEffect(AbnormalVisualEffect.PARALYZE); } else { player.startAbnormalVisualEffect(AbnormalVisualEffect.FLESH_STONE); } player.setBlockActions(true); player.startParalyze(); player.broadcastInfo(); } } catch (Exception e) { } } else if (command.startsWith("admin_unpara")) // || command.startsWith("admin_unpara_menu")) { String type = "1"; try { type = st.nextToken(); } catch (Exception e) { } try { final L2Object target = activeChar.getTarget(); L2Character player = null; if (target instanceof L2Character) { player = (L2Character) target; if (type.equals("1")) { player.stopAbnormalVisualEffect(AbnormalVisualEffect.PARALYZE); } else { player.stopAbnormalVisualEffect(AbnormalVisualEffect.FLESH_STONE); } player.setBlockActions(false); player.broadcastInfo(); } } catch (Exception e) { } } else if (command.startsWith("admin_bighead")) { try { final L2Object target = activeChar.getTarget(); L2Character player = null; if (target instanceof L2Character) { player = (L2Character) target; player.startAbnormalVisualEffect(AbnormalVisualEffect.BIG_HEAD); } } catch (Exception e) { } } else if (command.startsWith("admin_shrinkhead")) { try { final L2Object target = activeChar.getTarget(); L2Character player = null; if (target instanceof L2Character) { player = (L2Character) target; player.stopAbnormalVisualEffect(AbnormalVisualEffect.BIG_HEAD); } } catch (Exception e) { } } else if (command.startsWith("admin_gmspeed")) { try { final int val = Integer.parseInt(st.nextToken()); final boolean sendMessage = activeChar.isAffectedBySkill(7029); activeChar.stopSkillEffects((val == 0) && sendMessage, 7029); if ((val >= 1) && (val <= 4)) { int time = 0; if (st.hasMoreTokens()) { time = Integer.parseInt(st.nextToken()); } final Skill gmSpeedSkill = SkillData.getInstance().getSkill(7029, val); gmSpeedSkill.applyEffects(activeChar, activeChar, true, time); } } catch (Exception e) { activeChar.sendMessage("Usage: //gmspeed