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

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

  1. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    local hours, mins = getTimeOfDay()
    Почему минуты не получает? Часы получает, а в минутах 0.
     
    #681
  2. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    функция require загружает только lua и dll файлы, поэтому скомпилированные файлы должны иметь расширение lua.
    скомпилировать несколько файлов в один нельзя (но это не точно).
    в сампе на серверах чаще всего не выставляются минуты.
     
    Последние данные очков репутации:
    NARVELL: 1 Очко 6 янв 2017
    Ромил: 1 Очко (помощь в разработке lua скриптов) 6 янв 2017
    #682
    Ромил, Garrus и NARVELL нравится это.
  3. NARVELL

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

    Регистрация:
    25.11.14
    Сообщения:
    25
    Лайки:
    1
    Репутация:
    0
    В функции script_version() указывается версия скрипта, а как её потом получить?
     
    #683
  4. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    thisScript().version
     
    #684
  5. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Почему в файл ничего не записывается?

    Код (Lua):
    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 не пуста, в неё регулярно поступают сообщения, только не ведется запись в текст.файл. Папка и файл созданы, путь правильный и в названиях папки и файла ошибок нет.
     
    #685
  6. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    у плагинов нет прав писать в каталог игры, если она находится в program files или других системных директориях.
     
    #686
  7. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    На чела из списка names.txt (если он что - то напишет в рп чат) срабатывает обе проверки, подскажите как исправить, пожалуйста
    Код (Lua):
    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
     
    #687
    Последнее редактирование: 13 янв 2017
  8. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Помощь все ещё требуется :(
     
    #688
  9. AppleThe

    AppleThe print("Hello World")
    Проверенный

    Регистрация:
    18.07.13
    Сообщения:
    137
    Лайки:
    61
    Репутация:
    24
    Как получить хендлы всех машин в зоне стрима?
     
    #689
  10. 4el0ve4ik

    4el0ve4ik Алёша
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    1.052
    Лайки:
    268
    Репутация:
    67
    For a = 1, (тут максимальное кол во машин, не помню точно, но вроде 2000) do
    Полаешь хендл машины из ид(а)
    --все остальное.
     
    #690
  11. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
  12. ufdhbi

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

    Регистрация:
    03.02.15
    Сообщения:
    114
    Лайки:
    27
    Репутация:
    10
    Как отрендерить картинку в игру?
     
    #692
  13. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Все ещё требуется помощь.
     
    #693
  14. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    Код (Lua):
    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
    #694
    Bogach нравится это.
  15. ufdhbi

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

    Регистрация:
    03.02.15
    Сообщения:
    114
    Лайки:
    27
    Репутация:
    10
     
    #695
  16. 4el0ve4ik

    4el0ve4ik Алёша
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    1.052
    Лайки:
    268
    Репутация:
    67
    #696
  17. ufdhbi

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

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

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    советую научиться пользоваться гуглом. http://lua-users.org/wiki/LuaXml
     
    #698
  19. ufdhbi

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

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

    Код (Lua):
    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, а в чат сампа ничего не выводит, почему?
     
    #699
  20. 4el0ve4ik

    4el0ve4ik Алёша
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    1.052
    Лайки:
    268
    Репутация:
    67
    io.read в помощь, не понимаю, зачем беск. цикл?
     
    #700
  21. ufdhbi

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

    Регистрация:
    03.02.15
    Сообщения:
    114
    Лайки:
    27
    Репутация:
    10
    ;D Он тут так и был)
     
    #701
  22. AIMP

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

    Регистрация:
    15.01.14
    Сообщения:
    44
    Лайки:
    1
    Репутация:
    0
    Что не так?
    Код (Lua):
    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
     
    #702
  23. 4el0ve4ik

    4el0ve4ik Алёша
    Друг

    Регистрация:
    12.11.15
    Сообщения:
    1.052
    Лайки:
    268
    Репутация:
    67
    Знак = присваивает, для сравнения == юзай.
     
    #703
    AIMP нравится это.
  24. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Хочу сделать скан матов по текст.файлу, потом сравнение и далее действие, все в принципе работает, но есть одна загвостка, заготовленное действие срабатывает и на слова которых нет в текст.файле.
    Пытался делать разными способами и даже пытался повторить как делал мне FYP, но ничего не вышло.
    Помогите пожалуйста:sorry:
    Код (Lua):
    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
     
    #704
  25. VLnet

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

    Регистрация:
    02.11.15
    Сообщения:
    16
    Лайки:
    0
    Репутация:
    0
    Привет всем, обнаружил список уж очень интересных функций, но не могу найти описание\использование (а в идеале и пример ;D)
    Код (Lua):
    renderBegin(2)
    renderColor(0xFFFFFFFF)
    renderVertex(100.0, 100.0)
    renderVertex(120.0, 110.0)
    renderVertex(140.0, 140.0)
    renderEnd()

    renderSetTexCoord(float posX, float posY)
    renderBindTexture(int texture)

    При использовании (xp yp zp - xyz Player):
    Код (Lua):
    xt = representIntAsFloat(readMemory(13099016 , 4, true))
                yt = representIntAsFloat(readMemory(13099020 , 4, true))
                zt = representIntAsFloat(readMemory(13099024 , 4, true))
    if isKeyDown(93) then
        if xt ~= nil and yt ~= nil and zt ~= nil then
    if xp ~= xt and yp ~= yt and zp ~= zt then
                taskFollowPathNodesToCoord(playerPed, xt,yt,zt, 7,1)
            end end
    end
    рандомно игра вылетает с ошибкой Visual C++ "R6025"
     
    #705
    Последнее редактирование: 22 янв 2017
  26. legend2360

    legend2360 Ух как люблю скобочки
    Всефорумный модератор

    Регистрация:
    23.03.13
    Сообщения:
    2.022
    Лайки:
    677
    Репутация:
    418
    Для поиска подстроки используй string.find(str, substr, 1, true): http://www.lua.ru/doc/5.4.html (подробнее про эти параметры для этой функции можешь прочитать здесь)
     
    #706
  27. VLnet

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

    Регистрация:
    02.11.15
    Сообщения:
    16
    Лайки:
    0
    Репутация:
    0

    + Или я рак или не работают аудио функции (в консоль выводится Done но нету звука, в настройках все на макс):
    Код (Lua):
    b, audio = loadAudioStream("moonloader/res/audio/AppleDown.mp3")
    if b then sampfuncsLog("Done") else sampfuncsLog("Fuck")end
    setAudioStreamState(audio, 0)
    setAudioStreamVolume(audio, 1.0)
    setAudioStreamLooped(audio, true)
     
    #707
  28. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    это функции из sampfuncs, они для рисования кастомных примитивов. документации по ним нету, но есть пара примеров:
    Код (Lua):
    require"lib.sampfuncs"

    function drawBorderedTriangle(x1, y1, x2, y2, x3, y3, color, borderColor)
      renderSetRenderState(176, 1)
      renderBegin(D3DPT_TRIANGLESTRIP)
       renderColor(color)
       renderVertex(x2, y2)
       renderVertex(x1, y1)
       renderVertex(x3, y3)
      renderEnd()
      renderBegin(D3DPT_LINESTRIP)
       renderColor(borderColor)
       renderVertex(x1, y1)
       renderVertex(x2, y2)
       renderVertex(x3, y3)
       renderVertex(x1, y1)
      renderEnd()
    end

    function drawBorderedQuad(x1, y1, x2, y2, x3, y3, x4, y4, color, borderColor)
      renderSetRenderState(176, 1)
      renderBegin(D3DPT_TRIANGLESTRIP)
       renderColor(color)
       renderVertex(x1, y1)
       renderVertex(x2, y2)
       renderVertex(x4, y4)
       renderVertex(x3, y3)
      renderEnd()
      renderBegin(D3DPT_LINESTRIP)
       renderColor(borderColor)
       renderVertex(x1, y1)
       renderVertex(x2, y2)
       renderVertex(x3, y3)
       renderVertex(x4, y4)
       renderVertex(x1, y1)
      renderEnd()
    end

    function drawStar(x, y, size, corners, cornerColor, centerColor, depthPercent)
      D3DRS_SHADEMODE        = 9
      D3DSHADE_GOURAUD        = 2
      corners = corners * 2
      local depth = size / 100 * depthPercent
      renderSetRenderState(161, 1)
      renderSetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD)
      renderBegin(D3DPT_TRIANGLEFAN)
       renderColor(centerColor)
       renderVertex(x, y) -- center point
       renderColor(cornerColor)
       for i = corners, 0, -1 do
        local vec = math.pi * 2 / corners * i
        local sz = size
        if math.fmod(i, 2) ~= 0 then
         sz = sz - depth
        end
        sz = -sz
        renderVertex(math.sin(vec) * sz + x, math.cos(vec) * sz + y)
       end
      renderEnd()
    end

    -- примеры вызова drawStar:
    -- drawStar(100, 100, 100, 5, 0xFFDD0000, 0xFFFFFFFF, 55)
    -- drawStar(50, 230, 45, 7, 0xFFDD0000, 0xFFFFFFFF, 65)
    -- drawStar(230, 200, 100, 4, 0xFFCC0000, 0xAAFF00FF, 65)
    в игре много проблемных опкодов, многие из которых в сампе вообще не работают, а другие требуют специальных условий для нормальной работы. к вылету приводит, скорее всего, taskFollowPathNodesToCoord. решение можно найти в каких-нибудь клео скриптах, в которых используется этот опкод.
    setAudioStreamState(audio, 1)
     
    Последние данные очков репутации:
    VLnet: 1 Очко 23 янв 2017
    #708
    Последнее редактирование: 23 янв 2017
    VLnet нравится это.
  29. VLnet

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

    Регистрация:
    02.11.15
    Сообщения:
    16
    Лайки:
    0
    Репутация:
    0
    Можно чуть по подробней, какие значения могут принимать эти функции?
    Код (Lua):
    renderBegin(D3DPT_TRIANGLEFAN)
    renderSetRenderState(176, 1)
    Код (Lua):
    function drawStar(x, y, a,status, color)
      renderDrawBox(x, y, a,a,0xFF000000)
        renderSetRenderState(176, 1)
      renderBegin(D3DPT_TRIANGLEFAN)
            renderColor(color)
            renderVertex(x + (a / 2), y + (a / 2))
            renderVertex(x + (a / 2), y)

            if status > 1/8 then renderVertex(x + a, y) end
            if status > 3/8 then renderVertex(x + a, y + a) end
            if status > 5/8 then renderVertex(x, y+ a) end
            if status > 7/8 then renderVertex(x, y) end
            local angle = 2 * status * math.pi

            if status > 7/8 or status < 1/8 then
                renderVertex((math.tan(angle) * a /2) + x + (a/2), y)
            end
            if status > 1/8 and status < 3/8 then
                renderVertex(x + a,  y + (a/2) + ( math.tan(angle - (math.pi/2)) * a / 2))
            end
            if status > 3/8 and status < 5/8 then
                renderVertex(x + (a/2) - (math.tan(angle - math.pi) * a /2), y + a)
            end
            if status > 5/8 and status < 7/8 then
                renderVertex(x, y + (a/2) - (math.tan(angle - (math.pi*1.5)) * a /2))
            end

            renderEnd()
    end

    --[[
    Пример вызова:
    for i = 0, 1.0,0.005 do
                drawStar(500, 500, 200, i,  0xFF59a9df)
                wait(10)
                end
     
    #709
    Последнее редактирование: 23 янв 2017
  30. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Подскажите пожалуйста как получить игроков в зоне стрима
     
    #710
  31. RedBoxWhite

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

    Регистрация:
    06.03.16
    Сообщения:
    273
    Лайки:
    12
    Репутация:
    5
    Проверяй всех игроков doesCharExist(pedhandle ped)
     
    #711
  32. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Что не так?
    Код (Lua):
    script_name("Nickname")
    script_author("_")

    require("lib.moonloader")
    require "lib.sampfuncs"

    function main()
        while isSampAvailable() do wait(100) end
        local rfonts = renderCreateFont("Arial", 15, 1)
        while true do
            wait(0)
            for i = 0, 1000 do
                if sampIsPlayerConnected(i) then
                     local _, actor = sampGetCharHandleBySampPlayerId(i)
                     if doesCharExist(actor) then
                          ahealth = sampGetPlayerHealth(i)
                         local posX, posY, posZ = getCharCoordinates(actor)
                         wposX, wposY = convert3DCoordsToScreen(posX, posY, posZ)
                         renderFontDrawText(rfonts, ahealth, wposX, wposY, -1)
                     end
                end
            end
        end
    end
    Код (Text):
    [ML] (error) Nickname: cannot resume non-suspended coroutine
    [ML] (error) Nickname: Script died due to error. (01A62E6C)
     
    #712
  33. legend2360

    legend2360 Ух как люблю скобочки
    Всефорумный модератор

    Регистрация:
    23.03.13
    Сообщения:
    2.022
    Лайки:
    677
    Репутация:
    418
    1. while not isSampAvailable()
    2. renderFontDrawText(rfonts, tostring(ahealth), wposX, wposY, -1)
     
    #713
  34. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    что такое tostring ?
     
    #714
  35. VLnet

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

    Регистрация:
    02.11.15
    Сообщения:
    16
    Лайки:
    0
    Репутация:
    0
    #715
  36. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Как сделать так, чтобы ники были четко закреплены над головой?
    Сейчас это выглядит пиздец не красиво, ещё когда в машине человека 4 сидит их ники в одном месте показываются крч пиздец)
    Код (Lua):
    script_name("Nickname")
    script_author("_")

    require("lib.moonloader")
    require "lib.sampfuncs"

    function main()
        while not isSampAvailable() do wait(100) end
        local rfonts = renderCreateFont("Arial", 10, 1)
        local rfonts2 = renderCreateFont("Arial", 8, 1)
        while true do
            wait(0)
            for i = 0, 1000 do
                if sampIsPlayerConnected(i) then
                     local _, actor = sampGetCharHandleBySampPlayerId(i)
                     if doesCharExist(actor) then
                          local ahealth = sampGetPlayerHealth(i)
                         local anickname = sampGetPlayerNickname(i)
                         local posX, posY, posZ = getCharCoordinates(actor)
                         local hwposX, hwposY = convert3DCoordsToScreen(posX, posY, posZ)
                         local nwposX, nwposY = convert3DCoordsToScreen(posX, posY, posZ+1)
                         local fnickname = string.format("%s{FFFFFF}(%d)", anickname, i)
                         renderFontDrawText(rfonts, tostring(ahealth), wposX, wposY, -1)
                         local PColor = sampGetPlayerColor(i)
                         renderFontDrawText(rfonts2, fnickname, nwposX, nwposY, PColor)
                     end
                end
            end
        end
    end
     
    #716
  37. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    вместо позиции игрока использовать позицию кости. пример получения костей уже постили в этой теме.
     
    #717
  38. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Пересмотрел все страницы в этой теме и не нашел :C
     
    #718
  39. FYP

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

    Регистрация:
    09.03.13
    Сообщения:
    786
    Лайки:
    1.622
    Репутация:
    674
    #719
  40. Bogach

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

    Регистрация:
    09.11.15
    Сообщения:
    212
    Лайки:
    7
    Репутация:
    2
    Япона мать, как тут все сложно:blink:

    Код (Lua):
    script_name("Nickname")
    script_author("_")

    require("lib.moonloader")
    require "lib.sampfuncs"

    local playernick = ""
    local fplayernick = ""
    local wallnick
    local playercolor

    function main()
        while not isSampAvailable() do wait(100) end
        while true do
            wait(0)
            for i = 0, 1000 do
                if sampIsPlayerConnected(i) then
                     local _, actor = sampGetCharHandleBySampPlayerId(i)
                     if doesCharExist(actor) then
                          local ahealth = sampGetPlayerHealth(i)
                         playernick = sampGetPlayerNickname(i)
                         fplayernick = string.format("%s(%d)", playernick, i)
                         playercolor = sampGetPlayerColor(i)
                         wallnick = sampCreate3dText(fplayernick, 0xFFFFFF, 0.0, 0.0, 0.5, 300.0, true, i, -1)
                         print(fplayernick)
                     end
                end
            end
        end
    end
    Не показывает текст над игроком, ошибок нет, переменная fplayernick в print нормально показывает и ид и ник как отформатил, а wallnick nil
    можете подсказать что не так?
    UPD: Все уже не нужно,оказалось первым аргументом надо было указывать "i"

    Есть ли какая-нибудь функция для отключения отображения никнеймов?
     
    #720
    Последнее редактирование модератором: 5 фев 2017