Ir para conteúdo

Featured Replies

Postado

Boa tarde, estou criando um NPC duel para pokemon, Rocket, esta tudo funcionando, porém para ele iniciar o duel, é preciso falar hi, duel, yes. Eu gostaria que quando o player (que tem a storage 123456) se aproximasse 5 sqm de distancia do npc, ele iniciasse o duel.

 

Segue o script do npc.

local focus = 0
local max_distance = 4
local talk_start = 0
local conv = 0
local fighting = false
local challenger = 0
local pokeNpc = nil
local pokeChalenger = nil
local afk_limit_time = 15	-- seconds
local afk_time = 0		-- don't change
local battle_turn = 0		-- don't change
local challenger_turn = 0	-- don't change


local function doSummonGymPokemon(npc)
	battle_turn = battle_turn + 1
	local this = npc
	if #getCreatureSummons(this) >= 1 or focus == 0 then return true end
	local it = wildRocket[math.random(1, 5)][battle_turn]
	pokeNpc = doSummonCreature(it.name, getThingPos(this))
	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(pokeNpc), balleffect)

	setPlayerStorageValue(pokeNpc, 990, this)
	setPlayerStorageValue(pokeNpc, 991, "battle")
	setPlayerStorageValue(this, 990, 1)
	addEvent(adjustWildPoke, 15, pokeNpc, it.optionalLevel)
	mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", it.name)
	doCreatureSay(this, mgo, 1)
	fighting = true
end


local function doWinDuel(cid, npc)
         local outfit = getCreatureOutfit(getThis())
	local this = npc
                  ----------------------------------------
         if outfit.lookType == 605 then      --verifica se o npc eh female.. ;p
             monster = doCreateMonster("aRocketFemale", getThingPos(this))
		doRemoveCreature(this)
         else
             monster = doCreateMonster("aRocket", getThingPos(this))
		doRemoveCreature(this)

         end

         ----------------------------------------
         --doCloneOut(monster, outfit)
         addEvent(beDrunk, 100, monster)
	     addEvent(doSummonGymPokemon, 1000, getThis())
   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 Surge and I'm Vermilion'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 Thunder 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 "..#wildRocket.." 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)
		setPlayerStorageValue(cid, 999, 1)
		if #getCreatureSummons(cid) >= 1 then
		local pk = getCreatureSummons(cid)[1]
		setPlayerStorageValue(pk, 990, 1)
		end
		selfSay("Yea, let's fight!")
		talk_start = os.clock()
		setPlayerStorageValue(getThis(), 990, 1)
		addEvent(doSummonGymPokemon, 5, getThis())
		conv = 3
	return true
	end

	if isNegMsg(msg) and conv == 2 and focus == cid then
		focus = 0
		selfSay("It is better for you to refuse a battle against me!")
	return true
	end

	local function doRemove(npc)
	local it = wildRocket[math.random(1, 5)][battle_turn]
		local balleffect = pokeballs["normal"].effect
	if it.ball and pokeballs[it.ball] then
		balleffect = pokeballs[it.ball].effect
	end
	doSendMagicEffect(getThingPos(pokeNpc), balleffect)
	doRemoveCreature(pokeNpc)
	end

	if msgcontains(msg, 'bye') and focus == cid then
		selfSay('Bye and do your best trainer!')
		setPlayerStorageValue(focus, 990, -1)
		setPlayerStorageValue(focus, 999, -1)
		if #getCreatureSummons(focus) >= 1 then
		local pk = getCreatureSummons(focus)[1]
		setPlayerStorageValue(pk, 990, -1)
		end
	doSendMagicEffect(getThingPos(pokeNpc), balleffect)
	doRemoveCreature(pokeNpc)
		focus = 0
	return true
	end
end

local afk_warning = false

function checkPoke(player, poke)

end

function onThink()

	if focus == 0 then
		selfTurn(2)
		fighting = false
		challenger = 0
		challenger_turn = 0
		battle_turn = 0
		afk_time = 0
		afk_warning = false
		setPlayerStorageValue(getThis(), 990, -1)
		return true
	else
		if not isCreature(focus) then
			focus = 0
			return true
		end
		if fighting then
			talk_start = os.clock()

			if #getCreatureSummons(challenger) >= 1 then
				if pokeChalenger == nil then
					pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1])
					afk_time = 0
					challenger_turn = challenger_turn + 1
				elseif pokeChalenger == getCreatureName(getCreatureSummons(challenger)[1]) then
					afk_time = 0
				else
					afk_time = 0
					challenger_turn = challenger_turn + 1
					pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1])
				end
			else
					afk_time = afk_time + 0.5
			end

			if afk_time > afk_limit_time then
				setPlayerStorageValue(focus, 990, -1)
		setPlayerStorageValue(focus, 999, -1)
		doRemoveCreature(pokeNpc)
                              	focus = 0
				selfSay("I have waited too long, come back when you are ready!")
			return true
			end

			if not afk_warning and afk_time > afk_limit_time / 2 then
				selfSay("Where's your pokemon? Let's fight!")
				afk_warning = true
			end


			if getPlayerStorageValue(getThis(), 990) == -1 then
				if battle_turn >= #wildRocket then
					addEvent(doWinDuel, 1000, focus, getThis())
					addEvent(doCreateNpc, 300000, ".aRocket", getThingPos(getThis()))
					setPlayerStorageValue(focus, 990, -1)
					focus = 0
				return true
				end
				setPlayerStorageValue(getThis(), 990, 1)
				addEvent(doSummonGymPokemon, 1000, getThis())
			end

			if challenger_turn >= 7 or challenger_turn > #wildRocket 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)
		setPlayerStorageValue(focus, 999, -1)
			if #getCreatureSummons(focus) >= 1 then
		local pk = getCreatureSummons(focus)[1]
		setPlayerStorageValue(pk, 990, -1)
		end
		doRemoveCreature(pokeNpc)
			focus = 0
	selfSay("You were strong enough to win this battle!")
		return true
		end

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

ninguém?

                                                                                               1zcn2mb.jpg

 

                                                                                                                       Danera Global Server

                                                                                                                       Versão: 10.77 - 10.79

                                                                                                                       Sem Items VIP

                                                                                                                       Venha se divertir

Postado

local focus = 0
local max_distance = 4
local talk_start = 0
local conv = 0
local fighting = false
local challenger = 0
local pokeNpc = nil
local pokeChalenger = nil
local afk_limit_time = 15 -- seconds
local afk_time = 0 -- don't change
local battle_turn = 0 -- don't change
local challenger_turn = 0 -- don't change
local exhStorage = 19182
local exhaust = 15                      --Tempo, em segundos, para o NPC atacar o jogador novamente.  
 
 
local function doSummonGymPokemon(npc)
    battle_turn = battle_turn + 1
    local this = npc
    if #getCreatureSummons(this) >= 1 or focus == 0 then return true end
    local it = wildRocket[math.random(1, 5)][battle_turn]
    pokeNpc = doSummonCreature(it.name, getThingPos(this))
    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(pokeNpc), balleffect)
 
    setPlayerStorageValue(pokeNpc, 990, this)
    setPlayerStorageValue(pokeNpc, 991, "battle")
    setPlayerStorageValue(this, 990, 1)
    addEvent(adjustWildPoke, 15, pokeNpc, it.optionalLevel)
    mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", it.name)
    doCreatureSay(this, mgo, 1)
    fighting = true
end
 
 
local function doWinDuel(cid, npc)
    local outfit = getCreatureOutfit(getThis())
    setPlayerStorageValue(cid, exhStorage, os.time() + exhaust)
    local this = npc
    ----------------------------------------
    if outfit.lookType == 605 then      --verifica se o npc eh female.. ;p
        monster = doCreateMonster("aRocketFemale", getThingPos(this))
        doRemoveCreature(this)
    else
        monster = doCreateMonster("aRocket", getThingPos(this))
        doRemoveCreature(this)
    end
 
    ----------------------------------------
    --doCloneOut(monster, outfit)
    addEvent(beDrunk, 100, monster)
    addEvent(doSummonGymPokemon, 1000, getThis())
end
 
local afk_warning = false
 
function checkPoke(player, poke)
 
end
 
function onThink()
    if challenger == 0 then
        local s = getSpectators(getThingPos(getThis()), 5, 5)
        table.remove(s, getThis())
        if #s > 0 then
            for i = 1, #s do
                if isPlayer(s[i]) and getPlayerStorageValue(s[i], 123456) > -1 and getPlayerStorageValue(s[i], exhStorage) < os.time() then        
                    challenger = s[i]
                    focus = s[i]
                    setPlayerStorageValue(s[i], 990, 1)
                    selfSay(getCreatureName(s[i])..", let's fight!")
                    talk_start = os.clock()                   
                    addEvent(doSummonGymPokemon, 850, getThis())
                    break
                end
            end
        end
    end
    if focus == 0 then
        selfTurn(2)
        fighting = false
        challenger = 0
        challenger_turn = 0
        battle_turn = 0
        afk_time = 0
        afk_warning = false
        setPlayerStorageValue(getThis(), 990, -1)
        return true
    else
        if not isCreature(focus) then
            focus = 0
            return true
        end
        if fighting then
            talk_start = os.clock()
            
            if #getCreatureSummons(challenger) >= 1 then
                if pokeChalenger == nil then
                    pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1])
                    afk_time = 0
                    challenger_turn = challenger_turn + 1
                elseif pokeChalenger == getCreatureName(getCreatureSummons(challenger)[1]) then
                    afk_time = 0
                else
                    afk_time = 0
                    challenger_turn = challenger_turn + 1
                    pokeChalenger = getCreatureName(getCreatureSummons(challenger)[1])
                end
            else
                afk_time = afk_time + 0.5
            end
            if afk_time > afk_limit_time then
                setPlayerStorageValue(focus, 990, -1)
                setPlayerStorageValue(focus, 999, -1)
                doRemoveCreature(pokeNpc)
                focus = 0
                selfSay("I have waited too long, come back when you are ready!")
                setPlayerStorageValue(cid, exhStorage, os.time() + exhaust)
                return true
            end
 
            if not afk_warning and afk_time > afk_limit_time / 2 then
                selfSay("Where's your pokemon? Let's fight!")
                afk_warning = true
            end
 
 
            if getPlayerStorageValue(getThis(), 990) == -1 then
                if battle_turn >= #wildRocket then
                    addEvent(doWinDuel, 1000, focus, getThis())
                    addEvent(doCreateNpc, 300000, ".aRocket", getThingPos(getThis()))
                    setPlayerStorageValue(focus, 990, -1)
                    focus = 0
                    return true
                end
                setPlayerStorageValue(getThis(), 990, 1)
                addEvent(doSummonGymPokemon, 1000, getThis())
            end
 
            if challenger_turn >= 7 or challenger_turn > #wildRocket then
                selfSay("You lost our duel! Maybe some other time you'll defeat me.")
                setPlayerStorageValue(focus, 990, -1)
                setPlayerStorageValue(focus, exhStorage, os.time() + exhaust)
                focus = 0
                return true
            end
        end
 
        local npcpos = getThingPos(getThis())
        local focpos = getThingPos(focus)
 
        if npcpos.z ~= focpos.z then
            setPlayerStorageValue(focus, 990, -1)
            setPlayerStorageValue(focus, exhStorage, os.time() + exhaust)
            focus = 0
            selfSay("Bye then.")
            return true
        end
 
        if (os.clock() - talk_start) > 30 then
            selfSay("Good bye and keep training!")
            setPlayerStorageValue(focus, exhStorage, os.time() + exhaust)
            setPlayerStorageValue(focus, 990, -1)
            focus = 0
        end
 
        if getDistanceToCreature(focus) > max_distance then
            setPlayerStorageValue(focus, 990, -1)
            setPlayerStorageValue(focus, 999, -1)
            setPlayerStorageValue(focus, exhStorage, os.time() + exhaust)
            if #getCreatureSummons(focus) >= 1 then
                local pk = getCreatureSummons(focus)[1]
                setPlayerStorageValue(pk, 990, -1)
            end
            doRemoveCreature(pokeNpc)
            focus = 0
            selfSay("You were strong enough to win this battle!")
            return true
        end
 
        local dir = doRedirectDirection(getDirectionTo(npcpos, focpos))
        selfTurn(dir)
    end
    return true
end

Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo