• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Task System

Pastel16

New Member
Joined
Jul 22, 2013
Messages
49
Reaction score
3
Location
Poland
What is wrong with this system?
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Talkaction Task System" version="1.0" author="Oskar" contact="[email protected]" enabled="yes">
<config name="talkactionTask_conf"><![CDATA[
canGetOnlyOneTime = false

task = {
['rotworm'] = {storage = 9999, beginStorageValue = 1, finishStorageValue = 2, count = 100,
requiedLevelToReward = 99999999,
rewards = {'exp', 2400, 'cash', 5000, 'item', {11303, 1}}},
['minotaur'] = {storage = 9998, beginStorageValue = 3, finishStorageValue = 4, count = 200,
requiedLevelToReward = 99999999,
rewards = {'exp', 51000, 'cash', 15000, 'item', {5878, 10 }}},
['dwarf'] = {storage = 8965, beginStorageValue = 103, finishStorageValue = 104, count = 200,
requiedLevelToReward = 99999999,
rewards = {'exp', 65400, 'cash', 20000, 'item', {5880, 10}}},
['ghoul'] = {storage = 8975, beginStorageValue = 108, finishStorageValue = 109, count = 150,
requiedLevelToReward = 99999999,
rewards = {'exp', 8000, 'cash', 20000, 'item', {2486, 1, 2168, 1}}},
['cyclops'] = {storage = 1421, beginStorageValue = 5, finishStorageValue = 6, count = 250,
requiedLevelToReward = 99999999,
rewards = {'exp', 90750, 'cash', 30000, 'item', {2515, 1}}},
['vampire'] = {storage = 9993, beginStorageValue = 13, finishStorageValue = 14, count = 300,
requiedLevelToReward = 99999999,
rewards = {'exp', 54900, 'cash', 35000, 'item', {2534, 1}}},
['worker golem'] = {storage = 8375, beginStorageValue = 205, finishStorageValue = 206, count = 300,
requiedLevelToReward = 99999999,
rewards = {'exp', 225000, 'cash', 20000, 'item', {2487, 1}}},
['dragon'] = {storage = 5123, beginStorageValue = 85, finishStorageValue = 86, count = 400,
requiedLevelToReward = 99999999,
rewards = {'exp', 168000, 'cash', 60000, 'item', {2487, 1, 2516, 1}}},
['bog raider'] = {storage = 9992, beginStorageValue = 15, finishStorageValue = 16, count = 400,
requiedLevelToReward = 99999999,
rewards = {'exp', 192000, 'cash', 64000, 'item', {8880, 1}}},
['giant spider'] = {storage = 9982, beginStorageValue = 35, finishStorageValue = 36, count = 500,
requiedLevelToReward = 99999999,
rewards = {'exp', 270000, 'cash', 30000, 'item', {5879, 10}}},
['crystal spider'] = {storage = 8675, beginStorageValue = 211, finishStorageValue = 212, count = 500,
requiedLevelToReward = 99999999,
rewards = {'exp', 270000, 'cash', 20000, 'item', {5879, 10, 7290, 5}}},
['quara'] = {storage = 8412, beginStorageValue = 118, finishStorageValue = 119, count = 250,
requiedLevelToReward = 99999999,
rewards = {'exp', 350000, 'cash', 70000, 'item', {5895, 10}}},
['necromancer'] = {storage = 8961, beginStorageValue = 100, finishStorageValue = 101, count = 400,
requiedLevelToReward = 99999999,
rewards = {'exp', 140000, 'cash', 20000, 'item', {2195, 1}}},
['wyrm'] = {storage = 9961, beginStorageValue = 77, finishStorageValue = 78, count = 600,
requiedLevelToReward = 99999999,
rewards = {'exp', 558000, 'cash', 77000, 'item', {8871, 1}}},
['dragon lord'] = {storage = 4561, beginStorageValue = 87, finishStorageValue = 88, count = 800,
requiedLevelToReward = 99999999,
rewards = {'exp', 1008000, 'cash', 90000, 'item', {2414, 1, 7899, 1}}},
['frost dragon'] = {storage = 9997, beginStorageValue = 90, finishStorageValue = 91, count = 800,
requiedLevelToReward = 99999999,
rewards = {'exp', 1008000, 'cash', 90000}},
['hero'] = {storage = 9996, beginStorageValue = 7, finishStorageValue = 8, count = 500,
requiedLevelToReward = 99999999,
rewards = {'exp', 360000, 'cash', 70000, 'item', {2491, 1, 2488, 1}}},
['black knight'] = {storage = 9995, beginStorageValue = 9, finishStorageValue = 10, count = 600,
requiedLevelToReward = 99999999,
rewards = {'exp', 576000, 'cash', 80000, 'item', {2496, 1}}},
['war golem'] = {storage = 8275, beginStorageValue = 203, finishStorageValue = 204, count = 450,
requiedLevelToReward = 99999999,
rewards = {'exp', 742500, 'cash', 30000, 'item', {2645, 1}}},
['hydra'] = {storage = 9978, beginStorageValue = 43, finishStorageValue = 44, count = 800,
requiedLevelToReward = 99999999,
rewards = {'exp', 1008000, 'cash', 90000, 'item', {2498, 1, 2195, 1}}},
['medusa'] = {storage = 9973, beginStorageValue = 53, finishStorageValue = 54, count = 750,
requiedLevelToReward = 99999999,
rewards = {'exp', 1822500, 'cash', 140000, 'item', {7884, 1, 7903, 1, 7885, 1}}},
['serpent spawn'] = {storage = 9967, beginStorageValue = 65, finishStorageValue = 66, count = 700,
requiedLevelToReward = 99999999,
rewards = {'exp', 1281000, 'cash', 50000}},
['nightmare'] = {storage = 9959, beginStorageValue = 81, finishStorageValue = 82, count = 850,
requiedLevelToReward = 99999999,
rewards = {'exp', 110000, 'cash', 95000, 'item', {6391, 1}}},
['warlock'] = {storage = 8475, beginStorageValue = 207, finishStorageValue = 208, count = 850,
requiedLevelToReward = 99999999,
rewards = {'exp', 2040000, 'cash', 90000, 'item', {7895, 1, 7898, 1}}},
['behemoth'] = {storage = 9994, beginStorageValue = 11, finishStorageValue = 12, count = 500,
requiedLevelToReward = 99999999,
rewards = {'exp', 900000, 'cash', 80000, 'item', {2466, 1}}},
['destroyer'] = {storage = 8075, beginStorageValue = 213, finishStorageValue = 214, count = 600,
requiedLevelToReward = 99999999,
rewards = {'exp', 900000, 'cash', 70000, 'item', {5741, 1}}},
['grim reaper'] = {storage = 9983, beginStorageValue = 33, finishStorageValue = 34, count = 900,
requiedLevelToReward = 99999999,
rewards = {'exp', 2640000, 'cash', 180000, 'item', {5741, 1}}},
['fury'] = {storage = 8175, beginStorageValue = 201, finishStorageValue = 202, count = 800,
requiedLevelToReward = 99999999,
rewards = {'exp', 2160000, 'cash', 70000, 'item', {2470, 1}}},
['hellfire fighter'] = {storage = 8575, beginStorageValue = 209, finishStorageValue = 210, count = 450,
requiedLevelToReward = 99999999,
rewards = {'exp', 1053000, 'cash', 110000, 'item', {7891, 1, 7899, 1, 7890, 200}}},
['demon'] = {storage = 9964, beginStorageValue = 71, finishStorageValue = 72, count = 666,
requiedLevelToReward = 99999999,
rewards = {'exp', 2397600, 'cash', 200000, 'item', {5808, 1}}}
}

mainStorage = 12155

function isSummon(cid)
if(not isCreature(cid)) then
return false
end
return getCreatureMaster(cid) ~= cid
end

function checkInfoAboutTask(tableTask)
local message = ''
for i = 1, #tableTask/2 do
local rewardType, rewardCount = tableTask[i*2-1], tableTask[i*2]
if rewardType == 'item' and type(rewardCount) == 'table' then
for item = 1, #rewardCount/2 do
local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
message = message .. ('* ' .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId)) .. '\n'
end
else
message = message .. ((rewardType == 'item' and '* ' .. getItemNameById(rewardCount)) or
(rewardType == 'exp' and '* ' .. rewardCount .. ' Experience ') or
(rewardType == 'cash' and '* ' .. rewardCount .. ' Money ') or
(rewardType == 'smsPoints' and '* ' .. rewardCount .. ' Sms points ')) .. '\n'
end
end
return message
end

function doAddExp(cid, amount)
return doSendAnimatedText(getThingPos(cid), amount, COLOR_WHITE) and doPlayerAddExperience(cid, amount) or false
end
]]></config>

<talkaction words="!task" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onSay(cid, words, param, channel)

local taskMenu, message = task[param:lower()], ''
if taskMenu and (taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) == -1 or getCreatureStorage(cid, mainStorage) < 1) then
if(canGetOnlyOneTime and getCreatureStorage(cid, taskMenu.storage) > 0) or taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) > taskMenu.count then
return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Already you have made this task!')
end
if taskMenu.potionTask and getCreatureStorage(cid, taskMenu.storage) > -1 then
return true
else
doCreatureSetStorage(cid, mainStorage, taskMenu.beginStorageValue)
end
doCreatureSetStorage(cid, taskMenu.storage, 0)
return doPlayerPopupFYI(cid, 'The decision taken, your task is to '..(taskMenu.potionTask and 'use' or 'kill')..' - ' .. taskMenu.count.. ' ' ..param:lower().. (taskMenu.count > 1 and 's' or '') .. '\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(taskMenu.rewards) .. (taskMenu.potionTask and '' or 'If you want to abort the current job enough that you use the command "!task cancel".\n')..'If you want to know about the current job simply use the command "!task info"\nIf you wish to receive a prize for the job simply use the command !task reward\nHave Fun ^^')
elseif isInArray({'cancel', 'delete', 'abort'}, param:lower()) and getCreatureStorage(cid, mainStorage) > 0 then
for _, v in pairs(task) do
if not v.potionTask and getCreatureStorage(cid, v.storage) >= 0 then
doCreatureSetStorage(cid, mainStorage, -1)
doCreatureSetStorage(cid, v.storage, -1)
return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You canceled the current task.')
end
end
elseif isInArray({'reward', 'end', 'finish'}, param:lower()) then
local rewards, showMessage = 'Items that you got as a reward is: ', false
for _, v in pairs(task) do
if (v.potionTask and getCreatureStorage(cid, v.storage) == v.count or getCreatureStorage(cid, mainStorage) == v.finishStorageValue) then
showMessage = true
if not v.potionTask then
doCreatureSetStorage(cid, mainStorage, -1)
else
doCreatureSetStorage(cid, v.storage, v.count + 1)
end
if not v.requiedLevelToReward or v.requiedLevelToReward >= getPlayerLevel(cid) then
for i = 1, #v.rewards/2 do
local rewardType, rewardCount = v.rewards[i*2-1], v.rewards[i*2]
if rewardType == 'item' and type(rewardCount) == 'table' and #rewardCount > 1 then
for item = 1, #rewardCount / 2 do
local rewardItemId, rewardItemCount = rewardCount[item*2-1], rewardCount[item*2]
rewards = rewards .. rewardItemCount .. 'x ' .. getItemNameById(rewardItemId) .. ', '
doPlayerAddItem(cid, rewardItemId, rewardItemCount, true)
end
else
rewards = rewards .. rewardCount .. 'x ' .. (rewardType == 'item' and getItemNameById(rewardCount) or rewardType == 'exp' and 'experience' or rewardType == 'cash' and 'money' or rewardType == 'smsPoints' and 'sms points') .. ', '
if rewardType == 'item' then
doPlayerAddItem(cid, rewardCount, 1, true)
elseif rewardType == 'exp' then
doAddExp(cid, rewardCount)
elseif rewardType == 'cash' then
doPlayerAddMoney(cid, rewardCount)
elseif rewardType == 'smsPoints' then
db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points` + " .. rewardCount .. " WHERE `name` = '" .. getAccountByName(getCreatureName(cid)) .. "' LIMIT 1;")
end
end
end
else
rewards = 'Your experience level is too high to be able to receive the reward.'
end
end
end
return showMessage and doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string.sub(rewards, 1, string.len(rewards) - 1)..'.')
else
for k, v in pairs(task) do
if isInArray((v.potionTask and {'potion','potions'} or {'info', 'information', 'details'}), param:lower()) and (v.potionTask and getCreatureStorage(cid, v.storage) >= 0 or getCreatureStorage(cid, mainStorage) > 0) then
if (v.potionTask and getCreatureStorage(cid, v.storage) <= v.count or isInArray({v.finishStorageValue, v.beginStorageValue}, getCreatureStorage(cid, mainStorage))) then
return doPlayerPopupFYI(cid, 'Your current task is to '..(v.potionTask and 'use' or 'kill')..' - ' .. v.count.. ' ' ..k:lower().. (v.count > 1 and 's' or '') .. '\nYou have killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '. You must kill ' .. v.count - getCreatureStorage(cid, v.storage) .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. ' yet\nRewards which you receive for finishing this task:\n' .. checkInfoAboutTask(v.rewards))
end
end
end
end
return doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Wrong command!')
end
]]></talkaction>

<event type="kill" name="talkactionTask" event="script"><![CDATA[
domodlib('talkactionTask_conf')
function onKill(cid, target)
if isPlayer(target) or getCreatureMaster(target) or isNpc(target) then
return true
end
for k, v in pairs(task) do
if k:lower() == getCreatureName(target):lower() then
if getCreatureStorage(cid, mainStorage) == v.beginStorageValue then
if getCreatureStorage(cid, v.storage) < v.count then
doCreatureSetStorage(cid, v.storage, getCreatureStorage(cid, v.storage) + 1)
s = 'You killed ' .. getCreatureStorage(cid, v.storage) .. ' of ' .. v.count .. ' ' .. k:lower() .. (v.count == 1 and '' or 's') .. '.'
if getCreatureStorage(cid, v.storage) == v.count then
doCreatureSetStorage(cid, mainStorage, v.finishStorageValue)
s = 'Congratulations! You have killed enough '.. k:lower() ..'.'
end
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, s)
end
end
end
end
return true
end
]]></event>

<event type="login" name="taskEventLogin" event="buffer"><![CDATA[
registerCreatureEvent(cid, 'talkactionTask')
]]></event>
</mod>

All commands work, but doesn't count kills. Help, please.
 
I really really prefer use a mix with quests.xml and a creaturescript of type "kill", because firstly i have never seen the mods, and second, that script is so confuse! It's better make your own scripts. Learn how to create it and you'll be able to do a lot of things.
I recommend you start to use TFS 1.2.
 
Back
Top