Применение команды на всех игроков определённого уровня

zuhari

Новичок
Автор темы
7
2
Версия SA-MP
  1. Любая
Подскажите пожалуйста если ли скрипт, что применял бы команду на всех игроков определённого уровня на сервере.
 
Решение
Lua:
local cmd = "eject"
local interval = 1000
local targetScore = 1

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("bulk", function()
        sampAddChatMessage("Processing...",-1)
        -- https://www.blast.hk/threads/56795/post-508619
        players = {} -- массив в который будем добавлять ники
        counter = 0
        for i = 0, sampGetMaxPlayerId() do -- цикл перебирающий числа (id) от 0 до максимального который есть на сервере
            if sampIsPlayerConnected(i) then
                table.insert(players, i)
                if sampGetPlayerScore(i) == targetScore then counter=counter+1 end
            end...

zuhari

Новичок
Автор темы
7
2
ниче не понятно. объясни конкретнее.
какую команду? что ты имеешь в виду под всеми игроками определенного уровня? уровня чего? есть пример на который можно посмотреть?
Ну чтобы нужная мне команда применилась на всех, кто первого уровня и находится на сервере

1717334161159.png

Вот допустим человек 1 уровня. Мне нужно чтобы скрипт нашёл всех, кто первого уровня и прописал на них команду
 

stool

Известный
373
311
Ну чтобы нужная мне команда применилась на всех, кто первого уровня и находится на сервере
то есть ты хочешь:
  • взять список всех игроков из таба с определенным значением score (уровень\ранг)
  • записать айдишники этих игроков
  • отправить на сервер команду, где будет использоваться этот айдишник [столько раз, сколько игроков найдено в списке] (например /eject 12)
верно?
 

zuhari

Новичок
Автор темы
7
2
то есть ты хочешь:
  • взять список всех игроков из таба с определенным значением score (уровень\ранг)
  • записать айдишники этих игроков
  • отправить на сервер команду, где будет использоваться этот айдишник [столько раз, сколько игроков найдено в списке] (например /eject 12)
верно?
Всё верно
 

stool

Известный
373
311
Lua:
local cmd = "eject"
local interval = 1000
local targetScore = 1

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("bulk", function()
        sampAddChatMessage("Processing...",-1)
        -- https://www.blast.hk/threads/56795/post-508619
        players = {} -- массив в который будем добавлять ники
        counter = 0
        for i = 0, sampGetMaxPlayerId() do -- цикл перебирающий числа (id) от 0 до максимального который есть на сервере
            if sampIsPlayerConnected(i) then
                table.insert(players, i)
                if sampGetPlayerScore(i) == targetScore then counter=counter+1 end
            end
        end
        sampAddChatMessage("Найдено игроков: " .. #players,-1)
        sampAddChatMessage("Подходит под критерий: " .. counter,-1)
        lua_thread.create(function ()
            for _, plrId in pairs(players) do
                local score = sampGetPlayerScore(plrId)
                if score == targetScore then
                    print(cmd, plrId)
                    sampSendChat(("/%s %d"):format(cmd, plrId))
                    wait(interval)
                end
            end
            sampAddChatMessage("Готово!",-1)
        end)
    end)
    while true do wait(0) end
end
держи, удачи

1717335314844.png

cmd - команда, которая будет вызываться
interval - сколько мс выждать перед отправкой следующей команды
targetScore - какой лвл будем брать в качестве жертвы

команда для вызова скрипта: /bulk
 
  • Нравится
  • Влюблен
Реакции: MLycoris и Sudzishima

zuhari

Новичок
Автор темы
7
2
Lua:
local cmd = "eject"
local interval = 1000
local targetScore = 1

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("bulk", function()
        sampAddChatMessage("Processing...",-1)
        -- https://www.blast.hk/threads/56795/post-508619
        players = {} -- массив в который будем добавлять ники
        counter = 0
        for i = 0, sampGetMaxPlayerId() do -- цикл перебирающий числа (id) от 0 до максимального который есть на сервере
            if sampIsPlayerConnected(i) then
                table.insert(players, i)
                if sampGetPlayerScore(i) == targetScore then counter=counter+1 end
            end
        end
        sampAddChatMessage("Найдено игроков: " .. #players,-1)
        sampAddChatMessage("Подходит под критерий: " .. counter,-1)
        lua_thread.create(function ()
            for _, plrId in pairs(players) do
                local score = sampGetPlayerScore(plrId)
                if score == targetScore then
                    print(cmd, plrId)
                    sampSendChat(("/%s %d"):format(cmd, plrId))
                    wait(interval)
                end
            end
            sampAddChatMessage("Готово!",-1)
        end)
    end)
    while true do wait(0) end
end
держи, удачи

Посмотреть вложение 242253
cmd - команда, которая будет вызываться
interval - сколько мс выждать перед отправкой следующей команды
targetScore - какой лвл будем брать в качестве жертвы

команда для вызова скрипта: /bulk
Спасибо большое <3

Lua:
local cmd = "eject"
local interval = 1000
local targetScore = 1

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand("bulk", function()
        sampAddChatMessage("Processing...",-1)
        -- https://www.blast.hk/threads/56795/post-508619
        players = {} -- массив в который будем добавлять ники
        counter = 0
        for i = 0, sampGetMaxPlayerId() do -- цикл перебирающий числа (id) от 0 до максимального который есть на сервере
            if sampIsPlayerConnected(i) then
                table.insert(players, i)
                if sampGetPlayerScore(i) == targetScore then counter=counter+1 end
            end
        end
        sampAddChatMessage("Найдено игроков: " .. #players,-1)
        sampAddChatMessage("Подходит под критерий: " .. counter,-1)
        lua_thread.create(function ()
            for _, plrId in pairs(players) do
                local score = sampGetPlayerScore(plrId)
                if score == targetScore then
                    print(cmd, plrId)
                    sampSendChat(("/%s %d"):format(cmd, plrId))
                    wait(interval)
                end
            end
            sampAddChatMessage("Готово!",-1)
        end)
    end)
    while true do wait(0) end
end
держи, удачи

Посмотреть вложение 242253
cmd - команда, которая будет вызываться
interval - сколько мс выждать перед отправкой следующей команды
targetScore - какой лвл будем брать в качестве жертвы

команда для вызова скрипта: /bulk
А если у меня команда /cmd id 1
Как нужно переделать чтобы работало?
 
  • Нравится
Реакции: stool

zuhari

Новичок
Автор темы
7
2
в cmd так и напиши: local cmd = "cmd id", код сам подставит ид и слэш
У меня ставится 2 пробела в команде, как исправить?

в cmd так и напиши: local cmd = "cmd id", код сам подставит ид и слэш
Делаю так, на выходе: cmd 1 id, вместо cmd id 1
 

stool

Известный
373
311
У меня ставится 2 пробела в команде, как исправить?
убрать пробел наверное и сделать так как я говорю? "cmd id" а не "cmd id "
Делаю так, на выходе: cmd 1 id, вместо cmd id 1
1717338459497.png

ты уверен, что ты правильно формулируешь проблему?
ты хочешь вместо id подставить сам id чтобы было cmd 254 1 например? (где 254 там рандомный ид)
если так, то исправь
  1. про переменную cmd забудь
  2. sampSendChat(("/cmd %d 1"):format(plrId))

там где %d автоматически подставится айди игрока, а там верти как хочешь
 

zuhari

Новичок
Автор темы
7
2
убрать пробел наверное и сделать так как я говорю? "cmd id" а не "cmd id "

Посмотреть вложение 242258
ты уверен, что ты правильно формулируешь проблему?
ты хочешь вместо id подставить сам id чтобы было cmd 254 1 например? (где 254 там рандомный ид)
если так, то исправь
  1. про переменную cmd забудь
  2. sampSendChat(("/cmd %d 1"):format(plrId))

там где %d автоматически подставится айди игрока, а там верти как хочешь
Спасибо

убрать пробел наверное и сделать так как я говорю? "cmd id" а не "cmd id "

Посмотреть вложение 242258
ты уверен, что ты правильно формулируешь проблему?
ты хочешь вместо id подставить сам id чтобы было cmd 254 1 например? (где 254 там рандомный ид)
если так, то исправь
  1. про переменную cmd забудь
  2. sampSendChat(("/cmd %d 1"):format(plrId))

там где %d автоматически подставится айди игрока, а там верти как хочешь
Подскажи пожалуйста, как из определённого сообщения из чата вытаскивать ID? И желательно сделать так, чтобы команда на этот ID писалась сама, так ещё в добавок ко всему сообщние, что искали и сообщение с командой удалялось и я его не видел
 
  • Нравится
Реакции: stool

cloused2

Известный
398
132
Спасибо


Подскажи пожалуйста, как из определённого сообщения из чата вытаскивать ID? И желательно сделать так, чтобы команда на этот ID писалась сама, так ещё в добавок ко всему сообщние, что искали и сообщение с командой удалялось и я его не видел
 
  • Нравится
Реакции: zuhari и stool