WE

[Encerrado] erro npc gyn

Por wevertonvrb, 12 de out. de 2018 em Tópicos Sem Resposta

15
2.1k
wevertonvrbW
12 de outubro de 2018 às 14:22

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 Outubro 12 por wevertonvrb

DarkWoreD
12 de outubro de 2018 às 16:27

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

wevertonvrbW
13 de outubro de 2018 às 07:31
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

DarkWoreD
13 de outubro de 2018 às 11:56
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.

wevertonvrbW
14 de outubro de 2018 às 09:09
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???

 

DarkWoreD
14 de outubro de 2018 às 11:12
2 horas atrás, wevertonvrb disse:

voce faria ela pra mim? quanto cobraria???

 

Não faria, Acredito que eu não tenha o conhecimento necessário para desenvolver uma função dessa.

nociamN
14 de outubro de 2018 às 11:17

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 Outubro 14 por nociam

wevertonvrbW
14 de outubro de 2018 às 19:24
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??
 

Ayron5A
15 de outubro de 2018 às 10:20
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! ^ ^ 

nociamN
15 de outubro de 2018 às 18:31

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.

Ayron5A
15 de outubro de 2018 às 21:19
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 ^^  

wevertonvrbW
18 de outubro de 2018 às 14:10
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

2 semanas depois...
wevertonvrbW
31 de outubro de 2018 às 00:41
Em 15/10/2018 em 21:19, Sepulturaa disse:

Vou adaptar então. Vlw ^^  

conseguil?

 

Ayron5A
31 de outubro de 2018 às 00:54
12 minutos atrás, wevertonvrb disse:

conseguil?

 

Ainda não ;-; 

1 mês depois...
MarshmelloM
12 de novembro de 2018 às 14:03
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.