Ir para conteúdo
  • Cadastre-se

Mega Evolution System (PxG)


Posts Recomendados

  • 11 months later...

Meus parabéns para o criador e obrigado por compartilha-lo.

REP+ em agradecimento...

Ando devagar, porque já tive pressa. E levo esse sorriso, porque já chorei demais...

________________________________________________________________________________

Minhas Sprites:

Mega Metagross

Mega Abomasnow

Pack de Shinys

[Posso atualizá-lo com novos shinys a qualquer momento]

Tutoriais:

[Completo] Criando e adicionando um novo Pokémon

[Actions] Criando quest no RME

Editores Lua/Xml/Sync Entre outros:

Editores Win/Mac/Linux

Link para o post
Compartilhar em outros sites
  • 1 month later...
Em 23/06/2015 ás 16:12, mee disse:

Oi. 

Antes de tudo, este sistema foi escrito para o servidor PDA by Slicer, versão 1.9. A adaptação para outras bases pode ser bem simples, dependendo do seu conhecimento em Lua (que na verdade nem precisa ser grande).

Resolvi escrever este simples sistema porque me deu um certo desgosto ver vários servidores onde a mega evolução é literalmente uma evolução (inclusive o que estive jogando, onde alguns jogadores também concordaram com minha opinião). Quero dizer, o pokémon fica transformado direto, para sempre, forever, algo que contraria a ideia original.

Optei por fazer o sistema igual (ou semelhante, já que me baseei apenas nas informações disponíveis no Blog PxG, que aliás são poucas) ao da PokeXGames. Mais futuramente, no entanto, posso fazer uma outra versão voltada a ideia de uma mega evolução temporária.

Para quem não conhece o sistema, bem, estou com preguiça de explicar, logo recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem este sistema).

O sistema, como poderão notar, possui muitos detalhes. O motivo é que tenho a tendência de deixar a configuração o menor possível. Ou seja, basta configurar o efeito no código da spell e a tabela das mega evoluções.

Nossa, que textão.

 

TL;DR: Igual ao sistema da PxG; PDA; muitos detalhes mas pouquíssima configuração.

data/lib:

cooldown bar.lua:

Troque o código da função getNewMoveTable(table, n) por este:


function getNewMoveTable(table, n)
    if table == nil then
        return false
    end
    local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12}
    local returnValue = moves
    if n then
        returnValue = moves[n]
    end
    return returnValue
end

No código da função doUpdateMoves(cid), troque o segundo:


table.insert(ret, "n/n,")

Por:


local mEvolve
if not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then
    if not isInArray(ret, "Mega Evolution,") then
        table.insert(ret, "Mega Evolution,")
        mEvolve = true
    end
end
if not mEvolve then
    table.insert(ret, "n/n,")
end
Depois, em pokemon moves.lua:
Troque:

min = getSpecialAttack(cid) * table.f * 0.1   --alterado v1.6

por:


min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1   --alterado v1.6

Código da spell:


elseif spell == "Mega Evolution" then
    local effect = xxx                          --Efeito de mega evolução.
    if isSummon(cid) then
        local pid = getCreatureMaster(cid)
        if isPlayer(pid) then
            local ball = getPlayerSlotItem(pid, 8).uid
            if ball > 0 then
                local attr = getItemAttribute(ball, "megaStone")
                if attr and megaEvolutions[attr] then
                    local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid)
                    doItemSetAttribute(ball, "poke", megaEvolutions[attr][2])
                    doSendMagicEffect(getThingPos(cid), effect)
                    doRemoveCreature(cid)
                    doSummonMonster(pid, megaEvolutions[attr][2])
                    local newPoke = getCreatureSummons(pid)[1]
                    doTeleportThing(newPoke, oldPosition, false)
                    doCreatureSetLookDir(newPoke, oldLookdir)
                    adjustStatus(newPoke, ball, true, false)
                    if useKpdoDlls then
                        addEvent(doUpdateMoves, 5, pid)
                    end
                end
            end
        end
    end

Depois, em configuration.lua:


megaEvolutions = {
    --[itemid] = {"poke_name", "mega_evolution"},
    [11638] = {"Charizard", "Mega Charizard X"},
    [11639] = {"Charizard", "Mega Charizard Y"},
}

Agora, em data/actions/scripts, código da mega stone:


function onUse(cid, item)
    local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid
    if not mEvolution then
        return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.")
    elseif ball < 1 then
        return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.")
    elseif #getCreatureSummons(cid) > 0 then
        return doPlayerSendCancel(cid, "Return your pokemon.")
    elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then
        return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.")
    elseif getItemAttribute(ball, "megaStone") then
        return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.")
    end
    doItemSetAttribute(ball, "megaStone", item.itemid)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".")
    doRemoveItem(item.uid)
    return true
end
Depois, em goback.lua:
Abaixo de:

if not pokes[pokemon] then
    return true
end

coloque:


    if pokemon:find("Mega") then
        local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1]
        if normalPoke then
            doItemSetAttribute(item.uid, "poke", normalPoke)
            pokemon = normalPoke
        end
    end
Depois, em data/creaturescripts/scripts, look.lua:
Abaixo de:

local boost = getItemAttribute(thing.uid, "boost") or 0

coloque:


local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone")
if megaStone then
    extraInfo = getItemNameById(megaStone)   
    if pokename:find("Mega") then
        pokename = megaEvolutions[megaStone][1]
    end
end

Depois, acima de:


doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))

coloque:


if extraInfo ~= "" then
    table.insert(str, "\nIt's holding a(n) "..extraInfo..".")
end
Já em data/talkactions/scripts, move1.lua:
Troque:

   if not move then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")
        return true
    end

por:


if not move then
        local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone")
        if not isMega or name:find("Mega") then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")
            return true
        end
        local moveTable, index = getNewMoveTable(movestable[name]), 0
        for i = 1, 12 do
            if not moveTable[i] then
                index = i
                break
            end
        end
        if tonumber(it) ~= index then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.")
            return true
        end
        local needCds = true                   --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown.
        if needCds then
            for i = 1, 12 do
                if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then
                    return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.")
                end
            end
        end
        move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"}
    end

E troque:


doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY)

por:


local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!"
if move.name == "Mega Evolution" then
    spellMessage = "Mega Evolve!"
end
doCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY)
Se quiser que o "Mega" não apareça no nome do pokémon, vá em data/lib, level system.lua:
Acima de:

if getItemAttribute(item, "nick") then
    nick = getItemAttribute(item, "nick")
end

coloque:


    if nick:find("Mega") then
        nick = nick:match("Mega (.*)")
        if not pokes[nick] then
            nick = nick:explode(" ")[1]
        end
    end
E, caso o seu servidor possua pokémons evoluídos permanentemente na forma mega, em data/actions/scripts, goback.lua:
Troque:

    if pokemon:find("Mega") then
        local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1]
        if normalPoke then
            doItemSetAttribute(item.uid, "poke", normalPoke)
            pokemon = normalPoke
        end
    end

por:


  if pokemon:find("Mega") then
        local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1]
        if not normalPoke then
            local megaStone
            for itemid, table in pairs(megaEvolutions) do
                if table[2] == pokemon then
                    megaStone = itemid
                    break
                end
            end
            if not megaStone then
                return doPlayerSendTextMessage(cid, 27, "Your pokemon is bugged. Please, talk to the administrator.")
            end
            doItemSetAttribute(item.uid, "megaStone", megaStone)
            normalPoke = megaEvolutions[megaStone][1]
        end
        doItemSetAttribute(item.uid, "poke", normalPoke)
        pokemon = normalPoke
    end
Bem, é isso aí. Acho que não esqueci de nada.
Até mais.
 
Obs¹:,esqueci uma informação específica no segundo passo de instalação do sistema (doUpdateMoves). Editado.

Ah, editei novamente com uma correção para OTClient.

 

Creditos:

zipter98  (Pela criação)

Eu (por divulgalo)

 

cara poderia fazer um video ? explicando melhor ? da pra entender mas é q tenho algumas duvidas ainda :S

 

Link para o post
Compartilhar em outros sites
  • 7 months later...

mano mas quando vai usar a meganium da o seguinte erro no goback ,

[10/03/2017 13:41:10] [Error - Action Interface] 
[10/03/2017 13:41:10] data/actions/scripts/goback.lua:onUse
[10/03/2017 13:41:10] Description: 
[10/03/2017 13:41:10] data/actions/scripts/goback.lua:95: attempt to index field '?' (a nil value)
[10/03/2017 13:41:10] stack traceback:
[10/03/2017 13:41:10]     data/actions/scripts/goback.lua:95: in function <data/actions/scripts/goback.lua:14>
 tem como arrumar isso?

Link para o post
Compartilhar em outros sites
  • 3 months later...
Em 2015-6-23 ás 16:12, mee disse:

Código da spell:


elseif spell == "Mega Evolution" then
    local effect = xxx                          --Efeito de mega evolução.
    if isSummon(cid) then
        local pid = getCreatureMaster(cid)
        if isPlayer(pid) then
            local ball = getPlayerSlotItem(pid, 8).uid
            if ball > 0 then
                local attr = getItemAttribute(ball, "megaStone")
                if attr and megaEvolutions[attr] then
                    local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid)
                    doItemSetAttribute(ball, "poke", megaEvolutions[attr][2])
                    doSendMagicEffect(getThingPos(cid), effect)
                    doRemoveCreature(cid)
                    doSummonMonster(pid, megaEvolutions[attr][2])
                    local newPoke = getCreatureSummons(pid)[1]
                    doTeleportThing(newPoke, oldPosition, false)
                    doCreatureSetLookDir(newPoke, oldLookdir)
                    adjustStatus(newPoke, ball, true, false)
                    if useKpdoDlls then
                        addEvent(doUpdateMoves, 5, pid)
                    end
                end
            end
        end
    end

Isso é pra colocar onde ?

Link para o post
Compartilhar em outros sites
Em 2015-6-23 ás 16:12, mee disse:

Código da spell:


elseif spell == "Mega Evolution" then
    local effect = xxx                          --Efeito de mega evolução.
    if isSummon(cid) then
        local pid = getCreatureMaster(cid)
        if isPlayer(pid) then
            local ball = getPlayerSlotItem(pid, 8).uid
            if ball > 0 then
                local attr = getItemAttribute(ball, "megaStone")
                if attr and megaEvolutions[attr] then
                    local oldPosition, oldLookdir = getThingPos(cid), getCreatureLookDir(cid)
                    doItemSetAttribute(ball, "poke", megaEvolutions[attr][2])
                    doSendMagicEffect(getThingPos(cid), effect)
                    doRemoveCreature(cid)
                    doSummonMonster(pid, megaEvolutions[attr][2])
                    local newPoke = getCreatureSummons(pid)[1]
                    doTeleportThing(newPoke, oldPosition, false)
                    doCreatureSetLookDir(newPoke, oldLookdir)
                    adjustStatus(newPoke, ball, true, false)
                    if useKpdoDlls then
                        addEvent(doUpdateMoves, 5, pid)
                    end
                end
            end
        end
    end

CARA ONDE EU COLOCO O CÓDIGO DA SPELL ??

Link para o post
Compartilhar em outros sites
  • 2 years later...

meu Pokemon moves não tem a função 

min = getSpecialAttack(cid) * table.f * 0.1   --alterado v1.6

Jamais se desespere em meio as sombrias afeiçoes da sua vida, pois das nuvens mais negras cai água límpida e fecunda

Link para o post
Compartilhar em outros sites

Agora esta dando esse outro erro 

 

[28/09/2019 11:38:10] [Error - TalkAction Interface] 
[28/09/2019 11:38:10] datapack/talkactions/scripts/move1.lua:onSay
[28/09/2019 11:38:10] Description: 
[28/09/2019 11:38:10] (luaDoTeleportThing) Thing not found

[28/09/2019 11:38:10] [Error - TalkAction Interface] 
[28/09/2019 11:38:10] datapack/talkactions/scripts/move1.lua:onSay
[28/09/2019 11:38:10] Description: 
[28/09/2019 11:38:10] (luaDoCreatureSetLookDir) Creature not found

 

Alguém ajuda 

Jamais se desespere em meio as sombrias afeiçoes da sua vida, pois das nuvens mais negras cai água límpida e fecunda

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