NPC 1
npc_um.xml
<?xml version="1.0"?>
<npc name="Npc Um" script="npc_um.lua" walkinterval="2000">
<mana now="800" max="800" />
<health now="200" max="200" />
<look type="132" head="0" body="0" legs="0" feet="0" addons="3" />
<parameters>
<parameter key="message_greet" value="Olá |PLAYERNAME|, blablabla bla bla bla... Você parece estar {preparado} para a sua jornada." />
<parameter key="message_farewell" value="Ate mais, |PLAYERNAME|!" />
<parameter key="message_walkaway" value="Valeu!" />
</parameters>
</npc>
npc_um.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 talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local tab = { manual = 2160,
storage1 = 1234,
}
local mark = { status = true, -- se vai colocar marca no mapa? coloque false se não.
posCharlie = {x = 123, y = 456, z = 7} , -- posiçao da marca no mapa
charlieMark = 2, -- icone da marca
charieDesc = "oii" -- descriçao
}
--[[
MAPMARK_TICK = 0
MAPMARK_QUESTION = 1
MAPMARK_EXCLAMATION = 2
MAPMARK_STAR = 3
MAPMARK_CROSS = 4
MAPMARK_TEMPLE = 5
MAPMARK_KISS = 6
MAPMARK_SHOVEL = 7
MAPMARK_SWORD = 8
MAPMARK_FLAG = 9
MAPMARK_LOCK = 10
MAPMARK_BAG = 11
MAPMARK_SKULL = 12
MAPMARK_DOLLAR = 13
MAPMARK_REDNORTH = 14
MAPMARK_REDSOUTH = 15
MAPMARK_REDEAST = 16
MAPMARK_REDWEST = 17
MAPMARK_GREENNORTH = 18
MAPMARK_GREENSOUTH = 19
]]
if (msgcontains(msg, "preparado")) then
npcHandler:say("OK, blablablabla. Pegue este manual e iremos dar inicio a sua primeira {missão}.", cid)
doPlayerAddItem(cid, tab.manual)
talkState[talkUser] = 1
elseif msgcontains(msg, "missão") and talkState[talkUser] == 1 then
npcHandler:say("Meu amigo Charlie acabou de voltar da floresta perdida, que tal você falar com ele para saber como chegar na cidade?!", cid)
setPlayerStorageValue(cid, tab.storage1, 1)
if mark.status then doPlayerAddMapMark(cid, mark.posCharlie, mark.charlieMark, mark.charlieDesc) end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
NPC 2
npc_dois.xml
<?xml version="1.0"?>
<npc name="Npc Dois" script="npc_dois.lua" walkinterval="2000">
<mana now="800" max="800" />
<health now="200" max="200" />
<look type="132" head="0" body="0" legs="0" feet="0" addons="3" />
<parameters>
<parameter key="message_greet" value="Olá |PLAYERNAME|, você está a caminho da {floresta perdida}?" />
<parameter key="message_farewell" value="Ate mais, |PLAYERNAME|!" />
<parameter key="message_walkaway" value="Valeu!" />
</parameters>
</npc>
npc_dois.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) if getPlayerStorageValue(cid, 1234) == 1 then npcHandler:onCreatureSay(cid, type, msg) end 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 storage2 = 4566
local mark = { status = true, -- se vai colocar marca no mapa? coloque false se não.
florestaPos = {x = 123, y = 456, z = 7} , -- posiçao da marca no mapa
florestaMark = 2, -- icone da marca
florestaDesc = "oii" -- descriçao
}
--[[
MAPMARK_TICK = 0
MAPMARK_QUESTION = 1
MAPMARK_EXCLAMATION = 2
MAPMARK_STAR = 3
MAPMARK_CROSS = 4
MAPMARK_TEMPLE = 5
MAPMARK_KISS = 6
MAPMARK_SHOVEL = 7
MAPMARK_SWORD = 8
MAPMARK_FLAG = 9
MAPMARK_LOCK = 10
MAPMARK_BAG = 11
MAPMARK_SKULL = 12
MAPMARK_DOLLAR = 13
MAPMARK_REDNORTH = 14
MAPMARK_REDSOUTH = 15
MAPMARK_REDEAST = 16
MAPMARK_REDWEST = 17
MAPMARK_GREENNORTH = 18
MAPMARK_GREENSOUTH = 19
]]
if (msgcontains(msg, "floresta perdida")) then
npcHandler:say("Bem, é um caminho difícil, porém não há monstros pelo caminho. Mas ouvi dizer que há baús perdidos por lá, talvez ache o {caminho} para sair dela.", cid)
talkState[talkUser] = 1
elseif msgcontains(msg, "caminho") and talkState[talkUser] == 1 then
setPlayerStorageValue(cid, storage2, 1)
npcHandler:say("Não é tão complicado, talvez o norte seja seu foco. Que tal você experimentar por si mesmo?", cid)
if mark.status then doPlayerAddMapMark(cid, mark.florestaPos, mark.florestaMark, mark.florestaDesc) end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Peço que fique atento nesse pedaço:
function onCreatureSay(cid, type, msg) if getPlayerStorageValue(cid, 1234) == 1 then npcHandler:onCreatureSay(cid, type, msg) end end
tem que alterar o storage para o storage que o npc 1 dá.
se o player não tiver storage 1234 no valor de 1, o npc não vai falar nada com o cid, Nada nada nada.
Para falar com o este NPC precisa ter a storage entregue pelo 1 NPC.
se quiser que ele responda algo para orientar, tudo bem eu edito, mas do jeito que está, não falará nada, a menos que fale com o npc 1 primeiro.
OBS: o mesmo vai acontecer com o npc 3.
NPC 3:
npc_tres.xml
<?xml version="1.0"?>
<npc name="Npc Tres" script="npc_tres.lua" walkinterval="2000">
<mana now="800" max="800" />
<health now="200" max="200" />
<look type="132" head="0" body="0" legs="0" feet="0" addons="3" />
<parameters>
<parameter key="message_greet" value="Olá |PLAYERNAME|, você não parece {preparado} para entrar na floresta." />
<parameter key="message_farewell" value="Ate mais, |PLAYERNAME|!" />
<parameter key="message_walkaway" value="Valeu!" />
</parameters>
</npc>
npc_tres.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) if getPlayerStorageValue(cid, 4566) == 1 then npcHandler:onCreatureSay(cid, type, msg) end 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 storage3 = 3456
local mark = { status = true, -- se vai colocar marca no mapa? coloque false se não.
florestaPos = {x = 123, y = 456, z = 7} , -- posiçao da marca no mapa
florestaMark = 2, -- icone da marca
florestaDesc = "oii" -- descriçao
}
--[[
MAPMARK_TICK = 0
MAPMARK_QUESTION = 1
MAPMARK_EXCLAMATION = 2
MAPMARK_STAR = 3
MAPMARK_CROSS = 4
MAPMARK_TEMPLE = 5
MAPMARK_KISS = 6
MAPMARK_SHOVEL = 7
MAPMARK_SWORD = 8
MAPMARK_FLAG = 9
MAPMARK_LOCK = 10
MAPMARK_BAG = 11
MAPMARK_SKULL = 12
MAPMARK_DOLLAR = 13
MAPMARK_REDNORTH = 14
MAPMARK_REDSOUTH = 15
MAPMARK_REDEAST = 16
MAPMARK_REDWEST = 17
MAPMARK_GREENNORTH = 18
MAPMARK_GREENSOUTH = 19
]]
if (msgcontains(msg, "preparado")) then
npcHandler:say("Err, talvez, você precise comer. Aliás, você não tem muito tempo para ficar de barriga vazia. Você quer algum {alimento}?", cid)
talkState[talkUser] = 1
elseif msgcontains(msg, "alimento") and talkState[talkUser] == 1 then
setPlayerStorageValue(cid, storage3, 1)
npcHandler:say("Pegue estas duas maçãs. Pode seguir em frente e boa viagem pela floresta.", cid)
if mark.status then doPlayerAddMapMark(cid, mark.florestaPos, mark.florestaMark, mark.florestaDesc) end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Qualquer erro ou edição, é só falar.




info
Grupo: Campones
Registrado: 02/10/15
Posts: 92
Reputação: +18
Boa noite pessoal, venho aqui a busca de ajuda dos scripters de plantão que entendem de NPC's. <3
3 NPC's.
São 3 NPC's que no final formarão uma quest. (se possível colocar no QUEST LOG como QUEST INICIAL)
LEGENDA: P = Player e N= NPC
Os textos aqui apresentados serão apenas uma demonstração,
Este é o NPC de início, onde dará o começo da jornada.
P = Hi
N= Olá |PLAYERNAME|, blablabla bla bla bla... Você parece estar {preparado} para a sua jornada.
P= preparado
N= OK, blablablabla. Pegue este manual e iremos dar inicio a sua primeira {missão}.
P= missão
N= Meu amigo Charlie acabou de voltar da floresta perdida, que tal você falar com ele para saber como chegar na cidade?!
Azul = quando o player falar Preparado será entregue um item a ele.
Roxo= Quando o player falar missão será iniciada a missão do quest log e será entregue a ele uma storage ID, para poder falar com o segundo NPC.
Para falar com o este NPC precisa ter a storage entregue pelo 1 NPC.
P = Hi
N= Olá |PLAYERNAME|, você está a caminho da {floresta perdida}?
P= floresta perdida
N= Bem, é um caminho difícil, porém não há monstros pelo caminho. Mas ouvi dizer que há baús perdidos por lá, talvez ache o {caminho} para sair dela.
P= Caminho
N= Não é tão complicado, talvez o norte seja seu foco. Que tal você experimentar por si mesmo?
Roxo= Quando o player falar Caminho será entregue uma storage ID para que ele possa seguir para o terceiro NPC.
Para falar com o este NPC precisa ter a storage entregue pelo 2 NPC.
P = Hi
N= Olá |PLAYERNAME|, você não parece {preparado} para entrar na floresta.
P= preparado
N= Err, talvez, você precise comer. Aliás, você não tem muito tempo para ficar de barriga vazia. Você quer algum {alimento}?
P= Alimento
N= Pegue estas duas maçãs. Pode seguir em frente e boa viagem pela floresta.
Roxo= Quando o player falar alimento será finalizado a quest e será adicionado uma storage (que será usada para o player poder sair do mapa tutorial)
Agradeço desde já.