Ir para conteúdo

Featured Replies

Postado
  • Solução

@DboExplorer

Caso se trate de TFS 0.4, fiz um exemplo simples para você. Como não sei onde está esse item e como você está fazendo para pegar suas informações, coloquei o exemplo da talkaction como verificando os atributos do item na mão esquerda do player.

 

Primeiramente, adicione as seguintes funções na sua lib:

 

Spoiler

function setItemAttrTable(item, tab)
local tabstr = "&"
for i, x in pairs(tab) do
tabstr = tabstr .. i .. "," .. x .. ";"
end
doItemSetAttribute(item, "addon", tabstr:sub(1, #tabstr-1))
end

function getItemAttrTable(item)
local attr = getItemAttribute(item, "addon")
local tabstr, tab = attr and attr or "", {}
if tabstr:sub(1,1) ~= "&" then return {} end
local tabstr = tabstr:sub(2, #tabstr)
local a = string.explode(tabstr, ";")
for i, x in pairs(a) do
    local b = string.explode(x, ",")
    tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
end
return tab
end

function isAddonInTable(item, addonID)
for _, i in pairs(getItemAttrTable(item))do
if tonumber(i) == tonumber(addonID) then
return true
end
end
return false
end

function addAddonToTable(item, addonID)
local x = {}
for i = 1, #getItemAttrTable(item) do
    table.insert(x, getItemAttrTable(item)[i])
end
if x ~= 0 then
table.insert(x, tonumber(addonID))
setItemAttrTable(item, x)
else
setItemAttrTable(item, {tonumber(addonID)})
end
end

 

 

Para a action, você pode fazer algo como:

 

Spoiler

local t = {
    [0] = 542, -- coloque sempre [0] para o primeiro addon 
    [542] = 2134, -- quando tiver o attr [542], vai setar o 2134
    [2134] = 111 -- quando tiver o attr [2134], vai setar o 111
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local p = getPlayerPosition(cid)
    if count(t) == #getItemAttrTable(item.uid) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have already added all addons to your item.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    if #getItemAttrTable(item.uid) == 0 then
        addAddonToTable(item.uid, tonumber(t[#getItemAttrTable(item.uid)]))
    else
        local newAddon = 0 
        for old, new in pairs(t) do
            if old ~= 0 and isAddonInTable(item.uid, old) then
                newAddon = new
            end
        end
        addAddonToTable(item.uid, newAddon)
    end
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have added a new addon to your item!")
    doSendMagicEffect(p, CONST_ME_STUN)
    return true
end

 

 

Para a talkaction:

 

Spoiler

function onSay(cid, words, param, channel)
    local p = getPlayerPosition(cid)
    if param == "" or not tonumber(param) then
        doPlayerSendCancel(cid, "Your need to say !addon X where X is an addon number.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    local t = getPlayerSlotItem(cid, CONST_SLOT_LEFT)
    local outfit, tab = getCreatureOutfit(cid), getItemAttrTable(t.uid)
    local newlookType = tab[tonumber(param)]
    if not isAddonInTable(t.uid, newlookType) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can not use this outfit yet.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    outfit.lookType = newlookType
    doSetCreatureOutfit(cid, outfit, -1)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have changed your outfit!")
    doSendMagicEffect(p, CONST_ME_MAGIC_GREEN)
    return true
end

 

 

Ao falar !addon 1, trocará para o primeiro outfit adicionado ao item lá na action, !addon 2 o segundo e por aí vai. Como disse, fiz uma forma simplificada, a partir disso você consegue implementá-lo.

 

Contato:

 

  • Respostas 6
  • Visualizações 428
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @DboExplorer Caso se trate de TFS 0.4, fiz um exemplo simples para você. Como não sei onde está esse item e como você está fazendo para pegar suas informações, coloquei o exemplo da talkaction co

Postado
  • Autor
58 minutos atrás, Dwarfer disse:

@DboExplorer

Caso se trate de TFS 0.4, fiz um exemplo simples para você. Como não sei onde está esse item e como você está fazendo para pegar suas informações, coloquei o exemplo da talkaction como verificando os atributos do item na mão esquerda do player.

 

Primeiramente, adicione as seguintes funções na sua lib:

 

  Ocultar conteúdo


function setItemAttrTable(item, tab)
local tabstr = "&"
for i, x in pairs(tab) do
tabstr = tabstr .. i .. "," .. x .. ";"
end
doItemSetAttribute(item, "addon", tabstr:sub(1, #tabstr-1))
end

function getItemAttrTable(item)
local attr = getItemAttribute(item, "addon")
local tabstr, tab = attr and attr or "", {}
if tabstr:sub(1,1) ~= "&" then return {} end
local tabstr = tabstr:sub(2, #tabstr)
local a = string.explode(tabstr, ";")
for i, x in pairs(a) do
    local b = string.explode(x, ",")
    tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
end
return tab
end

function isAddonInTable(item, addonID)
for _, i in pairs(getItemAttrTable(item))do
if tonumber(i) == tonumber(addonID) then
return true
end
end
return false
end

function addAddonToTable(item, addonID)
local x = {}
for i = 1, #getItemAttrTable(item) do
    table.insert(x, getItemAttrTable(item)[i])
end
if x ~= 0 then
table.insert(x, tonumber(addonID))
setItemAttrTable(item, x)
else
setItemAttrTable(item, {tonumber(addonID)})
end
end

 

 

Para a action, você pode fazer algo como:

 

  Ocultar conteúdo


local t = {
    [0] = 542, -- coloque sempre [0] para o primeiro addon 
    [542] = 2134, -- quando tiver o attr [542], vai setar o 2134
    [2134] = 111 -- quando tiver o attr [2134], vai setar o 111
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
    function count(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end
    local p = getPlayerPosition(cid)
    if count(t) == #getItemAttrTable(item.uid) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have already added all addons to your item.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    if #getItemAttrTable(item.uid) == 0 then
        addAddonToTable(item.uid, tonumber(t[#getItemAttrTable(item.uid)]))
    else
        local newAddon = 0 
        for old, new in pairs(t) do
            if old ~= 0 and isAddonInTable(item.uid, old) then
                newAddon = new
            end
        end
        addAddonToTable(item.uid, newAddon)
    end
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have added a new addon to your item!")
    doSendMagicEffect(p, CONST_ME_STUN)
    return true
end

 

 

Para a talkaction:

 

  Ocultar conteúdo


function onSay(cid, words, param, channel)
    local p = getPlayerPosition(cid)
    if param == "" or not tonumber(param) then
        doPlayerSendCancel(cid, "Your need to say !addon X where X is an addon number.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    local t = getPlayerSlotItem(cid, CONST_SLOT_LEFT)
    local outfit, tab = getCreatureOutfit(cid), getItemAttrTable(t.uid)
    local newlookType = tab[tonumber(param)]
    if not isAddonInTable(t.uid, newlookType) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can not use this outfit yet.")
        doSendMagicEffect(p, CONST_ME_POFF)
        return true
    end
    outfit.lookType = newlookType
    doSetCreatureOutfit(cid, outfit, -1)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have changed your outfit!")
    doSendMagicEffect(p, CONST_ME_MAGIC_GREEN)
    return true
end

 

 

Ao falar !addon 1, trocará para o primeiro outfit adicionado ao item lá na action, !addon 2 o segundo e por aí vai. Como disse, fiz uma forma simplificada, a partir disso você consegue implementá-lo.

 

Eu consegui fazer utilizando um for, cada novo addon adicionado ele seta um atributo diferente e depois na talk tem outro for que percorre e checka s ele tem a addon no item

 

Te ajudei ?? Que tal fazer uma contribuição ?

Doar

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo