Ir para conteúdo

Featured Replies

Postado

Olá pessoal, 

 

Procurei muito pelo fórum e não encontrei o npc da forma que desejo e até tentei montar a script mas sem sucesso.

 

1. O que desejo é simples, um NPC que venda todas as bless de uma só vez (50k) na versão 8.6 e se possível que ele venda aol também (20k).

 

2. E aproveitando o tópico para não criar vários, também estou tentando montar um NPC que só interaja com o player (que vá contando a história do servidor) usando "Você poderia visitar a {forja} não é mesmo?!" 

 

Mas o parâmetro em questão eu não consigo usar.

 

O que criei está assim:

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Krulzorg" walkinterval="0" floorchange="0">
	<health now="100" max="100"/>
    <look type="300" corpse="8955"/>
	
	<interaction range="3" idletime="60">

    <interact keywords="hi" focus="1">
      <keywords>hello</keywords>

      <response text="Welcome to the invocation center of Draenor, noble |PLAYERVOCATION|. You will want to make a {sacrifice} or {quest} today?">
        <action name="idle" value="1"/>
      </response>
    </interact>
	
	<interact keywords="sacrifice" focus="1">
      <keywords>invocation</keywords>

      <response text="We need sacrifices to keep open portals. Go to the library when you can and read something.">
        <action name="idle" value="1"/>
      </response>
    </interact>
	
    <interact keywords="quest" focus="1">
      <keywords>quests</keywords>

      <response text="There are several quests to be performed. Talk to other summoners like me.">
        <action name="idle" value="1"/>
      </response>
    </interact>

    <interact keywords="bye" focus="0">
      <keywords>farewell</keywords>

      <response text="Good bye."/>
    </interact>
  </interaction>
</npc>

3. Quero desenvolver uma série de quests em que o NPC X envia o player para o destino, mas só se o players trouxer os itens a, b e c. Como desenvolvo esse NPC?

 

 Agradeço desde já.

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

Angelina_Me_by_msklotz.png

 

Atenciosamente,

Felipe Lotz.

 

  • Respostas 22
  • Visualizações 2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Tem um ( sobrando aí, tira ele, deixa: if getPlayerStorageValue(cid, 10274, 10275, 10276, 10277, 10278, 10279, 10280) == 1 then Se não der, use o and: if getPlayerStorageValue(cid, 10274) =

  • 1 - local tab = { price = 50, -- Preco BLESS, 50 = 50k price2 = 20 -- Preco AOL, 20 = 20k } local bless = {1, 2, 3, 4, 5} local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandl

  • local tab = { level = 100, pos = {x = 1071, y = 1135, z = 10}, storage = 6666 -- Storage } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) Npc

Postado
2 horas atrás, Felipe Lotz disse:

Olá pessoal, 

 

Procurei muito pelo fórum e não encontrei o npc da forma que desejo e até tentei montar a script mas sem sucesso.

 

1. O que desejo é simples, um NPC que venda todas as bless de uma só vez (50k) na versão 8.6 e se possível que ele venda aol também (20k).

 

2. E aproveitando o tópico para não criar vários, também estou tentando montar um NPC que só interaja com o player (que vá contando a história do servidor) usando "Você poderia visitar a {forja} não é mesmo?!" 

 

Mas o parâmetro em questão eu não consigo usar.

 

O que criei está assim:

 


<?xml version="1.0" encoding="UTF-8"?>
<npc name="Krulzorg" walkinterval="0" floorchange="0">
	<health now="100" max="100"/>
    <look type="300" corpse="8955"/>
	
	<interaction range="3" idletime="60">

    <interact keywords="hi" focus="1">
      <keywords>hello</keywords>

      <response text="Welcome to the invocation center of Draenor, noble |PLAYERVOCATION|. You will want to make a {sacrifice} or {quest} today?">
        <action name="idle" value="1"/>
      </response>
    </interact>
	
	<interact keywords="sacrifice" focus="1">
      <keywords>invocation</keywords>

      <response text="We need sacrifices to keep open portals. Go to the library when you can and read something.">
        <action name="idle" value="1"/>
      </response>
    </interact>
	
    <interact keywords="quest" focus="1">
      <keywords>quests</keywords>

      <response text="There are several quests to be performed. Talk to other summoners like me.">
        <action name="idle" value="1"/>
      </response>
    </interact>

    <interact keywords="bye" focus="0">
      <keywords>farewell</keywords>

      <response text="Good bye."/>
    </interact>
  </interaction>
</npc>

3. Quero desenvolver uma série de quests em que o NPC X envia o player para o destino, mas só se o players trouxer os itens a, b e c. Como desenvolvo esse NPC?

 

 Agradeço desde já.

 

1 -

local tab = {
	price = 50, -- Preco BLESS, 50 = 50k
	price2 = 20 -- Preco AOL, 20 = 20k
}
local bless = {1, 2, 3, 4, 5}

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
	if (msgcontains(msg, 'bless')) then
		talkState[talkUser] = 1
		selfSay('Deseja comprar todas as bles? Isso ira te custar '..tab.price..'k!', cid)
	elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		for i = 1, table.maxn(bless) do
		if getPlayerBlessing(cid, bless[i]) then
		selfSay('Voce ja tem todas as blessings.', cid)
		elseif (doPlayerRemoveMoney(cid, tab.price) == TRUE) then
		doPlayerAddBlessing(cid, bless[i])
		talkState[talkUser] = 0
		selfSay('Voce comprou todas as blessings.', cid)
		doSendMagicEffect(getPlayerPosition(cid), 49)
		elseif (doPlayerRemoveMoney(cid, tab.price) == FALSE) then
		selfSay('Voce nao tem dinheiro suficiente!', cid)
		end
		end
	elseif msgcontains(msg, 'aol') then
		talkState[talkUser] = 2
		selfSay('Deseja comprar uma AOL por '..tab.price2..'k?', cid)
	elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
		if (doPlayerRemoveMoney(cid, tab.price2) == TRUE) then
		doPlayerAddItem(cid,2173,1)
		talkState[talkUser] = 0
		doSendMagicEffect(getPlayerPosition(cid),6)
		selfSay('Aqui esta sua AOL!', cid)
		else
		selfSay('Voce nao tem dinheiro suficiente!', cid)
		end
		end
		return true
		end

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

2 - É um NPC fácil, você só precisa especificar as falas.

3 - 

local tab = {
	pos = {x = 1004, y = 1021, z = 7}, -- posição x, y, z do local a teleportar o player
	item = {5920, 50}, -- {id, quantidade}
	item2 = {5882, 30}, -- {id, quantidade}
	item3 = {11199, 20} -- {id, quantidade}
}

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
	if (msgcontains(msg, 'teleport')) then
		talkState[talkUser] = 1
		selfSay('Lembre-se.. Voce precisa de '..tab.item[2]..' '..getItemNameById(tab.item[1])..', '..tab.item2[2]..' '..getItemNameById(tab.item2[1])..' e '..tab.item3[2]..' '..getItemNameById(tab.item3[1])..' para teleportar, voce tem todos os itens?', cid)
	elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if (getPlayerItemCount(cid, tab.item[1]) >= tab.item[2] and
			getPlayerItemCount(cid, tab.item2[1]) >= tab.item2[2] and 
			getPlayerItemCount(cid, tab.item3[1]) >= tab.item3[2]) then
			doPlayerRemoveItem(cid, tab.item[1], tab.item[2])
			doPlayerRemoveItem(cid, tab.item2[1], tab.item2[2])
			doPlayerRemoveItem(cid, tab.item3[1], tab.item3[2])
			doTeleportThing(cid, tab.pos)
			doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
			selfSay('Voce foi teleportado!', cid)
		else
			talkState[talkUser] = 0
			selfSay('Perdao, mas voce nao tem os itens necessarios ainda.', cid)
		end
	elseif (msgcontains(msg, 'no') and talkState[talkUser] == 1) then
		talkState[talkUser] = 0
		selfSay('Pois bem, pegue os itens e retorne.', cid)
	end
	
	return true
end

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

 

Postado
  • Autor

@Kemmlly

 

Muito obrigado pelos 2 scripts camarada! Ficaram exatamente como queria. E sobre o segundo então eu sei que é simples e se fosse possível gostaria de aprender como fazer, porque vão ser vários NPCs assim e não quero dar todo trabalho pra você.

 

Mas como exemplo:

Citar

 

Player - hi

NPC - Olá |PLAYERNAME|, você veio me trazer um {sacrifício}?

Player - sacrificio

NPC - Precisamos de sacrificios para manter os portais abertos e também o acesso as {quests}.

Player - quests

NPC - ...

 

 

Nesse estilo, que a conversa fique no chat de npc e com as palavras destacadas.

 

Agradeço muito o que já fez! Fico o REP como agradecimento.

 

Angelina_Me_by_msklotz.png

 

Atenciosamente,

Felipe Lotz.

 

Postado

Pelo que vi, você tentou fazer o NPC todo no XML, o ideal é usar o XML só para chamar o script do NPC e nesse script fazer o resto. Se o NPC for só de fala, você usa o elseif para cada fala e registra o talkState[talkUser] = para gravar a mensagem falada, exemplo;

 

if (msgcontains(msg, 'sacrificio')) then
talkState[talkUser] = 1
selfSay('Precisamos de sacrificios para manter os portais abertos e também o acesso as {quests}.', cid)
	
elseif (msgcontains(msg, 'quest') and talkState[talkUser] == 1) then
selfSay('Texto que o npc vai falar com {palavra} pra frase 2.', cid)
talkState[talkUser] = 2

elseif (msgcontains(msg, 'palavra') and talkState[talkUser] == 2) then
selfSay('Texto que o npc vai falar com {palavra} pra frase 3.', cid)
talkState[talkUser] = 3

 

Nesse caso, se um player chegar no NPC e falar diretamente QUEST, como o talkState[talkUser]  não é igual a 1 ainda, ele não falará nada, mas se falar as frases na ordem, o NPC irá contar toda a história. 

 

Acredito que seja o suficiente pra você criar seu NPC.

 

Postado
  • Autor
2 minutos atrás, Kemmlly disse:

Pelo que vi, você tentou fazer o NPC todo no XML, o ideal é usar o XML só para chamar o script do NPC e nesse script fazer o resto. Se o NPC for só de fala, você usa o elseif para cada fala e registra o talkState[talkUser] = para gravar a mensagem falada, exemplo;

 


if (msgcontains(msg, 'sacrificio')) then
talkState[talkUser] = 1
selfSay('Precisamos de sacrificios para manter os portais abertos e também o acesso as {quests}.', cid)
	
elseif (msgcontains(msg, 'quest') and talkState[talkUser] == 1) then
selfSay('Texto que o npc vai falar com {palavra} pra frase 2.', cid)
talkState[talkUser] = 2

elseif (msgcontains(msg, 'palavra') and talkState[talkUser] == 2) then
selfSay('Texto que o npc vai falar com {palavra} pra frase 3.', cid)
talkState[talkUser] = 3

 

Nesse caso, se um player chegar no NPC e falar diretamente QUEST, como o talkState[talkUser]  não é igual a 1 ainda, ele não falará nada, mas se falar as frases na ordem, o NPC irá contar toda a história. 

 

Acredito que seja o suficiente pra você criar seu NPC.

 

 

 

É isso mesmo, muito obrigado pela ajuda!

Angelina_Me_by_msklotz.png

 

Atenciosamente,

Felipe Lotz.

 

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