Ir para conteúdo

[Encerrado] erro npc gyn


wevertonvrb

Posts Recomendados

TFS 0.3.6
erro nos gyn
o pokemon do npc não esta dando rit no pokemon dos players e esta gerando este erro  http://prntscr.com/l5dkc7

script npc myst
 

Spoiler

local focus = 0
local max_distance = 8
local talk_start = 0
local conv = 0
local fighting = false
local challenger = 0
local afk_limit_time = 100 -- 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 = "Gyarados", optionalLevel = 450, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Tentacruel", optionalLevel = 450, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Vaporeon", optionalLevel = 450, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Golduck", optionalLevel = 450, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Blastoise", optionalLevel = 450, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Starmie", optionalLevel = 450, sex = SEX_FEMALE, nick = "", ball = "normal"},
}


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
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 - ? 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, 'hi') and focus == 0 and getDistanceToCreature(cid) <= 4 then
        focus = cid
        talk_start = os.clock()
        conv = 1
        selfSay("Hello "..getCreatureName(cid)..", my name is Misty and I'm Cerulean'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 Cascade 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 "..#pokemons.." 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)
        selfSay("Yea, let's fight!")
        talk_start = os.clock()
        addEvent(doSummonGymPokemon, 850, getThis())
        conv = 6

    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

    if msgcontains(msg, 'bye') and focus == cid then
        selfSay('Bye and do your best trainer!')
        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(1)
           fighting = false
           challenger = 0
           challenger_turn = 1
        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(getCreatureSummons(challenger)[1])
                  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("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 #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("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)
            focus = 0
        return true
        end

        local dir = doRedirectDirection(getDirectionTo(npcpos, focpos))    
        selfTurn(dir)
    end
return true
end

 

Editado por wevertonvrb
Link para o comentário
Compartilhar em outros sites

15 horas atrás, DarkWore disse:

Está faltando a Função selfAttackCreature no seu servidor/source.

sera que pode me ajudar a colocar ela na source? estou pesquisando, procurando por ela mas não encontro

Link para o comentário
Compartilhar em outros sites

4 horas atrás, wevertonvrb disse:

sera que pode me ajudar a colocar ela na source? estou pesquisando, procurando por ela mas não encontro

Essa função não existe tutorial para colocar ela nem nada do tipo, você vai ter que encontrar alguem que faça a função para você, Acredito que não vá conseguir isso de graça.

Link para o comentário
Compartilhar em outros sites

21 horas atrás, DarkWore disse:

Essa função não existe tutorial para colocar ela nem nada do tipo, você vai ter que encontrar alguem que faça a função para você, Acredito que não vá conseguir isso de graça.

voce faria ela pra mim? quanto cobraria???

 

Link para o comentário
Compartilhar em outros sites

Irei de ajudar essa função não é nada menos do que mostro abaixo simplesmente agora e so adptar.

 

        if #getCreatureSummons(_target) > 0 then
          doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
        else
          doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], _target)
        end

Editado por nociam
Link para o comentário
Compartilhar em outros sites

7 horas atrás, nociam disse:

Irei de ajudar essa função não é nada menos do que mostro abaixo simplesmente agora e so adptar.

 

        if #getCreatureSummons(_target) > 0 then
          doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
        else
          doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], _target)
        end

isso vai no xml do monstro no npc? some functions?

poderia dar uma luz??
 

Link para o comentário
Compartilhar em outros sites

23 horas atrás, nociam disse:

Irei de ajudar essa função não é nada menos do que mostro abaixo simplesmente agora e so adptar.

 

        if #getCreatureSummons(_target) > 0 then
          doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
        else
          doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], _target)
        end

Mano muita gente precisa dela... Eu sou um dos... obg por compartilhar! Só explica onde ela vai ficar. 

É isso, vlw e REP pela iniciativa! ^ ^ 

Link para o comentário
Compartilhar em outros sites

Se tem que adaptar no lugar do selfAttackCreature.

 

Tipo existe o metodo getSpectators ai se pega os pokemons ao redor do seu npc que ele ira atacar e por um for se chama o metodo doMonsterSetTarget e faz o pokemon do npc atacar os da lista vale lembrar que se fazer certo funciona pois tenho no meu servidor antigo.

Link para o comentário
Compartilhar em outros sites

2 horas atrás, nociam disse:

Se tem que adaptar no lugar do selfAttackCreature.

 

Tipo existe o metodo getSpectators ai se pega os pokemons ao redor do seu npc que ele ira atacar e por um for se chama o metodo doMonsterSetTarget e faz o pokemon do npc atacar os da lista vale lembrar que se fazer certo funciona pois tenho no meu servidor antigo.

Vou adaptar então. Vlw ^^  

Link para o comentário
Compartilhar em outros sites

Em 15/10/2018 em 18:31, nociam disse:

Se tem que adaptar no lugar do selfAttackCreature.

 

Tipo existe o metodo getSpectators ai se pega os pokemons ao redor do seu npc que ele ira atacar e por um for se chama o metodo doMonsterSetTarget e faz o pokemon do npc atacar os da lista vale lembrar que se fazer certo funciona pois tenho no meu servidor antigo.

mano eu não entedi nada, ate pq o pokemon no npc ja esta atacando o do player porem o pokemon do player esta tipo imune a dano fisico e magico, unica coisa que esta surtindo efeitos são maldições e envenenamentos
se puder esclarecer um pouco mais agradeceria

mas te agradeço por tentar ajudar, talvez seja eu que ainda não tenha conhecimento suficiente para entender

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
  • 2 weeks later...
A questão neste 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.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...