summaryrefslogtreecommitdiff
path: root/npc/014-5
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
committerJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
commita7c45a192268da2601cef47a4cdba987ae2327ca (patch)
treec5fb5b97db109fe7106496dd96498c475881046b /npc/014-5
downloadserverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/014-5')
-rw-r--r--npc/014-5/_import.txt8
-rw-r--r--npc/014-5/_mobs.txt12
-rw-r--r--npc/014-5/_warps.txt7
-rw-r--r--npc/014-5/blossom.txt139
-rw-r--r--npc/014-5/events.txt200
-rw-r--r--npc/014-5/sagratha.txt191
-rw-r--r--npc/014-5/sign.txt24
7 files changed, 581 insertions, 0 deletions
diff --git a/npc/014-5/_import.txt b/npc/014-5/_import.txt
new file mode 100644
index 0000000..6920787
--- /dev/null
+++ b/npc/014-5/_import.txt
@@ -0,0 +1,8 @@
+// Map 014-5: North Woodlands
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/014-5/_mobs.txt",
+"npc/014-5/_warps.txt",
+"npc/014-5/blossom.txt",
+"npc/014-5/events.txt",
+"npc/014-5/sagratha.txt",
+"npc/014-5/sign.txt",
diff --git a/npc/014-5/_mobs.txt b/npc/014-5/_mobs.txt
new file mode 100644
index 0000000..bdb0413
--- /dev/null
+++ b/npc/014-5/_mobs.txt
@@ -0,0 +1,12 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 014-5: North Woodlands mobs
+014-5,156,106,48,44 monster Log Head 1066,21,20000,20000
+014-5,68,178,48,44 monster Mouboo 1023,18,20000,10000
+014-5,90,82,62,55 monster Poison Spiky Mushroom 1043,21,20000,10000
+014-5,56,114,36,30 monster Red Mushroom 1042,7,40000,10000
+014-5,130,132,48,44 monster Forest Mushroom 1060,11,20000,10000
+014-5,76,70,48,44 monster Plushroom Field 1011,16,80000,80000
+014-5,66,110,44,38 monster Chagashroom Field 1128,16,80000,80000
+014-5,153,88,48,44 monster Cobalt Herb 1136,8,80000,80000
+014-5,132,140,61,33 monster Gamboge Herb 1134,6,80000,80000
+014-5,91,132,54,63 monster Mauve Herb 1135,9,80000,80000
diff --git a/npc/014-5/_warps.txt b/npc/014-5/_warps.txt
new file mode 100644
index 0000000..e8fbbdc
--- /dev/null
+++ b/npc/014-5/_warps.txt
@@ -0,0 +1,7 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 014-5: North Woodlands warps
+014-5,48,161,0 warp #014-5_48_161 0,0,015-7,38,94
+014-5,59,154,0 warp #014-5_59_154 0,0,015-7,84,65
+014-5,82,229,0 warp #014-5_82_229 1,0,014-3,155,41
+014-5,86,31,0 warp #014-5_86_31 0,0,015-5,81,139
+014-5,192,16,0 warp #014-5_192_16 2,0,019-4,53,109
diff --git a/npc/014-5/blossom.txt b/npc/014-5/blossom.txt
new file mode 100644
index 0000000..2193075
--- /dev/null
+++ b/npc/014-5/blossom.txt
@@ -0,0 +1,139 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Spring Quest, disabled during Easter
+//
+// SQuest_SPring
+
+014-5,79,168,0 script Blossom NPC_BLOSSOM,{
+ if (season() != SPRING && !$@GM_OVERRIDE)
+ goto L_OutOfSeason;
+ if ($EVENT$ == "Easter")
+ goto L_QuestDisabled;
+
+ .@q=getq(SQuest_Spring);
+ mesn;
+ mesq l("Thorn is so annoying...");
+ if (.@q < 1)
+ goto L_SpringQuest;
+
+L_Main:
+ next;
+ .@q=getq(HurnscaldQuest_Blossom);
+ if (.@q == 0) {
+ mesn;
+ mesq l("Anyway, I got this really nice @@ from Audsbel. He said I could collect herbs more efficiently with it.", getitemlink(EnchantedHerbBag));
+ next;
+ mesn;
+ mesq l("I am willing to give it to you, if help me out. I promise it won't be a bother, and it'll really be useful for you, I swear.");
+ next;
+ mesn;
+ mesq l("I would like @@ @@, @@ @@ and @@ @@!", 30, getitemlink(HalfEggshell), 7, getitemlink(RedApple), 1, getitemlink(Orange));
+ mesc l("@@ drolls without realizing.", .name$);
+ next;
+ mesc l("Give her the materials she asked for?");
+ if (askyesno() == ASK_YES) {
+ inventoryplace EnchantedHerbBag, 1;
+ if (!transcheck(HalfEggshell, 30, RedApple, 7, Orange, 1))
+ close;
+ getitem EnchantedHerbBag, 1;
+ getexp 600, 120; // Reference: Level 20
+ mesn;
+ mesq l("Thanks for helping me out! Here, take this bag. Now if you excuse me...");
+ mesc l("*drolls*");
+ setq HurnscaldQuest_Blossom, 1;
+ next;
+ }
+ }
+ closeclientdialog;
+ goodbye;
+ end;
+
+L_OutOfSeason:
+ mesn;
+ mesq l("Hmm, Woodlands is a wonderful place to live in! Although Thorn gets really a thorn in my boots during spring...");
+ goto L_Main;
+
+L_QuestDisabled:
+ mesn;
+ mesq l("Happy Easter!");
+ mesc l("The @@ quest is disabled during Easter event.", getitemlink(Wreath));
+ next;
+ goto L_Main;
+
+L_SpringQuest:
+ next;
+ mesn;
+ mesq l("Hey, you! Aid me!");
+ next;
+ mesn;
+ mesq l("There's an annoying half-wose-half-elf called Thorn trying to impress me with his wose side!");
+ next;
+ mesn;
+ mesq l("I do not like him, but even so, he keeps bothering me! Maybe I could out-impress him, though!");
+ next;
+ mesn;
+ mes l("What about you bring me:");
+ mes l("@@/55 @@", countitem(Rose), getitemlink(Rose));
+ mes l("@@/55 @@", countitem(Tulip), getitemlink(Tulip));
+ mes l("@@/50 @@", countitem(Blueberries), getitemlink(Blueberries));
+ mes l("@@/10 @@", countitem(GrassSeeds), getitemlink(GrassSeeds));
+
+ mes l("@@/80 @@", countitem(MauveHerb), getitemlink(MauveHerb));
+ mes l("@@/80 @@", countitem(GambogeHerb), getitemlink(GambogeHerb));
+ mes l("@@/80 @@", countitem(CobaltHerb), getitemlink(CobaltHerb));
+ mes l("@@/80 @@", countitem(AlizarinHerb), getitemlink(AlizarinHerb));
+ next;
+ select
+ l("Not now, thanks"),
+ l("To be honest, I have that with me!");
+
+ mes "";
+ if (@menu == 1)
+ goto L_Main;
+ if (@menu == 2) {
+ if (
+ countitem(Rose) < 55 ||
+ countitem(Tulip) < 55 ||
+ countitem(Blueberries) < 50 ||
+ countitem(GrassSeeds) < 10 ||
+ countitem(MauveHerb) < 80 ||
+ countitem(GambogeHerb) < 80 ||
+ countitem(CobaltHerb) < 80 ||
+ countitem(AlizarinHerb) < 70
+ ) goto L_Lying;
+
+ inventoryplace Wreath, 1;
+ delitem Rose, 55;
+ delitem Tulip, 55;
+ delitem Blueberries, 50;
+ delitem GrassSeeds, 10;
+ delitem MauveHerb, 80;
+ delitem GambogeHerb, 80;
+ delitem CobaltHerb, 80;
+ delitem AlizarinHerb, 80;
+ getitem Wreath, 1;
+ getexp (210*BaseLevel), 120;
+ setq1 SQuest_Spring, 1;
+ mesn;
+ mesq l("Many thanks! At least he'll know he haven't impressed me yet!");
+ next;
+ mesn;
+ mesq l("Here, take the reward as promised!");
+ goto L_Main;
+ }
+
+ close;
+
+L_Lying:
+ mesn;
+ mesq l("Please don't lie to me...");
+ goto L_Main;
+
+OnInit:
+ .sex=G_FEMALE;
+ .distance=8;
+ end;
+
+}
diff --git a/npc/014-5/events.txt b/npc/014-5/events.txt
new file mode 100644
index 0000000..c6d6b67
--- /dev/null
+++ b/npc/014-5/events.txt
@@ -0,0 +1,200 @@
+// TMW2 scripts.
+// Author:
+// Jesusalva
+// Description:
+// St. Patrick Day
+// Variables:
+// #PATRICK_DAY
+// When you spinned this
+// #PATRICK_CTRL
+// Controls rarity, lowering boost
+// $@PATRICK_DAYMAX
+// Last day in St. Patrick event
+
+014-5,47,53,0 script St. Patrick Gold Pot NPC_GOLDPOT,{
+ function symbol{
+ switch (getarg(0)) {
+ case 0:
+ mesn "%%t";
+ break;
+ case 1:
+ mesn "%%g";
+ break;
+ case 2:
+ mesn "%%H";
+ break;
+ case 3:
+ mesn "%%G";
+ break;
+ case 4:
+ mesn "%%Q";
+ break;
+ case 5:
+ mesn "%%N";
+ break;
+ case 6:
+ mesn "%%K";
+ break;
+ default:
+ mesn "%%@";
+ break;
+ }
+ }
+
+ if ($EVENT$ != "Patrick" && !$@GM_OVERRIDE) {
+ channelmes("#world", "ERROR, ST. PATRICK GOLD POT: NOEVENT ERROR");
+ disablenpc .name$;
+ atcommand("@kick "+strcharinfo(0));
+ close;
+ }
+ if (#PATRICK_DAY == gettime(GETTIME_DAYOFMONTH)) {
+ mesn;
+ mesc l("You already claimed a reward today! Come back tomorrow, and remember to wear GREEN!"), 2;
+ close;
+ }
+ mesn;
+ mesc l("Lucky you, you found me! Do you want to SPIN THE WHEEL and gain GREAT rewards?"), 2;
+ mesc l("Remember that wearing green BOOSTS the rates at which good stuff will be found!"), 2;
+ mesc l("Only green from @@ will be taken in account.", getitemlink(GreenDye));
+ next;
+ select
+ l("Spin it!"),
+ l("How does spinning works?"),
+ l("Don't spin it!");
+ mes "";
+ if (@menu == 3)
+ close;
+
+ if (@menu == 2) {
+ mes ("%%0 - "+l("GP"));
+ mes ("%%1 - "+getitemlink(CasinoCoins));
+ mes ("%%2 - "+getitemlink(Topaz));
+ mes ("%%3 - "+getitemlink(StrangeCoin));
+ mes ("%%4 - "+getitemlink(GoldOre));
+ mes ("%%5 - "+getitemlink(GoldenGift));
+ mes ("%%6 - "+getitemlink(GoldenApple));
+ close;
+ }
+
+ if (@menu == 1) {
+ // SPINNING! Set that you can't spin again.
+ #PATRICK_DAY=gettime(GETTIME_DAYOFMONTH);
+
+ // Each green accessory raises boost gauge in 25. Full set raises in further 25.
+ // Hat, Shirt, Pants, Boots and Gloves. Max boost gauge from dye is 150 atm.
+ .@boost=0;
+ if (getequipcardid(EQI_HEAD_TOP, 0) == GreenDye)
+ .@boost+=25;
+ if (getequipcardid(EQI_HEAD_MID, 0) == GreenDye)
+ .@boost+=25;
+ if (getequipcardid(EQI_HEAD_LOW, 0) == GreenDye)
+ .@boost+=25;
+ if (getequipcardid(EQI_SHOES, 0) == GreenDye)
+ .@boost+=25;
+ if (getequipcardid(EQI_GARMENT, 0) == GreenDye)
+ .@boost+=25;
+ if (.@boost >= 125)
+ .@boost+=25;
+
+ // Blv+Jlv gives a small boost. The "maximum" sum is 250, but we divide by 5
+ // So this grants a further boost of 4~50 depending on level.
+ .@boost+=(BaseLevel+JobLevel)/5;
+
+ // .@boost, right now, is a number from 0 to 200.
+ // Randomness factor can make that 20% higher, up to 240.
+ .@r=rand(0,20);
+ .@boost+=(.@boost*.@r/100);
+ // Then it may add or subtract 10 points from boost. Apply a cap to range 0~250.
+ .@boost+=rand(-10, 10);
+
+ // Now, you can't get 5 Golden Apples straight, right?
+ // You lose boost as you get rewards. You lose boost the farther from
+ // event last day you are, too.
+ .@boost-=#PATRICK_CTRL;
+ .@boost-=($@PATRICK_DAYMAX-#PATRICK_DAY);
+
+ // sanitize boost so it ranges from 0 to 250.
+ .@boost=max(0, .@boost);
+
+ // REFERENCE: At release time, max levels ingame were about 60/40.
+ // That would give 10~34 (not green) to 160~214 (fully green) boost value.
+ mesc l("Spinning!"), 2;
+
+ // .@v holds the reward you'll get
+ if (.@boost > 240)
+ .@v=6;
+ else if (.@boost > 200)
+ .@v=5;
+ else if (.@boost > 160)
+ .@v=4;
+ else if (.@boost > 120)
+ .@v=3;
+ else if (.@boost > 80)
+ .@v=2;
+ else if (.@boost > 40)
+ .@v=1;
+ else
+ .@v=0;
+
+ // Tell players what they spinned, and lower rarity on next tries
+ symbol(.@v);
+ #PATRICK_CTRL+=.@v+(.@v/2);
+
+ // Grant players the reward
+ switch (.@v) {
+ case 0: // GP
+ Zeny=Zeny+rand(10, .@boost+10);
+ break;
+ case 1: // Casino Coins
+ getitem CasinoCoins, max(1, .@boost/10);
+ Zeny=Zeny+rand(20, .@boost+10);
+ break;
+ case 2: // Topaz
+ getitem Topaz, 1;
+ Zeny=Zeny+rand(30, .@boost+10);
+ break;
+ case 3: // Strange Coins
+ getitem StrangeCoin, max(1, .@boost/10);
+ Zeny=Zeny+rand(40, .@boost+10);
+ break;
+ case 4: // Gold Ore
+ getitem GoldOre, 1;
+ Zeny=Zeny+rand(50, .@boost+10);
+ break;
+ case 5: // Golden Gift
+ getitem GoldenGift, 1;
+ Zeny=Zeny+rand(60, .@boost+10);
+ break;
+ case 6: // Golden Apple (OP)
+ getitem GoldenApple, 1;
+ Zeny=Zeny+rand(70, .@boost+10);
+ break;
+ }
+ next;
+ mesn;
+ mesc l("Did you like it? Find me tomorrow, until day @@, for another gift!", $@PATRICK_DAYMAX), 2;
+ close;
+ }
+ // Should not reach here
+ close;
+
+OnInit:
+ .sex = G_OTHER;
+ .distance = 4;
+
+ if ($EVENT$ != "Patrick") {
+ disablenpc(.name$);
+ end;
+ }
+OnClock0000:
+OnForcedMove:
+ if ($EVENT$ == "Patrick") {
+ setarray .@vx, 134, 162, 108, 105, 67, 191, 168, 170, 191, 188, 160, 145, 196, 120;
+ setarray .@vy, 36, 61, 45, 96, 76, 74, 72, 111, 113, 129, 125, 119, 143, 104;
+ .@r=rand(0,getarraysize(.@vx)-1);
+ movenpc .name$, .@vx[.@r], .@vy[.@r];
+ debugmes "Warping to %d,%d (seed %d)", .@vx[.@r], .@vy[.@r], .@r;
+ }
+ end;
+}
+
diff --git a/npc/014-5/sagratha.txt b/npc/014-5/sagratha.txt
new file mode 100644
index 0000000..36614af
--- /dev/null
+++ b/npc/014-5/sagratha.txt
@@ -0,0 +1,191 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Sagratha's House Door
+//
+// getq(HurnscaldQuest_Sagratha)
+// Field 1
+// 0 - Sagratha is home and annyoed
+// 1 - Wyara sent player saggy way
+// 2 - Rumor Confirmed, check again
+// Field 2
+// RESERVED - INSTANCE ID
+// Field 3
+// During stage 1 and 2: Holds if player looked everywhere
+// During stage 3 and 4: Control puzzles
+// During stage 5 boss fight
+
+// Check instances and rebuild if needed
+// Returns map name
+// SaggyInstCheck( {house=true} )
+function script SaggyInstCheck {
+ .@house=getarg(0, true);
+
+ .@q2=getq2(HurnscaldQuest_Sagratha);
+ // Map name limit: 4 chars (sgt1)
+ .@mapn$="sgt1@"+getcharid(0);
+ .@map2$="sgt2@"+getcharid(0);
+ if (!(isinstance(.@q2) && .@q2 != 0 && instanceowner(.@q2) == getcharid(3))) {
+ .@inst = instance_create("Sagratha House "+getcharid(0), getcharid(3), IOT_CHAR);
+ instance_attachmap("014-5-1", .@inst, false, .@mapn$);
+ //instance_attachmap("015-8", .@inst, false, .@mapn$);
+ instance_attachmap("015-8-1", .@inst, false, .@map2$);
+ // Instance lasts one hour
+ instance_set_timeout(3600, 3600, .@inst);
+ instance_init(.@inst);
+ setq2 HurnscaldQuest_Sagratha, .@inst;
+ }
+
+ // It broke
+ if (getmapinfo(MAPINFO_SIZE_X, .@mapn$) <= 0) {
+ setq2 HurnscaldQuest_Sagratha, 0;
+ // Infinite Loop?
+ return callfunc("SaggyInstCheck", .@house);
+ }
+
+ if (.@house) {
+ return .@mapn$;
+ } else {
+ return .@map2$;
+ }
+}
+
+014-5,122,137,0 script Sagratha Door NPC_HIDDEN,0,0,{
+ end;
+
+L_Magicless:
+ npctalk3 l("A light magic barrier prevents you from entering.");
+ dispbottom l("If I only knew some magic...");
+ end;
+
+L_Lockpick:
+ mesn;
+ mesc l("The door is locked!");
+ select
+ l("Knock on the door?"),
+ l("Attempt to lockpick?"),
+ l("Leave it alone?");
+ mes "";
+
+ if (@menu == 1) {
+ /*
+ if (getq(HurnscaldQuest_InjuriedMouboo) == 2)) {
+ mesn strcharinfo(0);
+ mesc l("Nobody answers.");
+ mes "";
+ }
+ */
+ mesn l("Sagratha");
+ mesq l("No, I don't need monster repellent nor anything! Go away!");
+ close;
+ } else if (@menu == 2) {
+ if (LockPicking(4, 5)) {
+ getexp BaseLevel*4, 5;
+ mesn;
+ mesc l("*click*");
+ next;
+ mesn l("Sagratha");
+ mesq l("Who is there? Are they trying to break my lock again?!");
+ next;
+ select
+ l("Run away?"),
+ l("Stay there?");
+ mes "";
+
+ if (@menu == 2) {
+ mesn l("Sagratha");
+ mesq l("Oh my Jesusalva - You broke my lock! Why?!");
+ next;
+ select
+ l("I need to talk with you!"),
+ l("No reason.");
+ mes "";
+ if (@menu == 1) {
+ mesn l("Sagratha");
+ // I don't take strangers as students.
+ mesq l("No, I don't teach magic to strangers. No, I'm not interested in @@ affairs.", get_race());
+ next;
+ mesn l("Sagratha");
+ mesq l("Yes, I know when next Alliance's Council meeting will be. No, I don't need anything.");
+ next;
+ mesn l("Sagratha");
+ mesq l("Now begone.");
+ } else {
+ mesn l("Sagratha");
+ mesq l("What?! Do my house look like the place to you pratice your thief skills?!");
+ mesq col(l("DIE!"), 1);
+ specialeffect(312, SELF, getcharid(3));
+ percentheal -40, -100;
+ }
+ }
+
+ } else {
+ mesn l("Sagratha");
+ mesq l("Who is there? Are they trying to break my lock again?!");
+ mesq col(l("DIE!"), 1);
+ specialeffect(312, SELF, getcharid(3));
+ percentheal -40, -100;
+ }
+ }
+ close;
+
+L_Open:
+ mesn;
+ mesc l("The door is locked!");
+ select
+ l("Knock on the door?"),
+ l("Attempt to lockpick?"),
+ l("Say that Mouboos are Cute?"),
+ l("Leave it alone?");
+ mes "";
+ if (@menu == 4)
+ close;
+ if (@menu == 3) {
+ mesc l("Surprisingly, nothing happens.");
+ next;
+ mesc l("A close inspection suggests the lock was busted. You approach to inspect.");
+ next;
+ }
+ mesc l("*CREAK*");
+ mesc l("The pressure you did made the door burst open. It is unusually quiet inside...");
+ next;
+ //enable_items();
+ //mesc l("WARNING: Save your game now."), 3;
+ //mesc l("WARNING: Change your equipment now."), 3;
+ //next;
+ //disable_items();
+ /*
+ if (has_instance("014-5-1") == "") {
+ .@inst = instance_create("Sagratha House", getcharid(3), IOT_CHAR);
+ instance_attachmap("014-5-1", .@inst);
+ // 20 minutes (1200s) inside, or 5 minutes (300s) outside
+ instance_set_timeout(1200, 30, .@inst);
+ instance_init(.@inst);
+ }
+ warp "014-5-1", 33, 44;
+ //addmapmask instance_mapname("014-5-1"), 1;
+ changemusic "014-5-1", "eric_matyas_ghouls.ogg";
+ */
+ .@mapn$=SaggyInstCheck();
+ warp .@mapn$, 33, 44;
+ changemusic .@mapn$, "eric_matyas_ghouls.ogg";
+ closeclientdialog;
+ close;
+
+L_Welcome:
+ warp "014-5-1", 33, 44;
+ dispbottom l("Mouboos are cute");
+ end;
+
+OnTouch:
+ .@q=getq(HurnscaldQuest_Sagratha);
+ if (!MAGIC_LVL) goto L_Magicless;
+ if (.@q >= 1 && .@q < 6) goto L_Open;
+ if (.@q >= 6) goto L_Welcome;
+
+ // No special condition
+ goto L_Lockpick;
+ end;
+
+}
diff --git a/npc/014-5/sign.txt b/npc/014-5/sign.txt
new file mode 100644
index 0000000..c133544
--- /dev/null
+++ b/npc/014-5/sign.txt
@@ -0,0 +1,24 @@
+// TMW2 Script.
+// Author:
+// Jesusalva
+// Description:
+// Random Sign nobody bothers reading.
+
+014-5,179,29,0 script Sign#014517929 NPC_SWORDS_SIGN,{
+ mesc l("Welcome to the Greenlands, the place cursed by the Monster King to be ice forever, and now known as Icelands.");
+ next;
+ mesc l("It's advised to come ready for the cold, the hungry beasts, and other dangers snow may bring.");
+ if (getgmlevel()) {
+ mesc l("Blame @@, missing map between 014-5 and 019-1, solely to make trip longer.", any("jesusalva", "saulc", "lawncable", "mishana", "dragonstar", "4144", "everyone", "developers", "the Monster King", strcharinfo(0))), 1;
+ }
+ /*
+ next;
+ mesc l("WARNING: Path temporaly closed due strong snowstorm."), 3;
+ */
+ close;
+
+OnInit:
+ .sex = G_OTHER;
+ .distance = 3;
+ end;
+}