Ir para conteúdo
  • Cadastre-se

Posts Recomendados

3 horas atrás, Jobs disse:

refiz 3 vezes amigo, continua sem funcionar xd 

Aqui funciona perfeitamente. O erro sem duvidas alguma está na instalação.

Link para o post
Compartilhar em outros sites
  • Respostas 82
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Salve geral, recentemente fiz um Task System para meu servidor, então gostaria de compartilha ele com vocês, assim como outros scripts que fiz e gostaria de compartilhar. Bom, vamos ao que interessa.

@Jobs hehehe, nice, nice, nice, não mexo com modalwindow, meu servidor é 8.60, usando OTX 1.3, então como não tem diferença os scripts para as versões 1.x, então resolvi postar, vai pegar em todos, se

ja tô usando seu lindão!  mais pra frente, seria muito foda se você fizesse modal window! beijos, otimo sistema *-*    

Posted Images

@Jobs também achei estranho isso, refiz os passos aqui salvando somente minha tabela que estava já configurada, tudo certo. Está contando perfeitamente.

 

:/

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

troquei o tfs, não descobri porque não tava funcionando. 

 

Em 07/10/2017 em 15:51, KotZletY disse:

@Jobs também achei estranho isso, refiz os passos aqui salvando somente minha tabela que estava já configurada, tudo certo. Está contando perfeitamente.

 

:/

 

achei um bug!

 

por exemplo, 

 

se eu deixar um task sem ITEM só ponto e exp e na hora de falar com o npc "lista de tasks dailys ou normal, ele da esse erro e não mostra.

 

   [16] = {nome = "destroyer", storage = 40010, amount = 650, exp = 30000, pointsTask = {3, 3}

deixando assim ele não funciona, mas se eu deixar assim

   [16] = {nome = "destroyer", storage = 40010, amount = 650, exp = 30000, pointsTask = {3, 3}, items = {id = 0, count = 0}},

ele funciona normal. Não sei porque ;s

 

Lua Script Error: [Npc interface]
data/npc/scripts/task system.lua:onCreatureSay
data/lib/task system.lua:111: attempt to get length of local 'itemtable' (a nil value)
stack traceback:
        [C]: in function '__len'
        data/lib/task system.lua:111: in function 'getItemsFromTable'
        data/npc/scripts/task system.lua:187: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:431: in function 'onCreatureSay'
        data/npc/scripts/task system.lua:7: in function <data/npc/scripts/task system.lua:7>

 

Ainda na parte de listas, na maioria das vezes ele não mostra a recompensa por inteira, e fica desta maneira.

 

 

UMju2bT.png

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

@Jobs não é bem um erro. Kkkkkkk, apenas a função tentando chamar tabela, porém não existe nenhum, irei fixa-lo. Obrigado pelo reporte.

Em relação ao servidor de tal membro, possa ser que esteja bugado o servidor, pois todos os outros que comentaram, usaram e não deu em nada, como disse na minha última resposta, refiz os passo e estava tudo certo, o que me vem a concluir que o servidor que você usou possa está bugado!

 

2 horas atrás, Jobs disse:

 

UMju2bT.png

 600 ? Te falta humildade em ? Kkkkkk, pelo menos coloca um belo exp nisso. Huahsuhasuhasuhasuh

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites
15 minutos atrás, KotZletY disse:

@Jobs não é bem um erro. Kkkkkkk, apenas a função tentando chamar tabela, porém não existe nenhum, irei fixa-lo. Obrigado pelo reporte.

Em relação ao servidor de tal membro, possa ser que esteja bugado o servidor, pois todos os outros que comentaram, usaram e não deu em nada, como disse na minha última resposta, refiz os passo e estava tudo certo, o que me vem a concluir que o servidor que você usou possa está bugado!

 

 600 ? Te falta humildade em ? Kkkkkk, pelo menos coloca um belo exp nisso. Huahsuhasuhasuhasuh

 

ehuaheuaheua, deixa pra lá, já to usando xd 

tem que ser hard, pela recompensa rs

Então, eu colocaria pra ser tudo pelo default, por exemplo

 

hi - lista de tasks dailys

 

dai ele daria o nome, e você escolhe

- dragon lord -

ai ele te da a quantidade e recompensas, acho que ficaria mais bonito, organizado e limpo.

Link para o post
Compartilhar em outros sites

@KotZletY Achei uns erros brutos.

 

se a task for de minotaur por exemplo, e eu adicionar o nome de mais de 1 bixo, na hora de pedir a task ele não reconhece.

 

assim funciona

 [1] = {nome = "troll", storage = 30000,

assim ele não reconhece a task só se eu deixar "minotaur" only.

   [2] = {nome = "minotaur, minotaur archer, minotaur guard, minotaur mage", storage = 30001,

 

@edit fixado.

 

Editado por Jobs (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 10/10/2017 em 23:28, Jobs disse:

[2] = {nome = "minotaur, minotaur archer, minotaur guard, minotaur mage", storage = 30001,

Meu task não funciona dessa maneira com vários nomes, é apenas um único nome, se o nome do monstro que você está matando for igual ao da task que você pegou então pronto, porém se existe outros monstros que são referentes ao que você esta matando, no caso acima terá que fazer uma task separada para eles.

 

@TÓPICO: Fixado o erro da tabela de itens e alguns outros pequenos detalhes!

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites
9 horas atrás, KotZletY disse:

Meu task não funciona dessa maneira com vários nomes, é apenas um único nome, se o nome do monstro que você está matando for igual ao da task que você pegou então pronto, porém se existe outros monstros que são referentes ao que você esta matando, no caso acima terá que fazer uma task separada para eles.

 

@TÓPICO: Fixado o erro da tabela de itens e alguns outros pequenos detalhes!

consegui corrigir da seguinte maneira eita, "minotaur", "minotaur Archer", "minotaur guard",

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Parece que meu Servidor nã tem Lib.lua apenas a Pasta lib e os Arquivos .lua mais nenhum lib.lua é normal?

Link para o post
Compartilhar em outros sites

@Cain Jorge olhe o titulo, sistema feito para 1.x, logo me refiro a versão da distro. Para versões anteriores utilize a do vodkart!

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

Parabéns @KotZletY muito bom mesmo!

 

Uso tfs 1.3 porém eu coloco o nome do exemplo Rotworm ou Rotworms, mas ele não identifica quando falo com NPC e digo nome do monster

image.png.71767e038655bf175cd326958b9c6a3d.png

image.png.01611c9a518c8fb2bfec549d57cd672c.png

 

task_monsters = {
[1] = {nome = "Rotworms", storage = 30000, amount = 40, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}},
[2] = {nome = "Rotworm", storage = 30001, amount = 80, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 2}}},
   

 

Não sei qual problema, poderia me ajudar? 

 

EDIT (monsters ok)

Eu coloquei o nome em letra minúscula e funcionou, vou continuar testando, por enquanto ok.

 

EDIT2 (task rank + task points show)

Percebi que o task points e rank não estão aparecendo no channel, como faço para ativa-los?

 

EDIT3 (task rank + task points RESOLVIDO)

Bom vi que no código tinha as funções que puxavam essas informações, portanto apenas modifiquei o lugar delas e agora esta aparecendo

function onSay(player, words, param)
local text = ' ****** Tasks System Information ****** \n\n[+] Pontos Task [+]: Voce tem '..taskPoints_get(player)..' pontos Task.\n[+] Pontos Task Rank [+]: Voce tem '..taskRank_get(player)..' pontos Task.\n[+] Task Rank [+]: '..getRankTask(player)..'\n'
if param:lower() == "me" then
text = text .. '[+] Pontos Task [+]: Voce tem '..taskPoints_get(player)..' pontos Task.\n[+] Pontos Task Rank [+]: Voce tem '..taskRank_get(player)..' pontos Task.\n[+] Task Rank [+]: '..getRankTask(player)..' '
return false,  player:popupFYI(text)
end

if getTaskInfos(player) then
local taskNormal = player:getStorageValue(getTaskInfos(player).storage)
  text = text .. '\n\n       ****** [+] Task Normal [+] ****** \n      \n\n[*] Task Atual [*]: '..getTaskInfos(player).nome..' - Voce precisa matar: '..getTaskInfos(player).amount..'.\n[*] Premios [*]: '..getItemsFromTable(getTaskInfos(player).items)..' - '..getTaskInfos(player).pointsTask[1]..' Pontos Task - '..getTaskInfos(player).pointsTask[2]..' Pontos Rank da Task. \n[*] Progresso [*]: ['..(player:getStorageValue(getTaskInfos(player).storage))..'/'..getTaskInfos(player).amount..']\n[*] Status da Task [*]: '..(taskNormal == getTaskInfos(player).amount and 'Completa' or 'Incompleta')..'!'			
else
 text = text .. '\n\n       ****** [+] Task Normal [+] ****** \n      \n\n- Voce nao esta fazendo Task nenhuma.'
end

if getTaskDailyInfo(player) then
local taskDaily = player:getStorageValue(getTaskDailyInfo(player).storage)
  text = text .. '\n\n\n ****** [+] Task Diaria [+] ****** \n      \n\n[*] Task Atual [*]: '..getTaskDailyInfo(player).nome..' - Voce precisa matar: '..getTaskDailyInfo(player).amount..'.\n[*] Premios [*]: '..getItemsFromTable(getTaskDailyInfo(player).items)..' - '..getTaskDailyInfo(player).pointsTask[1]..' Pontos Task - '..getTaskDailyInfo(player).pointsTask[2]..' Pontos Rank da Task. \n[*] Progresso [*]: ['..(player:getStorageValue(getTaskDailyInfo(player).storage))..'/'..getTaskDailyInfo(player).amount..']\n[*] Status da Task [*]: '..(taskDaily == getTaskDailyInfo(player).amount and 'Completa' or 'Incompleta')..'!'			
else
text = text .. '\n\n\n ****** [+] Task Diaria [+] ****** \n      \n\n- Voce nao esta fazendo nenhuma Task Diaria.'
end
 return false,  player:popupFYI(text)
end

image.png.ebacd80c6e0f8736418f6d7e3046abc3.png

Valeu tudo ok por enquanto!! rsrs

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

@luanluciano93 show de bola, bem bacana as alterações, coloque um crédito referente a mim pelo task system, acho mais viável você adicionar também aos criadores dos outros eventos/sistemas.

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites
  • 1 month later...
Em 02/10/2017 em 00:44, KotZletY disse:

Salve geral, recentemente fiz um Task System para meu servidor, então gostaria de compartilha ele com vocês, assim como outros scripts que fiz e gostaria de compartilhar. Bom, vamos ao que interessa.

                  

 

                                                                                                         Informações!!

Task Normal - Você 1x por vez, quantas vezes quiser, repetindo a task se também quiser.

Task Diaria -  Você faz uma vez por dia, não podendo repeti em quanto as 24 horas não terminar.

Task Rank - É mostrado na descrição do player qual rank task ele possui.

Task Rank Quest - Um extra desse task system é o piso task, que funciona da seguinte maneira. Você só pode passar para um local, por exemplo, uma quest, você só pode passar pelo portal, piso, etc... caso você tenha algum rank que você irá escolher ou quantidade de task points, ou ambos junto e misturado. Kkkkkkk

Task Comandos - Comandos task, 1 para ver o progresso das suas task e outro para mostrar informações do seu personagem, como uma consulta, os comandos são: !task que mostra quais task você ta fazendo, tanto diaria quanto normal e !task me que mostrar informações do seu personagem, como rank, quantidade de pontos task e quantidade de pontos task rank.

Well, o resto é surpresa, cabe você descobrir! xD

 

 

Para não ficar só nas palavras, mostrarei algumas imagens, várias no caso: https://imgur.com/a/6HwFy

 

                                                                                                         Instalação!!

Muito bem, chega de conversa, como instalar logo essa bagaça. Primeiramente vá em data/lib e abra o arquivo lib.lua e adicione:


dofile('data/lib/task system.lua')

Ainda na pasta lib crie um arquivo.lua chamado task system.lua e adicione esse code dentro:

  Ocultar conteúdo


task_monsters = {
   [1] = {nome = "monstro1", storage = 30000, amount = 20, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}},
   [2] = {nome = "monstro2", storage = 30001, amount = 10, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 5}}},
   [3] = {nome = "monstro2", storage = 30002, amount = 10, exp = 18000, pointsTask = {1, 1}, items = {{id = 2195, count = 1}, {id = 2160, count = 8}}},
   [4] = {nome = "monstro3", storage = 30003, amount = 10, exp = 20000, pointsTask = {1, 1}, items = {{id = 2520, count = 1}, {id = 2160, count = 10}}}
}

task_daily = {
   [1] = {nome = "monstroDay1", storage = 40000, amount = 10, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}},
   [2] = {nome = "monstroDay2", storage = 40001, amount = 10, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 5}}},
   [3] = {nome = "monstroDay3", storage = 40002, amount = 10, exp = 18000, pointsTask = {1, 1}, items = {{id = 2195, count = 1}, {id = 2160, count = 8}}},
   [4] = {nome = "monstroDay4", storage = 40003, amount = 10, exp = 20000, pointsTask = {1, 1}, items = {{id = 2520, count = 1}, {id = 2160, count = 10}}}
}

task_storage = 20020 -- storage que verifica se está fazendo alguma task e ver qual task é - task normal
task_points = 20021 -- storage que retorna a quantidade de pontos task que o player tem.
task_sto_time = 20022 -- storage de delay para não poder fazer a task novamente caso ela for abandonada.
task_time = 20 -- tempo em horas em que o player ficará sem fazer a task como punição
task_rank = 20023 -- storage do rank task
taskd_storage = 20024 -- storage que verifica se está fazendo alguma task e ver qual task é - task daily
time_daySto = 20025 -- storage do tempo da task daily, no caso para verificar e add 24 horas para fazer novamente a task daily


local ranks_task = {
[{1, 20}] = "Newbie", 
[{21, 50}] = "Elite",
[{51, 100}] = "Master",
[{101, 200}] = "Destroyer",		
[{201, math.huge}] = "Juggernaut"
}

function getTaskInfos(uid)
return task_monsters[Player(uid):getStorageValue(task_storage)] or false
end

function getTaskDailyInfo(uid)
return task_daily[Player(uid):getStorageValue(taskd_storage)] or false
end


function taskPoints_get(uid)
if Player(uid):getStorageValue(task_points) == -1 then
return 0 
end
return Player(uid):getStorageValue(task_points)
end

function taskPoints_add(uid, count)
return Player(uid):setStorageValue(task_points, taskPoints_get(uid) + count)
end

function taskPoints_remove(uid, count)
return Player(uid):setStorageValue(task_points, taskPoints_get(uid) - count)
end



function taskRank_get(uid)
if Player(uid):getStorageValue(task_rank) == -1 then
return 1 
end
return Player(uid):getStorageValue(task_rank)
end

function taskRank_add(uid, count)
return Player(uid):setStorageValue(task_rank, taskRank_get(uid) + count)
end


function getRankTask(uid)
local pontos = taskRank_get(uid)
	for _, z in pairs(ranks_task) do
		if pontos >= _[1] and pontos <= _[2] then
		return z
		end
	end
end


function getItemsFromTable(itemtable)
     local text = ""
     for v = 1, #itemtable do
         count, info = itemtable[v].count, ItemType(itemtable[v].id)
         local ret = ", "
         if v == 1 then
             ret = ""
         elseif v == #itemtable then
             ret = " - "
         end
         text = text .. ret
         text = text .. (count > 1 and count or info:getArticle()).." "..(count > 1 and info:getPluralName() or info:getName())
     end
     return text
end

 

 

No final do tópico, ensinarei a configurar a lib. Agora vai em, data/npc e crie um arquivo.xml chamado  task.xml e coloque esse code dentro:


<?xml version="1.0" encoding="UTF-8"?>
<npc name="NPC Task" script="task system.lua" walkinterval="0" floorchange="0">
<health now="150" max="150"/>
<look type="430"/>
<parameters>
<parameter key="message_greet" value="Olá |PLAYERNAME|. Fiquei encarregado da missão de entregar Missões Task para ajuda a vila em alguns aspectos. Gostaria de fazer a task {normal}, {diaria}, {receber}, {abandonar}, ou gostaria de ver a {lista de tasks normais} ou a {lista de task dailys} ?"/>
<parameter key="message_farewell" value="Até mais!" />
		<parameter key="message_walkaway" value="Até mais!" />
        </parameters>
</npc>

Ainda na pasta npc, entre na pasta scripts e crie um arquivo.lua chamado task system.lua e adicione esse code dentro:

  Mostrar conteúdo oculto


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)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

npcHandler:addModule(FocusModule:new())

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local player = Player(cid)
local msg = msg:lower()
------------------------------------------------------------------
if npcHandler.topic[cid] == 0 and msgcontains(msg, 'normal') then
 npcHandler:say("Ótimo. A task de qual monstro você gostaria de fazer ?", cid)
 npcHandler.topic[cid] = 1
elseif npcHandler.topic[cid] == 1 then
for mon, l in pairs(task_monsters) do 
 if player:getStorageValue(task_sto_time) < os.time() then
  if player:getStorageValue(task_storage) == -1 then 
   if msg == l.nome then
     npcHandler:say("Muito bem, você agora está fazendo a task do {"..l.nome:gsub("^%l", string.upper).."}, você precisa matar "..l.amount.." deles. Boa Sorte!", cid)
     player:setStorageValue(task_storage, mon)
	 player:setStorageValue(l.storage, 0)
	 npcHandler.topic[cid] = 0
	 npcHandler:releaseFocus(cid)
   break
   else
	 npcHandler:say("Desculpe mais não temos essa task.", cid)
	 npcHandler.topic[cid] = 0
   end
  else
   npcHandler:say("Você já está fazendo uma task. Você só pode fazer uma por vez. Diga {!task} para ver informações sobre sua task atual.", cid)
   npcHandler.topic[cid] = 0
  end
 else
  npcHandler:say("Não estou altorizado a lhe entregar nenhuma missão, por você ter abandonado a anterior. Espere as 2 horas de punicação acabar.", cid)
  npcHandler.topic[cid] = 0
 end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif npcHandler.topic[cid] == 0 and msgcontains(msg, 'diaria') then
 if player:getStorageValue(time_daySto) < os.time() then
  npcHandler:say("Lembre-se, é de grande importância que as task diarias sejam feita. Agora me diga, a task de qual monstro você gostaria de fazer ?", cid)
  npcHandler.topic[cid] = 2
else
  npcHandler:say('Você já completou a task diaria de hoje, espere passar as 24 horas para fazer novamente.', cid)
  npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 2 then
for mon, l in pairs(task_daily) do 
 if player:getStorageValue(task_sto_time) < os.time() then
  if player:getStorageValue(taskd_storage) == -1 then 
   if msg == l.nome then
    npcHandler:say("Muito bem, você agora está fazendo a task diaria do {"..l.nome:gsub("^%l", string.upper).."}, você precisa matar "..l.amount.." deles. Boa Sorte!", cid)
    player:setStorageValue(taskd_storage, mon)
	player:setStorageValue(l.storage, 0)
	npcHandler.topic[cid] = 0
	npcHandler:releaseFocus(cid)
   break
   else
	npcHandler:say("Desculpe mais não temos essa task diaria.", cid)
	npcHandler.topic[cid] = 0
   end
  else
   npcHandler:say("Você já está fazendo uma task diaria. Você só pode fazer uma por dia. Diga {!task} para ver informações sobre sua task atual.", cid)
   npcHandler.topic[cid] = 0
  end
 else
  npcHandler:say("Não estou altorizado a lhe entregar nenhuma missão, por você ter abandonado a anterior. Espere as 2 horas de punicação acabar.", cid)
  npcHandler.topic[cid] = 0
 end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, 'receber') then
 if npcHandler.topic[cid] == 0 then
  npcHandler:say("Qual tipo de task você terminou, {normal} ou {diaria} ?", cid)
  npcHandler.topic[cid] = 3
 end
elseif npcHandler.topic[cid] == 3 then
if msgcontains(msg, 'normal') then
 if getTaskInfos(player) then
  if player:getStorageValue(getTaskInfos(player).storage) == getTaskInfos(player).amount then
    local pt1 = getTaskInfos(player).pointsTask[1]
    local pt2 = getTaskInfos(player).pointsTask[2]
	local txt = 'Obrigado por ter feito a task, seus prêmios são: '..(pt1 > 1 and pt1..' pontos task' or pt1 <= 1 and pt1..' ponto task')..' e '..(pt2 > 1 and pt2..' pontos rank' or pt2 <= 1 and pt2..' ponto rank')..', '
	if #getItemsFromTable(getTaskInfos(player).items) > 0 then
	txt = txt..'além de ganhar: '..getItemsFromTable(getTaskInfos(player).items)..', '
    for g = 1, #getTaskInfos(player).items do
     player:addItem(getTaskInfos(player).items[g].id, getTaskInfos(player).items[g].count)
    end
	end
	local exp = getTaskInfos(player).exp
	if exp > 0 then
	txt = txt..'vou lhe dar também '..exp..' de experiência, '
    player:addExperience(exp)
	end
	taskPoints_add(player, pt1)
	taskRank_add(player, pt2)
	player:setStorageValue(getTaskInfos(player).storage, -1)
    player:setStorageValue(task_storage, -1)
	npcHandler:say(txt..'mais uma vez obrigado e até mais!', cid)
	npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
  else
    npcHandler:say('Você ainda não terminou sua task atual. Receberá ela quando termina.', cid)
	npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
  end
 else
  npcHandler:say('Você não está fazendo nenhuma task.', cid)
  npcHandler.topic[cid] = 0
  npcHandler:releaseFocus(cid)
 end
elseif npcHandler.topic[cid] == 3 and msgcontains(msg, 'diaria') then
if player:getStorageValue(time_daySto)-os.time() <= 0 then
if getTaskDailyInfo(player) then
 if player:getStorageValue(getTaskDailyInfo(player).storage) == getTaskDailyInfo(player).amount then
	local pt1 = getTaskDailyInfo(player).pointsTask[1]
	local pt2 = getTaskDailyInfo(player).pointsTask[2]
	local txt = 'Obrigado por ter feito a task, seus prêmios são: '..(pt1 > 1 and pt1..' pontos task' or pt1 <= 1 and pt1..' ponto task')..' e '..(pt2 > 1 and pt2..' pontos rank' or pt2 <= 1 and pt2..' ponto rank')..', '
 
	if #getTaskDailyInfo(player).items > 0 then
	txt = txt..'além de ganhar: '..getItemsFromTable(getTaskDailyInfo(player).items)..', '
	for g = 1, #getTaskDailyInfo(player).items do
     player:addItem(getTaskDailyInfo(player).items[g].id, getTaskDailyInfo(player).items[g].count)
    end
	end
	local exp = getTaskDailyInfo(player).exp
	if exp > 0 then
	txt = txt..'vou lhe dar também '..exp..' de experiência, '
    player:addExperience(exp)
	end
	npcHandler:say(txt..' mais uma vez obrigado e te vejo amanhã!!', cid)
	taskPoints_add(player, pt1)
	taskRank_add(player, pt2)
	player:setStorageValue(getTaskDailyInfo(player).storage, -1)
    player:setStorageValue(taskd_storage, -1)
    player:setStorageValue(time_daySto, 1*60*60*24+os.time())
	npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
 else
    npcHandler:say('Você ainda não terminou sua task atual. Receberá ela quando termina.', cid)
	npcHandler.topic[cid] = 0
    npcHandler:releaseFocus(cid)
 end
else
 npcHandler:say('Você não está fazendo nenhuma task diaria.', cid)
 npcHandler.topic[cid] = 0
 npcHandler:releaseFocus(cid)
end
else
 npcHandler:say('Você já fez uma task diaria, aguarde completar 24 horas para fazer outra novamente.', cid)
 npcHandler.topic[cid] = 0
 npcHandler:releaseFocus(cid)
end
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, 'abandonar') then
if npcHandler.topic[cid] == 0 then
  npcHandler:say("Qual tipo de task você quer abandonar, {normal} ou {diaria} ?", cid)
  npcHandler.topic[cid] = 4
end
elseif npcHandler.topic[cid] == 4 and msgcontains(msg, 'normal') then
if getTaskInfos(player) then
   npcHandler:say('Lamentável essa situação, tinha fé que você me traria essa missão feita, mais estava errado. Como punição ficará 2 horas sem poder fazer qualquer task.', cid)
   player:setStorageValue(task_sto_time, os.time()+task_time*60*60)
   player:setStorageValue(getTaskInfos(player).storage, -1)
   player:setStorageValue(task_storage, -1)
   npcHandler:releaseFocus(cid)
else
  npcHandler:say('Você não está fazendo nenhuma task para poder abandona-lá.', cid)
  npcHandler:releaseFocus(cid)
end
elseif npcHandler.topic[cid] == 4 and msgcontains(msg, 'diaria') then
if getTaskDailyInfo(player) then
   npcHandler:say('Lamentável essa situação, tinha fé que você me traria essa missão feita, mais estava errado. Como punição ficará 2 horas sem poder fazer qualquer task.', cid)
   player:setStorageValue(task_sto_time, os.time()+task_time*60*60)
   player:setStorageValue(getTaskDailyInfo(player).storage, -1)
   player:setStorageValue(taskd_storage, -1)
   npcHandler:releaseFocus(cid)
else
  npcHandler:say('Você não está fazendo nenhuma task diaria para poder abandona-lá.', cid)
  npcHandler:releaseFocus(cid)
end
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, "lista de tasks normais") then
local text = "----**| -> Tasks Normal <- |**----\n\n"
 for _, d in pairs(task_monsters) do
  text = text .."------ [*] "..d.nome.." [*] ------ \n[+] Quantidade [+] -> ["..(player:getStorageValue(d.storage) + 1).."/"..d.amount.."]:\n[+] Prêmios [+] ->  "..(#d.items > 1 and getItemsFromTable(d.items).." - " or "")..""..d.exp.." experience \n\n"
 end
player:showTextDialog(1949, "" .. text)
npcHandler:say("Aqui está a lista de task's normais.", cid)
------------------------------------------------------------------
------------------------------------------------------------------
elseif msgcontains(msg, "lista de task dailys") then
local text = "----**| -> Tasks Dailys <- |**----\n\n"
 for _, d in pairs(task_daily) do
  text = text .."------ [*] "..d.nome.." [*] ------ \n[+] Quantidade [+] -> ["..(player:getStorageValue(d.storage) + 1).."/"..d.amount.."]:\n[+] Prêmios [+] ->  "..(#d.items > 1 and getItemsFromTable(d.items).." - " or "")..""..d.exp.." experience \n\n"
 end
player:showTextDialog(1949, "" .. text)
npcHandler:say("Aqui está a lista task's diaria.", cid)
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

 

 

Agora vá em data/talkactions e abra o arquivo talkactions.xml e adicione a seguinte tag:


<talkaction words="!task" separator=" " script="task system.lua" />

Ainda na pasta talkactions entre na pasta scripts e crie um arquivo.lua chamado task system.lua e adicione esse code dentro dele:

  Mostrar conteúdo oculto


function onSay(player, words, param)
local text = '---------------------------**| -> Tasks System Infos <- |**---------------------------\n'
if param:lower() == "me" then
text = text .. '[+] Pontos Task [+]: Você tem '..taskPoints_get(player)..' pontos Task.\n[+] Pontos Task Rank [+]: Você tem '..taskRank_get(player)..' pontos Task.\n[+] Task Rank [+]: '..getRankTask(player)..''
return false,  player:popupFYI(text)
end

if getTaskInfos(player) then
local taskNormal = player:getStorageValue(getTaskInfos(player).storage)
  text = text .. '\n\n      [ -> ----- [+] Task Normal [+] ----- <- ]\n      \n[*] Task Atual [*]: '..getTaskInfos(player).nome..' - Você precisa matar: '..getTaskInfos(player).amount..'.\n[*] Prêmios [*]: '..getItemsFromTable(getTaskInfos(player).items)..' - '..getTaskInfos(player).pointsTask[1]..' Pontos Task - '..getTaskInfos(player).pointsTask[2]..' Pontos Rank da Task. \n[*] Progresso [*]: ['..(player:getStorageValue(getTaskInfos(player).storage))..'/'..getTaskInfos(player).amount..']\n[*] Status da Task [*]: '..(taskNormal == getTaskInfos(player).amount and 'Completa' or 'Incompleta')..'!'			
else
 text = text .. '\n\n      [ -> ----- [+] Task Normal [+] ----- <- ]\n      \n--- Você não está fazendo Task nenhuma.'
end

if getTaskDailyInfo(player) then
local taskDaily = player:getStorageValue(getTaskDailyInfo(player).storage)
  text = text .. '\n\n\n      [ -> ----- [+] Task Diaria [+] ----- <- ]\n      \n[*] Task Atual [*]: '..getTaskDailyInfo(player).nome..' - Você precisa matar: '..getTaskDailyInfo(player).amount..'.\n[*] Prêmios [*]: '..getItemsFromTable(getTaskDailyInfo(player).items)..' - '..getTaskDailyInfo(player).pointsTask[1]..' Pontos Task - '..getTaskDailyInfo(player).pointsTask[2]..' Pontos Rank da Task. \n[*] Progresso [*]: ['..(player:getStorageValue(getTaskDailyInfo(player).storage))..'/'..getTaskDailyInfo(player).amount..']\n[*] Status da Task [*]: '..(taskDaily == getTaskDailyInfo(player).amount and 'Completa' or 'Incompleta')..'!'			
else
text = text .. '\n\n\n      [ -> ----- [+] Task Diaria [+] ----- <- ]\n      \n--- Você não está fazendo nenhuma Task Diaria.'
end
 return false,  player:popupFYI(text)
end

 

 

Agora vá em data/creaturescripts e abra o arquivo creaturescripts.xl e adicione a seguinte tag:


<event type="kill" name="tasksystem" script="task system.lua"/>

Ainda na pasta creaturescripts entre na pasta scripts e crie um arquivo.lua chamado task system.lua e adicione esse code dentro dele:

  Mostrar conteúdo oculto


function onKill(player, target)
if target:isPlayer()  or target:getMaster() then
	return true
end

if getTaskInfos(player) then
 if target:getName():lower() == getTaskInfos(player).nome then
  if player:getStorageValue(getTaskInfos(player).storage) < getTaskInfos(player).amount then
   player:setStorageValue(getTaskInfos(player).storage, player:getStorageValue(getTaskInfos(player).storage) + 1)
   player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Task System] Você matou ['..(player:getStorageValue(getTaskInfos(player).storage))..'/'..getTaskInfos(player).amount..'] '..target:getName()..'.')
  end
 end
end

if getTaskDailyInfo(player) then
 if target:getName():lower() == getTaskDailyInfo(player).nome then
  if player:getStorageValue(getTaskDailyInfo(player).storage) < getTaskDailyInfo(player).amount then
   player:setStorageValue(getTaskDailyInfo(player).storage, player:getStorageValue(getTaskDailyInfo(player).storage) + 1)
   player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, '[Task System Daily] Você matou ['..(player:getStorageValue(getTaskDailyInfo(player).storage))..'/'..getTaskDailyInfo(player).amount..'] '..target:getName()..'.')
  end
 end
end

return true
end

 

Ainda na pasta script  abra o login.lua e adicione dentro:


player:registerEvent("tasksystem")

Agora vá em data/events/scripts e abra o arquivo player.lua, depois de aberto, antes de:


self:sendTextMessage(MESSAGE_INFO_DESCR, description)

adicione:


if thing:isPlayer() then
	description = string.format("%s\nTask Rank: "..getRankTask(thing), description)
end

 

Essa parte é um extra para aqueles que gostaria de usar a task points ou rank em alguma quest e tals...

Vamos a um simples piso, vá em data/movements e abra o arquivo movements.xml eadicione a seguinte tag:


<movevent event="StepIn" actionid="XXXXX" script="task system.lua"/>

Onde tem XXXXX escolha um actions id e coloque no lugar dos x.

 

Agora continuando na pasta movements, entre na pasta scripts crie um arquivo.lua chamado  task system.lua e adicione esse code dentro dele:

  Ocultar conteúdo


local pontos = 25 -- Quantos pontos precisa para poder passar.

function onStepIn(player, item, position, fromPosition)
if isPlayer(player) then
if taskPoints_get(player) >= pontos then
player:sendTextMessage(MESSAGE_EVENT_ORANGE,"Boa sorte na quest!!")
taskPoints_remove(player, pontos) -- Essa função remove a quantidade de pontos task do player depois que ele passar. Caso não queira tirar os pontos do player, basta remover essa linha.
else
player:teleportTo(fromPosition)
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE,"Você precisa ter 25 pontos task para poder passar.")
end
end
return true
end

 

 

Coloque a actionid escolhida no piso que o player só passará se tiver tal quantidade de pontos.

 

                                                                                                         Configurando!!

 


task_monsters = {
   [1] = {nome = "monstro1", storage = 30000, amount = 20, exp = 5000, pointsTask = {1, 1}, items = {{id = 2157, count = 1}, {id = 2160, count = 3}}},
   [2] = {nome = "monstro2", storage = 30001, amount = 10, exp = 10000, pointsTask = {1, 1}, items = {{id = 10521, count = 1}, {id = 2160, count = 5}}},
   [3] = {nome = "monstro2", storage = 30002, amount = 10, exp = 18000, pointsTask = {1, 1}, items = {{id = 2195, count = 1}, {id = 2160, count = 8}}},
   [4] = {nome = "monstro3", storage = 30003, amount = 10, exp = 20000, pointsTask = {1, 1}, items = {{id = 2520, count = 1}, {id = 2160, count = 10}}}
}

                                       
                                              
nome - Nome do monstro.
storage - É a storage que salva a quantidade de monstros já matados.
amount - É a quantidade necessária de monstros matados para finalizar a task.
exp - É a quantidade de Experiência que vai ganhar ao finalizar a task, caso não queira dar experiência, basta deixar em 0.
pointsTask = {Task Points Que vai ganhar(Pontos usado no piso e etc..), Pontos Rank, que irá ganhar e aumentar seu rank.}
items - Itens que o player vai ganhar, devem está tabelados, dentro da tabela item, adicione das tabelas contendo o id do item e count, quantidade de items que irá ganhar.
Ex: items = {{id = 2157, count = 1}, {id = 2160, count = 3}} -- Aqui contém 2x tipos de itens, o 2157 e o 2160, e suas devidas quantidades que irá ganhar.
items = {{id = 2157, count = 1}} -- Aqui só tem 1 tipo de item e a quantidade que vai ganhar.
Adicione quantos itens quiser. O mesmo vale para as task diarias!

 

 

 

Bom, é isso ae, qualquer duvida, crítica, sugestões, deixem ae, se precisa de suporte na instalação ou está com erro em algo estarei dando suporte, abraços e bom uso do sistema.

É totalmente proibido leva meu sistema para outro site, blog ou fórum!

 

 

Será que pode me ajudar ?, se sim. Como posso fazer um outro npc mais que ele contenha outros monstro difentente desses tipo um npc para cada rank.

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Aqui não está contando, alguém pode me ajudar? add tudo certinho no creaturescripts...

Uso tfs 1.3 otx 3.10

Link para o post
Compartilhar em outros sites

@amoxicilina duplique o sistema. 

@vine96 registrou o evento no login.lua ?

 

@Tópico: Irei da uma atualizada no sistema, ele está meio falho em relação ao código na qual eu não tinha experiência no dia em que fiz, iei otimiza-lo, deixa-lo mais elegante!! 

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites
  • KotZletY mudou o título para Task System 1.2+

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 Bagon
      Bom, hoje venho trazer á vocês um sistema de Pet System DIFERENCIADO de alguns presentes no fórum. Este sistema tem diversos comandos diferenciados, como: 
       
      !pet nomedopet este comando irá sumonar o pet. 
      !remove irá remover o pet.
      !fale eu sou lindo o pet falará "eu sou lindo"
      !conversar o pet irá conversar com vc. 
       
      Então sem mais delongas vamos ao script.
       
      OBS: SCRIPT TESTADO SOMENTE EM TFS 0.4/0.3, e este script foi feito com a intenção de ser vendido no site do ot ou em poderá usar como quest usando o item selecionado como premio. fique ao seu critério.
       
      Primeiro vá até a pasta talkaction/script e crie um arquivo chamado petsystem.lua, depois coloque o seguinte script:
       
       
      Agora em talkactions/talkactions.xml adicione a seguinte tag:
       
      <talkaction words="!pet;!remove;!fale;!conversar" event="script" value="petsystem.lua" />  
      EXPLICAÇÂO:
      As partes em Negrito, são os pets. Você pode alterar ou criar monstros para fazer eles como pets. (Recomendo criar um monstro para que seja somente pet.)
       
      Exemplo: ["dog"]= {stor=78552},      
       
       
      Lembrando que é necessário mudar esta parte no script do monstro colocado a cima.
       
      <flag attackable="1" /> para :
       
      <flag attackable="0" />  
      agora vá em action/script e crie um arquivo chamado pet com o seguinte script:
       
       
      e vá em action.xml e adiciona a seguinte tag:
       
      <action itemid="10063" script="pet.lua"/> Explicação: Na tag da action o itemid é o item que deverá ser usado para ganhar a storage 78552, e assim podera sumonar o monstro com esta storage.
       
                                              
                                                         CRIE UMA ACTION COM A TAG A CIMA PARA CADA MONSTRO COLOCADO NA TALKACTION,
                                                         BASTA VC ALTERAR A STORAGE DO SCRIPT DA ACTION
                                                         EXEMPLO: em action altere as storage que estão em vermelho, como mostra abaixo
       
                                                              if getPlayerStorageValue(cid, 78552) < 1 then
                                                              setPlayerStorageValue(cid, 78552, 1)
       
                                                         aonde tem 78552 altere para 78553 que no caso é a storage do cyclops escolhido lá no script da talkaction
                                                         e assim susecivelmente.
       
       
       
      CREDITOS:
      Mulizeu
      Smartbox
      Bagon 
       
    • Por ambrozii0
      Gostaria de fazer um pedido de um NPC de Task progressiva,

      Ele iniciaria dando missões para level 8 para caçar Troll, Rotworm e Ghoul.
       
      No level 30 liberaria: Cyclops, Dragon e Wyrm... e assim em diante se puder deixar comentado eu faço as criaturas na sequencia dos leveis seguintes.
       
      O jogador pode fazer as tasks dos leveis anteriores mesmo que já tenha ultrapassado o level do próximo nível de task.
       
      E o jogador ao terminar a missão poderia escolher a recompensa em gold ou experiência. As tasks podem se repetir sem problema, mas apenas pode pegar uma de cada vez.
       
      Ao finalizar todas as tasks o jogador ganha uma montaria.
       
      Minha versão de cliente é 12.91
      Versão da Canary 2.6.1
      Não sei qual o TFS do meu servidor.
    • Por Imperius
      Olá, pessoal! Acabei encontrando um script que tinha feito a um tempo atrás. Estou compartilhando aqui para quem quiser usar ou melhorar.
       
      É bem parecido com os outros sistemas de roleta, igual deste tópico: https://tibiaking.com/forums/topic/101557-action-cassino-roleta-de-items/
       
      Como funciona?
       
      O "Treasure Chest" é um item custom, onde o jogador têm a possibilidade de ganhar itens raros ou bem meia boca. Tudo dependerá da sorte.
       
      O jogador precisa tacar o treasure chest na bancada e acionar a alavanca. O treasure chest irá se transformar em vários itens de forma randômica no qual o jogador poderá ou não ganhar. No final, apenas um item é entregue ao jogador.
       
      Para entender melhor o seu funcionamento, segue o GIF abaixo:
       

       
       
      em data > actions > actions.xml
       
       
      em data > actions > scripts > crie um arquivo chamado leverTreasureChest.lua
       
       
      no banco de dados do servidor, adicione o seguinte código em "SQL":
       
       
       

      Também estou disponibilizando uma página PHP, para quem quiser usar no site do servidor. Na página tem informações sobre o funcionamento, quais são os possíveis prêmios e a lista de jogadores que ganharam os itens raros.
       

       
       
      Espero ter ajudado de alguma forma! : )
       
      treasure_chest.php
    • Por luanluciano93
      Olá pessoal, estou desenvolvendo esse sistema vip para TFS 1.x, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos.
       
      É só ir no arquivo data/lib/core/player.lua e adicionar esse código no começo do script:
      -- ALTER TABLE `accounts` ADD `vip_time` BIGINT(20) NOT NULL DEFAULT 0; -- player:getVipTime() function Player.getVipTime(self) local resultId = db.storeQuery("SELECT `vip_time` FROM `accounts` WHERE `id` = '".. self:getAccountId() .."';") local time = resultId ~= false and result.getNumber(resultId, "vip_time") or 0 result.free(resultId) return time end -- player:isVip() function Player.isVip(self) return self:getVipTime() > os.time() and true or false end -- player:addVipDays(days) function Player.addVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVipDays(days) function Player.removeVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:setVipDays(days) function Player.setVipDays(self, days) return db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVip() function Player.removeVip(self) db.query("UPDATE `accounts` SET `vip_time` = '0' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:sendVipDaysMessage() function Player.sendVipDaysMessage(self) if self:isVip() then local vipTime = self:getVipTime() - os.time() local vipDays = 1 + (math.floor(vipTime / 86400)) return self:getVipTime() ~= false and self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'You have '.. vipDays .. ' vip day(s) in your account.') end end -- player:checkVipLogin() function Player.checkVipLogin(self) if self:getVipTime() > 0 and not self:isVip() then return self:removeVip() and self:teleportTo(self:getTown():getTemplePosition()) end end  
       
      As funções são:
      • player:getVipTime() - Retorna o valor da tabela vip_time (igual esta na database).
      • player:isVip() - Retorna se o player é vip ou não.
      • player:addVipDays(days) - Usa-se em algum script para para adicionar dias de vip ao player (parâmetro de entrada "days").
      • player:removeVipDays(days) - Usa-se em algum script para para remover dias de vip do player (parâmetro de entrada "days").
      • player:setVipDays(days) - Usa-se em algum script para para mudar os dias de vip do player (parâmetro de entrada "days").
      • player:removeVip() - Usa-se em algum script para para remover todo tempo de vip do player.
      • player:sendVipDaysMessage() - Retorna uma mensagem no player mostrando os dias de vip que ainda restam ao player.
      • player:checkVipLogin() - Checa se a vip do player acabou, se sim teleporta ele para o templo.
       

      Qualquer dúvida ou erro/bug poste aqui.
    • Por Linus
      Você  pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar).
       
       
      Testado em tfs 1.1, Versão 10.77
       
       
       
       
      Vá em data/npc/lib/ crie npc_resets.lua :
       



       
      Você pode editar mexendo aqui. no script acima :
      config = { minlevel = 150, --- Level inical para resetar price = 10000, --- Preço inicial para resetar newlevel = 20, --- Level após reset priceByReset = 0, --- Preço acrescentado por reset percent = 30, ---- Porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) maxresets = 50, ---- Maximo de resets levelbyreset = 0 --- Quanto de level vai precisar a mais no próximo reset } agora em data/npc/ crie reseter.XML :
       



       
       
       
      Agora em data/npc/scripts crie reseter.lua :
       



       
       
       
      Img : 
       


×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo