Postado Janeiro 13, 2018 7 anos 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: Mostrar conteúdo oculto 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: Mostrar conteúdo oculto 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: Mostrar conteúdo oculto 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: Email: dwarfer@sapo.pt Discord: Dwarfer#2715
Postado Janeiro 13, 2018 7 anos Autor Em 13/01/2018 em 22:38, 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: Mostrar conteúdo oculto Mostrar conteúdo oculto 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: Mostrar conteúdo oculto Mostrar conteúdo oculto 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: Mostrar conteúdo oculto Mostrar conteúdo oculto 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 ?
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.