private void checkDialog(Player player) {
    int npcId = getNpcId();
    List<Integer> relatedQuests = QuestEngine.getInstance().getQuestNpc(npcId).getOnTalkEvent();
    boolean playerHasQuest = false;
    boolean playerCanStartQuest = false;
    if (!relatedQuests.isEmpty()) {
      for (int questId : relatedQuests) {
        QuestState qs = player.getQuestStateList().getQuestState(questId);
        if (qs != null
            && (qs.getStatus() == QuestStatus.START || qs.getStatus() == QuestStatus.REWARD)) {
          playerHasQuest = true;
          break;
        } else if (qs == null || qs.getStatus() == QuestStatus.NONE || qs.canRepeat()) {
          if (QuestService.checkStartConditions(
              new QuestEnv(getOwner(), player, questId, 0), true)) {
            playerCanStartQuest = true;
            continue;
          }
        }
      }
    }

    if (playerHasQuest) {
      boolean isRewardStep = false;
      for (int questId : relatedQuests) {
        QuestState qs = player.getQuestStateList().getQuestState(questId);
        if (qs != null && qs.getStatus() == QuestStatus.REWARD) {
          PacketSendUtility.sendPacket(
              player, new SM_DIALOG_WINDOW(getObjectId(), rewardDialogId, questId));
          isRewardStep = true;
          break;
        }
      }
      if (!isRewardStep) {
        PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getObjectId(), questDialogId));
      }
    } else if (playerCanStartQuest) {
      PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getObjectId(), startingDialogId));
    } else {
      PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getObjectId(), 1011, 0));
    }
  }