diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/001-7 | |
download | serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2 serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip |
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/001-7')
-rw-r--r-- | npc/001-7/_import.txt | 8 | ||||
-rw-r--r-- | npc/001-7/_mobs.txt | 37 | ||||
-rw-r--r-- | npc/001-7/_warps.txt | 20 | ||||
-rw-r--r-- | npc/001-7/barbarian.txt | 75 | ||||
-rw-r--r-- | npc/001-7/celestia_bossfight.txt | 247 | ||||
-rw-r--r-- | npc/001-7/homunculus.txt | 282 | ||||
-rw-r--r-- | npc/001-7/mapflags.txt | 1 |
7 files changed, 670 insertions, 0 deletions
diff --git a/npc/001-7/_import.txt b/npc/001-7/_import.txt new file mode 100644 index 0000000..733e726 --- /dev/null +++ b/npc/001-7/_import.txt @@ -0,0 +1,8 @@ +// Map 001-7: Frostia Cliffs +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/001-7/_mobs.txt", +"npc/001-7/_warps.txt", +"npc/001-7/barbarian.txt", +"npc/001-7/celestia_bossfight.txt", +"npc/001-7/homunculus.txt", +"npc/001-7/mapflags.txt", diff --git a/npc/001-7/_mobs.txt b/npc/001-7/_mobs.txt new file mode 100644 index 0000000..70fa829 --- /dev/null +++ b/npc/001-7/_mobs.txt @@ -0,0 +1,37 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 001-7: Frostia Cliffs mobs +001-7,48,95,24,11 monster Ice Fluffy 1041,8,30000,30000 +001-7,103,96,14,14 monster Wolvern 1037,8,30000,30000 +001-7,30,23,6,2 monster White Slime 1094,5,30000,30000 +001-7,49,46,8,2 monster White Slime 1094,2,30000,30000 +001-7,41,49,16,2 monster Wolvern 1037,2,30000,30000 +001-7,28,53,8,2 monster Wolvern 1037,1,30000,30000 +001-7,41,56,2,1 monster Wolvern 1037,1,30000,30000 +001-7,93,37,8,7 monster White Slime 1094,5,30000,30000 +001-7,109,53,8,8 monster Moggun 1070,6,30000,30000 +001-7,67,138,25,7 monster Ice Fluffy 1041,8,30000,30000 +001-7,70,119,1,0 monster Blue Slime 1087,2,30000,30000 +001-7,103,87,1,4 monster Blue Slime 1087,2,30000,30000 +001-7,100,108,1,4 monster Blue Slime 1087,2,30000,30000 +001-7,74,41,9,5 monster Moggun 1070,5,30000,30000 +001-7,38,78,1,1 monster Wolvern 1037,2,30000,30000 +001-7,64,70,1,1 monster Wolvern 1037,2,30000,30000 +001-7,53,73,1,1 monster Wolvern 1037,2,30000,30000 +001-7,25,76,1,1 monster Wolvern 1037,2,30000,30000 +001-7,81,72,1,1 monster Wolvern 1037,2,30000,30000 +001-7,92,69,1,1 monster Wolvern 1037,2,30000,30000 +001-7,78,78,1,1 monster Wolvern 1037,2,30000,30000 +001-7,33,137,10,7 monster Ice Fluffy 1041,3,30000,30000 +001-7,31,64,1,1 monster Wolvern 1037,2,30000,30000 +001-7,52,59,1,1 monster Wolvern 1037,2,30000,30000 +001-7,47,66,1,1 monster Wolvern 1037,2,30000,30000 +001-7,38,67,1,1 monster Wolvern 1037,2,30000,30000 +001-7,24,115,1,1 monster Wolvern 1037,1,30000,100000 +001-7,84,95,2,1 monster Ice Fluffy 1041,2,30000,30000 +001-7,89,90,2,1 monster Ice Fluffy 1041,2,30000,30000 +001-7,77,97,2,1 monster Ice Fluffy 1041,2,30000,30000 +001-7,77,140,10,3 monster Yeti 1064,4,30000,30000 +001-7,94,135,3,3 monster White Slime 1094,2,30000,30000 +001-7,35,25,5,2 monster Alpha Mouboo 1056,1,30000,30000 +001-7,106,56,1,1 monster Wolvern 1037,2,30000,30000 +001-7,90,37,1,1 monster Wolvern 1037,2,30000,30000 diff --git a/npc/001-7/_warps.txt b/npc/001-7/_warps.txt new file mode 100644 index 0000000..631b7b5 --- /dev/null +++ b/npc/001-7/_warps.txt @@ -0,0 +1,20 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 001-7: Frostia Cliffs warps +001-7,36,38,0 warp #001-7_36_38 0,0,001-7,26,23 +001-7,26,22,0 warp #001-7_26_22 0,0,001-7,36,39 +001-7,95,131,0 warp #001-7_95_131 0,0,001-7,77,113 +001-7,77,112,0 warp #001-7_77_112 0,0,001-7,95,132 +001-7,103,79,0 warp #001-7_103_79 0,0,001-7,36,23 +001-7,36,22,0 warp #001-7_36_22 0,0,001-7,103,80 +001-7,94,34,0 warp #001-7_94_34 0,0,001-7,114,84 +001-7,114,83,0 warp #001-7_114_83 0,0,001-7,94,35 +001-7,43,68,0 warp #001-7_43_68 0,0,001-7,67,45 +001-7,67,44,0 warp #001-7_67_44 0,0,001-7,43,69 +001-7,58,81,0 warp #001-7_58_81 0,0,001-7,31,52 +001-7,31,51,0 warp #001-7_31_51 0,0,001-7,58,82 +001-7,39,75,0 warp #001-7_39_75 0,0,001-7,61,123 +001-7,61,122,0 warp #001-7_61_122 0,0,001-7,39,76 +001-7,90,67,0 warp #001-7_90_67 0,0,001-7,104,51 +001-7,104,50,0 warp #001-7_104_50 0,0,001-7,90,68 +001-7,61,135,0 warp #001-7_61_135 0,0,001-7,98,65 +001-7,98,64,0 warp #001-7_98_64 0,0,001-7,61,136 diff --git a/npc/001-7/barbarian.txt b/npc/001-7/barbarian.txt new file mode 100644 index 0000000..128344c --- /dev/null +++ b/npc/001-7/barbarian.txt @@ -0,0 +1,75 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Wolvern Teeth Necklace Quest. Inhabits Frostia Hills. +// The necklace can also be dropped by the Wolvern normally. Any of those will do +// to advance the Barbarian Necklaces plot. (Until you get the final version of it) +// This is a BONUS QUEST and can only be done via Yeti King Quest. It is NOT +// meant to be doable outside it. It's overrewarding, yes. It's meant to be this way. +// Do not tell everybody about this one :> Bonus to those who explore! +// NOTE: Temporaly replaced with ClawPendant +// Variables: +// FrostiaQuest_WolfNecklace - quest var + + +001-7,72,39,0 script Barbarian#Frostia NPC_HALBERDBARBARIAN,{ + .@q = getq(FrostiaQuest_WolfNecklace); + mesn; + mesq l("Hello my friend."); + if (BaseLevel < 35) goto L_Weakling; + if (.@q == 0 && countitem(ToothNecklace)) goto L_Quest; + if (.@q == 1) goto L_CheckItems; + close; + +L_Weakling: + mesq l("These cliffs are no place for weak people like you. You better teleport yourself away as soon as possible!"); + close; + +L_Quest: + mesq l("Oooh, I see you have a @@ with you.", getitemlink(ToothNecklace)); + next; + mesn; + mesq l("It's done with @@ teethes. These drain your life and raise your strenght to SMASH your foes!", getmonsterlink(Wolvern)); + next; + mesn; + mesq l("If you bring me 2 @@, that Necklace, and 4000 GP, I can improve it. It'll be worth it, I warrant you!", getitemlink(WolvernTooth)); // 5% drop rate of tooth. + setq FrostiaQuest_WolfNecklace, 1; + close; + +L_CheckItems: + if (!countitem(ToothNecklace) || countitem(WolvernTooth) < 2 || Zeny < 4000) { + mesn; + mesq l("Sorry, but you don't have what I need."); + mesq l("I need 2 @@, the @@, and 4000 GP.", getitemlink(WolvernTooth), getitemlink(ToothNecklace)); + close; + } + mesn; + mesq l("Are you with what I asked for?"); + if (askyesno() == ASK_NO) + close; + mes ""; + + // No checks because I did before and cheaters must die. + if (Zeny < 4000) { + Zeny=0; + percentheal -75, -100; + mesc l("All cheaters must die."), 1; + close; + } + inventoryplace ClawPendant, 1; + delitem WolvernTooth, 2; + delitem ToothNecklace, 1; + getitem ClawPendant, 1; + Zeny=Zeny-4000; + getexp 15000, 0; + mesn; + mesq l("Here you go, thanks for doing my SECRET quest! Eh, not much to do here. But I like life this way."); + setq FrostiaQuest_WolfNecklace, 2; + close; + +OnInit: + .sex = G_MALE; + .distance = 5; + end; +} diff --git a/npc/001-7/celestia_bossfight.txt b/npc/001-7/celestia_bossfight.txt new file mode 100644 index 0000000..e67ec4f --- /dev/null +++ b/npc/001-7/celestia_bossfight.txt @@ -0,0 +1,247 @@ +// TMW2 Scripts +// Author: +// Jesusalva +// Description: +// Celestia Yeti King's quest. This controls the final showdown, and brings you +// back home safely. +// +// If you cheated your way to here, you won't be able to interact with it. +// No other safety measures are in place. Lone players cannot challenge the +// Yeti King, there must be at least 2 players there to do the challenge. +// BEWARE, the Yeti King gains stronger poisons the more people are attacking him. +// +// $@GM_OVERRIDE allows a single player to challenge him, as usual with all +// co-op scripts. +// +// If you do not challenge him, the chance to challenge him again is lost. + +001-7,33,39,0 script #YetiKing NPC_YETI_KING,0,0,{ + .@q=getq(HurnscaldQuest_Celestia); + if (.@q == 5 && !mobcount(.map$, "#YetiKing::OnVictory")) goto L_Survivor; + if (.@q == 6) goto L_GoHome; + end; + +L_GoHome: + .@MLPQuest=( (##02_MLWORLD & MLP_TMW_CELESTIA) && + !(##02_MLWORLD & MLP_TMW_YETIKING) && + getvaultid()); + if (.@MLPQuest) { + mesn strcharinfo(0); + mesq l("Actually, have you ever heard of Yeti's kidnapping little girls?"); + next; + goto L_VaultQuest; + } + mesc l("Go home now?"); + if (askyesno() == ASK_YES) + warp "003-1-1", 94, 22; + closedialog; + if (!getareausers("001-7", 7)) + setnpcdisplay .name$, NPC_YETI_KING; + close; + +L_Survivor: + if (!YETIKING_WINNER) + YETIKING_WINNER = gettimetick(2); + if ($YETIKING_WINNER$ == "") { + $YETIKING_WINNER$=strcharinfo(0); + channelmes("#world", $YETIKING_WINNER$+" is the first player to finish Yeti King Quest!! GG, dude! %%N"); + announce "All hail ##B"+$YETIKING_WINNER$+"##b, first to complete the ##3Yeti King Quest!", bc_all|bc_npc; + getexp 0, 2000; + getitem PrismGift, 1; + mesc l("CONGRATULATIONS! You are the first player to finish Yeti King quest!!"), 2; + mesc l("You just gained a Prism Gift, and 2000 Job Exp for your bravery!"), 2; + next; + } + mesn col(l("The Yeti King"), 3); + mesq l("Good job, kid. You've survived both the Cave Of Trials and Soren's Village."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("That was only to prove you're strong enough on yourself to do whatever you want to do. You have friends."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("In this world, your friends are your strength. You deserve a reward for the victory, please choose whatever you want."); + select + l("I want a gemstone or ore"), + rif(!countitem(MirrorLakeArmor), l("I want experience")), + l("I want gold"), + l("I want coal"), + l("I want monster points"); + + mes ""; + .@r=rand2(1,100)+(@YetiKing_Challenger*5); + switch (@menu) { + case 1: + if (.@r > 70) + getitem rand2(Diamond, Amethyst), 1; + else + getitem rand2(CopperOre, (REBIRTH ? IridiumOre : TitaniumOre)), any(1,2); + break; + case 2: + .@r+=BaseLevel; + getexp .@r*80, .@r*2; // max 8000 xp and 200 jp (level 0) + break; + case 3: + .@r+=JobLevel; + Zeny=Zeny+.@r*75; // max 7500 gp (job 0) + break; + case 4: + getitem Coal, (.@r/10); // max 10 coal + break; + case 5: + .@r+=(BaseLevel+JobLevel)/2; + Mobpt+=.@r*5; // max 500 mobpt (base/job 0) + break; + } + // Completion bonus + getexp 0, 2500; + getitem StrangeCoin, 1; + compareandsetq HurnscaldQuest_Celestia, 5, 6; + mesn col(l("The Yeti King"), 3); + mesq l("Here kid. Frostia, the elf town, is somewhere near here, but I'm not sure if you can reach it from here."); + next; + if ($@CINDY_STATE > gettimetick(2)) { + mesn col(l("The Yeti King"), 3); + mesq l("Some rogue Yetis are trying to escape to Nivalis. I can't hold them back for more than @@.", FuzzyTime($@CINDY_STATE+rand2(5,95))); + next; + } + mesn col(l("The Yeti King"), 3); + mesq l("I can warp you home now."); + mes ""; + .@MLPQuest=( (##02_MLWORLD & MLP_TMW_CELESTIA) && + !(##02_MLWORLD & MLP_TMW_YETIKING) && + getvaultid()); + select + rif(!.@MLPQuest, l("Please, bring me back home.")), + rif((getareausers("001-7", 7) > 1 || $@GM_OVERRIDE) && !mobcount(.map$, "#YetiKing::OnVictory") && @YetiKing_Challenger, l("No, we challenge you to a duel!")), + rif(.@MLPQuest, l("Actually, have you ever heard of Yeti's kidnapping little girls?")), + l("I'll walk around here a little more."); + + mes ""; + switch (@menu) { + case 1: + warp "003-1-1", 94, 22; + break; + case 2: + compareandsetq HurnscaldQuest_Celestia, 6, 7; + mesn col(l("The Yeti King"), 3); + mesq l("Foolish kids, do you think violence is the answer to everything?!"); + next; + mesn col(l("The Yeti King"), 3); + mesq l("I give you five minutes to defeat me. Witness my wrath!"); + if (mobcount(.map$, "#YetiKing::OnVictory")) + close; + setnpcdisplay .name$, NPC_NO_SPRITE; + npctalk l("*Roaaaaaar!*"); + monster .map$, .x, .y, strmobinfo(1, YetiKing), YetiKing, 1, "#YetiKing::OnVictory"; + initnpctimer; + break; + case 3: + goto L_VaultQuest; + } + close; + +OnVictory: + stopnpctimer; + setnpcdisplay .name$, NPC_SUMMONING_CIRC; + //Karma=Karma+1; + Mobpt+=10000; + getitem StrangeCoin, 2; + getmapxy(.@m$, .@x, .@y, 0); + makeitem(StrangeCoin, 1, .@m$, .@x+rand2(-1,1), .@y+rand2(-1,1)); + npctalk l("Good job... You can keep the drops. Touch here to return home."); + areatimer "001-7", 20, 20, 141, 171, 10, "#YetiKing::OnDefeat"; + donpcevent "Celestia::OnClock0002"; + fix_mobkill(YetiKing); + end; + +// This allows the challenger to go back home without dying. +OnDefeat: + getexp 0, 100; + compareandsetq HurnscaldQuest_Celestia, 7, 6; + end; + +OnTimer60000: + npctalk "Time left: 4 minutes"; + end; + +OnTimer120000: + npctalk "Time left: 3 minutes"; + end; + +OnTimer180000: + npctalk "Time left: 2 minutes"; + end; + +OnTimer240000: + npctalk "Time left: 1 minute"; + end; + +OnTimer270000: + npctalk "Time left: 30 seconds"; + end; + +OnTimer290000: + npctalk "Time left: 10 seconds"; + end; + +OnTimer300000: + npctalk "Time is up!"; + areatimer "001-7", 20, 20, 141, 171, 10, "#YetiKing::OnDefeat"; + killmonster(.map$, "#YetiKing::OnVictory"); // I could use "All" as label, too + setnpcdisplay .name$, NPC_YETI_KING; + end; + +// Hourly, check if there are players and fix the sprite +OnMinute17: + if (!getareausers("001-7", 21)) + setnpcdisplay .name$, NPC_YETI_KING; + end; + +L_VaultQuest: + mesn col(l("The Yeti King"), 3); + mesq l("Every once in a while, but I guess this is not common on your world, am I right."); + next; + select + l("I came from The Mana World."), + l("That's right, this is unheard of where I come from."), + l("...How do you know I'm not from this world?"); + mes ""; + mesn col(l("The Yeti King"), 3); + mesq l("I'm not unfamiliar with the children of Merlin, thosem whom cross the Mirror Lake. In case of The Mana World, you're lucky, we're parallel, meaning we share lots of things in common."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("Now, I'm sure you could find the answer you seek without the trouble of coming here, but anyway. I guess I'll explain you how things work here, first."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("In this world, Angela married with the Blue Sage. I had an... incident, with the Blue Sage, which is better forgetten. Anyway, seeking to cause a political instability, opposing Yetis every once in a while kidnap their daughter, Cindy."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("The trick at tracing parallel, is finding the difference. In this world, Cindy gives a %s, a personal belonging of her, to those whom rescue her. What is the reward on your world?", getitemlink(Earmuffs)); + next; + select + l("I got a Wizard Hat."), + l("I got a Wooden Staff."); + mes ""; + mesn col(l("The Yeti King"), 3); + mesq l("That's your answer. Cindy is not a mage, right? This means some mage has bewitched the Yetis to do so, and if my parallel theory is correct, they're either aiming at the Blue Sage, or at her father."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("Therefore, children of Merlin, go back to your world, and ask the Blue Sage Nikolai about it. The blue sage may fake angerness or try to dodge the question, but they are a good person. Still, you should ensure you're on his good side."); + next; + mesn col(l("The Yeti King"), 3); + mesq l("If you're still not confident enough, just tell him this: %s", col(l("*whisper whisper*"), 9)); + next; + mesn col(l("The Yeti King"), 3); + mesq l("Are you ready to cross the Mirror Lake and return to your world?"); + next; + if (askyesno() == ASK_YES) { + ##02_MLWORLD=##02_MLWORLD|MLP_TMW_YETIKING; + MirrorLakeSendTo(MLP_TMW, 0); + } + close; +} + + + + + diff --git a/npc/001-7/homunculus.txt b/npc/001-7/homunculus.txt new file mode 100644 index 0000000..5a34e0f --- /dev/null +++ b/npc/001-7/homunculus.txt @@ -0,0 +1,282 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// 001-7 Monster King's Village Configuration File +// Part of Player Quest, see 023-3 scope and 024-16 +// (C) Moubootaur Legends, 2019 + +001-7,91,89,0 script #Init0233 NPC_HIDDEN,0,0,{ + end; + +OnTouch: + .@q=getq(General_Narrator); + .@q2=getq2(General_Narrator); + // Cheater Detected + if (.@q < 15) { + warp "Save", 0, 0; + die(); + end; + } + if (.@q == 15) { + dispbottom lg("I'm not a coward! I must press forward!"); + end; + } + .@mapn$="023-3"; + warp .@mapn$, 48, 23; + end; +} + +001-7,59,44,0 script #Init02331 NPC_HIDDEN,0,0,{ + end; + +OnTouch: + .@n=getq(General_Narrator); + .@q=getq2(FrostiaQuest_Homunculus); + // Cheater Detected + if (.@n < 15) { + warp "Save", 0, 0; + die(); + end; + } + mesn l("Magically Sealed Gate"); + mesc l("The door is sealed. The riddle says: “I drink, I become, I am. Don't say my name, but say why you know me. For, I am the best in the world.”"); + if (!(.@q & 1)) { + mesc l("You have no idea what that means."), 1; + close; + } else { + //mesc l("You know the answer can only be @@.", getitemlink(Coffee)), 3; + mesc l("Fortunately, we know the answer is..."), 3; + next; + select + l("...Actually, I'm drawing in a blank."), + l("...Tea."), + l("...Coffee."), + l("...Water."), + l("...Potion."), + l("...Blood."), + l("...Cocktail."), + l("...Poison."); + mes ""; + if (@menu != 3) { + mesc l("But unfortunately, whoever made this riddle disagrees with me."); + close; + } + } + next; + mesn l("Magically Sealed Gate"); + if (!(.@q & 256)) { + mesc l("Even after breaking the first layer, a second layer keeps active. The first layer gets back to work shortly after. What have I missed or forgotten to do?"), 1; + close; + } else { + if (.@q != 511) + Exception("Invalid quest state: "+.@q, RB_DEFAULT|RB_SPEECH|RB_ISFATAL); + mesc l("Are you sure you want to proceed? You CANNOT COME BACK!"), 1; + if (TUTORIAL) + mesc l("Reminder: Keep an eye out for traps."); + if (askyesno() == ASK_NO) + close; + } + closeclientdialog; + // We can create instance without recording the ID etc. + // Map name limit: 4 chars (hmc1) - as of homunculus + .@mapn$="hmc1@"+getcharid(0); + .@map2$="hmc2@"+getcharid(0); + .@inst = instance_create("Homunculus "+getcharid(0), getcharid(3), IOT_CHAR); + if (.@inst >= 0) { + instance_attachmap("023-3-1", .@inst, false, .@mapn$); + instance_attachmap("023-3-2", .@inst, false, .@map2$); + // Instance lasts one hour + instance_set_timeout(3600, 3600, .@inst); + instance_init(.@inst); + } + setq1 FrostiaQuest_Homunculus, 2; + warp .@mapn$, any(45,46), 79; + @instid=.@inst; + end; +} + +001-7,50,112,0 script Abandoned Fountain#MKH NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("At a first glance, it seems to be full of water, but inspecting closer, it is not."); + next; + mesn; + mesc l("It is difficult to describe, it is like if it was mixed with mana itself. Drinking a bit of it was enough to recover your MP."); + percentheal 0, 100; + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=1; + .distance=2; + end; +} + + +001-7,48,111,0 script Sign#MKH NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("Welcome to") + " --_--_-___--__-_-_."; + mesc l("Yes, we have @@!", getitemlink(Coffee)); + next; + mesn; + mesc l("The village name is difficult to read."); + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=2; + .distance=2; + end; +} + +001-7,41,104,0 script Abandoned House#MKH1 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("The door won't budge."); + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=4; + .distance=2; + end; +} + +001-7,59,104,0 script Abandoned House#MKH2 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("It seems to have been abandoned a long time ago, but the chimney is still going?"); + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=8; + .distance=2; + end; +} + + +001-7,41,99,0 script Abandoned House#MKH3 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("The knob has... melted down? What?"); + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=16; + .distance=1; + end; +} + +001-7,59,99,0 script Abandoned House#MKH4 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("There seems to be signs of a fight long forgotten, but it still reeks blood."); + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=32; + .distance=1; + end; +} + +001-7,33,89,0 script Apple Trees#MKH1 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + mesn; + mesc l("It seems to be growing apples, but by the amount of magic particles..."); + next; + mesn; + mesc l("A close inspection reveals nothing out of ordinary. It seems to be well kept."); + next; + if (!(.@q & 1)) { + mesn strcharinfo(0); + mesc l("You're hesitant to pick one, they could be dangerous."); + close; + } + mesn strcharinfo(0); + mesc l("You carefully pick a @@. It looks delicious! You feel you'll need it sooner than you expect.", getitemlink(MagicApple)); + if (!(.@q & .hcID)) { + inventoryplace MagicApple, 1; + getitem MagicApple, 1; + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + } + close; +OnInit: + .hcID=64; + .distance=2; + end; +} + +001-7,40,88,0 script Abandoned House#MKH6 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + if (!(.@q & 64)) { + mesn strcharinfo(0); + mesc l("I should check the Apple Garden first."); + close; + } + // I hope this is right + if (!( + (.@q & 4) && + (.@q & 8) && + (.@q & 16) && + (.@q & 32)) ) { + mesn strcharinfo(0); + mesc l("I better not disturb the hut owner."); + close; + } + + mesn; + mesc l("It's locked. But a close inspection reveals a small key under the rug."); + next; + mesn; + mesc l("Maybe there's a locked door somewhere, and this key will fit?"); + if (!(.@q & .hcID)) + setq2 FrostiaQuest_Homunculus, .@q|.hcID; + close; +OnInit: + .hcID=128; + .distance=1; + end; +} + +001-7,50,99,0 script Abandoned House#MKH5 NPC_NO_SPRITE,{ + .@q=getq2(FrostiaQuest_Homunculus); + if (!(.@q & 128)) { + mesn; + mesc l("It's locked."); + next; + mesn strcharinfo(0); + mesc l("Maybe there is a key somewhere near. I should keep looking."); + close; + } + mesn; + mesc l("It's locked."); + next; + mesn; + mesc l("You use the small key from the apple garden hut. It fits neatly."); + next; + mesn; + mesc l("The hut is... empty. And it doesn't have a fireplace, either."); + next; + mesn; + mesc l("You don't know how the chimney keeps producing smoke. It must be using hiding magic."); + next; + mesn; + mesc l("Whoever took control of this village is no ordinary mage. There's a switch on the wall."); + next; + mesn; + mesc l("You flip the switch. Nothing happens."); + // You can unflip it :> + setq2 FrostiaQuest_Homunculus, .@q^.hcID; + mesc l("Strange switch status: @@", (.@q&.hcID ? l("Inactive") : l("Active"))), 3; + close; +OnInit: + .hcID=256; + .distance=1; + end; +} + diff --git a/npc/001-7/mapflags.txt b/npc/001-7/mapflags.txt new file mode 100644 index 0000000..296862a --- /dev/null +++ b/npc/001-7/mapflags.txt @@ -0,0 +1 @@ +001-7 mapflag zone MMO |