Ir para conteúdo
  • Cadastre-se

Task System Bugada! (Urgente) Rep++


Posts Recomendados

Bom dia galera, Primeiramente acho que estou na area certa (caso nao esteja me desculpem e mova meu topico), segundo se estou reabrindo um topico existente ou reativando um desculpa tambem procurei e nao achei nada a respeito, ai so pesso que por favor postem o link do topico resolvido aqui!

 

Vamos ao que intereça tenho um otserv 8.6 e meu task systen ta com um probleminha, quando mato os bixos ta task o npc nao conta quantos ja foi morto posso mata 100 fica semrpe em 0 gostaria de saber como ajeito isso, pois task system é algo muito usado pelos player!

 

Nome do Script: acho que seria NPC's Task

Tipo do Script: concertando a contagem dos bixos?

Versão Utilizada: GLOBAL FULL 8.60  

Servidor Utilizado:The Forgotten Server, version 0.4.0

Nível de Experiência: 200x por Stages ~~ <world id="0" multiplier="1">

<stage minlevel="1" maxlevel="8" multiplier="30"/>
<stage minlevel="9" maxlevel="50" multiplier="25"/>
<stage minlevel="51" maxlevel="100" multiplier="15"/>
<stage minlevel="101" maxlevel="150" multiplier="10"/>
<stage minlevel="151" maxlevel="200" multiplier="8"/>
<stage minlevel="201" maxlevel="250" multiplier="6"/>
<stage minlevel="251" multiplier="5"/>
Informações Extras: Queria que ajeitassem essa contagem ai por favor.
 
 
Outra duvida que tenho, nao sei se posso fazer 2 topicos dentro de 1 mas se der foi, 
é que minhas sd nao sao infinitas e quando vou no npc e compro normal ela vem com 100 mas quando vou usar uma sd as 100 sd somen como se fosse 1 só, nao só a sd todas as runas, ati tive que deixar infinito por enquanto! Vo No Npc e Compro a Runa ao comprar a runa vem com 100 cargas ao usar uma sd as 100 cargas acabao de 1 só vez como se houvesse apenas 1 sd!
 
Aguardo resposta!
Link para o post
Compartilhar em outros sites

sobre a task, tenta trocar ela, eu uso a do vodkart e funciona perfeitamente:

<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Simple Task" version="3.0" author="Vodkart" contact="xtibia.com" enabled="yes">  
<config name="task_func"><![CDATA[

tasktabble = {
["troll"] = {monster_race={"troll","frost troll","furious troll","island troll","swamp troll","troll champion","troll legionnaire"}, storage_start = 200201, storage = 91001,count = 150,exp = 200,money = 250},
["globin"] = {monster_race={"goblin","goblin assassin","goblin leader"}, storage_start = 200202, storage = 91002,count = 150,exp = 300,money = 300},
["rotworm"] = {monster_race={"rotworm","carrion worm"}, storage_start = 200203, storage = 91003,count = 300,exp = 1000,money = 800},
["cyclops"] = {monster_race={"cyclops","cyclops smith","cyclops drone"}, storage_start = 200204, storage = 91004,count = 500,exp = 3000,money = 800},
["green djinn"] = {monster_race={"green djinn","efreet"}, storage_start = 200205, storage = 91005,count = 500,exp = 10000,money = 5000},
["blue djinn"] = {monster_race={"blue djinn","marid"}, storage_start = 200206, storage = 91006,count = 500,exp = 10000,money = 5000},
["pirate one"] = {monster_race={"pirate buccaneer","pirate corsair","pirate cutthroat","pirate ghost","pirate marauder","pirate skeleton"}, storage_start = 200207, storage = 91007,count = 300,exp = 10000,money = 5000},
["pirate two"] = {monster_race={"pirate buccaneer","pirate corsair","pirate cutthroat","pirate ghost","pirate marauder","pirate skeleton"}, storage_start = 200208, storage = 91008,count = 300,exp = 10000,money = 5000},
["minotaur"] = {monster_race={"minotaur","minotaur archer","minotaur mage","minotaur guard"}, storage_start = 200209, storage = 91009,count = 20},
["necromancer"] = {monster_race={"necromancer","priestess"}, storage_start = 200210, storage = 91010,count= 400},
["carniphila"] = {monster_race={"carniphila"}, storage_start = 200211, storage = 91011,count= 150, exp = 2500},
["stone golem"] = {monster_race={"stone golem"}, storage_start = 200212, storage = 91012,count= 220, exp = 2000},
["ice golem"] = {monster_race={"ice golem"}, storage_start = 200213, storage = 91013,count= 300, exp = 12000},
["dragon"] = {monster_race={"dragon","dragon lord","frost dragon"}, storage_start = 200214, storage = 91014,count= 250, exp = 50000},
["mutated rat"] = {monster_race={"mutated rat"}, storage_start = 200215, storage = 91015,count = 210, exp = 25000, money = 10000},
["giant spider"] = {monster_race={"giant spider"}, storage_start = 200215, storage = 91016,count = 500, exp = 50000, money = 15000},
["hydra"] = {monster_race={"hydra"}, storage_start = 200217, storage = 91017,count = 5000, exp = 2000, money = 15000, reward = {{6433,1},{7434,1},{2197,1},{2476,1}}},
["sea serpent"] = {monster_race={"sea serpent"}, storage_start = 200218, storage = 91018,count = 1500, exp = 70000, money = 30000},
["behemoth"] = {monster_race={"behemoth"}, storage_start = 200219, storage = 91019,count = 1800, exp = 50000, money = 30000, reward = {{6391,1},{5741,1}}},
["serpent spawn"] = {monster_race={"serpent spawn"}, storage_start = 200220, storage = 91020,count = 1400, exp = 70000, money = 30000},
["demon"] = {monster_race={"demon"}, storage_start = 200221, storage = 91021,count = 6666, exp = 70000, money = 200000, reward = {{2495,1},{2496,1},{2520,1},{2472,1}}},
["quara"] = {monster_race={"quara predator","quara constrictor","quara hydromancer","quara mantassin","quara pincher"}, storage_start = 200222, storage = 91022,count = 300, exp = 40000, money = 50000},
["quara scout"] = {monster_race={"quara predator scout","quara constrictor scout","quara hydromancer scout","quara mantassin scout","quara pincher scout"}, storage_start = 200223, storage = 91023,count = 300, exp = 50000, money = 60000}
}


configbosses_task = {
{race = "minotaur",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5},
{race = "necromancer",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5},
{race = "dragon",Playerpos = {x = 208, y = 59, z = 7}, FromPosToPos = {{x = 206, y = 56, z = 7},{x = 209, y = 65, z = 7}}, time = 5}
}


function isSummon(uid)
return uid ~= getCreatureMaster(uid) or false
end
function CheckTask(cid)
for k, v in pairs(tasktabble) do
if getPlayerStorageValue(cid,v.storage_start) >= 1 then return true end
end
return false
end
function finisheAllTask(cid)
local config = {
exp = {true,100000},
money = {true,200000},
items ={false,{{2124,2},{2173,1}}},
premium ={true,5}
}
local x = true
for k, v in pairs(tasktabble) do
if tonumber(getPlayerStorageValue(cid,v.storage)) then
x = false
end
end
if x == true then
setPlayerStorageValue(cid, 521456, 0)
local b = getGlobalStorageValue(63005) if b == -1 then b = 1 end
if b < 11 then
setGlobalStorageValue(63005,b+1)
doBroadcastMessage('[Task Mission Complete] '..getCreatureName(cid)..' was the '..b..' to finish the task!.')
doPlayerAddPremiumDays(cid, config.premium[1] == true and config.premium[2] or 0)
doPlayerAddExp(cid, config.exp[1] == true and config.exp[2] or 0)
doPlayerAddMoney(cid, config.money[1] == true and config.money[2] or 0)
if config.items[1] == true then doAddItemsFromList(cid,config.items[2]) end
doItemSetAttribute(doPlayerAddItem(cid, 7369), "name", "trophy "..getCreatureName(cid).." completed all the task.")
end
end
end
function HavePlayerPosition(cid, from, to)
	return isInRange(getPlayerPosition(cid), from, to) and true or false
end
function getRankStorage(cid, value, max, RankName) -- by vodka
local str =""
str = "--[".. (RankName == nil and "RANK STORAGE" or ""..RankName.."") .."]--\n\n"
local query = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..value.." ORDER BY cast(value as INTEGER) DESC;")
if (query:getID() ~= -1) then k = 1 repeat if k > max then break end
str = str .. "\n " .. k .. ". "..getPlayerNameByGUID(query:getDataString("player_id")).." - [" .. query:getDataInt("value") .. "]"
k = k + 1 until not query:next() end return doShowTextDialog(cid, 2529, str)
end
function getItemsInContainerById(container, itemid) -- Function By Kydrai
			local items = {}
			if isContainer(container) and getContainerSize(container) > 0 then
							for slot=0, (getContainerSize(container)-1) do
											local item = getContainerItem(container, slot)
											if isContainer(item.uid) then
															local itemsbag = getItemsInContainerById(item.uid, itemid)
															for i=0, #itemsbag do
																			table.insert(items, itemsbag[i])
															end
											else
															if itemid == item.itemid then
																			table.insert(items, item.uid)
															end
											end
							end
			end
			return items
end
function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
	local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
	local piles = 0
	if #item > 0 then
			for i,x in pairs(item) do
					if getThing(x).type < 100 then
							local it = getThing(x)
							doTransformItem(it.uid, itemid, it.type+quant)
							if it.type+quant > 100 then
									doPlayerAddItem(cid, itemid, it.type+quant-100)
							end
					else
						   piles = piles+1
					end
			end
	else
			return doPlayerAddItem(cid, itemid, quant)
	end
	if piles == #item then
			doPlayerAddItem(cid, itemid, quant)
	end
end
function getItemsFromList(items) -- by vodka
local str = ''
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
str = str .. items[i][2] .. ' ' .. getItemNameById(items[i][1])
if i ~= table.maxn(items) then str = str .. ', ' end end end
return str
end
function doAddItemsFromList(cid,items) -- by vodka
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
local count = items[i][2]
while count > 0 do
if isItemStackable(items[i][1]) then
doPlayerAddItemStacking(cid, items[i][1], 1)
else
doPlayerAddItem(cid, items[i][1],1)
end
count = count - 1
end
end
end
end
		function pairsByKeys(t, f)
		  local a = {}
		  for n in pairs(t) do table.insert(a, n) end
		  table.sort(a, f)
		  local i = 0
		  local iter = function ()
				i = i + 1
				if a[i] == nil then return nil
				else return a[i], t[a[i]]
				end
		  end
		  return iter
		end
]]></config>
<event type="login" name="TaskLogin" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "KillTask")
return true
end]]></event>
<talkaction words="/task;!task" event="buffer"><![CDATA[
domodlib('task_func')
local param = string.lower(param)
if param == "rank" then
getRankStorage(cid, 521456, 20, "Task Rank Finalizadas") return true
end
local str = ""
str = str .. "Task Completed :\n\n"
for k, v in pairsByKeys(tasktabble) do
local contagem = getPlayerStorageValue(cid, v.storage)
if (contagem == -1) then contagem = 1 end
str = str..k.." = ".. (not tonumber(contagem) and "["..contagem.."]" or "["..((contagem)-1).."/"..v.count.."]") .."\n"
end
str = str .. ""
return doShowTextDialog(cid, 8983, str)
]]></talkaction>	
<event type="kill" name="KillTask" event="script"><![CDATA[
domodlib('task_func')
function onKill(cid, target, lastHit)
if isMonster(target) and not isSummon(target) then
local n = string.lower(getCreatureName(target))
for race, mob in pairs(tasktabble) do
if getPlayerStorageValue(cid,mob .storage_start) >= 1 then
for i = 1,#mob.monster_race do
if n == mob.monster_race[i] then
local contagem = getPlayerStorageValue(cid, mob.storage)
if not tonumber(contagem) then return true end
if (contagem == -1) then contagem = 1 end
if contagem > mob.count then return true end
setPlayerStorageValue(cid, mob.storage, contagem+1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,""..(contagem == mob.count and "Congratulations! You finished the task of "..race.."." or "defeated. Total [" .. contagem .. "/" .. mob.count .. "] " .. race .. ".").."")
end
end
end
end
end
return true
end]]></event>
</mod>

NPC:

 

NPC/SCRIPT

simple_task.lua

domodlib('task_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local msg = string.lower(msg)
if isInArray({"task","tasks","missao","mission"}, msg) then
npcHandler:say("Me diga o nome do monstro que você deseja fazer a task!", cid)
talkState[talkUser] = 1
elseif talkState[talkUser] == 1 then
if tasktabble[msg] then
if CheckTask(cid) ~= true then
local contagem = getPlayerStorageValue(cid, tasktabble[msg].storage)
if (contagem == -1) then contagem = 1 end
if not tonumber(contagem) then npcHandler:say('Desculpe, mas você já terminou a task do '..msg, cid) return true end
setPlayerStorageValue(cid, tasktabble[msg].storage_start, 1)
npcHandler:say("Parabéns, agora você está participando da missão task do "..msg..", falta matar "..string.sub(((contagem)-1)-tasktabble[msg].count, 2).." "..msg, cid)
talkState[talkUser] = 0
else
npcHandler:say('Desculpe, mas você já faz parte de uma task!', cid)
talkState[talkUser] = 0
end
else
npcHandler:say('digite o nome correto da missão task! para mais informações digite {!task}', cid)
talkState[talkUser] = 1
end
elseif isInArray({"receber","reward","recompensa","report","reportar"}, msg) then
if CheckTask(cid) then
for k, v in pairs(tasktabble) do
racetype = k
if getPlayerStorageValue(cid,v.storage_start) >= 1 then
local contagem = getPlayerStorageValue(cid, v.storage)
if (contagem == -1) then contagem = 1 end
if not tonumber(contagem) then npcHandler:say('você só pode receber os items uma única vez!', cid) return true end
if (((contagem)-1) >= v.count) then
for _, check in pairs(configbosses_task) do
if string.lower(check.race) == string.lower(racetype) then
local on = getPlayersOnline()
for i=1, #on do
if HavePlayerPosition(on[i], check.FromPosToPos[1],check.FromPosToPos[2]) then
selfSay('aguarde alguns instantes, tem pessoas fazendo a task.', cid) return true
end
end
doTeleportThing(cid, check.Playerpos)
local function checkArea(cid)
if not isCreature(cid) then return LUA_ERROR end
if HavePlayerPosition(cid, check.FromPosToPos[1],check.FromPosToPos[2]) then
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
end
end
addEvent(checkArea, check.time*60*1000, cid)
end
end
local str = ""
if v.exp ~= nil then doPlayerAddExp(cid, v.exp ) str = str.."".. (str == "" and "" or ",") .." "..v.exp.." de exp" end
if v.money ~= nil then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ",") ..""..v.money.." gps" end
if v.reward ~= nil then doAddItemsFromList(cid,v.reward) str = str.."".. (str == "" and "" or ",") ..""..getItemsFromList(v.reward) end
npcHandler:say("Obrigado pela sua ajuda Recompensas: "..(str == "" and "nenhuma" or ""..str.."").." por ter completado a task do "..k, cid)
setPlayerStorageValue(cid, v.storage, "Finished")
setPlayerStorageValue(cid, v.storage_start, 0)
setPlayerStorageValue(cid, 521456, getPlayerStorageValue(cid, 521456) == -1 and 1 or getPlayerStorageValue(cid, 521456)+1)
finisheAllTask(cid)
else
npcHandler:say('Desculpe,mas você só matou '..((contagem)-1)..' de '..v.count..' '..k, cid)
end
end
end
else
npcHandler:say("você não está em nenhuma missão task", cid)
end
elseif isInArray({"sair","leave","exit"}, msg) then
if CheckTask(cid) then
talkState[talkUser] = 2
for k, v in pairs(tasktabble) do
if getPlayerStorageValue(cid,v.storage_start) >= 1 then
storagesair = v.storage_start
local contagem = getPlayerStorageValue(cid, v.storage)
if (contagem == -1) then contagem = 1 end
npcHandler:say('você está participando de uma missão task do '..k..' e já tem '..((contagem)-1)..' '..k..' mortos, deseja mesmo sair?', cid)
end
end
else
npcHandler:say("você não está em nenhuma missão task", cid)
end
elseif msgcontains(msg, 'yes') and talkState[talkUser] == 2 then
setPlayerStorageValue(cid, storagesair, 0)
npcHandler:say("Você foi retirado da task com sucesso!", cid)
elseif msg == "no" then
selfSay("Tudo bem então", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid) 
end
return TRUE
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
NPC

Ludger.xml

<?xml version="1.0"?>
<npc name="Ludger" script="data/npc/scripts/simple_task.lua" walkinterval="50000" floorchange="0">
<health now="100" max="100"/>
<look type="129" head="95" body="116" legs="121" feet="115" addons="3"/>
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. quer fazer uma {task}? ou {sair} de uma? tambem pode {receber} premios se terminou ela!" />
</parameters>
</npc>

Como configurar:

para configurar você vai ali no Mods



lá tem uma tabela chamada 'tasktabble' que funciona da seguinte maneira:


["nome da task"] -- aqui você coloca o nome da task

monster_race={"nome dos monstro"} -- aqui você coloca o nome dos monstro que vão contar na task

exemplo:

monster_race={"cyclops","cyclops smith","cyclops drone"}
ou seja vai contar nessa task tanto se eu matar um 'cyclops' como matar tbm um 'cyclops drone'

storage_start -- n mexa, é para checar se ele está com a task
storage -- é o valor da storage para fazer a contagem. obs: não edite
count -- é o total de monstro que tem que matar
money -- é qnto de dinheiro ele vai receber ao terminar a task, se n quiser colocar pra receber money só remover essa parte
exp -- é quanto ele vai ganhar de exp ao terminar a task, se n quiser colocar pra receber exp só remover essa parte
reward -- é a lista dos items que ele vai ganhar ao terminar a task, caso não queira que ele receba items só remover essa parte


-- configuração bosses --

em mods tem uma tabela chamada 'configbosses_task'

configbosses_task = {
{race = "minotaur",Playerpos = {x = 189, y = 57, z = 7}, FromPosToPos = {{x = 186, y = 54, z = 7},{x = 193, y = 60, z = 7}},time = 5},
{race = "necromancer",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5},
{race = "dragon",Playerpos = {x = 208, y = 59, z = 7}, FromPosToPos = {{x = 206, y = 56, z = 7},{x = 209, y = 65, z = 7}}, time = 5}
}

race -- é o nome da task que vai ter boss, só olhar dentro dos [""] que vc editou a tabela dos monstros
Playerpos -- é pra onde o jogador vai ao entrar no boss
FromPosToPos -- nessa parte são duas pos, é o começo da área e o final da área do boss
time -- é o limite de tempo em minutos que o jogador vai poder ficar na sala do boss


-- configuração recompensas top 10 jogadores terminar todas as TASKS --

ali em mods tem essa tabela:

local config = {
exp = {true,100000}, -- vai ganhar exp? se true edite a exp
money
= {true,200000}, -- vai ganhar money? se true edite a qntidade de dinheiro
items
={false,{{2124,2},{2173,1}}}, -- vai receber items? se true edite os items dentro da tabela
premium
={false,5} -- vai receber premium days? se true edite os dias q vai receber
}

 

Quanto a sd, me passa a tag que está em spells.lua

é nessa parte

    <rune name="Sudden Death" id="2268" allowfaruse="1" charges="3" lvl="45" maglv="15" groups="1,2000" icon="21" needtarget="1" blocktype="solid" event="script" value="attack/sudden death.lua"/>
Link para o post
Compartilhar em outros sites

Daniel voce poderia usar o team view? e me ajudar aqui ou me mandar com um passo a passo? me ajudaria muito pq ja tentei de tudo!

Link para o post
Compartilhar em outros sites

[Error - LuaScriptInterface::loadFile] data/npc/scripts/simple_task.lua:106: '=' expected near '<eof>'

[10/08/2013 15:52:06] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/simple_task.lua
[10/08/2013 15:52:06] data/npc/scripts/simple_task.lua:106: '=' expected near '<eof>'
 
esse é um dos erros mas na verdade meu ot esta sem npc task, eu tenho um outro ot que tem o npc Glizzy acho q é isso, eu queria por no meu ot esse sistema mas ele nao tem nada ainda gostaria que me ajudace a implantar esse sitema nele! fiz a parte ali que voce fala dos script tudo so nao fiz a do mod porque nao tem o arquivo que vc fala. ;/ meu ot nao tem nem o npc de task tem que implantar tudo! tenho so no outro ot mas o outro ot ta como eu baixei e esse aqui ja ta do jeito que eu quero!
Editado por ducavalheiro (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Não entendi, mas esse é o problema nao sei nem colocar o npc, e nos mod nao tem esse arquivo tem que criar?

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo