Помогите со скриптом луа

Samuel Goldie

Участник
Автор темы
74
8
Версия MoonLoader
.026-beta
Подскажите пожалуйста как сделать код который выводит сообщение в чат если игрок в радиусе заюзал какую то анимку, буду благодарен
 

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,981
2,200
если нужна реакция на любую анимку, то на 13 строке убери == 0
Lua:
local sampev = require 'lib.samp.events'
local pediks = {}

function main()
    while true do wait(0)
        for k, v in ipairs(pediks) do
            local res, handle = sampGetCharHandleBySampPlayerId(v[1])
            if res then
                local animID = sampGetPlayerAnimationId(v[1])
                local x, y, z = getCharCoordinates(handle) -- координаты чувака
                local mX, mY, mZ = getCharCoordinates(playerPed) -- твои координаты
                local dist = getDistanceBetweenCoords3d(x, y, z,mX, mY, mZ) -- расстояние между вами
                if animID == 0 and dist<10 then -- если анимид = 0 и расстояние меньше 10, то
                    sampAddChatMessage('пидор обнаружен '..sampGetPlayerNickname(v[1]),-1)
                end
            end
        end
    end
end
function sampev.onPlayerStreamIn(playerId)
    table.insert(pediks, {playerId})
end
function sampev.onPlayerStreamOut(playerId)
    for _,vv in pairs(pediks) do
        if playerId == vv[1] then
            table.remove(pediks, _)
        end
    end
end
 
Последнее редактирование:

wojciech?

Известный
Проверенный
408
361
если нужна реакция на любую анимку, то на 13 строке убери == 0
Lua:
local sampev = require 'lib.samp.events'
local pediks = {}

function main()
    while true do wait(0)
        for k, v in ipairs(pediks) do
            local res, handle = sampGetCharHandleBySampPlayerId(v[1])
            if res then
                local animID = sampGetPlayerAnimationId(v[1])
                local x, y, z = getCharCoordinates(handle) -- координаты чувака
                local mX, mY, mZ = getCharCoordinates(playerPed) -- твои координаты
                local dist = getDistanceBetweenCoords3d(x, y, z,mX, mY, mZ) -- расстояние между вами
                if animID == 0 and dist<10 then -- если анимид = 0 и расстояние меньше 10, то
                    sampAddChatMessage('пидор обнаружен '..sampGetPlayerNickname(v[1]),-1)
                end
            end
        end
    end
end
function sampev.onPlayerStreamIn(playerId)
    table.insert(pediks, {playerId})
end
function sampev.onPlayerStreamOut(playerId)
    for _,vv in pairs(pediks) do
        if playerId == vv[1] then
            table.remove(pediks, _)
        end
    end
end

почему бы просто не использовать ивент на анимации?
Lua:
INCOMING_RPCS[RPC.APPLYANIMATION] = {'onApplyPlayerAnimation', {playerId = 'uint16'}, {animLib = 'string8'}, {animName = 'string8'}, {frameDelta = 'float'}, {loop = 'bool'}, {lockX = 'bool'}, {lockY = 'bool'}, {freeze = 'bool'}, {time = 'int32'}}

Lua:
local sampev = require("samp.events")

function sampev.onApplyPlayerAnimation(playerId, animLib, animName, frameDelta, loop, lockX, lockY, freeze, time)
    local result, charHandle = sampGetCharHandleBySampPlayerId(playerId)
    if result and charHandle ~= PLAYER_PED then
        local x, y, z = getCharCoordinates(charHandle)
        local distance = getDistanceBetweenCoords3d(getCharCoordinates(PLAYER_PED), x, y, z)
        if distance < 15 then -- здесь можно указать любой радиус
            --
        end
    end
end
 
  • Нравится
Реакции: MLycoris

Samuel Goldie

Участник
Автор темы
74
8
Не работает, вот код как я написал, может неверно а то только учусь в этой теме.

Код:
function testanim(id)
    for k, v in ipairs(pediks) do
        local res, handle = sampGetCharHandleBySampPlayerId(v[1])
        if res then
            local animID = sampGetPlayerAnimationId(v[1])
            local x, y, z = getCharCoordinates(handle) -- координаты чувака
            local mX, mY, mZ = getCharCoordinates(playerPed) -- твои координаты
            local dist = getDistanceBetweenCoords3d(x, y, z,mX, mY, mZ) -- расстояние между вами
            if animID and dist<10 then -- если анимид = 0 и расстояние меньше 10, то
                sampAddChatMessage('пидор обнаружен '..sampGetPlayerNickname(v[1]),-1)
            end
        end
    end
end
 

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,981
2,200
Так как правильно ?
не понятно чего ты хочешь от скрипта, сверху скинули варианты, чтоб проверял анимки всех игроков в зоне стрима, но далее ты скинул часть, где указывается ид. Объясни суть, так будет легче всем
 

Samuel Goldie

Участник
Автор темы
74
8
Мне нужно сделать код который по команде будет показывать кто использует анимку, тип пишешь команду скрипт пишет что активирован, и при использовании анимки мне в чат писало варнинги на игрока. И ещё интересует вопрос, можно как-то сделать чтобы скрипт реагировал ещё на клео анимки или только на серверные ?
 

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,981
2,200
Мне нужно сделать код который по команде будет показывать кто использует анимку, тип пишешь команду скрипт пишет что активирован, и при использовании анимки мне в чат писало варнинги на игрока. И ещё интересует вопрос, можно как-то сделать чтобы скрипт реагировал ещё на клео анимки или только на серверные ?
насчёт клео и серверных, то должно на любые реагировать
Lua:
local sampev = require 'lib.samp.events'
local st = false

function main()
    sampRegisterChatCommand('animlovec',function() st = not st sampAddChatMessage('AnimLovec '..(st and 'ON' or 'OFF'), -1) end)
    wait(-1)
end
function sampev.onApplyPlayerAnimation(playerId, animLib, animName, frameDelta, loop, lockX, lockY, freeze, time)
    if st then
        local result, handle = sampGetCharHandleBySampPlayerId(playerId)
        if result and handle ~= PLAYER_PED then
            local mx, my, mz = getCharCoordinates(PLAYER_PED)
            local ox, oy, oz = getCharCoordinates(handle)
            local dist = getDistanceBetweenCoords3d(mx, my, mz, ox, oy, oz)
            if dist < 40 then -- если дистанция меньше 40, то
                sampAddChatMessage('Игрок: '..sampGetPlayerNickname(playerId)..' использует анимацию '..animName,-1)
            end
        end
    end
end