Ir para conteúdo
  • Cadastre-se

Pedido [TFS 0.4 860] {Pedido} NPC de quest de 3 etapas


Posts Recomendados

.Qual servidor ou website você utiliza como base? 

TFS 0.4 860

Qual o motivo deste tópico? 

 Gostaria de pedir um script de NPC de 3 etepas que funcionará da seguinte forma:

 Player entra na sala e fala, hi training 1, NPC vai teletransportar ele pra primeira era, ele percorre, vai até o final, pega o storage e volta no portal.

Fala com NPC novamente, hi, training 2, NPC teletranspota ele para a segunda área, e mesma coisa, vai ate o final pega storage e volta no portal.

E por fim a terceira vez, mesma coisa.

 

Então vem o seguinte, caso o playerr morra, ele volta e vai continuar do ultimo storage, ja q ele por exemplo morreu na parte 3, o npc checa, storage 1 ok, 2 ok, 3 ainda nao tem, 

e manda para a area onde vai pegar o storage 3,

 Pegando storage 3 ele vai ser mandado para o final boss da quest, onde ao matar, vai ganhar o storage 4, se ele morrer nessa parte, e voltar no NPC ele vai entender q nao tem o storage 4 e vai mandar pra enfrentar o final boss novamente.

 

Em resumo, NPC checa storage 1,se falso {nao tem o storage} executa, se verdadeiro, passa pra o proximo

checa storage 1, se verdadeiro joga na area 2 onde o jogador pegara storage 2

checa storage 2 storage 2, se verdadeiro executa, joga na area 3 onde jogador pegará storage 3

checa storage 3, se verdadeiro executa, joga na area do final boss,

 

Imagino que não seja necessário o NPC setar nenhum storage, ja que o jogador vai pegar o storage na área clicando num local. 

 Eu poderia fazer isso com um NPC de saga, porem teria que fazer 3 npcs, e tres areas iguais, pra dar a sensação de ele voltar sempre para o mesmo lugar. no entanto se ele morrer, vai ficar bugado, pq ele vai ter que passar pelas areas anteriores, como ele ja passou, npc nao vai transportar ele.

Dai se alguem conseguir fazer dessa forma que citei acima, ficaria muito grato.

 

Editado por underpunk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@underpunk Boa tarde, seria isso?

 

npc.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Stages" script="data/npc/scripts/stages.lua" walkinterval="2000" floorchange="0">
	<health now="100" max="100"/>
	<look type="134" head="78" body="88" legs="0" feet="88" addons="3"/>
</npc>

 

data/npcs/scripts

loadmodlib('npc_stages_config')

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local stage = nil

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid)			end
function onCreatureDisappear(cid)			npcHandler:onCreatureDisappear(cid)			end
function onCreatureSay(cid, type, msg)			npcHandler:onCreatureSay(cid, type, msg)		end
function onThink()					npcHandler:onThink()					end

function creatureSayCallback(cid, type, msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end

	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

		if (getPlayerStorageValue(cid, storage) == (#stages + 1)) then
			selfSay('Voce ja completou todos os estagios', cid)
			return
		end

		for storage, data in pairs(stages) do
			if (msg == data.msg) then
				data.storage = storage
				stage = data
				selfSay('Voce deseja ir para o ' ..data.msg.. ' ?', cid)
				talkState[talkUser] = 1
				return
			end
		end

		if(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then

			if (getPlayerStorageValue(cid, storage) <= 0) then
				setPlayerStorageValue(cid, storage, 1)
			end

			if (getPlayerStorageValue(cid, storage) == stage.storage) then
				doTeleportThing(cid, stage.teleport)
			else
				selfSay('Voce nao tem permissao para ir no ' ..stage.msg, cid)
			end

			stage = nil
			talkState[talkUser] = 0
		end

	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

criar um arquivo chamado npc_stages_config.lua na pasta LIB e adicionar isso nele, aqui ficará toda a configuração dos estágios caso você queira adicionar mais de 3

storage = 12000
bossName = "Demon"

-- Seguir na sequencia entre cochetes 1, 2, 3, 4 ...
stages = {
    [1] = { msg = 'training 1', teleport = { x=156,y=49,z=8 } },
    [2] = { msg = 'training 2', teleport = { x=156,y=54,z=9 } },
    [3] = { msg = 'training 3', teleport = { x=141,y=61,z=6 } }
    --[4] = { msg = 'training 4', teleport = { x=0,y=0,z=0 } }
}

 

data/actions/scripts

loadmodlib('npc_stages_config')

function onUse(cid, item, fromPosition, itemEx, toPosition)
	setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1)
	return true
end

 

actions.xml

<action actionid="13000" script="stages.lua"/>

 

data/creaturescripts/scripts

loadmodlib('npc_stages_config')

function onKill(cid, target)
	local monsterName = getCreatureName(target)
	if (string.lower(monsterName) == string.lower(bossName)) then
		setPlayerStorageValue(cid, storage, (#stages + 1))
	end
	return true
end

 

creaturescripts.xml

<event type="kill" name="BossStages" event="script" value="stages.lua"/>

 

data/creaturescripts/scripts/login.lua

registerCreatureEvent(cid, "BossStages")

 

Link para o post
Compartilhar em outros sites

valeu vou testar, eu tinha feito uma gambiarra com portais. 

bom, nao era exatamente assim, as alavancas seriam mais pra dar o storage pra poder ir pra proxima parte pq o npc iria checar o storage anterior, no caso eu posso por o storage no proprio mob, "como e fiz nos portais, mato o mob e o script ja me da o storage, pq em cada caminho, vai ter um tipo de monstro, mas gostei desse script, da pra usar em outras quests, e talvez ate sem precisar da action, dando o storage no proprio mob

 

Editado por underpunk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@underpunk

Npc Training
 

Spoiler




local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid


local era1 = {x=111, y=111, z=1}
local era2 = {x=111, y=111, z=1}
local era3 = {x=111, y=111, z=1}
local boss = {x=111, y=111, z=1}
local storage = 111

function Training(cid) 
if getPlayerStorageValue(cid,storage) == -1 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,era1) 
talkState[talkUser] = 0
return false
end

if getPlayerStorageValue(cid,storage) == 1 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,era1) 
talkState[talkUser] = 0
return false
end

if getPlayerStorageValue(cid,storage) == 2 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,era3) 
talkState[talkUser] = 0
return false
end

if getPlayerStorageValue(cid,storage) == 3 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,boss) 
talkState[talkUser] = 0
return false
end
end

if getPlayerLevel(cid) < 1 then
selfSay("")
talkState[talkUser] = 0
elseif (msgcontains(msg, 'training') or msgcontains(msg, 'Training')) then
selfSay("Entao vamos? ({yes})", cid)
talkState[talkUser] = 1
elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if Training(cid) then
elseif msg == "no" and talkState[talkUser] >= 1 then
selfSay("Adeus!!", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return TRUE
end  
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())     

 


Alavanca1
 

Spoiler






function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) < 1 then
		setPlayerStorageValue(cid, 111, 1)
		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
	end
	return true
end

 


Alavanca2
 

Spoiler






function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) < 1 then
		setPlayerStorageValue(cid, 111, 2)
		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
	end
	return true
end

 


Alavanca 3
 

Spoiler






function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) < 1 then
		setPlayerStorageValue(cid, 111, 3)
		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
	end
	return true
end

 



Bem Pelo Que Entendi
Hi, Training, Yes
Teleportado Para Era 1 Clicou Na Alavanca E Voltou

Hi, Training, Yes
Teleportado Para Era 2 Clicou Na Alavanca E Voltou

Hi, Training, Yes
Teleportado Para Era 3 Clicou Na Ultima Alavanca.

Hi, Training, Yes
Teleportado Para Sala Do Boss

-- Não Testei Ve Ai Se Funciona

Editado por Thony D. Serv (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 22/04/2022 em 10:50, Thony D. Serv disse:

@underpunk

Npc Training
 

  Mostrar conteúdo oculto





local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid


local era1 = {x=111, y=111, z=1}
local era2 = {x=111, y=111, z=1}
local era3 = {x=111, y=111, z=1}
local boss = {x=111, y=111, z=1}
local storage = 111

function Training(cid) 
if getPlayerStorageValue(cid,storage) == -1 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,era1) 
talkState[talkUser] = 0
return false
end

if getPlayerStorageValue(cid,storage) == 1 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,era1) 
talkState[talkUser] = 0
return false
end

if getPlayerStorageValue(cid,storage) == 2 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,era3) 
talkState[talkUser] = 0
return false
end

if getPlayerStorageValue(cid,storage) == 3 then
selfSay("FRASE SE QUISER ALGUMA", cid)
doTeleportThing(cid,boss) 
talkState[talkUser] = 0
return false
end
end

if getPlayerLevel(cid) < 1 then
selfSay("")
talkState[talkUser] = 0
elseif (msgcontains(msg, 'training') or msgcontains(msg, 'Training')) then
selfSay("Entao vamos? ({yes})", cid)
talkState[talkUser] = 1
elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if Training(cid) then
elseif msg == "no" and talkState[talkUser] >= 1 then
selfSay("Adeus!!", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return TRUE
end  
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())     

 


Alavanca1
 

  Mostrar conteúdo oculto







function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) < 1 then
		setPlayerStorageValue(cid, 111, 1)
		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
	end
	return true
end

 


Alavanca2
 

  Mostrar conteúdo oculto







function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) < 1 then
		setPlayerStorageValue(cid, 111, 2)
		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
	end
	return true
end

 


Alavanca 3
 

  Mostrar conteúdo oculto







function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) < 1 then
		setPlayerStorageValue(cid, 111, 3)
		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)
	end
	return true
end

 



Bem Pelo Que Entendi
Hi, Training, Yes
Teleportado Para Era 1 Clicou Na Alavanca E Voltou

Hi, Training, Yes
Teleportado Para Era 2 Clicou Na Alavanca E Voltou

Hi, Training, Yes
Teleportado Para Era 3 Clicou Na Ultima Alavanca.

Hi, Training, Yes
Teleportado Para Sala Do Boss

-- Não Testei Ve Ai Se Funciona

interessante, bom o anterior, ao usar a action nao funcionou, nao sei pq, dai eu armenguei e funcionou como eu queria, botei um script no monstro que dava o storage quando eu matava, entao o NPC dava o storage value 1, o monstro 1 storage 2, o monstro 2 storage 3, e o monstro 3 storage 4, assim fechando o ciclo, botei um step in com storage XXX <= 3, assim so me permitindo entrar com storage value 4. vou testar este seu.

EDIT - O script fucionou direitinho, mas nao usei alavanca, estou usando o script no monstro, 

Editado por underpunk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
3 horas atrás, underpunk disse:

interessante, bom o anterior, ao usar a action nao funcionou, nao sei pq, dai eu armenguei e funcionou como eu queria, botei um script no monstro que dava o storage quando eu matava, entao o NPC dava o storage value 1, o monstro 1 storage 2, o monstro 2 storage 3, e o monstro 3 storage 4, assim fechando o ciclo, botei um step in com storage XXX <= 3, assim so me permitindo entrar com storage value 4. vou testar este seu.

EDIT - O script fucionou direitinho, mas nao usei alavanca, estou usando o script no monstro, 

 

Que bom que funcionou, espero ter entendido direito o seu pedido, antes você tinha pedido com alavanca por isso fiz daquela forma, se tivesse avisado que seria por mob tbm conseguiria fazer, mas faça bom uso aí do script manin, sou novo com essas paradas então fiz e não sabia se ia funcionar direitinho que bom que deu tudo certo ??

Editado por Thony D. Serv (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Pra quem é novo, funcionou direitinho, tinha um probleminha q eu botei pra ele dar item na etapa 4, mas ele dava sempre q eu dava quest, yes, entao adicionei etapa 5 só deixando mensagem que nao tinha mais nada pra fazer ali. assim fechando a quest. 

 Sobre as alavancas, é q posteriormente achei mais interessante botar o script direto no mob, obrigado aos dois, usarei os 2 scripts. em quests diferentes. fazer essa quest consegui material pra outras quests.

Editado por koyotestark (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por LasseXeterno
      Então, estou tentando adicionar uma nova "race" no meu Ot de base Cyan, tentei seguir 3 tutoriais aqui do tibiaking, um sobre race, porém nos códigos do meu servidor não tem o constant.h e nem o monster.cpp. E o outro tutorial, eu fiz tudo que ele pediu e quando entrei no game para testar, funcionava os golpes e as imunidades, porém não aparecia o número do dano e nem a cor.  Usei esse tutorial como base: 
      Pois ele é derivado. E o outro tutorial que usei foi: 
      Porém nesse, não consegui achar a const.h, e quando fui nos arquivos do creaturescript e adicionei uma cor nova a "COLOR_FAIRY", quando abro o jogo, os pokemons que seriam teoricamente "fada", o que eu usei de teste foi a Clefable. A Clefable tomava IK e dava IK no seu atk do tipo fada. 
      Além de que, o meu erro principal é esse: Warning - Monsters::loadMonster] Unknown race type fairy. (data/monster/pokes/geracao 1/Clefable.xml)
       Pois como eu já disse, não consigo achar onde adicionar uma nova race.

    • Por yuriowns
      Salve rapazes, tranquilo? Preciso de ajuda pra colocar para os npc's que vendem pots verificarem quantos itens possuem no tile em que o player está e se tiver com +80 itens no sqm, o npc avisa e não vende nada até o player ir em um sqm com menos de 80 itens no chão.
       
    • Por A.Mokk
      .Qual servidor ou website você utiliza como base? 
      TFS 0.4
      Qual o motivo deste tópico? 
      Bom pessoal, a algumas semanas atras eu joguei um servidor que havia sistema de imbuimento sendo 8.60, no servidor se utilizava a spellwand para encantar as armas, os comandos eram dado no canal Imbuiment... Gostaria de saber se alguém teria como disponibilizar algum sistema de imbuimento, já procurei pra caramba aqui no fórum mas tudo que encontro é pra versões acima da que eu uso.
       
    • Por Mateus Robeerto
      Não sei se aqui é a área ou algum local para solicitar a alteração do email antigo... Não lembro mais a senha dele, nem a resposta secreta para acessar. Peço a algum administrador ou moderador para, por favor, alterar o email para o novo.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo