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/014-5 | |
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/014-5')
-rw-r--r-- | npc/014-5/_import.txt | 8 | ||||
-rw-r--r-- | npc/014-5/_mobs.txt | 12 | ||||
-rw-r--r-- | npc/014-5/_warps.txt | 7 | ||||
-rw-r--r-- | npc/014-5/blossom.txt | 139 | ||||
-rw-r--r-- | npc/014-5/events.txt | 200 | ||||
-rw-r--r-- | npc/014-5/sagratha.txt | 191 | ||||
-rw-r--r-- | npc/014-5/sign.txt | 24 |
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; +} |