// TMW2/LoF scripts.
// Authors:
// TMW-LoF Team
// Jesusalva
// Description:
// Collect every piece of equipment ingame for no real reason
// Cannot be completed yet, because not every piece of equipment is available ingame
017-1,135,106,0 script Royal Fairy NPC_FAIRY_B,{
.@n=getq(LoFQuest_Fairy);
mesn;
if (.@n == 0) goto L_Busy;
if (.@n < 3) goto L_Incomplete;
if (.@n >= 3) goto L_Main;
L_Busy:
mesq l("Hi, I'm too busy to talk right now, please go away. Very pressing matters at hand.");
close;
L_Incomplete:
mesq l("Hello, I noticed my dear friend, Susanne, asked you to help us save my sisters; do not forget to ask Susanne where the Fafi Dragon was last seen.");
close;
L_Main:
if (!(TELEPORTERS & TP_LILIT) && rand2(3) == 2) {
mesn;
mesq l("Have you ever met our Queen Lilit? She is lovely but hates @@ for some reason...", get_race());
next;
mesc l("Do you want a tip? \"It's not suicide if you know how to swim.\"");
next;
}
if (#COLLECTOR == (COLLECT_ALL-1)) {
mesn;
mesc l("OMG you got all equipment in Moubootaur Legends. You are truly a legend of legends."), 1;
next;
inventoryplace NPCEyes, 5;
mesn;
mesc l("Here, you can have the partly unobtainable items reserved to developers and contributors. And, uh, these NPC-only items, don't let developers know I gave you this. It'll be our little secret!"), 1;
#COLLECTOR = #COLLECTOR | COLLECT_ALL;
getitembound DEVCap, 1, 1;
getitembound ContributorSweater, 1, 1;
getitembound CommunityShirt, 1, 1;
getitembound RiceHat, 1, 1;
getitembound AlchemistArmor, 1, 1;
// Should we give them a NPCEyes? Or better not (would break checks)?
}
/*
COLLECT_CHESTPLATE: 1
COLLECT_HEADGEAR: 2
COLLECT_PANTS: 4
COLLECT_SHOES: 8
COLLECT_NECKLACES: 16
COLLECT_RINGS: 32
COLLECT_ACESSORIES: 64
COLLECT_SCARFS: 128
COLLECT_GLOVES: 256
COLLECT_SHIELDS: 512
COLLECT_1HSWORDS: 1024
COLLECT_2HSWORDS: 2048
COLLECT_BOWS: 4096
COLLECT_FIREGUNS: 8192
COLLECT_WANDS: 16384
COLLECT_QUIVERS: 32768
COLLECT_MOUNTS: 65536
COLLECT_PETS: 131072
*/
do {
deletearray .@items;
mesn;
mesq l("Are you trying to collect every piece of equipment ingame? Come tell me if you are and I'll give you a collector stamp!");
mesc l("Not every piece of equipment is ingame yet.");
mes "";
select
l("Good bye!"),
rif(false && !(#COLLECTOR & COLLECT_CHESTPLATE), l("Chestplates")),
rif(false && !(#COLLECTOR & COLLECT_HEADGEAR), l("Headgear")),
rif(true && !(#COLLECTOR & COLLECT_PANTS), l("Pants")),
rif(false && !(#COLLECTOR & COLLECT_SHOES), l("Shoes")),
rif(false && !(#COLLECTOR & COLLECT_NECKLACES), l("Necklaces")),
rif(false && !(#COLLECTOR & COLLECT_RINGS), l("Rings")),
rif(false && !(#COLLECTOR & COLLECT_ACESSORIES), l("Accessories")),
rif(false && !(#COLLECTOR & COLLECT_SCARFS), l("Scarfs")),
rif(false && !(#COLLECTOR & COLLECT_GLOVES), l("Gloves")),
rif(true && !(#COLLECTOR & COLLECT_SHIELDS), l("Shields")),
rif(false && !(#COLLECTOR & COLLECT_1HSWORDS), l("1 Hand Swords")),
rif(true && !(#COLLECTOR & COLLECT_2HSWORDS), l("2 Hand Swords")),
rif(true && !(#COLLECTOR & COLLECT_BOWS), l("Bows")),
rif(true && !(#COLLECTOR & COLLECT_FIREGUNS), l("Fire Staves")),
rif(true && !(#COLLECTOR & COLLECT_WANDS), l("Wands")),
rif(true && !(#COLLECTOR & COLLECT_QUIVERS), l("Quivers")),
rif(false && !(#COLLECTOR & COLLECT_MOUNTS), l("Mounts")),
rif(false && !(#COLLECTOR & COLLECT_PETS), l("Pets")),
l("Trade stamps");
mes "";
switch (@menu+1) {
/////////////////////////////////////////////////////////////////////////
// Chestplate (2x bells)
case 1:
// FIXME: several unreleased
setarray .@items, CreasedShirt, YetiTankTop, MoonshroomRobe, GoldenChainmail, LazuriteRobe, CandorShirt, ArtisTankTop, ShortTankTop, TneckSweater, ValentineDress, CottonShirt, SilkRobe, LeatherShirt, SailorShirt, MinerTankTop, LieutenantArmor, CrusadeArmor, VneckSweater, DesertShirt, UglyChristmasSweater, Chainmail, VneckJumper, ForestArmor, Bathrobe, CopperArmor, SorcererRobe, LightPlatemail, GoldenLightPlatemail, WarlordPlate, BromenalChest, GoldenWarlordPlate, GraduationRobe, TerraniteArmor, RedknightArmor, AssassinChest, SaviorArmor;
.@power = 0;
.@total = getarraysize(.@items);
freeloop(true);
for (.@i=0; .@i < .@total; .@i++) {
msObjective(countitem(.@items[.@i]), "* "+getitemlink(.@items[.@i]));
if (countitem(.@items[.@i]))
.@power += 1;
}
freeloop(false);
next;
if (.@power == .@total) {
//#COLLECTOR = #COLLECTOR|COLLECT_CHESTPLATE;
//getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
break;
next;
break;
/////////////////////////////////////////////////////////////////////////
// Headgear (2x bells)
case 2:
msObjective(countitem(CreasedShirt), "* "+getitemlink(CreasedShirt));
next;
break;
/////////////////////////////////////////////////////////////////////////
// Pants
case 3:
setarray .@items, CreasedShorts, RaidTrousers, AssassinPants, BromenalPants, JeansChaps, CottonShorts, MiniSkirt, CottonTrousers, SilkPants, CottonSkirt, TerranitePants, ChainmailSkirt, JeansShorts, LeatherTrousers, BanditPants, WarlordPants, SaviorPants, CandorShorts, PirateShorts, FarmerPants, LuffyxSummerShorts;
.@power = 0;
.@total = getarraysize(.@items);
freeloop(true);
for (.@i=0; .@i < .@total; .@i++) {
msObjective(countitem(.@items[.@i]), "* "+getitemlink(.@items[.@i]));
if (countitem(.@items[.@i]))
.@power += 1;
}
freeloop(false);
next;
if (.@power == .@total) {
#COLLECTOR = #COLLECTOR|COLLECT_PANTS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
break;
/////////////////////////////////////////////////////////////////////////
// Shoes
case 4:
// FIXME: several unreleased (e.g. WizardMoccasins and TerraniteBoots)
setarray .@items, LousyMoccasins, AssassinBoots, DeepBlackBoots, CandorBoots, FurBoots, CottonBoots, Boots, LeatherBoots, RedStockings, BromenalBoots, WizardMoccasins, WitchBoots, HeliosBoots, TerraniteBoots, WarlordBoots, SaviorBoots, CreasedBoots, TulimsharGuardBoots, SquirrelBoots, Slippers;
.@power = 0;
.@total = getarraysize(.@items);
freeloop(true);
for (.@i=0; .@i < .@total; .@i++) {
msObjective(countitem(.@items[.@i]), "* "+getitemlink(.@items[.@i]));
if (countitem(.@items[.@i]))
.@power += 1;
}
freeloop(false);
next;
if (.@power == .@total) {
//#COLLECTOR = #COLLECTOR|COLLECT_SHOES;
//getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
next;
break;
/////////////////////////////////////////////////////////////////////////
// Necklaces
case 5:
msObjective(countitem(CreasedShirt), "* "+getitemlink(CreasedShirt));
next;
break;
/////////////////////////////////////////////////////////////////////////
// Rings
case 6:
msObjective(countitem(CreasedShirt), "* "+getitemlink(CreasedShirt));
next;
break;
/////////////////////////////////////////////////////////////////////////
// Accessories
case 7:
msObjective(countitem(CreasedShirt), "* "+getitemlink(CreasedShirt));
next;
break;
/////////////////////////////////////////////////////////////////////////
// Scarfs
case 8:
msObjective(countitem(CreasedShirt), "* "+getitemlink(CreasedShirt));
next;
break;
/////////////////////////////////////////////////////////////////////////
// Gloves
case 9:
// FIXME: several unreleased
setarray .@items, Armbands, CopperArmbands, IronArmbands, SarabArmlet, CreasedGloves, CottonGloves, MinerGloves, SilkGloves, LeatherGloves, ForestGloves, BromenalGloves, GoldenArmbands, WarlordGloves, ManaGloves, TerraniteGloves, AssassinGloves, CandorGloves, SaviorGloves;
.@power = 0;
.@total = getarraysize(.@items);
freeloop(true);
for (.@i=0; .@i < .@total; .@i++) {
msObjective(countitem(.@items[.@i]), "* "+getitemlink(.@items[.@i]));
if (countitem(.@items[.@i]))
.@power += 1;
}
freeloop(false);
next;
if (.@power == .@total) {
//#COLLECTOR = #COLLECTOR|COLLECT_GLOVES;
//getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
next;
break;
/////////////////////////////////////////////////////////////////////////
// Shields
case 10:
setarray .@items, EnchantedHerbBag, Barrel, RoundLeatherShirt, LeatherShield, WoodenShield, BladeShield, BraknarShield, BritShield, BromenalShield, AncientShield, BlueKnightShield, SteelShield, DragonShield, SaviorShield;
.@power = 0;
.@total = getarraysize(.@items);
freeloop(true);
for (.@i=0; .@i < .@total; .@i++) {
msObjective(countitem(.@items[.@i]), "* "+getitemlink(.@items[.@i]));
if (countitem(.@items[.@i]))
.@power += 1;
}
freeloop(false);
// Shield only: Intervene a Boia
.@total += 1;
.@shield = min(1, (countitem(KidBola)+
countitem(CandorBola)+
countitem(PurpleBola)+
countitem(TulimsharBola)+
countitem(SnakeBola)+
countitem(PiouBola)+
countitem(MasterBola)));
.@power += .@shield;
msObjective(.@shield, "* "+l("A [@@2717|Buoy@@] of any type"));
// End Shield only code
next;
if (.@power == .@total) {
#COLLECTOR = #COLLECTOR|COLLECT_SHIELDS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
next;
break;
/////////////////////////////////////////////////////////////////////////
// 1H Swords
case 11:
msObjective(countitem(DarkPulsar), "* "+getitemlink(DarkPulsar));
next;
break;
/////////////////////////////////////////////////////////////////////////
// 2H Swords
case 12:
setarray .@items, Pickaxe, ThunderStaff, Scythe, MiereCleaver, Broadsword, Kanabo, BlacksmithAxe, PowerfulLightsaber, CentaurSpear, Zambacutou, CursedScythe, Halberd;
.@power = 0;
.@total = getarraysize(.@items);
freeloop(true);
for (.@i=0; .@i < .@total; .@i++) {
msObjective(countitem(.@items[.@i]), "* "+getitemlink(.@items[.@i]));
if (countitem(.@items[.@i]))
.@power += 1;
}
freeloop(false);
next;
if (.@power == .@total) {
#COLLECTOR = #COLLECTOR|COLLECT_2HSWORDS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
break;
/////////////////////////////////////////////////////////////////////////
// Bows
case 13:
msObjective(countitem(TrainingBow), "* "+getitemlink(TrainingBow));
msObjective(countitem(WoodenBow), "* "+getitemlink(WoodenBow));
msObjective(countitem(ShortBow), "* "+getitemlink(ShortBow));
msObjective(countitem(ForestBow), "* "+getitemlink(ForestBow));
msObjective(countitem(ElficBow), "* "+getitemlink(ElficBow));
msObjective(countitem(ChampionshipBow), "* "+getitemlink(ChampionshipBow));
msObjective(countitem(BansheeBow), "* "+getitemlink(BansheeBow));
next;
if (countitem(PynRifle) &&
countitem(PynGatling) &&
countitem(PynShotgun) &&
countitem(PynRevolver) &&
countitem(Dustynator)) {
#COLLECTOR = #COLLECTOR|COLLECT_BOWS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
}
break;
/////////////////////////////////////////////////////////////////////////
// Firearms
case 14:
msObjective(countitem(PynRifle), "* "+getitemlink(PynRifle));
msObjective(countitem(PynGatling), "* "+getitemlink(PynGatling));
msObjective(countitem(PynShotgun), "* "+getitemlink(PynShotgun));
msObjective(countitem(PynRevolver), "* "+getitemlink(PynRevolver));
msObjective(countitem(Dustynator), "* "+getitemlink(Dustynator));
next;
if (countitem(PynRifle) &&
countitem(PynGatling) &&
countitem(PynShotgun) &&
countitem(PynRevolver) &&
countitem(Dustynator)) {
#COLLECTOR = #COLLECTOR|COLLECT_FIREGUNS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
next;
}
break;
/////////////////////////////////////////////////////////////////////////
// Wands
case 15:
msObjective(countitem(TrainingWand), "* "+getitemlink(TrainingWand));
msObjective(countitem(NoviceWand), "* "+getitemlink(NoviceWand));
msObjective(countitem(ReinbooWand), "* "+getitemlink(ReinbooWand));
msObjective(countitem(ApprenticeWand), "* "+getitemlink(ApprenticeWand));
msObjective(countitem(LeaderWand), "* "+getitemlink(LeaderWand));
msObjective(countitem(MysticWand), "* "+getitemlink(MysticWand));
next;
if (countitem(TrainingWand) &&
countitem(NoviceWand) &&
countitem(ReinbooWand) &&
countitem(ApprenticeWand) &&
countitem(LeaderWand) &&
countitem(MysticWand)) {
#COLLECTOR = #COLLECTOR|COLLECT_WANDS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
next;
}
break;
/////////////////////////////////////////////////////////////////////////
// Quivers
case 16:
msObjective(countitem(LeatherQuiver), "* "+getitemlink(LeatherQuiver));
msObjective(countitem(IronQuiver), "* "+getitemlink(IronQuiver));
msObjective(countitem(BronzeQuiver), "* "+getitemlink(BronzeQuiver));
msObjective(countitem(PlatinumQuiver), "* "+getitemlink(PlatinumQuiver));
next;
if (countitem(LeatherQuiver) &&
countitem(IronQuiver) &&
countitem(BronzeQuiver) &&
countitem(PlatinumQuiver)) {
#COLLECTOR = #COLLECTOR|COLLECT_QUIVERS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
next;
}
break;
/////////////////////////////////////////////////////////////////////////
// Mounts
case 17:
msObjective(countitem(LegendaryTortuga), "* "+getitemlink(LegendaryTortuga));
msObjective(countitem(LegendaryMouboo), "* "+getitemlink(LegendaryMouboo));
next;
if (countitem(LegendaryTortuga) &&
countitem(LegendaryMouboo)) {
#COLLECTOR = #COLLECTOR|COLLECT_MOUNTS;
getitembound SilverBell, 1, 1;
mesc l("CONGRATULATIONS! You have obtained the %s.", getitemlink(SilverBell)), 3;
next;
}
break;
/////////////////////////////////////////////////////////////////////////
// Pets (2x bells)
case 18:
msObjective(countitem(CreasedShirt), "* "+getitemlink(CreasedShirt));
next;
break;
/////////////////////////////////////////////////////////////////////////
case 19:
openshop;
closeclientdialog;
close;
break;
}
} while (@menu != 0);
close;
OnInit:
.distance=5;
tradertype(NST_CUSTOM);
// Sell: Aethyr Points, Strange Coins, Manapple, Supreme Gift, Housing Letter 3, Blueprints E, SaviorBlueprint, BoxsetEE, Tux/Linarian Soul, SunnyCrystal?, X Cards,
// Pets → Strange Coin
// You can get up to 18 stamps, but pets, hats and armor give 2x
// Plan wisely and accordingly (21 stamps total)
// As of 2024-01-09, a total of 7 stamps were available
sellitem SunnyCrystal, 12;
sellitem LegendaryMouboo, 8;
sellitem SupremeGift, 7;
sellitem MysteriousFruit, 7;
sellitem LegendaryTortuga, 6;
sellitem LinarianSoul, 6;
sellitem PrismGift, 5;
sellitem SaviorBlueprint, 4;
sellitem TuxSoul, 4;
sellitem GoldenGift, 3;
sellitem MercBoxEE, 2;
sellitem HousingLetterIII, 2;
sellitem ReflectCardX, 2;
sellitem SpeedCardX, 2;
sellitem PowerCardX, 2;
sellitem WallCardX, 2;
sellitem NecromancerCardX, 1;
sellitem HeroCardX, 1;
sellitem KnightCardX, 1;
sellitem ClericCardX, 1;
sellitem DruidCardX, 1;
sellitem MageCardX, 1;
sellitem NinjaCardX, 1;
sellitem NatureCardX, 1;
sellitem LightGreenDiamond, 1;
end;
/* set currency to be item 828 */
OnCountFunds:
setcurrency(countitem(SilverBell));
end;
/* @price is total cost. @points is if we accept two items as currency. */
OnPayFunds:
//dispbottom "Hi: price="+@price+" and points="+@points;
if( countitem(SilverBell) < @price )
end;
delitem SilverBell, @price;
purchaseok();
end;
}