summaryrefslogblamecommitdiff
path: root/npc/craft/recipes.txt
blob: bef6d655ece667bb4898afceb9250db644d41cf8 (plain) (tree)





































                                                                             
                                                                        




                                                                        
                                                     
                        
                                                               

                                                    
                                                                                                      


























                                                                
                      


                                           
                                                                              



                                                                
























                                                              
                                                    





                                                      
                                                     





                                                       
                                                     





                                                       
                                                    





                                                      
                                                  



                                                    









                                                     
                                                                            



                                                                

                                                                        





















                                               
         












                                                                          



























                                                                  
                                      


























                                                                  
                                         





















                                                               
                                                                 










                                                          
                       






                                                                 







                   










                                                                             


                                                             
































                                                              


                                            
                                         
                                                                    
                                                                                          
                    
                                                      

                                            
                  


                                                             
                                               


                                                        
                                                         
                                                         
                                                     


                                                      
                                                         
                                                        
                                                       
                                                      

                                            

                                                       
                                                         
                                                        
                                                           
                                                     

                                          
                                                       
                                                       

                                                       
                                                       
                                                            

                                          
                                                       
                                                          
                                                       





                                                                    
                                                                                          




                                                      





                                                                                   






























                                                                           
// TMW-2 script.
// Author:
//    Jesusalva
// Description:
//    Recipe Books in TMW2

-	script	#RecipeBook	NPC_HIDDEN,{
    function showRecipe;
    function readCooking;
    function readAlchemy;
    function readCrafting;

OnUse:
    setnpcdialogtitle l("Recipe Book");

    mesc l("You open the Recipe Book. Each recipe you get can be put here.");
    next;
    do {
        mesc l("Which recipes do you want to read?");
        select
            l("Nothing."),
            l("Cooking Recipes."),
            l("Alchemy Recipes."),
            l("Crafting Recipes.");
        mes "";
        switch (@menu) {
            case 2:
                readCooking(); break;
            case 3:
                readAlchemy(); break;
            case 4:
                readCrafting(); break;
        }
    } while (@menu != 1);
    closeclientdialog;
    close;

// Expects: @scope$
// showRecipe( Craft, Bonus, {amount 1, item 1}, {amount 2, item 2}... )
function showRecipe {
    if (getargcount() < 3 || getargcount() % 2 != 0 || @scope$ == "")
        return Exception("Faulty recipe skill command invoked - error");

    // getd("$RECIPES_ALCHEMY_"+getcharid(2)+"["+getarg(0)+"]")
    if (getd("RECIPES_"+@scope$+"["+getarg(0)+"]")) {
        if (getarg(1)) {
            mes l(".:: @@ Recipe ::.", getitemlink(getarg(1)));

            for (.@i=2;.@i < getargcount(); .@i++) {
                mesc l("@@/@@ @@", countitem(getarg(.@i+1)), getarg(.@i), getitemlink(getarg(.@i+1)));
                .@i++;
            }
            mes "";
        }
        return 1;
    }
    //debugmes "Nope, nothing here";
    return 0;
}

// =============================== Cooking Functions
function readCooking {
    setnpcdialogtitle l("Cooking Recipes");
    @scope$="COOKING";

    mesc l("Eating is a necessity, but cooking is an art.");
    mesc l("(All items must be placed exactly in this order.)");
    next;
    mesc l("List of known cooking recipes:");
    mes "";
    showRecipe(0, Iten, WarpedLog, 9999);
    next;
    @scope$="";
    return;
}

// =============================== Cooking Functions
function readAlchemy {
    setnpcdialogtitle l("Alchemy Recipes");
    @scope$="ALCHEMY";

    mesc l("Alchemy. The art of having quasi-magical effects without magic.");
    mesc l("(All items must be placed exactly in this order.)");
    next;
    mesc l("List of known alchemy recipes:");
    mes "";
    // Healing
    mesc "----------"+l("Healing Recipes")+"----------", 2;
    showRecipe(CraftPiberriesInfusion, PiberriesInfusion,
                    5, Piberries, 1, Curshroom);
    next;

    // General Boosts
    mesc "----------"+l("General Recipes")+"----------", 2;
    showRecipe(CraftHastePotion, HastePotion,
                    15, Plushroom);
    showRecipe(CraftStrengthPotion, StrengthPotion,
                    15, Chagashroom);
    showRecipe(CraftResetPotion, StatusResetPotion,
                    90, ManaPiouFeathers, 10, Curshroom);
    showRecipe(CraftSpeedPotion, MoveSpeedPotion,
                    1, GemPowder, 5, FluoPowder);
    showRecipe(CraftPrecisionPotion, PrecisionPotion,
                    3, Piberries, 1, MountainSnakeEgg);
    showRecipe(CraftDodgePotion, DodgePotion,
                    3, Piberries, 1, SnakeEgg);
    next;

    // Stats Boosts
    mesc "----------"+l("Stat Boost Recipes")+"----------", 2;
    showRecipe(CraftLukPotionA, LukPotionA,
                    1, EmeraldPowder, 1, HerbalTea);
    showRecipe(CraftLukPotionB, LukPotionB,
                    1, Emerald, 2, HerbalTea);
    showRecipe(CraftLukPotionC, LukPotionC,
                    1, PolishedEmerald, 3, HerbalTea);

    showRecipe(CraftDexPotionA, DexPotionA,
                    1, AmethystPowder, 1, HerbalTea);
    showRecipe(CraftDexPotionB, DexPotionB,
                    1, Amethyst, 2, HerbalTea);
    showRecipe(CraftDexPotionC, DexPotionC,
                    1, PolishedAmethyst, 3, HerbalTea);

    showRecipe(CraftIntPotionA, IntPotionA,
                    1, SapphirePowder, 1, HerbalTea);
    showRecipe(CraftIntPotionB, IntPotionB,
                    1, Sapphire, 2, HerbalTea);
    showRecipe(CraftIntPotionC, IntPotionC,
                    1, PolishedSapphire, 3, HerbalTea);

    showRecipe(CraftVitPotionA, VitPotionA,
                    1, DiamondPowder, 1, HerbalTea);
    showRecipe(CraftVitPotionB, VitPotionB,
                    1, Diamond, 2, HerbalTea);
    showRecipe(CraftVitPotionC, VitPotionC,
                    1, PolishedDiamond, 3, HerbalTea);

    showRecipe(CraftAgiPotionA, AgiPotionA,
                    1, TopazPowder, 1, HerbalTea);
    showRecipe(CraftAgiPotionB, AgiPotionB,
                    1, Topaz, 2, HerbalTea);
    showRecipe(CraftAgiPotionC, AgiPotionC,
                    1, PolishedTopaz, 3, HerbalTea);
    next;
    @scope$="";
    return;
}

// =============================== Crafting Functions
function readCrafting {
    setnpcdialogtitle l("Crafting Recipes");
    @scope$="EQUIPMENT";

    mesc l("There is only one way towards the best equipment: Smith away!");
    mesc l("(All items must be placed exactly in this order.)");
    next;
    mesc l("List of known crafting recipes:");
    mes "";
    // Melee Weapons: Never use Titanium nor Lead. Iron-based, no silver
    mesc "----------"+l("One Hand Weapon Recipes")+"----------", 2;
    showRecipe(CraftWoodenSword, WoodenSword,
                20, WoodenLog,
                 5, RawLog,
                 1, SharpKnife);
    showRecipe(CraftBugSlayer, BugSlayer,
                 8, IronIngot,
                12, Coal,
                 1, EverburnPowder);
    showRecipe(CraftShortGladius, ShortGladius,
                12, IronIngot,
                16, Coal,
                 1, EverburnPowder);
    showRecipe(CraftBacksword, Backsword,
                18, IronIngot,
                 3, TinIngot,
                20, Coal,
                 1, EverburnPowder);
    showRecipe(CraftShortsword, ShortSword,
                24, IronIngot,
                 5, TinIngot,
                24, Coal,
                 1, EverburnPowder);
    next;
    // Two Hands Melee Weapons: Never use Titanium nor Lead. Silver-based.
    mesc "----------"+l("Two Hands Weapon Recipes")+"----------", 2;
    showRecipe(CraftMiereCleaver, MiereCleaver,
                12, SilverIngot,
                 1, TinIngot,
                 8, Coal,
                 1, EverburnPowder);
    showRecipe(CraftBroadsword, Broadsword,
                27, SilverIngot,
                 1, TinIngot,
                20, Coal,
                 1, EverburnPowder);
    next;
    // Archery Weapons: Always use Wood, Root and Carp.
    mesc "----------"+l("Archery Weapon Recipes")+"----------", 2;
    showRecipe(CraftShortBow, ShortBow,
                18, WoodenLog,
                12, Root,
                 3, LeatherPatch,
                 1, CommonCarp);
    showRecipe(CraftForestBow, ForestBow,
                24, WoodenLog,
                16, Root,
                 5, LeatherPatch,
                 3, CommonCarp);
    showRecipe(CraftElficBow, ElficBow,
                33, WoodenLog,
                22, Root,
                 1, IronIngot,
                 4, CommonCarp);
    showRecipe(CraftChampionshipBow, ChampionshipBow,
                48, WoodenLog,
                32, Root,
                 1, GoldIngot,
                 5, CommonCarp);
    showRecipe(CraftBansheeBow, BansheeBow,
                70, WoodenLog,
                45, Root,
                 5, DarkCrystal,
                 5, CommonCarp);
    next;
    // Magical Weapons: Wood + powders
    mesc "----------"+l("Magical Weapon Recipes")+"----------", 2;
    showRecipe(CraftTrainingWand, TrainingWand,
                20, WoodenLog,
                30, ManaPiouFeathers,
                 5, FluoPowder,
                 1, GemPowder);
    showRecipe(CraftNoviceWand, NoviceWand,
                40, WoodenLog,
                60, ManaPiouFeathers,
                 8, FluoPowder,
                 2, GemPowder);
    showRecipe(CraftApprenticeWand, ApprenticeWand,
                60, WoodenLog,
                90, ManaPiouFeathers,
                12, FluoPowder,
                 3, GemPowder);
    showRecipe(CraftLeaderWand, LeaderWand,
               100, WoodenLog,
               120, ManaPiouFeathers,
                15, FluoPowder,
                 5, GemPowder);
    showRecipe(CraftLegendaryWand, LegendaryWand,
               110, WoodenLog,
                 3, GoldenApple,
                20, FluoPowder,
                 7, GemPowder);
    next;
    // Firestaff Weapons: Lead + Titanium
    mesc "----------"+l("Fire Staffs Recipes")+"----------", 2;
    showRecipe(CraftPynRevolver, PynRevolver,
                 4, LeadIngot,
                 5, TitaniumIngot,
                11, Coal,
                 1, EverburnPowder);
    showRecipe(CraftPynRifle, PynRifle,
                 6, LeadIngot,
                 7, TitaniumIngot,
                14, Coal,
                 1, EverburnPowder);
    showRecipe(CraftPynGatling, PynGatling,
                 7, LeadIngot,
                 7, TitaniumIngot,
                14, Coal,
                 1, EverburnPowder);
    showRecipe(CraftPynShotgun, PynShotgun,
                 9, LeadIngot,
                10, TitaniumIngot,
                16, Coal,
                 1, EverburnPowder);
    next;
    // Shields: May use Leather. Titanium or Lead, but never both
    mesc "----------"+l("Shield Recipes")+"----------", 2;
    showRecipe(CraftWoodenShield, WoodenShield,
                40, WoodenLog,
                 2, LeatherPatch,
                 1, SharpKnife);
    showRecipe(CraftBladeShield, BladeShield,
                14, IronIngot,
                 2, TitaniumIngot,
                 5, Coal,
                 1, EverburnPowder);
    next;
    // Misc: Misc items
    mesc "----------"+l("Miscellaneous Recipes")+"----------", 2;
    showRecipe(CraftGoldenRing, GoldenRing,
                 5, GoldPieces,
                 1, TitaniumIngot,
                 8, Coal,
                 1, EverburnPowder);
    next;
    @scope$="";
    return;
}

OnInit:
    .sex = G_OTHER;
    .distance = 1;
    end;
}

// Below this line are utils for Gacha. We use callfunc() on itemDB.
// Types: CRAFT_COOKING, CRAFT_ALCHEMY, CRAFT_EQUIPMENT
// Rarity: 1 - basic, 2 - intermediary, 4 - advanced, 8 - expert, 16 - master
// Level equivalents: 1: (1~20) 2: (21~44), 3: (45~75), 4: (76~99), 5: 100+
function	script	MakeBlueprint	{
    .@type=getarg(0, -1);
    .@rarity=getarg(1, 1);

    switch (.@type) {
        /////////////////////////////////////////////////////
        ///// Alchemy Recipes
        /////////////////////////////////////////////////////
        case CRAFT_ALCHEMY:
            if (.@rarity & CRAFT_BASIC) {
                array_push(.@recipes, CraftPiberriesInfusion);
                array_push(.@recipes, CraftHastePotion);
                array_push(.@recipes, CraftStrengthPotion);
            }
            if (.@rarity & CRAFT_INTERMEDIARY) {
                array_push(.@recipes, CraftLukPotionA);
                array_push(.@recipes, CraftDexPotionA);
                array_push(.@recipes, CraftIntPotionA);
                array_push(.@recipes, CraftAgiPotionA);
                array_push(.@recipes, CraftVitPotionA);
                array_push(.@recipes, CraftSpeedPotion);
            }
            if (.@rarity & CRAFT_ADVANCED) {
                array_push(.@recipes, CraftResetPotion);
                array_push(.@recipes, CraftPrecisionPotion);
                array_push(.@recipes, CraftDodgePotion);
            }
            if (.@rarity & CRAFT_EXPERT) {
                array_push(.@recipes, CraftLukPotionB);
                array_push(.@recipes, CraftDexPotionB);
                array_push(.@recipes, CraftIntPotionB);
                array_push(.@recipes, CraftAgiPotionB);
                array_push(.@recipes, CraftVitPotionB);
            }
            if (.@rarity & CRAFT_MASTER) {
                array_push(.@recipes, CraftLukPotionC);
                array_push(.@recipes, CraftDexPotionC);
                array_push(.@recipes, CraftIntPotionC);
                array_push(.@recipes, CraftAgiPotionC);
                array_push(.@recipes, CraftVitPotionC);
            }

            // Now you'll learn some recipe!
            .@rcp=any_of(.@recipes);
            if (RECIPES_ALCHEMY[.@rcp]) {
                dispbottom l("It was a recipe you already knew...");
                getexp (BaseLevel+JobLevel)*rand2(1,.@rarity), JobLevel+rand2(1,.@rarity);
            } else {
                dispbottom l("Learned a new recipe!");
                RECIPES_ALCHEMY[.@rcp]=true;
            }
            break;
        /////////////////////////////////////////////////////
        ///// Equipment Recipes
        /////////////////////////////////////////////////////
//                array_push(.@recipes, Craft);
        case CRAFT_EQUIPMENT:
            if (.@rarity & CRAFT_BASIC) {
                array_push(.@recipes, CraftWoodenSword);
                array_push(.@recipes, CraftWoodenShield);
                array_push(.@recipes, CraftTrainingWand);
                array_push(.@recipes, CraftShortBow);
            }
            if (.@rarity & CRAFT_INTERMEDIARY) {
                array_push(.@recipes, CraftBugSlayer);
                array_push(.@recipes, CraftShortGladius);
                array_push(.@recipes, CraftBladeShield);
                array_push(.@recipes, CraftNoviceWand);
                array_push(.@recipes, CraftForestBow);
            }
            if (.@rarity & CRAFT_ADVANCED) {
                array_push(.@recipes, CraftBacksword);
                array_push(.@recipes, CraftShortsword);
                array_push(.@recipes, CraftMiereCleaver);
                array_push(.@recipes, CraftPynRevolver);
                array_push(.@recipes, CraftApprenticeWand);
                array_push(.@recipes, CraftElficBow);
            }
            if (.@rarity & CRAFT_EXPERT) {
                array_push(.@recipes, CraftGoldenRing);
                array_push(.@recipes, CraftBroadsword);
                array_push(.@recipes, CraftPynRifle);
                array_push(.@recipes, CraftPynGatling);
                array_push(.@recipes, CraftLeaderWand);
                array_push(.@recipes, CraftChampionshipBow);
            }
            if (.@rarity & CRAFT_MASTER) {
                array_push(.@recipes, CraftPynShotgun);
                array_push(.@recipes, CraftLegendaryWand);
                array_push(.@recipes, CraftBansheeBow);
            }

            // Now you'll learn some recipe!
            .@rcp=any_of(.@recipes);
            if (RECIPES_EQUIPMENT[.@rcp]) {
                dispbottom l("It was a recipe you already knew...");
                getexp (BaseLevel+JobLevel)*rand2(1,.@rarity), JobLevel+rand2(1,.@rarity);
            } else {
                dispbottom l("Learned a new recipe!");
                RECIPES_EQUIPMENT[.@rcp]=true;
            }
            break;
        default:
            return Exception("Invalid blueprint type "+.@type+" - item was lost.");
    }
    return;
}

// Create a blueprint based on level. Extra chance for weaker Blueprint.
// Level equivalents: 1: (1~20) 2: (21~44), 3: (45~75), 4: (76~99), 5: 100+
function	script	MakeRandomBlueprint	{
    array_push(.@blueprints, AlchemyBlueprintA);
    array_push(.@blueprints, EquipmentBlueprintA);
    if (BaseLevel > 20) {
        array_push(.@blueprints, AlchemyBlueprintB);
        array_push(.@blueprints, EquipmentBlueprintB);
    }
    if (BaseLevel > 44) {
        array_push(.@blueprints, AlchemyBlueprintB);
        array_push(.@blueprints, EquipmentBlueprintB);
        array_push(.@blueprints, AlchemyBlueprintC);
        array_push(.@blueprints, EquipmentBlueprintC);
    }
    if (BaseLevel > 75) {
        array_push(.@blueprints, AlchemyBlueprintC);
        array_push(.@blueprints, EquipmentBlueprintC);
        array_push(.@blueprints, AlchemyBlueprintD);
        array_push(.@blueprints, EquipmentBlueprintD);
    }
    if (BaseLevel > 100) {
        array_push(.@blueprints, AlchemyBlueprintD);
        array_push(.@blueprints, EquipmentBlueprintD);
        array_push(.@blueprints, AlchemyBlueprintE);
        array_push(.@blueprints, EquipmentBlueprintE);
    }
    getitem any_of(.@blueprints), 1;
    return;
}