Opa! Muito obrigado por atender meu pedido! Por enquanto não tenho como testar, esperarei a galera testar e dizer como está.
Assim que for liberado Rep+ de hoje eu lhe darei Rep+, muito obrigado!
Edit: É possível colocar item como recompensa também?
info
Grupo: Cavaleiro
Registrado: 03/03/07
Posts: 150
Reputação: +48
Gênero: Masculino
Char no Tibia: Kaball Madness

Opa! Muito obrigado por atender meu pedido! Por enquanto não tenho como testar, esperarei a galera testar e dizer como está.
Assim que for liberado Rep+ de hoje eu lhe darei Rep+, muito obrigado!
Edit: É possível colocar item como recompensa também?
Editado Agosto 30 por Hudsin
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

Opa! Muito obrigado por atender meu pedido! Por enquanto não tenho como testar, esperarei a galera testar e dizer como está.
Assim que for liberado Rep+ de hoje eu lhe darei Rep+, muito obrigado!
Edit: É possível colocar item como recompensa também?
Para adicionar itens, você faz o seguinte:
Substitua a função doRewardTask(cid) no tasklib.lua por essa aqui
function doRewardTask(cid) local monster = getPlayerStorageValue(cid,taskstg.monster) local reward = taskreward[monster] if reward.item and reward.amount then doPlayerAddItem(cid,reward.item,reward.amount) end if monster and reward then doPlayerAddMoney(cid,reward.money) doPlayerAddExperience(cid, reward.xp) return true end return false end
E a configuração no taskrewards fica:
taskreward = -- em gps
{
[1] = {money = 5000,xp = 20000}, -- nenhum item será adicionado
[2] = {money = 10000,xp = 50000}, -- nenhum item será adicionado
[3] = {money = 20000,xp = 75000,item = 2458,amount = 1} -- aqui será adicionado 1 item com id 2458
}
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

acho que ficou legal o resultado, parabéns.
rep+
info
Grupo: Campones
Registrado: 21/02/08
Posts: 57
Reputação: 0
Char no Tibia: The Rev

Omega tem como trocar as recompensar de cada task?
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

Omega tem como trocar as recompensar de cada task?
Opa! Muito obrigado por atender meu pedido! Por enquanto não tenho como testar, esperarei a galera testar e dizer como está.
Assim que for liberado Rep+ de hoje eu lhe darei Rep+, muito obrigado!
Edit: É possível colocar item como recompensa também?
Para adicionar itens, você faz o seguinte:
Substitua a função doRewardTask(cid) no tasklib.lua por essa aqui
function doRewardTask(cid) local monster = getPlayerStorageValue(cid,taskstg.monster) local reward = taskreward[monster] if reward.item and reward.amount then doPlayerAddItem(cid,reward.item,reward.amount) end if monster and reward then doPlayerAddMoney(cid,reward.money) doPlayerAddExperience(cid, reward.xp) return true end return false endE a configuração no taskrewards fica:
taskreward = -- em gps { [1] = {money = 5000,xp = 20000}, -- nenhum item será adicionado [2] = {money = 10000,xp = 50000}, -- nenhum item será adicionado [3] = {money = 20000,xp = 75000,item = 2458,amount = 1} -- aqui será adicionado 1 item com id 2458 }
É disso que você tá falando? Se for de grana, tem na configuração. Se não for essa a dúvida, explique melhor.
info
Grupo: Campones
Registrado: 21/02/08
Posts: 57
Reputação: 0
Char no Tibia: The Rev

é isso mesmo mais eu quero que só possa fazer a task 1 vez por char tem como?
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

é isso mesmo mais eu quero que só possa fazer a task 1 vez por char tem como?
Cara, até tem, mas eu teria que refazer boa parte dos códigos. Dá uma olhada nessa task pra ver se não é melhor pro que você quer:
http://www.xtibia.com/forum/topic/151636-simple-task-30/
Tem vários tipos de task postadas aqui, cada uma com suas peculiaridades. A minha pode ser repetida, a do Vodkart é muito mais completa, mas não pode repetir e não tem configuração de tempo, a do Roksas não tem npc, é direto pelo comando e fica aparecendo mensagens conforme você progride na task.
Enfim, escolhe qual é a melhor opção pra você. Varia para cada um.
EDIT: se mesmo assim você ainda preferir a minha task, eu tiro um tempo pra ajeitar depois.
Editado Agosto 31 por omega blueheaven
info
Grupo: Campones
Registrado: 21/02/08
Posts: 57
Reputação: 0
Char no Tibia: The Rev

Ta obrigado vou testa essa que você me mandou tentar configurar se não de certo posto aqui pra você ajeitar a sua mesmo ta? Obrigado por me ajudar!
Mais só me tirar uma duvida dessa que você me mando como faço pra cada 1 dar um item diferente?
Editado Agosto 31 por jonathasbizerril
info
Grupo: Cavaleiro
Registrado: 03/03/07
Posts: 150
Reputação: +48
Gênero: Masculino
Char no Tibia: Kaball Madness

Ta obrigado vou testa essa que você me mandou tentar configurar se não de certo posto aqui pra você ajeitar a sua mesmo ta? Obrigado por me ajudar!
Mais só me tirar uma duvida dessa que você me mando como faço pra cada 1 dar um item diferente?
Para alterar o item de recompensa ou a quantidade:
Onde tem:
item = ID do item
amount = Quantidade
Ai vc pode alterar o id do item ou adicionar essa parte, para alem do money e xp, tambem dar algum item:
item = 2458, amount = 1
Nas recompensas
[1] [2] [3]
Ou adicionar mais recompensas. Nesse exemplo, o item adicionado corresponde à recompensa [4]:
Note a nova linha [4] = {money = 30000 xp = 85000 item = xxxx amount = 1}
Essa linha foi adicionada em tasklib.lua:
[1] = {money = 5000,xp = 20000}, -- nenhum item será adicionado
[2] = {money = 10000,xp = 50000}, -- nenhum item será adicionado
[3] = {money = 20000,xp = 75000,item = 2458,amount = 1}
[4] = {money = 30000 xp = 85000 item = xxxx amount = 1} -- Nova recompensa adicionada sendo "xxxx" o id do item
Depois, para adiocionar a nova missão, nessa parte:
{
[1] = {'rotworm', killstotal = 100},
[2] = {'cyclop','cyclops','cyclops smith','cyclops drone', killstotal = 100},
[3] = {'dragon','dragon lord','frost dragon', killstotal = 100}
}
Adicione a nova missão [4]:
{
[1] = {'rotworm', killstotal = 100},
[2] = {'cyclop','cyclops','cyclops smith','cyclops drone', killstotal = 100},
[3] = {'dragon','dragon lord','frost dragon', killstotal = 100}
[4] = {'nome do monstro1', 'nome do montro2', killstotal = quantidade necessária para matar} -- Nova missão adicionada p/ a nova recompensa
}
Editado Setembro 2 por Hudsin
Eu tenho um problema com o:
function onSay(cid, words, param, channel) local monster, permission = getPlayerStorageValue(cid,taskstg.monster), getPlayerStorageValue(cid,tasksg.permission) local kills, killstotal = getPlayerStorageValue(cid,taskstg.kills), getPlayerStorageValue(cid,taskstg.killstotal) if monster == -1 or monster == 0 then doPlayerSendTextMessage(cid,27,'Voce nao tem nenhuma task ativa.') else local left = kills - killstotal if left <= 0 then doPlayerSendTextMessage(cid,27,'Voce ja matou monstros suficientes para terminar sua task.') else doPlayerSendTextMessage(cid,27,'Andamento da sua task de '..taskmonsters[monster][1]..'s -> ['..kills..'/'..killstotal..']') end end return true end
Eu já criado e colocado tudo, mas quando eu digo que o comando !countkills no servidor eu recebo um erro:
[Error - TalkAction Interface] data/talkactions/scripts/countkills.lua:onSay Description: data/talkactions/scripts/countkills.lua:2: attempt to index global 'tasksg' (a nil value) stack traceback: data/talkactions/scripts/countkills.lua:2: in function <data/talkactions/scripts/countkills.lua:1>
Eu uso o servidor:
info
Grupo: Campones
Registrado: 21/02/08
Posts: 57
Reputação: 0
Char no Tibia: The Rev

Obrigado +rep Hudsin
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

Eu tenho um problema com o:
- Crie um arquivo countkills.lua e adicione em talkactions/scripts
function onSay(cid, words, param, channel) local monster, permission = getPlayerStorageValue(cid,taskstg.monster), getPlayerStorageValue(cid,tasksg.permission) local kills, killstotal = getPlayerStorageValue(cid,taskstg.kills), getPlayerStorageValue(cid,taskstg.killstotal) if monster == -1 or monster == 0 then doPlayerSendTextMessage(cid,27,'Voce nao tem nenhuma task ativa.') else local left = kills - killstotal if left <= 0 then doPlayerSendTextMessage(cid,27,'Voce ja matou monstros suficientes para terminar sua task.') else doPlayerSendTextMessage(cid,27,'Andamento da sua task de '..taskmonsters[monster][1]..'s -> ['..kills..'/'..killstotal..']') end end return true endEu já criado e colocado tudo, mas quando eu digo que o comando !countkills no servidor eu recebo um erro:
[Error - TalkAction Interface] data/talkactions/scripts/countkills.lua:onSay Description: data/talkactions/scripts/countkills.lua:2: attempt to index global 'tasksg' (a nil value) stack traceback: data/talkactions/scripts/countkills.lua:2: in function <data/talkactions/scripts/countkills.lua:1>Eu uso o servidor:
Pokemon Dash Advanced (1.0), last compiled at Jan 11 2012.Credits to all TFS team (Elf, slawkens, Talaturen, Lithium, KaczooH, Kiper, Kornholijo).PokemonDistro made by mastercraft/brun123.
Não é problema com a sua distro, não. O nome da variável é taskstg, não tasksg. Eu devo ter escrito errado. Se der algum outro desse erro, é só substituir por taskstg.
info
Grupo: Campones
Registrado: 21/02/08
Posts: 57
Reputação: 0
Char no Tibia: The Rev

Estou aqui mais uma vez eu gostei muito do scripit fui por no meu servidor mais deu tudo certo mais quando vou no npc falo nova task ai falo comando !countkills
sem matar nenhum mostro ele diz: 23:25 Voce ja matou monstros suficientes para terminar sua task.
também está dando esse erro na distro
[03/09/2013 23:30:06] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such table: killed_monsters (INSERT INTO killed_monsters ("name", "date") VALUES
[03/09/2013 23:30:06] ('Rotworm',1378261806)![]()
Editado Setembro 3 por jonathasbizerril
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum

Estou aqui mais uma vez eu gostei muito do scripit fui por no meu servidor mais deu tudo certo mais quando vou no npc falo nova task ai falo comando !countkills
sem matar nenhum mostro ele diz: 23:25 Voce ja matou monstros suficientes para terminar sua task.
também está dando esse erro na distro
[03/09/2013 23:30:06] OTSYS_SQLITE3_PREPARE(): SQLITE ERROR: no such table: killed_monsters (INSERT INTO killed_monsters ("name", "date") VALUES
[03/09/2013 23:30:06] ('Rotworm',1378261806)
Cara, esse erro não vem do meu script, não.
Huum, agora o erro do !countkills pode ser problema no jeito que você configurou. Vê se tá certo lá no killstotal dos monstros que você adicionou. Se quiser resetar na mão, usa esses comandos com o GOD:
/storage nome_do_jogador, 3451, -1 -- storage de kills /storage nome_do_jogador, 3452, -1 -- storage de permissão / tempo pra fazer a task /storage nome_do_jogador, 3453, -1 -- storage do total de monstros que você tem que matar /storage nome_do_jogador, 3454, -1 -- storage do monstro que você tem que matar
Aí você resetou o sistema de tasks. Confere lá a sua configuração, se ficou certinha mesmo, porque o que o script faz é adicionar um valor de storage pra quantidade total, aí compara com outro storage com a quantidade que você matou. Se você tiver configurado errado, o NPC vai colocar o valor errado como total, dando esse erro aí.
Pra ver onde é o erro, vai usando
/storage nome_do_jogador, 345N N variando de 1 a 4, como acima
Vê se os valores estão acertados.
info
Grupo: Marquês
Registrado: 16/06/07
Posts: 1.2k
Reputação: +377
Gênero: Masculino
Char no Tibia: Nenhum
Informações:
Códigos:
Tags:
Em creaturescripts.xml, adicione:
Em talkactions.xml, adicione:
No arquivo creaturescripts/scripts/login.lua, adicione:
Scripts:
-- Sistema de Task feito por Leoric (Omega no XTibia) --taskstg ={kills = 3451,permission = 3452,killstotal = 3453,monster = 3454,stage = 3455,points = 3456,}timeBetweenTasks = 24 * 60 * 60 -- tempo até poder fazer outra task (24 * 60 * 60 = 24hs)taskLevel = false -- true se quiser que as tasks sejam feitas por level / false se quiser que elas sejam feitas na ordemtaskMsg = {bool = true, msg = 'Voce acaba de matar monstros suficientes para completar sua task!'} -- bool = false > sem mensagens; bool = true > aviso quando terminar a tasktaskEnd = true -- [não tem função no modo Level] se estiver como true, quando o jogador terminar a última task disponível, ele não poderá repeti-la. Se estiver false, ele poderá repetir a última task infinitamente.taskmonsters ={[1] = {'rotworm', killstotal = 100}, -- aqui você deve mudar[2] = {'cyclop','cyclops','cyclops smith','cyclops drone', killstotal = 100},[3] = {'dragon','dragon lord','frost dragon', killstotal = 100}}taskreward = -- em gps{[1] = {money = 5000,xp = 20000, points = 3}, -- nenhum item será adicionado e 3 pontos de task serão adicionados[2] = {money = 10000,xp = 50000, item = 2458}, -- 1 item(2458) será adicionado e nenhum ponto de task[3] = {money = 20000,xp = 75000,item = 2458,amount = 2, points = 5} -- aqui serão adicionados 2 itens com id 2458 (se ele for amontoável - stackable) e 5 pontos de task}function canDoTask(cid) local stage = getPlayerStorageValue(cid, taskstg.stage) if stage + 1 > #taskmonsters then return false elseif getPlayerStorageValue(cid,taskstg.permission) <= 0 then return true elseif getPlayerStorageValue(cid,taskstg.permission) == 1 then return false elseif getPlayerStorageValue(cid,taskstg.permission) >= os.time(t) then return false end return trueendfunction doResetTask(cid) setPlayerStorageValue(cid,taskstg.kills,-1) setPlayerStorageValue(cid,taskstg.permission,os.time(t) + timeBetweenTasks) setPlayerStorageValue(cid,taskstg.killstotal,-1) setPlayerStorageValue(cid,taskstg.monster,-1) return trueendfunction doRewardTask(cid) local monster = getPlayerStorageValue(cid,taskstg.monster) local reward = taskreward[monster] if reward.item then doPlayerAddItem(cid,reward.item,(reward.amount and reward.amount or 1)) end if reward.points then local points = getPlayerStorageValue(cid, taskstg.points) if points == -1 then setPlayerStorageValue(cid, taskstg.points, 0) end setPlayerStorageValue(cid, taskstg.points, reward.points + points) end if monster and reward then doPlayerAddMoney(cid,reward.money) doPlayerAddExperience(cid, reward.xp) end return trueendfunction isSummon(cid) -- baseada na função do Vodkart if getCreatureMaster(cid) ~= nil or getCreatureMaster(cid) == true then return true end return falseendfunction doCompleteTask(cid) doRewardTask(cid) doResetTask(cid) return trueendfunction doStartTask(cid) if not taskLevel then local stage = getPlayerStorageValue(cid, taskstg.stage) if stage <= 0 then setPlayerStorageValue(cid, taskstg.monster, 1) setPlayerStorageValue(cid, taskstg.killstotal, taskmonsters[1].killstotal) setPlayerStorageValue(cid, taskstg.stage, 1) else setPlayerStorageValue(cid, taskstg.monster, stage+1) setPlayerStorageValue(cid, taskstg.killstotal, taskmonsters[stage+1].killstotal) if taskEnd or stage < #taskmonsters then setPlayerStorageValue(cid, taskstg.stage, stage+1) end end setPlayerStorageValue(cid, taskstg.permission, 1) setPlayerStorageValue(cid, taskstg.kills, 0) return true end local lvl = getPlayerLevel(cid) if lvl < 20 then local killstotal = taskmonsters[1].killstotal setPlayerStorageValue(cid,taskstg.monster,1) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) elseif lvl < 50 then local killstotal = taskmonsters[2].killstotal setPlayerStorageValue(cid,taskstg.monster,2) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) else local killstotal = taskmonsters[3].killstotal setPlayerStorageValue(cid,taskstg.monster,3) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) end setPlayerStorageValue(cid,taskstg.kills,0) return trueend
-- Sistema de Task feito por Leoric (Omega no XTibia) --function onSay(cid, words, param, channel) local monster, permission = getPlayerStorageValue(cid,taskstg.monster), getPlayerStorageValue(cid,taskstg.permission) local kills, killstotal = getPlayerStorageValue(cid,taskstg.kills), getPlayerStorageValue(cid,taskstg.killstotal) if monster == -1 or monster == 0 then doPlayerSendTextMessage(cid,27,'Voce nao tem nenhuma task ativa.') else local left = killstotal - kills if left <= 0 then doPlayerSendTextMessage(cid,27,'Voce ja matou monstros suficientes para terminar sua task.') else doPlayerSendTextMessage(cid,27,'Andamento da sua task de '..taskmonsters[monster][1]..'s -> ['..kills..'/'..killstotal..']') end end return trueend
-- Sistema de Task feito por Leoric (Omega no XTibia) --function onKill(cid, target) if not isPlayer(cid) then return true end if isSummon(target) then return true end local monster, permission = getPlayerStorageValue(cid,taskstg.monster), getPlayerStorageValue(cid,taskstg.permission) local kills, killstotal = getPlayerStorageValue(cid,taskstg.kills), getPlayerStorageValue(cid,taskstg.killstotal) if monster ~= -1 and monster ~= 0 then if isInArray(taskmonsters[monster],string.lower(getCreatureName(target))) then if kills == -1 then setPlayerStorageValue(cid,taskstg.kills,1) elseif kills + 1 == killstotal and taskMsg.bool == true then doPlayerSendTextMessage(cid, 21, taskMsg.msg) setPlayerStorageValue(cid,taskstg.kills,kills+1) else setPlayerStorageValue(cid,taskstg.kills,kills+1) end end end return trueend
<?xml version="1.0" encoding="UTF-8"?><npc name="NomedoNPC" script="data/npc/scripts/tasks.lua" walkinterval="3000" floorchange="0"> <health now="100" max="100"/> <look type="129" head="115" body="95" legs="113" feet="0" addons="3"/> <parameters> <parameter key="message_greet" value="Ei, |PLAYERNAME|, quer uma {nova task}, {informacoes} ou {cancelar} uma task? Ou sera que quer {completar} sua task? Huum... talvez ver quantos {pontos} voce tem?"/> <parameter key="message_farewell" value="Boa sorte em suas aventuras, |PLAYERNAME|."/> <parameter key="message_walkaway" value="Tchau... babaca."/> </parameters></npc>
-- Sistema de Task feito por Leoric (Omega no XTibia) --local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endfunction creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local monster, permission = getPlayerStorageValue(cid,taskstg.monster), getPlayerStorageValue(cid,taskstg.permission) local kills, killstotal = getPlayerStorageValue(cid,taskstg.kills), getPlayerStorageValue(cid,taskstg.killstotal) if msgcontains(msg,'nova task') then if monster ~= -1 then selfSay('Você já tem uma task em andamento. Termine-a antes de começar outra.',cid) elseif getPlayerStorageValue(cid, taskstg.stage) + 1 > #taskmonsters then selfSay('Eu não tenho mais tasks para você.',cid) elseif not canDoTask(cid) then selfSay('Você deve esperar '..math.ceil((permission - os.time(t))/60)..' minutos até poder começar outra task.',cid) else doStartTask(cid) selfSay('Muito bem, utilize {!countkills} para acompanhar o andamento de sua task.',cid) end talkState[talkUser] = 0 elseif msgcontains(msg,'completar') then if canDoTask(cid) then selfSay('Você não tem uma task iniciada ainda... diga {nova task} para começar uma.',cid) elseif permission > 1 then selfSay('Você não tem uma task ativa... e só poderá começar outra mais tarde.',cid) elseif killstotal > 1 and kills >= killstotal then selfSay('Parabéns por completar sua task!',cid) doCompleteTask(cid) else selfSay('Você ainda não completou sua task.',cid) end talkState[talkUser] = 0 elseif msgcontains(msg,'info') then if canDoTask(cid) and (monster == 0 or monster == -1) then selfSay('Você pode começar uma task dizendo {nova task}. Assim que disser, uma nova task será atribuída a você dependendo do seu level e você poderá acompanhar seu andamento dizendo {!countkills}.',cid) else selfSay('Você pode acompanhar sua task pelo comando {!countkills}. Assim que terminar, me avise e você receberá seu prêmio em dinheiro e experiência.',cid) end talkState[talkUser] = 0 elseif msgcontains(msg, 'pontos') then local pontos = getPlayerStorageValue(cid, taskstg.points) > 0 and getPlayerStorageValue(cid, taskstg.points) or 0 selfSay('Você tem '.. pontos ..' pontos de task.',cid) elseif msgcontains(msg,'cancelar') then if monster == 0 or monster == -1 then selfSay('Você não tem uma task ativa para cancelar.',cid) talkState[talkUser] = 0 else selfSay('Você tem certeza que quer cancelar sua task?',cid) talkState[talkUser] = 1 end elseif (msgcontains(msg,'yes') or msgcontains(msg,'sim')) and talkState[talkUser] == 1 then selfSay('Muito bem, sua task foi cancelada.',cid) doResetTask(cid) setPlayerStorageValue(cid,taskstg.permission,-1) setPlayerStorageValue(cid, taskstg.stage, getPlayerStorageValue(cid, taskstg.stage)-1) talkState[talkUser] = 0 elseif (msgcontains(msg,'no') or msgcontains(msg,'não')) and talkState[talkUser] == 1 then selfSay('Você que sabe, né...',cid) endendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())
Configuração:
É feita toda no tasklib.lua:
Configuração dos monstros:
taskmonsters ={[1] = {'rotworm', killstotal = 100},[2] = {'cyclop','cyclops','cyclops smith','cyclops drone', killstotal = 100},[3] = {'dragon','dragon lord','frost dragon', killstotal = 100}}- O [número] deve seguir a ordem
- A primeira parte deve ser o nome dos monstros da task no singular. Por isso existem 'cyclop' (singular) e 'cyclops' (nome do monstro)
- Os nomes de todos os monstros de cada task devem aparecer. Por exemplo, na task de cyclops, qualquer tipo deles servirá para completar a task.
- killstotal é a quantidade de monstros que você deve matar para terminar a task.
Configuração das recompensas:
taskreward = -- em gps{[1] = {money = 5000,xp = 20000, points = 3}, -- nenhum item será adicionado e 3 pontos de task serão adicionados[2] = {money = 10000,xp = 50000, item = 2458}, -- 1 item(2458) será adicionado e nenhum ponto de task[3] = {money = 20000,xp = 75000,item = 2458,amount = 2, points = 5} -- aqui serão adicionados 2 itens com id 2458 (se ele for amontoável - stackable) e 5 pontos de task}- O [número] deve ter a mesma ordem dos monstros
- money é a quantidade de dinheiro que cada um ganha ao terminar a task correspondente
- xp é a quantidade de experiência ganha ao terminar a task correspondente
- item é o ID do item que ganha ao terminar a task correspondente
- points significa quantos pontos de task o personagem irá ganhar quando terminar a task correspondente
Adicionando novos monstros:
- Vou explicar com um exemplo de como adicionar uma task de hydra/serpent spawn
No taskmonsters: (REPARE NA VÍRGULA QUANDO ADICIONEI UMA NOVA LINHA!)
taskmonsters ={[1] = {'rotworm', killstotal = 100},[2] = {'cyclop','cyclops','cyclops smith','cyclops drone', killstotal = 100},[3] = {'dragon','dragon lord','frost dragon', killstotal = 100},[4] = {'hydras e serpent spawn','hydra','serpent spawn',killstotal = 200}}No taskrewards:
taskreward = -- em gps{[1] = {money = 5000,xp = 20000, points = 3}, -- nenhum item será adicionado e 3 pontos de task serão adicionados[2] = {money = 10000,xp = 50000, item = 2458}, -- 1 item(2458) será adicionado e nenhum ponto de task[3] = {money = 20000,xp = 75000,item = 2458,amount = 2, points = 5}, -- aqui serão adicionados 2 itens com id 2458 (se ele for amontoável - stackable) e 5 pontos de task[4] = {money = 30000, xp = 5000, item = 2450, amount = 1, points = 3}}Agora na função doStartTask(cid) - somente se quiser que as tasks sejam feitas por level -
function doStartTask(cid) local lvl = getPlayerLevel(cid) if lvl < 20 then local killstotal = taskmonsters[1].killstotal setPlayerStorageValue(cid,taskstg.monster,1) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) setPlayerStorageValue(cid,taskstg.kills,0) elseif lvl < 50 then local killstotal = taskmonsters[2].killstotal setPlayerStorageValue(cid,taskstg.monster,2) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) setPlayerStorageValue(cid,taskstg.kills,0) elseif lvl < 80 then local killstotal = taskmonsters[3].killstotal setPlayerStorageValue(cid,taskstg.monster,3) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) setPlayerStorageValue(cid,taskstg.kills,0) else local killstotal = taskmonsters[4].killstotal setPlayerStorageValue(cid,taskstg.monster,4) setPlayerStorageValue(cid,taskstg.killstotal,killstotal) setPlayerStorageValue(cid,taskstg.permission,1) setPlayerStorageValue(cid,taskstg.kills,0) end return trueend
O que aconteceu:
- Antes até o lvl 20 o jogador recebia a task dos rotworms, até o lvl 50, a task dos cyclops e daí pra frente, task dos dragons.
- As tasks iniciais são as mesmas, mas até o lvl 80 é a task dos dragons e daí pra frente, o jogador receberá a task das hydras e serpent spawns.
Considerações finais:
O sistema de pontos apenas adiciona e checa a quantidade de pontos: você deve escolher se quer adicionar alguma coisa a partir deles.
Testei profundamente e corrigi todos os erros que encontrei, postem se encontrarem mais algum, enviem o log do erro que farei o possível para consertar.
Editado Agosto 25 por Frenvius