OT

[Encerrado] Transformar Stones em Talkactions

Por otavio101, 19 de nov. de 2013 em Tópicos Sem Resposta

pda
com
level
stone
talkaction
evolution
evolução
pokemon
resolvido
21
1.8k
zipter98Z
20 de novembro de 2013 às 18:04

Sobre voltar pra ball, foi intencional colocar isso, pra evitar que o pokémon ficasse fora da ball, e consequentemente bugasse os status.

Vou dar uma olhada sobre os status (acho que já sei o que é) e sobre o Eevee.

 

edit: sobre o eevee, já corrigi. Era burrada de minha parte; já sobre os status, só falta eu confirmar uma coisa.

edit denovo: Tenta assim:

 

function evolving_pokemon(cid, mypoke, theevo)

if not isCreature(cid) then return true end
if not pokes[theevo] or not pokes[theevo].offense then
doReturnPokemon(cid, mypoke, getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect, false, true)
return true
end
local pokeball = getPlayerSlotItem(cid, 8)
local description = "Contains a "..theevo.."."
local pct = getCreatureHealth(mypoke) / getCreatureMaxHealth(mypoke)
doItemSetAttribute(pokeball.uid, "hp", pct)
doItemSetAttribute(pokeball.uid, "poke", theevo)
doItemSetAttribute(pokeball.uid, "description", "Contains a "..theevo..".")
doPlayerSendTextMessage(cid, 27, "Seu "..getPokeName(mypoke).." evoluiu para "..theevo.."!")
doSendMagicEffect(getThingPos(mypoke), 18)
doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo])
doSendMagicEffect(getThingPos(cid), 173)
local oldpos = getThingPos(mypoke)
local oldlod = getCreatureLookDir(mypoke)
local oldlvl = getPokemonLevel(mypoke)
doRemoveCreature(mypoke)
doSummonMonster(cid, theevo)
local pk = getCreatureSummons(cid)[1]
doTeleportThing(pk, oldpos, false)
doCreatureSetLookDir(pk, oldlod)
sendFinishEvolutionEffect(pk, true)
addEvent(sendFinishEvolutionEffect, 550, pk, true)
addEvent(sendFinishEvolutionEffect, 1050, pk)
doAddPokemonInOwnList(cid, theevo)
local status = getPokemonStatus(getCreatureName(pk))
local off = status.off
local def = status.def
local agi = status.agi
local spatk = status.spatk
local vit = status.vit
doItemSetAttribute(pokeball.uid, "offense", off)
doItemSetAttribute(pokeball.uid, "defense", def)
doItemSetAttribute(pokeball.uid, "speed", agi)
doItemSetAttribute(pokeball.uid, "specialattack", spatk)
doItemSetAttribute(pokeball.uid, "vitality", vit)
local happy = getItemAttribute(pokeball.uid, "happy")
doItemSetAttribute(pokeball.uid, "happy", happy + happyGainedOnEvolution)
if happy + happyGainedOnEvolution > 255 then
doItemSetAttribute(pokeball.uid, "happy", 255)
end
adjustStatus(mypoke, pokeball.uid, true, false)
doReturnPokemon(cid, getCreatureSummons(cid)[1], getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect)
if useKpdoDlls then
doUpdateMoves(cid)
end
end
function onSay(cid, words, param, channel)
local pokes_evolve = { --["Nome do poke"] = {level = level necessário para evoluir, to = "Nome da evolução"},
["Charmander"] = {level = 16, to = "Charmeleon"},
["Charmeleon"] = {level = 36, to = "Charizard"},
["Squirtle"] = {level = 16, to = "Wartortle"},
["Wartortle"] = {level = 36, to = "Blastoise"},
["Bulbasaur"] = {level = 16, to = "Ivysaur"},
["Ivysaur"] = {level = 36, to = "Venusaur"},
}
local t = { --["elemento"] = {words = "o que deverá ser dito pelo player (sem o !)"},
["grass"] = {words = "leaf"},
["fire"] = {words = "fire"},
["water"] = {words = "water"},
["bug"] = {words = "cocoon"},
["normal"] = {words = "heart"},
}
local evolvess = { --["o que deverá ser dito pelo player (dessa vez, com !)"] = {level = level necessário para evoluir, poke = "evolução"}, OBS: Essa tabela é própria para o Eeevee.
["!fire"] = {level = 20, poke = "Flareon"},
["!water"] = {level = 20, poke = "Vaporeon"},
["!thunder"] = {level = 20, poke = "Jolteon"},
["!darkness"] = {level = 20, poke = "Umbreon"},
["!enigma"] = {level = 20, poke = "Espeon"},
}
if #getCreatureSummons(cid) == 0 then
return doPlayerSendCancel(cid, "Você precisa de um pokémon para evoluir.")
end
if getPlayerStorageValue(cid, 412001) > os.time () then
return doPlayerSendCancel(cid, "Aguarde "..getPlayerStorageValue(cid, 412001) - os.time ().." segundo(s) para evoluir um pokémon novamente.")
end
local mypoke = getCreatureSummons(cid)[1]
if not pokes_evolve[getCreatureName(mypoke)] and getCreatureName(mypoke) ~= "Eevee" then
return doPlayerSendCancel(cid, "Esse pokémon não possui evolução.")
end
if isCreature(mypoke) then
elemento = pokes[getCreatureName(mypoke)].type
pokemon = pokes_evolve[getCreatureName(mypoke)]
end
local next_evo = pokemon.to
if mypoke == "Eevee" then --Só fiz uma special evo, faça as outras seguindo como base a do Eevee.
if not isCreature(mypoke) then return true end
evos = evolvess[words].poke
evos_lv = evolvess[words].level
if (words == ""..evolvess[words].."") then
if getPokemonLevel(mypoke) >= evos_lv then
evolving_pokemon(cid, mypoke, evos)
setPlayerStorageValue(cid, 412001, os.time () + 600)
else
return doPlayerSendCancel(cid, "Seu pokémon não possui o level necessário para evoluir!")
end
end
end
if (words == "!"..t[elemento].words.."") then
if getPokemonLevel(mypoke) >= pokemon.level then
evolving_pokemon(cid, mypoke, next_evo)
setPlayerStorageValue(cid, 412001, os.time () + 600)
else
return doPlayerSendCancel(cid, "Seu pokémon não possui o level necessário para evoluir!")
end
end
return true
end

Editado Novembro 20 por zipter98

otavio101O
21 de novembro de 2013 às 17:35

Não tem jeito dele continuar fora da pokeball não?

 

A deu erro no eevee:

 

[21/11/2013 17:34:39] [Error - TalkAction Interface]
[21/11/2013 17:34:39] data/talkactions/scripts/evolvetalk.lua:onSay
[21/11/2013 17:34:39] Description:
[21/11/2013 17:34:39] data/talkactions/scripts/evolvetalk.lua:118: attempt to index global 'pokemon' (a nil value)
[21/11/2013 17:34:39] stack traceback:
[21/11/2013 17:34:39] data/talkactions/scripts/evolvetalk.lua:118: in function

 

zipter98Z
21 de novembro de 2013 às 18:02

Ter jeito, tem sim. Mas com aquele bug que você mencionou, não acho muito recomendável. Vou só editar umas coisinhas no script aqui, e já edito.

Ah, se você quiser mesmo que o pokémon não retorne para a pokeball, avisa aqui, que eu retiro essa parte.

 

edit: Só do Eevee que está dando este bug?

 

function evolving_pokemon(cid, mypoke, theevo)

if not isCreature(cid) then return true end
if not pokes[theevo] or not pokes[theevo].offense then
doReturnPokemon(cid, mypoke, getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect, false, true)
return true
end
local pokeball = getPlayerSlotItem(cid, 8)
local description = "Contains a "..theevo.."."
local pct = getCreatureHealth(mypoke) / getCreatureMaxHealth(mypoke)
doItemSetAttribute(pokeball.uid, "hp", pct)
doItemSetAttribute(pokeball.uid, "poke", theevo)
doItemSetAttribute(pokeball.uid, "description", "Contains a "..theevo..".")
doPlayerSendTextMessage(cid, 27, "Seu "..getPokeName(mypoke).." evoluiu para "..theevo.."!")
doSendMagicEffect(getThingPos(mypoke), 18)
doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo])
doSendMagicEffect(getThingPos(cid), 173)
local oldpos = getThingPos(mypoke)
local oldlod = getCreatureLookDir(mypoke)
local oldlvl = getPokemonLevel(mypoke)
doRemoveCreature(mypoke)
doSummonMonster(cid, theevo)
local pk = getCreatureSummons(cid)[1]
doTeleportThing(pk, oldpos, false)
doCreatureSetLookDir(pk, oldlod)
sendFinishEvolutionEffect(pk, true)
addEvent(sendFinishEvolutionEffect, 550, pk, true)
addEvent(sendFinishEvolutionEffect, 1050, pk)
doAddPokemonInOwnList(cid, theevo)
local status = getPokemonStatus(getCreatureName(pk))
local off = status.off
local def = status.def
local agi = status.agi
local spatk = status.spatk
local vit = status.vit
doItemSetAttribute(pokeball.uid, "offense", off)
doItemSetAttribute(pokeball.uid, "defense", def)
doItemSetAttribute(pokeball.uid, "speed", agi)
doItemSetAttribute(pokeball.uid, "specialattack", spatk)
doItemSetAttribute(pokeball.uid, "vitality", vit)
local happy = getItemAttribute(pokeball.uid, "happy")
doItemSetAttribute(pokeball.uid, "happy", happy + happyGainedOnEvolution)
if happy + happyGainedOnEvolution > 255 then
doItemSetAttribute(pokeball.uid, "happy", 255)
end
adjustStatus(mypoke, pokeball.uid, true, false)
doReturnPokemon(cid, getCreatureSummons(cid)[1], getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect)
if useKpdoDlls then
doUpdateMoves(cid)
end
end
function onSay(cid, words, param, channel)
local pokes_evolve = { --["Nome do poke"] = {level = level necessário para evoluir, to = "Nome da evolução"},
["Charmander"] = {level = 16, to = "Charmeleon"},
["Charmeleon"] = {level = 36, to = "Charizard"},
["Squirtle"] = {level = 16, to = "Wartortle"},
["Wartortle"] = {level = 36, to = "Blastoise"},
["Bulbasaur"] = {level = 16, to = "Ivysaur"},
["Ivysaur"] = {level = 36, to = "Venusaur"},
}
local t = { --["elemento"] = {words = "o que deverá ser dito pelo player (sem o !)"},
["grass"] = {words = "leaf"},
["fire"] = {words = "fire"},
["water"] = {words = "water"},
["bug"] = {words = "cocoon"},
["normal"] = {words = "heart"},
}
local evolvess = { --["o que deverá ser dito pelo player (dessa vez, com !)"] = {level = level necessário para evoluir, poke = "evolução"}, OBS: Essa tabela é própria para o Eeevee.
["!fire"] = {level = 20, poke = "Flareon"},
["!water"] = {level = 20, poke = "Vaporeon"},
["!thunder"] = {level = 20, poke = "Jolteon"},
["!darkness"] = {level = 20, poke = "Umbreon"},
["!enigma"] = {level = 20, poke = "Espeon"},
}
if #getCreatureSummons(cid) < 1 then
return doPlayerSendCancel(cid, "Você precisa de um pokémon para evoluir.")
end
if getPlayerStorageValue(cid, 412001) > os.time () then
return doPlayerSendCancel(cid, "Aguarde "..getPlayerStorageValue(cid, 412001) - os.time ().." segundo(s) para evoluir um pokémon novamente.")
end
local mypoke = getCreatureSummons(cid)[1]
if not pokes_evolve[getCreatureName(mypoke)] and getCreatureName(mypoke) ~= "Eevee" then
return doPlayerSendCancel(cid, "Esse pokémon não possui evolução.")
end
if not isCreature(mypoke) then return true end
local elemento = pokes[getCreatureName(mypoke)].type
local pokemon = pokes_evolve[getCreatureName(mypoke)]
local next_evo = pokemon.to
if mypoke == "Eevee" then --Só fiz uma special evo, faça as outras seguindo como base a do Eevee.
local evos = evolvess[words].poke
local evos_lv = evolvess[words].level
if (words == ""..evolvess[words].."") then
if getPokemonLevel(mypoke) >= evos_lv then
evolving_pokemon(cid, mypoke, evos)
setPlayerStorageValue(cid, 412001, os.time () + 600)
else
return doPlayerSendCancel(cid, "Seu pokémon não possui o level necessário para evoluir!")
end
end
end
if (words == "!"..t[elemento].words.."") then
if getPokemonLevel(mypoke) >= pokemon.level then
evolving_pokemon(cid, mypoke, next_evo)
setPlayerStorageValue(cid, 412001, os.time () + 600)
else
return doPlayerSendCancel(cid, "Seu pokémon não possui o level necessário para evoluir!")
end
end
return true
end

Editado Novembro 21 por zipter98

otavio101O
21 de novembro de 2013 às 18:31

Sim só o eevee, o charmander e o resto tão ok, continua sem dar.

 

[21/11/2013 18:29:50] [Error - TalkAction Interface]
[21/11/2013 18:29:50] data/talkactions/scripts/evolvetalk.lua:onSay
[21/11/2013 18:29:50] Description:
[21/11/2013 18:29:50] data/talkactions/scripts/evolvetalk.lua:117: attempt to index local 'pokemon' (a nil value)
[21/11/2013 18:29:50] stack traceback:
[21/11/2013 18:29:50] data/talkactions/scripts/evolvetalk.lua:117: in function

 

GabrieltxuG
28 de novembro de 2013 às 00:17

Tópico movido para a seção de dúvidas e pedidos resolvidos.

4 anos depois...
StigalS
21 de abril de 2018 às 03:13
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.