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

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

  1. laz3r228

    laz3r228 Свой человек

    Регистрация:
    24 ноя 2016
    Сообщения:
    357
    Симпатии:
    36
    Как можно получить список файлов в папке?
     
  2. Petr_Sergeevich

    Petr_Sergeevich Свой человек

    Регистрация:
    25 июн 2017
    Сообщения:
    433
    Симпатии:
    105
    
    -- Со сворачиванием игры (из-за открытия cmd)
    for line in io.popen("dir /p Desktop /b /a", "r"):lines() do
        print(line)
    end
    
    -- Без сворачивания игры
    local lfs = require 'lfs'
    for line in lfs.dir(getWorkingDirectory()) do
        print(line)
    end
    
     
    wizX, Quasper и laz3r228 нравится это.
  3. Serty333333

    Serty333333 Активный участник

    Регистрация:
    16 окт 2018
    Сообщения:
    31
    Симпатии:
    0
    if imgui.Button(u8"Японский акцент.") then
    sampSetChatInputText("[Японский акцент]: ")
    sampSetChatInputEnabled(true)
    end
    в imgui, как сделать так, что бы если человек выбрал уже Японский акцен, то он у него был до тех пор. пока он не выключит его.
     
  4. buyerdev

    buyerdev Новичок

    Регистрация:
    13 мар 2019
    Сообщения:
    4
    Симпатии:
    0
    В определенный момент сервер открывает диалог и фризит тебя на 1-2 секунды, как оффнуть диалог разобрался, а как убрать этот фриз именно в момент открытия этого диалога, знает кто?
     
  5. Biri

    Biri Участник

    Регистрация:
    29 ноя 2017
    Сообщения:
    16
    Симпатии:
    1
    function main()
        if not isSampLoaded() or not isSampfuncsLoaded() then return end
        while not isSampAvailable() do wait(0) end
        while true do
            wait(0)
            if sampIsDialogActive() then
                if sampGetCurrentDialogId() == 0 then
                    sampCloseCurrentDialogWithButton(1)
                end
            end
        end
    end
     
  6. buyerdev

    buyerdev Новичок

    Регистрация:
    13 мар 2019
    Сообщения:
    4
    Симпатии:
    0
    Фриз серверный не убирает
     
  7. Serty333333

    Serty333333 Активный участник

    Регистрация:
    16 окт 2018
    Сообщения:
    31
    Симпатии:
    0
    if imgui.Button(u8"Японский акцент.") then
    sampSetChatInputText("[Японский акцент]: ")
    sampSetChatInputEnabled(true)
    end
    в imgui, как сделать так, что бы если человек выбрал уже Японский акцен, то он у него был до тех пор. пока он не выключит его.
     
  8. Biri

    Biri Участник

    Регистрация:
    29 ноя 2017
    Сообщения:
    16
    Симпатии:
    1
    устанавливать unfreeze or antifreeze
     
  9. Xean

    Xean Интересующийся

    Регистрация:
    5 мар 2019
    Сообщения:
    103
    Симпатии:
    45
    я бы тебе посоветовал тут сделать через перехват РПС сделать.
    local japan = imgui.ImBool(false) -- извините что не в тему, но Япония = аниме
    
    imgui.Checkbox(u8'Японский акцент', japan) -- внутри ОнДравФрейм
    
    function sampev.onSendChat(message) -- вне ОнДравФрейм
        if japan.v and message then
           return{string.format('[Японский акцент]: %s', message)}
        end
    end
     
  10. Serty333333

    Serty333333 Активный участник

    Регистрация:
    16 окт 2018
    Сообщения:
    31
    Симпатии:
    0
    Чет не работает братик.
     
  11. Xean

    Xean Интересующийся

    Регистрация:
    5 мар 2019
    Сообщения:
    103
    Симпатии:
    45
    кинь фулл код
     
  12. Serty333333

    Serty333333 Активный участник

    Регистрация:
    16 окт 2018
    Сообщения:
    31
    Симпатии:
    0
    Дай ВК)
     
  13. madrasso

    madrasso Свой человек

    Регистрация:
    27 июл 2016
    Сообщения:
    487
    Симпатии:
    66
    хелп
     
    #23568 madrasso, 14 мар 2019
    Последнее редактирование: 14 мар 2019
  14. efrowa

    efrowa Активный участник

    Регистрация:
    15 янв 2019
    Сообщения:
    34
    Симпатии:
    3
    Можно кликнуть по 3д тексту?
     
  15. trefa

    trefa 000011100010111000101010000011100010111100011100
    Проверенный

    Регистрация:
    5 фев 2015
    Сообщения:
    961
    Симпатии:
    381
    What?
     
  16. efrowa

    efrowa Активный участник

    Регистрация:
    15 янв 2019
    Сообщения:
    34
    Симпатии:
    3
    понял.
     
  17. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    Крашит скрипт при сохранении INI файла. Не могу въебать, почему же.

    [10:05:55.214277] (error)    Script.lua: cannot resume non-suspended coroutine
    stack traceback:
        [C]: in function 'save'
        ...gram Files (x86)\GTA San Andreas\moonloader\Script.lua:49: in function <...gram Files (x86)\GTA San Andreas\moonloader\Script.lua:13>
    
    local isIniLoaded = inicfg.load(nil, "..\\Script.ini") -- Начало кода, проверка/создание INI файла
    if isIniLoaded == nil then
        local SETTINGS = inicfg.load({
            global = {
                myParam = false
            }
        }, "..\\Script.ini")
        inicfg.save(SETTINGS, "..\\Script.ini")
    end
    
    -- В main'е
    if button == 1 then -- Обычное переключение INI значения по нажатию кнопки диалога.
        isIniLoaded.global.myParam = true
        inicfg.save(SETTINGS, "..\\Script.ini") -- Данная строка и крашит скрипт.
    elseif button == 0 then
        isIniLoaded.global.myParam = false
        inicfg.save(SETTINGS, "..\\Script.ini") -- Данная строка и крашит скрипт.
    end
    
     
  18. trefa

    trefa 000011100010111000101010000011100010111100011100
    Проверенный

    Регистрация:
    5 фев 2015
    Сообщения:
    961
    Симпатии:
    381
    Изменяешь одну таблицу, а сохраняешь вообще другую.
     
  19. Quasper

    Quasper Постоянный участник

    Регистрация:
    14 мар 2015
    Сообщения:
    80
    Симпатии:
    14
    
    local isIniLoaded = inicfg.load(nil, "..\\Script.ini") 
    if isIniLoaded == nil then
        local isIniLoaded = inicfg.load({
            global = {
                myParam = false
            }
        }, "..\\Script.ini")
        inicfg.save(isIniLoaded, "..\\Script.ini")
    end
    
    -- В main'е
    if button == 1 then 
        isIniLoaded.global.myParam = true
        inicfg.save(isIniLoaded, "..\\Script.ini")
    elseif button == 0 then
        isIniLoaded.global.myParam = false
        inicfg.save(isIniLoaded, "..\\Script.ini")
    end
    
    Так должно работать, проблема твоя в том что: ты грузишь ини в таблицу "isIniLoaded" и если его нет то ты создаешь таблицу "SETTINGS" и при выполнении условия ты пытаешься отредактировать несуществующую таблицу и сохранить ее в "SETTINGS"
     
    Harryss нравится это.
  20. BH:Pchela

    BH:Pchela Активный участник

    Регистрация:
    17 авг 2015
    Сообщения:
    27
    Симпатии:
    0
    Как сделать скриншот и сохранить его в определенную папку?
     
  21. Petr_Sergeevich

    Petr_Sergeevich Свой человек

    Регистрация:
    25 июн 2017
    Сообщения:
    433
    Симпатии:
    105
    Сделает скриншот и сохранит в папку screens
    
    local memory = require 'memory'
    memory.setuint8(sampGetBase() + 0x119CBC, 1)
    
     
    BH:Pchela нравится это.
  22. GovnocodeLua

    GovnocodeLua Интересующийся

    Регистрация:
    24 июн 2018
    Сообщения:
    183
    Симпатии:
    14
    Можно ли как-то увеличить контраст и т.п настройки картинку в lua
     
  23. T1cKz

    T1cKz Знающий

    Регистрация:
    27 апр 2015
    Сообщения:
    268
    Симпатии:
    70
    invalid pattern capture
    stack traceback:
    [C]: in function 'gsub'
    Переменные привёл к примеру что я хочу сделать с текстом. Но возникает такая ошибка, и вообще хз в чём я не прав тут
    
    local text = [[Ела Маша яблоки, а они сук
    гнилые были
    здохла она крч
    ]]
    local txt = "гнилые были"
    if text:find(txt) then
        newtext = text:gsub(txt, "")
    end
    p.s. Решил. Я просто использовал скобку в тексте переменной
     
    #23578 T1cKz, 15 мар 2019 в 16:55
    Последнее редактирование: 15 мар 2019 в 17:13
  24. #Incognito.

    #Incognito. Интересующийся

    Регистрация:
    10 авг 2016
    Сообщения:
    110
    Симпатии:
    21
    Как сделать так что если здоровья меньше 30 - пишет в чат
     
  25. Pakulichev

    Pakulichev Свой человек

    Регистрация:
    28 окт 2017
    Сообщения:
    404
    Симпатии:
    110
    Есть отличное предложение - ловить RPC получения урона от игрока и писать сообщение в чат через sampAddChatMessage.
    Ещё одно менее хорошее предложение - в потоке проверять количество HP и выводить через ту же функцию, что и выше.
    local result, playerid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    if result then
    local health = sampGetPlayerHealth(playerid)
    if health and health < 30 then
    sampAddChatMessage("Вам хана", -1)
    end
    end
    А если ты очень продвинутый пользователь и хочешь, чтобы тебе приходило только одно сообщение, то сделай вот таким образом.
    В начале своего скрипта:
    
    local health_state = false
    
    В потоке:
    
    local result, playerid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    if result then
    local health = sampGetPlayerHealth(playerid)
    if health and health >= 30 and health_state then health_state = false end
    if health and health < 30 and not health_state then
    health_state = true
    sampAddChatMessage("Вам хана", -1)
    end
    end
    А вот таким образом это можно реализовать через 115 RPC:
    
    function onReceiveRpc(id, bs)
    if id == 115 then
    local taken = raknetBitStreamReadBool(bs)
    local playerid = raknetBitStreamReadInt16(bs)
    local damage = raknetBitStreamReadFloat(bs)
    local weap = raknetBitStreamReadInt32(bs)
    local bodypart = raknetBitStreamReadInt32(bs)
    if taken then
    local result, playerid = sampGetPlayerIdByCharHandle(PLAYER_PED)
    if result then
    local health = sampGetPlayerHealth(playerid)
    if health and health < 30 then
    sampAddChatMessage("Вам хана", -1)
    end
    end
    end
    end
    end
    
    На самом деле, не уверен на счёт последнего варианта с RPC, не проверял.
     
    #23580 Pakulichev, 15 мар 2019 в 17:43
    Последнее редактирование: 15 мар 2019 в 17:58
    #Incognito. нравится это.
  26. Petr_Sergeevich

    Petr_Sergeevich Свой человек

    Регистрация:
    25 июн 2017
    Сообщения:
    433
    Симпатии:
    105
    
    local health = getCharHealth(PLAYER_PED)
    
     
  27. KwisT879

    KwisT879 Новичок

    Регистрация:
    5 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Подскажите, пожалуйста, как занести данные массива в свой диалог, чтобы каждый элемент на новой строке был?
     
  28. Petr_Sergeevich

    Petr_Sergeevich Свой человек

    Регистрация:
    25 июн 2017
    Сообщения:
    433
    Симпатии:
    105
    
    sampShowDialog(5, "Header", table.concat(array, "\n"), "Выбрать", "Выход", 4)
    
     
    KwisT879 нравится это.
  29. Alkasch226

    Alkasch226 Активный участник

    Регистрация:
    3 авг 2015
    Сообщения:
    35
    Симпатии:
    4
    Как заблокировать нажатие клавиши в игре?
     
  30. hhti

    hhti Знающий

    Регистрация:
    27 авг 2018
    Сообщения:
    205
    Симпатии:
    13
    как сделать таймер например на 3 минуты? нужно чтобы на экране шёл таймер от 0 секунд до 3 минут.
     
  31. #Incognito.

    #Incognito. Интересующийся

    Регистрация:
    10 авг 2016
    Сообщения:
    110
    Симпатии:
    21
    как сделать чтобы если написали меньше 1 и не цифру - пишет в чат

    if imgui.InputText(u8'Процент здоровья', imBool9) then cfg.settings.hp = imBool9.v end
     
  32. GovnocodeLua

    GovnocodeLua Интересующийся

    Регистрация:
    24 июн 2018
    Сообщения:
    183
    Симпатии:
    14
    Сделай слайдером
    imgui.SliderFloat("Slider", slider1, 1, 100)
     
    #Incognito. нравится это.
  33. Akionka

    Akionka Знающий

    Регистрация:
    2 фев 2018
    Сообщения:
    221
    Симпатии:
    90
    if imgui.InputText(u8'Процент здоровья', imBool9, imgui.InputTextFlags.CharsDecimal) then
        if tonumber(imBool9.v) < 1 then
            sampAddChatMessage("123abc", - 1)
            imBool9.v = '1'
        else
            imBool9.v cfg.settings.hp = imBool9.v
        end
    end
    Вроде так.
    Со слайдером топ идея, кстати. Лучше сделай через него.
     
    #Incognito. нравится это.
  34. astynk

    astynk Интересующийся

    Регистрация:
    21 окт 2018
    Сообщения:
    190
    Симпатии:
    81
    function onWindowMessage(msg, wparam)
        if msg == 0x100 and wparam == VK_W then
            consumeWindowMessage()
        end
    end
     
    Alkasch226 нравится это.
  35. hhti

    hhti Знающий

    Регистрация:
    27 авг 2018
    Сообщения:
    205
    Симпатии:
    13
    актуально, хелп плиз