MY
npc

Como criar npc de missão

Por mylorc, 16 de out. de 2013 em Scripts

como criar npc de missão
resolvido
41
4.6k
mylorcM
17 de outubro de 2013 às 11:45

Já testou o que coloquei novamente?

Sim,deixe me perguntar você testou também?

O meu ot é 8.54 pode haver algum erro por isso?

LumusL
17 de outubro de 2013 às 12:08

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())
mylorcM
17 de outubro de 2013 às 12:15

Agora ele respondeu,como eu edito para que o player tenha que entregar 10 cockroach legs e receba 7 level de recompença?

LumusL
17 de outubro de 2013 às 12:17

@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 Outubro 17 por Fawz

mylorcM
17 de outubro de 2013 às 13:03

 

@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 Outubro 17 por mylorc

LumusL
17 de outubro de 2013 às 13:29

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 Outubro 17 por Fawz

mylorcM
17 de outubro de 2013 às 13:40

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())

LumusL
17 de outubro de 2013 às 13:46

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())
mylorcM
17 de outubro de 2013 às 13:56

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 Outubro 17 por mylorc

LumusL
17 de outubro de 2013 às 14:03

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.

RoksasR
17 de outubro de 2013 às 14:08

Tópico movido para a seção de dúvidas e pedidos resolvidos.