Ir para conteúdo

Yunie Quest Npc System


noobinhu

Posts Recomendados

Este script, pode ser considerado como uma implementação no sistema Jiddo.

Você adiciona o script, como se fosse um script normal, e depois usa ele mesmo em vários arquivos XML, para fazer suas quests de NPC mais rapidamente e facilmente.

 

Screenshoots:

Primeira missão do NPC de Exemplo (Encontrado no final do tópico):

yuniesystemquestqa3.png

 

Segunda missão do NPC de Exemplo (Encontrado no final do tópico):

yuniesystemquest2ea2.png

 

Mensagem quando não tem mais missões:

yuniesystemquest3ox1.png

 

 

Adicionando o sistema no seu server:

Crie um arquivo chamado yuniesystemquest.lua em npc/scripts contendo:

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

 

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

configs = {storageid = NpcSystem.getParameter('storageid')}

 

configs.mission = getPlayerStorageValue(cid, configs.storageid)

 

if (configs.mission < 1) then

configs.mission = 1

end

 

configs.addon_looktype = NpcSystem.getParameter('addon_looktype['..configs.mission..']') or 0

configs.addon_number = NpcSystem.getParameter('addon_number['..configs.mission..']') or 0

configs.minimumlevel = tonumber(NpcSystem.getParameter('minimumlevel')) or 0

 

a = 0

items = NpcSystem.getParameter('missionItems['..configs.mission..']')

if (items ~= nil) then

configs.items = transformInTable(items)

else

configs.items = nil

end

configs.noquests = nil

 

configs.msg = NpcSystem.getParameter('missionMsg['..configs.mission..']')

if (configs.msg == nil) then

configs.msg = NpcSystem.getParameter('finishedMissionsMsg')

configs.noquests = 1

else

configs.thanks = parseMessages(cid, NpcSystem.getParameter('missionThanks['..configs.mission..']'))

configs.experience = NpcSystem.getParameter('missionExperienceGain['..configs.mission..']') or nil

itemgain = NpcSystem.getParameter('missionItemGain['..configs.mission..']')

if (itemgain ~= nil) then

configs.itemgain = transformInTable(itemgain)

else

configs.itemgain = nil

end

end

configs.msg = parseMessages(cid, configs.msg)

 

 

return configs

end

 

 

 

function transformInTable(data)

-- based in npchandler:traveldata...

items = {}

for item in string.gmatch(data, '[^;]+') do

local i = 1

a = a + 1

itemid = nil

quantity = nil

for temp in string.gmatch(item, '[^,]+') do

if(i == 1) then

itemid = tonumber(temp)

elseif(i == 2) then

quantity = tonumber(temp)

else break

end

i = i+1

end

items[a] = {itemid = itemid, quantity = quantity}

end

return items

end

 

 

function parseMessages(cid, msg)

-- based in npchandler:parsemsg

TAG_PLAYERNAME = '|PLAYERNAME|'

 

parseInfo = { [TAG_PLAYERNAME] = getCreatureName(cid)}

local ret = msg

for search, replace in pairs(parseInfo) do

ret = string.gsub(ret, search, replace)

end

return ret

end

 

 

function askMission(cid, message, keywords, parameters, node)

--TODO: buyAddons function in modules.lua

if(not npcHandler:isFocused(cid)) then

return false

end

configs = getNPCConfigs(cid)

error = 'Sorry, but you need to have these items: '

itemshave = 0

itemsneeded = 0

 

if (parameters.confirm ~= true) and (parameters.decline ~= true) then

if (getPlayerLevel(cid) >= configs.minimumlevel) then

npcHandler:say(configs.msg, cid)

else

npcHandler:say('Only players higher than level '.. configs.minimumlevel ..' can do this quest.', cid)

npcHandler:resetNpc()

end

elseif (parameters.confirm == true) then

a = 1

itemstext = ''

 

 

-- checking items

if (configs.items == nil) then

 

else

for k, item in pairs(configs.items) do

itemsneeded = itemsneeded + 1

quantity = nil

itemid = nil

for i, v in pairs(item) do

if (i == 'quantity') then

quantity = v

elseif (i == 'itemid') then

itemid = v

end

end

if(getPlayerItemCount(cid,itemid) >= quantity) then

itemshave = itemshave + 1

else

error = error .." ".. quantity .." ".. getItemName(itemid).."(s)"

 

if (itemsneeded == table.maxn(configs.items)) then

error = error .. "."

else

error = error .. ","

end

end

end

end

-- end checking items

 

if itemshave == table.maxn(configs.items) and configs.items ~= nil or configs.items == nil then

if (configs.experience ~= nil) then

doPlayerAddExp(cid,configs.experience)

end

 

-- removing items

if (configs.items == nil) then

else

for k, item in pairs(configs.items) do

itemsneeded = itemsneeded + 1

quantity = nil

itemid = nil

for i, v in pairs(item) do

if (i == 'quantity') then

quantity = v

elseif (i == 'itemid') then

itemid = v

end

end

doPlayerRemoveItem(cid, itemid, quantity)

end

end

-- end removing items

 

-- add items

if (configs.itemgain == nil) then

 

else

 

 

for k, item in pairs(configs.itemgain) do

itemsneeded = itemsneeded + 1

quantity = nil

itemid = nil

 

 

for i, v in pairs(item) do

if (i == 'quantity') then

quantity = v

elseif (i == 'itemid') then

itemid = v

end

end

doPlayerAddItem(cid, itemid, quantity)

 

end

end

-- end add items

 

-- add addons

if (configs.addon_looktype ~= 0) then

doPlayerAddOutfit(cid, configs.addon_looktype, configs.addon_number)

end

-- end add addons

 

-- add storage

setPlayerStorageValue(cid, configs.storageid, configs.mission+1)

-- end add storage

 

npcHandler:say(configs.thanks, cid)

else

npcHandler:say(error, cid)

end

 

npcHandler:resetNpc()

elseif (parameters.decline == true) then

npcHandler:say('Ok then.', cid)

npcHandler:resetNpc()

end

 

return true

end

 

 

 

 

 

local node1 = keywordHandler:addKeyword({'mission'}, askMission, {})

node1:addChildKeyword({'yes'}, askMission, {confirm = true})

node1:addChildKeyword({'no'}, askMission, {decline = true})

 

 

npcHandler:addModule(FocusModule:new())

O script poderia ser menor sim, mas eu fiquei com preguiça de pesquisar algumas functions que eu tinha esquecido :D

 

Pronto, você adicionou o sistema no seu server :)

 

Utilizando o sistema:

Irei fazer aqui um exemplo de NPC usando todos os parâmetros contidos nesta lib.

 

Crie um arquivo chamado Yunie System Quest.xml em data/npc contendo:

 

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

<npc name="Yunie System Quest" script="data/npc/scripts/yuniesystemquest.lua" walkinterval="2000" floorchange="0">

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

<look type="130" head="39" body="122" legs="125" feet="57" addons="0"/>

<parameters>

<!-- Main Configs -->

<parameter key="storageid" value="26015"/> <!-- Must have -->

<parameter key="finishedMissionsMsg" value="Sorry, I have no missions to you now."/> <!-- Must have -->

<parameter key="minimumlevel" value="8" /> <!-- Not necessary -->

 

 

<!-- Begin first mission -->

<!-- First missions messages -->

<parameter key="missionMsg[1]" value="Hello, |PLAYERNAME|. Do you want a mission, ye? I have one... I need some items (100 green dragon leathers, 100 red dragon leathers). Can you help me?"/> <!-- Must have -->

<parameter key="missionThanks[1]" value="Thank you for helping..."/> <!-- Must have -->

 

 

<!-- Addon configurations for first mission -->

<parameter key="addon_looktype[1]" value="136" /> <!-- Not necessary -->

<parameter key="addon_number[1]" value="1" /> <!-- Not necessary -->

 

<!-- Experience you win when completing the mission -->

<parameter key="missionExperienceGain[1]" value="2000"/> <!-- Not necessary -->

 

<!-- Items that you obtain, completing the quest -->

<parameter key="missionItemGain[1]" value="5908,1"/> <!-- Not necessary -->

 

<!-- Items needed to complete the mission -->

<parameter key="missionItems[1]" value="5877,100;5948,100"/> <!-- Not necessary -->

 

 

<!-- Begin second mission -->

<!-- second missions messages -->

<parameter key="missionMsg[2]" value="Right, you already did a mission. Now I want more 30 green dragon leathers, and you will have your shaman addon full. Ok?"/> <!-- Must have -->

<parameter key="missionThanks[2]" value="Ok, thanks again."/> <!-- Must have -->

 

 

<!-- Addon configurations for second mission -->

<parameter key="addon_looktype[2]" value="136" /> <!-- Not necessary -->

<parameter key="addon_number[2]" value="2" /> <!-- Not necessary -->

 

<!-- Experience you win when completing the mission -->

<parameter key="missionExperienceGain[2]" value="500"/> <!-- Not necessary -->

 

<!-- Items that you obtain, completing the quest -->

<parameter key="missionItemGain[2]" value="2472,1"/> <!-- Not necessary -->

 

<!-- Items needed to complete the mission -->

<parameter key="missionItems[2]" value="5877,30"/> <!-- Not necessary -->

 

</parameters>

</npc>

 

Em negrito, seria onde você adiciona a lib do NPC, para usar todos estes parameters, e fazer o NPC...

No próprio NPC tem algumas explicações do sistema.

 

Parameters Feitos:

Uma lista aqui, com as caractéristicas e descrições de cada parameter que pode ser adicionado no seu NPC.

 

  1. storageid (Obrigatório) - Armazena o storage value que será usado em toda a quest de um NPC, para determinar a missão em que você se encontra.
  2. finishedMissionsMsg (Obrigatório) - Mensagem que o NPC vai dizer quando não tiver mais missões.
  3. minimumlevel (Não obrigatório) - Level mínimo para fazer missões.
  4. missionMsg[mission_id] (Obrigatório) - Mensagem que o NPC diz, ao você pedir informações sobre 'mission'.
  5. missionThanks[missionid] (Obrigatório) - Mensagem de agradecimento do NPC, ao terminar uma missão.
  6. addon_looktype[missionid] (Não obrigatório) - Outfit looktype, caso você queira que o player ganhe um addon.
  7. addon_number[missionid] (Não obrigatório) - Addon ID, varia de 1 a 2, depende do addon que você quer.
  8. missionExperienceGain[missionid] (Não obrigatório) - Experiência ganha ao terminar a missão.
  9. missionItemGain[missionid] (Não obrigatório) - Items que ganha, ao terminar a missão (array).
  10. missionItems[missionid] (Não obrigatório) - Items necessários para terminar a missão (array).

 

Caso tenham dúvidas, quanto a parameters ou outros... podem postar, responderei assim que ver a dúvida.

 

//Yunie~

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

Sim, na versão oficial que eu usarei no Zartha, tem esta possibilidade e muitas outras...

 

Mas eu não irei postar tal versão, pois será só do Zartha, essa aí foi a versão beta, digamos assim.

Link para o comentário
Compartilhar em outros sites

@ Yunie

 

Bem, vejo que você tem total conhecimento na área de Scripts.

 

Podemos observar, tamanha dedicação sua em relação á seção, pois você é um dos poucos que fazem Scripts (actions, etc..) e compartilham com nós, membros do XTibia.

 

Gostaria de parabeniza-lo por tamanha competência.

 

@ Pergunta

 

Bem, admiro muito seu trabalho, como você pode ver.

Gostaria de saber, se atualmente você está participando de alguma equipe de ATS.

 

Aguardando resposta.

Grato desde já. :positive:

 

~

:user: Walcker Striker.

Link para o comentário
Compartilhar em outros sites

tipo kra eu nao sakei cmo add tipo

 

 

vc presisa de tal itens

 

 

lah so tah assim:

 

 

 

 

 

<!-- Items needed to complete the mission -->

<parameter key="missionItems[2]" value="5877,30"/> <!-- Not necessary -->

 

 

 

1 item n?

 

nao intendi help:gabriel.lcs@hotmail.com

Link para o comentário
Compartilhar em outros sites

Noobinho Help2:

 

Na sua script para falar com o npc e talz tu fla

 

Hi

Mission

 

ali nakela parte onde eu modifiko,digamos eu chego no npc e flo

 

Hi

Secret

 

Saco?

onde eu modifiko em vez de flar mission,flar outra coisa?

Link para o comentário
Compartilhar em outros sites

Troque

 

local node1 = keywordHandler:addKeyword({'mission'}, askMission, {})

node1:addChildKeyword({'yes'}, askMission, {confirm = true})

node1:addChildKeyword({'no'}, askMission, {decline = true})

 

por

 

local node1 = keywordHandler:addKeyword({'palavra desejada'}, askMission, {})

node1:addChildKeyword({'yes'}, askMission, {confirm = true})

node1:addChildKeyword({'no'}, askMission, {decline = true})

 

Não esqueça das aspas.

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

ow noobinhu,poderia me ajudar numa coisa??

 

to fikando brabo com essa script,modifiko uma coisa n funfa,modifico dnv n funfa,modifico cmo a 1 vez e funfa :o

 

é serio muito estranho tipo se eu digitar

 

<parameter key="missionMsg[1]" value="Olá, |PLAYERNAME|. Como você deve ter lido nas historias,perdi minha namorada,agora estou procurando pelos itens dela,você poderia me trazer a amazon armor??"/> <!-- Must have -->

Link para o comentário
Compartilhar em outros sites

Se é muito genio cara :surprised:

Parabens viu! :smile_positivo:

 

Como eu faço pra por isso em um npc já existente.

Ex: Bota esse sistema ai num npc que venda corda, pá, etc.

 

Valeu!

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...