Jump to content
  • 0

Bug NPC GYM


BrunooMaciell

Question

Estou com um BUG no npc de GYM.

 

BUG 

Spoiler

[20/03/2020 17:41:54] [Error - Npc interface] 
[20/03/2020 17:41:54] data/npc/scripts/gym/sabrina.lua:onThink
[20/03/2020 17:41:54] Description: 
[20/03/2020 17:41:54] data/npc/scripts/gym/sabrina.lua:151: attempt to call global 'selfAttackCreature' (a nil value)
[20/03/2020 17:41:54] stack traceback:
[20/03/2020 17:41:54]     data/npc/scripts/gym/sabrina.lua:151: in function <data/npc/scripts/gym/sabrina.lua:118>

 

NPC

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 = "Alakazam", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Hypno", optionalLevel = 400, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Mr. Mime", optionalLevel = 400, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Porygon", optionalLevel = 400, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Espeon", optionalLevel = 400, 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 - 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 Sabrina and I'm Saffron'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 Marsh 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

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(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

Bom como testei so um mas creio eu que esteja todos BUGADOS meus npcs de GYM.

 

Quem puder ajuda com este bug e poder me passa a tag ou a linha da solução ^^

 

Rep+++

Link to comment
Share on other sites

Recommended Posts

  • 0

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

end

 Enfim abaixo exemplo de como esta em C++ não é o completo apenas base vejam o exemplo.

sssssssssssssssssssssss.png.12f162ecbe62e4838fd6b5d6379ba6fe.png

Edited by nociam
Link to comment
Share on other sites

  • 0
33 minutos atrás, 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

end

 Enfim abaixo exemplo de como esta em C++ não é o completo apenas base vejam o exemplo.

sssssssssssssssssssssss.png.12f162ecbe62e4838fd6b5d6379ba6fe.png

tipo assim !!!

 

Eu queria arrumar este BUG so que em script.lua 

 

Assim imagino eu como eu disse creio eu que todos npcs de gym aqui devem ta bugado ai queria a tag onde arrumo.

 

So que queria arrumar ou adptar em script.lua se tem como ??

 

Source nao manjo =/ 

Link to comment
Share on other sites

  • 0
13 minutos atrás, nociam disse:

já esta ali mano em lua só observar.

Beleza mais tipo assim 

 

Onde eu troco ou onde eu adciono ??

 

Tipo:

 

Abaixo de tal linha adciona isto 

 

No npc do gym

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

end

/\ em que parte eu coloco isto ??

Link to comment
Share on other sites

  • 0
3 horas atrás, BrunooMaciell disse:

tipo assim !!!

 

Eu queria arrumar este BUG so que em script.lua 

 

Assim imagino eu como eu disse creio eu que todos npcs de gym aqui devem ta bugado ai queria a tag onde arrumo.

 

So que queria arrumar ou adptar em script.lua se tem como ??

 

Source nao manjo =/ 

ta dando erro aqui 

if #getCreatureSummfighting = falseons(_target) > 0 then

 

Estou mandando o script do npc sabrina. tem como vc fazer a edicao para nos?

 



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 = "Shiny Alakazam", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Hypno", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Mr. Mime", optionalLevel = 300, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Porygon", optionalLevel = 400, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Shiny Espeon", optionalLevel = 300, 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) setPlayerStorageValue(summon, 10002, 1)
    addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
    local name = it.nick ~= "" and it.nick or getCreatureNameWithProtect(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
    if getPlayerStorageValue(cid, 46677) ~= 1 then return true end
    setPlayerStorageValue(cid, 46677, -1)
        setPlayerStorageValue(cid, SABRINA_BADGE, 1)
    local this = npc
    doCreatureSay(npc, "You won the duel! Congratulations", 1)
doPlayerSendCancel(cid, "#getBadges# "..getCreatureNameWithProtect(this).." ".. 1)
end

function onCreatureSay(cid, type, msg)
if focus and (focus ~= cid and focus ~= 0) then return true end
    local msg = string.lower(msg)
if getPlayerStorageValue(cid, SABRINA_BADGE) >= 0 then
setPlayerStorageValue(focus, 990, -1)
focus = 0
selfSay("Bye. You already have this badge.")
return true
end
    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 "..getCreatureNameWithProtect(cid)..", my name is Sabrina and I'm Saffron'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[getCreatureNameWithProtect(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("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!")
        setPlayerStorageValue(cid, 46677, 1)
        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

function onThink()

    --doSendAnimatedText(getThingPos(getThis()), getCreatureNameWithProtect(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 tonumber(#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

Link to comment
Share on other sites

  • 0
47 minutos atrás, Taiger disse:

ta dando erro aqui 


if #getCreatureSummfighting = falseons(_target) > 0 then

 

Estou mandando o script do npc sabrina. tem como vc fazer a edicao para nos?

 

 

  Mostrar conteúdo oculto

 

 


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 = "Shiny Alakazam", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Hypno", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Mr. Mime", optionalLevel = 300, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Porygon", optionalLevel = 400, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Shiny Espeon", optionalLevel = 300, 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) setPlayerStorageValue(summon, 10002, 1)
    addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
    local name = it.nick ~= "" and it.nick or getCreatureNameWithProtect(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
    if getPlayerStorageValue(cid, 46677) ~= 1 then return true end
    setPlayerStorageValue(cid, 46677, -1)
        setPlayerStorageValue(cid, SABRINA_BADGE, 1)
    local this = npc
    doCreatureSay(npc, "You won the duel! Congratulations", 1)
doPlayerSendCancel(cid, "#getBadges# "..getCreatureNameWithProtect(this).." ".. 1)
end

function onCreatureSay(cid, type, msg)
if focus and (focus ~= cid and focus ~= 0) then return true end
    local msg = string.lower(msg)
if getPlayerStorageValue(cid, SABRINA_BADGE) >= 0 then
setPlayerStorageValue(focus, 990, -1)
focus = 0
selfSay("Bye. You already have this badge.")
return true
end
    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 "..getCreatureNameWithProtect(cid)..", my name is Sabrina and I'm Saffron'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[getCreatureNameWithProtect(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("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!")
        setPlayerStorageValue(cid, 46677, 1)
        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

function onThink()

    --doSendAnimatedText(getThingPos(getThis()), getCreatureNameWithProtect(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 tonumber(#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
 

 

 

Ja postei a script da sabrina kkkkkkkkkkk

Link to comment
Share on other sites

  • 0
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 = "Shiny Alakazam", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Hypno", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Mr. Mime", optionalLevel = 300, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Porygon", optionalLevel = 400, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Shiny Espeon", optionalLevel = 300, 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) setPlayerStorageValue(summon, 10002, 1)
    addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
    local name = it.nick ~= "" and it.nick or getCreatureNameWithProtect(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
    if getPlayerStorageValue(cid, 46677) ~= 1 then return true end
    setPlayerStorageValue(cid, 46677, -1)
        setPlayerStorageValue(cid, SABRINA_BADGE, 1)
    local this = npc
    doCreatureSay(npc, "You won the duel! Congratulations", 1)
doPlayerSendCancel(cid, "#getBadges# "..getCreatureNameWithProtect(this).." ".. 1)
end 

function onCreatureSay(cid, type, msg)
if focus and (focus ~= cid and focus ~= 0) then return true end
    local msg = string.lower(msg)
if getPlayerStorageValue(cid, SABRINA_BADGE) >= 0 then
setPlayerStorageValue(focus, 990, -1)
focus = 0
selfSay("Bye. You already have this badge.")
return true
end
    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 "..getCreatureNameWithProtect(cid)..", my name is Sabrina and I'm Saffron'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[getCreatureNameWithProtect(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("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!")
        setPlayerStorageValue(cid, 46677, 1)
        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 

function onThink() 

    --doSendAnimatedText(getThingPos(getThis()), getCreatureNameWithProtect(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 tonumber(#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("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 

 

linha do erro altere para.

 

if #getCreatureSummons(_target) > 0 then

Edited by nociam
Link to comment
Share on other sites

  • 0
39 minutos atrás, nociam disse:
  Mostrar conteúdo oculto


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 = "Shiny Alakazam", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Hypno", optionalLevel = 300, sex = SEX_MALE, nick = "", ball = "normal"},
{name = "Shiny Mr. Mime", optionalLevel = 300, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Porygon", optionalLevel = 400, sex = SEX_FEMALE, nick = "", ball = "normal"},
{name = "Shiny Espeon", optionalLevel = 300, 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) setPlayerStorageValue(summon, 10002, 1)
    addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
    local name = it.nick ~= "" and it.nick or getCreatureNameWithProtect(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
    if getPlayerStorageValue(cid, 46677) ~= 1 then return true end
    setPlayerStorageValue(cid, 46677, -1)
        setPlayerStorageValue(cid, SABRINA_BADGE, 1)
    local this = npc
    doCreatureSay(npc, "You won the duel! Congratulations", 1)
doPlayerSendCancel(cid, "#getBadges# "..getCreatureNameWithProtect(this).." ".. 1)
end 

function onCreatureSay(cid, type, msg)
if focus and (focus ~= cid and focus ~= 0) then return true end
    local msg = string.lower(msg)
if getPlayerStorageValue(cid, SABRINA_BADGE) >= 0 then
setPlayerStorageValue(focus, 990, -1)
focus = 0
selfSay("Bye. You already have this badge.")
return true
end
    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 "..getCreatureNameWithProtect(cid)..", my name is Sabrina and I'm Saffron'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[getCreatureNameWithProtect(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("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!")
        setPlayerStorageValue(cid, 46677, 1)
        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 

function onThink() 

    --doSendAnimatedText(getThingPos(getThis()), getCreatureNameWithProtect(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 tonumber(#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("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 

 

linha do erro altere para.

 

if #getCreatureSummons(_target) > 0 then

1.png.597d61126481ccad8f4bce27fe8e0a61.png

 

Deu esse ERRO 

Link to comment
Share on other sites

  • 0
22 minutos atrás, nociam disse:

linha 131 para min não faz sentido.

 

image.thumb.png.635a71f63cd05b7a85e327dd098554ab.png

mas sabe onde pode ser este erro eu mudei aqui nao sei se foi a errada mais aque deu erro mudei aii começa da este erro da foto no EXE do server 

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...