// Evol script. // Author: // Jesusalva // Micksha // Description: // Contains recipe books for Evol Online // showRecipe( Craft, Bonus, {amount 1, item 1}, {amount 2, item 2}... ) function script showRecipe { if (getargcount() < 3 || getargcount() % 2 != 0) return false;//Exception("Faulty recipe skill command invoked - error"); if (RECIPES[getarg(0)]) { if (getarg(1)) { mes l(".:: %s Recipe ::.", getitemlink(getarg(1))); for (.@i=2;.@i < getargcount(); .@i++) { mesc l("%d/%d %s", countitem(getarg(.@i+1)), getarg(.@i), getitemlink(getarg(.@i+1))); .@i++; } mes ""; } return true; } return false; } - script #RecipeBook NPC_HIDDEN,{ function read_book; function read_cooking; function read_smithery; 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; default: mesc l("Unfortunately, there is nothing on this bookmark."); mesc l("Perhaps, in future, someone adds it to this world."); break; } next; 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(CraftCarpSandwich, CarpSandwich, 1, Bread, 3, LettuceLeaf, 2, Cheese, 1, CommonCarp); showRecipe(CraftPioulegSandwich, PioulegSandwich, 1, Bread, 3, LettuceLeaf, 2, Cheese, 1, PiouLegs); showRecipe(CraftMananaSandwich, MananaSandwich, 1, Bread, 3, LettuceLeaf, 2, Cheese, 1, Manana); 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 ""; mes ".:: " + l("Helmets") + " ::."; mes ""; showRecipe(CraftInfantryHelmet, InfantryHelmet, 12, IronOre, 3, Coal, 2, Moss, 1, Dagger); return; } OnUse: if (openbook()) read_book(); closeclientdialog(); close; OnInit: .book_name$ = getitemname(RecipeBook); .sex = G_OTHER; .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; }