Postado Abril 3, 2021 4 anos 0.4 Bom dia galera, eu preciso de ajuda em um npc de task. Ele é bem simples, você fala as palavras, ele te da a storage, no creaturescripts pega a storage e conta os monstros na tabela, ai ele te da a storage maior e quando voltar pro npc, ele te da a recompensa. Até ai funciona 100%, o problema é que eu queria colocar pra esse npc dar 2 tasks, quando o player terminar uma, ele pode pegar outra com o mesmo npc. (Lembrando que se eu fizer 2 npcs, funciona normal, mas eu queria fazer em um só) local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local quest = 845710 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) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then npcHandler:say("OK2", cid) talkState[talkUser] = 2 elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then npcHandler:say("OK3", cid) setPlayerStorageValue(cid, quest, 2) setPlayerStorageValue(cid, 12672, 1) talkState[talkUser] = 0 elseif msgcontains(msg, "quest1") then local str = getPlayerStorageValue(cid, quest) if(str < 2) then npcHandler:say("OK1", cid) talkState[talkUser] = 1 return true elseif(str == 2) then npcHandler:say("OK4", cid) elseif(str == 3) then npcHandler:say("Finish", cid) setPlayerStorageValue(cid, quest, 4) setPlayerStorageValue(cid, 555140, 4) elseif(str == 4) then npcHandler:say("Over", cid) end talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) local keywordHandler2 = keywordHandler:new() local npcHandler2 = npcHandler:new(keywordHandler2) NpcSystem.parseParameters(npcHandler2) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg2) npcHandler:onCreatureSay(cid, type, msg2) end function onThink() npcHandler:onThink() end local talkState2 = {} local quest2 = 685740 function creatureSayCallback2(cid, type, msg2) local talkUser2 = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false elseif msgcontains(msg2, "yes") and talkState2[talkUser2] == 1 then npcHandler:say("sim2", cid) talkState2[talkUser2] = 2 elseif msgcontains(msg2, "yes") and talkState2[talkUser2] == 2 then npcHandler:say("Sim3", cid) setPlayerStorageValue(cid, quest2, 2) talkState2[talkUser2] = 0 elseif msgcontains(msg2, "quest2") then local str2 = getPlayerStorageValue(cid, 555140) if(str2 == 1) then local stro = getPlayerStorageValue(cid, quest2) if(stro < 2) then npcHandler:say("Sim", cid) talkState2[talkUser2] = 1 return true elseif(stro == 2) then npcHandler:say("Sim4", cid) elseif(stro == 3) then npcHandler:say("Sim5!", cid) setPlayerStorageValue(cid, quest2, 4) elseif(stro == 4) then npcHandler:say("Over2", cid) end talkState2[talkUser2] = 0 else npcHandler:say("Nop", cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback2) npcHandler:addModule(FocusModule:new()) Eu tentei fazer isso, que foi colocar 2x o script dele da task e mudar algumas coisas, colocando um "2" na frente. O problema é que ele só reconhece a segunda task, ou seja, a "quest2". Se falar "quest1", ele não diz nada e não da nem um erro no console. Alguém sabe como colocar 2 tasks nesse npc? Obrigado.
Postado Abril 3, 2021 4 anos N sei se é oq vc precisa mas isso aqui é um mod q vou enviar, os creditos ja estao no codigo. <?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 = { ["wolf"] = {monster_race={"wolf"}, storage_start = 200201, storage = 91001,count = 50,exp = 25000000,money = 100000, reward = {{}}}, ["bandit Shinob"] = {monster_race={"bandit Shinob"}, storage_start = 200201, storage = 91002,count = 70,exp = 25000000,money = 100000, reward = {{}}}, ["bandit human"] = {monster_race={"Bandit Human"}, storage_start = 200201, storage = 91003,count = 70,exp = 25000000,money = 100000, reward = {{}}}, ["shinobi of sound"] = {monster_race={"Shinobi Of Sound"}, storage_start = 200201, storage = 91004,count = 100,exp = 25000000,money = 100000, reward = {{}}}, ["bandit gun"] = {monster_race={"Bandit Gun"}, storage_start = 200201, storage = 91005,count = 100,exp = 25000000,money = 100000, reward = {{}}}, ["great snake"] = {monster_race={"Great Snake"}, storage_start = 200201, storage = 91006,count = 120,exp = 25000000,money = 100000, reward = {{}}}, ["bandit swordman"] = {monster_race={"Bandit Swordman"}, storage_start = 200201, storage = 91007,count = 120,exp = 25000000,money = 100000, reward = {{}}}, ["dark snake"] = {monster_race={"Dark Snake"}, storage_start = 200201, storage = 91008,count = 150,exp = 25000000,money = 100000, reward = {{}}}, ["fighter"] = {monster_race={"Fighter"}, storage_start = 200201, storage = 91009,count = 150,exp = 25000000,money = 100000, reward = {{}}}, ["shinobi fire"] = {monster_race={"Shinobi Fire"}, storage_start = 200201, storage = 91010,count = 160,exp = 25000000,money = 100000, reward = {{}}}, ["android"] = {monster_race={"Android"}, storage_start = 200201, storage = 91011,count = 160,exp = 25000000,money = 100000, reward = {{}}}, ["ocult shinobi"] = {monster_race={"Ocult Shinobi"}, storage_start = 200201, storage = 91012,count = 180,exp = 25000000,money = 100000, reward = {{}}}, ["destroyer"] = {monster_race={"destroyer"}, storage_start = 200201, storage = 91013,count = 180,exp = 25000000,money = 100000, reward = {{}}}, ["renegade"] = {monster_race={"renegade"}, storage_start = 200201, storage = 91014,count = 200,exp = 25000000,money = 100000, reward = {{}}}, ["wind elemental"] = {monster_race={"Wind Elemental"}, storage_start = 200201, storage = 91015,count = 200,exp = 25000000,money = 100000, reward = {{}}}, ["nukenin"] = {monster_race={"Nukenin"}, storage_start = 200201, storage = 91016,count = 250,exp = 25000000,money = 100000, reward = {{}}}, } 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,10000000}, money = {true,1000000}, items ={true,{{13393,1},{13424,1},{13425,1}}}, premium ={true,7} } 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 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 local dolls = { [13401] = "C16 Doll", [13402] = "Goku Doll", [13403] = "Vegeta Doll", [13404] = "Trunks Doll", [13405] = "Majin Boo Doll", [13406] = "Piccolo Doll", [13407] = "Son Gohan Doll", [13408] = "Chibi Gohan Doll", [13409] = "Cell Doll", [13410] = "Uub Doll", [13411] = "C17 Doll", [13412] = "C18 Doll", [13413] = "Cooler Doll", [13414] = "Tsuful Doll", [13415] = "Dende Doll", [13416] = "Gotenks Doll", [13417] = "Freeza Doll", [13418] = "Jenk Doll", [13419] = "Kaio Doll", [13420] = "Bardock Doll", [13421] = "Broly Doll", [13422] = "Saiyan Goten Doll", [13423] = "Saiyan Trunks Doll", } local rand = {} for itemid, _ in pairs(dolls) do table.insert(rand, itemid) end rand = rand[math.random(#rand)] doItemSetAttribute(doPlayerAddItem(cid, rand), "name", ""..dolls[rand].." / "..getCreatureName(cid).." completou todas tasks") 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 .. "Tasks Completadas :\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, 12749, 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[i] 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 "Parabéns! Voce finalizou a task de "..race.."." or "Total [" .. contagem .. "/" .. mob.count .. "] " .. race .. ".").."") end end end end end return true end]]></event> </mod> Editado Abril 3, 2021 4 anos por Capitao wyz (veja o histórico de edições)
Postado Abril 3, 2021 4 anos Autor Ah sim, eu conheço esse. Vlw mano, mas eu queria fazer daquele jeito mais simples mesmo. Esse se fizer mais de 1 acho que da erro tbm.
Postado Abril 3, 2021 4 anos Em 03/04/2021 em 22:07, Zazeros disse: Ah sim, eu conheço esse. Vlw mano, mas eu queria fazer daquele jeito mais simples mesmo. Esse se fizer mais de 1 acho que da erro tbm. tranquilo mano é q esses esta funcionando aqui no meu peguei direto na base
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.