Postado Junho 23, 2015 9 anos Boa tarde, estou criando um NPC duel para pokemon, Rocket, esta tudo funcionando, porém para ele iniciar o duel, é preciso falar hi, duel, yes. Eu gostaria que quando o player (que tem a storage 123456) se aproximasse 5 sqm de distancia do npc, ele iniciasse o duel. Segue o script do npc. local focus = 0 local max_distance = 4 local talk_start = 0 local conv = 0 local fighting = false local challenger = 0 local pokeNpc = nil local pokeChalenger = nil local afk_limit_time = 15 -- seconds local afk_time = 0 -- don't change local battle_turn = 0 -- don't change local challenger_turn = 0 -- don't change local function doSummonGymPokemon(npc) battle_turn = battle_turn + 1 local this = npc if #getCreatureSummons(this) >= 1 or focus == 0 then return true end local it = wildRocket[math.random(1, 5)][battle_turn] pokeNpc = doSummonCreature(it.name, getThingPos(this)) 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(pokeNpc), balleffect) setPlayerStorageValue(pokeNpc, 990, this) setPlayerStorageValue(pokeNpc, 991, "battle") setPlayerStorageValue(this, 990, 1) addEvent(adjustWildPoke, 15, pokeNpc, it.optionalLevel) mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", it.name) doCreatureSay(this, mgo, 1) fighting = true end local function doWinDuel(cid, npc) local outfit = getCreatureOutfit(getThis()) local this = npc ---------------------------------------- if outfit.lookType == 605 then --verifica se o npc eh female.. ;p monster = doCreateMonster("aRocketFemale", getThingPos(this)) doRemoveCreature(this) else monster = doCreateMonster("aRocket", getThingPos(this)) doRemoveCreature(this) end ---------------------------------------- --doCloneOut(monster, outfit) addEvent(beDrunk, 100, monster) addEvent(doSummonGymPokemon, 1000, getThis()) 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("Hello "..getCreatureName(cid)..", my name is Surge and I'm Vermilion's Gym Leader. How may I help you?") 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 Thunder Badge, maybe some other day we can fight.") focus = 0 return true end if not hasPokemon(cid) then selfSay("To battle agains't a gym leader you need pokemons.") return true end selfSay("You are challenging me to a battle. It will be a "..#wildRocket.." pokemon limit battle, let's start?") conv = 2 return true end if isConfirmMsg(msg) and conv == 2 and focus == cid then challenger = focus setPlayerStorageValue(cid, 990, 1) setPlayerStorageValue(cid, 999, 1) if #getCreatureSummons(cid) >= 1 then local pk = getCreatureSummons(cid)[1] setPlayerStorageValue(pk, 990, 1) end selfSay("Yea, let's fight!") talk_start = os.clock() setPlayerStorageValue(getThis(), 990, 1) addEvent(doSummonGymPokemon, 5, getThis()) conv = 3 return true end if isNegMsg(msg) and conv == 2 and focus == cid then focus = 0 selfSay("It is better for you to refuse a battle against me!") return true end local function doRemove(npc) local it = wildRocket[math.random(1, 5)][battle_turn] local balleffect = pokeballs["normal"].effect if it.ball and pokeballs[it.ball] then balleffect = pokeballs[it.ball].effect end doSendMagicEffect(getThingPos(pokeNpc), balleffect) doRemoveCreature(pokeNpc) end if msgcontains(msg, 'bye') and focus == cid then selfSay('Bye and do your best trainer!') setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, 999, -1) if #getCreatureSummons(focus) >= 1 then local pk = getCreatureSummons(focus)[1] setPlayerStorageValue(pk, 990, -1) end doSendMagicEffect(getThingPos(pokeNpc), balleffect) doRemoveCreature(pokeNpc) focus = 0 return true end end local afk_warning = false function checkPoke(player, poke) end function onThink() if focus == 0 then selfTurn(2) fighting = false challenger = 0 challenger_turn = 0 battle_turn = 0 afk_time = 0 afk_warning = false setPlayerStorageValue(getThis(), 990, -1) return true else if not isCreature(focus) then focus = 0 return true end if fighting then talk_start = os.clock() if #getCreatureSummons(challenger) >= 1 then if pokeChalenger == nil then pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1]) afk_time = 0 challenger_turn = challenger_turn + 1 elseif pokeChalenger == getCreatureName(getCreatureSummons(challenger)[1]) then afk_time = 0 else afk_time = 0 challenger_turn = challenger_turn + 1 pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1]) end else afk_time = afk_time + 0.5 end if afk_time > afk_limit_time then setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, 999, -1) doRemoveCreature(pokeNpc) focus = 0 selfSay("I have waited too long, come back when you are ready!") return true end if not afk_warning and afk_time > afk_limit_time / 2 then selfSay("Where's your pokemon? Let's fight!") afk_warning = true end if getPlayerStorageValue(getThis(), 990) == -1 then if battle_turn >= #wildRocket then addEvent(doWinDuel, 1000, focus, getThis()) addEvent(doCreateNpc, 300000, ".aRocket", getThingPos(getThis())) setPlayerStorageValue(focus, 990, -1) focus = 0 return true end setPlayerStorageValue(getThis(), 990, 1) addEvent(doSummonGymPokemon, 1000, getThis()) end if challenger_turn >= 7 or challenger_turn > #wildRocket then selfSay("You lost our duel! Maybe some other time you'll defeat me.") 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("Bye then.") return true end if (os.clock() - talk_start) > 30 then selfSay("Good bye and keep training!") setPlayerStorageValue(focus, 990, -1) focus = 0 end if getDistanceToCreature(focus) > max_distance then setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, 999, -1) if #getCreatureSummons(focus) >= 1 then local pk = getCreatureSummons(focus)[1] setPlayerStorageValue(pk, 990, -1) end doRemoveCreature(pokeNpc) focus = 0 selfSay("You were strong enough to win this battle!") return true end local dir = doRedirectDirection(getDirectionTo(npcpos, focpos)) selfTurn(dir) end return true end ninguém? Danera Global Server Versão: 10.77 - 10.79 Sem Items VIP Venha se divertir
Postado Junho 23, 2015 9 anos local focus = 0 local max_distance = 4 local talk_start = 0 local conv = 0 local fighting = false local challenger = 0 local pokeNpc = nil local pokeChalenger = nil local afk_limit_time = 15 -- seconds local afk_time = 0 -- don't change local battle_turn = 0 -- don't change local challenger_turn = 0 -- don't change local exhStorage = 19182 local exhaust = 15 --Tempo, em segundos, para o NPC atacar o jogador novamente. local function doSummonGymPokemon(npc) battle_turn = battle_turn + 1 local this = npc if #getCreatureSummons(this) >= 1 or focus == 0 then return true end local it = wildRocket[math.random(1, 5)][battle_turn] pokeNpc = doSummonCreature(it.name, getThingPos(this)) 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(pokeNpc), balleffect) setPlayerStorageValue(pokeNpc, 990, this) setPlayerStorageValue(pokeNpc, 991, "battle") setPlayerStorageValue(this, 990, 1) addEvent(adjustWildPoke, 15, pokeNpc, it.optionalLevel) mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", it.name) doCreatureSay(this, mgo, 1) fighting = true end local function doWinDuel(cid, npc) local outfit = getCreatureOutfit(getThis()) setPlayerStorageValue(cid, exhStorage, os.time() + exhaust) local this = npc ---------------------------------------- if outfit.lookType == 605 then --verifica se o npc eh female.. ;p monster = doCreateMonster("aRocketFemale", getThingPos(this)) doRemoveCreature(this) else monster = doCreateMonster("aRocket", getThingPos(this)) doRemoveCreature(this) end ---------------------------------------- --doCloneOut(monster, outfit) addEvent(beDrunk, 100, monster) addEvent(doSummonGymPokemon, 1000, getThis()) end local afk_warning = false function checkPoke(player, poke) end function onThink() if challenger == 0 then local s = getSpectators(getThingPos(getThis()), 5, 5) table.remove(s, getThis()) if #s > 0 then for i = 1, #s do if isPlayer(s[i]) and getPlayerStorageValue(s[i], 123456) > -1 and getPlayerStorageValue(s[i], exhStorage) < os.time() then challenger = s[i] focus = s[i] setPlayerStorageValue(s[i], 990, 1) selfSay(getCreatureName(s[i])..", let's fight!") talk_start = os.clock() addEvent(doSummonGymPokemon, 850, getThis()) break end end end end if focus == 0 then selfTurn(2) fighting = false challenger = 0 challenger_turn = 0 battle_turn = 0 afk_time = 0 afk_warning = false setPlayerStorageValue(getThis(), 990, -1) return true else if not isCreature(focus) then focus = 0 return true end if fighting then talk_start = os.clock() if #getCreatureSummons(challenger) >= 1 then if pokeChalenger == nil then pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1]) afk_time = 0 challenger_turn = challenger_turn + 1 elseif pokeChalenger == getCreatureName(getCreatureSummons(challenger)[1]) then afk_time = 0 else afk_time = 0 challenger_turn = challenger_turn + 1 pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1]) end else afk_time = afk_time + 0.5 end if afk_time > afk_limit_time then setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, 999, -1) doRemoveCreature(pokeNpc) focus = 0 selfSay("I have waited too long, come back when you are ready!") setPlayerStorageValue(cid, exhStorage, os.time() + exhaust) return true end if not afk_warning and afk_time > afk_limit_time / 2 then selfSay("Where's your pokemon? Let's fight!") afk_warning = true end if getPlayerStorageValue(getThis(), 990) == -1 then if battle_turn >= #wildRocket then addEvent(doWinDuel, 1000, focus, getThis()) addEvent(doCreateNpc, 300000, ".aRocket", getThingPos(getThis())) setPlayerStorageValue(focus, 990, -1) focus = 0 return true end setPlayerStorageValue(getThis(), 990, 1) addEvent(doSummonGymPokemon, 1000, getThis()) end if challenger_turn >= 7 or challenger_turn > #wildRocket then selfSay("You lost our duel! Maybe some other time you'll defeat me.") setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, exhStorage, os.time() + exhaust) focus = 0 return true end end local npcpos = getThingPos(getThis()) local focpos = getThingPos(focus) if npcpos.z ~= focpos.z then setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, exhStorage, os.time() + exhaust) focus = 0 selfSay("Bye then.") return true end if (os.clock() - talk_start) > 30 then selfSay("Good bye and keep training!") setPlayerStorageValue(focus, exhStorage, os.time() + exhaust) setPlayerStorageValue(focus, 990, -1) focus = 0 end if getDistanceToCreature(focus) > max_distance then setPlayerStorageValue(focus, 990, -1) setPlayerStorageValue(focus, 999, -1) setPlayerStorageValue(focus, exhStorage, os.time() + exhaust) if #getCreatureSummons(focus) >= 1 then local pk = getCreatureSummons(focus)[1] setPlayerStorageValue(pk, 990, -1) end doRemoveCreature(pokeNpc) focus = 0 selfSay("You were strong enough to win this battle!") return true end local dir = doRedirectDirection(getDirectionTo(npcpos, focpos)) selfTurn(dir) end return true end Editado Junho 23, 2015 9 anos por zipter98 (veja o histórico de edições) não respondo pms solicitando suporte em programação/scripting
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.