Ou você pode setar rotação nos braços do jogador algemado em vez de setar uma animação. Dai é só ficar chamando todo frame enquanto ele estiver com elementData de algemado.
-- Client-side:
function setCuffed(thePlayer) -- Função que seta a "animação" de algemado.
-- Left
setElementBoneRotation(thePlayer, 32, 26.574, 61.3375, 59.2065)
setElementBoneRotation(thePlayer, 33, 27.844, 15.364, 46.406)
setElementBoneRotation(thePlayer, 34, -81.0185, 342.875, 326.118)
-- Right
setElementBoneRotation(thePlayer, 22, 338.839, 53.4935, 298.452)
setElementBoneRotation(thePlayer, 23, 307.687, 22.11, 313.594)
setElementBoneRotation(thePlayer, 24, 96.0475, 357.883, 56.739)
updateElementRpHAnim(thePlayer) -- Aplica as rotações nos ossos do thePlayer neste frame.
end
addEventHandler("onClientPedsProcessed", root, function() -- Chama essa função a cada frame, quando os personagens são processados.
for _,player in pairs(getElementsByType("player", root, true)) do -- Para cada jogador próximo, faça:
if getElementData(player, "algemado") then -- Se o jogador está com a elementData "algemado" então:
setCuffed(player) -- Seta a animação de algemado nele durante 1 frame.
end
end
end)
-- Server-side:
addCommandHandler("algemar", function(theCop, cmd, name) -- Comando que vai algemar/desalgemar alguém. Use /algemar NomeDoPlayer
if not isObjectInACLGroup ("user."..getAccountName(getPlayerAccount(theCop)), aclGetGroup ("Policia")) then -- Se quem executou o comando não está na ACL Group "Policia", então:
outputChatBox("Acesso negado. Você precisa ser um policial para usar este comando.", theCop, 255, 50, 50)
return -- Cancela a execução dessa função aqui e nem lê o resto.
end
if not name then -- Se não foi declarado nada depois do /algemar, então:
outputChatBox("Erro: É necessário informar o nome do jogador a ser algemado/desalgemado.", theCop, 255, 50, 50)
return
end
local thePlayer = getPlayerFromName(name)
if thePlayer then -- Se existe o jogador com o nome informado, então: (o nome precisa ser exato, incluindo códigos de cores)
if getPedOccupiedVehicle(thePlayer) then -- Não permite algemar/desalgemar jogadores que estão em veículos.
outputChatBox("Erro: Este jogador está em um veículo, não é possível algemar/desalgemar ele.", theCop, 255, 50, 50)
return
end
if getElementData(thePlayer, "algemado") then -- Se o jogador já tem a data de algemado, então:
setElementData(thePlayer, "algemado", false) -- Remove a data dele, parando a animação de algemado dele.
disenableControls(thePlayer, true) -- Habilita os controles do jogador.
outputChatBox("Você desalgemou o jogador "..name, theCop, 255, 255, 0)
else -- Se o jogador não tem a data de algemado, então:
setElementData(thePlayer, "algemado", true) -- Coloca a data nele, a animação de algemado será aplicada nele.
disenableControls(thePlayer, false) -- Desabilita os controles do jogador.
setPedWeaponSlot (thePlayer, 0) -- Coloca o slot de arma desarmado no jogador. Para ele não ficar segurando armas enquanto algemado.
outputChatBox("Você algemou o jogador "..name, theCop, 255, 255, 0)
end
else -- Se não existe um jogador com o nome informado (ou o nome informado não é exato), então:
outputChatBox("Erro: Jogador não encontrado: "..name, theCop, 255, 50, 50)
end
end)
function disenableControls(thePlayer, state) -- Função que ativa/desativa alguns controles específicos do jogador, pra n ficar repetindo código.
local controls = {"fire", "action", "jump", "sprint", "aim_weapon", "next_weapon", "previous_weapon", "enter_exit"}
for _,ctrl in pairs (controls) do -- Para cada controle da lista, faça:
toggleControl (thePlayer, ctrl, state) -- Ativa/desativa o controle.
end
end