// 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; }