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/015-3 | |
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/015-3')
-rw-r--r-- | npc/015-3/_config.txt | 11 | ||||
-rw-r--r-- | npc/015-3/_import.txt | 8 | ||||
-rw-r--r-- | npc/015-3/_mobs.txt | 19 | ||||
-rw-r--r-- | npc/015-3/_warps.txt | 59 | ||||
-rw-r--r-- | npc/015-3/arkim.txt | 252 | ||||
-rw-r--r-- | npc/015-3/logic.txt | 27 | ||||
-rw-r--r-- | npc/015-3/pooh.txt | 221 |
7 files changed, 597 insertions, 0 deletions
diff --git a/npc/015-3/_config.txt b/npc/015-3/_config.txt new file mode 100644 index 0000000..19625ca --- /dev/null +++ b/npc/015-3/_config.txt @@ -0,0 +1,11 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 015-3: Butterfly Caves conf + +015-3,24,36,0 script #015-3_24_36 NPC_CHEST,{ + TreasureBox(); + specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing + close; +OnInit: + .distance=2; + end; +} diff --git a/npc/015-3/_import.txt b/npc/015-3/_import.txt new file mode 100644 index 0000000..8933299 --- /dev/null +++ b/npc/015-3/_import.txt @@ -0,0 +1,8 @@ +// Map 015-3: Butterfly Caves +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/015-3/_config.txt", +"npc/015-3/_mobs.txt", +"npc/015-3/_warps.txt", +"npc/015-3/arkim.txt", +"npc/015-3/logic.txt", +"npc/015-3/pooh.txt", diff --git a/npc/015-3/_mobs.txt b/npc/015-3/_mobs.txt new file mode 100644 index 0000000..c8aa5cb --- /dev/null +++ b/npc/015-3/_mobs.txt @@ -0,0 +1,19 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 015-3: Butterfly Caves mobs +015-3,160,179,19,18 monster Cave Bat 1039,24,30000,40000 +015-3,142,31,24,14 monster Green Slime 1085,5,30000,40000 +015-3,118,179,22,18 monster Cave Snake 1035,9,30000,20000 +015-3,157,110,22,18 monster Snake 1122,12,30000,20000 +015-3,144,94,32,39 monster Black Scorpion 1074,12,30000,20000 +015-3,156,66,24,14 monster Robin Bandit 1153,5,30000,40000 +015-3,113,100,55,37 monster Red Slime 1092,47,30000,40000 +015-3,107,177,14,8 monster Archant 1026,2,30000,40000 +015-3,46,44,31,18 monster Night Scorpion 1077,1,3600000,1800000 +015-3,86,59,28,32 monster Terranite 1167,3,100000,40000 +015-3,69,89,33,28 monster Wicked Mushroom 1176,6,100000,30000 +015-3,84,142,23,50 monster Troll 1171,6,100000,30000 +015-3,32,37,31,12 monster Copper Slime Mother 1238,1,300000,120000 +015-3,38,49,26,17 monster Gobo Bear 1214,5,40000,20000 +015-3,132,189,8,10 monster Snake 1122,1,30000,20000 +015-3,102,105,81,87 monster Small Emerald Bif 1104,6,65000,45000 +015-3,98,123,24,62 monster Copper Slime 1088,10,40000,40000 diff --git a/npc/015-3/_warps.txt b/npc/015-3/_warps.txt new file mode 100644 index 0000000..46a752f --- /dev/null +++ b/npc/015-3/_warps.txt @@ -0,0 +1,59 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 015-3: Butterfly Caves warps +015-3,152,162,0 script #015-3_152_162 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 123,38; end; +} +015-3,171,161,0 script #015-3_171_161 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 147,39; end; +} +015-3,172,196,0 warp #015-3_172_196 0,0,014-3,120,122 +015-3,138,197,0 warp #015-3_138_197 0,0,015-3-1,80,23 +015-3,129,199,0 script #015-3_129_199 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 152,57; end; +} +015-3,119,196,0 script #015-3_119_196 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 134,58; end; +} +015-3,98,161,0 script #015-3_98_161 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 123,38; end; +} +015-3,123,39,0 script #015-3_123_39 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 152,163; end; +} +015-3,147,40,0 script #015-3_147_40 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 171,162; end; +} +015-3,152,56,0 script #015-3_152_56 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 129,198; end; +} +015-3,134,57,0 script #015-3_134_57 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 119,195; end; +} +015-3,64,74,0 script #015-3_64_74 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 47,61; end; +} +015-3,47,62,0 script #015-3_47_62 NPC_HIDDEN,0,0,{ + end; +OnTouch: + slide 64,73; end; +} diff --git a/npc/015-3/arkim.txt b/npc/015-3/arkim.txt new file mode 100644 index 0000000..64f22af --- /dev/null +++ b/npc/015-3/arkim.txt @@ -0,0 +1,252 @@ +// TMW2 scripts. +// Authors: +// Jesusalva +// Description: +// Heremit +// Variables: +// $ARKIM_ST +// How many Bat Teeth/Wings were given +// q1 +// Controls your own progress helping Arkim - Unused, might give place to some real quest later. +// q2 +// Controls your own progress helping Arkim - Items today +// q3 +// Controls your own progress helping Arkim - Your timer + +015-3,170,169,0 script Arkim NPC_TERRY,{ + function pmap_intro; + function pmap_wrong; + function pmap_right; + mesn; + mesq lg("Hello, young girl...", "Hello, young boy..."); + next; + +L_Loop: + .@q1=getq(HurnscaldQuest_Arkim); + .@q3=getq3(HurnscaldQuest_Arkim); + mesn; + mesq l("I am doing a great research with Bats, and thus far I collected @@ Bat Wings and Teeths.", $ARKIM_ST); + next; + // It was yesterday + if (.@q3 < $@ARKIM_QTIMER) { + setq2 HurnscaldQuest_Arkim, 0; + setq3 HurnscaldQuest_Arkim, $@ARKIM_QTIMER; + } + + // Daily limit reached + .@q2=getq2(HurnscaldQuest_Arkim); + if (.@q2 >= (BaseLevel-17)/3) goto L_Timer; + select + rif(countitem(BatWing) >= 1, l("Donate a Bat Wing")), + rif(countitem(BatTeeth) >= 1, l("Donate a Bat Teeth")), + l("I better leave this crazy man to his ordeals..."), + l("Had you any breakthrough?"); + mes ""; + + switch (@menu) { + case 1: + delitem BatWing, 1; + getexp 25, 0; + Zeny=Zeny+50; + break; + case 2: + delitem BatTeeth, 1; + getexp 36, 0; + Zeny=Zeny+70; + break; + case 3: + goto L_Assign; + close; // Will never reach. + break; + case 4: + goto L_Research; + break; + } + $ARKIM_ST=$ARKIM_ST+1; + setq2 HurnscaldQuest_Arkim, .@q2+1; + goto L_Loop; + +L_Timer: + if (BaseLevel < 20) + mesc l("You need at least level 20 to help."); + mesn; + mesq l("You've helped me plenty. Please come back in @@", FuzzyTime($@ARKIM_TIMER+(60*60*24),2,2)); + goto L_Assign; + close; // Will never reach. + +// TODO +L_Research: + mesn; + mesq l("Let me see... The more Wings and Teethes I collect, the more my research shall advance."); + next; + select + l("Thanks."), + rif($ARKIM_ST >= 1400, l("Cursed Arrows")), + rif($ARKIM_ST >= 2800, l("Poison Arrows")), + rif($ARKIM_ST >= 1200, l("Piberries Infusion")), + rif($ARKIM_ST >= 2600, l("Fate's Potion")), + rif($ARKIM_ST >= 4000, l("Clotho Liquor")), + rif($ARKIM_ST >= 4700, l("Lachesis Brew")), + rif($ARKIM_ST >= 6600, l("Atropos Mixture")), + rif($ARKIM_ST >= 7500, l("Dark Desert Mushroom")); + mes ""; + mesn; + + switch (@menu) { + case 1: + mesq l("Good bye!"); + goto L_Assign; + close; // Will never reach. + break; + case 2: + mesq l("The @@ are specially dangerous, and archers love them.", getitemlink(CursedArrow)); + next; + mesn; + mesq l("These are being crafted by Alan."); + break; + case 3: + mesq l("The @@ are specially dangerous, and archers love them.", getitemlink(PoisonArrow)); + next; + mesn; + mesq l("These are being crafted by Alan."); + break; + case 4: + case 5: + case 6: + case 7: + case 8: + mesq l("The @@ is a powerful healing drink.", getitemlink(PiberriesInfusion-4+@menu)); + next; + mesn; + + switch (@menu) { + case 4: + mesq l("@@ is developing these potions.", "Wyara"); break; + case 5: + mesq l("@@ is developing these potions.", "Fate, in Nivalis,"); break; // TODO: Missing NPC + case 6: + mesq l("@@ is developing these potions.", "Frostia Dwarves"); break; + case 7: + mesq l("@@ is developing these potions.", "Frostia Dwarves"); break; + default: + mesq l("@@ is developing these potions.", "Jesusalva"); // TODO: Lachesis and Atropos + break; + } + + break; + case 9: + mesq l("Ah! @@. A very rare drop!", getitemlink(DarkDesertMushrooom)); + next; + mesn; + mesq l("You can find it in the bandit market, but it is EXPENSIVE."); + break; + + } + next; + goto L_Research; + +L_Assign: + // NOTE: Map will be destroyed after first time, MAKE SURE TO MEMORIZE. + // Or you'll need to find ANOTHER copy, but this one won't be burned. + if (getq(HurnscaldQuest_PirateCave) >= 2 && countitem(PirateTreasureMap)) { + mesc l("Should we ask about the %s before leaving?", getitemlink(PirateTreasureMap)); + select + l("Ask."), + l("Don't ask."); + mes ""; + if (@menu == 1) goto L_PirateMap; + } + GHQ_Assign(Bat, "Bat"); + end; + +L_PirateMap: + .@q = getq(HurnscaldQuest_PirateCave); + if (.@q == 2) pmap_intro(); + else if (.@q == 3) pmap_intro(); + else if (.@q == 4) pmap_wrong(); + // IMPLICIT FALLTHROUGH + .@q = getq(HurnscaldQuest_PirateCave); + if (.@q == 5) pmap_right(); + close; + +function pmap_intro { + mesn; + mesq l("There's no one who knows Butterfly Caves better than me, child. These are MY caves, after all."); + next; + mesn; + mesc l("%s makes a confused face.", .name$); + mesq l("But your silly map must be wrong. These passages do not connect themselves like this, but this should not be an issue, as they're not relevant."); + next; + mesn; + mesq l("To reach this place... You just need to follow the path after the waterfall. Come back to me after that."); + compareandsetq HurnscaldQuest_PirateCave, 2, 3; + close; +} + +function pmap_wrong { + mesn; + mesq l("Welcome back, children. So, how was your treasure hunt? Did you manage to find the path?"); + next; + mesn strcharinfo(0); + select + l("NO!"), + l("Not at all!"), + l("You barely know these caves."), + l("You send me the wrong way."); + mes ""; + mesn; + mesq l("Calm down, don't get mad! I was wrong in trusting this map, it is definitely faulty. Lemme see it again..."); + if (!countitem(PirateTreasureMap)) close; // Last chance... + next; + mesn; + mesc l("%s eyebrow furrows, as he brings the map closer to a torch.", .name$); + mesq l("These paths are all wrong! What is the problem with this map?!"); + next; + mesc l("The map starts getting darker with the heat of the flame, and curiously, new shapes starts to form..."); + next; + mesn; + mesq l("Aha! So that's what it was! The map was hiding its secrets in drawings made with acid. An old technique... But a very useful one."); + next; + delitem PirateTreasureMap, 1; + setq HurnscaldQuest_PirateCave, 5; + getexp 0, 600; + mesc l("Suddenly, the map %s!", col(l("burst up in flames"), 1)); + mesc l("Seems like Arkim held it too close to the flame..."); + next; + mesn; + mes "\""+l("I have some good and some bad news for you."); + mes l("The good one, is that now I know the right path."); + mes l("The bad one, is that you'll have to guide yourself without the map.")+"\""; + next; + return; +} + +function pmap_right { + mes ".:: " + l("Direction for Pirate Caves") + " ::."; + mes "1. "+l("Go through the waterfall path."); + mes "2. "+l("Use the abandoned passage to the north... Usually, no one uses it."); + mes "3. "+l("After that, follow the path until you reach a great chamber..."); + mes "4. "+l("Then take the middle entrance."); + next; + mesn; + mesq l("I wish you good luck. I remember these caves... They're dangerous. Make sure to be prepared before venturing further."); + close; +} + +OnInit: + .sex=G_MALE; + .distance=5; + + $@ARKIM_QTIMER=gettimeparam(GETTIME_DAYOFMONTH); + $@ARKIM_TIMER=gettimetick(2); + $@ARKIM_TIMER-=gettime(1); + $@ARKIM_TIMER-=gettime(2)*60; + $@ARKIM_TIMER-=gettime(3)*3600; + end; + +OnHour00: + $@ARKIM_QTIMER=gettimeparam(GETTIME_DAYOFMONTH); + $@ARKIM_TIMER=gettimetick(2); + end; + +} diff --git a/npc/015-3/logic.txt b/npc/015-3/logic.txt new file mode 100644 index 0000000..0044017 --- /dev/null +++ b/npc/015-3/logic.txt @@ -0,0 +1,27 @@ +// TMW2 scripts. +// Authors: +// Diogo_RBG +// Jesusalva +// Description: +// Pirate Caves gateway main logic +// Adapted from TMW-BR for Moubootaur Legends + +015-3,128,161,0 script #0153WG1 NPC_HIDDEN,0,0,{ + end; +OnTouch: + compareandsetq HurnscaldQuest_PirateCave, 3, 4; + compareandsetq HurnscaldQuest_PirateCave, 5, 6; + slide 166, 38; + end; +} + +015-3,132,23,0 script #0153WG2 NPC_HIDDEN,0,0,{ + end; +OnTouch: + if (getq(HurnscaldQuest_PirateCave) >= 6) { + slide 98, 162; + } + end; +} + + diff --git a/npc/015-3/pooh.txt b/npc/015-3/pooh.txt new file mode 100644 index 0000000..fc14040 --- /dev/null +++ b/npc/015-3/pooh.txt @@ -0,0 +1,221 @@ +// TMW2 scripts. +// Author: +// Diogo RBG from TMW-BR +// Jesusalva +// Description: +// This is a very cute bear, it'll definitely earn your sympathy. +// Pooh (original) has became Public Domain in January 2022. + +015-3,127,181,0 script Pooh NPC_POOH,{ + function poohNear; + function poohFood; + function poohSmell; + inventoryplace BearHat, 1; + .@q = getq(HurnscaldQuest_TeddyBear); + mesc l("OMG so cute! This must be the cutest bear you ever seen your whole life."); + // Minimum level not met (does it even make sense? It is within Pirate Map) + if (BaseLevel < 39) + close; + mesc l("It seems to be concentrated on its small pot... So concentrated, it doesn't even realizes you're there."); + mesc l("This is so amusing, you decide to stare for a while longer."); + next; + // Quest already finished + if (.@q >= 3) { + mesc l("It then looks at you with a pleasant smile, you definitely earned a new cute friend!"); + close; + } + mesc l("And then you notice the small teddy is opening and closing the lid of this pot repeated times, as if it were looking for something."); + mesc l("You ask yourself: What is the teddy looking for? How can I help him?"); + compareandsetq HurnscaldQuest_TeddyBear, 0, 1; + next; + .@cont = false; + // Main menu + do + { + mesn strcharinfo(0); + select + l("Sing a song to brighten its mood."), + l("Pet his wonderfully fluffy pelt."), + l("Approach it softly."), + l("Offer food to it."), + l("Leave the poor thing in peace."); + mes ""; + switch (@menu) { + case 1: + mesc l("You sing a pretty song to the teddy, and this makes it very happy."); + mesc l("You know this, because their big round eyes were shining."); + next; + mesc l("However, this only distracts him for a short while. Soon after, he returns to his small ritual with the pot."); + next; + mesc l("Poor teddy, not even a pretty music can comfort him for long. What can we do now?"); + next; + break; + case 2: + mesc l("With a big smile, you stretch your hand in the teddy's direction; But the little one gets scared with the movement and starts to move away from you."); + next; + mesc l("You give up after seeing its reaction, and try your best to resist the temptation of hugging this fluffy ball. Maybe we have another idea?"); + next; + break; + case 3: + poohNear(); + next; + break; + case 4: + poohFood(); + .@cont = true; + break; + case 5: + mesc l("You leave the teddy alone with its pot."); + .@cont = true; + break; + default: + mesc "FIXME", 1; + next; + break; + } + } while (!.@cont); + close; + +function poohNear { + mesc l("You take off your bag and put it on the floor, as you lower yourself and try to slowly get close to it."); + next; + mesc l("But the teddy, noticing your movement, starts getting farther from you. It doesn't seems scared, but it doesn't allows you to approach either."); + next; + if (countitem(Honey) || countitem(BeeStinger)) { + poohSmell(); + return; + } + mesc l("Insisting will do us no good, maybe we should try to gain its trust first?"); + return; +} + +function poohFood { + mesc l("Maybe the teddy is hungry? What could we offer to it?"); + .@honey = false; + do + { + mes ""; + mes "##B" + l("Drag and drop a healing item from your inventory.") + "##b"; + + .@id = requestitem(); + + // If ID is invalid, there's not enough items, it is bound, etc; + if (.@id < 1) return; + if (.@id < 1 || countitem(.@id) < 1 || checkbound(.@id) || getiteminfo(.@id, ITEMINFO_TYPE) != IT_HEALING) { + if (checkbound(.@id)) { + mesc l("You cannot part with this item!"); + } else if (.@id == DeathPotion || .@id == NymphPoison) { + mesc l("...Are you crazy?"); + } else if (.@id == MagicApple || .@id == MysteriousFruit) { + mesc l("This is too precious to offer, I think."); + } else if (getiteminfo(.@id, ITEMINFO_TYPE) != IT_HEALING) { + mesc l("I'm not sure if that's edible. For teddies, at least."); + } else { + mesc l("You give up."); + mesc l("Maybe it is not hungry, after all."); + return; + } + next; + continue; + } + + // Bad healing items + if (.@id == Beer || + .@id == RedPlushWine || + .@id == DwarvenSake || + .@id == CrazyRum || + .@id == WhiskeyAle) { + mesc l("Offering alcohol to a teddy seems like a ugly thing to do. We should think on something else."); + next; + continue; + } else if (.@id == ElixirOfLife) { + mesc l("...I don't think the teddy is sick, so there's no point giving it an Elixir."); + next; + continue; + } else if (.@id == BottleOfSewerWater) { + mesc l("...I refuse to comment on this ridiculous idea."); + next; + continue; + } else if (.@id == Honey) { + .@honey = true; + break; + } + + mesc l("Really give your %s to the teddy?", getitemlink(.@id)), 1; + mesc l("The item will be lost forever."); + if (askyesno() == ASK_YES) { + mes ""; + mesc l("The teddy stares at it but does not approach. Maybe it is not hungry, or it doesn't want the food you offered."); + // Item is NOT deleted because it did not approach + next; + } + } while (!.@honey); + // You're offering HONEY! But we must check if you CAN do this + if (getq(HurnscaldQuest_TeddyBear) < 2) { + percentheal -2, 0; + SC_Bonus(15, SC_POISON, 1); + getmapxy(.@m$, .@x, .@y, 0); + .@u = monster(.@m$, .@x, .@y, strmobinfo(1, Bee), Bee, 1); + unitattack(.@u, getcharid(3)); + closeclientdialog; + dispbottom l("Suddenly, a bee appears and attacks you out of NOWHERE!"); + end; // TERM + } + // You can, so we go ahead. + mesc l("Our plushy friend knows what is really sweet on this life. It likes honey a great deal, and by the way it looks you, it probably wants more."); + next; + mesc l("It is... SO CUTE! You won't refuse honey to a teddy, will you?"); + mesc l("How much honey will you give it? (You have: %d)", countitem(Honey)), 3; + input .@honey, 0, countitem(Honey); + if (.@honey < 1) return; + delitem Honey, .@honey; + setq2 HurnscaldQuest_TeddyBear, getq2(HurnscaldQuest_TeddyBear) + .@honey; + getexp 0, .@honey * 14; + mesc l("The teddy quickly takes the honey and fills the pot. It is really hungry!"); + if (getq2(HurnscaldQuest_TeddyBear) >= 27) { + mesc l("...And at long last, the teddy's pot is full of honey."); + mesc l("It seems happy, but it quickly goes to a dark honey after finishing."); + next; + mesc l("When it returns, it is holding a cute %s. Understanding it is a gift, you take it.", getitemlink(BearHat)); + mesc l("Doesn't it feel good to help?"); + getitem BearHat, 1; + setq HurnscaldQuest_TeddyBear, 3; + // Half of needed exp, but treasure map may require more level + getexp 15750, 9200; // Job Exp: Lv 28 as reference + } + return; +} + +function poohSmell { + mesc l("But the teddy unexpectedly starts moving towards your bag, possibly attracted by some smell. You give up on approaching it, and starts watching it."); + next; + if (@stingpooh) { + mesc l("However, it stops abruptly and quickly moves away from it."); + mesc l("I guess it still remembers the sting on the snout. Ouch!"); + return; + } + mesc l("Without any ceremony or further ado, the teddy starts poking on your things."); + next; + if (countitem(BeeStinger)) { + mesc l("However, it comes back crying! Poor teddy, it got attracted by a sweet smell but it found a %s instead!", getitemlink(BeeStinger)); + delitem BeeStinger, 1; + @stingpooh = true; + next; + mesc l("Unsatisfied, it goes away from you and your bag. Such a shame, we almost had got its trust."); + return; + } + mesc l("After turning it upside down, it finds something which makes it really happy: %s! And there's nothing a teddy likes more than honey.", getitemlink(Honey)); + next; + mesc l("The teddy picks it and goes running to somewhere it can eat in peace. Now we know how we can please our little friend - with %s! How we didn't think on that before?!", getitemlink(Honey)); + delitem Honey, 1; + compareandsetq HurnscaldQuest_TeddyBear, 1, 2; + setq2 HurnscaldQuest_TeddyBear, getq2(HurnscaldQuest_TeddyBear) + 1; + getexp 0, 14; + return; +} + +OnInit: + .sex = G_OTHER; + .distance = 4; + end; +} |