Jump to content

Setar Skin no player por ID.


Recommended Posts

Estou tentando setar skin no player por ID.

alguém pode me ajudar???

exemplo de comando 

 

/skin 1( player ) 16(ID SKIN)

Sou muito novo nessa de Script. Então me perdoe pelos erros...

 

----------------------------------------------------

function getSkinNameFromID(i)
    local id = tonumber (i)
        assert(id, "Bad argument 1 @ getSkinFromID [Number expected, got " .. type(i) .. "]")
    local name = skinsTable[id]
        assert(name,"Bad argument 1 @ getSkinFromID [Invaild skin ID]")
    return name 
end

addCommandHandler('skin',
function()
local name = getSkinNameFromID(getElementModel(localPlayer))
if name then
outputChatBox('SkinName : ('..name..') of ID ('..getElementModel(localPlayer)..')',255,255,0)
else
outputChatBox('Falha ao obter skin. ID errado ou não encontrado na tabela',255,255,0)
end
end)

Link to comment
  • 3 months later...
function setPlayerSkin2(thePlayer, commandName, skin)
	if isObjectInACLGroup ( "user." ..getAccountName(getPlayerAccount(thePlayer)), aclGetGroup ("Staff")) then
			if getElementModel(thePlayer) == skin then
				outputChatBox(error .. "O Jogador Ja Possui Esta Skin!", thePlayer, 255, 255, 255, true)
				return
			end
			setElementModel(thePlayer, skin)
			outputChatBox("A Skin Foi Alterada Com Exitô", thePlayer, 255, 255, 255, true)
			
	end
end
addCommandHandler("setskin", setPlayerSkin2, false, false)

o script nao e meu!, apenas editei, nao consegui fazer por id, o script funciona assim /setskin (nome do player) (id da skin)

espero que ajude mesmo nao sendo oque estava buscando

Link to comment
On 21/05/2021 at 14:09, keven said:

Estou tentando setar skin no player por ID.

alguém pode me ajudar???

exemplo de comando 

 

/skin 1( player ) 16(ID SKIN)

Sou muito novo nessa de Script. Então me perdoe pelos erros...

 

----------------------------------------------------

function getSkinNameFromID(i)
    local id = tonumber (i)
        assert(id, "Bad argument 1 @ getSkinFromID [Number expected, got " .. type(i) .. "]")
    local name = skinsTable[id]
        assert(name,"Bad argument 1 @ getSkinFromID [Invaild skin ID]")
    return name 
end

addCommandHandler('skin',
function()
local name = getSkinNameFromID(getElementModel(localPlayer))
if name then
outputChatBox('SkinName : ('..name..') of ID ('..getElementModel(localPlayer)..')',255,255,0)
else
outputChatBox('Falha ao obter skin. ID errado ou não encontrado na tabela',255,255,0)
end
end)

Para setar uma skin você deve usar a função setElementModel que recebe o elemento (no caso o player) e o ID do model (skin). Como você quer passar o ID do player, antes deve fazer uma lógica para buscar o player pelo ID.

Ficaria mais ou menos assim (observe os comentários): 

Link to comment

  Eu postei a resposta acima sem querer antes de escrever o código, quando fui editar a resposta já tinha passado muito tempo... (acho um saco isso de ter limite de tempo para editar uma postagem)

E eu não testei o código, testa aí e traga possíveis problemas. Não esqueça de dar um /debugscript 3 para ver o erro.

function setPlayerSkinByID (id, skin, adm) --Passa um int id, int skin e element(player) adm como parâmetro.
  local player = getPlayerByID(id) -- Chama outra função que retorna um player passando o ID do player como parâmetro. False se não achar o player. 
  if not player then return outputChatBox("Player não encontrado.", adm) end --Se não encontrou o player mostra uma mensagem e para a função.
  setElementModel(player, skin) --Seta a skin desejada no player encontrado pelo ID.
end  

function getPlayerByID(id)
  for i, player in ipairs(getElementsByType('player')) do --Um for que percorre todos os players online.
    if getElementData(player, 'ID') == id then --Se o ID préviamente salvo no player for igual ao id passado por parâmentr, então... (!!!ATENÇÃO!!!)
      return player --Retorna o player e para a função.
    end
  end
  return false --Se percorrer todos os players e não achar o player com o ID indicado, retorna falso.
end

--ATENÇÃO: SE SEU SERVER JÁ TIVER UM SISTEMA DE ID PODE EXCLUIR TUDO DAQUI PRA BAIXO. E FIQUE ATENTO TAMBÉM AO NOME DO ELEMENTDATA DO ID, SE FOR DIFERENTE DE 'ID' VOCÊ DEVE MUDAR NA LINHA QUE EU COLOQUEI (!!!ATENÇÃO!!!) COMENTADO NA FRENTE.

local function addPlayerDataID (player, id) 
  setElementData(player, 'ID', id) --Seta o ID do player no elemento player (o ID a princípio é relacionado a account do player)
end

addEventHandler('onResourceStart', root, function() --Quando iniciar o mod...
   for i, player in ipairs(getElementsByType('player')) do --Um for que percorre todos os players online.
      local id = getAccountID(getPlayerAccount (player)) --Pega o ID da conta do player
      addPlayerDataID (player, id) --Chama a função para setar o ID no player.
   end
end)

addEventHandler('onPlayerLogin', root, function(thePreviousAccount, account) --Quando um player logar...
  local id = getAccountID(account) --Pega o ID da conta do player.
  addPlayerDataID (source, id) --Chama a função para setar o ID no player, que nesse caso é o source do evento..
end)

 

Edited by Boechat
Link to comment

Já notei um pequeno erro, corrija por favor (já que não dá para eu editar a resposta)

Troque "root" por "resourceRoot", senão vai executar o código sempre que qualquer resource iniciar, não somente a resource em questão.

Como está:

addEventHandler('onResourceStart', root, function() --Quando iniciar o mod...

Corrigido:

addEventHandler('onResourceStart', resourceRoot, function() --Quando iniciar o mod...

 

Link to comment

Desculpa mais um comentário, mas agora que me toquei que coloquei as funções mas não fiz o comando KKKK

Adicione esse código:

addCommandoHandler("setskin", function(playerSource, cmd, id, skin) --Quando der o comando setskin
    id = tonumber(id) --Por padrão, os comandos vem como string. Nós temos que converter para number (int) para funcionar corretamente.
    skin = tonumber(skin)
	setPlayerSkinByID (id, skin, playerSource) --Chamando a função de setar skin
end)

Aproveitando o post, o 1° código que eu postei ele coloca um sistema de ID no seu servidor que facilita usos futuros, mas se quiser fazer de uma forma mais simples pode fazer assim:

Spoiler
function setPlayerSkinByID (id, skin, adm) --Passa um int id, int skin e element(player) adm como parâmetro.
  local player = getPlayerByID(id) -- Chama outra função que retorna um player passando o ID do player como parâmetro. False se não achar o player. 
  if not player then return outputChatBox("Player não encontrado.", adm) end --Se não encontrou o player mostra uma mensagem e para a função.
  setElementModel(player, skin) --Seta a skin desejada no player encontrado pelo ID.
end  

function getPlayerByID(id)
  for i, player in ipairs(getElementsByType('player')) do --Um for que percorre todos os players online.
    if getAccountID(getPlayerAccount (player)) == id then --Se o ID for igual ao id passado por parâmentro, então... 
      return player --Retorna o player e para a função.
    end
  end
  return false --Se percorrer todos os players e não achar o player com o ID indicado, retorna falso.
end

addCommandoHandler("setskin", function(playerSource, cmd, id, skin) --Quando der o comando setskin
    id = tonumber(id) --Por padrão, os comandos vem como string. Nós temos que converter para number (int) para funcionar corretamente.
    skin = tonumber(skin)
	setPlayerSkinByID (id, skin, playerSource) --Chamando a função de setar skin
end)

 

 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...