Lua SnailMatic | Самый функциональный биндер

GrezeeBal

Известный
Автор темы
Проверенный
1,474
878
Итак, все исправно работает, даже свой модуль написал. Но случилась одна неприятная ситуация. После того, как лаунчер Аризоны почистил мне игру, пришлось переустанавливать snailmatic и остальные моды. В итоге у меня перестали работать боковые кнопки мыши для назначения их как горячие клавиши.
Прикрепляю профиль, настройки, мунлог и нужные переменные
переустанови биндер отсюда https://github.com/GrezeeBal/SnailMaticDocs/blob/main/SNAILMATIC_DOCUMENTATION.md#1-установка
 
  • Нравится
Реакции: Strand

GrezeeBal

Известный
Автор темы
Проверенный
1,474
878
На радмире рп будет работать?
  • Биндер совместим с SA-MP 0.3.7 R1, R3, R4-2, 0.3DL, CRMP и независим от SAMPFUNCS и CLEO.
  • Работает на лаунчерах, при условии, что на них можно устанавливать моды (в частности .lua)
 
D

deleted-user-411329

Гость
1675091862080.png

Как можно сделать так, чтобы бинд активировался по первым и последним словам в строке?
 

Strand

Участник
48
27
Так, доделываю свои переменные. Столкнулся с неприятной проблемой. Мне нужно перезагружать скрипт после входа в игру, т.к. я использую PLAYER_PED в своей переменной. Как заставить переменную ждать ее инициализации не отрубив скрипт?
Код:
[15:07:57.197950] (system)    Loading script 'D:\Games\Arizona\moonloader\snailmatic.luac'...
[15:07:57.197950] (debug)    New script: 139A869C
[15:07:57.228868] (script)    SnailMatic: Переменные "arzcar.lua" не загружены. Причина:   opcode '0B2B' call caused an unhandled exception
[15:07:57.229866] (system)    SnailMatic: Loaded successfully.

Пробовал через это, но тогда биндер тоже останавливается
Lua:
function main()
    while not isSampAvailable() do wait(0) end
    if not sampIsLocalPlayerSpawned() then return false end
    -- code
end
 

RTD

Нестандартное звание
Модератор
391
413
Так, доделываю свои переменные. Столкнулся с неприятной проблемой. Мне нужно перезагружать скрипт после входа в игру, т.к. я использую PLAYER_PED в своей переменной. Как заставить переменную ждать ее инициализации не отрубив скрипт?
Код:
[15:07:57.197950] (system)    Loading script 'D:\Games\Arizona\moonloader\snailmatic.luac'...
[15:07:57.197950] (debug)    New script: 139A869C
[15:07:57.228868] (script)    SnailMatic: Переменные "arzcar.lua" не загружены. Причина:   opcode '0B2B' call caused an unhandled exception
[15:07:57.229866] (system)    SnailMatic: Loaded successfully.

Пробовал через это, но тогда биндер тоже останавливается
Lua:
function main()
    while not isSampAvailable() do wait(0) end
    if not sampIsLocalPlayerSpawned() then return false end
    -- code
end
Опкод 0B2B. Возвращает ид игрока по хендлу актера. Используй функцию с биндера samp_getPlayerIdByCharHandle. Если это не решение, то пиши переменные как скрипт и передавай их через
Lua:
local sm = import("snailmatic")
--sm.registerVariable, sm.updateVariable
11. Информация для разработчиков, SnailMatic API

Но я не вижу причин, почему может вызываться такая ошибка, кроме того что ты пытаешься в получить ид игрока вне функции переменной по типу этого
Lua:
local res, id = sampGetPlayerIdByCharHandle(PLAYER_PED) --переменные грузятся до того как самп загрузится, это всегда нужно учитывать, значит эта функция вызовется сразу
registerVariable('1', '2', function() return id end)

--если делать так, то должно быть нормально
registerVariable('1', '2', function() 
       local res, id = sampGetPlayerIdByCharHandle(PLAYER_PED) --еще лучше samp_getPlayerIdByCharHandle(PLAYER_PED) или callVariable('myid')
       return id
end)
В следующий раз прилагай код
 
  • Нравится
Реакции: Strand и GrezeeBal

Strand

Участник
48
27
Так, я сильно туплю сейчас. Никак не могу придумать более быстрый способ. Можно исходник переменной $mycarplayersnick$? А то два цикла подряд мне кажется как-то дохуя. Первый перебор пассажиров, второй поиск PLAYER_PED и изменение с хендла на форматированный текст
Lua:
local function namerp(id)
    local id = tonumber(id)
    if sampIsPlayerConnected(id) then
        local nick = sampGetPlayerNickname(id)
        local _, _, N, Surname = string.find(nick, "(%a).+_(%a+)")
        return N .. ". " .. Surname
    end
    return ""
end
registerFunctionalVariable("namerp", "Получить РП ник игрока в формате N. Surname по ID", function(id)
    return namerp(id)
end)
registerVariable("carnamerp", "Получить РП ник игрока(ов) в машине в формате N. Surname по ID", function()
    if isCharInAnyCar(PLAYER_PED) then
        local car = storeCarCharIsInNoSave(PLAYER_PED)
        local peds = {getDriverOfCar(car)}
        for i = 1, getMaximumNumberOfPassengers(car) do
            if not isCarPassengerSeatFree(car, i) then
                peds[#peds+1] = getCharInCarPassengerSeat(car, i)
            end
        end
        for k, v in ipairs(peds) do
            if v == PLAYER_PED then table.remove(peds, k) end
            peds[k] = namerp(sampGetPlayerIdByCharHandle(v))
        end
        if #peds > 1 then
            return table.concat(peds, ", ")
        end
        return peds[1]
    end
    return ''
end)

======================================

UPD:
В общем, код пофиксил, выглядит гораздо лучше предыдущего, но теперь появилась другая проблема, и на сей раз она связана со снеилматик напрямую. Новый код прилагаю ниже. Строка local ped = getCharInCarPassengerSeat(car, i) вызывает следующую ошибку: Хотя если я в консоли игры пишу lua print(getCharInCarPassengerSeat(storeCarCharIsInNoSave(PLAYER_PED), -1)), то мне выходит правильный результат (т.е. возвращает хендл водилы). Как исправить теперь или есть замена этой функции?
Lua:
local function namerp(id)

    local id = tonumber(id)
    if sampIsPlayerConnected(id) then
        local nick = sampGetPlayerNickname(id)
        local _, _, N, Surname = string.find(nick, "(%a).+_(%a+)")

        return N .. ". " .. Surname
    end
    return ""

end

registerFunctionalVariable("namerp", "Получить РП ник игрока в формате N. Surname по ID", function(id)

    return namerp(id)

end)

registerVariable("carnamerp", "Получить РП ник игрока(ов) в машине в формате N. Surname по ID", function()
    if isCharInAnyCar(PLAYER_PED) then
        local car = storeCarCharIsInNoSave(PLAYER_PED)
        local peds = {getDriverOfCar(car)}
        for i = -1, getMaximumNumberOfPassengers(car)-1 do
            if not isCarPassengerSeatFree(car, i) then
                local ped = getCharInCarPassengerSeat(car, i)
                if ped ~= PLAYER_PED then table.insert(peds, getCharInCarPassengerSeat(car, i)) end
            end
        end

        for k, v in ipairs(peds) do
            peds[k] = namerp(sampGetPlayerIdByCharHandle(v))
        end

        if #peds > 1 then
            return table.concat(peds, ", ")
        end
        return peds[1]
    end
    return ''
end)
 
Последнее редактирование:

GrezeeBal

Известный
Автор темы
Проверенный
1,474
878
Так, я сильно туплю сейчас. Никак не могу придумать более быстрый способ. Можно исходник переменной $mycarplayersnick$? А то два цикла подряд мне кажется как-то дохуя. Первый перебор пассажиров, второй поиск PLAYER_PED и изменение с хендла на форматированный текст
Lua:
local function namerp(id)
    local id = tonumber(id)
    if sampIsPlayerConnected(id) then
        local nick = sampGetPlayerNickname(id)
        local _, _, N, Surname = string.find(nick, "(%a).+_(%a+)")
        return N .. ". " .. Surname
    end
    return ""
end
registerFunctionalVariable("namerp", "Получить РП ник игрока в формате N. Surname по ID", function(id)
    return namerp(id)
end)
registerVariable("carnamerp", "Получить РП ник игрока(ов) в машине в формате N. Surname по ID", function()
    if isCharInAnyCar(PLAYER_PED) then
        local car = storeCarCharIsInNoSave(PLAYER_PED)
        local peds = {getDriverOfCar(car)}
        for i = 1, getMaximumNumberOfPassengers(car) do
            if not isCarPassengerSeatFree(car, i) then
                peds[#peds+1] = getCharInCarPassengerSeat(car, i)
            end
        end
        for k, v in ipairs(peds) do
            if v == PLAYER_PED then table.remove(peds, k) end
            peds[k] = namerp(sampGetPlayerIdByCharHandle(v))
        end
        if #peds > 1 then
            return table.concat(peds, ", ")
        end
        return peds[1]
    end
    return ''
end)
пиши сразу @RTD насчет кода
 

gnoi

Известный
158
56
Как фиксить? Че делать? Запускается игра, во-первых окно сворачивается, во-вторых насколько я понял, после успешного подключения к серверу чето не сходится и его крашит
библиотеки все с гитхаба трижды скачаны переустановленны и такая вот суета
 

Вложения

  • moonloader.log
    23.1 KB · Просмотры: 6

GrezeeBal

Известный
Автор темы
Проверенный
1,474
878
Как фиксить? Че делать? Запускается игра, во-первых окно сворачивается, во-вторых насколько я понял, после успешного подключения к серверу чето не сходится и его крашит
библиотеки все с гитхаба трижды скачаны переустановленны и такая вот суета
от snailmatic нет ошибок, ищи проблему в других скриптах, например в той хуйне, которая весь лог зафлудила
 

gnoi

Известный
158
56
от snailmatic нет ошибок, ищи проблему в других скриптах, например в той хуйне, которая весь лог зафлудила
так я думал это хуйня принадлежит snailmatic
лан, пасиба, попробую
что интересно, у mlupdate нету файла, он как-то скрыт
 

gnoi

Известный
158
56
оказалось это часть одного хелпера для Аризоны который как-то заражает собой мунлодер и даже при удалении самого хелпера оно чекает наличие файлов по кд и подкачивает луашник surfaud.lua

Есть какой-то вариант пофиксить Ошибку 3 без использования ВПН? Я заметил что оно только ченжлог в меню скрипта подгружает и всё, а толку ради это запускаться всегда с ВПНом
 
Последнее редактирование: