Um amigo me pediu este sisteminha alguns dias atrás. Como poderá ver, é algo bem simples. Entretanto, ele pode conflitar com outras mudanças de outfit que o pokémon venha sofrer. Para evitar isso, você terá de fazer algumas mudanças adicionais, explicadas adiante.
Primeiramente, em algum arquivo da lib:
outfits_order = {
--["nome_do_pokemon"] = {outfit1, outfit2, outfit3, ...},
}
function doTradeOutfit(cid, index)
if not isSummon(cid) then return true end
local outfit = outfits_order[getCreatureName(cid)]
if not outfit[index] then index = 1 end
doSetCreatureOutfit(cid, {lookType = outfit[index]}, -1)
addEvent(doTradeOutfit, 200, cid, index + 1)
end
As outfits devem ser configuradas na ordem em que serão trocadas.
O resto dependerá de onde a função será chamada. Se a animação do pokémon começar logo após ele ter sido chamado da pokébola, então, em goback.lua (data/actions/scripts):
Abaixo de:
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then return true end
Coloque:
if outfits_order[getCreatureName(pk)] then
doTradeOutfit(pk, 1)
end
Se formos seguir a lógica da gif demonstrada, a função deveria ser chamada após a mega evolução, o que dependeria de como o sistema usado por você foi escrito. Usando o meu, o processo seria o seguinte:
Em pokemon moves.lua (data/lib), no código da spell Mega Evolution:
Abaixo de:
adjustStatus(newPoke, ball, true, false)
coloque:
if outfits_order[getCreatureName(newPoke)] then
doTradeOutfit(newPoke, 1)
end
Caso os pokémons que façam parte do sistema de mudança constante de outfit possam ter sua looktype alterada de alguma maneira durante o jogo (por exemplo, um Mega Charizard X usando Outrage ou uma Rapidash usando Blue Flames), você deverá fazer algumas pequenas mudanças.
Troque a função que passei anteriormente por essa:
function doTradeOutfit(cid, index)
if not isSummon(cid) then return true end
local outfit = outfits_order[getCreatureName(cid)]
if not getCreatureCondition(cid, CONDITION_OUTFIT) or isInArray(outfit, getCreatureOutfit(cid).lookType) then
if not outfit[index] then index = 1 end
doSetCreatureOutfit(cid, {lookType = outfit[index]}, -1)
end
addEvent(doTradeOutfit, 200, cid, index + 1)
end
Depois, no código de todos os possíveis fatores que possam mudar a outfit dos pokémons participantes do sistema, acima da linha responsável pela alteração na looktype:
doSetCreatureOutfit(...)
Coloque isso:
if getCreatureCondition(cid, CONDITION_OUTFIT) then doRemoveCondition(cid, CONDITION_OUTFIT) end
Sinceramente, acho que você só terá de fazer isso em pouquíssimos códigos.
Por gentileza, poste um feedback do sistema. Assim, saberei se devo ou não mover o tópico.