• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

NPC Grizzly Adams (Killing in the name of... Quest) All tasks, more real-tibia

Joined
Apr 17, 2008
Messages
1,922
Solutions
1
Reaction score
188
Location
Venezuela
This is the new script for Killing in the name of... Quest that i made. It includes mort features to real-tibia.

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.
  • 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 :D
 
Last edited:
Added data/lib/103-killinginthenameof.lua

but seems doens't work

Code:
17:40 Grizzly Adams: Welcome, GOD! I have been expecting you.
17:40 GOD: tasks
17:40 Grizzly Adams: I don't have any task for you right now.
 
Last edited:
Added data/lib/103-killinginthenameof.lua

but seems doens't work

Code:
17:40 Grizzly Adams: Welcome, Paralyzer! I have been expecting you.
17:40 GOD: tasks
17:40 Grizzly Adams: I don't have any task for you right now.

And what happens if you try it on a player instead of God?
 
The GOD was level 502302 and that's why it doesn't work, now it's working.

Another problem, it doesn't count monsters...

That's because the tasks that requires lvl 130 are configurated to work on players of level between 130 and 9999. You can edit that, changing 9999 for 999999999
 
Check wich tasks you started. Say 'started' to npc, check if you have trolls' task started and check if there is not any error on console
 
Check wich tasks you started. Say 'started' to npc, check if you have trolls' task started and check if there is not any error on console

Code:
09:29 GOD [8]: hi
09:29 Grizzly Adams: Welcome, GOD! I have been expecting you.
09:29 GOD [8]: task
09:29 Grizzly Adams: The current tasks that you can choose are Trolls, Goblins, Crocodiles, Badgers, Tarantulas, Carniphilas, Stone Golems, Mammoths, Gnarlhounds, Terramites, Apes, Thornback Tortoises and Gargoyles.
09:29 GOD [8]: trolls
09:29 Grizzly Adams: In this task you must defeat 100 Trolls. Are you sure that you want to start this task?
09:29 GOD [8]: yes
09:29 Grizzly Adams: Excellent! You can check the status of your task saying report to me.
09:29 GOD [8]: started
09:29 Grizzly Adams: The current task that you started is Trolls.

Code:
09:30 /m troll

Code:
09:30 You deal 50 damage to a troll.

Code:
[25/5/2012 9:29:11] >> OTXSERVER Online!

[25/5/2012 9:29:40] GOD has logged in.


All works ok, just don't count monsters and don't show any error :/
 
Last edited:
Find "troll" in 103-killing in the name of.lua (lib)
and change to "Troll".

Code:
21:19 GOD [8]: hi
21:19 Grizzly Adams: Welcome, GOD! I have been expecting you.
21:19 GOD [8]: task
21:19 Grizzly Adams: The current tasks that you can choose are Trolls, Goblins, Crocodiles, Badgers, Tarantulas, Carniphilas, Stone Golems, Mammoths, Gnarlhounds, Terramites, Apes, Thornback Tortoises and Gargoyles.
21:19 GOD [8]: Trolls
21:19 Grizzly Adams: In this task you must defeat 100 Trolls. Are you sure that you want to start this task?
21:19 GOD [8]: yes
21:19 Grizzly Adams: Excellent! You can check the status of your task saying report to me.
21:19 GOD [8]: started
21:19 Grizzly Adams: The current task that you started is Trolls.

Code:
21:19 /m Troll
21:19 You deal 50 damage to a troll.

The same.
 
Back
Top