Lua Вопросы по скриптингу

Тема в разделе "Другое", создана пользователем FYP, 8 авг 2016.

  1. Nexiq

    Nexiq Активный пользователь

    Регистрация:
    08.02.16
    Сообщения:
    42
    Лайки:
    1
    Репутация:
    0
    Мне удобно на моей сенсе т.к на мышке я гоняю на 5600 dpi, а скрипт мне нужен для другого.
     
    #641
  2. mac

    mac я у мамы особенный
    Друг

    Регистрация:
    06.09.14
    Сообщения:
    1.261
    Лайки:
    768
    Репутация:
    30
    for 360 MLG NOSCOPE :pidrila:
     
    #642
  3. Nexiq

    Nexiq Активный пользователь

    Регистрация:
    08.02.16
    Сообщения:
    42
    Лайки:
    1
    Репутация:
    0
    Не, наоброт не NOSCOPE а SCOPE в прицеле
     
    #643
  4. OtherWeather

    OtherWeather Активный пользователь

    Регистрация:
    25.08.14
    Сообщения:
    29
    Лайки:
    0
    Репутация:
    0
    Почему при использовании в окно чата выводит 3 одинаковых сообщения вместо 1?
    Код (Lua):
    script_name("Example script")

    require "lib.moonloader"
    require "lib.sampfuncs"

    function main()
       while not isSampAvailable() do wait(100) end
       while true do
       wait(0)
       local result, target = getCharPlayerIsTargeting(playerHandle)
       if result then result, playerid = sampGetPlayerIdByCharHandle(target) end -- Если зажата пкм на игроке, то получаем ID.
         if result and isKeyDown(VK_1) then -- Если зажата пкм и кнопка 1 на игроке, то...
            name = sampGetPlayerNickname(playerid) -- получаем nickname игрока по ранее полученному ID.
          sampAddChatMessage(string.format("%s", name, 0x0099FF)) -- Выводим nickname в окно чата.
         end
       end
    end
     
    #644
    Последнее редактирование: 23 дек 2016
  5. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    потому что функция isKeyDown проверяет зажата ли клавиша. соответственно, сообщение будет выводиться каждый кадр, пока зажата клавиша, т.к. нет задержки. используй wasKeyPressed.
     
    Последние данные очков репутации:
    OtherWeather: 1 Очко 23 дек 2016
    #645
  6. Garrus

    Garrus Известный пользователь

    Регистрация:
    08.01.16
    Сообщения:
    99
    Лайки:
    8
    Репутация:
    1
    При перезапуске скрипта функцией reloadScripts() или script:reload(), необходимо ли предварительно завершить поток, созданный функцией lua_thread.create(firstThread)?
     
    #646
    Последнее редактирование: 24 дек 2016
  7. OtherWeather

    OtherWeather Активный пользователь

    Регистрация:
    25.08.14
    Сообщения:
    29
    Лайки:
    0
    Репутация:
    0
    Почему ID игрока отображается с задержкой и один рендер накладывается на другой?

    [​IMG]

    Код (Lua):
    require "lib.moonloader"
    require "lib.SAMPFUNCS"

    function main()
         while not isSampAvailable() do wait(100) end
         font = renderCreateFont("Times New Roman", 20, 5);
         while true do
         wait(0)
         if not isPauseMenuActive() and not isKeyDown(VK_F8) then
         for i = 0, 1001 do -- перебираем все иды в зоне стрима и выбираем ближайший
             if sampIsPlayerConnected(i) then name = sampGetPlayerNickname(i) end
             instream, handle = sampGetCharHandleBySampPlayerId(i)
             if instream then
                 pedX, pedY, pedZ = getCharCoordinates(handle)
                 myX, myY, myZ = getCharCoordinates(playerPed)
                 distance = getDistanceBetweenCoords3d(pedX, pedY, pedZ, myX, myY, myZ)
                 distanceInteger = math.floor(distance)
                 result, id = sampGetPlayerIdByCharHandle(handle)
                 renderFontDrawText(font, string.format("ID: %s", id), 700, 500, -1) -- отрисовка ида
                     end
                 end
             end
         end
    end
     
    #647
  8. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    нет
    в коде много ошибок
     
    #648
    Garrus нравится это.
  9. 4el0ve4ik

    4el0ve4ik Валенок
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    943
    Лайки:
    237
    Репутация:
    61
    Тебе нужно что бы ближайший игрок отображался или все игроки в стриме?
     
    #649
  10. OtherWeather

    OtherWeather Активный пользователь

    Регистрация:
    25.08.14
    Сообщения:
    29
    Лайки:
    0
    Репутация:
    0
    Ближайший.
     
    #650
  11. iTz_W33Z7

    iTz_W33Z7 Известный пользователь

    Регистрация:
    14.03.16
    Сообщения:
    217
    Лайки:
    24
    Репутация:
    4
    Как это правильно перевести в Луа
    Код (CLEO):
    04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 -1.0
    00A1: put_actor $PLAYER_ACTOR at 0@ 1@ 2@
    Только начал вникать, а тут переменные нарисовались с которыми в луа я еще не очень дружу.

    Код (Lua):
    X,  Y, Z = getOffsetFromCharInWorldCoords(playerPed, 0.0, 0.0, -1.0)
     setCharCoordinates(playerPed, X, Y, Z)
     
    #651
  12. 4el0ve4ik

    4el0ve4ik Валенок
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    943
    Лайки:
    237
    Репутация:
    61
    У тебя это не работает или что?
     
    #652
  13. iTz_W33Z7

    iTz_W33Z7 Известный пользователь

    Регистрация:
    14.03.16
    Сообщения:
    217
    Лайки:
    24
    Репутация:
    4
    Вот смотри, я точно делаю не правильно..
    Код (Lua):
    while true do
            wait (0)
                local result = isCurrentCharWeapon(playerPed, 24)
                  setCharAnimSpeed(playerPed, python_crouchfire, 3.0)
                setCharAnimSpeed(playerPed, python_crouchreload, 3.0)
                setCharAnimSpeed(playerPed, python_fire, 3.0)
                setCharAnimSpeed(playerPed, python_fire_poor, 3.0)
                local result = isCharShooting(playerPed)
                local X,  Y, Z = getOffsetFromCharInWorldCoords(playerPed, 0.0, 0.0, -1.0)
                setCharCoordinates(playerPed, X, Y, Z)
                        end
                    end
     
    #653
  14. iTz_W33Z7

    iTz_W33Z7 Известный пользователь

    Регистрация:
    14.03.16
    Сообщения:
    217
    Лайки:
    24
    Репутация:
    4
    какого то хрена всё равно не получается :sad_frog:

    Код (CLEO):
    :Noname_11
    0001: wait 0 ms
    02D8:   actor $PLAYER_ACTOR current_weapon == 24
    004D: jump_if_false @Noname_11
    0393: actor $PLAYER_ACTOR perform_animation "python_crouchfire" at 3.0 times_normal_rate
    0393: actor $PLAYER_ACTOR perform_animation "python_crouchreload" at 3.0 times_normal_rate
    0393: actor $PLAYER_ACTOR perform_animation "python_fire" at 3.0 times_normal_rate
    0393: actor $PLAYER_ACTOR perform_animation "python_fire_poor" at 3.0 times_normal_rate
    02E0:   actor $PLAYER_ACTOR firing_weapon
    004D: jump_if_false @Noname_11
    04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 -1.0
    00A1: put_actor $PLAYER_ACTOR at 0@ 1@ 2@
    0002: jump @Noname_11
    Код (Lua):
    script_name("No Name")
    script_version_number(1)
    script_version("v.1.0")
    script_authors("iTz_Weezy")

    require"lib.moonloader"
    require"lib.sampfuncs"

    function main()
      if not isSampfuncsLoaded() or not isSampLoaded() then return end
      while not isSampAvailable() do
          wait(200)
                end
          sampAddChatMessage("{44D5C7}[Lua] {FFFFFF}+C BUG {44FF68}Loaded",0xFFFFFF)
                while true do
            wait (0)
                if isCurrentCharWeapon(playerPed, 24) then
                  setCharAnimSpeed(playerPed, python_crouchfire, 3.0)
                setCharAnimSpeed(playerPed, python_crouchreload, 3.0)
                setCharAnimSpeed(playerPed, python_fire, 3.0)
                setCharAnimSpeed(playerPed, python_fire_poor, 3.0)
                if isCharShooting(playerPed) then
                local X,  Y, Z = getOffsetFromCharInWorldCoords(playerPed, 0.0, 0.0, -1.0)
                local result = setCharCoordinates(playerPed, X, Y, Z)
                        end
                    end
                end
            end
     
    #654
  15. NARVELL

    NARVELL Пользователь

    Регистрация:
    25.11.14
    Сообщения:
    24
    Лайки:
    1
    Репутация:
    0
    Что-то блокирует одинаковые php запросы через функцию downloadUrlToFile(). Как быть?
     
    #655
  16. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    эта функция не предназначена для обычных get/post-запросов. скорее всего кеширование блокирует одинаковые запросы.
     
    #656
  17. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Подскажите, почему не работает?
    Код (Lua):
    script_name("test")

    require("lib.moonloader")
    local sampev = require("lib.samp.events")

    function main()
        while not isSampAvailable() do wait(100) end
        while true do
            wait(0)
        end
    end

    function sampev.onServerMessage(color, text)
       print('onServerMessage:', color, text)
    end
    Сам скрипт не загружается, в консоле sampfuncs его нет в скрипт менеджере тоже, что я не так сделал?
     
    #657
  18. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    чекни лог
     
    #658
  19. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Виноват. Я постоянно забываю новым расширение .lua приписывать.
    Я так понял вот это:
    Код (Lua):
    function sampev.onServerMessage(color, text)
       print('onServerMessage:', color, text)
    end
    перехватывает все что поступает в чат. А что тогда ловит вот это:
    Код (Lua):
    function sampev.onSendChat(message)
       print('onSendChat:', message)
    end
     
    #659
  20. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    отправку сообщения в чат. события, названия которых начинаются с 'onSend' выполняются при отправке клиентом какого-либо пакета.
     
    #660
  21. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Учусь использовать string.match
    Код (Lua):
    script_name("test")

    require("lib.moonloader")
    local sampev = require("lib.samp.events")

    function main()
        while not isSampAvailable() do wait(100) end
        while true do
            wait(0)
        end
    end

    function sampev.onServerMessage(color, text)
         local name, message = string.match(text, "[R] %s+(.+)[%d]: (.+)")
         print('onServerMessage:', name, message)
    end
    В консоль отправляet "onServerMessage: nil nil" даже когда в чате появляется строка которую описал тут
    Код (Lua):
    string.match(text, "[R] %s+(.+)[%d]: (.+)")
    Под %s+ - название должности.
    В скобочках () под .+ - ник игрока, .+ потому что ник с "_"
    В скобочках [] под %d - id игрока
    Дальше, в скобочках () под .+ - сообщение
    Вроде бы как все правильно должно быть.
    Вопрос решен, правильно вот так:
    Код (Lua):
    string.match(text, "%S+%s+%S+%A+(%S+)%d+%S:%s+(.+)")
     
    #661
    Последнее редактирование: 29 дек 2016
  22. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Как получить цвет определенного текста в репорте? когда игрок что - то напишет
    ник и некоторые символы - зеленым цветом, само сообщение - желтым..
    Но мне нужно узнать точный цвет которым выделяется ник в репорте, для условия.
     
    #662
  23. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    парсить строку сообщения и оттуда извлекать цвета.
     
    #663
  24. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    А по подробнее пожалуйста)
    Я только учусь и плохо понимаю, что да как)

    ну вот допустим есть код:

    Код (Lua):
    function sampev.onServerMessage(color, text)
           print('onServerMessage:', color, text)
    end
    Сам репорт состоит из двух частей ник[id]: сообщение
    ник[id]: - эта часть зеленым цветом выделяется, мне нужно узнать точный код цвета, чтобы сделать конкретное условие
    я знаю, что чтобы парсить конкретный текст с чата, нужно использовать регулярные выражение
    вот это:
    Код (Text):
    local nick = string.match(text, "(%a+_%a+).%d+.:.+")
    не уверен, что правильно, но вроде бы будет парсить чисто ник.
    -----
    Что вообще требуется мне
    Мне нужно парсить допустим ник с репорта и сообщение:
    Код (Text):
    local nick, message = string.match(text, "(%a+_%a+).%d+.:(.+)")
    но под этот шаблон попадает не только репорт, а мне нужно чтобы только репорт, поэтому и хочу извлечь точный код цвета ника, чтобы прописать конкретное условие. Думаю понятно изложил суть)
    Вопрос решен.
     
    #664
    Последнее редактирование: 30 дек 2016
  25. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    string.find учитывает регистр букв? Т.е, если я например задам действие, если скрипт увидит в чате слово "Тест", то действие среагирует и на слово "тест", если увидит его в чате?
    Upd: Проверил уже - учитывает. А можно ли сделать так, чтобы не учитывал?
     
    #665
    Последнее редактирование: 31 дек 2016
  26. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Подскажите как string.lower юзать?
    юзаю так: message2 = string.lower(message)
    и дальше юзаю message2 и не работает
     
    #666
  27. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    ты используешь правильно, просто string.lower с кириллицей не работает.
     
    #667
  28. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    как же тогда быть? :(
    Не хочется для каждого регистра заготовки делать, мне б сообщение в нижний регистр перевести и было бы здорово(
     
    #668
  29. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    попробуй вызвать os.setlocale('.1251') перед string.lower
     
    #669
  30. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Попробовал, работает частично, local message2 = string.lower(message)
    сообщения попадают в переменную message2, но в нижний регистр не переводит, в переменную попадают так как есть
     
    #670
  31. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    почему-то setlocale не даёт никакого результата...
    можно написать свою функцию преобразования регистра (или найти готовую), либо воспользоваться какой-нибудь простой библиотекой для работы с юникодом: https://github.com/Zariel/ouf_grid/tree/master/lib/UTF8
     
    #671
    4el0ve4ik нравится это.
  32. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Это закинуть файлы в папку lib, потом UTF8 прописать в setlocale ? setlocale('.UTF8') или как?
    upd: А как качать - то?
     
    #672
    Последнее редактирование: 2 янв 2017
  33. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    скачать файлы utf8.lua и utf8data.lua, засунуть их в папку lib и в скрипт добавить две строчки
    require 'lib.utf8data'
    require 'lib.utf8'

    затем использовать string.utf8lower('Текст')
     
    #673
  34. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Сделал как ты написал, юзаю так:
    message2 = string.utf8lower(message)
    print(message2)
    и в игре ошибка:
    [ML] (error) test: ...gram Files\Games\GTA MULTIPLAYER\moonloader\lib\utf8.lua:89: Invalid UTF-8 character
     
    #674
  35. Garrus

    Garrus Известный пользователь

    Регистрация:
    08.01.16
    Сообщения:
    99
    Лайки:
    8
    Репутация:
    1
    Ошибся темой. Эта тема для вопросов по скриптингу на lua (moonloader).
     
    #675
  36. Bogach

    Bogach Известный пользователь

    Регистрация:
    09.11.15
    Сообщения:
    149
    Лайки:
    7
    Репутация:
    2
    Пытаюсь сделать парсинг рп чата, но ничего не выходит(
    подскажите,что я делаю не так?
    Код (Lua):
    playerid, message2 = string.match(text, "%a+_%a+.+%s.+(%d).+%s(.+)")
        if message2 ~= nil then
             print(color,message2)
        end
    вот скриншот рп чата:
    [​IMG]

    Проблема решена
     
    #676
    Последнее редактирование: 5 янв 2017
  37. Enotawer

    Enotawer Активный пользователь

    Регистрация:
    23.07.16
    Сообщения:
    25
    Лайки:
    1
    Репутация:
    0
    Что тут не так? В этом скрипте я пытался выполнить действие (добежать до работы), затем я пытался зациклить саму работу 50 раз. Но ничего не работает.
    Код (Text):
    ---------------------------------------------------------------------------
                BeginToPoint(1773.810059, -1896.689941, 13.570000, 1.000000, -255, true)
                BeginToPoint(1775.189941, -1896.750000, 13.410000, 1.000000, -255, true)
                BeginToPoint(1778.010010, -1884.359985, 13.580000, 1.000000, -255, true)
                BeginToPoint(1802.959961, -1884.439941, 13.600000, 1.000000, -255, true)
                BeginToPoint(1804.849976, -1884.680054, 13.430000, 1.000000, -255, true)
                BeginToPoint(1806.099976, -1886.069946, 13.430000, 1.000000, -255, true)
                BeginToPoint(1814.599976, -1896.160034, 13.600000, 1.000000, -255, true)
                BeginToPoint(1815.689941, -1898.290039, 13.600000, 1.000000, -255, true)
                BeginToPoint(1827.420044, -1910.349976, 13.540000, 1.000000, -255, true)
                BeginToPoint(1831.189941, -1923.650024, 13.570000, 1.000000, -255, true)
                BeginToPoint(1865.670044, -1939.040039, 13.570000, 1.000000, -255, true)
                BeginToPoint(1898.060059, -1942.510010, 13.570000, 1.000000, -255, true)
                BeginToPoint(1906.310059, -1944.910034, 13.570000, 1.000000, -255, true)
                BeginToPoint(1944.550049, -1959.579956, 13.570000, 1.000000, -255, true)
                BeginToPoint(1971.910034, -1965.729980, 13.610000, 1.000000, -255, true)
                BeginToPoint(1979.959961, -1968.319946, 13.610000, 1.000000, -255, true)
                wait(1000)
                EmulateKey(VK_MENU, true)
                wait(20)
                EmulateKey(VK_MENU, false)
                wait(550)
                EmulateKey(VK_RETURN, true)
                wait(20)
                EmulateKey(VK_RETURN, false)
                wait(550)
                EmulateKey(VK_RETURN, true)
                wait(20)
                EmulateKey(VK_RETURN, false)
                wait(550)
                EmulateKey(VK_SHIFT, true)
                wait(20)
                EmulateKey(VK_SHIFT, false)
                wait(110)
                BeginToPoint(1984.569946, -1968.160034, 14.460000, 1.000000, -255, true)
                BeginToPoint(2009.819946, -1964.760010, 14.460000, 1.000000, -255, true)
                BeginToPoint(2042.000000, -1963.780029, 14.460000, 1.000000, -255, true)
                i=1
                repeat
                BeginToPoint(2042.689941, -1958.270020, 14.420000, 1.000000, -255, false)
                wait(1000)
                BeginToPoint(2043.540039, -1961.729980, 14.460000, 1.000000, -255, true)
                BeginToPoint(2044.949951, -1971.569946, 14.460000, 1.000000, -255, true)
                BeginToPoint(2044.890015, -1973.569946, 13.580000, 1.000000, -255, true)
                BeginToPoint(2043.459961, -1974.160034, 13.580000, 1.000000, -255, true)
                BeginToPoint(2016.030029, -1982.199951, 13.580000, 1.000000, -255, true)
                BeginToPoint(2013.800049, -1984.640015, 13.570000, 1.000000, -255, true)
                BeginToPoint(2012.449951, -1989.239990, 13.570000, 1.000000, -255, true)
                wait(1020)
                BeginToPoint(2011.130005, -1988.060059, 13.570000, 1.000000, -255, true)
                BeginToPoint(2014.150024, -1982.479980, 13.570000, 1.000000, -255, true)
                BeginToPoint(2039.589966, -1973.589966, 13.580000, 1.000000, -255, true)
                BeginToPoint(2040.829956, -1973.010010, 13.580000, 1.000000, -255, false)
                BeginToPoint(2040.869995, -1973.010010, 13.580000, 1.000000, -255, false)
                wait(1000)
                EmulateKey(VK_SHIFT, true)
                wait(20)
                EmulateKey(VK_SHIFT, false)
                BeginToPoint(2040.859985, -1970.530029, 14.460000, 1.000000, -255, true)
                BeginToPoint(2041.400024, -1963.369995, 14.460000, 1.000000, -255, true)
                BeginToPoint(2042.439941, -1958.550049, 14.420000, 1.000000, -255, true)
                i=i+1
                until
                i<51 ---пока i будет < 51
                end
                enabled = false
    ошибка

    Попробую с помощью while
     
    #677
    Последнее редактирование: 6 янв 2017
  38. hnnssy

    hnnssy неприкосновенный
    Друг

    Регистрация:
    23.03.13
    Сообщения:
    1.374
    Лайки:
    800
    Репутация:
    130
    until i > 51
    в твоём случае
    на остальное не смотрел даже
     
    #678
    Enotawer нравится это.
  39. Enotawer

    Enotawer Активный пользователь

    Регистрация:
    23.07.16
    Сообщения:
    25
    Лайки:
    1
    Репутация:
    0
    Не, все равно не робит. Мб я не правильно сделал переход к циклу?
    [16:14:22.812788] (system) Angrybot.lua: Thread terminated (01BCAB2C)
    [16:14:22.813290] (error) C:\Games\123123\GTA San Andreas\moonloader\Angrybot.lua:97: '<eof>' expected near 'end'


    Всё понял свою ошибку, даже говорить о ней не хочу)
     
    #679
    Последнее редактирование: 6 янв 2017
  40. NARVELL

    NARVELL Пользователь

    Регистрация:
    25.11.14
    Сообщения:
    24
    Лайки:
    1
    Репутация:
    0
    Скрипт разбит на три файла (.lua), все связаны между собой. Я так понял, компилировать нужно три сразу. Как это сделать?
     
    #680