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

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

  1. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    ты используешь правильно, просто string.lower с кириллицей не работает.
     
  2. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    как же тогда быть? :(
    Не хочется для каждого регистра заготовки делать, мне б сообщение в нижний регистр перевести и было бы здорово(
     
  3. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    попробуй вызвать os.setlocale('.1251') перед string.lower
     
  4. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    Попробовал, работает частично, local message2 = string.lower(message)
    сообщения попадают в переменную message2, но в нижний регистр не переводит, в переменную попадают так как есть
     
  5. FYP

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

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

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

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

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    скачать файлы utf8.lua и utf8data.lua, засунуть их в папку lib и в скрипт добавить две строчки
    require 'lib.utf8data'
    require 'lib.utf8'

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

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    Сделал как ты написал, юзаю так:
    message2 = string.utf8lower(message)
    print(message2)
    и в игре ошибка:
    [ML] (error) test: ...gram Files\Games\GTA MULTIPLAYER\moonloader\lib\utf8.lua:89: Invalid UTF-8 character
     
  9. Garrus

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

    Регистрация:
    08.01.2016
    Сообщения:
    122
    Симпатии:
    10
    Репутация:
    2
    Ошибся темой. Эта тема для вопросов по скриптингу на lua (moonloader).
     
  10. Bogach

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

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

    Проблема решена
     
    #650 Bogach, 3 янв 2017
    Последнее редактирование: 5 янв 2017
  11. Enotawer

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

    Регистрация:
    23.07.2016
    Сообщения:
    25
    Симпатии:
    1
    Репутация:
    0
    Что тут не так? В этом скрипте я пытался выполнить действие (добежать до работы), затем я пытался зациклить саму работу 50 раз. Но ничего не работает.
    
    ---------------------------------------------------------------------------
                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
     
    #651 Enotawer, 6 янв 2017
    Последнее редактирование: 6 янв 2017
  12. hnnssy

    Друг

    Регистрация:
    23.03.2013
    Сообщения:
    1.816
    Симпатии:
    1.108
    Репутация:
    187
    until i > 51
    в твоём случае
    на остальное не смотрел даже
     
    Enotawer нравится это.
  13. Enotawer

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

    Регистрация:
    23.07.2016
    Сообщения:
    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'


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

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

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

    4el0ve4ik Дилер картошки
    Друг

    Регистрация:
    12.11.2015
    Сообщения:
    1.295
    Симпатии:
    372
    Репутация:
    97
    Зачем на три разбил? есть же многопоточность, по одному компилируй и все.
     
  16. NARVELL

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

    Регистрация:
    25.11.2014
    Сообщения:
    37
    Симпатии:
    1
    Репутация:
    0
    В одном не работает :) Многопоточность лень разбирать.
    Три скомпилированных тоже не пашут. Там инклуды.
     
    #656 NARVELL, 6 янв 2017
    Последнее редактирование: 6 янв 2017
  17. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    local hours, mins = getTimeOfDay()
    Почему минуты не получает? Часы получает, а в минутах 0.
     
  18. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    функция require загружает только lua и dll файлы, поэтому скомпилированные файлы должны иметь расширение lua.
    скомпилировать несколько файлов в один нельзя (но это не точно).
    в сампе на серверах чаще всего не выставляются минуты.
     
    Последние данные очков репутации:
    NARVELL: 1 Очко 6 янв 2017
    Ромил: 1 Очко (помощь в разработке lua скриптов) 6 янв 2017
    Ромил, Garrus и NARVELL нравится это.
  19. NARVELL

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

    Регистрация:
    25.11.2014
    Сообщения:
    37
    Симпатии:
    1
    Репутация:
    0
    В функции script_version() указывается версия скрипта, а как её потом получить?
     
  20. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    thisScript().version
     
  21. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    Почему в файл ничего не записывается?

    function sampev.onServerMessage(color, text)
        if ar == 1 then
                if color == 1724645631 then
                     perem = 0
                     id, message = string.match(text, "%a+_%a+%D(%d+)%D+%s+%D+%s+(.+)")
                     if message ~= nil then
                         local file = io.open('moonloader\\autoreport\\autoreport.txt', "a")
                          print(message)
                            file:write(message .. "\n")
    Никаких ошибок нет, но файл пуст.
    переменная message не пуста, в неё регулярно поступают сообщения, только не ведется запись в текст.файл. Папка и файл созданы, путь правильный и в названиях папки и файла ошибок нет.
     
  22. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    у плагинов нет прав писать в каталог игры, если она находится в program files или других системных директориях.
     
  23. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    На чела из списка names.txt (если он что - то напишет в рп чат) срабатывает обе проверки, подскажите как исправить, пожалуйста
    
    function sampev.onChatMessage(playerId, text)
        if x == 1 then
            chat_mat = 0
            playerid2, mess2 = string.match(text, ".(%d+)..%s(.+)")
            nickname2 = sampGetPlayerNickname(playerid2)
            local file = io.open('moonloader\\autoreport\\names.txt', "r")
            local proverka = 0
            for line in file:lines() do
                 if line ~= nickname2 then
                    proverka = 2
                    else
                        sampAddChatMessage("test", 25023851)
                        proverka = 1
                 end
            end
            io.close(file)
            if proverka == 1 then
            elseif proverka == 2 then
                if string.find(mess2, "тест") then
                    print("test")
                end
            end
        end
    end
    
     
    #663 Bogach, 12 янв 2017
    Последнее редактирование: 13 янв 2017
  24. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    Помощь все ещё требуется :(
     
  25. AppleThe

    AppleThe print("Hello World")

    Регистрация:
    18.07.2013
    Сообщения:
    177
    Симпатии:
    88
    Репутация:
    37
    Как получить хендлы всех машин в зоне стрима?
     
  26. 4el0ve4ik

    4el0ve4ik Дилер картошки
    Друг

    Регистрация:
    12.11.2015
    Сообщения:
    1.295
    Симпатии:
    372
    Репутация:
    97
    For a = 1, (тут максимальное кол во машин, не помню точно, но вроде 2000) do
    Полаешь хендл машины из ид(а)
    --все остальное.
     
  27. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
  28. A1K8M4

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

    Регистрация:
    03.02.2015
    Сообщения:
    140
    Симпатии:
    27
    Репутация:
    10
    Как отрендерить картинку в игру?
     
  29. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    Все ещё требуется помощь.
     
  30. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    
    function sampev.onChatMessage(playerId, text)
        if x == 1 then
            chat_mat = 0
            playerid2, mess2 = string.match(text, ".(%d+)..%s(.+)")
            nickname2 = sampGetPlayerNickname(playerid2)
            local file = io.open('moonloader\\autoreport\\names.txt', "r")
            local found = false
            for line in file:lines() do
                 if line == nickname2 then
                        sampAddChatMessage("test", 25023851)
                        found = true
                        break
                 end
            end
            io.close(file)
            if not found then
                if string.find(mess2, "тест") then
                    print("test")
                end
            end
        end
    end
    
     
    Последние данные очков репутации:
    Bogach: 1 Очко (Спасибо, друг.) 16 янв 2017
    Bogach нравится это.
  31. A1K8M4

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

    Регистрация:
    03.02.2015
    Сообщения:
    140
    Симпатии:
    27
    Репутация:
    10
     
  32. 4el0ve4ik

    4el0ve4ik Дилер картошки
    Друг

    Регистрация:
    12.11.2015
    Сообщения:
    1.295
    Симпатии:
    372
    Репутация:
    97
  33. A1K8M4

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

    Регистрация:
    03.02.2015
    Сообщения:
    140
    Симпатии:
    27
    Репутация:
    10
    Есть файл, 3000 строк, как из него спарсить нужные данные, например строка:
    <div class="uix_wrapperFix" style="height: 1px; margin-top: -1px;"></div>
    Как с помощью луа спарсить слово height из строки, точнее как прочитать файл, найти эту строку, вытащить слово из этой строки и в чат сампа вывести?
     
  34. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.055
    Симпатии:
    1.931
    Репутация:
    732
    советую научиться пользоваться гуглом. http://lua-users.org/wiki/LuaXml
     
  35. A1K8M4

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

    Регистрация:
    03.02.2015
    Сообщения:
    140
    Симпатии:
    27
    Репутация:
    10
    Гляжу в книгу вижу фигу, по понятней что-то можно? :D

    script_name("test")
    script_author("test")
    require("moonloader")
    require("sampfuncs")
    
    function main()
      while true do
        wait(40)
        if isKeyDown(113) then
          while isKeyDown(113) do wait(80) end
         downloadUrlToFile("http://orakul.com", "C:\\Users\\_\\Desktop\\File2.txt",statusCallback)
             file = io.open("C:\\Users\\_\\Desktop\\File2.txt")
             sampAddChatMessage(string.match(file, '<span class="name">........', 2),0xFFFFFF)
        end
      end
    end
    Вот есть код, по нажатию качает исходный текст страницы в txt, а в чат сампа ничего не выводит, почему?
     
  36. 4el0ve4ik

    4el0ve4ik Дилер картошки
    Друг

    Регистрация:
    12.11.2015
    Сообщения:
    1.295
    Симпатии:
    372
    Репутация:
    97
    io.read в помощь, не понимаю, зачем беск. цикл?
     
  37. A1K8M4

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

    Регистрация:
    03.02.2015
    Сообщения:
    140
    Симпатии:
    27
    Репутация:
    10
    ;D Он тут так и был)
     
  38. AIMP

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

    Регистрация:
    15.01.2014
    Сообщения:
    127
    Симпатии:
    23
    Репутация:
    5
    Что не так?
    function main()
        if not isSampfuncsLoaded() or not isSampLoaded() then return end
        while true do
            wait(0)
                if sampIsDialogActive() and sampGetCurrentDialogId() = 1 then
                    sampSetCurrentDialogEditboxText("mypass")
                    sampCloseCurrentDialogWithButton(1)
                end
        end
    end
     
  39. 4el0ve4ik

    4el0ve4ik Дилер картошки
    Друг

    Регистрация:
    12.11.2015
    Сообщения:
    1.295
    Симпатии:
    372
    Репутация:
    97
    Знак = присваивает, для сравнения == юзай.
     
    AIMP нравится это.
  40. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    324
    Симпатии:
    14
    Репутация:
    3
    Хочу сделать скан матов по текст.файлу, потом сравнение и далее действие, все в принципе работает, но есть одна загвостка, заготовленное действие срабатывает и на слова которых нет в текст.файле.
    Пытался делать разными способами и даже пытался повторить как делал мне FYP, но ничего не вышло.
    Помогите пожалуйста:sorry:
    function sampev.onChatMessage(playerId, text)
        if x == 1 then
            chat_mat = 0
            playerid2, mess2 = string.match(text, ".(%d+)..%s(.+)")
            nickname2 = sampGetPlayerNickname(playerid2)
            local file = io.open('moonloader\\autoreport\\nick.txt', "r")
            local found = false
            for line in file:lines() do
                 if line == nickname2 then
                    sampAddChatMessage("administrator.", 25023851)
                    found = true
                    break
                 end
            end
            io.close(file)
            if not found then
                          -- na mat
                            local mats = io.open('moonloader\\autoreport\\mats.txt', "r")
                            local found1 = false
                            for line in mats:lines() do
                                    if string.find(mess2, line) then
                                            found1 = true
                                            break
                                    end
                            end
                            io.close(mats)
                            if found1 == true then
                                 chat_mat = 1
                            end