Ejemplo n.º 1
0
 public static final int[] getEnchantCatalystId(ItemInstance item) {
   if (item.getTemplate().isWeapon())
     switch (item.getGrade().getCrystalId()) {
       case ItemTemplate.CRYSTAL_A:
         return catalyst[3];
       case ItemTemplate.CRYSTAL_B:
         return catalyst[2];
       case ItemTemplate.CRYSTAL_C:
         return catalyst[1];
       case ItemTemplate.CRYSTAL_D:
         return catalyst[0];
       case ItemTemplate.CRYSTAL_S:
         return catalyst[4];
       case ItemTemplate.CRYSTAL_R:
         return catalyst[5];
     }
   else if (item.getTemplate().isArmor() || item.getTemplate().isAccessory())
     switch (item.getGrade().getCrystalId()) {
       case ItemTemplate.CRYSTAL_A:
         return catalyst[9];
       case ItemTemplate.CRYSTAL_B:
         return catalyst[8];
       case ItemTemplate.CRYSTAL_C:
         return catalyst[7];
       case ItemTemplate.CRYSTAL_D:
         return catalyst[6];
       case ItemTemplate.CRYSTAL_S:
         return catalyst[10];
       case ItemTemplate.CRYSTAL_R:
         return catalyst[11];
     }
   return new int[] {0};
 }
Ejemplo n.º 2
0
  public static int getCrystallizeCrystalAdd(ItemInstance item) {
    int result = 0;
    int crystalsAdd = 0;
    if (item.isWeapon()) {
      switch (item.getGrade()) {
        case D:
          crystalsAdd = 90;
          break;
        case C:
          crystalsAdd = 45;
          break;
        case B:
          crystalsAdd = 67;
          break;
        case A:
          crystalsAdd = 145;
          break;
        case S:
        case S80:
        case S84:
          crystalsAdd = 250;
          break;
        case R:
        case R95:
        case R99:
          crystalsAdd = 500;
          break;
      }
    } else {
      switch (item.getGrade()) {
        case D:
          crystalsAdd = 11;
          break;
        case C:
          crystalsAdd = 6;
          break;
        case B:
          crystalsAdd = 11;
          break;
        case A:
          crystalsAdd = 20;
          break;
        case S:
        case S80:
        case S84:
          crystalsAdd = 25;
          break;
        case R:
        case R95:
        case R99:
          crystalsAdd = 30;
          break;
      }
    }

    if (item.getEnchantLevel() > 3) {
      result = crystalsAdd * 3;
      if (item.isWeapon()) crystalsAdd *= 2;
      else crystalsAdd *= 3;
      result += crystalsAdd * (item.getEnchantLevel() - 3);
    } else result = crystalsAdd * item.getEnchantLevel();

    return result;
  }
Ejemplo n.º 3
0
  /**
   * Проверяет возможность носить эту вещь.
   *
   * @return null, если вещь носить можно, либо SystemMessage, который можно показать игроку
   */
  public static final IStaticPacket checkIfCanEquip(Player player, ItemInstance item) {
    // FIXME [G1ta0] черезмерный хардкод, переделать на условия
    int itemId = item.getItemId();
    int targetSlot = item.getTemplate().getBodyPart();
    Clan clan = player.getClan();

    // TODO: [Bonux] проверить, могут ли носить Камаэли щиты и сигили R ранга.
    if (!player.getClassId().isOfLevel(ClassLevel.AWAKED)
        && item.getGrade() != ItemGrade.R
        && item.getGrade() != ItemGrade.R95
        && item.getGrade() != ItemGrade.R99) {
      // камаэли и хеви/робы/щиты/сигилы
      if (player.getRace() == Race.KAMAEL
          && (item.getItemType() == ArmorType.HEAVY
              || item.getItemType() == ArmorType.MAGIC
              || item.getItemType() == ArmorType.SIGIL
              || item.getItemType() == WeaponType.NONE))
        return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

      // не камаэли и рапиры/арбалеты/древние мечи
      if (player.getRace() != Race.KAMAEL
          && (item.getItemType() == WeaponType.CROSSBOW
              || item.getItemType() == WeaponType.RAPIER
              || item.getItemType() == WeaponType.ANCIENTSWORD))
        return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;
    }

    if (itemId >= 7850 && itemId <= 7859 && player.getLvlJoinedAcademy() == 0) // Clan Oath Armor
    return SystemMsg.THIS_ITEM_CAN_ONLY_BE_WORN_BY_A_MEMBER_OF_THE_CLAN_ACADEMY;

    if (isClanApellaItem(itemId) && player.getPledgeRank().ordinal() < PledgeRank.WISEMAN.ordinal())
      return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

    if (item.getItemType() == WeaponType.DUALDAGGER
        && player.getSkillLevel(923) < 1
        && player.getSkillLevel(10502) < 1)
      return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

    // Корона лидера клана, владеющего замком
    if (itemId == 6841 && (clan == null || !player.isClanLeader() || clan.getCastle() == 0))
      return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

    // Нельзя одевать оружие, если уже одето проклятое оружие. Проверка двумя способами, для
    // надежности.
    if (targetSlot == ItemTemplate.SLOT_LR_HAND
        || targetSlot == ItemTemplate.SLOT_L_HAND
        || targetSlot == ItemTemplate.SLOT_R_HAND) {
      if (itemId != player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)
          && CursedWeaponsManager.getInstance()
              .isCursed(player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_RHAND)))
        return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;
      if (player.isCursedWeaponEquipped() && itemId != player.getCursedWeaponEquippedId())
        return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;
    }

    // Плащи
    if (item.getTemplate().isCloak()) {
      // Can be worn by Knights or higher ranks who own castle
      if (item.getName().contains("Knight")
          && (player.getPledgeRank().ordinal() < PledgeRank.KNIGHT.ordinal()
              || player.getCastle() == null))
        return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

      // Плащи для камаэлей
      if (item.getName().contains("Kamael") && player.getRace() != Race.KAMAEL)
        return SystemMsg.YOU_DO_NOT_MEET_THE_REQUIRED_CONDITION_TO_EQUIP_THAT_ITEM;

      // Плащи можно носить только с S80 или S84 сетом
      if (!player.getOpenCloak())
        return SystemMsg.THE_CLOAK_CANNOT_BE_EQUIPPED_BECAUSE_YOUR_ARMOR_SET_IS_NOT_COMPLETE;
    }

    if (targetSlot == ItemTemplate.SLOT_DECO) {
      int count = player.getTalismanCount();
      if (count <= 0)
        return new SystemMessage2(
                SystemMsg.YOU_CANNOT_WEAR_S1_BECAUSE_YOU_ARE_NOT_WEARING_A_BRACELET)
            .addItemName(itemId);

      ItemInstance deco;
      for (int slot = Inventory.PAPERDOLL_DECO1; slot <= Inventory.PAPERDOLL_DECO6; slot++) {
        deco = player.getInventory().getPaperdollItem(slot);
        if (deco != null) {
          if (deco == item) return null; // талисман уже одет и количество слотов больше нуля
          // Проверяем на количество слотов и одинаковые талисманы
          if (--count <= 0 || deco.getItemId() == itemId)
            return new SystemMessage2(
                    SystemMsg.YOU_CANNOT_EQUIP_S1_BECAUSE_YOU_DO_NOT_HAVE_ANY_AVAILABLE_SLOTS)
                .addItemName(itemId);
        }
      }
    }
    return null;
  }