Em 21/03/2020 em 11:53, nociam disse:Poxa pleno 2020 e ninguém ai joga a solução.
Acima do método doSummonGymPokemon coloque o método abaixo, lembrando esse método esta em lua mais todos seus métodos existem em C++ aonde pode ser escrito em C++ se desejar assim como esta feito nos sources do tfs 1.3 que tenho basta analisar o código abaixo e fazer em C++ se assim desejar.
após colocar o método local se quiser pode adaptar e tb fazer global substituir os método
selfAttackCreature(getCreatureSummons(challenger)[1]) por selfAttackCreature()
No final do método doSummonGymPokemon tb colocar o selfAttackCreature() assim o pokemon já sai atacando sem delay.
E boa sorte na jornada.
function selfAttackCreature()
local function selfAttackCreature() if #getCreatureSummons(getNpcCid()) > 0 and not isCreature(getCreatureTarget(getCreatureSummons(getNpcCid())[1])) then local list = getSpectators(getCreaturePosition(getNpcCid()), 7, 7, false) for i=0, table.getn(list) do local _target = list[i] if(_target ~= 0) then if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then if #getCreatureSummfighting = falseons(_target) > 0 then doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1]) setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 99856201, getNpcCid()) else fighting = false end target = _target break end end end end endEnfim abaixo exemplo de como esta em C++ não é o completo apenas base vejam o exemplo.
Testei aqui, a npc solta o poke e depois de 1 segundo ela chama ele de volta e fala que perdi o duelo .-.
22:13 Sabrina: Sim, vamos lutar!
22:13 Sabrina: Alakazam, vamos a batalha!
22:13 Sabrina: Voce perdeu o duelo! Talvez algum outro momento voce vai me derrotar.
22:14 Sabrina: Voce foi otimo, Alakazam!
sabrina.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 -- don't change local battle_turn = 1 -- don't change local challenger_turn = 0 -- don't change local pokemons = { {name = "Alakazam", optionalLevel = 120, sex = SEX_MALE, nick = "", ball = "normal"}, {name = "Hypno", optionalLevel = 90, sex = SEX_MALE, nick = "", ball = "normal"}, {name = "Mr. Mime", optionalLevel = 90, sex = SEX_FEMALE, nick = "", ball = "normal"}, {name = "Porygon", optionalLevel = 80, sex = SEX_FEMALE, nick = "", ball = "normal"}, {name = "Shiny Alakazam", optionalLevel = 120, sex = SEX_FEMALE, nick = "", ball = "normal"}, {name = "Shiny hypno", optionalLevel = 120, sex = SEX_FEMALE, nick = "", ball = "normal"}, } local function selfAttackCreature() if #getCreatureSummons(getNpcCid()) > 0 and not isCreature(getCreatureTarget(getCreatureSummons(getNpcCid())[1])) then local list = getSpectators(getCreaturePosition(getNpcCid()), 7, 7, false) for i=0, table.getn(list) do local _target = list[i] if(_target ~= 0) then if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then if #getCreatureSummons(_target) > 0 then doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1]) setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 99856201, getNpcCid()) else fighting = false end target = _target break end end end end end local function doSummonGymPokemon(npc) local this = npc 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 doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1) fighting = true battle_turn = battle_turn + 1 selfAttackCreature() 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, "You won the duel! Congratulations, take this "..getItemNameById(a - 8).." as a prize.", 1) local b = getPlayerItemById(cid, true, a) if b.uid > 0 then doTransformItem(b.uid, b.itemid - 8) end doPlayerSendCancel(cid, "#getBadges# "..getCreatureName(this).." "..getPlayerItemCount(cid, gymbadges[getCreatureName(this)])) end function onCreatureSay(cid, type, msg) local msg = string.lower(msg) if focus == cid then talk_start = os.clock() end if msgcontains(msg, 'oi') and focus == 0 and getDistanceToCreature(cid) <= 4 then focus = cid talk_start = os.clock() conv = 1 selfSay("Ola "..getCreatureName(cid)..", Meu nome e Sabrina e eu sou o Lider do Gym Saffron. Como posso ajuda-lo?") 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 Marsh Badge, maybe some other day we can fight.") -- focus = 0 --return true --end if not hasPokemon(cid) then selfSay("Para lutar com um lider de ginasio, voce precisa de pokemons.") return true end selfSay("Voce esta me desafiando a uma batalha. Sera uma "..#pokemons.." Pokemon Limite a batalha, vamos comecar?") 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("E melhor voce recusar uma batalha contra mim!") return true end if msgcontains(msg, 'tchau') and focus == cid then selfSay('Tchau e faca o seu melhor, treinador!') setPlayerStorageValue(focus, 990, -1) focus = 0 return true end end local afk_warning = false function onThink() --doSendAnimatedText(getThingPos(getThis()), getCreatureName(getThis()), 215) 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() challenger_turn = challenger_turn + 1 afk_time = 0 end else afk_time = afk_time + 0.5 end end if afk_time > afk_limit_time then setPlayerStorageValue(focus, 990, -1) focus = 0 selfSay("Eu aguardei muito tempo, volte quando estiver pronto!") return true end if not afk_warning and afk_time > afk_limit_time / 2 then selfSay("Onde esta o seu pokemon? Vamos lutar!") 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("Voce perdeu o duelo! Talvez algum outro momento voce 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("Entao tchau.") 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









info
Grupo: Infante
Registrado: 27/08/11
Posts: 1.9k
Reputação: +85
Gênero: Masculino
Char no Tibia: Bruno Maciel
ate tenho mas tenho tbem discord