summaryrefslogblamecommitdiff
path: root/npc/functions/seasons.txt
blob: 8ae930001bdb49647f488736b2faf44b2f889dab (plain) (tree)


































                                                                       
 








































































                                                                           


                                                                    

                                                        

           

                                              





                                         

                           

                           
                                  
                                  




                                                                    

                                                                    

                                                                    
                                        
                                        
         
                         

           


                                                        
                                         



                           







                                                   



                                                   
                              
                                                   

                                               







                                                   
 



                                       

                               
 


                      
 

                                                    
 




























































                                                      

                          
                                                                                                                                                                      
                                
 


                                    
                    












                                                             
        
 
            


                                                                             
                                       











                                                       
                                              

        
              
                                                                                                                       











                                                                                             



                                                                    

                                                            















                                                          
                                                        

















                                                        






                                                


            






























                                                    






                                             

        
       


                    
         
                               
                       
     

        
// TMW2 Script.
// Authors:
//    Jesusalva
// Description:
//    Season functions

// Function authored by Reid and edited by Jesusalva
// season({day, month})
// SQuest_Summer
//    returns the current season (approximation)
//      WINTER:      Winter, 21/12
//      SPRING:      Spring, 20/03
//      SUMMER:      Summer, 21/06
//      AUTUMN:      Autumn, 22/09

function	script	season	{
    .@current_month = getarg(0, gettime(GETTIME_MONTH));

    if (.@current_month % 3 == 0) {
        .@current_day = getarg(1, gettime(GETTIME_DAYOFMONTH));

        switch (.@current_month) {
            case MARCH:     .@season_day = 20; break;
            case JUNE:      .@season_day = 21; break;
            case SEPTEMBER: .@season_day = 22; break;
            case DECEMBER:  .@season_day = 21; break;
            default: break;
        }

        .@is_after_season_day = .@current_day >= .@season_day ? 0 : -1;
    }

    return (.@current_month / 3 + .@is_after_season_day) % 4;
}


// Event seasons
// Christmas cannot be on GlobalEventMenu because it affects seasons system
function	script	sChristmas	{
    // Determine the drop rates based on month, and Christmas proximity
    if (gettime(GETTIME_MONTH) == DECEMBER) {
        if (gettime(GETTIME_DAYOFMONTH) <= 26)
            .@m=10;
        else
            .@m=8;
    } else {
        .@m=5;
    }

    // Add Christmas drops
    addmonsterdrop(Moggun,      XmasCake,  80*.@m);
    addmonsterdrop(AlphaMouboo, XmasCake,  92*.@m);
    addmonsterdrop(BlueSlime,   XmasCake, 100*.@m);
    addmonsterdrop(SantaSlime,  XmasCake, 120*.@m);
    addmonsterdrop(IcedFluffy,  XmasCake, 150*.@m);
    addmonsterdrop(Yeti,        XmasCake, 500*.@m);

    addmonsterdrop(Bandit,      XmasCandyCane,  30*.@m);
    addmonsterdrop(Mouboo,      XmasCandyCane,  48*.@m);
    addmonsterdrop(WhiteSlime,  XmasCandyCane,  50*.@m);
    addmonsterdrop(RudolphSlime,XmasCandyCane, 100*.@m);
    addmonsterdrop(Fluffy,      XmasCandyCane, 200*.@m);
    addmonsterdrop(AzulSlime,   XmasCandyCane, 200*.@m);

    addmonsterdrop(Duck,        GingerBreadMan,  36*.@m);
    addmonsterdrop(WaterFairy,  GingerBreadMan, 100*.@m);

    // Event drop rates, multiplied by 10 during Christmas (see .@m)
    addmonsterdrop(Yeti,        ClosedChristmasBox, 350*.@m);
    addmonsterdrop(WaterFairy,  ClosedChristmasBox, 108*.@m);
    addmonsterdrop(AlphaMouboo, ClosedChristmasBox,  83*.@m);
    addmonsterdrop(IcedFluffy,  ClosedChristmasBox,  67*.@m);
    addmonsterdrop(BlueSlime,   ClosedChristmasBox,  42*.@m);
    addmonsterdrop(Moggun,      ClosedChristmasBox,  40*.@m);
    addmonsterdrop(SantaSlime,  ClosedChristmasBox,  36*.@m);
    addmonsterdrop(AzulSlime,   ClosedChristmasBox,  20*.@m);
    addmonsterdrop(Fluffy,      ClosedChristmasBox,  20*.@m);
    addmonsterdrop(RudolphSlime,ClosedChristmasBox,   8*.@m);
    addmonsterdrop(WhiteSlime,  ClosedChristmasBox,   3*.@m);
    addmonsterdrop(GiantMaggot, ClosedChristmasBox,   2*.@m);

    // This is not dropped outside December
    if (gettime(GETTIME_MONTH) == DECEMBER) {
        // Bugfix
        if (gettime(GETTIME_YEAR) == 2018)
            .@m+=10;
        addmonsterdrop(WaterFairy,  XmasGift,  6*.@m);
        addmonsterdrop(AlphaMouboo, XmasGift,  5*.@m);
        addmonsterdrop(IcedFluffy,  XmasGift,  4*.@m);
        addmonsterdrop(SantaSlime,  XmasGift,  3*.@m);
        addmonsterdrop(Fluffy,      XmasGift,  2*.@m);
        addmonsterdrop(AzulSlime,   XmasGift,  2*.@m);
    }

    // Change maps for Christmas Season (Specially LoF maps)
    addmapmask "003-1", MASK_CHRISTMAS;
    addmapmask "005-1", MASK_CHRISTMAS;
    addmapmask "009-1", MASK_CHRISTMAS;
    addmapmask "012-1", MASK_CHRISTMAS;
    addmapmask "017-2", MASK_CHRISTMAS;
    addmapmask "017-2-1", MASK_CHRISTMAS;
    addmapmask "017-3", MASK_CHRISTMAS;
    addmapmask "020-2", MASK_CHRISTMAS;

    // Enable event
    set $EVENT$, "Christmas";
    //logmes "Enabled CHRISTMAS event.", LOGMES_ATCOMMAND;
    return;
}
// Valentine Day is handled by @event, this is only for @reloadmobdb
function	script	sValentine	{
    // Add Valentine drops
    addmonsterdrop(RedMushroom,         LoveLetter,  8);
    addmonsterdrop(ChocolateSlime,      LoveLetter,  4);
    return;
}

// This allows GMs to change seasons if needed
function	script	SeasonControl	{
    do
    {
        select
            "Summer Start",
            "Summer End",
            "Autumn Start",
            "Autumn End",
            "Winter Start",
            "Winter End",
            "SPECIAL - Christmas",
            "SPECIAL - Valentine",
            "Abort";

        switch (@menu) {
            case 1: donpcevent("#SeasonCore::OnSummerStart"); break;
            case 2: donpcevent("#SeasonCore::OnSummerEnd"); break;
            case 3: donpcevent("#SeasonCore::OnAutumnStart"); break;
            case 4: donpcevent("#SeasonCore::OnAutumnEnd"); break;
            case 5: donpcevent("#SeasonCore::OnWinterStart"); break;
            case 6: donpcevent("#SeasonCore::OnWinterEnd"); break;
            case 7: sChristmas(); break;
            case 8: sValentine(); break;
        }
    } while (@menu != 9);
    return;
}

// If skip_checks is set, it'll ignore $@SEASON control.
// SeasonReload( {skip_checks} )
function	script	SeasonReload	{
    // Proccess skip_checks
    if (getarg(0,0))
        $@SEASON=99;

    // Summer extra drops
    if (season() == SUMMER && $@SEASON != SUMMER) {
        donpcevent("#SeasonCore::OnSummerStart");
    }
    // Summer end delete drops
    if (season() == AUTUMN && $@SEASON == SUMMER) {
        donpcevent("#SeasonCore::OnSummerEnd");
    }
    // Autumn extra drops
    if (season() == AUTUMN && $@SEASON != AUTUMN) {
        donpcevent("#SeasonCore::OnAutumnStart");
    }
    // Autumn end delete drops
    if (season() == WINTER && $@SEASON == AUTUMN) {
        donpcevent("#SeasonCore::OnAutumnEnd");
    }
    // Winter extra drops
    if (season() == WINTER && $@SEASON != WINTER) {
        donpcevent("#SeasonCore::OnWinterStart");
    }
    // Winter end delete drops
    if (season() == SPRING && $@SEASON == WINTER) {
        donpcevent("#SeasonCore::OnWinterEnd");
    }

    // Non-season, but season-related
    // Christmas have a special feature
    if ($EVENT$ == "Christmas")
        sChristmas();
    if ($EVENT$ == "Valentine")
        sValentine();

    $@SEASON=season();
    return;
}

000-0,0,0,0	script	#SeasonCore	NPC_HIDDEN,{
    end;

OnSummerStart:
    addmonsterdrop(Duck, CherryCocktail, 360);
    addmonsterdrop(Croc, CherryCocktail, 180);
    addmonsterdrop(SaxsoGhost, CherryCocktail, 450);
    addmonsterdrop(RedButterfly, CherryCocktail, 100);

    addmonsterdrop(Maggot, CactusCocktail, 140);
    addmonsterdrop(DesertMaggot, CactusCocktail, 190);
    addmonsterdrop(Scorpion, CactusCocktail, 165);
    addmonsterdrop(GiantMaggot, CactusCocktail, 290);
    addmonsterdrop(Centaur, CactusCocktail, 1000);

    addmonsterdrop(AlphaMouboo, AppleCocktail, 850);
    addmonsterdrop(OceanCroc, AppleCocktail, 480);
    addmonsterdrop(Mouboo, AppleCocktail, 280);
    addmonsterdrop(Pinkie, AppleCocktail, 70);

    addmonsterdrop(Duck, Sunglasses, 1);
    addmonsterdrop(Croc, Sunglasses, 1);
    addmonsterdrop(SaxsoGhost, Sunglasses, 1);
    addmonsterdrop(DesertMaggot, Sunglasses, 1);
    addmonsterdrop(Scorpion, Sunglasses, 1);
    addmonsterdrop(GiantMaggot, Sunglasses, 1);
    addmonsterdrop(Centaur, Sunglasses, 3);
    addmonsterdrop(AlphaMouboo, Sunglasses, 1);
    addmonsterdrop(OceanCroc, Sunglasses, 1);
    addmonsterdrop(Mouboo, Sunglasses, 1);
    addmonsterdrop(Pinkie, Sunglasses, 1);
    addmonsterdrop(Moonshroom, Sunglasses, 2);
    addmonsterdrop(RedButterfly, Sunglasses, 1);
    end;

OnSummerEnd:
    delmonsterdrop(Duck, CherryCocktail);
    delmonsterdrop(Croc, CherryCocktail);
    delmonsterdrop(SaxsoGhost, CherryCocktail);
    delmonsterdrop(RedButterfly, CherryCocktail);
    delmonsterdrop(Maggot, CactusCocktail);
    delmonsterdrop(DesertMaggot, CactusCocktail);
    delmonsterdrop(Scorpion, CactusCocktail);
    delmonsterdrop(GiantMaggot, CactusCocktail);
    delmonsterdrop(Centaur, CactusCocktail);
    delmonsterdrop(AlphaMouboo, AppleCocktail);
    delmonsterdrop(OceanCroc, AppleCocktail);
    delmonsterdrop(Mouboo, AppleCocktail);
    delmonsterdrop(Pinkie, AppleCocktail);
    delmonsterdrop(Duck, Sunglasses);
    delmonsterdrop(Croc, Sunglasses);
    delmonsterdrop(SaxsoGhost, Sunglasses);
    delmonsterdrop(DesertMaggot, Sunglasses);
    delmonsterdrop(Scorpion, Sunglasses);
    delmonsterdrop(GiantMaggot, Sunglasses);
    delmonsterdrop(Centaur, Sunglasses);
    delmonsterdrop(AlphaMouboo, Sunglasses);
    delmonsterdrop(OceanCroc, Sunglasses);
    delmonsterdrop(Mouboo, Sunglasses);
    delmonsterdrop(Pinkie, Sunglasses);
    delmonsterdrop(Moonshroom, Sunglasses);
    delmonsterdrop(RedButterfly, Sunglasses);
    end;

OnAutumnStart:
    // Ched's Quest Winner
    .@nb = query_sql("SELECT c.name FROM `quest` AS i, `char` AS c WHERE i.quest_id="+SQuest_Ched+" AND i.char_id=c.char_id ORDER BY i.count2 DESC LIMIT 1", .@name$);
    $@AUTUMN_VICTOR$=.@name$[0];

    // Fancy trees
    addmapmask "012-1", MASK_AUTUMN;

    // Autumn's Drop
    addmonsterdrop(FafiDragon, PumpkandySeed, 10000);
    addmonsterdrop(BlackMamba, PumpkandySeed, 8000);
    addmonsterdrop(AlphaMouboo, PumpkandySeed, 5000);
    addmonsterdrop(PoisonSpikyMushroom, PumpkandySeed, 3000);
    addmonsterdrop(Mouboo, PumpkandySeed, 2000);
    addmonsterdrop(Bandit, PumpkandySeed, 1600);
    addmonsterdrop(Fluffy, PumpkandySeed, 1500);
    addmonsterdrop(LogHead, PumpkandySeed, 1400);
    addmonsterdrop(CaveSnake, PumpkandySeed, 1380);
    addmonsterdrop(CaveMaggot, PumpkandySeed, 850);
    addmonsterdrop(GreenSlime, PumpkandySeed, 750);
    addmonsterdrop(Piou, PumpkandySeed, 600);
    addmonsterdrop(Squirrel, PumpkandySeed, 500);
    end;

OnAutumnEnd:
    // Ched's rewards can't be claimed anymore. Delete that from all players.
    DelQuestFromEveryPlayer(SQuest_Ched);

    removemapmask "012-1", MASK_AUTUMN;
    delmonsterdrop(FafiDragon, PumpkandySeed);
    delmonsterdrop(Mouboo, PumpkandySeed);
    delmonsterdrop(AlphaMouboo, PumpkandySeed);
    delmonsterdrop(Fluffy, PumpkandySeed);
    delmonsterdrop(Piou, PumpkandySeed);
    delmonsterdrop(CaveSnake, PumpkandySeed);
    delmonsterdrop(CaveMaggot, PumpkandySeed);
    delmonsterdrop(Bandit, PumpkandySeed);
    delmonsterdrop(Squirrel, PumpkandySeed);
    delmonsterdrop(PoisonSpikyMushroom, PumpkandySeed);
    delmonsterdrop(LogHead, PumpkandySeed);
    delmonsterdrop(GreenSlime, PumpkandySeed);
    delmonsterdrop(BlackMamba, PumpkandySeed);
    end;

OnWinterStart:
    // Nearly all Winterlands + Woodlands + ducks drop winter items. (Summer is Desert shining, Winter is the opposite)
    // Winterland Area Mobs
    // Moggun AlphaMouboo BlueSlime SantaSlime IcedFluffy Yeti WaterFairy AzulSlime Fluffy
    // RudolphSlime WhiteSlime AngryBat Wolvern WindFairy 

    // Woodlands Area Mobs
    // Tipiu Piousse Silkworm Squirrel Blub CobaltPlant MauvePlant GambogePlant AlizarinPlant
    // Loghead Mouboo ForestMushroom SeaSlime Centaur Pinkie CloverField PoisonSpikyMushroom
    // ChagashroomField PlushroomField ManaPiou Bluepar LivingPotato RedMushroom RedButterfly
    // ManaBug TrainingDummy

    // LoF Area Mobs
    // ChocolateSlime Lavern ShadowPlant CyanButterfly 

    // Items: Snowflake CaramelCandy GingerBreadMan ChocolateBiscuit
    // Quest Requires All Of The Above

    addmonsterdrop(SantaSlime,      ChocolateBiscuit,  100);

    addmonsterdrop(WaterFairy,      GingerBreadMan, 1000);
    addmonsterdrop(RedMushroom,     GingerBreadMan,  300);
    addmonsterdrop(Duck,            GingerBreadMan,  280);
    addmonsterdrop(ManaPiou,        GingerBreadMan,  240);
    addmonsterdrop(AngryBat,        GingerBreadMan,  140);
    addmonsterdrop(AzulSlime,       GingerBreadMan,  110);
    addmonsterdrop(Lavern,          GingerBreadMan,   90);

    addmonsterdrop(Tipiu,           CaramelCandy, 8000);
    addmonsterdrop(WindFairy,       CaramelCandy, 2000);
    addmonsterdrop(IcedFluffy,      CaramelCandy, 1200);
    addmonsterdrop(Wolvern,         CaramelCandy, 1000);
    addmonsterdrop(LivingPotato,    CaramelCandy,  800);
    addmonsterdrop(ChocolateSlime,  CaramelCandy,  400);
    addmonsterdrop(SeaSlime,        CaramelCandy,  400);
    addmonsterdrop(Pinkie,          CaramelCandy,  200);
    addmonsterdrop(Fluffy,          CaramelCandy,  150);
    addmonsterdrop(SlimeBlast,      CaramelCandy,  100);
    addmonsterdrop(SilkWorm,        CaramelCandy,   30);

    addmonsterdrop(ForestMushroom,  Snowflake, 3000);
    addmonsterdrop(Blub,            Snowflake, 3000);
    addmonsterdrop(LogHead,         Snowflake,  600);
    addmonsterdrop(RedButterfly,    Snowflake,  400);
    addmonsterdrop(CyanButterfly,   Snowflake,  400);
    addmonsterdrop(Dummy,           Snowflake,  300);
    addmonsterdrop(ManaBug,         Snowflake,  200);
    addmonsterdrop(Piousse,         Snowflake,  100);
    addmonsterdrop(Squirrel,        Snowflake,  100);
    addmonsterdrop(CloverPatch,     Snowflake,  100);
    addmonsterdrop(CobaltPlant,     Snowflake,   90);
    addmonsterdrop(GambogePlant,    Snowflake,   90);
    addmonsterdrop(MauvePlant,      Snowflake,   90);
    addmonsterdrop(AlizarinPlant,   Snowflake,   90);


    addmonsterdrop(AlphaMouboo, ReinbooWand, 3);
    addmonsterdrop(BloodyMouboo,ReinbooWand, 2);
    addmonsterdrop(Centaur,     ReinbooWand, 2);
    addmonsterdrop(Mouboo,      ReinbooWand, 1);
    addmonsterdrop(EasterMouboo,ReinbooWand, 1);
    addmonsterdrop(MoubooSlime, ReinbooWand, 1);
    end;

OnWinterEnd:
    delmonsterdrop(WaterFairy,      GingerBreadMan);
    delmonsterdrop(RedMushroom,     GingerBreadMan);
    delmonsterdrop(Duck,            GingerBreadMan);
    delmonsterdrop(ManaPiou,        GingerBreadMan);
    delmonsterdrop(AngryBat,        GingerBreadMan);
    delmonsterdrop(AzulSlime,       GingerBreadMan);
    delmonsterdrop(Lavern,          GingerBreadMan);
    delmonsterdrop(Tipiu,           CaramelCandy);
    delmonsterdrop(WindFairy,       CaramelCandy);
    delmonsterdrop(IcedFluffy,      CaramelCandy);
    delmonsterdrop(Wolvern,         CaramelCandy);
    delmonsterdrop(LivingPotato,    CaramelCandy);
    delmonsterdrop(ChocolateSlime,  CaramelCandy);
    delmonsterdrop(SeaSlime,        CaramelCandy);
    delmonsterdrop(Pinkie,          CaramelCandy);
    delmonsterdrop(SlimeBlast,      CaramelCandy);
    delmonsterdrop(SilkWorm,        CaramelCandy);
    delmonsterdrop(ForestMushroom,  Snowflake);
    delmonsterdrop(Blub,            Snowflake);
    delmonsterdrop(LogHead,         Snowflake);
    delmonsterdrop(RedButterfly,    Snowflake);
    delmonsterdrop(CyanButterfly,   Snowflake);
    delmonsterdrop(Dummy,           Snowflake);
    delmonsterdrop(ManaBug,         Snowflake);
    delmonsterdrop(Piousse,         Snowflake);
    delmonsterdrop(Squirrel,        Snowflake);
    delmonsterdrop(CloverPatch,     Snowflake);
    delmonsterdrop(CobaltPlant,     Snowflake);
    delmonsterdrop(GambogePlant,    Snowflake);
    delmonsterdrop(MauvePlant,      Snowflake);
    delmonsterdrop(AlizarinPlant,   Snowflake);

    delmonsterdrop(AlphaMouboo, ReinbooWand);
    delmonsterdrop(BloodyMouboo,ReinbooWand);
    delmonsterdrop(Centaur,     ReinbooWand);
    delmonsterdrop(Mouboo,      ReinbooWand);
    delmonsterdrop(EasterMouboo,ReinbooWand);
    delmonsterdrop(MoubooSlime, ReinbooWand);
    end;

OnInit:
    SeasonReload(1);
    end;

OnHour00:
    if ($@SEASON != season()) {
        SeasonReload();
    }
    end;
}