Зависает игра при включении скрипта.

maximo4ka)))

Новичок
Автор темы
10
0
Всем здравствуйте! Решил написать простенький скрипт на Lua для такого сервера как тринити. Если коротко - данный скрипт должен писать /admod когда появляется определённое сообщение. Вот код скрипта:
Lua:
script_name('autoadmod')
script_author('towerty')
script_description('not done')
require "lib.moonloader"
local ev = require 'lib.samp.events'

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then
           return
    end
    while not isSampAvailable() do
          wait(0)
    end
    sampRegisterChatCommand("autoadv", autoadvCallBack)
    sampAddChatMessage("autoadmod by towerty", 0xF706F3A2)
    sampAddChatMessage("command: /autoadv", 0xF706F3A2)

    wait(-1)
end


function autoadvCallBack(params)
    if params == 'off' then
        sampAddChatMessage("autoadmod disabled", 0xF706F3A2)
    elseif params == 'on' then
        sampAddChatMessage("autoadmod enabled", 0xF706F3A2)
        while params == 'on' do
            function ev.onServerMessage(color, text)
                if text == string.find(text, "На модерацию поступило новое объявление.") then
                    if not sampIsChatInputActive() and not sampIsDialogActive() then
                        sampSendChat('/admod')
                    end
                end
            end
        end
     end
end
Пробовал создавать задержку в 1 секунду при помощи
Lua:
lua_thread.create(function ()
    wait(1000)
end)
но ничего не получилось. Игра просто зависает при введении команды /autoadv on. При этом, в логах ничего не написано, а команда /autoadv off работает исправно и не крашит игру. Антикрашер стоит, все необходимые библиотеки установлены.
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,201
код белиберда у вас.
Lua:
local ev = require 'lib.samp.events'

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand("autoadv", function(params)
        if params == 'off' then
            sampAddChatMessage("autoadmod disabled", 0xF706F3A2)
        elseif params == 'on' then
            sampAddChatMessage("autoadmod enabled", 0xF706F3A2)
        end
    end)
    sampAddChatMessage("autoadmod by towerty", 0xF706F3A2)
    sampAddChatMessage("command: /autoadv", 0xF706F3A2)

    wait(-1)
end


function ev.onServerMessage(color, text)
    if params == 'on' and text:find("На модерацию поступило новое объявление.") then
        sampSendChat('/admod')
    end
end
 
Последнее редактирование:
  • Ха-ха
Реакции: user390868

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,201
Кажется мне, что белиберда как раз у вас.
Объясните мне, тупому, как может создаться команда autoadv, если для неё нету callback-функции?
вот тебе калбек
sampRegisterChatCommand("autoadv", function(params) --code end)
 

maximo4ka)))

Новичок
Автор темы
10
0
вот тебе калбек
sampRegisterChatCommand("autoadv", function(params) --code end)
вы походу не поняли, но функции с названием function не существует, да и в принципе, это название зарезервировано самим ЯП
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,201
вы походу не поняли, но функции с названием function не существует, да и в принципе, это название зарезервировано самим ЯП
функцию-обработчик можно сделать как в main, так и не в нем.
 

maximo4ka)))

Новичок
Автор темы
10
0
1) Не нужно вставлять функцию в функцию
2) Игра зависает из-за while do функции хука.
3) Сверху тебе скинули рабочий код
Не знаю как у вас, но данный код у меня не работает. Не создаётся команда, в чат никаких сообщений о загрузке скрипта нету.
 

kizn

\ 0 _ 0 /
Всефорумный модератор
2,407
2,108