josegremista 2 Postado Maio 4, 2013 Share Postado Maio 4, 2013 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 https://xtibia.com/forum/topic/213691-encerrado-d%C3%BAvida-com-fazer-para-npc-de-duelo-da-exp-e-item-ap%C3%B3s-derrota/ Compartilhar em outros sites More sharing options...
StyloMaldoso 330 Postado Maio 5, 2013 Share Postado Maio 5, 2013 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 https://xtibia.com/forum/topic/213691-encerrado-d%C3%BAvida-com-fazer-para-npc-de-duelo-da-exp-e-item-ap%C3%B3s-derrota/#findComment-1515947 Compartilhar em outros sites More sharing options...
Stigal 585 Postado Abril 21, 2018 Share Postado Abril 21, 2018 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 https://xtibia.com/forum/topic/213691-encerrado-d%C3%BAvida-com-fazer-para-npc-de-duelo-da-exp-e-item-ap%C3%B3s-derrota/#findComment-1734396 Compartilhar em outros sites More sharing options...
Posts Recomendados