Created
May 11, 2015 07:05
-
-
Save Chewiie/8e83427b24388c5ef658 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local keywordHandler = KeywordHandler:new() | |
local npcHandler = NpcHandler:new(keywordHandler) | |
NpcSystem.parseParameters(npcHandler) | |
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 function creatureSayCallback(cid, type, msg) | |
if not npcHandler:isFocused(cid) then | |
return false | |
end | |
local player = Player(cid) | |
if msgcontains(msg, 'stampor') or msgcontains(msg, 'mount') then | |
if not player:hasMount(11) then | |
npcHandler:say('You did bring all the items I requqested, cuild. Good. Shall I travel to the spirit realm and try finding a stampor compasion for you?', cid) | |
npcHandler.topic[cid] = 1 | |
else | |
npcHandler:say('You already have stampor mount.', cid) | |
npcHandler.topic[cid] = 0 | |
end | |
elseif msgcontains(msg, 'yes') then | |
if npcHandler.topic[cid] == 1 then | |
if player:removeItem(13299, 50) and player:removeItem(13301, 30) and player:removeItem(13300, 100) then | |
npcHandler:say({ | |
'Ohhhhh Mmmmmmmmmmmm Ammmmmgggggggaaaaaaa ...', | |
'Aaaaaaaaaahhmmmm Mmmaaaaaaaaaa Kaaaaaamaaaa ...', | |
'Brrt! I think it worked! It\'s a male stampor. I linked this spirit to yours. You can probably already summon him to you ...', | |
'So, since me are done here... I need to prepare another ritual, so please let me work, cuild.' | |
}, cid) | |
player:addMount(11) | |
player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED) | |
else | |
npcHandler:say('Sorry you don\'t have the necessary items.', cid) | |
end | |
npcHandler.topic[cid] = 0 | |
end | |
elseif msgcontains(msg, 'no') and npcHandler.topic[cid] > 2 then | |
npcHandler:say('Maybe next time.', cid) | |
npcHandler.topic[cid] = 0 | |
end | |
return true | |
end | |
-- Shaman Addons | |
-- If the player can't wear shaman outfit | |
local function notReadyKeyword(keyword, text) | |
keywordHandler:addKeyword({keyword}, StdModule.say, {npcHandler = npcHandler, text = text}, function(player) return not player:hasOutfit(player:getSex() == PLAYERSEX_FEMALE and 158 or 154) end) | |
end | |
notReadyKeyword('outfit', {'Hum? Sorry, but I don\'t sense enough spiritual wisdom in you to even allow you to touch the mask and staff I\'m wearing... yet. ...', 'I know of a really wise ape healer, though, who might be able to bless you with shamanic energy. You should become his apprentice first if you desire to become mine.'}) | |
notReadyKeyword('addon', {'Hum? Sorry, but I don\'t sense enough spiritual wisdom in you to even allow you to touch the mask and staff I\'m wearing... yet. ...', 'I know of a really wise ape healer, though, who might be able to bless you with shamanic energy. You should become his apprentice first if you desire to become mine.'}) | |
notReadyKeyword('task', 'The time hasn\'t come yet, my child. Believe and learn.') | |
-- Start task | |
local function addTaskKeyword(text, value, missionStorage) | |
local taskKeyword = keywordHandler:addKeyword({'task'}, StdModule.say, {npcHandler = npcHandler, text = text[1]}, function(player) return player:getStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask) == value end) | |
local yesKeyword = taskKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = text[2]}) | |
yesKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = text[3], reset = true}, nil, | |
function(player) | |
player:setStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask, math.max(0, player:getStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask)) + 1) | |
player:setStorageValue(missionStorage, 1) | |
player:setStorageValue(Storage.OutfitQuest.Ref, math.max(0, player:getStorageValue(Storage.OutfitQuest.Ref)) + 1) end | |
) | |
yesKeyword:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, text = 'Would you like me to repeat the task requirements then?', moveup = 2}) | |
taskKeyword:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, text = 'Well, it seems you aren\'t ready yet.', reset = true}) | |
keywordHandler:addAliasKeyword({'addon'}) | |
keywordHandler:addAliasKeyword({'outfit'}) | |
end | |
-- Staff | |
addTaskKeyword({ | |
'If you fulfil a task for me, I\'ll grant you a staff like the one I\'m wearing. Do you want to hear the requirements?', | |
{ | |
'Deep in the Tiquandian jungle a monster lurks which is seldom seen. It is the revenge of the jungle against humankind. ...', | |
'This monster, if slain, carries a rare root called Mandrake. If you find it, bring it to me. Also, gather 5 of the voodoo dolls used by the mysterious dworc voodoomasters. ...', | |
'If you manage to fulfil this task, I will grant you your own staff. Have you understood everything and are ready for this test?' | |
}, | |
'Good! Come back once you\'ve found a mandrake and collected 5 dworcish voodoo dolls.' | |
}, -1, Storage.OutfitQuest.Shaman.MissionStaff | |
) | |
-- Mask | |
addTaskKeyword({ | |
'You have successfully passed the first task. If you can fulfil my second task, I\'ll grant you a mask like the one I\'m wearing. Do you want to hear the requirements?', | |
{ | |
'The dworcs of Tiquanda like to wear certain tribal masks which I\'d like to take a look at. Please bring me 5 of these masks. ...', | |
'Secondly, the high ape magicians of Banuta use banana staffs. I\'d love to learn more about theses staffs, so please bring me 5 of them, too. ...', | |
'If you manage to fulfil this task, I\'ll grant you your own mask. Have you understood everything and are you ready for this test?' | |
}, | |
'Good! Come back once you have collected 5 tribal masks and 5 banana staffs.' | |
}, 2, Storage.OutfitQuest.Shaman.MissionMask | |
) | |
-- Hand in task items | |
local function addItemKeyword(keyword, aliasKeyword, text, value, item, addonId, missionStorage, achievement) | |
local itemKeyword = keywordHandler:addKeyword({keyword}, StdModule.say, {npcHandler = npcHandler, text = 'Have you gathered the mandrake and the 5 voodoo dolls from the dworcs?'}, function(player) return player:getStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask) == value end) | |
itemKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = 'I\'m afraid you forgot something, my child.', reset = true}, function(player) return player:getItemCount(item[1].itemId) < item[1].count or player:getItemCount(item[2].itemId) < item[2].count end) | |
itemKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = 'I\'m proud of you my child, excellent work. This staff shall be yours from now on!', reset = true}, | |
function(player) return player:getItemCount(item[1].itemId) >= item[1].count and player:getItemCount(item[2].itemId) >= item[2].count end, | |
function(player) | |
player:removeItem(item[1].itemId, item[1].count) | |
player:removeItem(item[2].itemId, item[2].count) | |
player:addOutfitAddon(158, addonId) | |
player:addOutfitAddon(154, addonId) | |
player:setStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask, player:getStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask) + 1) | |
player:setStorageValue(Storage.OutfitQuest.Ref, math.min(0, player:getStorageValue(Storage.OutfitQuest.Ref) - 1)) | |
player:setStorageValue(missionStorage, 0) | |
if achievement then | |
player:addAchievement('Way of the Shaman') | |
end | |
player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN) | |
end | |
) | |
itemKeyword:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, text = 'Well, it seems you aren\'t ready yet.', reset = true}) | |
keywordHandler:addAliasKeyword({aliasKeyword}) | |
keywordHandler:addKeyword({keyword}, StdModule.say, {npcHandler = npcHandler, text = aliasKeyword and text[4] or text[3]}) | |
end | |
addItemKeyword('mandrake', 'voodoo doll', | |
{ | |
'Have you gathered the mandrake and the 5 voodoo dolls from the dworcs?', | |
'I\'m proud of you my child, excellent work. This staff shall be yours from now on!', | |
'A rare root with mysterious powers.', | |
{ | |
'Together with the spirits of the ancestors, I seek for wisdom. Together we can change the flow of magic to do things that are beyond the limits of ordinary magic. ...', | |
'In conversations with the spirits, I gain insight into secrets that would have been lost otherwise.' | |
} | |
}, 1, {{itemId = 5015, count = 1}, {itemId = 3955, count = 5}}, 2, Storage.OutfitQuest.Shaman.MissionStaff | |
) | |
addItemKeyword('tribal mask', 'banana staff', | |
{ | |
'Have you gathered the 5 tribal masks and the 5 banana staffs?', | |
'Well done, my child! I hereby grant you the right to wear a shamanic mask. Do it proudly.', | |
'Sometimes dworcs are seen with these masks.', | |
'A banana staff is the sign of a high ape magician.' | |
}, 3, {{itemId = 3966, count = 5}, {itemId = 3967, count = 5}}, 1, Storage.OutfitQuest.Shaman.MissionMask, true | |
) | |
-- Task status | |
local function addTaskStatusKeyword(keyword, text, value) | |
keywordHandler:addKeyword({keyword}, StdModule.say, {npcHandler = npcHandler, text = text}, function(player) return player:getStorageValue(Storage.OutfitQuest.Shaman.AddonStaffMask) == value end) | |
if keyword == 'addon' then | |
keywordHandler:addAliasKeyword({'outfit'}) | |
end | |
end | |
addTaskStatusKeyword('task', 'Your task is to retrieve a mandrake from the Tiquandan jungle and 5 dworcish voodoo dolls.', 1) | |
addTaskStatusKeyword('task', 'Your task is to retrieve 5 tribal masks from the dworcs and 5 banana staffs from the apes.', 3) | |
addTaskStatusKeyword('task', 'You have successfully passed all of my tasks. There are no further things I can teach you right now.', 4) | |
addTaskStatusKeyword('addon', 'The time has come, my child. I sense great spiritual wisdom in you and I shall grant you a sign of your progress if you can fulfil my task.', 1) | |
addTaskStatusKeyword('addon', 'I shall grant you a sign of your progress as a shaman if you can fulfil my task.', 3) | |
addTaskStatusKeyword('addon', 'You have successfully passed all of my tasks. There are no further things I can teach you right now.', 4) | |
-- End Shaman Addons | |
-- Wooden Stake | |
keywordHandler:addKeyword({'stake'}, StdModule.say, {npcHandler = npcHandler, text = 'Ten prayers for a blessed stake? Don\'t tell me they made you travel whole Tibia for it! Listen, child, if you bring me a wooden stake, I\'ll bless it for you. <chuckles>'}, | |
function(player) return player:getStorageValue(Storage.FriendsandTraders.TheBlessedStake) == 11 end, | |
function(player) player:setStorageValue(Storage.FriendsandTraders.TheBlessedStake, 12) player:addAchievement('Blessed!') player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) end | |
) | |
local stakeKeyword = keywordHandler:addKeyword({'stake'}, StdModule.say, {npcHandler = npcHandler, text = 'Would you like to receive a spiritual prayer to bless your stake?'}, | |
function(player) return player:getStorageValue(Storage.FriendsandTraders.TheBlessedStake) == 12 end | |
) | |
stakeKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = 'You don\'t have a wooden stake.', reset = true}, function(player) return player:getItemCount(5941) == 0 end) | |
stakeKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = 'Sorry, but I\'m still exhausted from the last ritual. Please come back later.', reset = true}, | |
function(player) return player:getStorageValue(Storage.FriendsandTraders.TheBlessedStakeWaitTime) >= os.time() end) | |
stakeKeyword:addChildKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, text = '<mumblemumble> Sha Kesh Mar!', reset = true}, | |
function(player) return player:getItemCount(5941) > 0 end, | |
function(player) player:setStorageValue(Storage.FriendsandTraders.TheBlessedStakeWaitTime, os.time() + 7 * 86400) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) player:removeItem(5941, 1) player:addItem(5942, 1) end | |
) | |
stakeKeyword:addChildKeyword({''}, StdModule.say, {npcHandler = npcHandler, text = 'Maybe another time.', reset = true}) | |
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) | |
npcHandler:addModule(FocusModule:new()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment