// 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(false && !(#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: // FIXME: Zambacutou unreleased 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 2023-11-01, a total of 6 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; }