Ir para conteúdo
Propaganda

Posts Recomendados

Olá, gostaria de pedir uma pequena ajuda para adaptar um sistema de addon para poketibia

Esse sistema está funcional mas ele tem um probleminha chato que é ter que criar varios items pra cada addon.

queria que apenas um unico item service pra ser aplicado em diversos pokémons

de exemplo: o item sunflower addon service para (venusaur, charizard, tropius emfim..) 

data/lib

ADDON_LIMIT = 5 --Limite de addons que um poke pode ter
local ADDON_BASE_STRING = string.rep("0;", ADDON_LIMIT) --String base no formato: "0;0;0;0;0;"

local function checkAddonTableConsistency(tab)
    if #tab < ADDON_LIMIT then --proteção para quando muda o ADDON_LIMIT
        for i = #tab+1, ADDON_LIMIT do
            tab[i] = 0
        end
    end
end

function updateAddonAttr(uid, attr, value, pos)
    local tmp = getItemAttribute(uid, attr) or ADDON_BASE_STRING
    tmp = type(tmp) == "string" and tmp or ADDON_BASE_STRING
    local t = string.explode(tmp, ";")

    checkAddonTableConsistency(t)
    if pos > 0 and pos <= ADDON_LIMIT then
        t[pos] = value
        return doSetItemAttribute(uid, attr, table.concat(t, ";"))
    else
        return false
    end
end

function getAddonValue(uid, attr)
    local tmp = getItemAttribute(uid, attr) or ADDON_BASE_STRING
    tmp = type(tmp) == "string" and tmp or ADDON_BASE_STRING
    tmp = string.explode(tmp, ";")
    local pos = getItemAttribute(uid, "current_addon") or 0

    checkAddonTableConsistency(tmp)
    if pos > 0 and pos <= ADDON_LIMIT then
        return tonumber(tmp[pos])
    else
        return 0
    end
end

function getAddonCount(uid)
  local tmp = getItemAttribute(uid, "addon")
  if type(tmp) ~= "string" then return 0 end
  local t = string.explode(tmp, ";")

  checkAddonTableConsistency(t)
  local count = 0
  for _,v in ipairs(t) do
    if tonumber(v) ~= 0 then count = count + 1 end
  end
  return count
end

function getAddonTotalLook(value)
local str = {}
addonValue = 0
	for addonList = 1, 5 do
	local addons = tostring(value:explode(";")[addonList])
		if addons ~= '0' then
			addonValue = addonValue + 1
		end
	end
addonValue = addonValue == 0 and "Não possui addon." or addonValue
return addonValue
end

data/actions

local addons = {
[16674] = {addon_num = 1, pokemon = "Gengar", looktype = 3000, nome = "Masked'Blue", fly =  3001, ride = 0, surf = 0},
[16675] = {addon_num = 2, pokemon = "Gengar", looktype = 3002, nome = "Space", fly =  3003, ride = 0, surf = 0},
[16676] = {addon_num = 3, pokemon = "Gengar", looktype = 3004, nome = "Style Fit", fly =  3005, ride = 0, surf = 0},
[16677] = {addon_num = 4, pokemon = "Gengar", looktype = 3006, nome = "Masked'Red", fly =  3007, ride = 0, surf = 0},
[16678] = {addon_num = 5, pokemon = "Gengar", looktype = 3008, nome = "Bunny Buny", fly =  3009, ride = 0, surf = 0},

[16679] = {addon_num = 1, pokemon = "Mega Gengar", looktype = 3010, nome = "M Masked'Blue", fly =  3011, ride = 0, surf = 0},
[16680] = {addon_num = 2, pokemon = "Mega Gengar", looktype = 3012, nome = "M Space", fly =  3013, ride = 0, surf = 0},
[16681] = {addon_num = 3, pokemon = "Mega Gengar", looktype = 3014, nome = "M Bunny Buny", fly =  3015, ride = 0, surf = 0},
[16682] = {addon_num = 4, pokemon = "Mega Gengar", looktype = 3016, nome = "M Masked'Red", fly =  3017, ride = 0, surf = 0},

[16683] = {addon_num = 1, pokemon = "Espeon", looktype = 3032, nome = "Cyber Espeon", fly =  0, ride = 0, surf = 0},
[16684] = {addon_num = 2, pokemon = "Espeon", looktype = 3053, nome = "Hallo Espeon", fly =  0, ride = 0, surf = 0},
[16685] = {addon_num = 3, pokemon = "Espeon", looktype = 3045, nome = "Akatsuki Espeon", fly =  0, ride = 0, surf = 0},
[16686] = {addon_num = 4, pokemon = "Espeon", looktype = 3051, nome = "Princess Espeon", fly =  0, ride = 0, surf = 0},
[16687] = {addon_num = 5, pokemon = "Espeon", looktype = 3057, nome = "Special Espeon", fly =  0, ride = 0, surf = 0},

[16688] = {addon_num = 1, pokemon = "Vaporeon", looktype = 3036, nome = "Cyber Vaporeon", fly =  0, ride = 0, surf = 3037},
[16689] = {addon_num = 2, pokemon = "Vaporeon", looktype = 3043, nome = "Hallo Vaporeon", fly =  0, ride = 0, surf = 3044},
[16690] = {addon_num = 3, pokemon = "Vaporeon", looktype = 3047, nome = "Beach Vaporeon", fly =  0, ride = 0, surf = 3048},
[16691] = {addon_num = 4, pokemon = "Vaporeon", looktype = 3059, nome = "Nataline Vaporeon", fly =  0, ride = 0, surf = 3060},

[16692] = {addon_num = 1, pokemon = "Flareon", looktype = 3040, nome = "Hallo Flareon", fly =  0, ride = 0, surf = 0},
[16693] = {addon_num = 2, pokemon = "Flareon", looktype = 3035, nome = "Cyber Flareon", fly =  0, ride = 0, surf = 0},
[16694] = {addon_num = 3, pokemon = "Flareon", looktype = 3049, nome = "Beach Flareon", fly =  0, ride = 0, surf = 0},
[16695] = {addon_num = 4, pokemon = "Flareon", looktype = 3061, nome = "Nataline Flareon", fly =  0, ride = 0, surf = 0},

[16696] = {addon_num = 1, pokemon = "Jolteon", looktype = 3033, nome = "Cyber Jolteon", fly =  0, ride = 0, surf = 0},
[16697] = {addon_num = 2, pokemon = "Jolteon", looktype = 3042, nome = "Hallo Jolteon", fly =  0, ride = 0, surf = 0},
[16698] = {addon_num = 3, pokemon = "Jolteon", looktype = 3050, nome = "Beach Jolteon", fly =  0, ride = 0, surf = 0},
[16699] = {addon_num = 4, pokemon = "Jolteon", looktype = 3062, nome = "Nataline Jolteon", fly =  0, ride = 0, surf = 0},

[16700] = {addon_num = 1, pokemon = "Umbreon", looktype = 3034, nome = "Cyber Umbreon", fly =  0, ride = 0, surf = 0},
[16701] = {addon_num = 2, pokemon = "Umbreon", looktype = 3058, nome = "Hallo Umbreon", fly =  0, ride = 0, surf = 0},
[16702] = {addon_num = 3, pokemon = "Umbreon", looktype = 3054, nome = "Princess Umbreon", fly =  0, ride = 0, surf = 0},
[16703] = {addon_num = 4, pokemon = "Umbreon", looktype = 3063, nome = "Nataline Umbreon", fly =  0, ride = 0, surf = 0},
}

function onUse(cid, item, frompos, item2, topos)

local addonNum = addons[item.itemid].addon_num
local addonlook = addons[item.itemid].nome
local addon = addons[item.itemid].looktype
local fly = addons[item.itemid].fly
local ride = addons[item.itemid].ride
local surf = addons[item.itemid].surf
local pb = getPlayerSlotItem(cid, 8).uid
local pk = addons[item.itemid].pokemon
local btype = getPokeballType(item2.itemid)
local ball = pokeballs[btype]
		
if getPlayerStorageValue(cid, 17001) > 0 or getPlayerStorageValue(cid, 17000) > 0 or getPlayerStorageValue(cid, 63215) > 0 then
doPlayerSendCancel(cid, "NAO PODE!!!!!.")
return true
end

if #getCreatureSummons(cid) > 0 then
doPlayerSendCancel(cid, "VOLTA PRA BALL!!!!.")
return true
end

if item2.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
doPlayerSendCancel(cid, "COLOCA NO SLOT CORRETO!!!!!!")
return true
end

if not ball then 
doPlayerSendCancel(cid, "SO PODE POKEMON!!!!!!.")
return true
end

if getItemAttribute(pb, "poke") ~= pk then
doPlayerSendCancel(cid, "POKE ERRADO!!!!!!!!!")
return true
end

if getItemAttribute(pb, "poke") == 0 then
doPlayerSendCancel(cid, "POKE ERRADO")
return true
end

doRemoveItem(item.uid, 1)
doSendMagicEffect(frompos, 173)

updateAddonAttr(pb, "addon",addon,addonNum)
updateAddonAttr(pb, "addonfly",fly,addonNum)
updateAddonAttr(pb, "addonride",ride,addonNum)
updateAddonAttr(pb, "addonsurf",surf,addonNum)
updateAddonAttr(pb, "addonlook",addonlook,addonNum)

if not getItemAttribute(pb, "current_addon") then
doSetItemAttribute(pb, "current_addon", addonNum)
end
return true
end

se alguem puder me dar uma força eu agradeço! ❤️ 

Link para o comentário
https://tibiadevs.com/forums/topic/211-ajuda-com-addon-system/
Compartilhar em outros sites

[13101] = { -- item do addon
nome = "Sorcerer addon", -- nome do addon
["Shiny Tropius"] = {looktype = 2019}, -- looktype do addon ( no caso esse addon serve para 2 pokes por isso esta sh pius e sh meta)
["Shiny Metagross"] = {looktype = 2209},

É só deixar dessa forma

Link para o comentário
https://tibiadevs.com/forums/topic/211-ajuda-com-addon-system/#findComment-948
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...