Ir para conteúdo

[Encerrado] [Encerrado] Erro Gym System (DxP)


halves

Posts Recomendados

Olá povo.

Estou faz 3 dias tentando resolver um problema no meu sistema de ginásio. Quando o lider solta o pokemon dá o seguinte erro:

 

[11/07/2017 14:28:35] [Error - Npc interface] [11/07/2017 14:28:35] In a timer event called from: [11/07/2017 14:28:35] data/npc/scripts/brock.lua:onCreatureSay[11/07/2017 14:28:35] Description: [11/07/2017 14:28:35] data/npc/scripts/brock.lua:36: attempt to call global 'doSetMonsterGym' (a nil value)[11/07/2017 14:28:35] stack traceback:[11/07/2017 14:28:35] 	data/npc/scripts/brock.lua:36: in function <data/npc/scripts/brock.lua:21>

Segue o código do lider:

local focus = 0local max_distance = 10local talk_start = 0local conv = 0local fighting = falselocal challenger = 0local afk_limit_time = 300	-- secondslocal afk_time = 0		-- don't changelocal battle_turn = 1		-- don't changelocal challenger_turn = 0	-- don't changelocal pokemons = {{name = "Sudowoodo", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "great"},{name = "Rhydon", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "great"},   --alterado v1.3{name = "Steelix", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "great"},{name = "Onix", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "great"},{name = "Shiny Golem", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "great"},}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["great"].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)    local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name    setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)    doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1)    fighting = true    battle_turn = battle_turn + 1endlocal 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) enddoPlayerSendCancel(cid, "#getBadges# "..getCreatureName(this).." "..getPlayerItemCount(cid, gymbadges[getCreatureName(this)]))endfunction 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			        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)		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	endendlocal afk_warning = falselocal change = falsefunction 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)	endreturn trueend

Se alguem puder dar uma ajuda ae... valeu!

Link para o comentário
Compartilhar em outros sites

19 minutos atrás, halves disse:

Olá povo.

Estou faz 3 dias tentando resolver um problema no meu sistema de ginásio. Quando o lider solta o pokemon dá o seguinte erro:

 

[11/07/2017 14:28:35] [Error - Npc interface] [11/07/2017 14:28:35] In a timer event called from: [11/07/2017 14:28:35] data/npc/scripts/brock.lua:onCreatureSay[11/07/2017 14:28:35] Description: [11/07/2017 14:28:35] data/npc/scripts/brock.lua:36: attempt to call global 'doSetMonsterGym' (a nil value)[11/07/2017 14:28:35] stack traceback:[11/07/2017 14:28:35] 	data/npc/scripts/brock.lua:36: in function <data/npc/scripts/brock.lua:21>

Segue o código do lider:

local focus = 0local max_distance = 10local talk_start = 0local conv = 0local fighting = falselocal challenger = 0local afk_limit_time = 300	-- secondslocal afk_time = 0		-- don't changelocal battle_turn = 1		-- don't changelocal challenger_turn = 0	-- don't changelocal pokemons = {{name = "Sudowoodo", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "great"},{name = "Rhydon", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "great"},   --alterado v1.3{name = "Steelix", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "great"},{name = "Onix", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "great"},{name = "Shiny Golem", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "great"},}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["great"].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)    local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name    setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)    doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1)    fighting = true    battle_turn = battle_turn + 1endlocal 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) enddoPlayerSendCancel(cid, "#getBadges# "..getCreatureName(this).." "..getPlayerItemCount(cid, gymbadges[getCreatureName(this)]))endfunction 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			        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)		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	endendlocal afk_warning = falselocal change = falsefunction 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)	endreturn trueend

Se alguem puder dar uma ajuda ae... valeu!

Essa Função tem no seu servidor?

doSetMonsterGym

Aparentemente parece que não, você vai ter que adicionar ela pois ela não vem com a source padrão do tibia.

Link para o comentário
Compartilhar em outros sites

Desativei a linha que você citou, aparentemente não fez falta, e o erro sumiu.. Agora o erro é que já inicio a batalha perdendo.

Link para o comentário
Compartilhar em outros sites

Agora, Josegvb disse:

to precisando tb

To quase chegando lá, só falta agora os pokemons do lider atacarem. Quanto eu conseguir te aviso

O único problema nas batalhas agora é que o pokemon do npc não está atacando. Mas quando morre, summona o próximo normalmente e quando termina vai pro script de premios corretamente.

 

Alguem consegue ajudar nessa questão do pokemon não estar atacando?

 

Código atual:

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 = 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 = "hard golem", optionalLevel = 50, sex = SEX_MALE, nick = "", ball = "great"},

{name = "iron steelix", optionalLevel = 50, sex = SEX_MALE, nick = "", ball = "great"},

}

 

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["great"].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)

    local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name

  --  setWildPokemonLevel(summon, it.level, getPokemonStatus(it.name, (it.extralevel + it.level)), name, 1.5)

    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

        

            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)

        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

                afk_time = afk_time + 0.5

                if change then

                    change = false

                    challenger_turn = challenger_turn + 1

                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

        

    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 halves
Link para o comentário
Compartilhar em outros sites

  • 4 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...