ПОМОЩЬ ЛУА | УЗНАТЬ КОЛ-ВО ИГРОКОВ В ЗОНЕ СТРИМА

Hunter2004

Новичок
Автор темы
15
1
Версия MoonLoader
.026-beta
Доброго времени суток господа, прошу помочь в одном дельце. Мне нужно как-то получить кол-во игроков в зоне стрима и если не трудно подскажите как узнать их педы.
 
Решение
Lua:
local sampev = require('samp.events')
local stream = {}

function sampev.onPlayerStreamIn(playerId)
    local result, handle = sampGetCharHandleBySampPlayerId(playerId)
    if result then
        stream[playerId] = handle
    end
end

function sampev.onPlayerStreamOut(playerId)
    stream[playerId] = nil
end

print(#stream) -- кол-во игроков

for k, handle in pairs(stream) do -- пример
    print(select(2, sampGetPlayerIdByCharHandle(handle)))
end

Hunter2004

Новичок
Автор темы
15
1
Благодарю очень. А еще вопрос получится ли найди педы игроков таким образом:

Stream player:
local count = sampGetPlayerCount(true)

for i = 1, count do
    local succes, ped = sampGetCharHandleBySampPlayerId(i)
    if succes then
        --дальнейший код
    end
end
 

fokichevskiy

Известный
502
288
Lua:
local sampev = require('samp.events')
local stream = {}

function sampev.onPlayerStreamIn(playerId)
    local result, handle = sampGetCharHandleBySampPlayerId(playerId)
    if result then
        stream[playerId] = handle
    end
end

function sampev.onPlayerStreamOut(playerId)
    stream[playerId] = nil
end

print(#stream) -- кол-во игроков

for k, handle in pairs(stream) do -- пример
    print(select(2, sampGetPlayerIdByCharHandle(handle)))
end
 
Последнее редактирование:
  • Эм
  • Нравится
Реакции: wojciech? и Hunter2004

wojciech?

Известный
Проверенный
406
360
Lua:
local t = getAllChars() -- все педы в зоне стрима

local count = 0
for i, v in ipairs(t) do
    -- i - индекс, v - хендл
    if select(2, sampGetPlayerIdByCharHandle(v)) ~= -1 then
        count = count + 1 -- счетчик с учетом только игроков
    end
end

print(#t) -- выведет количество педов (включая ботов)
print(count) -- выведет количество игроков
 

Hunter2004

Новичок
Автор темы
15
1
Lua:
local t = getAllChars() -- все педы в зоне стрима

local count = 0
for i, v in ipairs(t) do
    -- i - индекс, v - хендл
    if select(2, sampGetPlayerIdByCharHandle(v)) ~= -1 then
        count = count + 1 -- счетчик с учетом только игроков
    end
end

print(#t) -- выведет количество педов (включая ботов)
print(count) -- выведет количество игроков
Могу поинтересоваться что означает 6 строчка? Впервые вижу функцию select и за что отвечают параметры входящие в неё?
 

fokichevskiy

Известный
502
288
Могу поинтересоваться что означает 6 строчка? Впервые вижу функцию select и за что отвечают параметры входящие в неё?
sampGetPlayerIdByCharHandle возвращает два аргумента - результат(т.е. смогла ли функция получить айди игрока) и сам айди, а чтобы вывести сразу айди, то надо использовать select, в котором выбран второй аргумент ( select(2, ...) )
 
  • Нравится
Реакции: Hunter2004

romanespit

Участник
24
9
Lua:
local sampev = require('samp.events')
local stream = {}

function sampev.onPlayerStreamIn(playerId)
    local result, handle = sampGetCharHandleBySampPlayerId(playerId)
    if result then
        table.insert(stream, handle)
    end
end

function sampev.onPlayerStreamOut(playerId)
    stream[playerId] = nil
end

print(#stream) -- кол-во игроков

for k, handle in pairs(stream) do -- пример
    print(select(2, sampGetPlayerIdByCharHandle(handle)))
end
А не будет такой ситуации, что при попадании в стрим в массив ты загоняешь пед игрока с айдишником 100, он встает на первую позицию, а при выходе из зоны стрима ты нулишь 100-ый элемент, которого нет, тем временем первый элемент с этим педом остается. Сам код не тестил, могу ошибаться.
 

fokichevskiy

Известный
502
288
А не будет такой ситуации, что при попадании в стрим в массив ты загоняешь пед игрока с айдишником 100, он встает на первую позицию, а при выходе из зоны стрима ты нулишь 100-ый элемент, которого нет, тем временем первый элемент с этим педом остается. Сам код не тестил, могу ошибаться.
да, перепутал в первой функции. код изменил если что
 
  • Нравится
Реакции: romanespit

Willy4ka

вилличка
Модератор
600
922
if select(2, sampGetPlayerIdByCharHandle(v)) ~= -1 then
вроде можно было обойтись просто if sampGetPlayerIdByCharHandle(v) then, ведь оно первым аргументом возвращает результат, а второй не учитывается в проверке
 
  • Нравится
Реакции: wojciech? и fokichevskiy

fokichevskiy

Известный
502
288
вроде можно было обойтись просто if sampGetPlayerIdByCharHandle(v) then, ведь оно первым аргументом возвращает результат, а второй не учитывается в проверке
эта проверка нужна не только для результата, а для того чтобы не занести в таблицу персонажа игрока