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

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

  1. k1sher

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

    Регистрация:
    25.07.2015
    Сообщения:
    190
    Симпатии:
    4
    Репутация:
    2
    Бывает такая фигня, что в какой-то момент скрипт постоянно ждет например "ID", но бывает такое что скрипт не получил вовремя id и скрипт крашится (ошибка такая, ожидалось число, а получил nil). Как сделать проверку на ID?
     
  2. Don_Homka

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

    Регистрация:
    08.11.2017
    Сообщения:
    301
    Симпатии:
    73
    Репутация:
    19
    if ID ~= nil?




    Guys, подскажите как прочитать файл через I/O. Не получается, возвращает пустую строку(
     
  3. uczoja62

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

    Регистрация:
    20.10.2017
    Сообщения:
    35
    Симпатии:
    4
    Репутация:
    1
    local file = io.open('/file.txt', "r")
    text = file:read("*a")
    file:close()
     
  4. Don_Homka

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

    Регистрация:
    08.11.2017
    Сообщения:
    301
    Симпатии:
    73
    Репутация:
    19
    Возвращает пустоту. Играет роль расширение файла? я как ini сохранил и читаю.
     
  5. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    кидай свой код, расширение роли не играет
     
  6. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    lines = {}
    for line in io.lines('moonloader//file.ini') do
      table.insert(lines, line)
    end
    sampAddChatMessage("Загружено строк: "..#lines, -1)
    sampAddChatMessage(lines[1], -1)
    И с ини лучше работать через inicfg
    local ini = require "inicfg"
     
  7. Don_Homka

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

    Регистрация:
    08.11.2017
    Сообщения:
    301
    Симпатии:
    73
    Репутация:
    19
    У меня немного другая цель ини. Я понял в чем дело. Надо было сначала прочитать файл, потом f:close(). Затем уже редактировать его через io.open "w". Спасибо за попытки помочь)
     
  8. realgangster

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

    Регистрация:
    11.12.2017
    Сообщения:
    12
    Симпатии:
    0
    Репутация:
    1
    setVirtualKeyDown(VK_END, true)
    Как реализовать работу в свернутом режиме?
     
  9. Don_Homka

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

    Регистрация:
    08.11.2017
    Сообщения:
    301
    Симпатии:
    73
    Репутация:
    19
    Никак. Луа скрипты уходят в сон вместе с игрой.
     
  10. k1sher

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

    Регистрация:
    25.07.2015
    Сообщения:
    190
    Симпатии:
    4
    Репутация:
    2
    Может кто показать как написать скрипт.. Получения и нанесения урона от игроков и вывод их на экран?
    Может у кого есть исходник подобного или еще что.
     
  11. Mizukage

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

    Регистрация:
    30.08.2017
    Сообщения:
    19
    Симпатии:
    1
    Репутация:
    0
    Как задать скрипту многопоточность?
    Мне нужно чтобы у меня работал бот и одновременно проверялся чат на поиск ответа от администратора.

    Есть ли функция которая выбирает рандомную переменную из нескольких указанных мной?
    Я пользуюсь этим, но хотелось бы узнать есть ли другие варианты:
    
    per_1 = false
    per_2 = false
    per_3 = true
    
    local road = math.random(1,3)
    if road == 1 then
       if per_1 then
          print("Hello.")
       end
    end
    if road == 2 then
       if per_2 then
          print("World.")
       end
    end
    if road == 3 then
       if per_3 then
          print("Hello World.")
       end
    end
    
    Выше приведён лишь пример, не воспринимайте его в серьёз.
     
  12. KEPOCUH

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

    Регистрация:
    10.04.2017
    Сообщения:
    133
    Симпатии:
    25
    Репутация:
    12
    Как сделать такую команду?
    Вводишь /qwerty 1 - пишет в чат 1.
    Вводишь /qwerty 2 - тпшит на нулевые координаты
     
  13. imring

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

    Регистрация:
    03.08.2016
    Сообщения:
    149
    Симпатии:
    43
    Репутация:
    11
    sampRegisterChatCommand('cmd', function(number)
    if tonumber(number) then
    if tonumber(number) == 1 then
    sampAddChatMessage('1', -1)
    elseif tonumber(number) == 2 then
    setCharCoordinates(playerPed, 0, 0, 0)
    end
    end
    end)
     
    KEPOCUH нравится это.
  14. violance

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

    Регистрация:
    31.12.2015
    Сообщения:
    72
    Симпатии:
    30
    Репутация:
    11
    Как получить скалярное произведение вектора по осям X Y Z
     
  15. Artur_iOS

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

    Регистрация:
    18.03.2017
    Сообщения:
    108
    Симпатии:
    31
    Репутация:
    8
    Используй хук и можешь обойтись тогда без многопоточности.
    local pers = {
            ["per_1"] = {["active"] = false, "Hello.", "World."},
            ["per_2"] = {["active"] = false, "World.", "Hello."},
            ["per_3"] = {["active"] = true, "Hello World."}
            }
    local road = pers["per_" .. math.random(1,3)]
    for i = 1,#road do
        if road["active"] then
            sampAddChatMessage(road[i], -1)
        end
    end
     
  16. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    local words = {"Hello.", "World.", "Hello World."}
    print(words[math.random(1, #words)])
    '

    C таким кодом можно сколько угодно добавить в массив слов, а принт изменять не надо будет, считает рандом от одного до максимального кол-ва элементов в массиве
     
  17. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    Как получить время и число ответов из такой строки:
    Время online за текущий день - 8:10:51 (Без учета АФК) | Ответов: 270
    Просто с регулярками для match проблема

    local h, m, s, answers = string.match...
     
  18. Artur_iOS

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

    Регистрация:
    18.03.2017
    Сообщения:
    108
    Симпатии:
    31
    Репутация:
    8
    
    local h, m, s, answers = string.match("Время online за текущий день - 8:10:51 (Без учета АФК) | Ответов: 270", "Время%sonline%sза%sтекущий%sдень%s%-%s(%d+)%:(%d+)%:(%d+)%s%(Без%sучета%sАФК%)%s%|%sОтветов%:%s(%d+)")
    
     
    ufdhbi нравится это.
  19. castlefamily

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

    Регистрация:
    22.05.2017
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Возможно ли на Lua AнтиАФК написать?)

    И ещё хотел узнать, как получить PAD игрока, если он не в зоне стрима? :( - наверн тупой вопрос, сори
     
  20. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    343
    Симпатии:
    15
    Репутация:
    5
    Ребятки, учу imgui, все было нормально, подключил все нужные библиотеки, написал вот эту строку с мануала
    if imgui.InputText(u8'Вводить текст сюда ',test_text_buffer) then
                  imgui.Text(u8'Введенный текст: ' .. test_text_buffer.v)
             end
    игра начала зависать, а затем и крашиться, что не так? Не пойму, вроде точь в точь написал.
     
  21. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    весь код скрипта
     
  22. NikeSanchez

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

    Регистрация:
    24.10.2015
    Сообщения:
    10
    Симпатии:
    0
    Репутация:
    0
    Переменную test_text_buffer задал?
    local test_text_buffer = imgui.ImBuffer('text', 256)
     
  23. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    343
    Симпатии:
    15
    Репутация:
    5
    script_name("test")
    script_author("R.Chelios")
    
    --[[ Подключение Библиотек ]]
    require "lib.moonloader"
    require "lib.sampfuncs"
    local inicfg = require "inicfg"
    local sampev = require("lib.samp.events")
    local key = require 'vkeys'
    local imgui = require 'imgui'
    local encoding = require 'encoding'
    encoding.default = 'CP1251'
    u8 = encoding.UTF8
    
    local main_window_state = imgui.ImBool(false)
    function imgui.OnDrawFrame()
        if main_window_state.v then
             imgui.SetNextWindowSize(imgui.ImVec2(250,300),imgui.Cond.FirstUseEver) -- Меняем размер
             imgui.Begin(u8'Тестовое окно',main_window_state)
             imgui.Text(u8'Привет Мир.')
             if imgui.InputText(u8'Вводить текст сюда ',test_text_buffer) then
                 imgui.Text(u8'Введенный текст: ' .. test_text_buffer.v)
             end
             if imgui.Button(u8'Нажми меня') then
                  sampAddChatMessage("Кнопка нажата", -1)
             end
             imgui.End()
        end
    end
    
    function main()
        while true do
        wait(0)
            if wasKeyPressed(VK_X) then
                 main_window_state.v = not main_window_state.v
            end
            imgui.Process = main_window_state.v
        end
    end
    
     
  24. Bogach

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

    Регистрация:
    09.11.2015
    Сообщения:
    343
    Симпатии:
    15
    Репутация:
    5
    Проглядел, извиняюсь.
     
  25. imring

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

    Регистрация:
    03.08.2016
    Сообщения:
    149
    Симпатии:
    43
    Репутация:
    11
    local h, m, s, answers = string.match('Время online за текущий день - 8:10:51 (Без учета АФК) | Ответов: 270', '.+-.(%d+):(%d+):(%d+).+:.(%d+)')
     
    ufdhbi нравится это.
  26. Artur_iOS

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

    Регистрация:
    18.03.2017
    Сообщения:
    108
    Симпатии:
    31
    Репутация:
    8
    Я привык полностью экранировать все, не пропуская ни одного символа. Это уменьшает количество ложных срабатываний и легче воспринимается(ну лично мне как минимум).
     
  27. violance

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

    Регистрация:
    31.12.2015
    Сообщения:
    72
    Симпатии:
    30
    Репутация:
    11
    Почему нельзя использовать несколько return в функциях? Почему возвращаемое значение всегда будет самым последним return в функции
     
  28. kewa opcode

    kewa opcode плакса
    Проверенный

    Регистрация:
    15.04.2017
    Сообщения:
    317
    Симпатии:
    209
    Репутация:
    24
    создавай переменную с таким же типом который возвращает функция и возвращай эту переменную а в блоке функции просто меняй ее значение
     
    Последние данные очков репутации:
    violance: 1 Очко (thanks my brudah) 12 янв 2018
    violance нравится это.
  29. k1sher

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

    Регистрация:
    25.07.2015
    Сообщения:
    190
    Симпатии:
    4
    Репутация:
    2
    Как узнать сколько по мне нанесли урона и сколько я нанёс урона игроку? Как в дамаг информере, типа.
     
  30. imring

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

    Регистрация:
    03.08.2016
    Сообщения:
    149
    Симпатии:
    43
    Репутация:
    11
    while true do wait(0)
        if health then
            if health > getCharHealth(playerPed) then
                local damage = health-getCharHealth(playerPed)
                health = getCharHealth(playerPed)
                -- Дальше свой код
            end
        else health = getCharHealth(playerPed) end
    end
     
    #2790 imring, 12 янв 2018
    Последнее редактирование: 12 янв 2018
  31. FYP

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

    Регистрация:
    09.03.2013
    Сообщения:
    1.316
    Симпатии:
    2.414
    Репутация:
    816
    что за чепуха? как это нельзя?
     
    Последние данные очков репутации:
    violance: 1 Очко (Почему возвращаемое значение всегда будет самым последним return в функции, не так изложил мысль) 12 янв 2018
  32. castlefamily

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

    Регистрация:
    22.05.2017
    Сообщения:
    25
    Симпатии:
    0
    Репутация:
    0
    Извините за самый тупой вопрос, который наверное много раз уже задавали, но можно ли узнать PAD игрока вне зона стрима? :( (и как если да)
     
  33. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    Нельзя
     
    Последние данные очков репутации:
    violance: 1 Очко (поздравляю брат) 13 янв 2018
    violance и castlefamily нравится это.
  34. Mizukage

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

    Регистрация:
    30.08.2017
    Сообщения:
    19
    Симпатии:
    1
    Репутация:
    0
    Что такое хук и как его использовать?
    P.s. не так давно изучаю Lua.
     
  35. ufdhbi

    Проверенный

    Регистрация:
    03.02.2015
    Сообщения:
    329
    Симпатии:
    97
    Репутация:
    30
    Вопросы по Lua скриптингу
     
  36. Artur_iOS

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

    Регистрация:
    18.03.2017
    Сообщения:
    108
    Симпатии:
    31
    Репутация:
    8
    SAMP.Lua(https://blast.hk/threads/14624/)
     
  37. etoeto

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

    Регистрация:
    24.12.2017
    Сообщения:
    5
    Симпатии:
    0
    Репутация:
    0
  38. iTzKisn

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

    Регистрация:
    23.09.2017
    Сообщения:
    70
    Симпатии:
    2
    Репутация:
    2
    Здравствуйте. новичОк в луа, как сделать так, чтобы после нажатии N-ой клавиши в чат отправлялся твой текущий ид?
     
    #2798 iTzKisn, 13 янв 2018
    Последнее редактирование: 13 янв 2018
  39. imring

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

    Регистрация:
    03.08.2016
    Сообщения:
    149
    Симпатии:
    43
    Репутация:
    11
    if wasKeyPressed(0x4E) then -- Если нажал на N, то..
        local _, myid = sampGetPlayerIdByCharHandle(playerPed) -- Узнаёт свой ID
        sampAddChatMessage(tostring(myid), -1) -- Выводит свой ID в чат
    end
     
    Последние данные очков репутации:
    iTzKisn: 1 Очко 13 янв 2018
    violance: 1 Очко 13 янв 2018
    violance и iTzKisn нравится это.
  40. Laine_prikol

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

    Регистрация:
    03.11.2015
    Сообщения:
    117
    Симпатии:
    49
    Репутация:
    9
    Слишком костыльно...
    DialogText = table.concat(array, "\n")
     
    Don_Homka нравится это.