예제 #1
0
  @Override
  public void act(final Player player, final Item parentItem, Item targetItem) {
    PacketSendUtility.sendPacket(
        player,
        new SM_ITEM_USAGE_ANIMATION(
            player.getObjectId(),
            parentItem.getObjectId(),
            parentItem.getItemTemplate().getTemplateId(),
            5000,
            0,
            0));
    player.getController().cancelTask(TaskId.ITEM_USE);
    player
        .getController()
        .addNewTask(
            TaskId.ITEM_USE,
            ThreadPoolManager.getInstance()
                .schedule(
                    new Runnable() {
                      @Override
                      public void run() {
                        PacketSendUtility.sendPacket(
                            player,
                            new SM_ITEM_USAGE_ANIMATION(
                                player.getObjectId(),
                                parentItem.getObjectId(),
                                parentItem.getItemTemplate().getTemplateId(),
                                0,
                                1,
                                0));

                        Storage inventory = player.getInventory();
                        inventory.removeFromBagByObjectId(parentItem.getObjectId(), 1);
                        int decomposedId = parentItem.getItemId() - 1;
                        switch (parentItem.getItemId()) {
                          case 152000112:
                          case 152000328:
                            decomposedId -= 2;
                            break;
                          case 152000213:
                          case 152000327:
                            decomposedId -= 3;
                            break;
                          case 152000326:
                            decomposedId -= 4;
                        }
                        ItemService.addItem(player, decomposedId, 3);
                      }
                    },
                    5000));
  }
  @Override
  public boolean onDialogEvent(QuestCookie env) {
    final Player player = env.getPlayer();
    int targetId = 0;

    if (env.getVisibleObject() instanceof Npc) targetId = ((Npc) env.getVisibleObject()).getNpcId();
    final QuestState qs = player.getQuestStateList().getQuestState(questId);
    if (targetId == 799523) {
      if (qs == null || qs.getStatus() == QuestStatus.NONE) {
        if (env.getDialogId() == 26) return sendQuestDialog(env, 1011);
        else return defaultQuestStartDialog(env);
      }
    } else if (targetId == 798029) {
      if (qs != null && qs.getStatus() == QuestStatus.START && qs.getQuestVarById(0) == 0) {
        if (env.getDialogId() == 26) return sendQuestDialog(env, 2375);
        else if (env.getDialogId() == 34) {
          if (QuestService.collectItemCheck(env, true)) {
            qs.setQuestVarById(0, qs.getQuestVarById(0) + 1);
            qs.setStatus(QuestStatus.REWARD);
            updateQuestStatus(env);
            return sendQuestDialog(env, 5);
          } else return sendQuestDialog(env, 2716);
        } else return defaultQuestStartDialog(env);
      } else if (qs != null && qs.getStatus() == QuestStatus.REWARD)
        return defaultQuestEndDialog(env);
    } else if (targetId == 700853) {
      if (qs != null && qs.getStatus() == QuestStatus.START && qs.getQuestVarById(0) == 0) {
        if (env.getDialogId() == -1
            && (player.getInventory().getItemCountByItemId(185000103) > 0
                && player.getInventory().getItemCountByItemId(185000107) >= 3)) {
          if (!ItemService.addItems(
              player, Collections.singletonList(new QuestItems(182212020, 1)))) return true;
          final int targetObjectId = env.getVisibleObject().getObjectId();
          PacketSendUtility.sendPacket(
              player, new SM_USE_OBJECT(player.getObjectId(), targetObjectId, 3000, 0));
          PacketSendUtility.broadcastPacket(
              player, new SM_EMOTION(player, EmotionType.START_LOOT, 0, targetObjectId), true);
          player.getInventory().removeFromBagByItemId(185000103, 1);
          player.getInventory().removeFromBagByItemId(185000107, 3);
        }
      }
    }

    return false;
  }
  @Override
  public boolean set(Skill skill) {
    skill.setFirstTargetProperty(value);
    switch (value) {
      case ME:
        skill.setFirstTarget(skill.getEffector());
        break;
      case TARGETORME:
        if (skill.getFirstTarget() == null) skill.setFirstTarget(skill.getEffector());
        break;
      case TARGET:
        if (skill.getFirstTarget() == null || skill.getFirstTarget() == skill.getEffector())
          return false;
        break;
      case MYPET:
        Creature effector = skill.getEffector();
        if (effector instanceof Player) {
          Summon summon = ((Player) effector).getSummon();
          if (summon != null) skill.setFirstTarget(summon);
          else return false;
        } else return false;
        break;
      case PASSIVE:
        skill.setFirstTarget(skill.getEffector());
        break;
      case TARGET_MYPARTY_NONVISIBLE:
        if (!(skill.getFirstTarget() instanceof Player)) return false;

        Player effected = (Player) skill.getFirstTarget();

        if (effected == null
            || !GroupService.getInstance().isGroupMember(effected.getObjectId())
            || skill.getEffector().getWorldId() != effected.getWorldId()) return false;
        skill.setFirstTargetRangeCheck(false);
        break;
      case POINT:
        skill.setFirstTarget(null);
        break;
    }

    if (skill.getFirstTarget() != null)
      skill.getEffectedList().add(new CreatureWithDistance(skill.getFirstTarget(), 0));
    return true;
  }
  @Override
  public HandlerResult onItemUseEvent(final QuestCookie env, Item item) {
    final Player player = env.getPlayer();
    final QuestState qs = player.getQuestStateList().getQuestState(questId);
    final int id = item.getItemTemplate().getTemplateId();
    final int itemObjId = item.getObjectId();

    if (id == 186000107) {
      if (!ZoneService.getInstance().isInsideZone(player, ZoneName.DEBILKARIM_FORGE_300160000))
        return HandlerResult.FAILED;
      if (qs == null) return HandlerResult.UNKNOWN;
      if (qs.getQuestVarById(0) != 0) return HandlerResult.FAILED;
      if (player.getInventory().getItemCountByItemId(100900716) == 0
          || player.getInventory().getItemCountByItemId(186000099) == 0
          || player.getInventory().getItemCountByItemId(186000106) < 20
          || player.getInventory().getItemCountByItemId(186000107) == 0)
        return HandlerResult.FAILED;
      PacketSendUtility.broadcastPacket(
          player,
          new SM_ITEM_USAGE_ANIMATION(player.getObjectId(), itemObjId, id, 3000, 0, 0),
          true);
      ThreadPoolManager.getInstance()
          .schedule(
              new Runnable() {
                @Override
                public void run() {
                  ItemService.addItems(
                      player, Collections.singletonList(new QuestItems(182209634, 1)));
                  PacketSendUtility.broadcastPacket(
                      player,
                      new SM_ITEM_USAGE_ANIMATION(player.getObjectId(), itemObjId, id, 0, 1, 0),
                      true);
                  player.getInventory().removeFromBagByItemId(186000099, 1);
                  player.getInventory().removeFromBagByItemId(186000106, 20);
                  player.getInventory().removeFromBagByItemId(186000107, 1);
                  qs.setStatus(QuestStatus.REWARD);
                  updateQuestStatus(env);
                }
              },
              3000);
      return HandlerResult.SUCCESS;
    }
    return HandlerResult.UNKNOWN;
  }
  @Override
  public boolean onDialogEvent(QuestCookie env) {
    final Player player = env.getPlayer();
    final QuestState qs = player.getQuestStateList().getQuestState(questId);
    if (qs == null) return false;

    int var = qs.getQuestVarById(0);
    int targetId = 0;
    if (env.getVisibleObject() instanceof Npc) targetId = ((Npc) env.getVisibleObject()).getNpcId();

    if (qs.getStatus() == QuestStatus.REWARD) {
      if (targetId == 799226) {
        if (env.getDialogId() == -1) return sendQuestDialog(env, 10002);
        else if (env.getDialogId() == 1009) return sendQuestDialog(env, 5);
        else return defaultQuestEndDialog(env);
      }
      return false;
    } else if (qs.getStatus() != QuestStatus.START) {
      return false;
    }
    if (targetId == 799226) {
      switch (env.getDialogId()) {
        case 26:
          if (var == 0) return sendQuestDialog(env, 1011);
          else if (var == 3) return sendQuestDialog(env, 2034);
        case 10000:
          if (var == 0) {
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
        case 10003:
          if (var == 3) {
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
      }
    } else if (targetId == 799292) {
      switch (env.getDialogId()) {
        case 26:
          if (var == 1) return sendQuestDialog(env, 1352);
          else if (var == 2) return sendQuestDialog(env, 1693);
          else if (var == 5) return sendQuestDialog(env, 2716);
          else if (var == 11) return sendQuestDialog(env, 1608);
          break;
        case 34:
          if (QuestService.collectItemCheck(env, true)) {
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          } else return sendQuestDialog(env, 10001);
        case 10001:
          if (var == 1) {
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
        case 10005:
          if (var == 5) {
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
        case 10255:
          if (var == 11) {
            qs.setStatus(QuestStatus.REWARD);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
      }
    } else if (targetId == 700810) {
      if (var == 2) return true;
    } else if (targetId == 204057) {
      switch (env.getDialogId()) {
        case 26:
          if (var == 4) return sendQuestDialog(env, 2375);
        case 10004:
          if (var == 4) {
            if (!ItemService.addItems(
                player, Collections.singletonList(new QuestItems(182207611, 1)))) return true;
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
      }
    } else if (targetId == 799341) {
      switch (env.getDialogId()) {
        case 26:
          if (var == 9) return sendQuestDialog(env, 4080);
        case 10009:
          if (var == 9) {
            if (!ItemService.addItems(
                player, Collections.singletonList(new QuestItems(182207613, 1)))) return true;
            player.getInventory().removeFromBagByItemId(182207611, 1);
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
      }
    } else if (targetId == 799513
        || targetId == 799514
        || targetId == 799515
        || targetId == 799516) // FIXME: Var !
    {
      switch (env.getDialogId()) {
        case 26:
          if (var == 7) return sendQuestDialog(env, 4080);
        case 10009:
          if (var == 7) {
            PacketSendUtility.sendPacket(player, new SM_PLAY_MOVIE(0, 442));
            qs.setQuestVar(8);
            updateQuestStatus(env);
            PacketSendUtility.sendPacket(
                player, new SM_DIALOG_WINDOW(env.getVisibleObject().getObjectId(), 10));
            return true;
          }
      }
    } else if (targetId == 730243) {
      switch (env.getDialogId()) {
        case -1:
          if (var >= 6) return sendQuestDialog(env, 3057);
          break;
        case 26:
          if (var == 6) return sendQuestDialog(env, 3057);
          break;
        case 10006:
          if (var == 6) {
            qs.setQuestVarById(0, var + 1);
            updateQuestStatus(env);
            WorldMapInstance newInstance = InstanceService.getNextAvailableInstance(300150000);
            InstanceService.registerPlayerWithInstance(newInstance, player);
            TeleportService.teleportTo(
                player,
                300150000,
                newInstance.getInstanceId(),
                561.8651f,
                221.91483f,
                134.53333f,
                (byte) 90);
            return true;
          } else if (var > 6) {
            WorldMapInstance newInstance = InstanceService.getNextAvailableInstance(300150000);
            InstanceService.registerPlayerWithInstance(newInstance, player);
            TeleportService.teleportTo(
                player,
                300150000,
                newInstance.getInstanceId(),
                561.8651f,
                221.91483f,
                134.53333f,
                (byte) 90);
            return true;
          }
      }
    } else if (targetId == 700706) {
      switch (env.getDialogId()) {
        case -1:
          if (var == 10) {
            final int targetObjectId = env.getVisibleObject().getObjectId();
            PacketSendUtility.sendPacket(
                player, new SM_USE_OBJECT(player.getObjectId(), targetObjectId, 3000, 0));
            PacketSendUtility.broadcastPacket(
                player, new SM_EMOTION(player, EmotionType.START_LOOT, 0, targetObjectId), true);
            qs.setQuestVar(11);
            updateQuestStatus(env);
            TeleportService.teleportTo(
                player, 300150000, 561.8651f, 221.91483f, 134.53333f, (byte) 90);
          }
      }
    }

    return false;
  }