Ir para conteúdo

[Encerrado] Erro gym battle


SillyBoy

Posts Recomendados

Estou usando a base DXP, enfim, quando vou iniciar uma batalha contra o Brock, ele da o Summon do geodude até ai tudo bem, o geodude ataca, mas quando o Geodude é derrotado o corpse permanece no chão, e o Brock não faz mais nada e o seguinte erro no console aparece !

 

Spoiler

[03/01/2017 23:28:40] [Error - Npc interface]
[03/01/2017 23:28:40] In a timer event called from:
[03/01/2017 23:28:40] data/npc/scripts/brock.lua:onCreatureSay
[03/01/2017 23:28:40] Description:
[03/01/2017 23:28:40] data/npc/scripts/brock.lua:122: attempt to index field 'normal' (a nil value)
[03/01/2017 23:28:40] stack traceback:
[03/01/2017 23:28:40]     data/npc/scripts/brock.lua:122: in function <data/npc/scripts/brock.lua:120>

 

vou postar aqui embaixo o script do Brock !!

Spoiler

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 pokemons = {
{name = "Geodude", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "poke"},
{name = "Rhydon", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "poke"},   --alterado v1.3
{name = "Machamp", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "poke"},
{name = "Onix", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "poke"},
{name = "Golem", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "poke"},
}


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 = pokemons[battle_turn]
    pokeNpc = doSummonCreature(it.name, getThingPos(this))
    local summon = getCreatureSummons(this)[1]
    local balleffect = pokeballs["poke"].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(pokeNpc, 8595, 1)
    registerCreatureEvent(pokeNpc, "Gym1")
    registerCreatureEvent(pokeNpc, "Gym2")
    registerCreatureEvent(pokeNpc, "Gym3")
    registerCreatureEvent(pokeNpc, "Gym4")
    setPlayerStorageValue(this, 990, 1)
    setPlayerStorageValue(this, 995, 1)
    mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", it.name)
    doCreatureSay(this, mgo, 1)
    fighting = true
end

local function doWinDuel(cid, npc)
    if not isCreature(cid) then return true end
    local this = npc
    local a = gymbadges[getCreatureName(this)].off
    local c = gymbadges[getCreatureName(this)].on
    doCreatureSay(npc, "You won the duel! Congratulations, take this "..getItemNameById©.." as a prize.", 1)
    local b = getPlayerItemById(cid, true, a)
    if b.uid > 0 then doTransformItem(b.uid, c) end
    setPlayerStorageValue(cid, 992, 1)
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
        if getPlayerStorageValue(cid, 992) == 1 then
            focus = 0
            selfSay("already battled with you , find another leader of gym!")
        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)
        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 = pokemons[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)
        if #getCreatureSummons(cid) >= 1 then
        local pk = getCreatureSummons(cid)[1]
        setPlayerStorageValue(pk, 990, -1)
        end
        if getPlayerStorageValue(getThis(), 995) >= 1 then
        setPlayerStorageValue(getThis(), 995, -1)
        addEvent(doRemove, 50, this)
        end
        focus = 0
    return true
    end
end

local afk_warning = false

function checkPoke(player, poke)

end

function onThink()

    local function doRemove(npc)
    local it = pokemons[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 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
                if getPlayerStorageValue(getThis(), 995) >= 1 then
                addEvent(doRemove, 50, this)
                end
                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 getPlayerStorageValue(getThis(), 990) == 0 then
                if battle_turn >= #pokemons then
                    addEvent(doWinDuel, 1000, focus, 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 > #pokemons then
                selfSay("You lost our duel! Maybe some other time you'll defeat me.")
                setPlayerStorageValue(focus, 990, -1)
                if #getCreatureSummons(getThis()) >= 1 then
                addEvent(doRemove, 50, this)
                end
                focus = 0
            return true
            end
        end

        local npcpos = getThingPos(getThis())
        local focpos = getThingPos(focus)

        if npcpos.z ~= focpos.z then
            setPlayerStorageValue(focus, 990, -1)
            if #getCreatureSummons(getThis()) >= 1 then
            addEvent(doRemove, 50, this)
            end
            focus = 0
            selfSay("Bye then.")
            return true
        end

        if (os.clock() - talk_start) > 15 then
            selfSay("Good bye and keep training!")
            setPlayerStorageValue(focus, 990, -1)
            if #getCreatureSummons(getThis()) >= 1 then
            setPlayerStorageValue(getThis(), 995, -1)
            addEvent(doRemove, 50, this)
            end
            focus = 0
        end

        if getDistanceToCreature(focus) > max_distance then
            setPlayerStorageValue(focus, 990, -1)
            selfSay("tchau gostoso!")
            if #getCreatureSummons(focus) >= 1 then
        local pk = getCreatureSummons(focus)[1]
        setPlayerStorageValue(pk, 990, -1)
        end
        if getPlayerStorageValue(getThis(), 995) >= 1 then
        setPlayerStorageValue(getThis(), 995, -1)
        addEvent(doRemove, 50, this)
        end
            focus = 0
        return true
        end

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

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

@SillyBoy, tente utilizar esse script:

local focus = 0
local max_distance = 10
local talk_start = 0
local conv = 0
local fighting = false
local challenger = 0
local afk_limit_time = 300	-- 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 = "Geodude", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Rhydon", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},   --alterado v1.3
{name = "Machamp", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Onix", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Golem", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
}


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)
	addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
	local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name    --alterado v1.3
	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 - 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, 'hi') and focus == 0 and getDistanceToCreature(cid) <= 4 then
		focus = cid
		talk_start = os.clock()
		conv = 1
		selfSay("Hello "..getCreatureName(cid)..", my name is Brock and I'm Pewter'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 Boulder 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 = 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

	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
local change = false

function onThink()

	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(getCreatureSummons(challenger)[1])
				  challenger_turn = challenger_turn + 1
				  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("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

 

Link para o comentário
Compartilhar em outros sites

  • 8 months later...
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...