Ir para conteúdo

[Encerrado] [Dúvida] Com fazer para npc de duelo da exp e item após derrota?


Posts Recomendados

Iae galera, tou com uma dúvida, eu queria saber como faço para um npc de duelo após ele ter sido derrotado ele dar uma quantidade de exp (que eu vou escolher) e dar um item após sua derrota vou mandar a scripter de um npc de duel

 

Scripter.lua

 

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 -- não mudam

local battle_turn = 1 -- não mudam

local challenger_turn = 0 -- não mudam

local masterpos = {}

local time_to_fight_again = 15 -- segundos, não ms (so 30 * 60 means 30 minutes)

 

local can_walk = true -- verdade para fazer este npc anda aleatoriamente

local max_distance = 5 -- distância máxima Esse PNJ pode chegar longe(sqms)

local walk_delay = 7 -- cada segundo fazer esta caminhada npc

 

local cooldown_table = {}

 

local min_pokemons_to_battle = 1-- mudar para o que você quiser

local number_of_pokemons = 0 -- don't change

 

local prizes = {

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

[2] = {{itemid = 2393, count = 40}, {itemid = 2392, count = 30}},

[3] = {{itemid = 2393, count = 50}, {itemid = 2392, count = 40}},

[4] = {{itemid = 2393, count = 60}, {itemid = 2392, count = 50}},

[5] = {{itemid = 2393, count = 70}, {itemid = 2392, count = 60}},

[6] = {{itemid = 2393, count = 80}, {itemid = 2392, count = 70}}}

 

local pokemons = {

{name = "Cloyster", optionalLevel = 50, sex = SEX_MALE, nick = "Crusher", ball = "super"},

{name = "Lapras", optionalLevel = 50, sex = SEX_FEMALE, nick = "Laura", ball = "normal"},

{name = "Electabuzz", optionalLevel = 50, sex = SEX_MALE, nick = "Eletron", ball = "great"},

{name = "Pinsir", optionalLevel = 50, sex = SEX_MALE, nick = "Headcutter", ball = "normal"},

{name = "Dragonair", optionalLevel = 50, sex = SEX_FEMALE, nick = "Dragonix", 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

addEvent(adjustWildPoke, 15, summon, it.optionalLevel)

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, "Parabéns! Você ganhou, aqui é o seu prêmio.", 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("Olá "..getCreatureName(cid)..", Eu realmente gostei da nossa última batalha!")

conv = 10

else

selfSay("Olá "..getCreatureName(cid)..", você está pronto para um duelo? Eu posso dar prêmios se você ganhar!")

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("Acabamos lutaram! Por favor, espere por mim para recuperar a última batalha!")

focus = 0

return true

end

 

if not hasPokemon(cid) then

selfSay("Você precisa de pokemons para a batalha!")

return true

end

 

selfSay("Ok, diga-me quantos pokemons vai lutar.")

conv = 2

 

return true

end

 

if conv == 2 and focus == cid then

 

if not tonumber(msg) then

selfSay("Diga-me o número de pokemons que vamos disputar.")

return true

elseif tonumber(msg) > #pokemons then

selfSay("Eu só tenho"..#pokemons..", de modo que o máximo é "..#pokemons.."!")

return true

elseif tonumber(msg) < min_pokemons_to_battle or tonumber(msg) < 1 then

selfSay("Ele tem de ser mais do que "..min_pokemons_to_battle..".")

return true

else

number_of_pokemons = tonumber(msg)

selfSay("Ok, o primeiro que vence "..number_of_pokemons.." vitórias, vamos começar!")

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("É melhor para você recusar uma batalha contra mim!")

 

return true

end

 

if msgcontains(msg, 'tchau') and focus == cid then

selfSay('Tchau e fazer melhor da proxima 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 v1.6

selfAttackCreature(getCreatureSummons(challenger)[1])

change = true

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 esperei muito tempo, voltar quando estiver pronto!!")

return true

end

 

if not afk_warning and afk_time > afk_limit_time / 2 then

selfSay("Onde está o 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("Você perdeu o duelo! Talvez em outro momento você vai 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("Tchau então.")

return true

end

 

if (os.clock() - talk_start) > 30 then

selfSay("Adeus e continue treinando!!")

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

 

 

Tem como alguém de vocês me dizer como faço para ele dar exp e item após derrota ?

 

eu sei uma parte da scripter que é

doPlayerAddItem(cid, 11448, 1)

doPlayerAddExp(cid, 10000)

mais num sei o resto e onde adicionar alguém adicionar na scripter pra mim rep++

Link para o comentário
Compartilhar em outros sites

testa ae..

em baixo de..

local min_pokemons_to_battle = 1-- mudar para o que você quiser
local number_of_pokemons = 0 -- don't change

adicione..

local exp = 80000 -- quantidade de exp
local reward = 11448

e procura por..

doPlayerAddItem(cid, x[n].itemid, x[n].count)
end

adicione...

doPlayerAddExp(cid, exp)
doPlayerAddItem(cid, reward, 1)

Link para o comentário
Compartilhar em outros sites

  • 4 years later...
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.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...