Postado Novembro 11, 2015 9 anos Compilador : TFS 1.0 Cliente: 10.10 Olá amigos do TK, venho pedir para que alterem pra mim um script de task simples de forma com que ele deixe a task possível de fazer mais de uma vez e não somente uma única vez, (pode ser por tempo por exemplo: Quando o player terminar a task ele só poderá pegar a mesma depois de 1 dia) Spoiler <?xml version="1.0" encoding="UTF-8"?> <mod name="Simple Task" version="3.0" author="Vodkart" contact="#####.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}, ["draken"] = {monster_race={"draken warmaster"}, storage_start = 200224, storage = 91024,count = 1,exp = 500000000,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 = 1}, ["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 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) 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[2] .. ' ' .. getItemNameById(items[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[2] while count > 0 do if isItemStackable(items[1]) then doPlayerAddItemStacking(cid, items[1], 1) else doPlayerAddItem(cid, items[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 == nil then return nil else return a, t[a] 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) == true) 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 then local contagem = getPlayerStorageValue(cid, mob.storage) if (contagem == -1) then contagem = 1 end if not tonumber(contagem) then return true end if contagem > mob.count then return true 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>
Postado Novembro 20, 2015 9 anos você quer uma task que o player possa fazer quantas vezes quiser? somente isso ae o npc ^^dalila.xml Spoiler <?xml version="1.0" encoding="UTF-8"?> <npc name="Dalila" script="NpcMulti.lua" walkinterval="350000" floorchange="0" speed="0" lookdir="2"> <health now="150" max="150"/> <look type="640" head="91" body="114" legs="86" feet="0"/> <parameters> <parameter key="message_greet" value="Olá |PLAYERNAME|, você gostaria de fazer uma {missao}?"/> </parameters> </npc> npc/scripts/NpcMulti.lua Spoiler Spoiler 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 qntdade = 600 local stoTime = 96586 local stoKill = 96587 local premio = 100000 --em exp! local msg = string.lower(msg) local left = math.ceil((getPlayerStorageValue(cid, stoTime) - os.time())/(24 * 60 * 60)) --nao mexe! if (msgcontains(msg, 'tarefa') or msgcontains(msg, 'missao')) then if getPlayerStorageValue(cid, stoTime) ~= -1 and left > 0 and getPlayerStorageValue(cid, stoKill) > 0 then local faltaMatar = getPlayerStorageValue(cid, stoKill) local jaMatou = math.abs(getPlayerStorageValue(cid, stoKill)-qntdade) local prazo = os.date("%d/%m/%y %X", getPlayerStorageValue(cid, stoTime)) selfSay("Você ainda não matou os "..qntdade.." multis, atualmente você matou ".. (jaMatou)..", resta "..faltaMatar..". Seu prazo é de até "..prazo..".", cid) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, stoTime) ~= -1 and left <= 0 and getPlayerStorageValue(cid, stoKill) ~= -1 then selfSay("Infelismente você não matou as "..qntdade.." multis a tempo. Se você quiser, você pode tentar fazer denovo a missao.", cid) setPlayerStorageValue(cid, stoTime, -1) setPlayerStorageValue(cid, stoKill, -1) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, stoTime) ~= -1 and left > 0 and getPlayerStorageValue(cid, stoKill) == -1 then local prazo = os.date("%d/%m/%y %X", getPlayerStorageValue(cid, stoTime)) selfSay("Você tem que esperar pelo menos 1 semana para poder pegar essa tarefa denovo. O prazo de acaba dia ".. prazo..".", cid) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, stoTime) ~= -1 and left > 0 and getPlayerStorageValue(cid, stoKill) == 0 then selfSay("Obrigado! você matou os "..qntdade.." multis em menos de 1 semana. Aqui esta sua recompensa! Lembre-se que você pode fazer esta task quantas vezes quiser,desde que tenha concluído 1 semana contado a partir do dia de inicio.", cid) doPlayerAddExp(cid, premio) --premio setPlayerStorageValue(cid, stoKill, -1) talkState[talkUser] = 0 return true else if getPlayerStorageValue(cid, stoTime) ~= -1 and getPlayerStorageValue(cid, stoKill) == -1 then setPlayerStorageValue(cid, stoTime, -1) --soh pra evitar problemas... end selfSay("Você quer me ajudar a acabar com poderosas gosmas chamadas Multi?", cid) talkState[talkUser] = 1 end elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then selfSay("Ótimo! Você precisa matar pelo menos "..qntdade.." Multis em um prazo de 1 semana para eu te dar a recompensa. Aceita?", cid) talkState[talkUser] = 2 elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 2 then local semana = 7 * 24 * 60 * 60 setPlayerStorageValue(cid, stoTime, os.time()+semana) setPlayerStorageValue(cid, stoKill, qntdade) local sto = getPlayerStorageValue(cid, stoTime) selfSay("Você já pode começar a matar os multis, mas cuidado! É uma criatura muito forte. Volte aqui quando matar "..qntdade.." multis para ser recompensado. O prazo é até ".. os.date("%d/%m/%y %X", sto) ..".", cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) creaturescripts/scripts/TaskMulti.lua Spoiler Spoiler function onDeath(cid, corpse, deathList) local qntdade = 600 local stoTime = 96586 local stoKill = 96587 if getCreatureName(cid) == "Kadabra" then for a = 1, #deathList do local pk = deathList[a] local left = math.ceil((getPlayerStorageValue(pk, stoTime) - os.time())/(24 * 60 * 60)) if left > 0 and getPlayerStorageValue(pk, stoKill) > 0 then if getDamageMapPercent(pk, cid) >= 0.3 then -- o player tem q tirar pelo menos 30% da life do bixo para contar a task! setPlayerStorageValue(pk, stoKill, getPlayerStorageValue(pk, stoKill) - 1) local sto = getPlayerStorageValue(pk, stoKill) local jaMatou = math.abs(getPlayerStorageValue(pk, stoKill)-qntdade) if sto == 0 then doPlayerSendTextMessage(pk, 22, "[Multi Task Finalizada] ("..qntdade.."/"..qntdade..")") else doPlayerSendTextMessage(pk, 22, "[Multi Task] ("..jaMatou.."/"..qntdade..")") end end end end end return true end vai no creaturescripts/scripts/login.lua e coloca isso la tb.. registerCreatureEvent(cid, "TaskMulti") creaturescripts/craturescripts.xml <event type="death" name="TaskMulti" event="script" value="TaskMulti.lua"/> dai vai no .xml do Multi e coloca isso la no final do .xml antes do </monster> <script> <event name="TaskMulti"/> </script>
Postado Novembro 24, 2015 9 anos Autor Olá amigo, seu scirpt funcionou perfeitamente, mas estou com um pequeno problema. Fiz uma alteração de Kadabra para Multi no TaskMulti.lua Spoiler function onDeath(cid, corpse, deathList)local qntdade = 600local stoTime = 96586local stoKill = 96587if getCreatureName(cid) == "Multi" then <!-- Estava Kadabra -->for a = 1, #deathList dolocal pk = deathList[a]local left = math.ceil((getPlayerStorageValue(pk, stoTime) - os.time())/(24 * 60 * 60))if left > 0 and getPlayerStorageValue(pk, stoKill) > 0 thenif getDamageMapPercent(pk, cid) >= 0.3 then -- o player tem q tirar pelo menos 30% da life do bixo para contar a task!setPlayerStorageValue(pk, stoKill, getPlayerStorageValue(pk, stoKill) - 1)local sto = getPlayerStorageValue(pk, stoKill)local jaMatou = math.abs(getPlayerStorageValue(pk, stoKill)-qntdade)if sto == 0 thendoPlayerSendTextMessage(pk, 22, "[Multi Task Finalizada] ("..qntdade.."/"..qntdade..")")elsedoPlayerSendTextMessage(pk, 22, "[Multi Task] ("..jaMatou.."/"..qntdade..")")endendendendendreturn trueend Meu Multi.xml esta assim. Spoiler <?xml version="1.0" encoding="UTF-8"?> <monster name="Multi" nameDescription="a multi" race="VENOM" experience="120000" speed="120" manacost="0"> <health now="8000" max="8000"/> <look type="238" corpse="6532"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="0"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="30" attack="800"/> </attacks> <defenses armor="0" defense="0"/> <immunities> <immunity earth="1"/> <immunity invisible="1"/> </immunities> <elements> <element firePercent="-10"/> <element energyPercent="-10"/> <element icePercent="10"/> </elements> <summons maxSummons="7"> <summon name="multi" interval="800" chance="20" max="7"/> </summons> <script> <event name="TaskMulti"/> </script> </monster> E está me aparecendo o seguinte erro no console quando mato um multi, ele morre sem deixar corpo e não aparece o contador de kills. Desde já agradeço a sua ajuda e peço desculpas pela demora de minha resposta xD. --------------------------------------------------- EDIT. Apaguei a string referente ao erro mencionado acima e funcionou mas agora aparece o seguinte erro quando mato a Multi. [Warning - Monster:Monster] Unknown event name - TaskMulti. Editado Novembro 24, 2015 9 anos por Juscelino (veja o histórico de edições)
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.