help с реконнектом [lua]

solution

Участник
Автор темы
47
9
Версия MoonLoader
Другое
при определенных действиях нужно быстро сделать реконнект(отключить игрока и так же подключить его)
1:
sampDisconnectWithReason(quit)
            wait(8000)
            sampSetGamestate(1)   
        end
использую такой метод(нашел на бх), но почему-то игрока после такого выхода больше не подключает:
1732176216928.png

висит тупо на рестарте, при этом если прописать второй реконнект(другой плагин) то подключение пойдет корректно. в чем может быть трабл?
 

kyrtion

Известный
921
329
Если у тебя так именно:
Lua:
function main()
    -- ...
    while true do
        sampDisconnectWithReason(quit)
        wait(8000)
        sampSetGamestate(1)
        wait(0)
    end
end

То объясняю:
Lua:
function main()
    -- ...
 
    -- постоянный цикл с main
    while true do
        sampDisconnectWithReason(quit) -- заставляем выкинуть от сервера с причиной
        wait(8000) -- подождем 8 сек
        sampSetGamestate(1) -- переключим статус гейм на подлючение(?)

        wait(0)
        -- и тогда переходит в начале цикла, т.к. стоит
        -- `while true do` то цикл никогда не закроет, пока стоит `true` положительное
    end
end

Решение:
Lua:
sampRegisterChatCommand('restart8sec', function()
    lua_thread.create(function()
        sampDisconnectWithReason(quit)
        wait(8000)
        sampSetGamestate(1)
    end)
end)

-- 1. /restart8sec
-- 2. Создает поток
-------ПОТОК--------
-- 1. Откидывает от сервера с причиной
-- 2. Ждем 8 сек
-- 3. Присваивает статус гейм на 1
-----КОНЕЦ ПОТОКА---
 
Последнее редактирование:

solution

Участник
Автор темы
47
9
Если у тебя так именно:
Lua:
function main()
    -- ...
    while true do
        sampDisconnectWithReason(quit)
        wait(8000)
        sampSetGamestate(1)
        wait(0)
    end
end

То объясняю:
Lua:
function main()
    -- ...
 
    -- постоянный цикл с main
    while true do
        sampDisconnectWithReason(quit) -- заставляем выкинуть от сервера с причиной
        wait(8000) -- подождем 8 сек
        sampSetGamestate(1) -- переключим статус гейм на подлючение(?)

        wait(0)
        -- и тогда переходит в начале цикла, т.к. стоит
        -- `while true do` то цикл никогда не закроет, пока стоит `true` положительное
    end
end

Решение:
Lua:
sampRegisterChatCommand('restart8sec', function()
    lua_thread.create(function()
        sampDisconnectWithReason(quit)
        wait(8000)
        sampSetGamestate(1)
    end)
end)

-- 1. /restart8sec
-- 2. Создает поток
-------ПОТОК--------
-- 1. Откидывает от сервера с причиной
-- 2. Ждем 8 сек
-- 3. Присваивает статус гейм на 1
-----КОНЕЦ ПОТОКА---
у меня выглядит по другому, по команде включается функция которая ловит хп игрока, и если оно меньше 20 то оффает его с игры(перезаход моменатальный типо нужен)

Lua:
function main()
    sampRegisterChatCommand('killoff', function()
        status = not status
        sampAddChatMessage(status and "Режим гомика включен" or "Режим гомика выключен, теперь ты здравый пацык", -1)
    end)
    while true do wait(0)
        if status then
            if getCharHealth(PLAYER_PED) < 20 then
                sampDisconnectWithReason(quit)
                wait(5000)
                sampSetGamestate(1)
                sampConnectToServer(sampGetCurrentServerAddress())
            end
        end
    end
end

чет не вдупляю как мне сюда всунуть луашный поток если у меня уже используется function() в команде на включение/отключение
 

kyrtion

Известный
921
329
@solution
я прочел вашего кода

вот, допустим:
1. /killoff -> ты запустил авто-реконнет, присвоил положительный status
2. Если у педа появился меньше 20 хп, запускает код блока перезагрузки
Сомневаюсь: не помню чтобы сохранился хп после реконнекта, или устанавливает 0 хп
3. и что в итоге: прошло 5 секунд и устанавливает статус гейма на 1
4. соединяет на сервере который ты указал
5. теперь переходит в начале цикла, проверяет на наличие положительного статуса
6. если имеется статуса, то повторяется все до бесконечности и не зайдешь нормально сервере, поэтому


Решение:
Lua:
if status and getCharHealth(PLAYER_PED) < 20 then
    -- слиял status и чек на хп, так чтобы было норм. если status для 1 проверки и больше нет
    status = false -- вырубаем status после проверки (сверху)
    sampDisconnectWithReason(quit)
    wait(5000)
    sampSetGamestate(1)
    sampConnectToServer(sampGetCurrentServerAddress())
end
 
Последнее редактирование: