diff options
Diffstat (limited to 'npc/008-2-4')
-rw-r--r-- | npc/008-2-4/_import.txt | 7 | ||||
-rw-r--r-- | npc/008-2-4/_savepoints.txt | 15 | ||||
-rw-r--r-- | npc/008-2-4/_warps.txt | 3 | ||||
-rw-r--r-- | npc/008-2-4/bernard.txt | 222 | ||||
-rw-r--r-- | npc/008-2-4/mapflags.txt | 1 | ||||
-rw-r--r-- | npc/008-2-4/olana.txt | 321 |
6 files changed, 569 insertions, 0 deletions
diff --git a/npc/008-2-4/_import.txt b/npc/008-2-4/_import.txt new file mode 100644 index 00000000..826aa135 --- /dev/null +++ b/npc/008-2-4/_import.txt @@ -0,0 +1,7 @@ +// Map 008-2-4: The Rusty Pick +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-2-4/_savepoints.txt", +"npc/008-2-4/_warps.txt", +"npc/008-2-4/bernard.txt", +"npc/008-2-4/mapflags.txt", +"npc/008-2-4/olana.txt", diff --git a/npc/008-2-4/_savepoints.txt b/npc/008-2-4/_savepoints.txt new file mode 100644 index 00000000..0129971e --- /dev/null +++ b/npc/008-2-4/_savepoints.txt @@ -0,0 +1,15 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-2-4: The Rusty Pick saves +008-2-4,25,27,0 script #save_008-2-4_25_27 NPC_SAVE_POINT,0,0,{ + savepointparticle .map$, .x, .y, NO_INN; + close; + +OnInit: + .distance = 2; + .sex = G_OTHER; + end; + +OnTouch: + bedTouch(); + end; +} diff --git a/npc/008-2-4/_warps.txt b/npc/008-2-4/_warps.txt new file mode 100644 index 00000000..2d8336f7 --- /dev/null +++ b/npc/008-2-4/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-2-4: The Rusty Pick warps +008-2-4,44,28,0 warp #008-2-4_44_28 0,0,008-2-2,25,29 diff --git a/npc/008-2-4/bernard.txt b/npc/008-2-4/bernard.txt new file mode 100644 index 00000000..a7cd2382 --- /dev/null +++ b/npc/008-2-4/bernard.txt @@ -0,0 +1,222 @@ +// Evol scripts. +// Author: +// gumi +// Quest states: +// [1] 0 - cannot do the quest +// [1] 1 - can do the quest +// [1] 2 - bernard wants roasted maggot +// [1] 3 - brought maggot +// [1] 4 - bernard wants maggot slime +// [1] 5 - brought maggot slime +// [1] 6 - mikhail needs maggot slime +// [1] 7 - brought maggot slime +// [2] unused +// [3] unused +// [t] unused +// Description: +// Bernard wants to make a maggot slime soup + +008-2-4,34,29,0 script Bernard NPC_BERNARD,{ + + if (BaseLevel < .min_level) + { + npctalk3 generic(16 | 32); + end; + } + + function soup_intro { + if (rand(2) == 1) + { + speech 4, + l("The fields are crawling with maggots."), + l("Where is Mikhail?"), + l("What is taking them so long?"), + l("Could I ask a favor of you?"); + } + else + { + speech 4, + l("The taste of maggots in soup is... unforgettable."), + l("They taste simply divine!"), + l("I sent someone to kill me some maggots and they have yet to return."), + l("Would you help me kill some?"); + } + + if (selectd(l("Yes."), l("No.")) == 2) + { + return; + } + + if (rand(2) == 1) + { + speech 4, + l("Great!"), + l("I need a %s for my soup.", getitemlink(.first_item)); + } + else + { + speech 4, + l("Bring me a %s.", getitemlink(.first_item)), + l("I'll give you something if you do."); + } + + speech 8, + l("Please bring it to me!"); + + setq .quest, 2; + close; + } + + function soup_reminder_roasted { + speech + l("Oh, please hurry and bring me a %s.", getitemlink(.first_item)), + l("I'm yearning for maggot soup!"); + close; + } + + function soup_no_room { + speech 1 | 8, + "...", + l("It seems you don't have room for my reward."), + l("I'll wait until you do."); + close; + } + + function soup_reward_roasted { + speech 4, + l("Oooh, perfect! It's perfect!"), + l("You brought me my %s!", getitemlink(.first_item)), + l("Here, have some %s for your troubles.", + getitemlink(.first_reward_item)); + + if (checkweight(.first_reward_item, .first_reward_amount) != true) + soup_no_room; + + if (countitem(.first_item) < 1) + close; + + delitem .first_item, 1; + quest_item(.maxLevel, .first_reward_item, .first_reward_amount); + quest_xp(.maxLevel, .first_reward_exp); + setq .quest, 3; + + speech 8, + l("Now let's see..."); + close; + } + + function soup_ask_slime { + speech + l("Thank you so much!"), + l("But... something is missing to make the soup creamy."), + l("I need %d %s for that.", + .second_item_qty, getitemlink(.second_item)), + l("Bring them to me, and I'll give you something nice."); + + setq .quest, 4; + close; + } + + function soup_reminder_slime { + speech + l("Please do hurry and bring me %d %s, so I can finish my soup!", + .second_item_qty, getitemlink(.second_item)); + close; + } + + function soup_reward_slime { + speech + l("Nice!"), + l("They're perfect, just perfect!"), + l("You brought me the %d %s!", + .second_item_qty, getitemlink(.second_item)), + l("Here, have some %s as reward.", + getitemlink(.second_reward_item)); + + if (checkweight(.second_reward_item, .second_reward_amount) != true) + soup_no_room; + + if (countitem(.second_item) < .second_item_qty) + close; + + delitem .second_item, .second_item_qty; + quest_item(.maxLevel, .second_reward_item, .second_reward_amount); + quest_xp(.maxLevel, .second_reward_exp); + setq .quest, 5; + + close; + } + + function soup_thanks_slime { + speech + l("I didn't mention it before, but I also put beer in my soup."), + l("I hope you like beer as much as I do, because, you see..."), + l("Beer is life!"); + close; + } + + function soup_thanks_mikhail { + speech + l("My help, Mikhail, finally returned with the slimes I needed."), + l("I wonder what took him so long?"); + close; + } + + + // OnTalk: + switch (getq(.quest)) + { + case 0: + case 1: soup_intro; break; + case 2: + if (countitem(.first_item) < 1) + soup_reminder_roasted; + else + soup_reward_roasted; + break; + case 3: soup_ask_slime; break; + case 4: + if (countitem(.second_item) < .second_item_qty) + soup_reminder_slime; + else + soup_reward_slime; + break; + case 5: + case 6: soup_thanks_slime; break; + default: soup_thanks_mikhail; + } + + closeclientdialog(); + close; + +OnPCLoginEvent: +OnPCBaseLvUpEvent: + if (BaseLevel >= .min_level && getq(.quest) < 1) + { + setq .quest, 1; // allow the player to do the quest + dispbottom l("New quest available: %s (level %d+)", + getquestlink(.quest), .min_level); // XXX: requires new manaplus versions, maybe show a different message for old versions? + } + end; + +OnInit: + .min_level = 10; // min level to do the quest + .maxLevel = 30; + + .first_item = RoastedMaggot; + .first_reward_item = CherryCake; + .first_reward_amount = 5; + .first_reward_exp = 100; + + .second_item = MaggotSlime; + .second_item_qty = 3; + .second_reward_item = Beer; + .second_reward_amount = 3; + .second_reward_exp = 100; + + .quest = HurnscaldQuests_Soup; + .quest_debug = .quest; + .distance = 3; + + end; +} diff --git a/npc/008-2-4/mapflags.txt b/npc/008-2-4/mapflags.txt new file mode 100644 index 00000000..cd86a1e4 --- /dev/null +++ b/npc/008-2-4/mapflags.txt @@ -0,0 +1 @@ +008-2-4 mapflag town diff --git a/npc/008-2-4/olana.txt b/npc/008-2-4/olana.txt new file mode 100644 index 00000000..4c42f599 --- /dev/null +++ b/npc/008-2-4/olana.txt @@ -0,0 +1,321 @@ +// The Mana World scripts. +// Author: +// Micksha +// Jesusalva +// Alastrim +// Ali-g +// Dark Mage +// Description: +// Olana, the old woman who is looking for her daughter Rossy and Juliet. +// HurnscaldQuests_Rossy +// 0 - Quest Not Assigned +// 1 - Asked to look for Rossy + + +008-2-4,30,28,0 script Olana NPC_OLANA,{ + function olanaIntro; + function olanaIntroDone; + function olanaRossyLie; + function olanaDeliverBerries; + function olanaGetLetter; + function olanaRossyGoodGirl; + function olanaRossyBadMom; + function olanaRossyHappy; + .@q=getq(HurnscaldQuests_Rossy); + if (BaseLevel < .minLevel) + .@q = -1; // Hard Reset + mesn; + mesq l("Oh, a traveler. Welcome."); + next; + switch (.@q) { + case 0: + olanaIntro(); + break; + case 1: + olanaIntroDone(); + break; + case 2: + olanaRossyLie(); + break; + case 3: + mesc l("%s smiles at you, but she still seems preoccupied.", .name$); + next; + mesc l("Rossy was collecting fruits, right? Maybe she has some idea on how to cheer her mother up?"); + break; + case 4: + olanaDeliverBerries(); + break; + case 5: + olanaGetLetter(); + break; + case 6: + case 7: + case 8: + case 9: + mesn; + mesq l("Please bring Hocus' letter to my daughter as fast as you can."); + break; + case 10: + olanaRossyGoodGirl(); + break; + case 11: + mesn; + mesc l("%s says absently-minded, while staring at a portrait of her daughters, Rossy and Juliet:"); + mesq l("Could you do me a favor? Could you bring her %d %s? I am sure she will love them!", 15, getitemlink(ARedRose)); + break; + case 12: + olanaRossyBadMom(); + break; + case 13: + mesn; + mesq l("Please, tell Rossy I am really sorry and buy her Red Tulips instead, the same amount - %d, her age.", 15); + break; + case 14: + olanaRossyHappy(); + break; + case 15: + case 16: + mesn; + mesq l("Where is Juliet? I want to know where she is! Please find her, %s!", strcharinfo(0)); + break; + case 17: + mesn; + mesq l("Juliet got home sound and safe thanks to you, %s. I'll be eternally grateful.", strcharinfo(0)); + next; + mesn; + mesq l("Rossy and Juliet are out there, playing again. Please, feel free to play with them or to come here for a cup of water."); + break; + default: + speech + l("Did you see my daughters Rossy and Juliet, by chance?"), + l("She wasn't at home for two days now. I worry about her!"), + l("If you see her, please tell her to come home."); + } + close; + +function olanaIntro { + mesn; + mesq l("This is a private room from the Rusty Pick. You see, my father owns this inn."); + next; + mesn; + mesq l("I moved to Tulimshar so my daughters – Rossy and Juliet – could learn magic, but we come back to Hurnscald on occasion."); + next; + mesn; + mesc l("Olana suddenly looks very pale and starts to shiver."); + mesq l("Which reminds me - I let my two lovely girls play in the woods nearby but they haven't come back yet!"); + next; + mesn; + mesq l("These forests are not safe; I am afraid they might have wandered in the swamps by accident."); + next; + mesn; + mesq l("Could you pretty please see if they're fine? I can book you this inn for a night after that."); + next; + if (askyesno() == ASK_NO) { + mesn; + mesq l("Well, you *do* look weak, I guess I would get worried if you went after them and ended up lost and on the swamps."); + next; + mesn; + mesq l("But if you change your mind, please, call me again."); + return; + } + mesn; + mesq l("Excellent! I am counting on you!"); + setq HurnscaldQuests_Rossy, 1; + return; +} + +function olanaIntroDone { + mesn; + mesq l("My daughters – Rossy and Juliet – went to play in the woods but haven't come back yet."); + next; + mesn; + mesq l("Could you pretty please see if they're fine? I can book you this inn for a night after that."); + return; +} + +function olanaRossyLie { + mesn; + mesq l("Have you found my daughters yet? %%i"); + next; + select + l("No, sorry, I'll keep looking."), + l("I saw Rossy, she is fine."), + l("Yes, a snail attacked them."); + mes ""; + if (@menu == 1) { + mesn; + mesq l("Please do, I'm worried about them...."); + return; + } + if (@menu == 3) { + mesn; + mesq l("Oh noes!!!!"); + next; + mesc l("%s faints.", .name$); + mesc l("Maybe we could have told her that in a better way."); + return; + } + mesn; + mesq l("Oh you did? That's good. I'm relieved. But what about Juliet?"); + next; + select + l("I haven't found Juliet yet, sorry."), + l("Well, Rossy told both of them were fine..."); + mes ""; + mesn; + mesq l("Ok. They must be playing hide and seek. Thanks again... I can't express how grateful I am."); + next; + setq HurnscaldQuests_Rossy, 3; + mesn; + mesq l("I'll now book you a room on the Inn."); + select + l("Thanks."), + l("Actually, please don't. I do this out of the goodness of my heart."); + mes ""; + // Do not register the inn + if (@menu == 2) { + mesn; + mesq l("Oh... Okay, then!"); + return; + } + // Register the inn + INN_REGISTER = RUSTYPICK_INN; + PC_IS_DEAD = false; + savepoint "008-2-4", 26, 27; + return; +} + +function olanaDeliverBerries { + mesn; + mesq l("Hello there."); + next; + select + l("Erm, hi."), + l("Hi, Rossy asked me to give you this. She says it is a gift from both her and Juliet."); + mes ""; + if (@menu == 1) + return; + mesn; + mesq l("Ohhh... How sweet... Sometimes Rossy impresses me with her kindness. Here... You are spending so much time helping us, and we give nothing back. Take this as a small reward."); + quest_xp(.maxLevel, 2000); + quest_jxp(.maxLevel, 200); + quest_gp(.maxLevel, 10000); + setq HurnscaldQuests_Rossy, 5; + next; + mesn; + mesq l("Could you do me a small favor, though? I know I barely know you, and you must be very busy, but..."); + next; + olanaGetLetter(); + return; +} + +function olanaGetLetter { + mesn; + mesq l("Would you mind giving this letter to my little Rossy? You see, Rossy and Juliet are enrolled at Tulimshar Magic School..."); + next; + mesn; + mesq l("Rossy is doing alchemy, and I received a letter signed by Hocus, the Grandmaster. She did not submit her exam before we travelled, and now she is running out of time..."); + next; + mesn; + mesq l("Pretty please?"); + next; + if (askyesno() == ASK_NO) + return; + mesn; + mesq l("Thank you again. Please, bring it to her as fast as you can."); + setq HurnscaldQuests_Rossy, 6; + return; +} + +function olanaRossyGoodGirl { + mesn strcharinfo(0); + select + l("Rossy passed her exam."); + mes ""; + mesn; + mesq l("That's a relief to hear! I'm so proud of her."); + next; + mesn; + mesq l("Could you do me a favor? Could you bring her %d %s? I am sure she will love them!", 15, getitemlink(ARedRose)); + next; + select + l("Okay, I'll get the roses and give them to her."), + l("What? No way!"); + mes ""; + if (@menu == 2) + return; + mesn; + mesq l("I know this won't be enough, but here is %d E to help you.", 50); + next; + mesn; + mesq l("After you get them, please deliver them to my brilliant daughter, Rossy."); + Zeny+=50; + setq HurnscaldQuests_Rossy, 11; + return; +} + +function olanaRossyBadMom { + mesn; + mesq l("Did she like my present?"); + next; + select + l("Sure she did..."), + l("Well, you should have known that your daughter is allergic to roses."); + mes ""; + if (@menu == 1) { + mesn; + mes "%%H"; + return; + } + mesn; + mesq l("Oh, how stupid I am! Here, take some of my money and buy Red Tulips instead, the same amount. Keep the flowers."); + next; + mesn; + mesq l("Please, tell Rossy I am really sorry. My mind was on Juliet when I asked you to bring the red roses — they are her favorite."); + next; + mesn strcharinfo(0); + select + l("I will give her the tulips when I see her."); + mes ""; + mesn; + mesq l("Thank you. And don't forget to tell her that I'm really sorry."); + Zeny+=450; + setq HurnscaldQuests_Rossy, 13; + return; +} + +function olanaRossyHappy { + mesn; + mesq l("So?"); + next; + select + l("Rossy was happy with your gift, and asked me to say you are the nicest mother in the world."); + mes ""; + mesn; + mesq l("I'm so glad to hear that! But, have you seen Juliet too, by any chance?"); + next; + select + l("Erm, no, sorry."), + l("I'm sure she is fine."); + mes ""; + mesn; + mesq l("For some reason, I can't get off my mind she is in danger... Motherly instincts."); + next; + mesn; + mesq l("For now, I should reward you for all your effort thus far."); + .@item=any(Diamond, Ruby, Emerald, Sapphire, Topaz, Amethyst); + inventoryplace .@item, 1; + setq HurnscaldQuests_Rossy, 15; + getitem .@item, 1; + next; + mesn; + mesq l("But please, could you look for Juliet as well? I'm starting to get deeply worried, here."); + return; +} + +OnInit: + .distance = 4; + .minLevel = 40; + .maxLevel = 80; // Differs from Juliet/Rossy + end; +} |