Jump to content

Quest Log em Janela


Recommended Posts

Olá amigos do Xtibia, venho trazer um tutorial simples, mas interessante, que exibe uma caixa de diálogo com texto contendo todas as quests do seu servidor.

 

Atenção: Testado somente em TFS 0.3/0.4

 

Vamos lá!

 

Vá em Data/Talkactions/Scripts e crie um arquivo.lua chamado quest_log.lua e adicione o script:

 

---------------- QUEST LOG BY YAN18 -----------------

-- NOME DA QUEST NO ÍNDICE, O NÍVEL E STORAGE NO VALOR --
local quests = {
["Cerulean City"] = {level = 30, storage = 32500},
["Fire Stone"] = {level = 50, storage = 32501},
["Boost Machine"] = {level = 100, storage = 32502}
}

function onSay(cid, words, param)
local quest_completada = "- Quests completadas: \n\n"
local quest_incompleta = "\n- Quests não completadas: \n\n"


    for i, _ in pairs (quests) do
        if (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) < 1) then
            quest_incompleta = quest_incompleta .. "* " ..i.. " - Nível: " ..quests[i].level.. " \n" 
        elseif (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) >= 1) then
            quest_completada = quest_completada .."* " ..i.. " - Nível: " ..quests[i].level.. " \n" 	
        end
    end
	
if quest_completada == "- Quests completadas: \n\n" then
   quest_completada = quest_completada .. "  Nenhuma quest foi completada ainda. \n\n"

elseif quest_incompleta == "\n- Quests não completadas: \n\n" then
   quest_incompleta = quest_incompleta .. "  Todas as quests foram completadas."
end

local quest = quest_completada .. quest_incompleta	
	
return doShowTextDialog(cid, 1811, quest)
end

 

Agora abra o talkactions.xml que fica em Data/Talkactions/talkctions.xml e adicione a tag:

<talkaction words="!quest" event="script" value="quest_log.lua"/>

Deixei o comando !quest ali em words na tag xml, mas você pode colocar outro comando de sua preferência.

 

Explicação: Adicione todas as quests do servidor na tabela quests, colocando o nome dela como índice, o level e storage (preste bem atenção para colocar a storage correta) como valores. Em caso de dúvidas, só seguir o exemplo que fiz. Também fiz verificação para ver se todas as quests do jogo (que você colocar na tabela) foram feitas ou não, e também fiz verificação de nível do jogador por quest, ou seja, os jogadores só verão as quests que eles tem nível para fazer. De resto não tem muito o que mexer, só se quiser reduzir ou aumentar a quantidade de espaço entre as linhas, mas ai é da preferência de cada um. Caso queira retirar a verificação de nível do jogador (pare verem todas as quests) só mudar isso:

 

for i, _ in pairs (quests) do
        if (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) < 1) then
            quest_incompleta = quest_incompleta .. "* " ..i.. " - Nível: " ..quests[i].level.. " \n" 
        elseif (getPlayerLevel(cid) >= quests[i].level) and (getPlayerStorageValue(cid, quests[i].storage) > 1)
            quest_completada = quest_completada .."* " ..i.. " - Nível: " ..quests[i].level.. " \n" 	
        end
end

Para isso:

for i, _ in pairs (quests) do
        if getPlayerStorageValue(cid, quests[i].storage) < 1 then
            quest_incompleta = quest_incompleta .. "* " ..i.. " - Nível: " ..quests[i].level.. " \n" 
        else
            quest_completada = quest_completada .."* " ..i.. " - Nível: " ..quests[i].level.. " \n" 	
        end
end

 

Se fizer tudo corretamente, é para aparecer essa janela com as informações e nível da(s) quest(s):

 

image.png.22964cc464954a8b788fe4f0604128d1.png

 

Essa janela é criada na função doShowTextDialog, e o segundo parâmetro dela é um item que aparece como ícone, geralmente deixam 0 (e recomendo deixar 0 como padrão), mas tem base que o id do item 0 aparece como algum item do jogo (as vezes montanhas ou outros itens de ambiente), então deixei um blackboard, até para ficar mais coerente hehe. Você também pode criar um item para representar essa janela, mas vai da preferência e criatividade de cada um. 

 

Se você tiver source, pode até criar uma janela com título de "Quests" para ficar mais bonito a interface, mas vai de cada um.

 

OBS: Em alguns servidores pode ser que dê crash na distro por conta do item passado no segundo parâmetro da função doShowTextDialog(cid, id_item, texto), precisa ficar atento nisso.

 

 

Qualquer dúvida só perguntar!

 

Abraços e fiquem com Deus!

Edited by Yan18
Link to comment
Share on other sites

Muito bom !
Uma sugestão de um sistema fácil que voce poderia desenvolver:
Um sistema de achievements (conquistas) que mostra todas as conquistas que o jogador conseguiu em um painel separado, quests completas, quantidade de pokemons capturados (tipo Emblema 1 Colecionador de pokemons, por capturar 15 pokemons, Emblema 2 por 30, etc...)
Tempo online no servidor seguido e coisas do tipo.

Edited by brazvct
Link to comment
Share on other sites

×
×
  • Create New...