// 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, {item 1, amount 1}, {item 2, amount 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)) {
mesn l(".:: @@ Recipe ::.", getitemlink(getarg(1)));
for (.@i=2;.@i < getargcount(); .@i++) {
mesc l("@@/@@ @@", countitem(getarg(.@i)), getarg(.@i+1), getitemlink(getarg(.@i)));
.@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 readCooking {
setnpcdialogtitle l("Alchemy Recipes");
@scope$="ALCHEMY";
mesc l("Burn burn!");
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, EmeraldPower, 1, HerbalTea);
showRecipe(CraftLukPotionB, LukPotionB,
1, Emerald, 2, HerbalTea);
showRecipe(CraftLukPotionC, LukPotionC,
1, PolishedEmerald, 3, HerbalTea);
showRecipe(CraftDexPotionA, DexPotionA,
1, AmethystPower, 1, HerbalTea);
showRecipe(CraftDexPotionB, DexPotionB,
1, Amethyst, 2, HerbalTea);
showRecipe(CraftDexPotionC, DexPotionC,
1, PolishedAmethyst, 3, HerbalTea);
showRecipe(CraftIntPotionA, IntPotionA,
1, SapphirePower, 1, HerbalTea);
showRecipe(CraftIntPotionB, IntPotionB,
1, Sapphire, 2, HerbalTea);
showRecipe(CraftIntPotionC, IntPotionC,
1, PolishedSapphire, 3, HerbalTea);
showRecipe(CraftVitPotionA, VitPotionA,
1, DiamondPower, 1, HerbalTea);
showRecipe(CraftVitPotionB, VitPotionB,
1, Diamond, 2, HerbalTea);
showRecipe(CraftVitPotionC, VitPotionC,
1, PolishedDiamond, 3, HerbalTea);
showRecipe(CraftAgiPotionA, AgiPotionA,
1, TopazPower, 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("Smith smith!");
mesc l("(All items must be placed exactly in this order.)");
next;
mesc l("List of known crafting recipes:");
mes "";
showRecipe(0, Iten, WarpedLog, 9999);
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) {
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);
}
break;
default:
return Exception("Invalid blueprint type "+.@type+" - item was lost.");
}
return;
}