Ir para conteúdo
  • Cadastre-se

Posts Recomendados

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 masterpos = {}
local time_to_fight_again = 86400 -- seconds, not ms (so 30 * 60 means 30 minutes)
 
local can_walk = true -- true to make this npc walks randomly
local max_distance = 5 -- maximum distance this npc can get far (sqms)
local walk_delay = 5 -- every seconds make this npc walk
 
local cooldown_table = {}
 
local min_pokemons_to_battle = 1-- change to whatever you want
local number_of_pokemons = 0 -- don't change
 
local pokemons = {
{name = "Caterpie", level = 10, extralevel = 5, sex = SEX_MALE, nick = "Caterpie", ball = "normal"},
{name = "Metapod", level = 15, extralevel = 5, sex = SEX_FEMALE, nick = "Pod", ball = "normal"},
{name = "Butterfree", level = 20, extralevel = 5, sex = SEX_MALE, nick = "Butter", ball = "ultra"},
}
 
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)
local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name
setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)
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
doPlayerAddItem(cid, 12213, 1)
doPlayerAddItem(cid, 26781, 10)
setPlayerStorageValue(cid, 1643, 1)
doCreatureSay(this, "Oooh nao, como assim voce me venceu? Ja que eu perdi leve isso para voce.", 1)
cooldown_table[getCreatureName(cid)] = os.clock() + time_to_fight_again
return true
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
 
if cooldown_table[getCreatureName(cid)] and cooldown_table[getCreatureName(cid)] - os.clock() > 0 then
selfSay("Eae "..getCreatureName(cid)..", Eu realmente gostei da nossa ultima batalha!")
conv = 10
else
selfSay("Eae "..getCreatureName(cid)..", oque deseja?")
conv = 1
end
 
focus = cid
talk_start = os.clock()
return true
end
 
if (isDuelMsg(msg) or isConfirmMsg(msg)) and (conv == 1 or conv == 10) and focus == cid then
 
if conv == 10 then
elseif getPlayerStorageValue(cid, 1643) >= 1 then
selfSay("Nao podemos mais batalhar ate mais!")
focus = 0
return true
end
 
if not hasPokemon(cid) then
selfSay("Voce precisa de pokemon's para a batalha!")
return true
end
 
selfSay("Okay, me diga com quantos pokemons voce quer usar.")
conv = 2
 
return true
end
 
if conv == 2 and focus == cid then
 
if not tonumber(msg) then
selfSay("Diga-me o numero de pokemons que nos vamos batalhar.")
return true
elseif tonumber(msg) < #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
elseif tonumber(msg) > #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
else
number_of_pokemons = tonumber(msg)
selfSay("Okay, o primeiro a derrotar "..number_of_pokemons.." Pokemons sera o vencedor, vamos comecar!")
challenger = focus
setPlayerStorageValue(cid, 990, 1)
addEvent(doSummonGymPokemon, 850, getThis())
conv = 3
return true
end
 
 
return true
end
 
if isNegMsg(msg) and conv == 1 and focus == cid then
 
focus = 0
selfSay("E melhor para voce recusar uma batalha contra mim!")
 
return true
end
 
if msgcontains(msg, 'bye') and focus == cid then
selfSay('Tchau e ate logo!')
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
 
local afk_warning = false
local change = false
local walkdelay = 0
 
function onThink()
 
if not masterpos.x then
masterpos = getThingPos(getThis())
end
 
if focus == 0 then
selfTurn(2)
fighting = false
challenger = 0
change = false
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
 
walkdelay = walkdelay - 0.5
 
if walkdelay <= 0 then
walkdelay = walk_delay
local pos = getThingPos(getThis())
local npos = {}
for a = 0, 3 do
if getDistanceBetween(getPosByDir(pos, a), masterpos) <= max_distance and canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
table.insert(npos, getPosByDir(pos, a))
end
end
 
if npos and #npos > 0 then
doTeleportThing(getThis(), npos[math.random(#npos)])
end
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
selfAttackCreature(getCreatureSummons(challenger)[1])
change = true
afk_time = 0
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("Eu ja esperei muito tempo, volte quando estiver pronto!")
return true
end
 
if not afk_warning and afk_time > afk_limit_time / 2 then
selfSay("Onde esta seu pokemon? Vamos lutar!")
afk_warning = true
end
 
if #getCreatureSummons(getThis()) == 0 then
if battle_turn > number_of_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 > 6 or challenger_turn >= number_of_pokemons then
selfSay("Hahahahahahahaha eu venci! Quem sabe um dia voce consiga me derrotar.")
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("Ate logo.")
return true
end
 
if (os.clock() - talk_start) > 30 then
selfSay("Boa sorte em sua jornada!")
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

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

Mano a primeira função do storage ele lê, pois o npc diz "eu realmente gostei da nossa ultima batalha".

Mas na segunda função não lê, assim podendo batalhar quantas vezes quiser.

 

Obs: Não da nenhum erro no exe.

Link para o post
Compartilhar em outros sites

Tenta assim então

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 masterpos = {}
local time_to_fight_again = 86400 -- seconds, not ms (so 30 * 60 means 30 minutes)
 
local can_walk = true -- true to make this npc walks randomly
local max_distance = 5 -- maximum distance this npc can get far (sqms)
local walk_delay = 5 -- every seconds make this npc walk
 
local cooldown_table = {}
 
local min_pokemons_to_battle = 1-- change to whatever you want
local number_of_pokemons = 0 -- don't change
 
local pokemons = {
{name = "Caterpie", level = 10, extralevel = 5, sex = SEX_MALE, nick = "Caterpie", ball = "normal"},
{name = "Metapod", level = 15, extralevel = 5, sex = SEX_FEMALE, nick = "Pod", ball = "normal"},
{name = "Butterfree", level = 20, extralevel = 5, sex = SEX_MALE, nick = "Butter", ball = "ultra"},
}
 
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)
local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name
setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)
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
doPlayerAddItem(cid, 12213, 1)
doPlayerAddItem(cid, 26781, 10)
setPlayerStorageValue(cid, 1643, 1)
doCreatureSay(this, "Oooh nao, como assim voce me venceu? Ja que eu perdi leve isso para voce.", 1)
cooldown_table[getCreatureName(cid)] = os.clock() + time_to_fight_again
return true
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
 
if cooldown_table[getCreatureName(cid)] and cooldown_table[getCreatureName(cid)] - os.clock() > 0 then
elseif getPlayerStorageValue(cid, 1643) >= 1 then
selfSay("Eae "..getCreatureName(cid)..", Eu realmente gostei da nossa ultima batalha!")
conv = 10
else
selfSay("Eae "..getCreatureName(cid)..", oque deseja?")
conv = 1
end
 
focus = cid
talk_start = os.clock()
return true
end
 
if (isDuelMsg(msg) or isConfirmMsg(msg)) and (conv == 1 or conv == 10) and focus == cid then
 
if conv == 10 then
elseif getPlayerStorageValue(cid, 1643) >= 1 then
selfSay("Nao podemos mais batalhar ate mais!")
focus = 0
return true
end
 
if not hasPokemon(cid) then
selfSay("Voce precisa de pokemon's para a batalha!")
return true
end
 
selfSay("Okay, me diga com quantos pokemons voce quer usar.")
conv = 2
 
return true
end
 
if conv == 2 and focus == cid then
 
if not tonumber(msg) then
selfSay("Diga-me o numero de pokemons que nos vamos batalhar.")
return true
elseif tonumber(msg) < #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
elseif tonumber(msg) > #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
else
number_of_pokemons = tonumber(msg)
selfSay("Okay, o primeiro a derrotar "..number_of_pokemons.." Pokemons sera o vencedor, vamos comecar!")
challenger = focus
setPlayerStorageValue(cid, 990, 1)
addEvent(doSummonGymPokemon, 850, getThis())
conv = 3
return true
end
 
 
return true
end
 
if isNegMsg(msg) and conv == 1 and focus == cid then
 
focus = 0
selfSay("E melhor para voce recusar uma batalha contra mim!")
 
return true
end
 
if msgcontains(msg, 'bye') and focus == cid then
selfSay('Tchau e ate logo!')
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
 
local afk_warning = false
local change = false
local walkdelay = 0
 
function onThink()
 
if not masterpos.x then
masterpos = getThingPos(getThis())
end
 
if focus == 0 then
selfTurn(2)
fighting = false
challenger = 0
change = false
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
 
walkdelay = walkdelay - 0.5
 
if walkdelay <= 0 then
walkdelay = walk_delay
local pos = getThingPos(getThis())
local npos = {}
for a = 0, 3 do
if getDistanceBetween(getPosByDir(pos, a), masterpos) <= max_distance and canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
table.insert(npos, getPosByDir(pos, a))
end
end
 
if npos and #npos > 0 then
doTeleportThing(getThis(), npos[math.random(#npos)])
end
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
selfAttackCreature(getCreatureSummons(challenger)[1])
change = true
afk_time = 0
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("Eu ja esperei muito tempo, volte quando estiver pronto!")
return true
end
 
if not afk_warning and afk_time > afk_limit_time / 2 then
selfSay("Onde esta seu pokemon? Vamos lutar!")
afk_warning = true
end
 
if #getCreatureSummons(getThis()) == 0 then
if battle_turn > number_of_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 > 6 or challenger_turn >= number_of_pokemons then
selfSay("Hahahahahahahaha eu venci! Quem sabe um dia voce consiga me derrotar.")
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("Ate logo.")
return true
end
 
if (os.clock() - talk_start) > 30 then
selfSay("Boa sorte em sua jornada!")
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

reinicie o server e tente  -.-

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

No primeiro momento funciona, após ganha-lo, ele não me responde mais, porém, se eu relogar o servidor poderei batalhar com ele novamente, sendo assim a storage não está salvando T^T

Link para o post
Compartilhar em outros sites

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 masterpos = {}
local time_to_fight_again = 86400 -- seconds, not ms (so 30 * 60 means 30 minutes)
 
local can_walk = true -- true to make this npc walks randomly
local max_distance = 5 -- maximum distance this npc can get far (sqms)
local walk_delay = 5 -- every seconds make this npc walk
 
local cooldown_table = {}
 
local min_pokemons_to_battle = 1-- change to whatever you want
local number_of_pokemons = 0 -- don't change
 
local pokemons = {
{name = "Caterpie", level = 10, extralevel = 5, sex = SEX_MALE, nick = "Caterpie", ball = "normal"},
{name = "Metapod", level = 15, extralevel = 5, sex = SEX_FEMALE, nick = "Pod", ball = "normal"},
{name = "Butterfree", level = 20, extralevel = 5, sex = SEX_MALE, nick = "Butter", ball = "ultra"},
}
 
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)
local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name
setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)
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
doPlayerAddItem(cid, 12213, 1)
doPlayerAddItem(cid, 26781, 10)
setGlobalStorageValue(1643,1)
doCreatureSay(this, "Oooh nao, como assim voce me venceu? Ja que eu perdi leve isso para voce.", 1)
cooldown_table[getCreatureName(cid)] = os.clock() + time_to_fight_again
return true
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
 
if cooldown_table[getCreatureName(cid)] and cooldown_table[getCreatureName(cid)] - os.clock() > 0 then
elseif getPlayerStorageValue(cid, 1643) >= 1 then
selfSay("Eae "..getCreatureName(cid)..", Eu realmente gostei da nossa ultima batalha!")
conv = 10
else
selfSay("Eae "..getCreatureName(cid)..", oque deseja?")
conv = 1
end
 
focus = cid
talk_start = os.clock()
return true
end
 
if (isDuelMsg(msg) or isConfirmMsg(msg)) and (conv == 1 or conv == 10) and focus == cid then
 
if conv == 10 then
elseif getPlayerStorageValue(cid, 1643) >= 1 then
selfSay("Nao podemos mais batalhar ate mais!")
focus = 0
return true
end
 
if not hasPokemon(cid) then
selfSay("Voce precisa de pokemon's para a batalha!")
return true
end
 
selfSay("Okay, me diga com quantos pokemons voce quer usar.")
conv = 2
 
return true
end
 
if conv == 2 and focus == cid then
 
if not tonumber(msg) then
selfSay("Diga-me o numero de pokemons que nos vamos batalhar.")
return true
elseif tonumber(msg) < #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
elseif tonumber(msg) > #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
else
number_of_pokemons = tonumber(msg)
selfSay("Okay, o primeiro a derrotar "..number_of_pokemons.." Pokemons sera o vencedor, vamos comecar!")
challenger = focus
setPlayerStorageValue(cid, 990, 1)
addEvent(doSummonGymPokemon, 850, getThis())
conv = 3
return true
end
 
 
return true
end
 
if isNegMsg(msg) and conv == 1 and focus == cid then
 
focus = 0
selfSay("E melhor para voce recusar uma batalha contra mim!")
 
return true
end
 
if msgcontains(msg, 'bye') and focus == cid then
selfSay('Tchau e ate logo!')
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
 
local afk_warning = false
local change = false
local walkdelay = 0
 
function onThink()
 
if not masterpos.x then
masterpos = getThingPos(getThis())
end
 
if focus == 0 then
selfTurn(2)
fighting = false
challenger = 0
change = false
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
 
walkdelay = walkdelay - 0.5
 
if walkdelay <= 0 then
walkdelay = walk_delay
local pos = getThingPos(getThis())
local npos = {}
for a = 0, 3 do
if getDistanceBetween(getPosByDir(pos, a), masterpos) <= max_distance and canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
table.insert(npos, getPosByDir(pos, a))
end
end
 
if npos and #npos > 0 then
doTeleportThing(getThis(), npos[math.random(#npos)])
end
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
selfAttackCreature(getCreatureSummons(challenger)[1])
change = true
afk_time = 0
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("Eu ja esperei muito tempo, volte quando estiver pronto!")
return true
end
 
if not afk_warning and afk_time > afk_limit_time / 2 then
selfSay("Onde esta seu pokemon? Vamos lutar!")
afk_warning = true
end
 
if #getCreatureSummons(getThis()) == 0 then
if battle_turn > number_of_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 > 6 or challenger_turn >= number_of_pokemons then
selfSay("Hahahahahahahaha eu venci! Quem sabe um dia voce consiga me derrotar.")
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("Ate logo.")
return true
end
 
if (os.clock() - talk_start) > 30 then
selfSay("Boa sorte em sua jornada!")
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

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

'Agora vai', pelo menos tem que ir  :cry:

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 masterpos = {}
local time_to_fight_again = 86400 -- seconds, not ms (so 30 * 60 means 30 minutes)
 
local can_walk = true -- true to make this npc walks randomly
local max_distance = 5 -- maximum distance this npc can get far (sqms)
local walk_delay = 5 -- every seconds make this npc walk
 
local cooldown_table = {}
 
local min_pokemons_to_battle = 1-- change to whatever you want
local number_of_pokemons = 0 -- don't change
 
local pokemons = {
{name = "Caterpie", level = 10, extralevel = 5, sex = SEX_MALE, nick = "Caterpie", ball = "normal"},
{name = "Metapod", level = 15, extralevel = 5, sex = SEX_FEMALE, nick = "Pod", ball = "normal"},
{name = "Butterfree", level = 20, extralevel = 5, sex = SEX_MALE, nick = "Butter", ball = "ultra"},
}
 
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)
local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name
setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)
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
doPlayerAddItem(cid, 12213, 1)
doPlayerAddItem(cid, 26781, 10)
doCreatureSay(this, "Oooh nao, como assim voce me venceu? Ja que eu perdi leve isso para voce.", 1)
cooldown_table[getCreatureName(cid)] = os.clock() + time_to_fight_again
setGlobalStorageValue(1643,1)
return true
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
 
if cooldown_table[getCreatureName(cid)] and cooldown_table[getCreatureName(cid)] - os.clock() > 0 then
elseif getGlobalStorageValue(cid, 1643) >= 1 then
selfSay("Eae "..getCreatureName(cid)..", Eu realmente gostei da nossa ultima batalha!")
conv = 10
else
selfSay("Eae "..getCreatureName(cid)..", oque deseja?")
conv = 1
end
 
focus = cid
talk_start = os.clock()
return true
end
 
if (isDuelMsg(msg) or isConfirmMsg(msg)) and (conv == 1 or conv == 10) and focus == cid then
 
if conv == 10 then
elseif getGlobalStorageValue(cid, 1643) >= 1 then
selfSay("Nao podemos mais batalhar ate mais!")
focus = 0
return true
end
 
if not hasPokemon(cid) then
selfSay("Voce precisa de pokemon's para a batalha!")
return true
end
 
selfSay("Okay, me diga com quantos pokemons voce quer usar.")
conv = 2
 
return true
end
 
if conv == 2 and focus == cid then
 
if not tonumber(msg) then
selfSay("Diga-me o numero de pokemons que nos vamos batalhar.")
return true
elseif tonumber(msg) < #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
elseif tonumber(msg) > #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
else
number_of_pokemons = tonumber(msg)
selfSay("Okay, o primeiro a derrotar "..number_of_pokemons.." Pokemons sera o vencedor, vamos comecar!")
challenger = focus
setPlayerStorageValue(cid, 990, 1)
addEvent(doSummonGymPokemon, 850, getThis())
conv = 3
return true
end
 
 
return true
end
 
if isNegMsg(msg) and conv == 1 and focus == cid then
 
focus = 0
selfSay("E melhor para voce recusar uma batalha contra mim!")
 
return true
end
 
if msgcontains(msg, 'bye') and focus == cid then
selfSay('Tchau e ate logo!')
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
 
local afk_warning = false
local change = false
local walkdelay = 0
 
function onThink()
 
if not masterpos.x then
masterpos = getThingPos(getThis())
end
 
if focus == 0 then
selfTurn(2)
fighting = false
challenger = 0
change = false
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
 
walkdelay = walkdelay - 0.5
 
if walkdelay <= 0 then
walkdelay = walk_delay
local pos = getThingPos(getThis())
local npos = {}
for a = 0, 3 do
if getDistanceBetween(getPosByDir(pos, a), masterpos) <= max_distance and canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
table.insert(npos, getPosByDir(pos, a))
end
end
 
if npos and #npos > 0 then
doTeleportThing(getThis(), npos[math.random(#npos)])
end
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
selfAttackCreature(getCreatureSummons(challenger)[1])
change = true
afk_time = 0
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("Eu ja esperei muito tempo, volte quando estiver pronto!")
return true
end
 
if not afk_warning and afk_time > afk_limit_time / 2 then
selfSay("Onde esta seu pokemon? Vamos lutar!")
afk_warning = true
end
 
if #getCreatureSummons(getThis()) == 0 then
if battle_turn > number_of_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 > 6 or challenger_turn >= number_of_pokemons then
selfSay("Hahahahahahahaha eu venci! Quem sabe um dia voce consiga me derrotar.")
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("Ate logo.")
return true
end
 
if (os.clock() - talk_start) > 30 then
selfSay("Boa sorte em sua jornada!")
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

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

Então não sei não mano, o jeito é esperar alguém mais experiente que eu

para que essa pessoa possa terminar de te ajudar  :(.

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

Consegui fazer uma adaptação com base em outro script, e está funcionando 100%, para quem quiser ai está o npc com storage.

 

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 masterpos = {}
local time_to_fight_again = 15 -- seconds, not ms (so 30 * 60 means 30 minutes)
local can_walk = true -- true to make this npc walks randomly
local max_distance = 5 -- maximum distance this npc can get far (sqms)
local walk_delay = 7 -- every seconds make this npc walk
local cooldown_table = {}
local min_pokemons_to_battle = 1-- change to whatever you want
local number_of_pokemons = 0 -- don't change
local prizes = {
[6] = {{itemid = 2393, count = 30}, {itemid = 2392, count = 20}}}
local pokemons = {
{name = "Geodude", level = 10, extralevel = 5, sex = SEX_MALE, nick = "Crusher", ball = "normal"},
{name = "Geodude", level = 10, extralevel = 5, sex = SEX_FEMALE, nick = "Dude", ball = "normal"},
{name = "Geodude", level = 10, extralevel = 5, sex = SEX_FEMALE, nick = "Dude", ball = "normal"},
{name = "Geodude", level = 10, extralevel = 5, sex = SEX_FEMALE, nick = "Dude", ball = "normal"},
{name = "Geodude", level = 10, extralevel = 5, sex = SEX_FEMALE, nick = "Dude", ball = "normal"},
{name = "Geodude", level = 10, extralevel = 5, sex = SEX_FEMALE, nick = "Dude", 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)
local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name
setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)
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 x = prizes[number_of_pokemons]
for n = 1, #x do
doPlayerAddItem(cid, x[n].itemid, x[n].count)
end
doCreatureSay(npc, "Entao e isso... Voce venceu, foi uma grande batalha, parabens ! Leve isto contigo", 1)
setPlayerStorageValue(cid, 918271, 1)
cooldown_table[getCreatureName(cid)] = os.clock() + time_to_fight_again
return true
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
if cooldown_table[getCreatureName(cid)] and cooldown_table[getCreatureName(cid)] - os.clock() > 0 then
selfSay("Ola "..getCreatureName(cid)..", Eu realmente gostei da nossa batalha!")
conv = 10
else
selfSay("Ola "..getCreatureName(cid)..", voce esta realmente pronto para esta batalha?")
conv = 1
end
focus = cid
talk_start = os.clock()
return true
end
if (isDuelMsg(msg) or isConfirmMsg(msg)) and (conv == 1 or conv == 10) and focus == cid then
if conv == 10 then
selfSay("Nos acabamos de batalhar!")
focus = 0
return true
end
if not hasPokemon(cid) then
selfSay("Voce precisa de Pokemons para batalhar!")
return true
end
if getPlayerStorageValue(cid, 918271) > -1 then
selfSay("Voce ja possui minha insgnia, va ao proximo ginasio.")
focus = 0
return true
end
selfSay("Okay vamos fazer uma batalha 6 vs 6.")
conv = 2
return true
end
if conv == 2 and focus == cid then

if not tonumber(msg) then
selfSay("Diga-me o numero de pokemons que nos vamos batalhar.")
return true
elseif tonumber(msg) < #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
elseif tonumber(msg) > #pokemons then
selfSay("So podemos batalhar com "..#pokemons.." pokemons!")
return true
else
number_of_pokemons = tonumber(msg)
selfSay("Okay, o primeiro a derrotar "..number_of_pokemons.." Pokemons sera o vencedor, vamos comecar!")
challenger = focus
setPlayerStorageValue(cid, 990, 1)
addEvent(doSummonGymPokemon, 850, getThis())
conv = 3
return true
end
return true
end
if isNegMsg(msg) and conv == 1 and focus == cid then
focus = 0
selfSay("Voce esta realmente preparado?")
return true
end
if msgcontains(msg, 'bye') and focus == cid then
selfSay('Adeus, voce sera um grande treinador!')
setPlayerStorageValue(focus, 990, -1)
focus = 0
return true
end
end
local afk_warning = false
local change = false
local walkdelay = 0
function onThink()
if not masterpos.x then
masterpos = getThingPos(getThis())
end
if focus == 0 then
selfTurn(2)
fighting = false
challenger = 0
change = false
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
walkdelay = walkdelay - 0.5
if walkdelay <= 0 then
walkdelay = walk_delay
local pos = getThingPos(getThis())
local npos = {}
for a = 0, 3 do
if getDistanceBetween(getPosByDir(pos, a), masterpos) <= max_distance and canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
table.insert(npos, getPosByDir(pos, a))
end
end
if npos and #npos > 0 then
doTeleportThing(getThis(), npos[math.random(#npos)])
end
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 v2.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("Eu ja esperei muito, tenho que lutar contra outros treinadores, volte quando estiver pronto!")
return true
end
if not afk_warning and afk_time > afk_limit_time / 2 then
selfSay("Cade seus Pokemons? Vamos logo!")
afk_warning = true
end
if #getCreatureSummons(getThis()) == 0 then
if battle_turn > number_of_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 > 6 or challenger_turn >= number_of_pokemons then
selfSay("Hahahaha e assim que voce quer me vencer? Va treinar mais !.")
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("Adeus.")
return true
end
if (os.clock() - talk_start) > 30 then
selfSay("Ate logo, Forca e Honrra!")
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

 

Lembrando que na tag de prêmio você deve por a quantia de pokémons que o npc possui, por exemplo :

 

Se o npc possuir 6 Pokémons a tag deverá ficar assim :

 

[6] = {{itemid = 2393, count = 30}, {itemid = 2392, count = 20}}}

 

Se o npc possuir 4 Pokémons a tag deverá ficar assim:

 

[4] = {{itemid = 2393, count = 30}, {itemid = 2392, count = 20}}}

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo