Ir para conteúdo
  • 0

Como criar npc de missão


mylorc

Pergunta

Olá,preciso criar um npc de missão,alguém me ajuda?

Assim,preciso de um npc que recolha 3 itens e de recompença ele dara ao player xp (do lvl 1 irá para o lvl 8).

Ajudem por favor.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Sim testei e aqui ele está respondendo... estranho vou verificar novamente, peço que aguarde.


Agora vai funcionar, achei o erro:

 
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 stg = 1458
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid 

if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) >= 1 then
	selfSay('Você já me ajudou.', cid)
	talkState[talkUser] = 0
end
 if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) <= 0 then 
	if getPlayerItemCount(cid, item1, qtd) then 
		setPlayerStorageValue(cid, stg, 1) 
		selfSay('Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!', cid) 
		doPlayerAddLevel(cid, level)
	else 
		selfSay('Você não tem '..qtd..' {"..getItemNameById(item1).."s}. Volte aqui quando tiver', cid)
	end 
end 
return TRUE
end

 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o comentário
Compartilhar em outros sites

  • 0

@Edit

Depois de quebrar a cabeça aqui dar reload 500000x agora deu certíssimo!

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 

-----------#Início das configurações#------------
local stg = 14278 -- storage da quest, para não fazer 2x.
local item1 = 2160 -- id do item
local qtd = 3 -- quantidade a ser removida.
local level = 7 -- quantidade de level a dar ao jogador.
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
-----------#Fim das configurações#------------
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) >= 1 then
	selfSay('Você já me ajudou, sou grato por isso!', cid)
	talkState[talkUser] = 0 
end 
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) <= 0 then 
	if (getPlayerItemCount(cid, item1) == qtd) then
		selfSay('Você não tem '..qtd..' {'..getItemNameById(item1)..'s}. Volte aqui quando tiver', cid)
	elseif doPlayerRemoveItem(cid, item1, qtd) then
		setPlayerStorageValue(cid, stg, 1) 
		selfSay('Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!', cid) 
		doPlayerAddLevel(cid, level)
	end 
end
return true 
end  

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Editado por Fawz
Link para o comentário
Compartilhar em outros sites

  • 0

 

@Edit

Depois de quebrar a cabeça aqui dar reload 500000x agora deu certíssimo!

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 

-----------#Início das configurações#------------
local stg = 14278 -- storage da quest, para não fazer 2x.
local item1 = 2160 -- id do item
local qtd = 3 -- quantidade a ser removida.
local level = 7 -- quantidade de level a dar ao jogador.
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
-----------#Fim das configurações#------------
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) >= 1 then
	selfSay('Você já me ajudou, sou grato por isso!', cid)
	talkState[talkUser] = 0 
end 
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) <= 0 then 
	if (getPlayerItemCount(cid, item1) == qtd) then
		selfSay('Você não tem '..qtd..' {'..getItemNameById(item1)..'s}. Volte aqui quando tiver', cid)
	elseif doPlayerRemoveItem(cid, item1, qtd) then
		setPlayerStorageValue(cid, stg, 1) 
		selfSay('Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!', cid) 
		doPlayerAddLevel(cid, level)
	end 
end
return true 
end  

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

Porém agora não esta dando novamente,o player fala hi e ele responde,mas quando fala missão ou missao o npc não responde nada.

 

Creio que o problema possa estar nesta localidade:

local stg = 14278

local item1 = 8710

local qtd = 10

local level = 7

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

local msg = string.lower(msg)

Editado por mylorc
Link para o comentário
Compartilhar em outros sites

  • 0

Não, não, eu testei aqui e funcionou da mesma forma.

13:29 ADM Master Viciado [41578: hi
13:29 Dona dos Portais: Como vai? ADM Master Viciado, Você deseja uma missao?
13:29 ADM Master Viciado [41578: missao
13:29 Dona dos Portais: Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!
13:29 ADM Master Viciado [41585: missao
13:29 Dona dos Portais: Você já me ajudou, sou grato por isso!
Editado por Fawz
Link para o comentário
Compartilhar em outros sites

  • 0

Estou postando o modo que esta aqui,caso esteje algo errado me informe por favor:

 

XML ->

 

<?xml version="1.0" encoding="ISO-8859-1"?>

<npc name="Force" script="data/npc/scripts/missao.lua" walkinterval="3000" floorchange="0">

<health now="100" max="100"/>

<look type="132" head="20" body="39" legs="45" feet="7" addons="0"/>

<parameters>

<parameter key="message_greet" value="Olá |PLAYERNAME|. Eu tenho uma {missão} para você." />

<parameter key="message_farewell" value="Até mais, |PLAYERNAME|!"/>

</parameters>

</npc>

 

LUA ->

 

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 stg = 14278

local item1 = 8710

local qtd = 10

local level = 7

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

local msg = string.lower(msg)

 

if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) >= 1 then

selfSay('Você já me ajudou, sou grato por isso!', cid)

talkState[talkUser] = 0

end

if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) <= 0 then

if (getPlayerItemCount(cid, item1) == qtd) then

selfSay('Você não tem '..qtd..' {'..getItemNameById(item1)..'s}. Volte aqui quando tiver', cid)

elseif doPlayerRemoveItem(cid, item1, qtd) then

setPlayerStorageValue(cid, stg, 1)

selfSay('Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!', cid)

doPlayerAddLevel(cid, level)

end

end

return true

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

Link para o comentário
Compartilhar em outros sites

  • 0

Substitua esse seu lua por este:

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 

-----------#Início das configurações#------------
local stg = 14278 -- storage da quest, para não fazer 2x.
local item1 = 8710 -- id do item
local qtd = 10 -- quantidade a ser removida.
local level = 7 -- quantidade de level a dar ao jogador.
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
-----------#Fim das configurações#------------
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) >= 1 then
	selfSay('Você já me ajudou, sou grato por isso!', cid)
	talkState[talkUser] = 0 
end 
if(msgcontains(msg, 'missao')) and getPlayerStorageValue(cid, stg) <= 0 then 
	if (getPlayerItemCount(cid, item1) == qtd) then
		selfSay('Você não tem '..qtd..' {'..getItemNameById(item1)..'s}. Volte aqui quando tiver', cid)
	elseif doPlayerRemoveItem(cid, item1, qtd) then
		setPlayerStorageValue(cid, stg, 1) 
		selfSay('Muito obrigado, como recompensa aqui está sua experiência por ter me ajudado!', cid) 
		doPlayerAddLevel(cid, level)
	end 
end
return true 
end  

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o comentário
Compartilhar em outros sites

  • 0

Troquei porém ainda não resolveu:

13:55 Force: Olá Boy Short. Eu tenho uma missão para você.

13:55 Boy Short [8]: missao

13:55 Boy Short [8]: missão

13:55 Boy Short [8]: missão

 

O que poderei fazer?

 

 

 

Achei o erro haha na verdade ta tudo certo,só preciso editar o inicio para por um aviso do que precisa!

Obrigado!

Editado por mylorc
Link para o comentário
Compartilhar em outros sites

  • 0

Eita kkk' tópico ficou quente uUASUSAHUA fico feliz em ter te ajudado, sou novato neste ramo ai tenho algumas dúvidas ainda maaas nada que eu não sevire e faça.

 

Reportado para que movam!

 

Abraços.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...