diff options
Diffstat (limited to 'npc/011-1_Woodland/alchemist.txt')
-rw-r--r-- | npc/011-1_Woodland/alchemist.txt | 384 |
1 files changed, 286 insertions, 98 deletions
diff --git a/npc/011-1_Woodland/alchemist.txt b/npc/011-1_Woodland/alchemist.txt index e66ec84d..6564a3df 100644 --- a/npc/011-1_Woodland/alchemist.txt +++ b/npc/011-1_Woodland/alchemist.txt @@ -9,18 +9,11 @@ set @Q_MASK, NIBBLE_3_MASK; set @Q_SHIFT, NIBBLE_3_SHIFT; + set @wants_sulphur, (QUEST_MAGIC & (NIBBLE_6_MASK | NIBBLE_7_MASK)); + set @wants_ironpowder, (((QUEST_MAGIC & (NIBBLE_6_MASK | NIBBLE_7_MASK)) >> NIBBLE_6_SHIFT) >= 7); set @Q_status, (QUEST_Forestbow_state & @Q_MASK) >> @Q_SHIFT; // End of Setzer quest/monster oil quest participation - set @RED, 683; - set @YELLOW, 682; - set @BLUE, 681; - set @MAUVE, 680; - set @PETAL, 565; - set @PEARL, 700; - set @ORE, 640; - set @MAGGOTSLIME, 505; - set @QUEST_CAN_GET_DYE_HERE, 2; set @QUEST_HAS_SOLVED_DYE_PUZZLE, 3; set @QUEST_GUESS_BASE, 4; @@ -30,9 +23,12 @@ set @CHOICE_DYEING_INTRO, 2; set @CHOICE_DYE, 3; set @CHOICE_MONSTER_OIL, 4; - set @CHOICE_ABORT, 5; + set @CHOICE_MANA_POTION, 5; + set @CHOICE_SULPHUR_POWDER, 6; + set @CHOICE_IRON_POWDER, 7; + set @CHOICE_ABORT, 8; - setarray @menuitems$, "", "", "", "", ""; + setarray @menuitems$, "", "", "", "", "", "", "", ""; set @c, 0; set @menuitems$[@c], "Iron potion."; @@ -43,6 +39,13 @@ set @menuID[@c], @CHOICE_CONCENTRATION; set @c, @c + 1; + if (!(MAGIC_FLAGS & MFLAG_KNOWS_MANAPOTION)) + goto L_post_mana_potion_c; + set @menuitems$[@c], "Mana potion."; + set @menuID[@c], @CHOICE_MANA_POTION; + set @c, @c + 1; +L_post_mana_potion_c: + if (QUEST_clothdyer_knowsdye >= @QUEST_CAN_GET_DYE_HERE) goto L_skip_introducing; @@ -70,30 +73,49 @@ L_skip_introducing: set @c, @c + 1; goto L_certain_condition; - L_pre_dyeing: + set @menuitems$[@c], "Actually, can you make dye?"; set @menuID[@c], @CHOICE_DYEING_INTRO; set @c, @c + 1; - L_certain_condition: + + if (!@wants_sulphur) + goto L_post_sulphur_option; + set @menuitems$[@c], "Can you make sulphur powder?"; + set @menuID[@c], @CHOICE_SULPHUR_POWDER; + set @c, @c + 1; +L_post_sulphur_option: + + if (!@wants_ironpowder) + goto L_post_ironpowder_option; + set @menuitems$[@c], "Can you make iron powder?"; + set @menuID[@c], @CHOICE_IRON_POWDER; + set @c, @c + 1; +L_post_ironpowder_option: + if (@Q_status == @SETZER_INITIAL) - goto L_main_menu; + goto L_post_monster_oil; set @menuitems$[@c], "Can you make monster oil?"; set @menuID[@c], @CHOICE_MONSTER_OIL; set @c, @c + 1; -L_main_menu: +L_post_monster_oil: set @menuitems$[@c], "No thanks."; set @menuID[@c], @CHOICE_ABORT; set @c, @c + 1; +L_main_menu: + menu @menuitems$[0], -, @menuitems$[1], -, @menuitems$[2], -, @menuitems$[3], -, - @menuitems$[4], -; + @menuitems$[4], -, + @menuitems$[5], -, + @menuitems$[6], -, + @menuitems$[7], -; set @menu, @menu - 1; @@ -103,36 +125,202 @@ L_main_menu: if (@menuID[@menu] == @CHOICE_DYEING_INTRO) goto L_dyeing_intro; if (@menuID[@menu] == @CHOICE_DYE) goto L_pick_colour; if (@menuID[@menu] == @CHOICE_MONSTER_OIL) goto L_monster_oil; + if (@menuID[@menu] == @CHOICE_MANA_POTION) goto L_mana_potion; + if (@menuID[@menu] == @CHOICE_SULPHUR_POWDER) goto L_sulphur; + if (@menuID[@menu] == @CHOICE_IRON_POWDER) goto L_iron_powder; if (@menuID[@menu] == @CHOICE_ABORT) goto L_abort; + goto L_abort; + +L_iron_powder: + mes "[Rauk the Alchemist]"; + mes "\"Iron powder? Hmm, I can extract some iron powder out of a chunk of iron ore, but that will require me to dissolve it. If you give me a chunk of iron ore and 100 GP for the acid, I can do it.\""; + next; + menu + "Never mind.", L_abort, + "Here you are!", -; + + if (countitem("IronOre") < 1) + goto L_iron_powder_noore; + if (zeny < 100) + goto L_iron_powder_nozeny; + getinventorylist; + if (@inventorylist_count == 100 + && countitem("IronOre") > 1 + && countitem("IronPowder") < 1) + goto L_iron_powder_full; + delitem "IronOre", 1; + set zeny, zeny - 100; + getitem "IronPowder", 4; + mes "[Rauk the Alchemist]"; + mes "Rauk places your chunk of ore in a strange glass container, then pours a steaming yellow liquid over it. Before your eyes, the ore dissolves."; + next; + + mes "[Rauk the Alchemist]"; + mes "Rauk pours another liquid over the resultant mixture, then pours the result through a piece of cloth placed in a funnel, followed by a cup of water. He removes the residual metal powder from the cloth and hands it to you."; + mes "\"This is about as fine as I can make it without mechanical help.\""; + next; + + close; + +L_iron_powder_noore: + mes "[Rauk the Alchemist]"; + mes "\"I do need a chunk of iron ore. Please return when you have one.\""; + next; + close; + +L_iron_powder_nozeny: + mes "[Rauk the Alchemist]"; + mes "\"I'm sorry, but I must ask that you pay 100 GP-- the acid I use is not cheap.\""; + next; + close; + +L_iron_powder_full: + mes "[Rauk the Alchemist]"; + mes "\"I don't think that you have room to carry this. Please come back later.\""; + next; + close; + +L_sulphur: + mes "[Rauk the Alchemist]"; + mes "\"Oh, that is easy. Bring me three piles of volcanic ash and three mauve leaves, and I will extract twelve piles of sulphur ash for you.\""; + next; + menu + "I will be back.", L_abort, + "No, I won't!", L_abort, + "Here you are!", -; + + if (countitem("PileOfAsh") < 3) goto L_sulphur_noash; + if (countitem("MauveHerb") < 3) goto L_sulphur_nomauve; + getinventorylist; + if (@inventorylist_count == 100 + && countitem("SulphurPowder") == 0 + && countitem("PileOfAsh") > 3 + && countitem("MauveHerb") > 3) + goto L_sulphur_nospace; + + delitem "PileOfAsh", 3; + delitem "MauveHerb", 3; + getitem "SulphurPowder", 12; + mes "[Rauk the Alchemist]"; + mes "You watch Rauk burn the mauve leaves in the midst of the ashes. He then dissolves the result and pours it through a filter, finally heating up the residual liquid."; + next; + mes "[Rauk the Alchemist]"; + mes "The water having evaporated, only some yellow powder is left over. Rauk carefully pours it into your hand."; + mes "\"This should be precisely twelve half-ounces of sulphur powder.\""; + next; + close; + +L_sulphur_noash: + mes "[Rauk the Alchemist]"; + mes "\"You don't seem to have all three piles of volcanic ash.\""; + next; + close; + +L_sulphur_nomauve: + mes "[Rauk the Alchemist]"; + mes "\"You don't seem to have the three mauve leaves I asked for.\""; + next; + close; + +L_sulphur_nospace: + mes "[Rauk the Alchemist]"; + mes "\"Oh dear. You don't seem to be able to carry the sulphur powder.\""; + next; + close; + +L_mana_potion: + mes "[Rauk the Alchemist]"; + mes "\"Humh... I do believe that I have a recipe somewhere. One moment...\""; + mes "Rauk pulls a small book out of his sleeve and leafs through it."; + mes "\"Aha, here we are. Hmm, I'm not convinced that this is the best possible recipe...\""; + next; + mes "[Rauk the Alchemist]"; + mes "\"I shall need one pearl, one bottle of water, thirty mauve leaves, twenty gamboge leaves, and five piles of volcanic ash.\""; + next; + + menu "Here you are!", L_get_mana_potion, + "Never mind.", L_main_menu; + + goto L_main_menu; + +L_get_mana_potion: + if(countitem("MauveHerb") < 30) goto L_mana_potion_lacking; + if(countitem("GambogeHerb") < 20) goto L_mana_potion_lacking; + if(countitem("PileOfAsh") < 5) goto L_mana_potion_lacking; + if(countitem("Pearl") < 1) goto L_mana_potion_lacking; + if(countitem("BottleOfWater") < 1) goto L_mana_potion_lacking; + getinventorylist; + if ((@inventorylist_count == 100) + && (countitem("MauveHerb") > 30) + && (countitem("PileOfAsh") > 5) + && (countitem("Pearl") > 1) + && (countitem("BottleOfWater") > 1) + && (countitem("ManaPotion") < 1)) + goto L_mana_potion_toomuch; + + delitem "MauveHerb", 30; + delitem "GambogeHerb", 20; + delitem "PileOfAsh", 5; + delitem "Pearl", 1; + delitem "BottleOfWater", 1; + getitem "ManaPotion", 1; + + mes "[Rauk the Alchemist]"; + mes "Rauk grinds the leaves, then crushes the pearl. Taking out a small charcoal oven, he heats up your water bottle and dissolves first the pearl powder, then the ashes."; + mes "The brew begins to bubble violently."; + next; + + mes "[Rauk the Alchemist]"; + mes "Taking the bottle with a pair of tongs, he pours the liquid through a fine sieve, discarding the liquid."; + mes "He then mixes the residual paste with the leaves, stirs in a little water from the pond and fills the result into a separate bottle."; + next; + + mes "[Rauk the Alchemist]"; + mes "\"Here you are. I hope that this is what you wanted.\""; + next; + + goto L_main_menu; + +L_mana_potion_toomuch: + mes "[Rauk the Alchemist]"; + mes "\"You look quite burdened already. Why don't you drop off a few things first, and come back later?\""; + next; + goto L_main_menu; + +L_mana_potion_lacking: + mes "[Rauk the Alchemist]"; + mes "\"Sorry, but I need one [pearl], one [bottle of water], 30 [mauve leaves], 20 [gamboge leaves], and five piles of [volcanic ash].\""; + next; + goto L_main_menu; L_iron: - if(countitem(566) < 20) goto L_no_iron; + if(countitem("SmallMushroom") < 20) goto L_no_iron; getinventorylist; - if (@inventorylist_count == 100 && countitem(566) > 20) goto L_TooMany; + if (@inventorylist_count == 100 && countitem("SmallMushroom") > 20) goto L_TooMany; mes "[Rauk the Alchemist]"; mes "\"Great! You brought me exactly what I need!"; mes "Here is your Iron potion.\""; - delitem 566,20; - getitem 567,1; + delitem "SmallMushroom", 20; + getitem "IronPotion", 1; close; L_concentration: - if(countitem(565) < 20) goto L_no_concentration; + if(countitem("Petal") < 20) goto L_no_concentration; getinventorylist; - if (@inventorylist_count == 100 && countitem(565) > 20) goto L_TooMany; + if (@inventorylist_count == 100 && countitem("Petal") > 20) goto L_TooMany; mes "[Rauk the Alchemist]"; mes "\"Great! You brought me exactly what I need!"; mes "Here is your Concentration potion.\""; - delitem 565,20; - getitem 568,1; + delitem "Petal", 20; + getitem "ConcentrationPotion", 1; close; L_no_iron: - mes "\"You have to bring me 20 small mushrooms.\""; + mes "\"You have to bring me 20 [small mushrooms].\""; close; L_no_concentration: - mes "\"You have to bring me 20 petals.\""; + mes "\"You have to bring me 20 [petals].\""; close; L_dyeing_intro: @@ -262,11 +450,11 @@ L_ok: goto L_pick_colour; L_red: - if (countitem(@RED) < 10) goto L_red_fail; + if (countitem("AlizarinHerb") < 10) goto L_red_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@RED) > 10) goto L_TooMany; - delitem @RED, 10; - getitem 690, 1; + if (@inventorylist_count == 100 && countitem("AlizarinHerb") > 10) goto L_TooMany; + delitem "AlizarinHerb", 10; + getitem "RedDye", 1; goto L_ok; L_red_fail: @@ -282,11 +470,11 @@ L_d_red: goto L_intermediate; L_yellow: - if (countitem(@YELLOW) < 10) goto L_yellow_fail; + if (countitem("GambogeHerb") < 10) goto L_yellow_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@YELLOW) > 10) goto L_TooMany; - delitem @YELLOW, 10; - getitem 693, 1; + if (@inventorylist_count == 100 && countitem("GambogeHerb") > 10) goto L_TooMany; + delitem "GambogeHerb", 10; + getitem "YellowDye", 1; goto L_ok; L_yellow_fail: @@ -302,11 +490,11 @@ L_d_yellow: goto L_intermediate; L_light_blue: - if (countitem(@BLUE) < 10) goto L_light_blue_fail; + if (countitem("CobaltHerb") < 10) goto L_light_blue_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@BLUE) > 10) goto L_TooMany; - delitem @BLUE, 10; - getitem 694, 1; + if (@inventorylist_count == 100 && countitem("CobaltHerb") > 10) goto L_TooMany; + delitem "CobaltHerb", 10; + getitem "LightBlueDye", 1; goto L_ok; L_light_blue_fail: @@ -322,15 +510,15 @@ L_d_light_blue: goto L_intermediate; L_green: - if (countitem(@BLUE) < 20) goto L_green_fail; - if (countitem(@YELLOW) < 20) goto L_green_fail; + if (countitem("CobaltHerb") < 20) goto L_green_fail; + if (countitem("GambogeHerb") < 20) goto L_green_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@BLUE) > 20 && countitem(@YELLOW) > 20) goto L_TooMany; + if (@inventorylist_count == 100 && countitem("CobaltHerb") > 20 && countitem("GambogeHerb") > 20) goto L_TooMany; if (zeny < 1000) goto L_green_fail; - delitem @BLUE, 20; - delitem @YELLOW, 20; + delitem "CobaltHerb", 20; + delitem "GambogeHerb", 20; set zeny, zeny - 1000; - getitem 691, 1; + getitem "GreenDye", 1; goto L_ok; L_green_fail: @@ -351,17 +539,17 @@ L_d_green: goto L_intermediate; L_orange: - if (countitem(@RED) < 10) goto L_orange_fail; - if (countitem(@YELLOW) < 10) goto L_orange_fail; - if (countitem(@ORE) < 2) goto L_orange_fail; + if (countitem("AlizarinHerb") < 10) goto L_orange_fail; + if (countitem("GambogeHerb") < 10) goto L_orange_fail; + if (countitem("IronOre") < 2) goto L_orange_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@RED) > 10 && countitem(@YELLOW) > 10 && countitem(@ORE) > 2) goto L_TooMany; + if (@inventorylist_count == 100 && countitem("AlizarinHerb") > 10 && countitem("GambogeHerb") > 10 && countitem("IronOre") > 2) goto L_TooMany; if (zeny < 1000) goto L_orange_fail; - delitem @RED, 10; - delitem @YELLOW, 10; - delitem @ORE, 2; + delitem "AlizarinHerb", 10; + delitem "GambogeHerb", 10; + delitem "IronOre", 2; set zeny, zeny - 1000; - getitem 697, 1; + getitem "OrangeDye", 1; goto L_ok; L_orange_fail: @@ -378,15 +566,15 @@ L_d_orange: goto L_intermediate; L_pink: - if (countitem(@RED) < 10) goto L_pink_fail; - if (countitem(@PETAL) < 6) goto L_pink_fail; + if (countitem("AlizarinHerb") < 10) goto L_pink_fail; + if (countitem("Petal") < 6) goto L_pink_fail; if (zeny < 1000) goto L_pink_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@RED) > 10 && countitem(@PETAL) > 6) goto L_TooMany; - delitem @RED, 10; - delitem @PETAL, 6; + if (@inventorylist_count == 100 && countitem("AlizarinHerb") > 10 && countitem("Petal") > 6) goto L_TooMany; + delitem "AlizarinHerb", 10; + delitem "Petal", 6; set zeny, zeny - 1000; - getitem 695, 1; + getitem "PinkDye", 1; goto L_ok; L_pink_fail: @@ -403,17 +591,17 @@ L_d_pink: goto L_intermediate; L_dark_blue: - if (countitem(@BLUE) < 100) goto L_dark_blue_fail; - if (countitem(@MAUVE) < 50) goto L_dark_blue_fail; - if (countitem(@PEARL) < 1) goto L_dark_blue_fail; + if (countitem("CobaltHerb") < 100) goto L_dark_blue_fail; + if (countitem("MauveHerb") < 50) goto L_dark_blue_fail; + if (countitem("Pearl") < 1) goto L_dark_blue_fail; if (zeny < 10000) goto L_dark_blue_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@BLUE) > 100 && countitem(@MAUVE) > 50 && countitem(@PEARL) > 1) goto L_TooMany; - delitem @BLUE, 100; - delitem @MAUVE, 50; - delitem @PEARL, 1; + if (@inventorylist_count == 100 && countitem("CobaltHerb") > 100 && countitem("MauveHerb") > 50 && countitem("Pearl") > 1) goto L_TooMany; + delitem "CobaltHerb", 100; + delitem "MauveHerb", 50; + delitem "Pearl", 1; set zeny, zeny - 10000; - getitem 692, 1; + getitem "DarkBlueDye", 1; goto L_ok; L_dark_blue_fail: @@ -431,19 +619,19 @@ L_d_dark_blue: goto L_intermediate; L_purple: - if (countitem(@BLUE) < 100) goto L_purple_fail; - if (countitem(@RED) < 100) goto L_purple_fail; - if (countitem(@MAUVE) < 20) goto L_purple_fail; - if (countitem(@PEARL) < 1) goto L_purple_fail; + if (countitem("CobaltHerb") < 100) goto L_purple_fail; + if (countitem("AlizarinHerb") < 100) goto L_purple_fail; + if (countitem("MauveHerb") < 20) goto L_purple_fail; + if (countitem("Pearl") < 1) goto L_purple_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@BLUE) > 100 && countitem(@RED) > 100 && countitem(@MAUVE) > 20 && countitem(@PEARL) > 1) goto L_TooMany; + if (@inventorylist_count == 100 && countitem("CobaltHerb") > 100 && countitem("AlizarinHerb") > 100 && countitem("MauveHerb") > 20 && countitem("Pearl") > 1) goto L_TooMany; if (zeny < 40000) goto L_purple_fail; - delitem @BLUE, 100; - delitem @RED, 100; - delitem @MAUVE, 20; - delitem @PEARL, 1; + delitem "CobaltHerb", 100; + delitem "AlizarinHerb", 100; + delitem "MauveHerb", 20; + delitem "Pearl", 1; set zeny, zeny - 40000; - getitem 698, 1; + getitem "PurpleDye", 1; goto L_ok; L_purple_fail: @@ -464,19 +652,19 @@ L_d_purple: goto L_intermediate; L_black: - if (countitem(@BLUE) < 40) goto L_black_fail; - if (countitem(@RED) < 40) goto L_black_fail; - if (countitem(@YELLOW) < 40) goto L_black_fail; - if (countitem(@MAUVE) < 40) goto L_black_fail; + if (countitem("CobaltHerb") < 40) goto L_black_fail; + if (countitem("AlizarinHerb") < 40) goto L_black_fail; + if (countitem("GambogeHerb") < 40) goto L_black_fail; + if (countitem("MauveHerb") < 40) goto L_black_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@BLUE) > 40 && countitem(@RED) > 40 && countitem(@YELLOW) > 40 && countitem(@MAUVE) > 40) goto L_TooMany; + if (@inventorylist_count == 100 && countitem("CobaltHerb") > 40 && countitem("AlizarinHerb") > 40 && countitem("GambogeHerb") > 40 && countitem("MauveHerb") > 40) goto L_TooMany; if (zeny < 20000) goto L_black_fail; - delitem @BLUE, 40; - delitem @RED, 40; - delitem @YELLOW, 40; - delitem @MAUVE, 40; + delitem "CobaltHerb", 40; + delitem "AlizarinHerb", 40; + delitem "GambogeHerb", 40; + delitem "MauveHerb", 40; set zeny, zeny - 20000; - getitem 696, 1; + getitem "BlackDye", 1; goto L_ok; L_black_fail: @@ -498,19 +686,19 @@ L_d_black: L_dark_green: if (QUEST_clothdyer_knowsdye != @QUEST_HAS_SOLVED_DYE_PUZZLE) goto L_d_dark_green; - if (countitem(@BLUE) < 10) goto L_dark_green_fail; - if (countitem(@YELLOW) < 10) goto L_dark_green_fail; - if (countitem(@MAUVE) < 10) goto L_dark_green_fail; - if (countitem(@MAGGOTSLIME) < 1) goto L_dark_green_fail; + if (countitem("CobaltHerb") < 10) goto L_dark_green_fail; + if (countitem("GambogeHerb") < 10) goto L_dark_green_fail; + if (countitem("MauveHerb") < 10) goto L_dark_green_fail; + if (countitem("MaggotSlime") < 1) goto L_dark_green_fail; if (zeny < 1000) goto L_dark_green_fail; getinventorylist; - if (@inventorylist_count == 100 && countitem(@BLUE) > 10 && countitem(@YELLOW) > 10 && countitem(@MAUVE) > 10 && countitem(@MAGGOTSLIME) > 1) goto L_TooMany; - delitem @BLUE, 10; - delitem @MAUVE, 10; - delitem @YELLOW, 10; - delitem @MAGGOTSLIME, 1; + if (@inventorylist_count == 100 && countitem("CobaltHerb") > 10 && countitem("GambogeHerb") > 10 && countitem("MauveHerb") > 10 && countitem("MaggotSlime") > 1) goto L_TooMany; + delitem "CobaltHerb", 10; + delitem "MauveHerb", 10; + delitem "GambogeHerb", 10; + delitem "MaggotSlime", 1; set zeny, zeny - 1000; - getitem 699, 1; + getitem "DarkGreenDye", 1; goto L_ok; L_dark_green_fail: @@ -589,9 +777,9 @@ L_dark_green_q_explain: "I don't have time for this.", L_intermediate; L_dark_green_q_guess_0: - if (countitem(@MAGGOTSLIME) < 1) + if (countitem("MaggotSlime") < 1) goto L_dark_green_q_noslime; - delitem @MAGGOTSLIME, 1; + delitem "MaggotSlime", 1; mes "[Rauk the Alchemist]"; mes "Rauk fills your maggot slime into a small bottle and picks a glass bottle from within his robe."; |