This is the new script for Killing in the name of... Quest that i made. It includes mort features to real-tibia.
Features:
Note: The system to kill bosses isn't added here. The thing that you can do is add an action-id to the teleports to room bosses and check with a script if player has x storage
First of all, you need to add this lib:
NOTE: If you use TFS 0.4Dev you must do this or script won't work: http://otland.net/f83/grizzly-adams...ore-real-tibia-159150/index4.html#post1552537
Grizzly Adams.xml
data/npc/scripts/KillingInTheNameOf.lua:
Add this line to creaturescripts.xml
data/creaturescripts/scripts/killinginthenameof.lua
And this line to login.lua
And now, i think you are ready to start a task
Features:
- You can start only the tasks acording to your level and/or storage
- You can repeat tasks (Times can be changed)
- You can start 3 task at same time (Count can be changed)
- Rewards are easy to configure and have a lot of features
- The rewards types are:
- money/REWARD_MONEY: Gives money to the player.
- exp/experience/REWARD_EXP: Gives experience points to the player.
- achievement/ach/REWARD_ACHIEVEMENT: Gives an achievement to player. This works with my achievements system.
- storage/stor/REWARD_STORAGE: Gives a storage to the player.
- points/point/REWARD_POINT: Gives Paw & Fur points to the player.
- items/item/object/REWARD_ITEM: Gives an item to the player.
- The flags for reward are:
- value: Here you declare the variables for the rewards. Size of table depends of the type of reward. Example: If reward type = "experience" then value must be {1000}. If reward type = "item" then value must be {2195, 1} (Itemid, count)
- storage: This flag is used to set an storage to the player when it receives the reward. Used to avoid be rewarded more than one time when task is repeated. Example: storage = {1250, 1}. When player receives a reward, it'll obtain the storage 1250 with value 1 and won't receive the same reward again after repeating the same task.
- The rewards types are:
- You can check the tasks started.
- You can check how many Paw & Fur points you have, and also your rank.
- When a monster is killed, you'll receive a message of how many already killed.
- Tasks names are declared in the variable 'raceName' but if you want to give a name different to the 'raceName' you can add the variable 'name' to the task (You can see the example in the second task of Necromancers and Priestess)
Note: The system to kill bosses isn't added here. The thing that you can do is add an action-id to the teleports to room bosses and check with a script if player has x storage
First of all, you need to add this lib:
LUA:
RANK_NONE = 0
RANK_HUNTSMAN = 1
RANK_RANGER = 2
RANK_BIGGAMEHUNTER = 3
RANK_TROPHYHUNTER = 4
RANK_ELITEHUNTER = 5
REWARD_MONEY = 1
REWARD_EXP = 2
REWARD_ACHIEVEMENT = 3
REWARD_STORAGE = 4
REWARD_POINT = 5
REWARD_ITEM = 6
QUESTSTORAGE_BASE = 1500
KILLSSTORAGE_BASE = 65000
REPEATSTORAGE_BASE = 48950
POINTSSTORAGE = 2500
tasks =
{
--Tasks for level 6 to 49.
[1] = {killsRequired = 100, raceName = "Trolls", level = {6, 19}, premium = true, creatures = {"troll", "troll champion", "island troll", "swamp troll"}, rewards = {
{type = "exp", value = {200}},
{type = "money", value = {200}}
}},
[2] = {killsRequired = 150, raceName = "Goblins", level = {6, 19}, premium = true, creatures = {"goblin", "goblin assassin", "goblin leader"}, rewards = {
{type = "exp", value = {300}},
{type = "money", value = {250}}
}},
[3] = {killsRequired = 300, raceName = "Crocodiles", level = {6, 49}, premium = true, creatures = {"crocodile"}, rewards = {
{type = "exp", value = {800}},
{type = "achievement", value = {"Blood-Red Snapper"}},
{type = "storage", value = {35000, 1}},
{type = "points", value = {1}}
}},
[4] = {killsRequired = 300, raceName = "Badgers", level = {6, 49}, premium = true, creatures = {"badger"}, rewards = {
{type = "exp", value = {500}},
{type = "points", value = {1}}
}},
[5] = {killsRequired = 300, raceName = "Tarantulas", level = {6, 49}, premium = true, creatures = {"tarantula"}, rewards = {
{type = "exp", value = {1500}},
{type = "achievement", value = {"No More Hiding"}},
{type = "storage", value = {35001, 1}},
{type = "points", value = {2}}
}},
[6] = {killsRequired = 150, raceName = "Carniphilas", level = {6, 49}, premium = true, creatures = {"carniphila"}, rewards = {
{type = "exp", value = {2500}},
{type = "achievement", value = {"Rootless Behaviour"}},
{type = "storage", value = {35002, 1}},
{type = "points", value = {3}}
}},
[7] = {killsRequired = 200, raceName = "Stone Golems", level = {6, 49}, premium = true, creatures = {"stone golem"}, rewards = {
{type = "exp", value = {2000}},
{type = "points", value = {3}}
}},
[8] = {killsRequired = 300, raceName = "Mammoths", level = {6, 49}, premium = true, creatures = {"mammoth"}, rewards = {
{type = "exp", value = {4000}},
{type = "achievement", value = {"Meat Skewer"}},
{type = "storage", value = {35003, 1}},
{type = "points", value = {3}}
}},
[9] = {killsRequired = 300, raceName = "Gnarlhounds", level = {6, 49}, premium = true, creatures = {"gnarlhound"}, rewards = {
{type = "exp", value = {1000}},
{type = "points", value = {2}}
}},
[10] = {killsRequired = 300, raceName = "Terramites", level = {6, 49}, premium = true, creatures = {"terramite"}, rewards = {
{type = "exp", value = {1000}},
{type = "points", value = {2}}
}},
[11] = {killsRequired = 300, raceName = "Apes", level = {6, 49}, premium = true, creatures = {"kongra", "sibang", "merklin"}, rewards = {
{type = "exp", value = {1000}},
{type = "points", value = {2}}
}},
[12] = {killsRequired = 300, raceName = "Thornback Tortoises", level = {6, 49}, premium = true, creatures = {"thornback tortoise"}, rewards = {
{type = "exp", value = {1500}},
{type = "points", value = {2}}
}},
[13] = {killsRequired = 300, raceName = "Gargoyles", level = {6, 49}, premium = true, creatures = {"gargoyle"}, rewards = {
{type = "exp", value = {1500}}
}},
--Tasks for level 50 to 79.
[14] = {killsRequired = 300, raceName = "Ice Golems", level = {50, 79}, premium = true, creatures = {"ice golem"}, rewards = {
{type = "exp", value = {12000}},
{type = "achievement", value = {"Breaking The Ice"}},
{type = "storage", value = {35004, 1}},
{type = "points", value = {2}}
}},
[15] = {killsRequired = 400, raceName = "Quara Scouts", level = {50, 79}, premium = true, creatures = {"quara pincher scout", "quara predator scout", "quara hydromancer scout", "quara constrictor scout", "quara mantassin scout"}, rewards = {
{type = "exp", value = {10000}},
{type = "points", value = {2}}
}},
[16] = {killsRequired = 400, raceName = "Mutated Rats", level = {50, 79}, premium = true, creatures = {"mutated rat"}, rewards = {
{type = "exp", value = {10000}},
{type = "achievement", value = {"Twisted Mutation"}},
{type = "storage", value = {35005, 1}},
{type = "points", value = {2}}
}},
[17] = {killsRequired = 250, raceName = "Ancient Scarabs", level = {50, 79}, premium = true, creatures = {"ancient scarab"}, rewards = {
{type = "exp", value = {15000}},
{type = "achievement", value = {"Crawling Death"}},
{type = "storage", value = {35006, 1}},
{type = "points", value = {2}}
}},
[18] = {killsRequired = 300, raceName = "Wyverns", level = {50, 79}, premium = true, creatures = {"wyvern"}, rewards = {
{type = "exp", value = {12000}},
{type = "points", value = {2}}
}},
[19] = {killsRequired = 300, raceName = "Lancer Beetles", level = {50, 79}, premium = true, creatures = {"lancer beetle"}, rewards = {
{type = "exp", value = {8000}},
{type = "points", value = {2}}
}},
[20] = {killsRequired = 400, raceName = "Wailing Widows", level = {50, 79}, premium = true, creatures = {"wailing widow"}, rewards = {
{type = "exp", value = {12000}},
{type = "points", value = {3}}
}},
[21] = {killsRequired = 250, raceName = "Killer Caimans", level = {50, 79}, premium = true, creatures = {"killer caiman"}, rewards = {
{type = "exp", value = {10000}},
{type = "points", value = {2}}
}},
[22] = {killsRequired = 300, raceName = "Bonebeasts", level = {50, 79}, premium = true, creatures = {"bonebeast"}, rewards = {
{type = "exp", value = {12000}},
{type = "achievement", value = {"Spareribs for Dinner"}},
{type = "storage", value = {35007, 1}},
{type = "points", value = {2}}
}},
[23] = {killsRequired = 300, raceName = "Crystal Spiders", level = {50, 79}, creatures = {"crystal spider"}, premium = true, rewards = {
{type = "exp", value = {15000}},
{type = "achievement", value = {"Arachnoise"}},
{type = "storage", value = {35008, 1}},
{type = "points", value = {3}}
}},
[24] = {killsRequired = 300, raceName = "Mutated Tigers", level = {50, 79}, premium = true, creatures = {"mutated tiger"}, rewards = {
{type = "exp", value = {12000}},
{type = "points", value = {2}}
}},
--Taks for level 80 to 129.
[25] = {killsRequired = 600, raceName = "Underwater Quara", level = {80, 129}, premium = true, creatures = {"quara hydromancer", "quara predator", "quara constrictor", "quara mantassin", "quara pincher"}, rewards = {
{type = "exp", value = {15000}},
{type = "achievement", value = {"Back into the Abyss"}},
{type = "storage", value = {35009, 1}},
{type = "points", value = {3}}
}},
[26] = {killsRequired = 500, raceName = "Giant Spiders", level = {80, 129}, premium = true, creatures = {"giant spider"}, rewards = {
{type = "exp", value = {20000}},
{type = "achievement", value = {"Choking on Her Venom"}},
{type = "storage", value = {35010, 1}},
{type = "points", value = {3}}
}},
[27] = {killsRequired = 300, raceName = "Werewolves", level = {80, 129}, premium = true, creatures = {"werewolf"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Howly Silence"}},
{type = "storage", value = {35011, 1}},
{type = "points", value = {4}}
}},
[28] = {killsRequired = 400, raceName = "Nightmares", level = {80, 129}, premium = true, creatures = {"nightmare", "nightmare scion"}, rewards = {
{type = "exp", value = {25000}},
{type = "achievement", value = {"Dream is Over"}},
{type = "storage", value = {35012, 1}},
{type = "points", value = {3}}
}},
[29] = {killsRequired = 600, raceName = "Hellspawns", level = {80, 129}, premium = true, creatures = {"hellspawn"}, rewards = {
{type = "exp", value = {25000}},
{type = "achievement", value = {"Scorched Flames"}},
{type = "storage", value = {35013, 1}}
}},
[30] = {killsRequired = 800, raceName = "High Class Lizards", level = {80, 129}, premium = true, creatures = {"lizard chosen", "lizard dragon priest", "lizard high guard", "lizard legionnaire"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Zzztill Zzztanding!"}},
{type = "storage", value = {35014, 1}},
{type = "points", value = {3}}
}},
[31] = {killsRequired = 600, raceName = "Stampors", level = {80, 129}, premium = true, creatures = {"stampor"}, rewards = {
{type = "exp", value = {20000}},
{type = "achievement", value = {"Stepped on a Big Toe"}},
{type = "storage", value = {35015, 1}},
{type = "points", value = {3}}
}},
[32] = {killsRequired = 500, raceName = "Brimstone Bugs", level = {80, 129}, premium = true, creatures = {"brimstone bug"}, rewards = {
{type = "exp", value = {15000}},
{type = "achievement", value = {"Something Smells"}},
{type = "storage", value = {35016, 1}},
{type = "points", value = {3}}
}},
[33] = {killsRequired = 400, raceName = "Mutated Bats", level = {80, 129}, premium = true, creatures = {"mutated bat"}, rewards = {
{type = "exp", value = {20000}},
{type = "achievement", value = {"Kapow!"}},
{type = "storage", value = {35017, 1}},
{type = "points", value = {2}}
}},
--Tasks for level 130+
[34] = {killsRequired = 650, raceName = "Hydras", level = {130, 9999}, premium = true, creatures = {"hydra"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"One Less"}},
{type = "storage", value = {35018, 1}},
{type = "points", value = {3}}
}},
[35] = {killsRequired = 800, raceName = "Serpent Spawns", level = {130, 9999}, premium = true, creatures = {"serpent spawn"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Hissing Downfall"}},
{type = "storage", value = {35019, 1}},
{type = "points", value = {4}}
}},
[36] = {killsRequired = 500, raceName = "Medusae", level = {130, 9999}, premium = true, creatures = {"medusa"}, rewards = {
{type = "exp", value = {40000}},
{type = "achievement", value = {"The Serpent's Bride"}},
{type = "storage", value = {35020, 1}},
{type = "points", value = {5}}
}},
[37] = {killsRequired = 700, raceName = "Behemoths", level = {130, 9999}, premium = true, creatures = {"behemoth"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Just Cracked Me Up!"}},
{type = "storage", value = {35021, 1}},
{type = "points", value = {4}}
}},
[38] = {killsRequired = 900, raceName = "Sea Serpents and Young Sea Serpents", level = {130, 9999}, premium = true, creatures = {"sea serpent", "young sea serpent"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"The Drowned Sea God"}},
{type = "storage", value = {35022, 1}},
{type = "points", value = {4}}
}},
[39] = {killsRequired = 250, raceName = "Hellhounds", level = {130, 9999}, premium = true, creatures = {"hellhound"}, rewards = {
{type = "exp", value = {40000}},
{type = "achievement", value = {"The Gates of Hell"}},
{type = "storage", value = {35023, 1}},
{type = "points", value = {5}}
}},
[40] = {killsRequired = 500, raceName = "Ghastly Dragons", level = {130, 9999}, premium = true, creatures = {"ghastly dragon"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Beautiful Agony"}},
{type = "storage", value = {35024, 1}},
{type = "points", value = {5}}
}},
[41] = {killsRequired = 900, raceName = "Drakens", level = {130, 9999}, premium = true, creatures = {"draken spellweaver", "draken warmaster", "draken abomination", "draken elite"} , rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Enter zze Draken!"}},
{type = "storage", value = {35025, 1}},
{type = "points", value = {3}}
}},
[42] = {killsRequired = 650, raceName = "Destroyers", level = {130, 9999}, premium = true, creatures = {"destroyer"}, rewards = {
{type = "exp", value = {30000}},
{type = "achievement", value = {"Best there was!"}},
{type = "storage", value = {35026, 1}},
{type = "points", value = {4}}
}},
[43] = {killsRequired = 400, raceName = "Undead Dragons", level = {130, 9999}, premium = true, creatures = {"undead dragon"}, rewards = {
{type = "exp", value = {50000}},
{type = "achievement", value = {"Back from the Dead"}},
{type = "storage", value = {35027, 1}},
{type = "points", value = {6}}
}},
--Special tasks.
[44] = {killsRequired = 6666, raceName = "Demons", level = {130, 9999}, rank = RANK_ELITEHUNTER, premium = true, creatures = {"demon"}, rewards = {
{type = "storage", value = {41300, 1}} --Storage that let's you to start Demon Oak
}},
[45] = {killsRequired = 500, raceName = "Green Djinns or Efreets", level = {1, 9999}, storage = {12500, 1}, premium = true, creatures = {"green djinn", "efreet"}, rewards = { --Requires an storage (Gained on The Djinn War - Marid Faction)
{type = "exp", value = {10000}},
{type = "money", value = {5000}},
{type = "storage", value = {35028, 1}}
}},
[46] = {killsRequired = 500, raceName = "Blue Djinns or Marids", level = {1, 9999}, storage = {12501, 1}, premium = true, creatures = {"blue djinn", "marid"}, rewards = { --Requires an storage (Gained on The Djinn War - Efreet Faction)
{type = "exp", value = {10000}},
{type = "money", value = {5000}},
{type = "storage", value = {35029, 1}}
}},
[47] = {killsRequired = 3000, raceName = "Pirates", level = {1, 9999}, storage = {12600, 1}, premium = true, creatures = {"pirate ghost", "pirate marauder", "pirate cutthroad", "pirate buccaneer", "pirate corsair", "pirate skeleton"}, rewards = { --Requires an storage (Gained on The Shattered Isles Quest)
{type = "exp", value = {10000}},
{type = "money", value = {5000}},
{type = "storage", value = {35030, 1}}
}},
[48] = {killsRequired = 3000, raceName = "Pirates second task", level = {1, 9999}, storage = {REPEATSTORAGE_BASE + 47, 3}, norepeatable = true, premium = true, creatures = {"pirate ghost", "pirate marauder", "pirate cutthroad", "pirate buccaneer", "pirate corsair", "pirate skeleton"}, rewards = { --Requires an storage (Gained completing Raymond Striker's first task three times.) NOTE: The required storage to start this task is: base + first pirate task id (47)
{type = "exp", value = {10000}},
{type = "money", value = {5000}},
{type = "storage", value = {35031, 1}}
}},
[49] = {killsRequired = 5000, raceName = "Minotaurs", level = {1, 40}, storage = {12700, 1}, norepeatable = true, premium = false, creatures = {"minotaur", "minotaur mage", "minotaur archer"}, rewards = { --Requires an storage (Gained on To Outfox a Fox Quest)
{type = "storage", value = {35032, 1}}
}},
[50] = {killsRequired = 4000, raceName = "Necromancers and Priestess", level = {60, 9999}, norepeatable = true, premium = true, creatures = {"necromancer", "priestess"}, rewards = { --Requires an storage (Gained on To Outfox a Fox Quest)
{type = "storage", value = {35033, 1}},
{type = "storage", value = {12800, 1}} --storage to stark the second Necromancers and Priestess task.
}},
[49] = {killsRequired = 1000, name = "Necromancers and Priestess second task", raceName = "Necromancers and Priestess", level = {60, 9999}, storage = {12800, 1}, norepeatable = true, premium = true, creatures = {"necromancer", "priestess"}, rewards = { --Requires an storage (Gained on To Outfox a Fox Quest)
{type = "exp", value = {40000}},
{type = "storage", value = {35033, 1}}
}},
}
tasksByPlayer = 3
repeatTimes = 3
function getPlayerRank(cid)
return (getPlayerStorageValue(cid, POINTSSTORAGE) >= 100 and RANK_ELITEHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 70 and RANK_TROPHYHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 40 and RANK_BIGGAMEHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 20 and RANK_RANGER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 10 and RANK_HUNTSMAN or RANK_NONE)
end
function getTaskByName(name, table)
local t = (table and table or tasks)
for k, v in pairs(t) do
if v.name then
if v.name:lower() == name:lower() then
return k
end
else
if v.raceName:lower() == name:lower() then
return k
end
end
end
return false
end
function getTasksByPlayer(cid)
local canmake = {}
local able = {}
for k, v in pairs(tasks) do
if getCreatureStorage(cid, QUESTSTORAGE_BASE + k) < 1 and getCreatureStorage(cid, REPEATSTORAGE_BASE + k) < repeatTimes then
able[k] = true
if getPlayerLevel(cid) < v.level[1] or getPlayerLevel(cid) > v.level[2] then
able[k] = false
end
if v.storage and getCreatureStorage(cid, v.storage[1]) < v.storage[2] then
able[k] = false
end
if v.rank then
if getPlayerRank(cid) < v.rank then
able[k] = false
end
end
if v.premium then
if not isPremium(cid) then
able[k] = false
end
end
if able[k] then
table.insert(canmake, k)
end
end
end
return canmake
end
function canStartTask(cid, name, table)
local v = ""
local id = 0
local t = (table and table or tasks)
for k, i in pairs(t) do
if i.name then
if i.name:lower() == name:lower() then
v = i
id = k
break
end
else
if i.raceName:lower() == name:lower() then
v = i
id = k
break
end
end
end
if v == "" then
return false
end
if getCreatureStorage(cid, QUESTSTORAGE_BASE + id) > 0 then
return false
end
if (getCreatureStorage(cid, REPEATSTORAGE_BASE + id) >= repeatTimes) or (v.norepeatable and getCreatureStorage(cid, REPEATSTORAGE_BASE + id) > 0) then
return false
end
if getPlayerLevel(cid) >= v.level[1] and getPlayerLevel(cid) <= v.level[2] then
if v.premium then
if isPremium(cid) then
if v.rank then
if getPlayerRank(cid) >= v.rank then
if v.storage then
if getCreatureStorage(cid, v.storage[1]) >= v.storage[2] then
return true
end
else
return true
end
end
else
return true
end
end
else
return true
end
end
return false
end
function getPlayerStartedTasks(cid)
local tmp = {}
for k, v in pairs(tasks) do
if getCreatureStorage(cid, QUESTSTORAGE_BASE + k) > 0 and getCreatureStorage(cid, QUESTSTORAGE_BASE + k) < 2 then
table.insert(tmp, k)
end
end
return tmp
end
function isSummon(cid)
return getCreatureMaster(cid) ~= cid or false
end
NOTE: If you use TFS 0.4Dev you must do this or script won't work: http://otland.net/f83/grizzly-adams...ore-real-tibia-159150/index4.html#post1552537
Grizzly Adams.xml
XML:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Grizzly Adams" script="data/npc/scripts/KillingInTheNameOf.lua" access="3" walkinterval="2000" lookdir="2">
<mana now="800" max="800"/>
<health now="200" max="200"/>
<look type="144" head="97" body="97" legs="94" feet="97" addons="3"/>
</npc>
data/npc/scripts/KillingInTheNameOf.lua:
LUA:
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
local choose = {}
local cancel = {}
local available = {}
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid
if isInArray({"tasks", "task", "mission"}, msg:lower()) then
local can = getTasksByPlayer(cid)
if #can > 0 then
local text = ""
local sep = ", "
table.sort(can, (function(a, b) return (a < b) end))
local t = 0
for _, id in ipairs(can) do
t = t + 1
if t == #can - 1 then
sep = " and "
elseif t == #can then
sep = "."
end
text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
end
selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text, cid)
talkState[talkUser] = 0
else
selfSay("I don't have any task for you right now.", cid)
end
elseif msg ~= "" and canStartTask(cid, msg) then
if #getPlayerStartedTasks(cid) >= tasksByPlayer then
selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks.", cid)
return true
end
local task = getTaskByName(msg)
if task and getCreatureStorage(cid, QUESTSTORAGE_BASE + task) > 0 then
return false
end
selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?", cid)
choose[cid] = task
talkState[talkUser] = 1
elseif msg:lower() == "yes" and talkState[talkUser] == 1 then
doCreatureSetStorage(cid, QUESTSTORAGE_BASE + choose[cid], 1)
selfSay("Excellent! You can check the status of your task saying report to me.", cid)
choose[cid] = nil
talkState[talkUser] = 0
elseif msg:lower() == "report" then
local started = getPlayerStartedTasks(cid)
local finishedAtLeastOne = false
local finished = 0
if started and #started > 0 then
for _, id in ipairs(started) do
if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
for _, reward in ipairs(tasks[id].rewards) do
print("Rewards loaded")
local deny = false
if reward.storage then
if getCreatureStorage(cid, reward.storage[1]) >= reward.storage[2] then
deny = true
end
end
if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
doPlayerAddMoney(cid, reward.value[1])
elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
doPlayerAddExperience(cid, reward.value[1])
doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
if doPlayerAddAchievement then
doPlayerAddAchievement(cid, reward.value[1], true)
end
elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
doCreatureSetStorage(cid, reward.value[1], reward.value[2])
elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
doCreatureSetStorage(cid, POINTSSTORAGE, getCreatureStorage(cid, POINTSSTORAGE) + reward.value[1])
elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
doPlayerAddItem(cid, reward.value[1], reward.value[2])
end
if reward.storage then
doCreatureSetStorage(cid, reward.storage[1], reward.storage[2])
end
end
if tasks[id].norepeatable then
doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 2)
else
doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 0)
end
doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0)
if getCreatureStorage(cid, REPEATSTORAGE_BASE + id) < 1 then
doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, 0)
end
doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, getCreatureStorage(cid, REPEATSTORAGE_BASE + id) + 1)
finishedAtLeastOne = true
finished = finished + 1
end
end
if not finishedAtLeastOne then
selfSay("You haven't finished any task yet.", cid)
else
selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a task.", cid)
end
else
selfSay("You haven't started any task yet.", cid)
end
elseif msg:lower() == "started" then
local started = getPlayerStartedTasks(cid)
if started and #started > 0 then
local text = ""
local sep = ", "
table.sort(started, (function(a, b) return (a < b) end))
local t = 0
for _, id in ipairs(started) do
t = t + 1
if t == #started - 1 then
sep = " and "
elseif t == #started then
sep = "."
end
text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
end
selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid)
else
selfSay("You haven't started any task yet.", cid)
end
elseif msg:lower() == "cancel" then
local started = getPlayerStartedTasks(cid)
if started and #started > 0 then
selfSay("Cancelling a task will make the count restart. Wich task you want to cancel?", cid)
talkState[talkUser] = 2
else
selfSay("You haven't started any task yet.", cid)
end
elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
local task = getTaskByName(msg)
if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then
selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?", cid)
else
selfSay("Are you sure you want to cancel this task?", cid)
end
talkState[talkUser] = 3
cancel[cid] = task
elseif msg:lower() == "yes" and talkState[talkUser] == 3 then
doCreatureSetStorage(cid, QUESTSTORAGE_BASE + cancel[cid], -1)
doCreatureSetStorage(cid, KILLSSTORAGE_BASE + cancel[cid], -1)
selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".", cid)
talkState[talkUser] = 0
elseif isInArray({"points", "rank"}, msg:lower()) then
selfSay("At this time, you have " .. getCreatureStorage(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 5 and "are an Elite Hunter" or getPlayerRank(cid) == 4 and "are a Trophy Hunter" or getPlayerRank(cid) == 3 and "are a Big Game Hunter" or getPlayerRank(cid) == 2 and "are a Ranger" or getPlayerRank(cid) == 1 and "are a Huntsman" or "haven't been ranked yet") .. ".", cid)
talkState[talkUser] = 0
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Add this line to creaturescripts.xml
XML:
<event type="kill" name="KillingInTheNameOf" event="script" value="killinginthenameof.lua"/>
data/creaturescripts/scripts/killinginthenameof.lua
LUA:
function onKill(cid, target, lastHit)
local started = getPlayerStartedTasks(cid)
if isPlayer(target) or isSummon(target) then return true end
if started and #started > 0 then
for _, id in ipairs(started) do
if isInArray(tasks[id].creatures, getCreatureName(target):lower()) then
if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) < 0 then
doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0)
end
if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) < tasks[id].killsRequired then
doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, getCreatureStorage(cid, KILLSSTORAGE_BASE + id) + 1)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getCreatureStorage(cid, KILLSSTORAGE_BASE + id) .. "/" .. tasks[id].killsRequired .. " " .. tasks[id].raceName .. " already killed.")
end
end
end
end
return true
end
And this line to login.lua
LUA:
registerCreatureEvent(cid, "KillingInTheNameOf")
And now, i think you are ready to start a task
Last edited: