summaryrefslogblamecommitdiff
path: root/npc/items/recipes.txt
blob: c624a357fc76980c49dc5c5945827e5b26d1e3a6 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                           
                                    
                                         


                                               
 

                                                              


                                                                                  


                                                                    
                                 

         



                                    
 


                                           
         
 











                                                                             
                                                             
 






                                                   
 
                                                                                                              
             

                    
                      
         
     


                       





                                            
                            
        
 















                                                                        

                                



                                                                     
     
             














                                                                                 



                               
 






















                                        












                                                                               



                                         






                                   
                            
                              
                             

                                   
 




                                       
                              

                              
 




                                    
                              

                              
 




                                   

                             
 












                                                                 
 









                              

                             
 




                                       
                             
                           
                            
                         
                             
                              

                                
 




                                    
                           
                        
                            
                            
                          







                                   
                              
                        
                           
                           
                            
                             
                            

                              
 


           


                   
                    




                                          
                           


                  





































































                                                                                  
// Evol script.
// Author:
//    Jesusalva
//    Micksha
// Description:
//    Contains recipe books for Evol Online

// showRecipe( recipe{, recipe...} )
function	script	showRecipe	{
    freeloop(true);
    for (.@a = 0; .@a < getargcount(); ++.@a) {
        .@const$ = data_to_string(getarg(.@a));

        if (startswith(.@const$, "Craft")) {
            // infer the item constant from the craft constant
            .@recipe = getarg(.@a);

            .@item = string_to_data(substr(.@const$, 5, getstrlen(.@const$) - 1));
        } else {
            // infer the craft constant from the item constant
            .@recipe = string_to_data(sprintf("Craft%s", .@const$));
            .@item = getarg(.@a);
        }

        if (.@item <= 0) {
            // target item not found
            continue;
        }

        if (!RECIPES[.@recipe] && !debug) {
            // does not have the recipe
            continue;
        }

        for (.@inv = 0; .@inv < 9; ++.@inv) {
            .@size = getcraftrecipe(.@recipe, .@inv, .@qty[0], .@item_id[0]);

            if (.@size < 0) {
                if (.@size == -1) {
                    // recipe does not exist
                    break;
                }
                // inventory does not exist
                break;
            }

            mes(l(".:: %s Recipe ::.", getitemlink(.@item)));

            for (.@it = 0; .@it < .@size; ++.@it) {
                .@recipe_item = .@item_id[.@it];
                .@recipe_qty = .@qty[.@it];

                if (.@recipe_item <= 0) {
                    break;
                }

                mesc(sprintf("%d/%d %s", countitem(.@recipe_item), .@recipe_qty, getitemlink(.@recipe_item)));
            }

            mes("");
            .@count++;
        }
    }
    freeloop(false);

    return .@count > 0;
}

-	script	#RecipeBook	NPC_HIDDEN,{
	function read_book;
	function read_cooking;
	function read_smithery;
    function read_tailoring;
    end;

function read_book {
    setnpcdialogtitle l(.book_name$);
    mesc l("This book has several bookmarks. Which one will you open?");
    next;
    menuint
        l("Cooking"), CRAFT_COOKING,
        l("Alchemy"), CRAFT_ALCHEMY,
        l("Smithery"), CRAFT_SMITHERY,
        l("Tailoring"), CRAFT_TAILORING,
        l("Jewelery"), CRAFT_JEWELERY;
    mes "";
    switch (@menuret) {
    case CRAFT_COOKING:
        read_cooking(); break;
    case CRAFT_SMITHERY:
        read_smithery(); break;
    case CRAFT_TAILORING:
        read_tailoring(); break;
    default:
        mesc l("Unfortunately, there is nothing on this bookmark.");
        mesc l("Perhaps, in future, someone adds it to this world.");
        break;
    }
    close2();
    return;
}

///////////////////////////////////////////////////////////////////////////////
function read_cooking {

    setnpcdialogtitle l("Cooking Recipes");

    mesc l("Eating is a necessity, but cooking is an art.");
    mesc l("(All items must be placed exactly in this order for cooking work.)");
    next;
    mesc l("List of known cooking recipes:");
    mes "";
    mes ".:: " + l("Sandwiches") + " ::.";
    mes "";

    showRecipe(CarpSandwich,
               PioulegSandwich,
               MananaSandwich);

    mes "";
    mes ".:: " + l("Stew") + " ::.";
    mes "";

    showRecipe(SailorStew,
               SquirrelStew,
               MoubooStew);

    mes "";
    mes ".:: " + l("Plates") + " ::.";
    mes "";

    showRecipe(SeafoodPlate,
               BarbecuePlate,
               VeggiePlate);

    mes "";
    mes ".:: " + l("Desserts") + " ::.";
    mes "";

    showRecipe(Donut,
               BlueberryCake,
               CarrotCake);
    return;
}

///////////////////////////////////////////////////////////////////////////////
function read_smithery {

    setnpcdialogtitle l("Smithery Recipes");

    mesc l("You will trust your life to this, so you better do a good job!");
    mesc l("(All items must be placed exactly in this order.)");
    next;
    mesc l("List of known smithery recipes:");

    mes();
    mesf(".:: %s ::.", l("Chest Armor"));
    mes();

    showRecipe(LegionTrainingShirt,
               LegionCopperArmor,
               Chainmail,
               Snakeplate,
               LightPlatemail,
               JustifierChest,
               LegionIronArmor,
               WarlordPlate,
               TerraniteArmor,
               AssassinChest,
               BlackArmor,
               GoldenWarlordPlate);

    next();
    mes();
    mesf(".:: %s ::.", l("Leg Armor"));
    mes();

    showRecipe(ChainmailSkirt,
               TerranitePants,
               AssassinPants);

    next();
    mes();
    mesf(".:: %s ::.", l("Gloves"));
    mes();

    showRecipe(CopperArmbands,
               BromenalGloves,
               IronArmbands);

    next();
    mes();
    mesf(".:: %s ::.", l("Boots"));
    mes();

    showRecipe(BromenalBoots,
               WarlordBoots);

    return;
}

function read_tailoring {
    setnpcdialogtitle(l("Tailoring Recipes"));

    mesc(l("(All items must be placed exactly in this order.)"));
    next();
    mesc(l("List of known tailoring recipes:"));

    mes();
    mesf(".:: %s ::.", l("Chest Armor"));
    mes();

    showRecipe(CreasedShirt,
               ArtisTankTop,
               VneckJumper,
               SailorShirt,
               FineDress,
               SilkRobe,
               ForestArmor,
               ApprenticeRobe,
               PeltJacket,
               SorcererRobe,
               WizardRobe,
               EvocatorRobe);

    next();
    mes();
    mesf(".:: %s ::.", l("Leg Armor"));
    mes();

    showRecipe(CreasedShorts,
               CottonSkirt,
               PirateShorts,
               SilkPants,
               BrownTrousers,
               BanditTrousers,
               JeansChaps,
               LeatherTrousers);

    next();
    mes();
    mesf(".:: %s ::.", l("Gloves"));
    mes();

    showRecipe(ShortGloves,
               Armbands,
               CottonGloves,
               BanditGloves,
               SilkGloves,
               LeatherGloves,
               AssassinGloves);

    next();
    mes();
    mesf(".:: %s ::.", l("Boots"));
    mes();

    showRecipe(LousyMoccasins,
               Slippers,
               CottonBoots,
               BanditBoots,
               ManaSlippers,
               SquirrelBoots,
               LeatherBoots,
               RidingBoots,
               AssassinBoots);

    return;
}


OnUse:
    if (openbook())
        read_book();
    closeclientdialog();
    close;

OnInit:
    .book_name$ = getitemname(RecipeBook);
    .bodytype = BODYTYPE_1;
    .distance = 1;
    end;
}

//////////////////////////////////////////////////////
// Below this line are utils for Gacha. We use callfunc() on itemDB.
// Types: see constants.db - everything is a bitwise here
// Rarity: 1 - basic, 2 - intermediary, 4 - advanced, 8 - expert, 16 - master
// Rarity: 1 - training, 2 - basic, 4 - advanced, 8 - expert, 16 - legendary
// Keep in mind! Expert and Master blueprints must be restricted!
// MakeBlueprint(type, rarity)
function	script	MakeBlueprint	{
    .@type=getarg(0, -1);
    .@rarity=getarg(1, 1);

    if (.@type & CRAFT_COOKING) {

        // ----------------------------------
        if (.@rarity & CRAFT_BASIC) {
        }
        if (.@rarity & CRAFT_INTERMEDIARY) {
        }
        if (.@rarity & CRAFT_ADVANCED) {
        }
        if (.@rarity & CRAFT_EXPERT) {
        }
        if (.@rarity & CRAFT_MASTER) {
        }
        // ----------------------------------

    }
    else if (.@type & CRAFT_SMITHERY)
	{

        // ----------------------------------
        if (.@rarity & CRAFT_BASIC) {
        }
        if (.@rarity & CRAFT_INTERMEDIARY) {
                array_push(.@recipes, CraftInfantryHelmet);
        }
        if (.@rarity & CRAFT_ADVANCED) {
        }
        if (.@rarity & CRAFT_EXPERT) {
        }
        if (.@rarity & CRAFT_MASTER) {
        }
        // ----------------------------------

    }

	// We don't have a .@recipes array D:
	if (array_entries(.@recipes) <= 0) {
        dispbottom l("This blueprint was blank.");
		return;
	}

	// Select a recipe randomly
    .@rcp=any_of(.@recipes);

	// Double precision failsafe
    if (RECIPES[.@rcp])
        .@rcp=any_of(.@recipes);

	// Learn the recipe or lose the item (and gain some EXP)
    if (RECIPES_[.@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[.@rcp]=true;
    }
    return;
}