@Override
  public boolean test(Npc npc, Player player) {
    // если игрока нет, выходим
    if (player == null) {
      log.warning(this, "not found player");
      return false;
    }

    // получаем список квестов
    QuestList questList = player.getQuestList();

    // если его нет, возвращаем плохо
    if (questList == null) {
      log.warning(this, "not found quest list");
      return false;
    }

    // получаеми состояние квеста
    QuestState state = questList.getQuestState(quest);

    // если его нет, возвращаем плохо
    if (state == null) return false;

    // получаем значение переменой
    Wrap wrap = state.getVar(name);

    // если его нет
    if (wrap == null)
      // сравниваем значение с 0
      return value == 0;

    // иначе просто сравниваем значение
    return wrap.getInt() == value;
  }
  public static QuestStarted getInstance(
      QuestState quest, int npcType, int npcId, float x, float y, float z) {
    QuestStarted packet = (QuestStarted) instance.newInstance();

    packet.buffer = packet.prepare;

    Player player = quest.getPlayer();

    packet.writeShort(1); // 01 00
    packet.writeShort(14); // 0E 00
    packet.writeInt(12); // 0C 00 00 00
    packet.writeShort(0); // 00 00
    packet.writeInt(14); // 0E 00 00 00
    packet.writeShort(1); // 01 00
    packet.writeShort(57); // 39 00
    packet.writeShort(1); // 01 00
    packet.writeShort(85); // 55 00
    packet.writeInt(quest.getQuestId()); // 29 05 00 00 //NPC ID
    packet.writeInt(quest.getObjectId()); // C4 E0 89 00 //Обжект ид
    packet.writeInt(quest.getState()); // 01 00 00 00 //номер квеста уданного нпц
    packet.writeInt(
        1); // 01 00 00 00 00 00 00 00 // если 0, то квест красным висит, 1 обычный показ
    packet.writeInt(0);
    packet.writeInt(quest.getPanelStateId()); // 00 00 00 00 quest.getPanelStateId()
    packet.writeInt(0x00010100); // 00 01 01 00
    packet.writeShort(0); // 00 00
    packet.writeByte(0); // 00
    packet.writeInt(57); // 39 00 00 00 //след сектор
    packet.writeFloat(x); // 0B D1 A9 47 //видимо где след этап квеста X
    packet.writeFloat(y); // 1F 3D A6 C7 //видимо где след этап квеста Y
    packet.writeFloat(z); // 88 11 90 C5 //видимо где след этап квеста Z
    packet.writeInt(npcType); // D5 00 00 00 //213
    packet.writeInt(npcId); // EB 03 00 00 //1003 видимо ид след НПЦ
    packet.writeInt(player != null ? player.getZoneId() : 13); // 0D 00 00 00 //13
    packet.writeLong(85); // 55 00 00 00 00 00 00 00  //85

    return packet;
  }