What's new

Mods [8.6] Task System + Daily Tasks

buchaLL

bez spiny, luźno
Joined
Aug 2, 2011
Messages
1,013
Reaction score
68
Age
27
Autor: Vodkart


Task System: System, kt?ego zadaniem jest zabicie okre?lonej ilo?ci potwor?w w zamian za co dostajemy nagrody, takie jak exp, cc i przedmioty.

[+] Aby przej?? do nast?pnego zadanie nale?y uko?czy? wcze?niejsze z listy.
[+] Aby rozpocz?? nast?pne zadania wymagany jest poziom.

Daily Tasks: Losowe zadanie w zale?no?ci od naszego poziomu.

[+] Gracze z poziomu 6-49 nale?? do tych 3 zada?: orcs, tarantules lub wyverny.
[+] Gracze mi?dzy poziomem 50-79 nale?? do tych 3 zada?: dragons, wailing widows lub ancient scarab.

Wszystko mo?emy zmieni? w tym miejscu:
[xml]function doRandomDailyTask(cid)
local t = {
[{6,49}] = {1,3},
[{50,79}] = {4,6},
[{80,129}] = {7,9},
[{130,math.huge}] = {10,12}
}[/xml]

Dodatkowe komendy:
/task - Wy?wietla informacje aktualnych zada?, poziomu, nagrody, potwor?w, kt?re nale?y zabi?.
/task daily - Informacje takie jak w przypadku /task, ale tak?e pokazuje termin dostarczenia zadania.
/task counter - to polecenie, kt?re w??cza lub wy??cza licznik zabitych potwor?w w zadaniu na kanale.

Zdj?cia:
x46gs2.png

qem94u.png


Instalacja:

mods \ simple_task.xml
[xml]<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Simple Task" version="4.0" author="Vodkart" contact="tibiaking.com" enabled="yes">
<config name="task_func"><![CDATA[
task_sys = {
[1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000},
[2] = {name = "rotworms", start = 176202, monsters_list = {"rotworm","carrion worm","Rotworm Queen"}, level = 12, count = 50, points = 0, items = {}, reward = {}, exp = 2500, money = 3000},
[3] = {name = "cyclops", start = 176203, monsters_list = {"cyclops","cyclops smith","cyclops drone"}, level = 19, count = 60, points = 0, items = {}, reward = {}, exp = 3000, money = 3000},
[4] = {name = "Green Djinn", start = 176204, monsters_list = {"Green Djinn","Efreet"}, level = 23, count = 80, points = 1, items = {}, reward = {}, exp = 10000, money = 5000},
[5] = {name = "Blue Djinn", start = 176205, monsters_list = {"Blue Djinn","Marid"}, level = 25, count = 80, points = 1, items = {}, reward = {}, exp = 10000, money = 5000},
[6] = {name = "pirates", start = 176206, monsters_list = {"Pirate Marauder","Pirate Cutthroat","Pirate Buccaneer","Pirate Corsair"}, level = 30, count = 120, points = 2, items = {}, reward = {}, exp = 10000, money = 5000},
[7] = {name = "Stone Golems", start = 176207, monsters_list = {"Stone Golem"}, level = 33, count = 130, points = 3, items = {}, reward = {}, exp = 12000, money = 7000},
[8] = {name = "Carniphilas", start = 176208, monsters_list = {"carniphila"}, level = 36, count = 135, points = 3, items = {}, reward = {}, exp = 8000, money = 8000},
[9] = {name = "Ice Golems", start = 176209, monsters_list = {"ice golem"}, level = 40, count = 150, points = 2, items = {}, reward = {}, exp = 12000, money = 8200},
[10] = {name = "Wailing Widows", start = 176210, monsters_list = {"Wailing Widow"}, level = 42, count = 150, points = 3, items = {}, reward = {}, exp = 0, money = 0},
[11] = {name = "Mutated Rats", start = 176211, monsters_list = {"Mutated Rat"}, level = 46, count = 170, points = 2, items = {}, reward = {}, exp = 8000, money = 8500},
[12] = {name = "Dragons", start = 176212, monsters_list = {"dragon"}, level = 50, count = 120, points = 1, items = {}, reward = {}, exp = 9000, money = 9000},
[13] = {name = "Necromancer" ,start = 176213, monsters_list = {"Necromancer"}, level = 60, count = 200, points = 3, items = {}, reward = {}, exp = 20000, money = 15000},
[14] = {name = "Crystal Spiders" ,start = 176214, monsters_list = {"Crystal Spider"}, level = 63, count = 250, points = 3, items = {}, reward = {}, exp = 25000, money = 11000},
[15] = {name = "Giant Spider" ,start = 176215, monsters_list = {"Giant Spider","The old widow"}, level = 80, count = 500, points = 0, items = {}, reward = {}, exp = 20000, money = 32000},
[16] = {name = "Underwater Quaras" ,start = 176216, monsters_list = {"quara predator","quara constrictor","quara hydromancer","quara mantassin","quara pincher"}, level = 82, count = 550, points = 3, items = {}, reward = {}, exp = 22000, money = 15000},
[17] = {name = "Underwater Quaras Scout" ,start = 176217, monsters_list = {"quara predator scout","quara constrictor scout","quara hydromancer scout","quara mantassin scout","quara pincher scout"}, level = 83, count = 600, points = 3, items = {}, reward = {}, exp = 25000, money = 18000},
[18] = {name = "Hellspawn" ,start = 176218, monsters_list = {"Hellspawn"}, level = 85, count = 600, points = 4, items = {}, reward = {}, exp = 28000, money = 26000},
[19] = {name = "Dragon Lords" ,start = 176219, monsters_list = {"Dragon lord"}, level = 88, count = 650, points = 3, items = {}, reward = {}, exp = 30000, money = 35000},
[20] = {name = "Lizard Dragons" ,start = 176220, monsters_list = {"Lizard Chosen","Lizard Dragon Priest","Lizard High Guard","Lizard Legionnaire", "Lizard Zaogun"}, level = 90, count = 600, points = 4, items = {}, reward = {}, exp = 28000, money = 26000},
[21] = {name = "Nightmare" ,start = 176221, monsters_list = {"Nightmare","nightmare scion"}, level = 95, count = 650, points = 2, items = {}, reward = {}, exp = 30000, money = 35000},
[22] = {name = "Hydras" ,start = 176222, monsters_list = {"Hydra"}, level = 100, count = 700, points = 3, items = {}, reward = {}, exp = 40000, money = 40000},
[23] = {name = "Serpent Spawn" ,start = 176223, monsters_list = {"Serpent Spawn"}, level = 103, count = 720, points = 4, items = {}, reward = {}, exp = 50000, money = 45000},
[24] = {name = "Hellhounds" ,start = 176224, monsters_list = {"Hellhound"}, level = 107, count = 650, points = 2, items = {}, reward = {}, exp = 30000, money = 35000},
[25] = {name = "Demons" ,start = 176225, monsters_list = {"Demon"}, level = 110, count = 666, points = 4, items = {}, reward = {}, exp = 66600, money = 66000}
}
daily_task = {
[1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000},
[2] = {name = "Tarantulas" ,monsters_list = {"Tarantula"}, count = 120, points = 1, reward = {}, exp = 9000, money = 12000},
[3] = {name = "Wyvern" ,monsters_list = {"Wyvern"}, count = 125, points = 2, reward = {}, exp = 9000, money = 15000},
[4] = {name = "Dragons" ,monsters_list = {"Dragon","Dragon Hatchling"}, count = 150, points = 0, reward = {}, exp = 2000, money = 10000},
[5] = {name = "Wailing Widows" ,monsters_list = {"Wailing Widows"}, count = 200, points = 1, reward = {}, exp = 20000, money = 25000},
[6] = {name = "Ancient Scarabs" ,monsters_list = {"Ancient Scarab"}, count = 180, points = 5, reward = {}, exp = 22000, money = 18000},
[7] = {name = "High Class Lizards" ,monsters_list = {"Corrupted Soul","Eternal Guardian","Lizard Chosen","Lizard Dragon Priest","Lizard High Guard","Lizard Legionnaire","Lizard Magistratus","Lizard Noble","Lizard Zaogun"}, count = 300, points = 3, reward = {}, exp = 50000, money = 60000},
[8] = {name = "Mutated BatS" ,monsters_list = {"Mutated Bat"}, count = 260, points = 2, reward = {}, exp = 40000, money = 55000},
[9] = {name = "Giant Spiders" ,monsters_list = {"Giant Spider"}, count = 350, points = 3, reward = {}, exp = 60000, money = 70000},
[10] = {name = "Undead Dragons" ,monsters_list = {"Undead Dragon"}, count = 500, points = 3, reward = {{2173,1}}, exp = 90000, money = 120000},
[11] = {name = "HydraS" ,monsters_list = {"Hydra"}, count = 600, points = 3, reward = {{2173,1}}, exp = 100000, money = 160000},
[12] = {name = "Ghastly Dragons" ,monsters_list = {"Ghastly Dragon"}, count = 700, points = 3, reward = {{2173,1}}, exp = 130000, money = 200000}
}
task_sys_storages = {176601, 176602, 176603, 176604, 176605, 176606, 176607, 176608} -- task, points, count, daily task, daily count, daily time , daily start, contador
function getTaskMission(cid)
return getPlayerStorageValue(cid,task_sys_storages[1]) < 0 and 1 or getPlayerStorageValue(cid,task_sys_storages[1])
end
function getDailyTaskMission(cid)
return getPlayerStorageValue(cid,task_sys_storages[4]) < 0 and 1 or getPlayerStorageValue(cid,task_sys_storages[4])
end
function getTaskPoints(cid)
return getPlayerStorageValue(cid,task_sys_storages[2]) < 0 and 0 or getPlayerStorageValue(cid,task_sys_storages[2])
end
function doRandomDailyTask(cid)
local t = {
[{6,49}] = {1,3},
[{50,79}] = {4,6},
[{80,129}] = {7,9},
[{130,math.huge}] = {10,12}
}
for a , b in pairs(t) do
if getPlayerLevel(cid) >= a[1] and getPlayerLevel(cid) <= a[2] then
return math.random(b[1], b[2])
end
end
return 0
end
function GetRankTask(cid)
local ranks = {
[{1, 20}] = "Huntsman",
[{21, 50}] = "Ranger",
[{51, 100}] = "Big Game Hunter",
[{101, 200}] = "Trophy Hunter",
[{201, math.huge}] = "Elite Hunter"
}
for v , r in pairs(ranks) do
if getTaskPoints(cid) >= v[1] and getTaskPoints(cid) <= v[2] then
return r
end
end
return 0
end
function getItemsFromList(items)
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 doRemoveItemsFromList(cid,items)
local count = 0
if table.maxn(items) > 0 then
for i = 1, table.maxn(items) do
if getPlayerItemCount(cid,items[1]) >= items[2] then
count = count + 1 end
end
end
if count == table.maxn(items) then
for i = 1, table.maxn(items) do doPlayerRemoveItem(cid,items[1],items[2]) end
else
return false
end
return true
end
function getMonsterFromList(monster)
local str = ''
if #monster > 0 then
for i = 1, #monster do
str = str .. monster
if i ~= #monster then str = str .. ', ' end
end
end
return str
end
function GiveRewardsTask(cid, items)
local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID
for _, i_i in ipairs(items) do
local item, amount = i_i[1],i_i[2]
if isItemStackable(item) or amount == 1 then
doAddContainerItem(backpack, item, amount)
else
for i = 1, amount do
doAddContainerItem(backpack, item, 1)
end
end
end
end
function isSummon(cid)
if(not isCreature(cid)) then
return false
end
return getCreatureMaster(cid) ~= cid
end
]]></config>
<event type="login" name="TaskLogin" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "KillTask")
registerCreatureEvent(cid, "TaskLook")
return true
end]]></event>
<talkaction words="/task;!task" event="buffer"><![CDATA[
domodlib('task_func')
param,task,daily = param:lower(), getTaskMission(cid), getDailyTaskMission(cid)
if isInArray({"counter","contador"},param) then
setPlayerStorageValue(cid, task_sys_storages[8], getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and 1 or 0)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Task System] The counter was "..(getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and "activated" or "disabled")..".") return true
elseif isInArray({"daily","diaria"},param) then
if not daily_task[daily] or getPlayerStorageValue(cid, task_sys_storages[7]) <= 0 then
doPlayerSendCancel(cid, "Sorry, but you are not on any Daily Task.") return true
elseif getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() <= 0 and getPlayerStorageValue(cid, task_sys_storages[5]) < daily_task[daily].count then
doPlayerSendCancel(cid,"Sorry, but you did not finish the Daily Task on time! Please go back to npc and start a new Daily Task!") return true
end
return doShowTextDialog(cid, 8983, "[->] CURRENT DAILY TASK INFO [<-]\n\nNome: "..daily_task[daily].name.."\nProgresso: ["..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and 0 or getPlayerStorageValue(cid, task_sys_storages[5])).."/"..daily_task[daily].count.."]\nPrazo para entrega: "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).."\nMonstros para caÃ?ar: "..getMonsterFromList(daily_task[daily].monsters_list).."\n\n[->] CURRENT TASK REWARDS [<-]\n\nMoney: "..(daily_task[daily].money > 0 and daily_task[daily].money or 0).."\nExperiencia: "..(daily_task[daily].exp > 0 and daily_task[daily].exp or 0).."\nTask Points: "..daily_task[daily].points.."\nItems: "..(#daily_task[daily].reward > 0 and getItemsFromList(daily_task[daily].reward) or "No reward items")..".")
end
if not task_sys[task] or getPlayerStorageValue(cid, task_sys[task].start) <= 0 then
doPlayerSendCancel(cid, "You are not on any task.") return true
end
return doShowTextDialog(cid, 8983, "-> CURRENT TASK ["..getTaskMission(cid).."/"..#task_sys.."] <-\n\nTask Name: "..task_sys[task].name.."\nTask Level: "..task_sys[task].level.."\nTask Progress: ["..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and 0 or getPlayerStorageValue(cid, task_sys_storages[3])).."/"..task_sys[task].count.."]\nMonster To Hunt: "..getMonsterFromList(task_sys[task].monsters_list)..".\nItems For Delivery: "..(#task_sys[task].items > 0 and getItemsFromList(task_sys[task].items) or "None")..".\n\n[->] CURRENT TASK REWARDS [<-]\n\nReward Money: "..(task_sys[task].money > 0 and task_sys[task].money or 0).."\nReward Experiencia: "..(task_sys[task].exp > 0 and task_sys[task].exp or 0).."\nReward Points: "..task_sys[task].points.."\nReward Items: "..(#task_sys[task].reward > 0 and getItemsFromList(task_sys[task].reward) or "None")..".")
]]></talkaction>
<event type="look" name="TaskLook" event="script"><![CDATA[
domodlib('task_func')
function onLook(cid, thing, position, lookDistance)
if isPlayer(thing.uid) and getTaskPoints(thing.uid) > 0 then
doPlayerSetSpecialDescription(thing.uid, "\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").. " is a "..GetRankTask(thing.uid))
end
return true
end]]></event>
<event type="kill" name="KillTask" event="script"><![CDATA[
domodlib('task_func')
function onKill(cid, target)
if isPlayer(cid) and isMonster(target) then
local t,daily = task_sys[getTaskMission(cid)], daily_task[getDailyTaskMission(cid)]
if t and getPlayerStorageValue(cid, t.start) > 0 and isInArray(t.monsters_list, getCreatureName(target):lower()) and getPlayerStorageValue(cid, task_sys_storages[3]) < t.count then
setPlayerStorageValue(cid, task_sys_storages[3], getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and 1 or (getPlayerStorageValue(cid, task_sys_storages[3])+1))
if getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and getPlayerStorageValue(cid, task_sys_storages[3]) < t.count then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task System] defeated Total [" .. getPlayerStorageValue(cid, task_sys_storages[3]) .. "/" .. t.count .. "] of the Task " .. t.name .. ".")
end
if getPlayerStorageValue(cid, task_sys_storages[3]) >= t.count then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Task System] Congratulations! You have finished the Task "..t.name..", come back to npc seems to receive your reward.")
end
end
if daily and getPlayerStorageValue(cid, task_sys_storages[7]) > 0 and getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() >= 0 and isInArray(daily.monsters_list, getCreatureName(target):lower()) and getPlayerStorageValue(cid, task_sys_storages[5]) < daily.count then
setPlayerStorageValue(cid, task_sys_storages[5], getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and 1 or (getPlayerStorageValue(cid, task_sys_storages[5])+1))
if getPlayerStorageValue(cid, task_sys_storages[8]) <= 0 and getPlayerStorageValue(cid, task_sys_storages[5]) < daily.count then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"[Daily Task System] defeated Total [" .. getPlayerStorageValue(cid, task_sys_storages[5]) .. "/" .. daily.count .. "] of the Task " .. daily.name .. ".")
end
if getPlayerStorageValue(cid, task_sys_storages[5]) >= daily.count then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"[Daily Task System] Congratulations! You have finished the Task of "..daily.name..", come back to npc seems to receive your reward.")
end
end
end
return true
end]]></event>
</mod>[/xml]

data \ npc \ Ludger.xml
[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="Welcome |PLAYERNAME|. You want do {task} or {daily} task? Or you want to {deliver} your task and receive rewards for it!" />
</parameters>
</npc>[/xml]

data \ npc \ scripts \ simple_task.lua
[lua]domodlib('task_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink() npcHandler:eek:nThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"",""
local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24
if isInArray({"task","tasks","missao","mission"}, msg) then
if task_sys[task] then
if getPlayerStorageValue(cid, task_sys[task].start) <= 0 then
if getPlayerLevel(cid) >= task_sys[task].level then
setPlayerStorageValue(cid, task_sys[task].start, 1)
npcHandler:say("[Task System] Congratulations, you are now participating in the task of "..task_sys[task].name.." and must kill "..task_sys[task].count.." this list: "..getMonsterFromList(task_sys[task].monsters_list)..". "..(#task_sys[task].items > 0 and "Oh and please bring me "..getItemsFromList(task_sys[task].items).." to me." or "").."" , cid)
else
npcHandler:say("Sorry, but you must reach level "..task_sys[task].level.." to be able to participate in the task of "..task_sys[task].name.."!", cid)
end
else
npcHandler:say("Sorry, but you are currently in the task "..task_sys[task].name..". you can {deliver} if you have already completed.", cid)
end
else
npcHandler:say("Desculpe, Mas por enquanto não tenho mais nenhuma task para você!", cid)
end
elseif isInArray({"diaria","daili","daily","dayli","diario"}, msg) then
if getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() > 0 then
npcHandler:say("Sorry, you must wait until "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).." to start a new task daily!", cid) return true
elseif daily_task[daily] and getPlayerStorageValue(cid, task_sys_storages[5]) >= daily_task[daily].count then
npcHandler:say("Sorry, you have task to {deliver} !", cid) return true
end
local r = doRandomDailyTask(cid)
if r == 0 then
npcHandler:say("Sorry, but you do not have to level complete any task daily.", cid) return true
end
setPlayerStorageValue(cid, task_sys_storages[4], r)
setPlayerStorageValue(cid, task_sys_storages[6], os.time()+hours*3600)
setPlayerStorageValue(cid, task_sys_storages[7], 1)
setPlayerStorageValue(cid, task_sys_storages[5], 0)
local dtask = daily_task[r]
npcHandler:say("[Daily Task System] Congratulations, you are now participating in the Task Daily's "..dtask.name.." and shall kill "..dtask.count.." monsters of the list: "..getMonsterFromList(dtask.monsters_list).." to "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6]))..". Good luck!" , cid)
elseif isInArray({"receber","reward","recompensa","report","reportar","deliver","entrega"}, msg) then
local v, k = task_sys[task], daily_task[daily]
if v then -- original task
if getPlayerStorageValue(cid, v.start) > 0 then
if getPlayerStorageValue(cid,task_sys_storages[3]) >= v.count then
if #v.items > 0 and not doRemoveItemsFromList(cid, v.items) then
npcHandler:say("Sorry, but you also need to deliver the items on this list: "..getItemsFromList(v.items), cid) return true
end
if v.exp > 0 then doPlayerAddExp(cid, v.exp) str = str.."".. (str == "" and "" or ", ") .." "..v.exp.." exp" end
if v.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+v.points)) str = str.."".. (str == "" and "" or ", ") .." + "..v.points.."task points" end
if v.money > 0 then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ", ") ..""..v.money.." gps" end
if table.maxn(v.reward) > 0 then GiveRewardsTask(cid, v.reward) str = str.."".. (str == "" and "" or ", ") ..""..getItemsFromList(v.reward) end
npcHandler:say("Thanks for your help Rewards: "..(str == "" and "nenhuma" or ""..str.."").." for completing the task of "..v.name, cid)
setPlayerStorageValue(cid, task_sys_storages[3], 0)
setPlayerStorageValue(cid, task_sys_storages[1], (task+1))
else
npcHandler:say("Sorry, but you have not finished your task of "..v.name..". I need you to kill more "..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and v.count or -(getPlayerStorageValue(cid,task_sys_storages[3])-v.count)).." these terrible monsters!", cid)
end
end
end
if k then -- daily task
if getPlayerStorageValue(cid, task_sys_storages[7]) > 0 then
if getPlayerStorageValue(cid, task_sys_storages[5]) >= k.count then
if k.exp > 0 then doPlayerAddExp(cid, v.exp) rst = rst.."".. (rst == "" and "" or ", ") .." "..k.exp.." exp" end
if k.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+k.points)) rst = rst.."".. (rst == "" and "" or ", ") .." + "..k.points.."task points" end
if k.money > 0 then doPlayerAddMoney(cid, k.money) rst = rst.."".. (rst == "" and "" or ", ") ..""..k.money.." gps" end
if table.maxn(k.reward) > 0 then GiveRewardsTask(cid, k.reward) rst = rst.."".. (rst == "" and "" or ", ") ..""..getItemsFromList(k.reward) end
npcHandler:say("Thanks for your help Rewards: "..(rst == "" and "nenhuma" or ""..rst.."").." for completing the task of "..k.name, cid)
setPlayerStorageValue(cid, task_sys_storages[4], 0)
setPlayerStorageValue(cid, task_sys_storages[5], 0)
setPlayerStorageValue(cid, task_sys_storages[7], 0)
else
npcHandler:say("Sorry, but you not yet finished his daily task of "..k.name..". I need to kill more "..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and k.count or -(getPlayerStorageValue(cid,task_sys_storages[5])-k.count)).." these monsters!", cid)
end
end
end
elseif msg == "no" then
selfSay("Alright then", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())[/lua]
 

DenZ

Zasłużony
Joined
Feb 23, 2011
Messages
868
Reaction score
30
Age
28
Odp: [8.6] Task System + Daily Tasks

Da?oby rad? rozdzieli? te taski? np u 1 NPC normalne i u 2 dzienne?
 

reeeq

Active User
Joined
Mar 3, 2012
Messages
141
Reaction score
10
Odp: [8.6] Task System + Daily Tasks

wystarczy edytowac NPC usuwajac odpowiednie linijki odpowiadajace za daily i dodanie ich do nowego NPC.
 

buchaLL

bez spiny, luźno
Joined
Aug 2, 2011
Messages
1,013
Reaction score
68
Age
27
Odp: [8.6] Task System + Daily Tasks

1 NPC:
[xml]<?xml version="1.0"?>
<npc name="Name" script="data/npc/scripts/name.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="Welcome |PLAYERNAME|. You want do {task}? Or you want to {deliver} your task and receive rewards for it!" />
</parameters>
</npc>[/xml]

[lua]domodlib('task_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink() npcHandler:eek:nThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"",""
local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24
if isInArray({"task","tasks","missao","mission"}, msg) then
if task_sys[task] then
if getPlayerStorageValue(cid, task_sys[task].start) <= 0 then
if getPlayerLevel(cid) >= task_sys[task].level then
setPlayerStorageValue(cid, task_sys[task].start, 1)
npcHandler:say("[Task System] Congratulations, you are now participating in the task of "..task_sys[task].name.." and must kill "..task_sys[task].count.." this list: "..getMonsterFromList(task_sys[task].monsters_list)..". "..(#task_sys[task].items > 0 and "Oh and please bring me "..getItemsFromList(task_sys[task].items).." to me." or "").."" , cid)
else
npcHandler:say("Sorry, but you must reach level "..task_sys[task].level.." to be able to participate in the task of "..task_sys[task].name.."!", cid)
end
else
npcHandler:say("Sorry, but you are currently in the task "..task_sys[task].name..". you can {deliver} if you have already completed.", cid)
end
else
npcHandler:say("Desculpe, Mas por enquanto não tenho mais nenhuma task para você!", cid)
end
elseif isInArray({"receber","reward","recompensa","report","reportar","deliver","entrega"}, msg) then
local v = task_sys[task]
if v then -- original task
if getPlayerStorageValue(cid, v.start) > 0 then
if getPlayerStorageValue(cid,task_sys_storages[3]) >= v.count then
if #v.items > 0 and not doRemoveItemsFromList(cid, v.items) then
npcHandler:say("Sorry, but you also need to deliver the items on this list: "..getItemsFromList(v.items), cid) return true
end
if v.exp > 0 then doPlayerAddExp(cid, v.exp) str = str.."".. (str == "" and "" or ", ") .." "..v.exp.." exp" end
if v.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+v.points)) str = str.."".. (str == "" and "" or ", ") .." + "..v.points.."task points" end
if v.money > 0 then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ", ") ..""..v.money.." gps" end
if table.maxn(v.reward) > 0 then GiveRewardsTask(cid, v.reward) str = str.."".. (str == "" and "" or ", ") ..""..getItemsFromList(v.reward) end
npcHandler:say("Thanks for your help Rewards: "..(str == "" and "nenhuma" or ""..str.."").." for completing the task of "..v.name, cid)
setPlayerStorageValue(cid, task_sys_storages[3], 0)
setPlayerStorageValue(cid, task_sys_storages[1], (task+1))
else
npcHandler:say("Sorry, but you have not finished your task of "..v.name..". I need you to kill more "..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and v.count or -(getPlayerStorageValue(cid,task_sys_storages[3])-v.count)).." these terrible monsters!", cid)
end
end
end
elseif msg == "no" then
selfSay("Alright then", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())[/lua]

2 NPC:
[xml]<?xml version="1.0"?>
<npc name="Name" script="data/npc/scripts/name.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="Welcome |PLAYERNAME|. You want do {daily} task? Or you want to {deliver} your task and receive rewards for it!" />
</parameters>
</npc>[/xml]

[lua]domodlib('task_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink() npcHandler:eek:nThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"",""
local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24
if isInArray({"diaria","daili","daily","dayli","diario"}, msg) then
if getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() > 0 then
npcHandler:say("Sorry, you must wait until "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).." to start a new task daily!", cid) return true
elseif daily_task[daily] and getPlayerStorageValue(cid, task_sys_storages[5]) >= daily_task[daily].count then
npcHandler:say("Sorry, you have task to {deliver} !", cid) return true
end
local r = doRandomDailyTask(cid)
if r == 0 then
npcHandler:say("Sorry, but you do not have to level complete any task daily.", cid) return true
end
setPlayerStorageValue(cid, task_sys_storages[4], r)
setPlayerStorageValue(cid, task_sys_storages[6], os.time()+hours*3600)
setPlayerStorageValue(cid, task_sys_storages[7], 1)
setPlayerStorageValue(cid, task_sys_storages[5], 0)
local dtask = daily_task[r]
npcHandler:say("[Daily Task System] Congratulations, you are now participating in the Task Daily's "..dtask.name.." and shall kill "..dtask.count.." monsters of the list: "..getMonsterFromList(dtask.monsters_list).." to "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6]))..". Good luck!" , cid)
elseif isInArray({"receber","reward","recompensa","report","reportar","deliver","entrega"}, msg) then
local k = daily_task[daily]
if k then -- daily task
if getPlayerStorageValue(cid, task_sys_storages[7]) > 0 then
if getPlayerStorageValue(cid, task_sys_storages[5]) >= k.count then
if k.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+k.points)) rst = rst.."".. (rst == "" and "" or ", ") .." + "..k.points.."task points" end
if k.money > 0 then doPlayerAddMoney(cid, k.money) rst = rst.."".. (rst == "" and "" or ", ") ..""..k.money.." gps" end
if table.maxn(k.reward) > 0 then GiveRewardsTask(cid, k.reward) rst = rst.."".. (rst == "" and "" or ", ") ..""..getItemsFromList(k.reward) end
npcHandler:say("Thanks for your help Rewards: "..(rst == "" and "nenhuma" or ""..rst.."").." for completing the task of "..k.name, cid)
setPlayerStorageValue(cid, task_sys_storages[4], 0)
setPlayerStorageValue(cid, task_sys_storages[5], 0)
setPlayerStorageValue(cid, task_sys_storages[7], 0)
else
npcHandler:say("Sorry, but you not yet finished his daily task of "..k.name..". I need to kill more "..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and k.count or -(getPlayerStorageValue(cid,task_sys_storages[5])-k.count)).." these monsters!", cid)
end
end
end
elseif msg == "no" then
selfSay("Alright then", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())[/lua]
 

Rychu222

Advanced User
Joined
Dec 21, 2012
Messages
160
Reaction score
1
Odp: [8.6] Task System + Daily Tasks

1 NPC:
[xml]<?xml version="1.0"?>
<npc name="Name" script="data/npc/scripts/name.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="Welcome |PLAYERNAME|. You want do {task}? Or you want to {deliver} your task and receive rewards for it!" />
</parameters>
</npc>[/xml]

[lua]domodlib('task_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink() npcHandler:eek:nThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"",""
local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24
if isInArray({"task","tasks","missao","mission"}, msg) then
if task_sys[task] then
if getPlayerStorageValue(cid, task_sys[task].start) <= 0 then
if getPlayerLevel(cid) >= task_sys[task].level then
setPlayerStorageValue(cid, task_sys[task].start, 1)
npcHandler:say("[Task System] Congratulations, you are now participating in the task of "..task_sys[task].name.." and must kill "..task_sys[task].count.." this list: "..getMonsterFromList(task_sys[task].monsters_list)..". "..(#task_sys[task].items > 0 and "Oh and please bring me "..getItemsFromList(task_sys[task].items).." to me." or "").."" , cid)
else
npcHandler:say("Sorry, but you must reach level "..task_sys[task].level.." to be able to participate in the task of "..task_sys[task].name.."!", cid)
end
else
npcHandler:say("Sorry, but you are currently in the task "..task_sys[task].name..". you can {deliver} if you have already completed.", cid)
end
else
npcHandler:say("Desculpe, Mas por enquanto não tenho mais nenhuma task para você!", cid)
end
elseif isInArray({"receber","reward","recompensa","report","reportar","deliver","entrega"}, msg) then
local v = task_sys[task]
if v then -- original task
if getPlayerStorageValue(cid, v.start) > 0 then
if getPlayerStorageValue(cid,task_sys_storages[3]) >= v.count then
if #v.items > 0 and not doRemoveItemsFromList(cid, v.items) then
npcHandler:say("Sorry, but you also need to deliver the items on this list: "..getItemsFromList(v.items), cid) return true
end
if v.exp > 0 then doPlayerAddExp(cid, v.exp) str = str.."".. (str == "" and "" or ", ") .." "..v.exp.." exp" end
if v.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+v.points)) str = str.."".. (str == "" and "" or ", ") .." + "..v.points.."task points" end
if v.money > 0 then doPlayerAddMoney(cid, v.money) str = str.."".. (str == "" and "" or ", ") ..""..v.money.." gps" end
if table.maxn(v.reward) > 0 then GiveRewardsTask(cid, v.reward) str = str.."".. (str == "" and "" or ", ") ..""..getItemsFromList(v.reward) end
npcHandler:say("Thanks for your help Rewards: "..(str == "" and "nenhuma" or ""..str.."").." for completing the task of "..v.name, cid)
setPlayerStorageValue(cid, task_sys_storages[3], 0)
setPlayerStorageValue(cid, task_sys_storages[1], (task+1))
else
npcHandler:say("Sorry, but you have not finished your task of "..v.name..". I need you to kill more "..(getPlayerStorageValue(cid, task_sys_storages[3]) < 0 and v.count or -(getPlayerStorageValue(cid,task_sys_storages[3])-v.count)).." these terrible monsters!", cid)
end
end
end
elseif msg == "no" then
selfSay("Alright then", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())[/lua]

2 NPC:
[xml]<?xml version="1.0"?>
<npc name="Name" script="data/npc/scripts/name.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="Welcome |PLAYERNAME|. You want do {daily} task? Or you want to {deliver} your task and receive rewards for it!" />
</parameters>
</npc>[/xml]

[lua]domodlib('task_func')
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink() npcHandler:eek:nThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser,msg, str,rst = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid, msg:lower(),"",""
local task,daily, hours = getTaskMission(cid),getDailyTaskMission(cid), 24
if isInArray({"diaria","daili","daily","dayli","diario"}, msg) then
if getPlayerStorageValue(cid, task_sys_storages[6]) - os.time() > 0 then
npcHandler:say("Sorry, you must wait until "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6])).." to start a new task daily!", cid) return true
elseif daily_task[daily] and getPlayerStorageValue(cid, task_sys_storages[5]) >= daily_task[daily].count then
npcHandler:say("Sorry, you have task to {deliver} !", cid) return true
end
local r = doRandomDailyTask(cid)
if r == 0 then
npcHandler:say("Sorry, but you do not have to level complete any task daily.", cid) return true
end
setPlayerStorageValue(cid, task_sys_storages[4], r)
setPlayerStorageValue(cid, task_sys_storages[6], os.time()+hours*3600)
setPlayerStorageValue(cid, task_sys_storages[7], 1)
setPlayerStorageValue(cid, task_sys_storages[5], 0)
local dtask = daily_task[r]
npcHandler:say("[Daily Task System] Congratulations, you are now participating in the Task Daily's "..dtask.name.." and shall kill "..dtask.count.." monsters of the list: "..getMonsterFromList(dtask.monsters_list).." to "..os.date("%d %B %Y %X ", getPlayerStorageValue(cid,task_sys_storages[6]))..". Good luck!" , cid)
elseif isInArray({"receber","reward","recompensa","report","reportar","deliver","entrega"}, msg) then
local k = daily_task[daily]
if k then -- daily task
if getPlayerStorageValue(cid, task_sys_storages[7]) > 0 then
if getPlayerStorageValue(cid, task_sys_storages[5]) >= k.count then
if k.points > 0 then setPlayerStorageValue(cid, task_sys_storages[2], (getTaskPoints(cid)+k.points)) rst = rst.."".. (rst == "" and "" or ", ") .." + "..k.points.."task points" end
if k.money > 0 then doPlayerAddMoney(cid, k.money) rst = rst.."".. (rst == "" and "" or ", ") ..""..k.money.." gps" end
if table.maxn(k.reward) > 0 then GiveRewardsTask(cid, k.reward) rst = rst.."".. (rst == "" and "" or ", ") ..""..getItemsFromList(k.reward) end
npcHandler:say("Thanks for your help Rewards: "..(rst == "" and "nenhuma" or ""..rst.."").." for completing the task of "..k.name, cid)
setPlayerStorageValue(cid, task_sys_storages[4], 0)
setPlayerStorageValue(cid, task_sys_storages[5], 0)
setPlayerStorageValue(cid, task_sys_storages[7], 0)
else
npcHandler:say("Sorry, but you not yet finished his daily task of "..k.name..". I need to kill more "..(getPlayerStorageValue(cid, task_sys_storages[5]) < 0 and k.count or -(getPlayerStorageValue(cid,task_sys_storages[5])-k.count)).." these monsters!", cid)
end
end
end
elseif msg == "no" then
selfSay("Alright then", cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())[/lua]

Takie pytanko, te task potiny to co? daj?? Jakie? rangi jak na rl? Gdzie? s? widoczne?
 
Top