// Moubootaur Legends Script
// Author:
// Jesusalva
// Description:
// Guild Facility - Contains recipe list
guilds,47,39,0 script Guild Logs NPC_NO_SPRITE,{
function hudRecipe;
function showRecipe;
function calcRecipe;
function clearRecipe;
function GDSkillLearn;
.@gid=getcharid(2);
.@s=0; // How many was displayed, to use next(); if needed
mes ".:: " + l("Alchemy Recipes") + " ::.";
// Healing
.@s+=showRecipe(CraftPiberriesInfusion, PiberriesInfusion,
5, Piberries, 1, Curshroom);
if (.@s > 1)
next;
// General Boosts
.@s+=showRecipe(CraftHastePotion, HastePotion,
15, Plushroom);
.@s+=showRecipe(CraftStrengthPotion, StrengthPotion,
15, Chagashroom);
.@s+=showRecipe(CraftResetPotion, StatusResetPotion,
90, ManaPiouFeathers, 10, Curshroom);
.@s+=showRecipe(CraftSpeedPotion, MoveSpeedPotion,
1, GemPowder, 5, FluoPowder);
.@s+=showRecipe(CraftPrecisionPotion, PrecisionPotion,
3, Piberries, 1, MountainSnakeEgg);
.@s+=showRecipe(CraftDodgePotion, DodgePotion,
3, Piberries, 1, SnakeEgg);
if (.@s > 5)
next;
// Stats Boosts
.@s+=showRecipe(CraftLukPotionA, LukPotionA,
1, EmeraldPowder, 1, HerbalTea);
.@s+=showRecipe(CraftLukPotionB, LukPotionB,
1, Emerald, 2, HerbalTea);
.@s+=showRecipe(CraftLukPotionC, LukPotionC,
1, PolishedEmerald, 3, HerbalTea);
.@s+=showRecipe(CraftDexPotionA, DexPotionA,
1, AmethystPowder, 1, HerbalTea);
.@s+=showRecipe(CraftDexPotionB, DexPotionB,
1, Amethyst, 2, HerbalTea);
.@s+=showRecipe(CraftDexPotionC, DexPotionC,
1, PolishedAmethyst, 3, HerbalTea);
.@s+=showRecipe(CraftIntPotionA, IntPotionA,
1, SapphirePowder, 1, HerbalTea);
.@s+=showRecipe(CraftIntPotionB, IntPotionB,
1, Sapphire, 2, HerbalTea);
.@s+=showRecipe(CraftIntPotionC, IntPotionC,
1, PolishedSapphire, 3, HerbalTea);
.@s+=showRecipe(CraftVitPotionA, VitPotionA,
1, DiamondPowder, 1, HerbalTea);
.@s+=showRecipe(CraftVitPotionB, VitPotionB,
1, Diamond, 2, HerbalTea);
.@s+=showRecipe(CraftVitPotionC, VitPotionC,
1, PolishedDiamond, 3, HerbalTea);
.@s+=showRecipe(CraftAgiPotionA, AgiPotionA,
1, TopazPowder, 1, HerbalTea);
.@s+=showRecipe(CraftAgiPotionB, AgiPotionB,
1, Topaz, 2, HerbalTea);
.@s+=showRecipe(CraftAgiPotionC, AgiPotionC,
1, PolishedTopaz, 3, HerbalTea);
if (.@s > 14)
next;
// Limit Boosts
.@s+=showRecipe(CraftSacredManaPotion, SacredManaPotion,
1, GoldenApple, 10, CelestiaTea);
.@s+=showRecipe(CraftSacredLifePotion, SacredLifePotion,
1, GoldenApple, 1, ElixirOfLife);
.@s+=showRecipe(CraftSacredImmortalityPotion, SacredImmortalityPotion,
1, SacredLifePotion, 1, SacredManaPotion);
if (.@s == 0)
mesc l("Your guild doesn't knows any recipes!"), 1;
.@role=getguildrole(.@gid, getcharid(3));
do
{
select
l("Do nothing"),
rif(strcharinfo(0) == getguildmaster(.@gid), l("Raise max members")),
rif(.@role <= GPOS_MEMBER, l("Learn individual guild skills")),
rif(.@role <= GPOS_VICELEADER, l("Learn Alchemy Recipes"));
mes "";
switch (@menu) {
case 2:
.@cur_lv=getguildlvl(.@gid);
.@min_lv=(getskilllv(GD_EXTENSION)+1)*4;
.@price=.@min_lv*274;
if (.@cur_lv < .@min_lv)
{
mesc l("Guild Level is not enough: @@/@@", .@cur_lv, .@min_lv);
next;
break;
}
mesc l("Raising this skill will allow to recruit 4 more members.");
mesc l("The cost for Guild Vault is @@ GP.", .@price);
next;
select
rif($GUILD_BANK[.@gid] >= .@price, l("Upgrade it")),
l("Don't upgrade it");
mes "";
if (@menu == 1 && $GUILD_BANK[.@gid] >= .@price)
{
$GUILD_BANK[.@gid]-=.@price;
// guildskill()?
skill GD_EXTENSION, getskilllv(GD_EXTENSION)+1, 0;
break;
}
break;
case 3:
mes ".:: " + l("Guild Magic") + " ::.";
mesc l("IMPORTANT: All guild magic needs %s to be cast!", getitemlink(GuildCoin)), 3;
do
{
select
l("Return"),
rif(strcharinfo(0) == getguildmaster(.@gid), l("Increase all stats")),
l("Guild Area Regeneration"),
l("Guild Area DEF UP"),
l("Guild's Battle Plan"),
l("Guild Area ATK UP"),
l("Guild Area CRIT UP"),
l("Guild Area Autorevive"),
l("Weapon Maximum Damage"),
l("Friendly SP Regeneration");
mes "";
switch (@menu) {
case 2:
GDSkillLearn(TMW2_GD_INCALL, 2580,
l("Guild's Power"),
l("Increase all stats from every guild member in area."),
8, 12, 16, 20, 24, 30, 36, 42, 50);
break;
case 3:
GDSkillLearn(TMW2_GD_REGEN, 1740,
l("Angel Light"),
l("Causes a healing effect in area to guild members."),
4, 6, 9, 12, 15, 20, 25, 30, 35);
break;
case 4:
GDSkillLearn(TMW2_GD_DEFUP, 640,
l("Blessing of Defense"),
l("Increase defense to all friends in radius."),
3, 5, 7, 9, 11, 14, 17, 20, 25);
break;
case 5:
GDSkillLearn(TMW2_GD_BATTLEPLAN, 1015,
l("Battle Plans"),
l("Increase STR/INT/DEX in range for all guild allies."),
5, 8, 11, 15, 20, 24, 30, 37, 42);
break;
case 6:
GDSkillLearn(TMW2_GD_ATKUP, 1500,
l("Damage Improvement"),
l("Increase damage dealt by weapon for all guildies."),
2, 4, 6, 8, 10, 12, 15, 18, 21);
break;
case 7:
GDSkillLearn(TMW2_GD_CRITUP, 1500,
l("Critical Fortune"),
l("Increase critical chance of all guild allies."),
6, 9, 13, 19, 22, 27, 33, 39, 45);
break;
case 8:
GDSkillLearn(TMW2_GD_AUTOREVIVE, 3000,
l("Blessing of Immortality"),
l("If a guild mate dies, they will revive. Don't work on self."),
7, 11, 17, 23, 26, 29, 31, 34, 38);
break;
case 9:
GDSkillLearn(TMW2_GDP_MAXPOWER, 3000,
l("Maximize Damage"),
l("PARTY AND GUILD friends: Weapon always deal max damage."),
1, 5, 10, 15, 20, 25, 30, 35, 40);
break;
case 10:
GDSkillLearn(TMW2_GDP_SPREGEN, 3000,
l("Improved MP Regen"),
l("PARTY AND GUILD friends: Temporaly regen MP faster."),
5, 10, 15, 22, 28, 32, 37, 41, 44);
break;
default:
break;
}
} while (@menu != 1);
@menu=99;
break;
case 4:
mes ".:: " + l("Alchemy Recipes") + " ::.";
do {
clearRecipe();
// Healing Recipes
if (!showRecipe(CraftPiberriesInfusion, false))
calcRecipe(CraftPiberriesInfusion, 3, 10000, l("Piberries Infusion"));
// General Boosts
if (!showRecipe(CraftHastePotion, false))
calcRecipe(CraftHastePotion, 2, 5000, l("Haste Potion"));
if (!showRecipe(CraftStrengthPotion, false))
calcRecipe(CraftStrengthPotion, 2, 5000, l("Strength Potion"));
if (!showRecipe(CraftResetPotion, false))
calcRecipe(CraftResetPotion, 4, 50000, l("Status Reset Potion"));
if (!showRecipe(CraftSpeedPotion, false))
calcRecipe(CraftSpeedPotion, 4, 50000, l("Movement Speed Potion"));
if (!showRecipe(CraftPrecisionPotion, false))
calcRecipe(CraftPrecisionPotion, 5, 20000, l("Precision Potion"));
if (!showRecipe(CraftDodgePotion, false))
calcRecipe(CraftDodgePotion, 5, 20000, l("Dodge Potion"));
// Stats Boosts
if (!showRecipe(CraftLukPotionA, false))
calcRecipe(CraftLukPotionA, 4, 15000, l("Luck Potion"));
if (!showRecipe(CraftLukPotionB, false))
calcRecipe(CraftLukPotionB, 6, 25000, l("Luck+ Potion"));
if (!showRecipe(CraftLukPotionC, false))
calcRecipe(CraftLukPotionC, 8, 35000, l("Luck++ Potion"));
if (!showRecipe(CraftDexPotionA, false))
calcRecipe(CraftDexPotionA, 4, 15000, l("Dex Potion"));
if (!showRecipe(CraftDexPotionB, false))
calcRecipe(CraftDexPotionB, 6, 25000, l("Dex+ Potion"));
if (!showRecipe(CraftDexPotionC, false))
calcRecipe(CraftDexPotionC, 8, 35000, l("Dex++ Potion"));
if (!showRecipe(CraftIntPotionA, false))
calcRecipe(CraftIntPotionA, 4, 15000, l("Int Potion"));
if (!showRecipe(CraftIntPotionB, false))
calcRecipe(CraftIntPotionB, 6, 25000, l("Int+ Potion"));
if (!showRecipe(CraftIntPotionC, false))
calcRecipe(CraftIntPotionC, 8, 35000, l("Int++ Potion"));
if (!showRecipe(CraftVitPotionA, false))
calcRecipe(CraftVitPotionA, 4, 15000, l("Vit Potion"));
if (!showRecipe(CraftVitPotionB, false))
calcRecipe(CraftVitPotionB, 6, 25000, l("Vit+ Potion"));
if (!showRecipe(CraftVitPotionC, false))
calcRecipe(CraftVitPotionC, 8, 35000, l("Vit++ Potion"));
if (!showRecipe(CraftAgiPotionA, false))
calcRecipe(CraftAgiPotionA, 4, 15000, l("Agi Potion"));
if (!showRecipe(CraftAgiPotionB, false))
calcRecipe(CraftAgiPotionB, 6, 25000, l("Agi+ Potion"));
if (!showRecipe(CraftAgiPotionC, false))
calcRecipe(CraftAgiPotionC, 8, 35000, l("Agi++ Potion"));
// Limit Boosts
if (!showRecipe(CraftSacredManaPotion, false))
calcRecipe(CraftSacredManaPotion, 7, 100000, l("Sacred Mana Potion"));
if (!showRecipe(CraftSacredLifePotion, false))
calcRecipe(CraftSacredLifePotion, 7, 100000, l("Sacred Life Potion"));
if (!showRecipe(CraftSacredImmortalityPotion, false))
calcRecipe(CraftSacredImmortalityPotion, 10, 500000, l("Sacred Immortality Potion"));
} while (!hudRecipe());
break;
}
} while (@menu != 1);
close;
// showRecipe (Craft, Bonus, Req1No, Req1Id, Req2No, Req2Id)
// Bonus must NOT be zero to display text
function showRecipe {
/*
debugmes "Exist: %d", getd("$RECIPES_ALCHEMY_"+getcharid(2)+"["+getarg(0)+"]");
debugmes "Seeking for slot %d on guild %d", getarg(0), getcharid(2);
*/
if (getd("$RECIPES_ALCHEMY_"+getcharid(2)+"["+getarg(0)+"]")) {
//debugmes "Hooray! It exists! We have %d defined", getarg(1);
if (getarg(1)) {
mesn l("Craft @@", getitemlink(getarg(1)));
if (getarg(2,0))
mesc l("* @@ @@", getarg(2), getitemlink(getarg(3)));
if (getarg(4,0))
mesc l("* @@ @@", getarg(4), getitemlink(getarg(5)));
mes "";
}
//debugmes "You got it: %d (global: %d)", getarg(0), $RECIPES_ALCHEMY[getcharid(2)];
return 1;
}
//debugmes "Nope, nothing here";
return 0;
}
// calcRecipe (CraftID, GLV, GGP, TXT)
function calcRecipe {
array_push(@tmp_alcrep_id, getarg(0));
array_push(@tmp_alcrep_glv, getarg(1));
array_push(@tmp_alcrep_ggp, getarg(2));
array_push(@tmp_alcrep_txt$, getarg(3) + " - GLV "+getarg(1)+", "+format_number(getarg(2))+" GP");
return;
}
// clearRecipe ()
function clearRecipe {
deletearray(@tmp_alcrep_id);
deletearray(@tmp_alcrep_glv);
deletearray(@tmp_alcrep_ggp);
deletearray(@tmp_alcrep_txt$);
@tmp_alcrep_id[0]=-1;
@tmp_alcrep_glv[0]=-1;
@tmp_alcrep_ggp[0]=-1;
@tmp_alcrep_txt$[0]=l("Learn Nothing");
return;
}
// hudRecipe ()
function hudRecipe {
.@gid=getcharid(2);
// Select
select (implode(@tmp_alcrep_txt$, ":"));
@menu=@menu-1;
/* DEBUG prints
debugmes "You choose: %d", @menu;
debugmes getd("$RECIPES_ALCHEMY_"+.@gid);
copyarray(.@v, getd("$RECIPES_ALCHEMY_"+.@gid), getarraysize(getd("$RECIPES_ALCHEMY_"+.@gid)) );
debugmes "Width: %d (out of %d)", getarraysize(.@v), getarraysize(getd("$RECIPES_ALCHEMY_"+.@gid));
debugmes "Slot 44: %d", .@v[44];
debugmes "Slot 43: %d", .@v[43];
debugmes "Slot 42: %d", .@v[42];
debugmes "GLVL Options: %d-%d-%d-%d", @tmp_alcrep_glv[0], @tmp_alcrep_glv[1], @tmp_alcrep_glv[2], @tmp_alcrep_glv[3];
*/
if (@tmp_alcrep_glv[@menu] <= 0)
return 1;
if (getguildlvl(.@gid) < @tmp_alcrep_glv[@menu]) {
mesc l("Insufficient Guild Level! (@@/@@)", getguildlvl(.@gid), @tmp_alcrep_glv[@menu]), 1;
next;
return 0;
}
if ($GUILD_BANK[.@gid] < @tmp_alcrep_ggp[@menu]) {
mesc l("Insufficient Guild Money! (Guild has: @@ GP)", format_number($GUILD_BANK[.@gid])), 1;
next;
return 0;
}
// All fine, proceed
$GUILD_BANK[.@gid] -= @tmp_alcrep_ggp[@menu];
setd("$RECIPES_ALCHEMY_"+getcharid(2)+"["+@tmp_alcrep_id[@menu]+"]", true);
mesc l("Skill learnt!"), 2;
next;
return 0;
}
// GDSkillLearn(SKID, cost-per-guild-level, title, desc, lv1, {lv2, lv3...})
function GDSkillLearn {
.@id=getarg(0);
.@p=getarg(1);
.@t$=getarg(2);
.@d$=getarg(3);
.@gid=getcharid(2);
.@gid_lv=getguildlvl(.@gid);
.@cur_lv=getskilllv(.@id);
.@min_lv=getarg(4+.@cur_lv, -1);
.@price=.@min_lv*.@p;
// Max level reached
if (.@min_lv < 0)
{
mesc l("This skill cannot be upgraded further.");
next;
return 0;
}
// Guild level insuffice
if (.@gid_lv < .@min_lv)
{
mesc l("Guild Level is not enough: @@/@@", .@gid_lv, .@min_lv);
next;
return 0;
}
mes ".:: "+.@t$+" ::.";
mes .@d$;
mesc l("The cost for Guild Vault is @@ GP.", format_number(.@price));
mesc l("Current Guild Balance: %s GP", format_number($GUILD_BANK[.@gid]));
next;
select
rif($GUILD_BANK[.@gid] >= .@price, l("Upgrade it")),
l("Don't upgrade it");
mes "";
if (@menu == 1 && $GUILD_BANK[.@gid] >= .@price)
{
$GUILD_BANK[.@gid]-=.@price;
// guildskill()?
skill .@id, .@cur_lv+1, 0;
mesc l("Skill improved"), 2;
@menu=99;
return 1;
}
return 0;
}
OnInit:
.distance=2;
end;
}