Ir para conteúdo
  • Cadastre-se

(Resolvido)Ajuda no desenvolvimento de uma script


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Olá galera to precisando de uma ajuda pra setar um atributo a um item e gostaria de uma ajuda, quero adicionar uma tabela em um atributo de item e depois conseguir puxar os valores.

 

Mini-Explicação:

Gostaria de saber se tem como eu criar uma tabela no atributo do item, como por exemplo eu tenho X item ao dar use no item ele seta o atributo 542 e se eu usar denovo seta o atributo 2134 e. Apos setar gostaria de saber se tem como puxar esses valores por outras script exemplo : X atributo [1] = 542 ou X atributo [2] = 2134.

 

@Dwarfer @Vodkart

 

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

Doar

Link para o post
Compartilhar em outros sites
7 minutos atrás, Gnius disse:

Seria tipo uma storage??

Como e server de pokemon tenho que salvar tudo no item ( Poke ball , um atributo

 

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

Doar

Link para o post
Compartilhar em outros sites
14 minutos atrás, Gnius disse:

Mais pra que serveria esse atributo?

Estou tentando fazer um sistema de addon que você pode adicionar infinitos addons no seu pokemon desde que não seja iguais, assim terá uma talk que você troca o addon exemplo !addon 1, ele vai procurar pelo atributo[1] no item

 

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

Doar

Link para o post
Compartilhar em outros sites
  • 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:

 

Link para o post
Compartilhar em outros sites
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

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo