Ir para conteúdo

[Npc] Missão


giovanerox

Posts Recomendados

Olá, este é meu primeiro NPC, a idéia é obter um item por outro, se você ajudar o NPC, o NPC pode ajudá-lo.

 

NPC Missão 1.0

 

Começando, vai em data/npc/scripts cópia de qualquer arquivo e renomeá para "fox.lua"

e colocar isso no arquivo:

 

---------------------------------

------- NPC Missão 1.0 ---------

--- by Fox - xtibia.com/forum ---

---------------------------------

 

--------------

--- Config ---

--------------

-- item necessário para fazer a busca

local i_required = 2268

-- contagem de item necessário para fazer a busca

local i_required_count = 1

 

-- recompensa padrão id item (crystal coins)

local i_reward = 2160

 

-- contagem de recompensa id padrão (10)

local i_reward_count = 10

 

-- --

local storage = 60307

 

-- --

local questname = "fox quest"

 

-- NPC Messages --

local npc_message ={

 

"I need some item to complete this mission, procced?",

"You dont have any items to this mission.",

"Thank You for Help me, {take it.}",

"You have Already done this {mission}.",

"The Mission {"..questname.."} is, really serius, i need your help to complete it, if you help me i can give some items to you?"

}

 

-------------------

--- End Confing ---

-------------------

 

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, 'mission')) then

selfSay(npc_message[5], cid)

end

 

if(msgcontains(msg, questname)) then

selfSay(npc_message[1], cid)

talkState[talkUser] = 1

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

 

if (getPlayerStorageValue(cid,storage) > 0) then

selfSay(npc_message[4], cid)

else

 

if(doPlayerRemoveItem(cid,i_required,i_required_count)) then

setPlayerStorageValue(cid,storage,1)

doPlayerAddItem(cid,i_reward,i_reward_count)

selfSay(npc_message[3], cid)

doSendMagicEffect(getCreaturePosition(cid), 10)

doCreatureSay(cid, "Quest Completada!", TALKTYPE_ORANGE_1)

else

selfSay(npc_message[2], cid)

end

end

return true

end

end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Agora vai para a data/npcs e criar novo arquivo XML e renomeá-lo com "fox.xml"

 

<?xml version="1.0" encoding="UTF-8"?>

<npc name="Fox" script="data/npc/scripts/fox.lua" walkinterval="5000" floorchange="0">

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

<look type="266" head="1" body="1" legs="1" feet="1" addons="3"/>

<parameters>

<parameter key="message_greet" value="Welcome |PLAYERNAME| Are your ready for this {mission}?" />

 

 

 

</parameters>

</npc>

 

 

Pronto, agora você pode colocar o npc em qualquer lugar de seu mapa e deixar seus players se aventurar.

Atenciosamente, Fox

Link para o comentário
Compartilhar em outros sites

Olá Fox1 :thumbsupsmiley:

 

Achei bem interessante para colocar em Ot que tem bastante RPG's :bigsmile:

Só uma duvida , voçê fala pro Npc = mission e ele te manda buscar o item para depois continuar a conversa entre o player?

Duvida: serve para versão 8.55?

 

 

Abraços. :tongue2:

Att Tibinux

Link para o comentário
Compartilhar em outros sites

Olá Fox1 :thumbsupsmiley:

 

Achei bem interessante para colocar em Ot que tem bastante RPG's :bigsmile:

Só uma duvida , voçê fala pro Npc = mission e ele te manda buscar o item para depois continuar a conversa entre o player?

Duvida: serve para versão 8.55?

 

 

Abraços. :tongue2:

Att Tibinux

 

Quando vc falar mission, vc ja estara com a missão, ai você tera que procurar o item que ele pedir e vir trocar pela recompensa.

 

Deve pegar na versão 8.55 sim.

Link para o comentário
Compartilhar em outros sites

Por que não usar uma única linha de tabela para simbolizar essas linhas de configuração aqui?

 

-- item necessário para fazer a busca
local i_required = 2268
-- contagem de item necessário para fazer a busca
local i_required_count = 1

-- recompensa padrão id item (crystal coins)
local i_reward = 2160

-- contagem de recompensa id padrão (10)
local i_reward_count = 10

 

Podendo ficar assim:

 

local item = {required = {2268, 1}, reward = {2160, 10}}

 

De modo que na hora que o NPC faz a verificação, podemos usar,

 

if(doPlayerRemoveItem(cid, item.required[1], item.required[2])) then
  doPlayerAddItem(cid, item.reward[1], item.reward[2])
end

 

Economiza algumas linhas, haha!

Bom script :)

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

Por que não usar uma única linha de tabela para simbolizar essas linhas de configuração aqui?

 

-- item necessário para fazer a busca
local i_required = 2268
-- contagem de item necessário para fazer a busca
local i_required_count = 1

-- recompensa padrão id item (crystal coins)
local i_reward = 2160

-- contagem de recompensa id padrão (10)
local i_reward_count = 10

 

Podendo ficar assim:

 

local item = {required = {2268, 1}, reward = {2160, 10}}

 

De modo que na hora que o NPC faz a verificação, podemos usar,

 

if(doPlayerRemoveItem(cid, item.required[1], item.required[2])) then
  doPlayerAddItem(cid, item.reward[1], item.reward[2])
end

 

Economiza algumas linhas, haha!

Bom script :)

Obrigado pela sugestão, é que sou iniciante ainda em scripter ;)

Link para o comentário
Compartilhar em outros sites

  • 1 year later...
×
×
  • Criar Novo...