@Override
  public void onBypassFeedback(Player player, String command) {
    if (!canBypassCheck(player, this)) return;

    if (command.startsWith("BuyTicket") && state != ACCEPTING_BETS) {
      player.sendPacket(SystemMsg.MONSTER_RACE_TICKETS_ARE_NO_LONGER_AVAILABLE);
      command = "Chat 0";
    }
    if (command.startsWith("ShowOdds") && state == ACCEPTING_BETS) {
      player.sendPacket(
          SystemMsg.MONSTER_RACE_PAYOUT_INFORMATION_IS_NOT_AVAILABLE_WHILE_TICKETS_ARE_BEING_SOLD);
      command = "Chat 0";
    }

    if (command.startsWith("BuyTicket")) {
      int val = Integer.parseInt(command.substring(10));
      if (val == 0) {
        player.setRace(0, 0);
        player.setRace(1, 0);
      }
      if (val == 10 && player.getRace(0) == 0
          || val == 20 && player.getRace(0) == 0 && player.getRace(1) == 0) val = 0;
      showBuyTicket(player, val);
    } else if (command.equals("ShowOdds")) showOdds(player);
    else if (command.equals("ShowInfo")) showMonsterInfo(player);
    else if (command.equals("calculateWin")) {
      // displayCalculateWinnings(player);
    } else if (command.equals("viewHistory")) {
      // displayHistory(player);
    } else super.onBypassFeedback(player, command);
  }
  @Override
  public void onBypassFeedback(Player player, String command) {
    if (!canBypassCheck(player, this)) return;

    if (player.getEnchantScroll() != null) {
      Log.add(
          "Player "
              + player.getName()
              + " trying to use enchant exploit[Warehouse], ban this player!",
          "illegal-actions");
      player.setEnchantScroll(null);
      return;
    }

    if (command.startsWith("WithdrawP")) {
      int val = Integer.parseInt(command.substring(10));
      if (val == 99) {
        NpcHtmlMessage html = new NpcHtmlMessage(player, this);
        html.setFile("warehouse/personal.htm");
        html.replace("%npcname%", getName());
        player.sendPacket(html);
      } else WarehouseFunctions.showRetrieveWindow(player, val);
    } else if (command.equals("DepositP")) WarehouseFunctions.showDepositWindow(player);
    else if (command.startsWith("WithdrawC")) {
      int val = Integer.parseInt(command.substring(10));
      if (val == 99) {
        NpcHtmlMessage html = new NpcHtmlMessage(player, this);
        html.setFile("warehouse/clan.htm");
        html.replace("%npcname%", getName());
        player.sendPacket(html);
      } else WarehouseFunctions.showWithdrawWindowClan(player, val);
    } else if (command.equals("DepositC")) WarehouseFunctions.showDepositWindowClan(player);
    else super.onBypassFeedback(player, command);
  }
  @Override
  protected void onSpawn() {
    super.onSpawn();

    getTemplate().setSpawned(this);
    startAutoSaveTask();
    setRunning();
  }
  @Override
  protected void onDespawn() {
    stopAutoSaveTask();
    store();

    super.onDespawn();

    getTemplate().setSpawned(null);
  }
  @Override
  public void onBypassFeedback(Player player, String command) {
    if (!canBypassCheck(player, this)) return;

    StringTokenizer st = new StringTokenizer(command, " ");
    String actualCommand = st.nextToken();
    boolean condition = validateCondition(player);

    if (actualCommand.equalsIgnoreCase("RideHelp")) {
      NpcHtmlMessage html = new NpcHtmlMessage(player, this);
      html.setFile("wyvern/help_ride.htm");
      html.replace("%npcname%", "Wyvern Manager " + getName());
      player.sendPacket(html);
      player.sendActionFailed();
    }
    if (condition) {
      if (actualCommand.equalsIgnoreCase("RideWyvern") && player.isClanLeader())
        if (!player.isRiding() || !PetDataTable.isStrider(player.getMountNpcId())) {
          NpcHtmlMessage html = new NpcHtmlMessage(player, this);
          html.setFile("wyvern/not_ready.htm");
          html.replace("%npcname%", "Wyvern Manager " + getName());
          player.sendPacket(html);
        } else if (player.getInventory().getItemByItemId(1460) == null
            || player.getInventory().getItemByItemId(1460).getCount() < 25) {
          NpcHtmlMessage html = new NpcHtmlMessage(player, this);
          html.setFile("wyvern/havenot_cry.htm");
          html.replace("%npcname%", "Wyvern Manager " + getName());
          player.sendPacket(html);
        } else if (player.getInventory().destroyItemByItemId(1460, 25L)) {
          player.setMount(PetDataTable.WYVERN_ID, player.getMountObjId(), player.getMountLevel());
          NpcHtmlMessage html = new NpcHtmlMessage(player, this);
          html.setFile("wyvern/after_ride.htm");
          html.replace("%npcname%", "Wyvern Manager " + getName());
          player.sendPacket(html);
        }
    } else super.onBypassFeedback(player, command);
  }