summaryrefslogblamecommitdiff
path: root/npc/017-1/fairy_collector.txt
blob: fca6c2cce98153a6cb23a4cbd57a7440774b7282 (plain) (tree)
1
2
3
4
5
6
7
8
9
10


                    






                                                                                       

         


                                   









                                                                                                                                                                






                                                                                                               














                                                                                                                                                                                                                     





















                                      
                        





                                                                                                                                      

                                                                           
                                                                





                                                                           
                                                                    
                                                                           
                                                                           
                                                              




                                                                         
                          
           
                      
                                                                                 
                                
               

















                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

              
                                                                                 
                              



                                                                             
                                                                                 

                









                                                                                                                                                                                                                                                                                                                                    
             




                                                                                                 
              
                                                                                 

                
















                                                                                                                                                                                                                                                                                                               

              
                                                                                 




                                                                             
                                                                                 




                                                                             
                                                                                 




                                                                             
                                                                                 




                                                                             
                                                                                 

                 
















                                                                                                                                                                                                                                                                                         

              
                                                                                 

                  



























                                                                                                                                                                                                                                     

              
                                                                                 

                    
                                                                         

              
                                                                                 

                    









                                                                                                                                                                              
             
                                 

                                                         

                                                                                                 
              
                                                                                 

                



                                                                           
                                                                     

                                                                                   
             








                                                                                                 
              
                                                                                 

                   










                                                                           


                                                                                                 
                     
             
              
                                                                                 

                




                                                                                 
                                                                         





                                        
                                    


                                                                                                 
                     
             
              
                                                                                 

                  








                                                                                 


                                                                                                 
                     
             
              
                                                                                 

                 
                                                                                     
                                                                                   
             






                                                                                                 
              
                                                                                 
                          



                                                                             
                                                                                 
                


                          
              



                         




                               
                                                                                                                                                                        
                            

                                                                    
                                                           
                                  



                                     
                                 

                                    
































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

}