Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Nao sei como, mas meu post criado sobre pedido de um QuestLog, ja nao consigo mais acessar, da page not found ...

Pois bem, vou criar de novo o post.

 

A ideia e um Grizzly Adams de somenta uma quest, o player fala hi, task ou quest sei la, yes, e a quest assim sendo adicionada ao QuestLog contentando assim as informações,

Cada monstro que ele matar, atualizara o QuestLog e apareca tambem uma mensagem no default de quantas ainda faltam, apos ter completado matando o monstro pedido na quest, o player retorna ao npc, entrega a quest, ganha a recompensa que sera experiencia e golds, e o seu QuestLog ficara com a mensagem de Completed, para o player ver que ja acabou por ali.

 

Obrigado seus lindos  ;D  :laugh:  ^^  :bleh:  :D

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

É que tinha bugado, eu ja tinha respondido, vou fazer a resposta denovo aqui.


Script do npc:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local talkState = {}
local quest = 76669 --storage
local reward = 70000
local recompensa = 2160 -- id da recompensa
local recompensaqtd = 1 -- quantidade de itens que vai ganhar
local xpganha = 20000 -- xp q o jogador vai ganha

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)
	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
	if(not npcHandler:isFocused(cid)) then
		return false
	elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
		npcHandler:say("Ótimo! Vou recompensar você bem, {ok}?.", cid)
		talkState[talkUser] = 2
	elseif msgcontains(msg, "ok") and talkState[talkUser] == 2 then
		npcHandler:say("Okay, vamos!", cid)
		setPlayerStorageValue(cid, quest, 2)
		talkState[talkUser] = 0
	elseif msgcontains(msg, "missao") then
		local str = getPlayerStorageValue(cid, quest)
		if(str < 2) then
			npcHandler:say("Eu preciso de você. Pode matar 20 dragoes pra mim?", cid) 
			talkState[talkUser] = 1
			return true
		elseif(str == 2) then
			npcHandler:say("Por favor volte para uma recompensa.", cid)
		elseif(str == 3) then
			npcHandler:say("20 dragões, já? Você é realmente um matador de dragões! Como o prometido, ta aqui sua recompensa.", cid)
			doPlayerAddItem(cid, recompensa, recompensaqtd)
			doPlayerAddExp(cid, xpganha)
			setPlayerStorageValue(cid, quest, 4)
		elseif(str == 4) then
			npcHandler:say("Você ja me ajudou!", cid)
		end
		talkState[talkUser] = 0
	end
	return TRUE
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

data/creaturescripts/scripts

monsterkill.lua

local monsters = {
	--nome = storage
	["dragon"] = 55004,
	["dragon lord"] = 55004
}

function onKill(cid, target)
	local monster = monsters[getCreatureName(target):lower()]
	if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76669) == 2) then
		if getPlayerStorageValue(cid, monster) < 20 then 
			local killedMonsters = getPlayerStorageValue(cid, monster)
            if(killedMonsters == -1) then
                killedMonsters = 1
			end
			setPlayerStorageValue(cid, monster, killedMonsters + 1)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce matou " .. killedMonsters .. " de 20 dragões.")
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você matou dragões suficientes.")
			setPlayerStorageValue(cid, 76669, 3)
		end
	end
	return TRUE
end

creaturescripts.xml

<event type="kill" name="monsterkill" script="monsterkill.lua"/> 

Registra o evento monsterkill no login.lua na pasta creaturescripts/scripts ou creaturescripts/scripts/data vai ter vários eventos é só copiar o molde de um e trocar o nome.

 

data/xml/quests.xml

<quest name="Tasks" startstorageid="76669" startstoragevalue="1">
<mission name="Task Dragoes" storageid="76669" startvalue="1" endvalue="4">
<missionstate id="1" description="Fale com o npc tal para aceitar a missao"/>
<missionstate id="2" description="Mate 20 dragoes em tal montanha"/>
<missionstate id="3" description="Volte ao npc tal para receber sua recompensa"/>
<missionstate id="3" description="Voce ja fez a task dos dragoes"/>
</mission>
</quest>

Editado por rogaforyn2 (veja o histórico de edições)

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites
Editado por Tryaron (veja o histórico de edições)

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites
  • Solução

Beleza, a começar pelo quest log.

A tag quests fecha por último:

<?xml version="1.0" encoding="UTF-8"?>
<quests>
<quest name="Example Quest I" startstorageid="1001" startstoragevalue="1">
<mission name="Example Mission 1" storageid="1001" startvalue="1" endvalue="3">
<missionstate id="1" description="Example description 1"/>
<missionstate id="2" description="Example description 2"/>
<missionstate id="3" description="Example description 3"/>
</mission>
<mission name="Example Mission 2" storageid="1001" startvalue="4" endvalue="5">
<missionstate id="4" description="Example description 1"/>
<missionstate id="5" description="Example description 2"/>
</mission>
 
</quest>
<quest name="Tasks" startstorageid="76669" startstoragevalue="1">
<mission name="Task Dragoes" storageid="76669" startvalue="1" endvalue="4">
<missionstate id="1" description="Fale com o npc tal para aceitar a missao"/>
<missionstate id="2" description="Mate 20 dragoes em tal montanha"/>
<missionstate id="3" description="Volte ao npc tal para receber sua recompensa"/>
<missionstate id="3" description="Voce ja fez a task dos dragoes"/>
</mission>
</quest>
</quests>

Bom, no login.lua o nome ta errado, mas vamos corrigir no creaturescripts.xml:

<event type="kill" name="MonsterKill" script="monsterkill.lua"/>

Bem, e o NPC ta sem dialogo inicial:

<?xml version="1.0" encoding="UTF-8"?><npc name="Adam" script="task1.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100" />
<look type="132" head="115" body="0" legs="114" feet="0" addons="3" corpse="2212"/>
<parameters>
  <parameter key="message_greet" value="Oi, você pode me ajudar? Se puder, me avise que eu lhe falo sobre a {missao}. "/>
</parameters>
</npc>

Pra mudar esse {missao}, que é a mensagem em azul, mude essa linha:

elseif msgcontains(msg, "missao") then

No script do npc


Qualquer erro ou mal funcionamento é só postar.

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Perfeito cara, simplesmente perfeito ...

Posso pedir um adicional?

 

Se no caso essa task ai sao 20 dragoes, sendo eles dragons ou dragons lord, eu gostaria de uma mais especifica por exemplo, que sejam 20 dragoes e 20 dragons lord, tipo assim mate 20 dragoes e 20 dragons lords para mim ... sacou? TE AMO CARA, como que da repu aqui mais de 1 vez >.<  :bleh:  :wow:  :wow:  :wow:

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Tem, 

local monsters = {
    --nome = storage
    ["dragon"] = 55004,
    ["dragon lord"] = 55004
}

Muda pra

local monsters = {
    --nome = storage
    ["dragon"] = 55004,
    ["dragon lord"] = 55005
}

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Amigo, apareceu um probleminha e eu nao tinha visto ainda antes ...

O npc funcionou perfeitamente, mas a cada monstro que eu mato, nao aparece nenhuma mensagem que esta contando para a quest ... apenas isso ta dando errado, e tbm nao sei se no questlog deveria aparecer algo enquanto vou matando, mas apos matar a quantidade estipulada pela quest, atualiza perfeitamente e quando vou entregar ele entrega a recompensa certinha tbm ...

 

O unico problema mesmo eh esse ai, a cada monstro que eu mato, nao aparece nenhuma mensagem falando que esta contando ... 

Abraço

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Testa assim

local monsters = {
	--nome = storage
	["dragon"] = 55004,
	["dragon lord"] = 55005
}

function onKill(cid, target)
	local monster = monsters[getCreatureName(target):lower()]
	if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76669) == 2) then
		if getPlayerStorageValue(cid, monster) < 20 then 
			local killedMonsters = getPlayerStorageValue(cid, monster)
            if(killedMonsters == -1) then
                killedMonsters = 1
			end
			setPlayerStorageValue(cid, monster, killedMonsters + 1)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce matou "..getPlayerStorageValue(cid, monster).." de 20 dragões.")
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você matou dragões suficientes.")
			setPlayerStorageValue(cid, 76669, 3)
		end
	end
	return true
end

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Ainda nao funciounou ;/

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Tenta isso, e vê no console se da os prints.

local monsters = {
	--nome = storage
	["dragon"] = 55004,
	["dragon lord"] = 55005
}

function onKill(cid, target)
	local monster = monsters[getCreatureName(target):lower()]
	if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76669) == 2) then
		if getPlayerStorageValue(cid, monster) < 20 then 
			local killedMonsters = getPlayerStorageValue(cid, monster)
            if(killedMonsters == -1) then
                killedMonsters = 1
			end
			
			print("Chegou aqui.")
			
			setPlayerStorageValue(cid, monster, killedMonsters + 1)
			doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Voce mato ' .. killedMonsters .. ' de 20 dragoes')
			
			print("Chegou aqui 2.")
			
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você matou dragões suficientes.")
			setPlayerStorageValue(cid, 76669, 3)
		end
	end
	return true
end

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Funcionou perfeito (:

Tentei fazer a mesma script com monstro diferente, mudando este id que eh o storage da quest ( 76669 ) por 76670 ), nos devidos locais, inclusive mudando o storage tambem dos monstros de 55004 para 55006, e a mensagem contanto os monstros que faltam nao quer aparecer nesta outra, tenho que mudar algo?

o creaturescripts estava assim

 

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

<creaturescripts>
<event type="login" name="PlayerLogin" script="login.lua"/>
<event type="logout" name="PlayerLogout" script="logout.lua"/>
<event type="login" name="FirstItems" script="firstitems.lua"/>
<event type="login" name="RegenerateStamina" script="regeneratestamina.lua"/>
<event type="death" name="PlayerDeath" script="playerdeath.lua"/>
<event type="extendedopcode" name="ExtendedOpcode" script="extendedopcode.lua"/>
<event type="kill" name="MonsterKill" script="monsterkill.lua"/>
</creaturescripts>

E ficou assim:

 

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

<creaturescripts>
<event type="login" name="PlayerLogin" script="login.lua"/>
<event type="logout" name="PlayerLogout" script="logout.lua"/>
<event type="login" name="FirstItems" script="firstitems.lua"/>
<event type="login" name="RegenerateStamina" script="regeneratestamina.lua"/>
<event type="death" name="PlayerDeath" script="playerdeath.lua"/>
<event type="extendedopcode" name="ExtendedOpcode" script="extendedopcode.lua"/>
<event type="kill" name="MonsterKill" script="monsterkill.lua"/>
<event type="kill" name="MonsterKill" script="monsterkill1.lua"/>
</creaturescripts>
 

 

Ja o login.lua estava assim:

 

-- Events

player:registerEvent("PlayerDeath")
player:registerEvent("MonsterKill")
return true
end

 

Ficando assim:

 

-- Events

player:registerEvent("PlayerDeath")
player:registerEvent("MonsterKill")
player:registerEvent("MonsterKill")
return true
end

 

Algo esta errado? Obrigado irmao, ta me ajudando pra caralho!!! s2

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Muda o nome, não pode ser igual.

<event type="kill" name="MonsterKillTest" script="monsterkill1.lua"/>
player:registerEvent("MonsterKillTest")
Editado por rogaforyn2 (veja o histórico de edições)

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Perfeito perfeito perfeito, nao sei nem como descrever o quanto me ajudou, acho que o TK deveria ter mais pessoas atenciosas quanto voce, ta me acompanhando do inicio ao fim da script, te amo s2

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Irmao, como eu faço pra alterar a quantidade de cada monstro pra o cara matar?

Digamos, quero que mate 20 monstros Y e apenas 1 X

Obrigado parceiro!

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Tenta isso

local monstro1 = 55004
local monstro2 = 55005

function onKill(cid, target)
    if(isPlayer(target) == FALSE and monstro1 or monstro2 and getPlayerStorageValue(cid, 76669) == 2) then
        if getPlayerStorageValue(cid, monstro1) < 20 or  getPlayerStorageValue(cid, monstro2) < 1 then

            if target == monstro1 then
            local killedMonsters = getPlayerStorageValue(cid, monstro1)
           else
           local killedMonsters = getPlayerStorageValue(cid, monstro2)
           end

if(killedMonsters == -1) then
killedMonsters = 1
            end
            
            setPlayerStorageValue(cid, monster, killedMonsters + 1)
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Voce matou ' .. killedMonsters .. ' de 20 dragoes')
            
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você matou dragões suficientes.")
            setPlayerStorageValue(cid, 76669, 3)
        end
    end
    return true
end

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Nao funcionou, a script nao sabe qual eh o monstro 1 e o monstro 2, eu nao consegui editar pra ela saber qual monstro tem que matar X vezes, e qual ela tem que matar Y vezes ...

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Eai irmao, pode dar aquela moral nao? u.u

Conheça agora os planos e preços da TKS Host.

Qualidade e Preço Justo!

 

www.tkshost.com

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por matiasz123
      [OTCLIENT SHOWOFF] Questlog Actualizado
      Updated quest log, showing quest details:
      Npc name Npc level Npc outfit Mission status Description Amount of reward experience Number of reward points Enemies you must kill Items to collect  
       

       
      When you click on the follow button, an alternative map opens that shows you the next objective of the mission and at what coordinates:


       
      If you want the system write a comment with your discord
    • Por Tryaron
      Galera, to procurando por sites de otservs uma script que seja praticamente simples para muitos, porem pra mim impossivel, que é a do Quest Log, eu achei algumas, porem alem de muito complicadas nao sao basicamente o que eu quero ...
      Precisaria apenas das seguintes coisas ...
      O player vai ao npc, ele pega a quest e ela vai ao seu quest log falando que ele tem que matar X monstros e com um comentario só dizendo onde que ele tem que ir, a cada monstro morto, atualizar o quest log para ele ver quantos ainda restam para ele matar ...
       
       
      É isso ai galera
      Pra mim isso é impossivel :/, mas vlw ai atenção s2
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo