summaryrefslogblamecommitdiff
path: root/npc/006-9/ctrl.txt
blob: 46b1fe39b93ebe06cb71dfc5b31495fe05272699 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11



               
                                     
 




                                                        
                             



                                                       




                                                                                                         


                                                                     







                                                                      





                                              

                          


                              




                                       

          























































































































































































































































                                                                                  
                                               







                                                                                                                                                 

                

                


        
// TMW2 Script
// Author:
//    Jesusalva

006-9	mapflag	zone	MMO No Tricks

006-9,37,21,0	script	#OutOf0069	NPC_HIDDEN,0,0,{
    end;

OnTouch:
    if (!$@SURVIVAL_CANDOR)
        warp "006-6", 54, 36;
    end;
}

006-9,55,32,0	script	Bloodbath	NPC_NO_SPRITE,{
    function spawn;
    if ($@SURVIVAL_CANDOR) {
        npctalk3 l("Score: %s / %s", FuzzyTime($@SURVIVAL_CANDOR), FuzzyTime(gettimetick(2)+SCANDORPTS));
        end;
    }
    mesn;
    mes l("Goal: Survive the longest possible.");
    mes l("Monsters will spawn in the south fountain continuously.");
    mes l("They'll also start spawning on whole map, so be careful.");
    mesc l("The fee to use this room is %s GP.", fnum(.price)), 1;
    mes "";
    mes l("Current score: %s", FuzzyTime(gettimetick(2)+SCANDORPTS));

    if (Zeny < .price) close;
    next;
    mesc l("Begin?");
    menuint
        l("Yes"), ASK_YES,
        l("No"), ASK_NO,
        l("Scoreboards"), -1;
    mes "";
    if (@menuret == ASK_NO || Zeny < .price) {
        closeclientdialog;
        close;
    } else if (@menuret < 0) {
        HallOfBloodbath();
        close;
    }

    Zeny-=.price;
    $@SURVIVAL_CANDOR = gettimetick(2);
    initnpctimer;
    close;

// Timer logic
OnTimer4000:
    .diff += 1;
    if (.diff == 75)
        mapannounce "006-9","Five minutes have passed, changing spawn pattern!",0;
    if (.diff == 450)
        mapannounce "006-9", "Half hour has passed, changing spawn pattern!", 0;
    if (.diff == 900)
        mapannounce "006-9", "One hour has passed, changing spawn pattern!", 0;
    initnpctimer;
OnTimer2000:
    /* Verify for game over */
    if (getmapusers("006-9") < 1) {
        sleep(25);
        stopnpctimer;
        .diff = 0;
        $@SURVIVAL_CANDOR = 0;
        killmonsterall("006-9");
        end;
    }
    spawn(.diff);
    end;

// Spawn logic
function spawn {
    .@lv = getarg(0);
    if (.@lv < 450) {
        .@mb[0] = MagicGoblin;
        .@mb[1] = IceMaggot;
    }

    // Artillery
    if (.@lv > 40)
        array_push(.@mb, RobinBandit);
    if (.@lv > 50)
        array_push(.@mb, DustGatling);
    if (.@lv > 60)
        array_push(.@mb, DustRifle);
    if (.@lv > 70)
        array_push(.@mb, DustRevolver);
    if (.@lv > 80)
        array_push(.@mb, DustBoss);
    if (.@lv > 90)
        array_push(.@mb, GreatMoubooSlime);
    if (.@lv > 100)
        array_push(.@mb, Jhon);

    // Monsters
    if (is_between2(0, .@lv, 60)) {
        array_push(.@mb, Piou);
        array_push(.@mb, Piousse);
        array_push(.@mb, Squirrel);
        array_push(.@mb, ManaPiou);
        array_push(.@mb, ForestPiou);
        array_push(.@mb, RedButterfly);
        array_push(.@mb, Maggot);
        array_push(.@mb, CandorScorpion);
        array_push(.@mb, HouseMaggot);
        array_push(.@mb, LittleYellowSlime);
        array_push(.@mb, Ratto);
        array_push(.@mb, RudolphSlime);
        array_push(.@mb, MoubooSlime);
        array_push(.@mb, Croc);
        array_push(.@mb, Scorpion);
        array_push(.@mb, SmallFrog);
    }
    if (is_between2(20, .@lv, 80)) {
        array_push(.@mb, BigFrog);
        array_push(.@mb, Lavern);
        array_push(.@mb, LittleRedSlime);
        array_push(.@mb, ChocolateSlime);
        array_push(.@mb, Blub);
        array_push(.@mb, Duck);
        array_push(.@mb, Bat);
        array_push(.@mb, CaveMaggot);
        array_push(.@mb, ManaGhost);
        array_push(.@mb, ManaBug);
        array_push(.@mb, Fluffy);
        array_push(.@mb, FireGoblin);
        array_push(.@mb, ViciousSquirrel);
        array_push(.@mb, RedScorpion);
        array_push(.@mb, WhiteSlime);
        array_push(.@mb, AzulSlime);
        array_push(.@mb, DesertLogHead);
    }
    if (is_between2(30, .@lv, 100)) {
        array_push(.@mb, RedSlime);
        array_push(.@mb, PoisonSpikyMushroom);
        array_push(.@mb, DesertBandit);
        array_push(.@mb, OceanCroc);
        array_push(.@mb, ToppyBlub);
        array_push(.@mb, Sarracenus);
        array_push(.@mb, IceMaggot);
        array_push(.@mb, VampireBat);
        array_push(.@mb, Bandit);
        array_push(.@mb, Pinkie);
        array_push(.@mb, LivingPotato);
        array_push(.@mb, Assassin);
        array_push(.@mb, Skeleton);
    }
    if (is_between2(50, .@lv, 120)) {
        array_push(.@mb, CaveSnake);
        array_push(.@mb, GreenSlime);
        array_push(.@mb, CopperSlime);
        array_push(.@mb, YellowSlime);
        array_push(.@mb, SantaSlime);
        array_push(.@mb, LavaSlime);
        array_push(.@mb, Bluepar);
        array_push(.@mb, DeathCat);
        array_push(.@mb, Moggun);
        array_push(.@mb, SeaSlime);
        array_push(.@mb, RedMushroom);
        array_push(.@mb, Mouboo);
        array_push(.@mb, LogHead);
        array_push(.@mb, CandiedSlime);
        array_push(.@mb, OldSnake);
        array_push(.@mb, GrassSnake);
    }
    if (is_between2(60, .@lv, 140)) {
        array_push(.@mb, GiantMaggot);
        array_push(.@mb, IcedFluffy);
        array_push(.@mb, Snake);
        array_push(.@mb, BlackSlime);
        array_push(.@mb, Tipiou);
        array_push(.@mb, AlphaMouboo);
        array_push(.@mb, Pollet);
        array_push(.@mb, Snowman);
        array_push(.@mb, PiouKnight);
        array_push(.@mb, Shrewboo);
    }
    if (is_between2(70, .@lv, 160)) {
        array_push(.@mb, Wolvern);
        array_push(.@mb, FireSkull);
        array_push(.@mb, DarkLizard);
    }
    if (is_between2(90, .@lv, 180)) {
        array_push(.@mb, ArmoredSkeleton);
        array_push(.@mb, BlackScorpion);
        array_push(.@mb, ElectroWorm);
        array_push(.@mb, EarthFairy);
        array_push(.@mb, FireFairy);
        array_push(.@mb, WaterFairy);
        array_push(.@mb, WindFairy);
        array_push(.@mb, PoisonFairy);
        array_push(.@mb, MountainSnake);
        array_push(.@mb, HoodedNinja);
        array_push(.@mb, ForestMushroom);
        array_push(.@mb, GoldenScorpion);
    }
    if (is_between2(110, .@lv, 200)) {
        array_push(.@mb, Yeti);
        array_push(.@mb, FallenGuard1);
        array_push(.@mb, GreenSlimeMother);
        array_push(.@mb, SnowFlower);
        array_push(.@mb, BlueSlimeMother);
        array_push(.@mb, WickedMushroom);
        array_push(.@mb, CopperSlimeMother);
        array_push(.@mb, YellowSlimeMother);
        array_push(.@mb, RedSlimeMother);
        array_push(.@mb, ChocolateSlimeMother);
        array_push(.@mb, WhiteSlimeMother);
        array_push(.@mb, Archant);
        array_push(.@mb, Scar);
    }
    if (is_between2(140, .@lv, 220)) {
        array_push(.@mb, AzulSlimeMother);
        array_push(.@mb, SeaSlimeMother);
        array_push(.@mb, LavaSlimeMother);
        array_push(.@mb, BlackSlimeMother);
        array_push(.@mb, Crafty);
        array_push(.@mb, Forain);
        array_push(.@mb, GreenDragon);
        array_push(.@mb, Michel);
        array_push(.@mb, Troll);
    }
    if (is_between2(160, .@lv, 240)) {
        array_push(.@mb, EliteDuck);
        array_push(.@mb, AzulSkullSlime);
        array_push(.@mb, Moonshroom);
        array_push(.@mb, RedSkullSlime);
        array_push(.@mb, Terranite);
        array_push(.@mb, JackO);
        array_push(.@mb, BlackMamba);
        array_push(.@mb, GreenSkullSlime);
        array_push(.@mb, BloodyMouboo);
        array_push(.@mb, Centaur);
        array_push(.@mb, GoboBear);
    }
    if (is_between2(180, .@lv, 260)) {
        array_push(.@mb, CopperSkullSlime);
        array_push(.@mb, LavaSkullSlime);
        array_push(.@mb, BlackSkullSlime);
        array_push(.@mb, GiantCaveMaggot);
        array_push(.@mb, TerraniteProtector);
        array_push(.@mb, VanityPixie);
        array_push(.@mb, HolyPixie);
    }
    if (is_between2(200, .@lv, 280)) {
        array_push(.@mb, ShadowPixie);
        array_push(.@mb, NulityPixie);
        array_push(.@mb, Reaper);
        array_push(.@mb, NightmareDragon);
        array_push(.@mb, Snail);
        array_push(.@mb, WhirlyBird);
    }
    if (is_between2(250, .@lv, 350)) {
        array_push(.@mb, PinkieSuseran);
        array_push(.@mb, Mandragora);
        array_push(.@mb, PinkieMaximus);
    }
    if (.@lv > 240) {
        array_push(.@mb, Junglefowl);
        array_push(.@mb, Tengu);
        array_push(.@mb, Moubi);
    }
    if (.@lv > 260) {
        array_push(.@mb, SuperiorShroom);
        array_push(.@mb, Nutcracker);
        array_push(.@mb, Golem);
    }
    if (.@lv > 280) {
        array_push(.@mb, SiegeTower);
        array_push(.@mb, GreenhornAbomination);
        array_push(.@mb, ShadowTortuga);
        array_push(.@mb, FireElement);
        array_push(.@mb, WaterElement);
        array_push(.@mb, EarthElement);
        array_push(.@mb, WindElement);
    }
    if (.@lv > 320) {
        array_push(.@mb, SacredWisp);
        array_push(.@mb, EvilWisp);
        array_push(.@mb, PanthomWisp);
        array_push(.@mb, EpiphanyWisp);
    }
    if (.@lv >= 350)
        array_push(.@mb, Tortuga);

    /* The final attack pattern is aimed at nukes */
    if (.@lv >= 900)
        .@lv *= 3; // 12 -> 36 mobs

    /* Spawn them and make hostile */
    .@mid = any_of(.@mb);
    .@m=areamonster("006-9", 35, 63, 36, 65, strmobinfo(1, .@mid), .@mid, 1);
    set_aggro(.@m);
    /* After five minutes, spawn some globally */
    freeloop(true);
    for (.@i = 0; .@i < 1+(.@lv / 75); .@i++) {
        .@mid = any_of(.@mb);
        .@m=areamonster("006-9", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-9"), getmapinfo(MAPINFO_SIZE_Y,"006-9"), strmobinfo(1, .@mid), .@mid, 1);
        set_aggro(.@m);
    }
    freeloop(false);
    return;
}

OnInit:
    .distance=3;
    .price=2400;
    .diff = 0;
    end;
}