Package

Source Code of Util

import l2p.Config;
import l2p.common.ThreadPoolManager;
import l2p.extensions.multilang.CustomMessage;
import l2p.extensions.scripts.Functions;
import l2p.extensions.scripts.ScriptFile;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.geodata.GeoEngine;
import l2p.gameserver.instancemanager.TownManager;
import l2p.gameserver.instancemanager.ZoneManager;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Object;
import l2p.gameserver.model.L2Playable;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.L2Skill;
import l2p.gameserver.model.L2Skill.SkillType;
import l2p.gameserver.model.L2Zone;
import l2p.gameserver.model.L2Zone.ZoneType;
import l2p.gameserver.model.entity.SevenSigns;
import l2p.gameserver.model.entity.residence.Castle;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.tables.ReflectionTable;
import l2p.gameserver.tables.SkillTable;
import l2p.util.Location;

public class Util extends Functions implements ScriptFile
{
  public void onLoad()
  {
    System.out.println("Utilites Loaded");
  }

  public void onReload()
  {
  }

  public void onShutdown()
  {
  }

  /**
   * Перемещает за плату в аденах
   *
   * @param x
   * @param y
   * @param z
   * @param price
   */
  public void Gatekeeper(String[] param)
  {
    if(param.length < 4)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    long price = Long.parseLong(param[3]);
    if(!L2NpcInstance.canBypassCheck(player, player.getLastNpc()))
    {
      return;
    }
    if(price > 0 && player.getAdena() < price)
    {
      player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
      return;
    }
    if(player.isTerritoryFlagEquipped() || player.isCombatFlagEquipped())
    {
      player.sendPacket(Msg.YOU_CANNOT_TELEPORT_WHILE_IN_POSSESSION_OF_A_WARD);
      return;
    }
    if(player.getMountType() == 2)
    {
      player.sendMessage("Телепортация верхом на виверне невозможна.");
      return;
    }
    // player can not teleport in frog transformation _194_SevenSignContractOfMammon
    if (player.getTransformation() == 111)
    {
      player.sendMessage("Вы не можете телепортироватся в этой трансформации.");
      return;
    }
    /* Затычка, npc Mozella не ТПшит чаров уровень которых превышает заданный в конфиге
    * Off Like >= 56 lvl, данные по ограничению lvl'a устанавливаются в altsettings.ini.
    */
    if(player.getLastNpc() != null)
    {
      int mozella_cruma = 30483; // NPC Mozella id 30483
      if(player.getLastNpc().getNpcId() == mozella_cruma && player.getLevel() >= Config.CRUMA_GATEKEEPER_LVL)
      {
        show("data/html/teleporter/30483-no.htm", player);
        return;
      }
    }
    int x = Integer.parseInt(param[0]);
    int y = Integer.parseInt(param[1]);
    int z = Integer.parseInt(param[2]);
    // Нельзя телепортироваться в города, где идет осада
    // Узнаем, идет ли осада в ближайшем замке к точке телепортации
    Castle castle = TownManager.getInstance().getClosestTown(x, y).getCastle();
    if(castle != null && castle.getSiege().isInProgress())
    {
      // Определяем, в город ли телепортируется чар
      boolean teleToTown = false;
      int townId = 0;
      for(L2Zone town : ZoneManager.getInstance().getZoneByType(ZoneType.Town))
      {
        if(town.checkIfInZone(x, y))
        {
          teleToTown = true;
          townId = town.getIndex();
          break;
        }
      }
      if(teleToTown && townId == castle.getTown())
      {
        player.sendPacket(Msg.YOU_CANNOT_TELEPORT_TO_A_VILLAGE_THAT_IS_IN_A_SIEGE);
        return;
      }
    }
    Location pos = GeoEngine.findPointToStay(x, y, z, 50, 100, player.getReflection().getGeoIndex());
    if(price > 0)
    {
      player.reduceAdena(price, true);
    }
    player.teleToLocation(pos);
  }

  public void SSGatekeeper(String[] param)
  {
    if(param.length < 4)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    int type = Integer.parseInt(param[3]);
    if(!L2NpcInstance.canBypassCheck(player, player.getLastNpc()))
    {
      return;
    }
    if(type > 0)
    {
      int player_cabal = SevenSigns.getInstance().getPlayerCabal(player);
      int period = SevenSigns.getInstance().getCurrentPeriod();
      if(period == SevenSigns.PERIOD_COMPETITION && player_cabal == SevenSigns.CABAL_NULL)
      {
        player.sendPacket(Msg.USED_ONLY_DURING_A_QUEST_EVENT_PERIOD);
        return;
      }
      int winner;
      if(period == SevenSigns.PERIOD_SEAL_VALIDATION && (winner = SevenSigns.getInstance().getCabalHighestScore()) != SevenSigns.CABAL_NULL)
      {
        if(winner != player_cabal)
        {
          return;
        }
        if(type == 1 && SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_AVARICE) != player_cabal)
        {
          return;
        }
        if(type == 2 && SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_GNOSIS) != player_cabal)
        {
          return;
        }
      }
    }
    player.teleToLocation(Integer.parseInt(param[0]), Integer.parseInt(param[1]), Integer.parseInt(param[2]));
  }

  /**
   * Перемещает за определенный предмет
   *
   * @param x
   * @param y
   * @param z
   * @param count
   * @param item
   */
  public void QuestGatekeeper(String[] param)
  {
    if(param.length < 5)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    if(player.isTerritoryFlagEquipped())
    {
      player.sendPacket(Msg.YOU_CANNOT_TELEPORT_WHILE_IN_POSSESSION_OF_A_WARD);
      return;
    }
    long count = Long.parseLong(param[3]);
    int item = Integer.parseInt(param[4]);
    if(!L2NpcInstance.canBypassCheck(player, player.getLastNpc()))
    {
      return;
    }
    if(count > 0)
    {
      L2ItemInstance ii = player.getInventory().getItemByItemId(item);
      if(ii == null || ii.getCount() < count)
      {
        player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_REQUIRED_ITEMS);
        return;
      }
      player.getInventory().destroyItem(ii, count, true);
      player.sendPacket(SystemMessage.removeItems(item, count));
    }
    int x = Integer.parseInt(param[0]);
    int y = Integer.parseInt(param[1]);
    int z = Integer.parseInt(param[2]);
    Location pos = GeoEngine.findPointToStay(x, y, z, 20, 70, player.getReflection().getGeoIndex());
    player.teleToLocation(pos);
  }

  public void ReflectionGatekeeper(String[] param)
  {
    if(param.length < 5)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    player.setReflection(Integer.parseInt(param[4]));
    Gatekeeper(param);
  }

  /**
   * Используется для телепортации за Newbie Token, проверяет уровень и передает
   * параметры в QuestGatekeeper
   */
  public void TokenJump(String[] param)
  {
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    if(player.getLevel() <= 19)
    {
      QuestGatekeeper(param);
    }
    else
    {
      show("Only for newbies", player);
    }
  }

  public void NoblessTeleport()
  {
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    if(player.isNoble() || Config.ALLOW_NOBLE_TP_TO_ALL)
    {
      show("data/scripts/noble.htm", player);
    }
    else
    {
      show("data/scripts/nobleteleporter-no.htm", player);
    }
  }

  public void PayPage(String[] param)
  {
    if(param.length < 2)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    String page = param[0];
    int item = Integer.parseInt(param[1]);
    long price = Long.parseLong(param[2]);
    if(getItemCount(player, item) < price)
    {
      player.sendPacket(item == 57 ? Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA : Msg.INCORRECT_ITEM_COUNT);
      return;
    }
    removeItem(player, item, price);
    show(page, player);
  }

  public void SimpleExchange(String[] param)
  {
    if(param.length < 4)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    int itemToTake = Integer.parseInt(param[0]);
    long countToTake = Long.parseLong(param[1]);
    int itemToGive = Integer.parseInt(param[2]);
    long countToGive = Long.parseLong(param[3]);
    if(getItemCount(player, itemToTake) < countToTake)
    {
      player.sendPacket(itemToTake == 57 ? Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA : Msg.INCORRECT_ITEM_COUNT);
      return;
    }
    removeItem(player, itemToTake, countToTake);
    addItem(player, itemToGive, countToGive);
  }

  public void MakeEchoCrystal(String[] param)
  {
    if(param.length < 2)
    {
      throw new IllegalArgumentException();
    }
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    if(!L2NpcInstance.canBypassCheck(player, player.getLastNpc()))
    {
      return;
    }
    int crystal = Integer.parseInt(param[0]);
    int score = Integer.parseInt(param[1]);
    if(getItemCount(player, score) == 0)
    {
      player.getLastNpc().onBypassFeedback(player, "Chat 1");
      return;
    }
    if(getItemCount(player, 57) < 200)
    {
      player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
      return;
    }
    removeItem(player, 57, 200);
    addItem(player, crystal, 1);
  }

  public void TakeNewbieWeaponCoupon()
  {
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    if(!Config.ALT_ALLOW_SHADOW_WEAPONS)
    {
      show(new CustomMessage("common.Disabled", player), player);
      return;
    }
    if(player.getLevel() > 19 || player.getClassId().getLevel() > 1)
    {
      show("Your level is too high!", player);
      return;
    }
    if(player.getLevel() < 6)
    {
      show("Your level is too low!", player);
      return;
    }
    if(player.getVarB("newbieweapon"))
    {
      show("Your already got your newbie weapon!", player);
      return;
    }
    addItem(player, 7832, 5);
    player.setVar("newbieweapon", "true");
  }

  public void TakeAdventurersArmorCoupon()
  {
    L2Player player = (L2Player) getSelf();
    if(player == null)
    {
      return;
    }
    if(!Config.ALT_ALLOW_SHADOW_WEAPONS)
    {
      show(new CustomMessage("common.Disabled", player), player);
      return;
    }
    if(player.getLevel() > 39 || player.getClassId().getLevel() > 2)
    {
      show("Your level is too high!", player);
      return;
    }
    if(player.getLevel() < 20 || player.getClassId().getLevel() < 2)
    {
      show("Your level is too low!", player);
      return;
    }
    if(player.getVarB("newbiearmor"))
    {
      show("Your already got your newbie weapon!", player);
      return;
    }
    addItem(player, 7833, 1);
    player.setVar("newbiearmor", "true");
  }

  public static void CheckPlayerInEpicZone(final L2Zone zone, final L2Object object, final Boolean enter)
  {
    if(enter && object.isPlayable() && ((L2Playable) object).getLevel() > 48 && object.isInZone(zone))
    {
      boolean playerIsCastingRecallSkill = object.isPlayer() && object.getPlayer().getCastingSkill() != null && object.getPlayer().getCastingSkill().getSkillType() == SkillType.RECALL;
      boolean alreadyInRaidCurce = ((L2Character) object).getEffectList().getEffectsBySkillId(L2Skill.SKILL_RAID_CURSE) != null;
      if(!playerIsCastingRecallSkill && !alreadyInRaidCurce)
      {
        SkillTable.getInstance().getInfo(L2Skill.SKILL_RAID_CURSE, 1).getEffects(((L2Character) object), ((L2Character) object), false, false);
      }
      ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
      {
        public void run()
        {
          Functions.callScripts("Util", "CheckPlayerInEpicZone", new Object[] {zone, object, enter});
        }
      }, 10000);
    }
  }

  public static void CheckPlayerInMultilayerZone(L2Zone zone, final L2Object object, final Boolean enter)
  {
    if(object.isPlayable() || object.isMonster())
    {
      if(enter && ((L2Character) object).getLevel() < Config.MULTILAYER_LVL && object.isInZone(zone))
      {
        object.setReflection(ReflectionTable.MULTILAYER);
      }
      else if(object.getReflection().getId() == ReflectionTable.MULTILAYER)
      {
        object.setReflection(ReflectionTable.DEFAULT);
      }
    }
  }

  public static void CheckPlayerInTully1Zone(L2Zone zone, final L2Object object, final Boolean enter)
  {
    if(!enter || !object.isPlayer() || !object.isInZone(zone))
    {
      return;
    }
    L2Player p = object.getPlayer();
    Location TullyFloor2LocationPoint = new Location(-14180, 273060, -13600);
    final int MASTER_ZELOS_ID = 22377;
    boolean teleport = true;
    for(L2NpcInstance npc : p.getAroundNpc(3000, 256))
    {
      if(npc.getNpcId() == MASTER_ZELOS_ID && !npc.isDead())
      {
        teleport = false;
      }
    }
    if(teleport)
    {
      p.teleToLocation(TullyFloor2LocationPoint);
    }
  }

  public static void CheckPlayerInTully2Zone(L2Zone zone, final L2Object object, final Boolean enter)
  {
    if(!enter || !object.isPlayer() || !object.isInZone(zone))
    {
      return;
    }
    L2Player p = object.getPlayer();
    Location TullyFloor4LocationPoint = new Location(-14238, 273002, -10496);
    final int MASTER_FESTINA_ID = 22380;
    boolean teleport = true;
    for(L2NpcInstance npc : p.getAroundNpc(3000, 500))
    {
      if(npc.getNpcId() == MASTER_FESTINA_ID && !npc.isDead())
      {
        teleport = false;
      }
    }
    if(teleport)
    {
      p.teleToLocation(TullyFloor4LocationPoint);
    }
  }
}
TOP

Related Classes of Util

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.