summaryrefslogblamecommitdiff
path: root/npc/craft/recipes.txt
blob: 74116ef452f9b82b11821e6fefddc941d46b1b42 (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 "";
    // Weapons
    mesc "----------"+l("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;
    @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)*rand(1,.@rarity), JobLevel+rand(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, CraftTrainingWand);
            }
            if (.@rarity & CRAFT_INTERMEDIARY) {
                array_push(.@recipes, CraftBugSlayer);
                array_push(.@recipes, CraftShortGladius);
                array_push(.@recipes, CraftNoviceWand);
            }
            if (.@rarity & CRAFT_ADVANCED) {
                array_push(.@recipes, CraftBacksword);
                array_push(.@recipes, CraftShortsword);
                array_push(.@recipes, CraftPynRevolver);
                array_push(.@recipes, CraftApprenticeWand);
            }
            if (.@rarity & CRAFT_EXPERT) {
                array_push(.@recipes, CraftPynRifle);
                array_push(.@recipes, CraftPynGatling);
                array_push(.@recipes, CraftLeaderWand);
            }
            if (.@rarity & CRAFT_MASTER) {
                array_push(.@recipes, CraftPynShotgun);
                array_push(.@recipes, CraftLegendaryWand);
            }

            // 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)*rand(1,.@rarity), JobLevel+rand(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;
}