-
-
Notifications
You must be signed in to change notification settings - Fork 647
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
12d7f2a
commit 82a7086
Showing
1 changed file
with
174 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
local internalNpcName = "King Canary" | ||
local npcType = Game.createNpcType(internalNpcName) | ||
local npcConfig = {} | ||
|
||
npcConfig.name = internalNpcName | ||
npcConfig.description = internalNpcName | ||
|
||
npcConfig.health = 100 | ||
npcConfig.maxHealth = npcConfig.health | ||
npcConfig.walkInterval = 2000 | ||
npcConfig.walkRadius = 2 | ||
|
||
npcConfig.outfit = { | ||
lookType = 332, | ||
} | ||
|
||
npcConfig.flags = { | ||
floorchange = false, | ||
} | ||
|
||
local keywordHandler = KeywordHandler:new() | ||
local npcHandler = NpcHandler:new(keywordHandler) | ||
|
||
npcType.onThink = function(npc, interval) | ||
npcHandler:onThink(npc, interval) | ||
end | ||
|
||
npcType.onAppear = function(npc, creature) | ||
npcHandler:onAppear(npc, creature) | ||
end | ||
|
||
npcType.onDisappear = function(npc, creature) | ||
npcHandler:onDisappear(npc, creature) | ||
end | ||
|
||
npcType.onMove = function(npc, creature, fromPosition, toPosition) | ||
npcHandler:onMove(npc, creature, fromPosition, toPosition) | ||
end | ||
|
||
npcType.onSay = function(npc, creature, type, message) | ||
npcHandler:onSay(npc, creature, type, message) | ||
end | ||
|
||
npcType.onCloseChannel = function(npc, creature) | ||
npcHandler:onCloseChannel(npc, creature) | ||
end | ||
|
||
local function creatureSayCallback(npc, creature, type, message) | ||
local player = Player(creature) | ||
local playerId = player:getId() | ||
|
||
if not npcHandler:checkInteraction(npc, creature) then | ||
return false | ||
end | ||
|
||
if (MsgContains(message, "outfit")) or (MsgContains(message, "addon")) then | ||
npcHandler:say("In exchange for a truly generous donation, I will offer a special outfit. Do you want to make a donation?", npc, creature) | ||
npcHandler:setTopic(playerId, 1) | ||
elseif MsgContains(message, "yes") then | ||
if npcHandler:getTopic(playerId) == 1 then | ||
npcHandler:say({ | ||
"Excellent! Now, let me explain. If you donate 1.000.000.000 gold pieces, you will be entitled to wear a unique outfit. ...", | ||
"You will be entitled to wear the {armor} for 500.000.000 gold pieces, {helmet} for an additional 250.000.000 and the {boots} for another 250.000.000 gold pieces. ...", | ||
"What will it be?", | ||
}, npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
elseif npcHandler:getTopic(playerId) == 2 then | ||
npcHandler:say("In that case, return to me once you made up your mind.", npc, creature) | ||
npcHandler:setTopic(playerId, 0) | ||
elseif npcHandler:getTopic(playerId) == 3 then | ||
if player:kv():get("golden-outfit-quest") < 1 then | ||
if player:getMoney() + player:getBankBalance() >= 500000000 then | ||
local inbox = player:getStoreInbox() | ||
local inboxItems = inbox:getItems() | ||
if inbox and #inboxItems <= inbox:getMaxCapacity() then | ||
local decoKit = inbox:addItem(ITEM_DECORATION_KIT, 1) | ||
local decoItemName = ItemType(31510):getName() | ||
decoKit:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, "You bought this item in the Store.\nUnwrap it in your own house to create a " .. decoItemName .. ".") | ||
decoKit:setCustomAttribute("unWrapId", 31510) | ||
npcHandler:say("Take this armor as a token of great gratitude. Let us forever remember this day, my friend!", npc, creature) | ||
player:removeMoneyBank(500000000) | ||
player:addOutfit(1211) | ||
player:addOutfit(1210) | ||
player:getPosition():sendMagicEffect(CONST_ME_EARLY_THUNDERs) | ||
player:kv():set("golden-outfit-quest", 1) | ||
else | ||
npcHandler:say("Please make sure you have free slots in your store inbox.", npc, creature) | ||
end | ||
else | ||
npcHandler:say("You do not have enough money to donate that amount.", npc, creature) | ||
end | ||
else | ||
npcHandler:say("You alread have that addon.", npc, creature) | ||
end | ||
npcHandler:setTopic(playerId, 2) | ||
elseif npcHandler:getTopic(playerId) == 4 then | ||
if player:kv():get("golden-outfit-quest") == 1 then | ||
if player:kv():get("golden-outfit-quest") < 2 then | ||
if player:getMoney() + player:getBankBalance() >= 250000000 then | ||
npcHandler:say("Take this helmet as a token of great gratitude. Let us forever remember this day, my friend. ", npc, creature) | ||
player:removeMoneyBank(250000000) | ||
player:addOutfitAddon(1210, 1) | ||
player:addOutfitAddon(1211, 1) | ||
player:getPosition():sendMagicEffect(CONST_ME_EARLY_THUNDER) | ||
player:kv():set("golden-outfit-quest", 2) | ||
npcHandler:setTopic(playerId, 2) | ||
else | ||
npcHandler:say("You do not have enough money to donate that amount.", npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
else | ||
npcHandler:say("You alread have that outfit.", npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
else | ||
npcHandler:say("You need to donate {armor} outfit first.", npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
npcHandler:setTopic(playerId, 2) | ||
elseif npcHandler:getTopic(playerId) == 5 then | ||
if player:kv():get("golden-outfit-quest") == 2 then | ||
if player:kv():get("golden-outfit-quest") < 3 then | ||
if player:getMoney() + player:getBankBalance() >= 250000000 then | ||
npcHandler:say("Take this boots as a token of great gratitude. Let us forever remember this day, my friend. ", npc, creature) | ||
player:removeMoneyBank(250000000) | ||
player:addOutfitAddon(1210, 2) | ||
player:addOutfitAddon(1211, 2) | ||
player:getPosition():sendMagicEffect(CONST_ME_EARLY_THUNDER) | ||
player:kv():set("golden-outfit-quest", 3) | ||
npcHandler:setTopic(playerId, 2) | ||
else | ||
npcHandler:say("You do not have enough money to donate that amount.", npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
else | ||
npcHandler:say("You alread have that outfit.", npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
else | ||
npcHandler:say("You need to donate {helmet} addon first.", npc, creature) | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
npcHandler:setTopic(playerId, 2) | ||
end | ||
elseif (MsgContains(message, "armor")) and npcHandler:getTopic(playerId) == 2 then | ||
npcHandler:say("So you would like to donate 500.000.000 gold pieces which in return will entitle you to wear a unique armor?", npc, creature) | ||
npcHandler:setTopic(playerId, 3) | ||
elseif (MsgContains(message, "helmet")) and npcHandler:getTopic(playerId) == 2 then | ||
npcHandler:say("So you would like to donate 250.000.000 gold pieces which in return will entitle you to wear unique helmet?", npc, creature) | ||
npcHandler:setTopic(playerId, 4) | ||
elseif (MsgContains(message, "boots")) and npcHandler:getTopic(playerId) == 2 then | ||
npcHandler:say("So you would like to donate 250.000.000 gold pieces which in return will entitle you to wear a unique boots?", npc, creature) | ||
npcHandler:setTopic(playerId, 5) | ||
end | ||
end | ||
|
||
-- Promotion | ||
local node1 = keywordHandler:addKeyword({ "promot" }, StdModule.say, { npcHandler = npcHandler, onlyFocus = true, text = "I can promote you for 20000 gold coins. Do you want me to promote you?" }) | ||
node1:addChildKeyword({ "yes" }, StdModule.promotePlayer, { npcHandler = npcHandler, cost = 20000, level = 20, text = "Congratulations! You are now promoted." }) | ||
node1:addChildKeyword({ "no" }, StdModule.say, { npcHandler = npcHandler, onlyFocus = true, text = "Alright then, come back when you are ready.", reset = true }) | ||
|
||
-- Greeting message | ||
keywordHandler:addGreetKeyword({ "hail king" }, { npcHandler = npcHandler, text = "Hiho, may fire and earth bless you, my child. Are you looking for a promotion?" }) | ||
keywordHandler:addGreetKeyword({ "salutations king" }, { npcHandler = npcHandler, text = "Hiho, may fire and earth bless you, my child. Are you looking for a promotion?" }) | ||
|
||
npcHandler:setMessage(MESSAGE_WALKAWAY, "Farewell, |PLAYERNAME|, my child!") | ||
|
||
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) | ||
npcHandler:setCallback(CALLBACK_GREET, greetCallback) | ||
|
||
npcHandler:addModule(FocusModule:new(), npcConfig.name, true, true, true) | ||
|
||
-- npcType registering the npcConfig table | ||
npcType:register(npcConfig) |