addBlipForChar в зоне стрима

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,505
1,134
Версия MoonLoader
.027.0-preview
Укажите на ошибку, пожалуйста. Вроде правильно сделал, но игру крашит. Задумка в том, чтобы ставить маркеры на игроков из массива, когда они появляются в зоне стрима.
Lua:
local tTable = {
    "Nick_Name",
}

function sampev.onPlayerStreamIn(playerId, team, model, position, rotation, color, fightingStyle)
    local result, handle = sampGetCharHandleBySampPlayerId(playerId)
    if result and doesCharExist(handle) then
        for _, v in pairs(tTable) do
            if sampGetPlayerNickname(playerId) == v then
                -- marker = addBlipForChar(handle) -- С "handle" - краш, PLAYER_PED - норм.
                sampAddChatMessage("In stream", -1)
            end
        end
    end
end
Без проверки на result скрипт, вроде как, идёт дальше (в чат текст выводится), но когда доходит до addBlipForChar с handle (на других игроков) - игру крашит. Когда ставлю маркер на себя (PLAYER_PED) - всё нормально.

UPD:
Тестировал с командой. С командой всё нормально. Маркер ставится на игрока с указанным ID.
Lua:
sampRegisterChatCommand("addblip", function(id)
    if tonumber(id) ~= "" then
        local _, handle = sampGetCharHandleBySampPlayerId(id)
        test = addBlipForChar(handle)
    end
end)
 
Последнее редактирование:
Решение
Я бы добавил задержку до следующей итерации цикла. За это время RPC, по идее, должен успеть выполниться.
Lua:
local tTable = {
    "Nick_Name",
}

function sampev.onPlayerStreamIn(playerId, team, model, position, rotation, color, fightingStyle)
    lua_thread.create(function(playerid)
        wait(0)
        local result, handle = sampGetCharHandleBySampPlayerId(playerid)
        if result and doesCharExist(handle) then
            for _, v in pairs(tTable) do
                if sampGetPlayerNickname(playerid) == v then
                    marker = addBlipForChar(handle)
                end
            end
        end
    end, playerId)
end

Vintik

Через тернии к звёздам
Проверенный
1,556
1,027
Я бы добавил задержку до следующей итерации цикла. За это время RPC, по идее, должен успеть выполниться.
Lua:
local tTable = {
    "Nick_Name",
}

function sampev.onPlayerStreamIn(playerId, team, model, position, rotation, color, fightingStyle)
    lua_thread.create(function(playerid)
        wait(0)
        local result, handle = sampGetCharHandleBySampPlayerId(playerid)
        if result and doesCharExist(handle) then
            for _, v in pairs(tTable) do
                if sampGetPlayerNickname(playerid) == v then
                    marker = addBlipForChar(handle)
                end
            end
        end
    end, playerId)
end
 
  • Нравится
Реакции: Dmitriy Makarov

Похожие темы