Postado Janeiro 23, 2020 5 anos eu queria liberar pro player abrir quantas tasks ele quiser em vez de 1 por 1, alguem pode me ajudar ples? script do @Vodkart NPC Mostrar conteúdo oculto 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("Escolha sua task falando [{!task}] e veja qual task voce falta terminar! [EXEMPLO: {easy hunts} ||| {medium hunts} ||| {hard hunts} etc...]", 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..",se desejar sair da task, fale {sair} que voce nao perdera os monstros que ja matou. 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, check.FromPosToPos[1],check.FromPosToPos[2]) thenselfSay('aguarde alguns instantes, tem pessoas fazendo a task.', cid) return trueendenddoTeleportThing(cid, check.Playerpos)local function checkArea(cid)if not isCreature(cid) then return LUA_ERROR endif HavePlayerPosition(cid, check.FromPosToPos[1],check.FromPosToPos[2]) thendoTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))endendaddEvent(checkArea, check.time*60*1000, cid)endendlocal str = ""if v.exp ~= nil then doPlayerAddExp(cid, v.exp ) str = str.."".. (str == "" and "" or ",") .." "..v.exp.." de exp" endif v.money ~= nil then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ",") ..""..v.money.." gps" endif v.reward ~= nil then doAddItemsFromList(cid,v.reward) str = str.."".. (str == "" and "" or ",") ..""..getItemsFromList(v.reward) endnpcHandler: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)elsenpcHandler:say('Desculpe,mas você só matou '..((contagem)-1)..' de '..v.count..' '..k, cid)endendendelsenpcHandler:say("você não está em nenhuma missão task", cid)endelseif isInArray({"sair","leave","exit"}, msg) thenif CheckTask(cid) thentalkState[talkUser] = 2for k, v in pairs(tasktabble) doif getPlayerStorageValue(cid,v.storage_start) >= 1 thenstoragesair = v.storage_startlocal contagem = getPlayerStorageValue(cid, v.storage)if (contagem == -1) then contagem = 1 endnpcHandler:say('você está participando de uma missão task do '..k..' e já tem '..((contagem)-1)..' '..k..' mortos, deseja mesmo sair?', cid)endendelsenpcHandler:say("você não está em nenhuma missão task", cid)endelseif msgcontains(msg, 'yes') and talkState[talkUser] == 2 thensetPlayerStorageValue(cid, storagesair, 0)npcHandler:say("Você foi retirado da task com sucesso!", cid)elseif msg == "no" thenselfSay("Tudo bem então", cid)talkState[talkUser] = 0npcHandler:releaseFocus(cid)endreturn TRUEendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new()) MOD Mostrar conteúdo oculto <?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 = { ["easy hunts"] = {monster_race={"cyclops","cyclops smith"}, storage_start = 200235, storage = 91035,count = 100, reward = {{2160,100}}}, ["medium hunts"] = {monster_race={"dragon","dragon lord"}, storage_start = 200236, storage = 91036,count = 500, reward = {{2157,10}}}, ["hard hunts"] = {monster_race={"hydra","serpent spawn"}, storage_start = 200240, storage = 91040,count = 1500, reward = {{2157,25}}}, ["insane hunts"] = {monster_race={"wild snow","midnight asura","nature djinn","storm djinn"}, storage_start = 200245, storage = 91045,count = 2500, reward = {{2157,50}}}, ["ultimate hunts"] = {monster_race={"wizard","blackfrost","marauder","ferumbras"}, storage_start = 200250, storage = 91050,count = 5000, reward = {{2157,75}}}, ["red hunts"] = {monster_race={"red wizard","red blackfrost","red marauder","red ferumbras"}, storage_start = 200251, storage = 91051,count = 10000, reward = {{2157,100}}}, ["boss apolo"] = {monster_race={"apolo"}, storage_start = 200252, storage = 91052,count = 50, reward = {{6543,15},{8981,1}}}, ["boss lyre"] = {monster_race={"lyre"}, storage_start = 200253, storage = 91053,count = 50, reward = {{10309,1},{2198,1}}}, ["boss blue"] = {monster_race={"blue"}, storage_start = 200254, storage = 91054,count = 7, reward = {{10530,1},{12524,1}}}, ["boss vip coin"] = {monster_race={"vip coin"}, storage_start = 200255, storage = 91055,count = 10, reward = {{11192,10}}}, ["boss runes"] = {monster_race={"runes"}, storage_start = 200256, storage = 91056,count = 50, reward = {{2348,1}}}, ["boss baby"] = {monster_race={"baby"}, storage_start = 200257, storage = 91057,count = 50, reward = {{4863,1}}}, ["boss pingu"] = {monster_race={"pingu"}, storage_start = 200259, storage = 91059,count = 50, reward = {{6544,1}}}, ["boss kayn"] = {monster_race={"kayn"}, storage_start = 200260, storage = 91060,count = 50, reward = {{10503,1}}}, ["boss money"] = {monster_race={"money"}, storage_start = 200261, storage = 91061,count = 50, reward = {{2157,300}}}, ["oof hunts"] = {monster_race={"oof"}, storage_start = 200258, storage = 91058,count = 25000, reward = {{8977,1}}} } 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 = "necromancedr",Playerpos = {x = 196, y = 39, z = 7}, FromPosToPos = {{x = 195, y = 37, z = 7},{x = 198, y = 41, z = 7}}, time = 5}, {race = "dragonsd",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 = {false,100000}, money = {false,8000000}, items ={false,{{7443,2},{2160,100}}}, premium ={false,1} } 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> Editado Janeiro 23, 2020 5 anos por poko360 error1 (veja o histórico de edições)
Postado Janeiro 24, 2020 5 anos E ai man, até dá para fazer isso, mas teria que "refazer" o npc, e digamos que o player vai fazer 5 task de uma vez só por exemplo, quando ele chegar no npc, ele vai receber as 5 premiações tudo de uma vez tbm? [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Janeiro 24, 2020 5 anos Autor @Vodkart teria como tipo, quando o player ja logar no server, ele abrisse as tasks automaticamente? sem precisar do NPC? ai quando terminasse a contagem, ele recebia o premio por creaturescript automaticamente e dava a storage "Finished" teria que refazer o script totalmente no caso?
Postado Janeiro 24, 2020 5 anos @poko360 Uma dica é desenvolver um sistema de Achievements. Ao iniciar o jogo você terá suas devidas missões para serem completadas automaticamente. Sem uso de qualquer NPC. E ao finalizar, você receberá uma premiação. Meus trabalhos: [Movements] TFS 1.1+ Area Hardcore [Movements] TFS 1.1+ Tile Party [Action] TFS 1.1+ Bau diário [Action] TFS 1.1+ Guild Dungeon Lever [Talkactions] TFS 0.3.6 / 0.4 Quest Hunt por Tempo Contato: Discord: Tataboy67#4934
Postado Janeiro 24, 2020 5 anos Autor esse é o problema =S, eu queria q ja iniciasse do primeiro monstro que matasse, quaqndo atingisse ja receberia a premiação, o problema q nsei fazer isso
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.