Bug NPC GYM

BrunooMaciell
em Scripts
  • 1
  • 2

BrunooMaciell

Bruno Maciel
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/08/11Posts: 1919Gênero: MasculinoChar no Tibia: Bruno Maciel

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

nociam

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 04/02/13Posts: 541Gênero: Masculino

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

julyana

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 31/07/19Posts: 3

Vou testar obg

 

BrunooMaciell

Bruno Maciel
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/08/11Posts: 1919Gênero: MasculinoChar no Tibia: Bruno Maciel
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 =/ 

nociam

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 04/02/13Posts: 541Gênero: Masculino

já esta ali mano em lua só observar.

BrunooMaciell

Bruno Maciel
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/08/11Posts: 1919Gênero: MasculinoChar no Tibia: Bruno Maciel
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 ??

Taiger

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/07/07Posts: 1140Gênero: Masculino
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

Dilooow

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/03/18Posts: 255

Muito peculiar esse ginásio bugados

BrunooMaciell

Bruno Maciel
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/08/11Posts: 1919Gênero: MasculinoChar no Tibia: Bruno Maciel
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

Taiger

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/07/07Posts: 1140Gênero: Masculino
Agora, BrunooMaciell disse:

Ja postei a script da sabrina kkkkkkkkkkk

serio? kkk nem percebi

 

nociam

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 04/02/13Posts: 541Gênero: Masculino
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

BrunooMaciell

Bruno Maciel
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/08/11Posts: 1919Gênero: MasculinoChar no Tibia: Bruno Maciel
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 

nociam

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 04/02/13Posts: 541Gênero: Masculino

linha 131 para min não faz sentido.

 

image.thumb.png.635a71f63cd05b7a85e327dd098554ab.png

BrunooMaciell

Bruno Maciel
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 27/08/11Posts: 1919Gênero: MasculinoChar no Tibia: Bruno Maciel
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 

nociam

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 04/02/13Posts: 541Gênero: Masculino

Cara tem Skype? se não baixa compartilha a tela e vamos ajustar isso.

Baixa tb sublime text

  • 1
  • 2