Postado Setembro 21, 2013 11 anos Créditos: 100% eu. Boa tarde, vim fazer um rápido tutorial de como se fazer um gerenciador de quests. Primeiro, crie um arquivo que lhe ajude a localizar as suas quests, exemplo: <quest recommendedLevel="80" desc="head" x="162" y="93" z="7" uniqueID="9006" storageID="40006"> <teleports> <teleport desc="city" fx="210" fy="158" fz="8" tx="146" ty="121" tz="7" /> <!-- f: from ; t: to --> <teleport desc="return" fx="161" fy="93" fz="7" tx="218" ty="176" tz="8" /><!-- f: from ; t: to --> </teleports> <prizes timeToReceive=""> <!-- anti sobe e desce --> <prize vocation="sorcerer" id="2323" count="1" experience="5250000" addon="" /> <prize vocation="druid" id="2323" count="1" experience="5250000" addon="" /> <prize vocation="paladin" id="7957" count="1" experience="5250000" addon="" /> <prize vocation="knight" id="2475" count="1" experience="5250000" addon="" /> </prizes> </quest> <quest recommendedLevel="80" desc="armor" x="153" y="103" z="7" uniqueID="9007" storageID="40007"> <teleports> <teleport desc="city" fx="210" fy="156" fz="8" tx="151" ty="106" tz="7" /> <!-- f: from ; t: to --> <teleport desc="return" fx="154" fy="103" fz="7" tx="218" ty="176" tz="8" /><!-- f: from ; t: to --> </teleports> <prizes timeToReceive=""> <!-- anti sobe e desce --> <prize vocation="sorcerer" id="8865" count="1" experience="2000000" addon="" /> <prize vocation="druid" id="8865" count="1" experience="2000000" addon="" /> <prize vocation="paladin" id="2660" count="1" experience="2000000" addon="" /> <prize vocation="knight" id="2483" count="1" experience="2000000" addon="" /> </prizes> </quest> <quest recommendedLevel="80" desc="legs" x="165" y="95" z="7" uniqueID="9008" storageID="40008"> <teleports> <teleport desc="city" fx="210" fy="154" fz="8" tx="176" ty="98" tz="5" /> <!-- f: from ; t: to --> <teleport desc="return" fx="167" fy="95" fz="7" tx="218" ty="176" tz="8" /><!-- f: from ; t: to --> </teleports> <prizes timeToReceive=""> <!-- anti sobe e desce --> <prize vocation="sorcerer" id="5918" count="1" experience="3000000" addon="" /> <prize vocation="druid" id="5918" count="1" experience="3000000" addon="" /> <prize vocation="paladin" id="8923" count="1" experience="3000000" addon="" /> <prize vocation="knight" id="2470" count="1" experience="3000000" addon="" /> </prizes> </quest> </quests> Em seguida, crie um arquivo chamado questsManager.lua na pasta "actions\scripts\quests" dentro deste arquivo, insira as constantes local V_S = 1 -- voc sorcerer local V_D = 2 -- voc druid local V_P = 3 -- voc paladin local V_K = 4 -- voc knight Insira também uma tabela que cotenha todas as quests, com os seus respectivos storages local allQuests = { -- quest UID with its STORAGE [7500] = 25001, [8000] = 30000, [8001] = 30001, [8002] = 30002, [8003] = 30003, [8004] = 30004, [8005] = 30005 } novamente, crie uma outra tabela que conterá um item de recompensa local setItemReward = { -- set piece reward or another item [7500] = {[V_S] = 2175, [V_D] = 2175, [V_P] = 2175, [V_K] = 2175}, [8000] = {[V_S] = nil, [V_D] = nil, [V_P] = nil, [V_K] = nil}, [8001] = {[V_S] = nil, [V_D] = nil, [V_P] = nil, [V_K] = nil}, [8002] = {[V_S] = nil, [V_D] = nil, [V_P] = nil, [V_K] = nil}, [8003] = {[V_S] = nil, [V_D] = nil, [V_P] = nil, [V_K] = nil}, [8004] = {[V_S] = nil, [V_D] = nil, [V_P] = nil, [V_K] = nil}, [8005] = {[V_S] = nil, [V_D] = nil, [V_P] = nil, [V_K] = nil} } e outra, para a recompensa de experiência local expReward = { -- set the amount of exp that player will gain [7500] = 50000, [8000] = 300000, [8001] = 300000, [8002] = 300000, [8003] = 300000, [8004] = 150000, [8005] = 750000 } e finalmente, outra para a recompensa de gold local platCoinsReward = { -- set money reward [7500] = 0, [8000] = 5, [8001] = 5, [8002] = 5, [8003] = 5, [8004] = 1, [8005] = 5 } agora, ainda em questsManager.lua, insira uma função para verificar se a determinada quest já foi completada function questAlreadyCompleted(cid, item) local queststatus = getPlayerStorageValue(cid,allQuests[item.uid]) if queststatus == -1 then return false else return true end end logo após a função acima, insira a função principal function onUse(cid, item, frompos, item2, topos) if not questAlreadyCompleted(cid, item) then -- getting player vocation local vocation = nil if isSorcerer(cid) then vocation = V_S end if isDruid(cid) then vocation = V_D end if isPaladin(cid) then vocation = V_P end if isKnight(cid) then vocation = V_K end -- adding rewards -- set item reward local setItemReward = setItemReward[item.uid][vocation] -- experience reward local experienceReward = expReward[item.uid] -- platinum coins reward local quantityOfPlatinumCoinsReward = platCoinsReward[item.uid] -- addon reward local addonReward = addonReward[item.uid] if setItemReward ~= nil then doPlayerAddItem(cid,setItemReward,1) end if experienceReward ~= nil and experienceReward > 0 then doPlayerAddExp(cid, experienceReward) end if quantityOfPlatinumCoinsReward ~= nil and quantityOfPlatinumCoinsReward> 0 then doPlayerAddItem(cid,2152,1) end setPlayerStorageValue(cid,allQuests[item.uid],1) else doPlayerSendTextMessage(cid,22,"Voce ja completou essa quest.") end end Agora, em "data\actions", abra o arquivo "actions.xml" e adicione a seguinte linha de código <action uniqueid="7500; 8000-8005" event="script" value="quests/questsManager.lua"/> Bom, é isso. Editado Setembro 21, 2013 11 anos por warotserv (veja o histórico de edições)
Postado Setembro 21, 2013 11 anos tem como explicar melhor como ele gerencia essas quests? não entendi muito bem pelo script Ot Design: https://discord.gg/VgtVRNmCD7
Postado Setembro 21, 2013 11 anos Autor Caro Daaniel, tentarei esclarecer suas dúvidas. Pense no "questsManager.lua" como se fosse uma classe que implemente uma interface "Quest" cuja única assinatura é "function onUse(cid, item, frompos, item2, topos)". Agora pense que cada quest seja uma classe que precise implementar a interface "Quest". Ao invés de implementar a interface "Quest" em cada uma dessas novas classes, não seria mais fácil extender a classe "questsManager.lua"? Então, é basicamente isso que o quest manager faz. Caso ainda possua dúvidas, por favor, pergunte.
Postado Dezembro 28, 2013 11 anos LOL bom eu sou leigo entao agora que nao entendi nada ;s mas fiquei mt curioso pra saber oque eh e oque faz
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.