Eu gostaria se possível de uma ajuda, para um OT de pokemon... Tentei, tentei e nao consegui fazer.
Um NPC com o mesmo sistema dos mestres de ginásio porem que ao invés de dar insignia dar storage, Ex: storage == 9991. Eu gostaria que soh depois que o player derrote o NPC X possa passar por um tile. O qual tem o seguinte script que a principio está funcionando como deveria.
local focus = 0
local max_distance = 8
local talk_start = 0
local conv = 0
local fighting = false
local challenger = 0
local afk_limit_time = 30 -- seconds
local afk_time = 0 -- don't change
local battle_turn = 1 -- don't change
local challenger_turn = 0 -- don't change
local pokemons = {
{name = "Geodude", optionalLevel = 50, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Rhyhorn", optionalLevel = 80, sex = SEX_MALE, nick = "", ball = "normal"}, --alterado v1.3
{name = "Graveler", optionalLevel = 80, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Onix", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Golem", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "normal"},
}
local function doSummonGymPokemon(npc)
local this = npc
if not isCreature(this) then return true end
if #getCreatureSummons(this) >= 1 or focus == 0 then return true end
local it = pokemons[battle_turn]
doSummonMonster(this, it.name)
local summon = getCreatureSummons(this)[1]
local balleffect = pokeballs["normal"].effect
if it.ball and pokeballs[it.ball] then
balleffect = pokeballs[it.ball].effect
end
doSendMagicEffect(getThingPos(summon), balleffect)
setPlayerStorageValue(summon, 10000, balleffect)
setPlayerStorageValue(summon, 10001, gobackmsgs[math.random(#gobackmsgs)].back:gsub("doka", it.nick ~= "" and it.nick or it.name))
setPlayerStorageValue(summon, 1007, it.nick ~= "" and it.nick or it.name)
doSetMonsterGym(summon, focus)
addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name --alterado v1.3
doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1)
fighting = true
battle_turn = battle_turn + 1
end
local function doWinDuel(cid, npc)
if not isCreature(cid) then return true end
local this = npc
local a = gymbadges[getCreatureName(this)] + 8
doCreatureSay(npc, "Por vencer esse duelo pegue a "..getItemNameById(a - 8)..".", 1)
local b = getPlayerItemById(cid, true, a)
if b.uid > 0 then doTransformItem(b.uid, b.itemid - 8) end
end
function onCreatureSay(cid, type, msg)
local msg = string.lower(msg)
if focus == cid then
talk_start = os.clock()
end
if msgcontains(msg, 'hi') and focus == 0 and getDistanceToCreature(cid) <= 4 then
focus = cid
talk_start = os.clock()
conv = 1
selfSay("Oi sou Brock e sou lider do ginásio Pewter's. Minha especialidade? Pokemons do tipo pedra, os mais poderosos de todos os tipos.")
return true
end
if isDuelMsg(msg) and conv == 1 and focus == cid then
--if getPlayerItemCount(cid, gymbadges[getCreatureName(getThis())]) >= 1 then
-- selfSay("You have already won my Boulder Badge, maybe some other day we can fight.")
-- focus = 0
--return true
--end
if not hasPokemon(cid) then
selfSay("Você viu a enfermeira joy por ai? Elá é uma gata.")
return true
end
selfSay("Na nossa batalha serão permitidos até "..#pokemons.." pokemons, está pronto??")
conv = 2
return true
end
if isConfirmMsg(msg) and conv == 2 and focus == cid then
challenger = focus
setPlayerStorageValue(cid, 990, 1)
selfSay("Sim vamos lutar!")
talk_start = os.clock()
addEvent(doSummonGymPokemon, 850, getThis())
conv = 3
return true
end
if isNegMsg(msg) and conv == 2 and focus == cid then
focus = 0
selfSay("Recusou? hmm... acho que a policia Jenny está afim de mim.")
return true
end
if msgcontains(msg, 'bye') and focus == cid then
selfSay('Vá e dê seu melhor!')
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
local afk_warning = false
local change = false
function onThink()
if focus == 0 then
selfTurn(2)
fighting = false
challenger = 0
challenger_turn = 0
battle_turn = 1
afk_time = 0
afk_warning = false
if #getCreatureSummons(getThis()) >= 1 then
setPlayerStorageValue(getCreatureSummons(getThis())[1], 1006, 0)
doCreatureAddHealth(getCreatureSummons(getThis())[1], -getCreatureMaxHealth(getCreatureSummons(getThis())[1]))
end
return true
else
if not isCreature(focus) then
focus = 0
return true
end
if fighting then
talk_start = os.clock()
if not isCreature(getCreatureTarget(getThis())) then
if #getCreatureSummons(challenger) >= 1 then
if getCreatureOutfit(getCreatureSummons(challenger)[1]).lookType ~= 2 then --alterado v1.6
selfAttackCreature(getCreatureSummons(challenger)[1])
challenger_turn = challenger_turn + 1
afk_time = 0
end
else
afk_time = afk_time + 0.5
if change then
change = false
challenger_turn = challenger_turn + 1
end
end
end
if afk_time > afk_limit_time then
setPlayerStorageValue(focus, 990, -1)
focus = 0
selfSay("Está demorando muito... tenho um encontro com a Enfermeira Joy hoje!")
return true
end
if not afk_warning and afk_time > afk_limit_time / 2 then
selfSay("Sem pokemons?!")
afk_warning = true
end
if #getCreatureSummons(getThis()) == 0 then
if battle_turn > #pokemons then
addEvent(doWinDuel, 1000, focus, getThis())
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
addEvent(doSummonGymPokemon, 1000, getThis())
end
if not hasPokemon(challenger) or challenger_turn >= 7 or challenger_turn > #pokemons then
selfSay("Você perdeu, acho que vou até o centro pokemon com você a enfermeira Joy está por lá.")
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
local npcpos = getThingPos(getThis())
local focpos = getThingPos(focus)
if npcpos.z ~= focpos.z then
setPlayerStorageValue(focus, 990, -1)
focus = 0
selfSay("Até mais.")
return true
end
if (os.clock() - talk_start) > 30 then
selfSay("Treine mais e lembre-se, os Pokemons de pedra são os melhores!")
setPlayerStorageValue(focus, 990, -1)
focus = 0
end
if getDistanceToCreature(focus) > max_distance then
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
local dir = doRedirectDirection(getDirectionTo(npcpos, focpos))
selfTurn(dir)
end
return true
end
Pergunta
felipenchagas 2
Oi boa noite!
Eu gostaria se possível de uma ajuda, para um OT de pokemon... Tentei, tentei e nao consegui fazer.
Um NPC com o mesmo sistema dos mestres de ginásio porem que ao invés de dar insignia dar storage, Ex: storage == 9991. Eu gostaria que soh depois que o player derrote o NPC X possa passar por um tile. O qual tem o seguinte script que a principio está funcionando como deveria.
GYM: BROCK.LUA (NPC)
local focus = 0 local max_distance = 8 local talk_start = 0 local conv = 0 local fighting = false local challenger = 0 local afk_limit_time = 30 -- seconds local afk_time = 0 -- don't change local battle_turn = 1 -- don't change local challenger_turn = 0 -- don't change local pokemons = { {name = "Geodude", optionalLevel = 50, sex = SEX_MALE, nick = "", ball = "normal"}, {name = "Rhyhorn", optionalLevel = 80, sex = SEX_MALE, nick = "", ball = "normal"}, --alterado v1.3 {name = "Graveler", optionalLevel = 80, sex = SEX_MALE, nick = "", ball = "normal"}, {name = "Onix", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "normal"}, {name = "Golem", optionalLevel = 100, sex = SEX_MALE, nick = "", ball = "normal"}, } local function doSummonGymPokemon(npc) local this = npc if not isCreature(this) then return true end if #getCreatureSummons(this) >= 1 or focus == 0 then return true end local it = pokemons[battle_turn] doSummonMonster(this, it.name) local summon = getCreatureSummons(this)[1] local balleffect = pokeballs["normal"].effect if it.ball and pokeballs[it.ball] then balleffect = pokeballs[it.ball].effect end doSendMagicEffect(getThingPos(summon), balleffect) setPlayerStorageValue(summon, 10000, balleffect) setPlayerStorageValue(summon, 10001, gobackmsgs[math.random(#gobackmsgs)].back:gsub("doka", it.nick ~= "" and it.nick or it.name)) setPlayerStorageValue(summon, 1007, it.nick ~= "" and it.nick or it.name) doSetMonsterGym(summon, focus) addEvent(adjustWildPoke, 15, summon, it.optionalLevel) local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name --alterado v1.3 doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1) fighting = true battle_turn = battle_turn + 1 end local function doWinDuel(cid, npc) if not isCreature(cid) then return true end local this = npc local a = gymbadges[getCreatureName(this)] + 8 doCreatureSay(npc, "Por vencer esse duelo pegue a "..getItemNameById(a - 8)..".", 1) local b = getPlayerItemById(cid, true, a) if b.uid > 0 then doTransformItem(b.uid, b.itemid - 8) end end function onCreatureSay(cid, type, msg) local msg = string.lower(msg) if focus == cid then talk_start = os.clock() end if msgcontains(msg, 'hi') and focus == 0 and getDistanceToCreature(cid) <= 4 then focus = cid talk_start = os.clock() conv = 1 selfSay("Oi sou Brock e sou lider do ginásio Pewter's. Minha especialidade? Pokemons do tipo pedra, os mais poderosos de todos os tipos.") return true end if isDuelMsg(msg) and conv == 1 and focus == cid then --if getPlayerItemCount(cid, gymbadges[getCreatureName(getThis())]) >= 1 then -- selfSay("You have already won my Boulder Badge, maybe some other day we can fight.") -- focus = 0 --return true --end if not hasPokemon(cid) then selfSay("Você viu a enfermeira joy por ai? Elá é uma gata.") return true end selfSay("Na nossa batalha serão permitidos até "..#pokemons.." pokemons, está pronto??") conv = 2 return true end if isConfirmMsg(msg) and conv == 2 and focus == cid then challenger = focus setPlayerStorageValue(cid, 990, 1) selfSay("Sim vamos lutar!") talk_start = os.clock() addEvent(doSummonGymPokemon, 850, getThis()) conv = 3 return true end if isNegMsg(msg) and conv == 2 and focus == cid then focus = 0 selfSay("Recusou? hmm... acho que a policia Jenny está afim de mim.") return true end if msgcontains(msg, 'bye') and focus == cid then selfSay('Vá e dê seu melhor!') setPlayerStorageValue(focus, 990, -1) focus = 0 return true end end local afk_warning = false local change = false function onThink() if focus == 0 then selfTurn(2) fighting = false challenger = 0 challenger_turn = 0 battle_turn = 1 afk_time = 0 afk_warning = false if #getCreatureSummons(getThis()) >= 1 then setPlayerStorageValue(getCreatureSummons(getThis())[1], 1006, 0) doCreatureAddHealth(getCreatureSummons(getThis())[1], -getCreatureMaxHealth(getCreatureSummons(getThis())[1])) end return true else if not isCreature(focus) then focus = 0 return true end if fighting then talk_start = os.clock() if not isCreature(getCreatureTarget(getThis())) then if #getCreatureSummons(challenger) >= 1 then if getCreatureOutfit(getCreatureSummons(challenger)[1]).lookType ~= 2 then --alterado v1.6 selfAttackCreature(getCreatureSummons(challenger)[1]) challenger_turn = challenger_turn + 1 afk_time = 0 end else afk_time = afk_time + 0.5 if change then change = false challenger_turn = challenger_turn + 1 end end end if afk_time > afk_limit_time then setPlayerStorageValue(focus, 990, -1) focus = 0 selfSay("Está demorando muito... tenho um encontro com a Enfermeira Joy hoje!") return true end if not afk_warning and afk_time > afk_limit_time / 2 then selfSay("Sem pokemons?!") afk_warning = true end if #getCreatureSummons(getThis()) == 0 then if battle_turn > #pokemons then addEvent(doWinDuel, 1000, focus, getThis()) setPlayerStorageValue(focus, 990, -1) focus = 0 return true end addEvent(doSummonGymPokemon, 1000, getThis()) end if not hasPokemon(challenger) or challenger_turn >= 7 or challenger_turn > #pokemons then selfSay("Você perdeu, acho que vou até o centro pokemon com você a enfermeira Joy está por lá.") setPlayerStorageValue(focus, 990, -1) focus = 0 return true end end local npcpos = getThingPos(getThis()) local focpos = getThingPos(focus) if npcpos.z ~= focpos.z then setPlayerStorageValue(focus, 990, -1) focus = 0 selfSay("Até mais.") return true end if (os.clock() - talk_start) > 30 then selfSay("Treine mais e lembre-se, os Pokemons de pedra são os melhores!") setPlayerStorageValue(focus, 990, -1) focus = 0 end if getDistanceToCreature(focus) > max_distance then setPlayerStorageValue(focus, 990, -1) focus = 0 return true end local dir = doRedirectDirection(getDirectionTo(npcpos, focpos)) selfTurn(dir) end return true endGYM.LUA (LIB)
gymbadges = { ["Brock"] = 12252, ["Misty"] = 12253, ["Surge"] = 12254, ["Erika"] = 12255, ["Sabrina"] = 12256, ["Koga"] = 12257, ["Blaine"] = 12258, ["Kira"] = 12259, ["Zeper"] = setPlayerStorageValue(cid,9991,1)} --alterado v1.5Editado por felipenchagasLink para o comentário
https://xtibia.com/forum/topic/230757-resolvido-mestre-de-ginasio-que-da-storage-npc/Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados