Package lineage2.gameserver.network.clientpackets

Source Code of lineage2.gameserver.network.clientpackets.RequestBypassToServer

/*
* 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 <http://www.gnu.org/licenses/>.
*/
package lineage2.gameserver.network.clientpackets;

import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

import lineage2.gameserver.Config;
import lineage2.gameserver.data.xml.holder.MultiSellHolder;
import lineage2.gameserver.handler.admincommands.AdminCommandHandler;
import lineage2.gameserver.handler.voicecommands.IVoicedCommandHandler;
import lineage2.gameserver.handler.voicecommands.VoicedCommandHandler;
import lineage2.gameserver.instancemanager.BypassManager.DecodedBypass;
import lineage2.gameserver.instancemanager.OlympiadHistoryManager;
import lineage2.gameserver.model.Creature;
import lineage2.gameserver.model.GameObject;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.entity.Hero;
import lineage2.gameserver.model.entity.olympiad.Olympiad;
import lineage2.gameserver.model.instances.NpcInstance;
import lineage2.gameserver.model.instances.OlympiadManagerInstance;
import lineage2.gameserver.model.quest.dynamic.DynamicQuestController;
import lineage2.gameserver.network.GameClient;
import lineage2.gameserver.network.serverpackets.NpcHtmlMessage;
import lineage2.gameserver.network.serverpackets.SystemMessage;
import lineage2.gameserver.scripts.Scripts;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public class RequestBypassToServer extends L2GameClientPacket
{
  /**
   * Field _log.
   */
  private static final Logger _log = LoggerFactory.getLogger(RequestBypassToServer.class);
  /**
   * Field bp.
   */
  private DecodedBypass bp = null;
 
  /**
   * Method readImpl.
   */
  @Override
  protected void readImpl()
  {
    String bypass = readS();
    if (!bypass.isEmpty())
    {
      bp = getClient().getActiveChar().decodeBypass(bypass);
    }
  }
 
  /**
   * Method runImpl.
   */
  @Override
  protected void runImpl()
  {
    Player activeChar = getClient().getActiveChar();
    if ((activeChar == null) || (bp == null))
    {
      return;
    }
    try
    {
      NpcInstance npc = activeChar.getLastNpc();
      GameObject target = activeChar.getTarget();
      if ((npc == null) && (target != null) && target.isNpc())
      {
        npc = (NpcInstance) target;
      }
      if (bp.bypass.startsWith("admin_"))
      {
        AdminCommandHandler.getInstance().useAdminCommandHandler(activeChar, bp.bypass);
      }
      else if (bp.bypass.equals("come_here") && activeChar.isGM())
      {
        comeHere(getClient());
      }
      else if (bp.bypass.startsWith("player_help "))
      {
        playerHelp(activeChar, bp.bypass.substring(12));
      }
      else if (bp.bypass.startsWith("scripts_"))
      {
        String command = bp.bypass.substring(8).trim();
        String[] word = command.split("\\s+");
        String[] args = command.substring(word[0].length()).trim().split("\\s+");
        String[] path = word[0].split(":");
        if (path.length != 2)
        {
          _log.warn("Bad Script bypass!");
          return;
        }
        Map<String, Object> variables = null;
        if (npc != null)
        {
          variables = new HashMap<>(1);
          variables.put("npc", npc.getRef());
        }
        if (word.length == 1)
        {
          Scripts.getInstance().callScripts(activeChar, path[0], path[1], variables);
        }
        else
        {
          Scripts.getInstance().callScripts(activeChar, path[0], path[1], new Object[]
          {
            args
          }, variables);
        }
      }
      else if (bp.bypass.startsWith("user_"))
      {
        String command = bp.bypass.substring(5).trim();
        String word = command.split("\\s+")[0];
        String args = command.substring(word.length()).trim();
        IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(word);
        if (vch != null)
        {
          vch.useVoicedCommand(word, activeChar, args);
        }
        else
        {
          _log.warn("Unknow voiced command '" + word + "'");
        }
      }
      else if (bp.bypass.startsWith("npc_"))
      {
        int endOfId = bp.bypass.indexOf('_', 5);
        String id;
        if (endOfId > 0)
        {
          id = bp.bypass.substring(4, endOfId);
        }
        else
        {
          id = bp.bypass.substring(4);
        }
        GameObject object = activeChar.getVisibleObject(Integer.parseInt(id));
        if ((object != null) && object.isNpc() && (endOfId > 0) && activeChar.isInRange(object.getLoc(), Creature.INTERACTION_DISTANCE))
        {
          activeChar.setLastNpc((NpcInstance) object);
          ((NpcInstance) object).onBypassFeedback(activeChar, bp.bypass.substring(endOfId + 1));
        }
      }
      else if (bp.bypass.startsWith("_olympiad?"))
      {
        String[] ar = bp.bypass.replace("_olympiad?", "").split("&");
        String firstVal = ar[0].split("=")[1];
        String secondVal = ar[1].split("=")[1];
        if (firstVal.equalsIgnoreCase("move_op_field"))
        {
          if (!Config.ENABLE_OLYMPIAD_SPECTATING)
          {
            return;
          }
          if (((activeChar.getLastNpc() instanceof OlympiadManagerInstance) && activeChar.getLastNpc().isInRange(activeChar, Creature.INTERACTION_DISTANCE)) || (activeChar.getOlympiadObserveGame() != null))
          {
            Olympiad.addSpectator(Integer.parseInt(secondVal) - 1, activeChar);
          }
        }
      }
      else if (bp.bypass.startsWith("_diary"))
      {
        String params = bp.bypass.substring(bp.bypass.indexOf("?") + 1);
        StringTokenizer st = new StringTokenizer(params, "&");
        int heroclass = Integer.parseInt(st.nextToken().split("=")[1]);
        int heropage = Integer.parseInt(st.nextToken().split("=")[1]);
        int heroid = Hero.getInstance().getHeroByClass(heroclass);
        if (heroid > 0)
        {
          Hero.getInstance().showHeroDiary(activeChar, heroclass, heroid, heropage);
        }
      }
      else if (bp.bypass.startsWith("_match"))
      {
        String params = bp.bypass.substring(bp.bypass.indexOf("?") + 1);
        StringTokenizer st = new StringTokenizer(params, "&");
        int heroclass = Integer.parseInt(st.nextToken().split("=")[1]);
        int heropage = Integer.parseInt(st.nextToken().split("=")[1]);
        OlympiadHistoryManager.getInstance().showHistory(activeChar, heroclass, heropage);
      }
      else if (bp.bypass.startsWith("manor_menu_select?"))
      {
        GameObject object = activeChar.getTarget();
        if ((object != null) && object.isNpc())
        {
          ((NpcInstance) object).onBypassFeedback(activeChar, bp.bypass);
        }
      }
      else if (bp.bypass.startsWith("multisell "))
      {
        MultiSellHolder.getInstance().SeparateAndSend(Integer.parseInt(bp.bypass.substring(10)), activeChar, 0);
      }
      else if (bp.bypass.startsWith("menu_select?"))
      {
        String params = bp.bypass.substring(bp.bypass.indexOf("?") + 1);
        StringTokenizer st = new StringTokenizer(params, "&");
        int ask = Integer.parseInt(st.nextToken().split("=")[1]);
        int reply = Integer.parseInt(st.nextToken().split("=")[1]);
        if (npc != null)
        {
          npc.onMenuSelect(activeChar, ask, reply);
        }
      }
      else if (bp.bypass.startsWith("Quest "))
      {
        String p = bp.bypass.substring(6).trim();
        int idx = p.indexOf(' ');
        if (idx < 0)
        {
          activeChar.processQuestEvent(p, "", npc);
        }
        else
        {
          activeChar.processQuestEvent(p.substring(0, idx), p.substring(idx).trim(), npc);
        }
      }
      else if (bp.bypass.startsWith("Campaign "))
      {
        String p = bp.bypass.substring(9).trim();
        int idx = p.indexOf(' ');
        if (idx > 0) {
          String campaignName = p.substring(0, idx);
          DynamicQuestController.getInstance().processDialogEvent(campaignName, p.substring(idx).trim(), activeChar);
        }
      }
      else if (bp.handler != null)
      {
        if (!Config.COMMUNITYBOARD_ENABLED)
        {
          activeChar.sendPacket(new SystemMessage(SystemMessage.THE_COMMUNITY_SERVER_IS_CURRENTLY_OFFLINE));
        }
        else
        {
          bp.handler.onBypassCommand(activeChar, bp.bypass);
        }
      }
    }
    catch (Exception e)
    {
      String st = "Bad RequestBypassToServer: " + bp.bypass;
      GameObject target = activeChar.getTarget();
      if ((target != null) && target.isNpc())
      {
        st = st + " via NPC #" + ((NpcInstance) target).getNpcId();
      }
      _log.error(st, e);
    }
  }
 
  /**
   * Method comeHere.
   * @param client GameClient
   */
  private static void comeHere(GameClient client)
  {
    GameObject obj = client.getActiveChar().getTarget();
    if ((obj != null) && obj.isNpc())
    {
      NpcInstance temp = (NpcInstance) obj;
      Player activeChar = client.getActiveChar();
      temp.setTarget(activeChar);
      temp.moveToLocation(activeChar.getLoc(), 0, true);
    }
  }
 
  /**
   * Method playerHelp.
   * @param activeChar Player
   * @param path String
   */
  private static void playerHelp(Player activeChar, String path)
  {
    NpcHtmlMessage html = new NpcHtmlMessage(5);
    html.setFile(path);
    activeChar.sendPacket(html);
  }
}
TOP

Related Classes of lineage2.gameserver.network.clientpackets.RequestBypassToServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.