Как работает DarkRP.createVote?

Привет! У меня есть вопрос. Я хотел сделать локальное голосование для двух игроков в своей системе, но почему-то не получается — у меня answer всегда приравнивается к nil, хотя я всё делал так, как написано на сайте DarkRP Wiki.
Вот код:

    local function ShowTestw(answer, ply, target)
        
        if answer then
            net.Start("OpenMenu")
            net.WriteEntity(ply)
            net.Send(target)
        else
            print("no")
        end
    end
 DarkRP.createVote(question, "testw" .. ply:SteamID64(), target, 35, ShowTestw(answer, ply, target))

Попробуй вот так:

local function ShowTestw(answer)
    if tobool(answer) then
        net.Start("OpenMenu")
        net.WriteEntity(ply)
        net.Send(target)
    else
        print("no")
    end
end

local exclude = {}
for _, v in player.Iterator() do
    if v == ply or v == target then continue end
    exclude[v] = true
end

DarkRP.createVote(question, "testw" .. ply:SteamID64(), target, 35, ShowTestw, exclude)

я делал голосование для категорий профессий для аддона job employer. можешь попробовать из этого сделать своё для игроков

net.Receive("ENPC.ChangeJobNPC", function(len, ply)
    local job_id = net.ReadInt(16)
    local skin_ = net.ReadInt(16)

    local requestedJobTable = RPExtraTeams[job_id]
    local currentJobTable = ply:getJobTable()

    if requestedJobTable and requestedJobTable.team == TEAM_HECU9 then
        if currentJobTable and isstring(currentJobTable.category) and currentJobTable.category == "Повстанцы" then
            DarkRP.createVote(
                ply:Nick() .. " хочет стать Лидер сопротивления.", 
                "vote_resistance_leader",
                ply, 
                30,
                function(voteResult) 
                    if voteResult then
                        ply:changeTeam(TEAM_HECU9, true)
                        DarkRP.notifyAll(0, 0, ply:Nick() .. " стал Лидером сопротивления!")
                    else
                        DarkRP.notify(ply, 1, 4, "Голосование провалено. Вы не стали Лидером сопротивления.")
                    end
                end
            )
            DarkRP.notify(ply, 0, 4, "Вы инициировали голосование за Лидера сопротивления.")
            return
        else
            DarkRP.notify(ply, 1, 4, "Только 'Повстанцы' могут инициировать голосование за Лидера сопротивления!")
            return
        end
    end

    local result, msg = hook.Call("ENPC.playerCanChangeTeam", nil, ply, job_id)
    if result then
        ply:changeTeam(job_id, true) 
        timer.Simple(0.1, function() ply:SetSkin(skin_) end)
    elseif msg then
        DarkRP.notify(ply, 1, 4, msg)
    end
end)

hook.Add("canPlayerVote", "RestrictResistanceLeaderVote", function(voter, voteType, voteData)
    if voteType == "vote_resistance_leader" then
        local voterJobTable = RPExtraTeams[voter:Team()]
        return voterJobTable and isstring(voterJobTable.category) and voterJobTable.category == "Повстанцы"
    end
	
    return true 
end)

Привет! Взял твой вариант, но у меня проблема: меню голосования просто не появляется, хотя ошибок совсем нет.

Ты ведь без net.receive того что у меня попробовал? Я заранее написал что это вариант для job employer аддона

Покажи что куда ты вставил

Да, всё верно. Может быть, проблема в том, что я тестирую с ботом?

Желательно протестить с игроком, но если сборку появляется увед о начале голосования - то скорее всего оно работает
(Именно увед а не само меню голосования)

Привет, вижу что вроде, как уже решили проблему.
В твоем коде была проблема в том что она вызывает функцию обратного вызова (callback) ShowTestw.

DarkRP.createVote(question, "testw" .. ply:SteamID64(), target, 35, ShowTestw(answer, ply, target))

Вместо самой функции в качестве callback, вызываешь её сразу.
вызывается тут же, а результат (который nil) передаётся в createVote. Вот почему answer всегда nil

1 лайк