summaryrefslogblamecommitdiff
path: root/npc/006-5/groata.txt
blob: ed459b74c551da2763280285a161b000c71e96e9 (plain) (tree)
1
2
3
4
5
6
7
8






                                                                       
                               


































































































































































































































































































































































                                                                                                                                                 

                                              


































































































                                                                                                                             

                                              










                                               
// TMW2 Script
// Author:
//    Jesusalva
// Note:
//    Groata Grotto is NOT instanced, NOT timed, and meant to be weird.

function	script	GroataGrotto	{
    .@lv = getarg(0, $@GROATA);

    .@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_between(0, .@lv, 30)) {
        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_between(10, .@lv, 40)) {
        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_between(20, .@lv, 50)) {
        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_between(30, .@lv, 60)) {
        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_between(40, .@lv, 70)) {
        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, PiouKnight);
        array_push(.@mb, Shrewboo);
    }
    if (is_between(40, .@lv, 80)) {
        array_push(.@mb, Wolvern);
        array_push(.@mb, FireSkull);
        array_push(.@mb, DarkLizard);
    }
    if (is_between(50, .@lv, 90)) {
        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_between(60, .@lv, 100)) {
        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_between(70, .@lv, 110)) {
        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_between(80, .@lv, 120)) {
        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_between(90, .@lv, 130)) {
        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_between(100, .@lv, 140)) {
        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_between(110, .@lv, 150)) {
        array_push(.@mb, PinkieSuseran);
        array_push(.@mb, Mandragora);
        array_push(.@mb, PinkieMaximus);
    }
    if (.@lv > 120) {
        array_push(.@mb, Junglefowl);
        array_push(.@mb, Tengu);
        array_push(.@mb, Moubi);
    }
    if (.@lv > 130) {
        array_push(.@mb, SuperiorShroom);
        array_push(.@mb, Nutcracker);
        array_push(.@mb, Golem);
    }
    if (.@lv > 140) {
        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 > 150) {
        array_push(.@mb, SacredWisp);
        array_push(.@mb, EvilWisp);
        array_push(.@mb, PanthomWisp);
        array_push(.@mb, EpiphanyWisp);
    }
    if (.@lv > 175)
        array_push(.@mb, Tortuga);

    /* Spawn them and make hostile */
    freeloop(true);
    for (.@i = 0; .@i < 1+($@GROTTO*2/3); .@i++) {
        .@mid = any_of(.@mb);
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), strmobinfo(1, .@mid), .@mid, 1);
        set_aggro(.@m);
    }
    freeloop(false);

    // TODO: Boss Logic if needed
    // One boss each 10 grottos or something?
    if (is_between(10, $@GROTTO, 15)) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", MonsterSergeant, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 15) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", SaxsoGhost, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 20) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", BlueSlime, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 25) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", MurdererScorpion, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 30) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", NightScorpion, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 35) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", SpiderQueen, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 40) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", HoodedAssassin, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 45) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", BanditLord, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 50) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", Tipiu, 1);
        set_aggro(.@m);
        maptimer2("006-5", 10, "Torch#0065::OnLv50");
    }
    if ($@GROTTO > 55) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", FafiDragon, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 60) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", NightDragon, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 65) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", GiantMutatedBat, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 70) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", EvilScythe, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 75) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", AndreiSakar, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 80) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", Yetifly, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 85) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", DemureFirstForm, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 90) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", YetiKing, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 95) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", FallenKing1, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 100) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", PsiConscience, 1);
        set_aggro(.@m);
        maptimer2("006-5", 10, "Torch#0065::OnLv100");
    }
    if ($@GROTTO > 105) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", Isbamuth, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 110) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", TerraniteKing, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 120) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", PinkieEmperor, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 130) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", PanthomLord, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 140) {
        .@m=areamonster("006-5", 20, 20, getmapinfo(MAPINFO_SIZE_X,"006-5"), getmapinfo(MAPINFO_SIZE_Y,"006-5"), "Groata?", MonsterKing, 1);
        set_aggro(.@m);
    }
    if ($@GROTTO > 150)
        maptimer2("006-5", 10, "Torch#0065::OnLv150");
    return;
}

006-5,49,36,0	script	Torch#0065	NPC_NO_SPRITE,{
    if (!mobcount("006-5", "all")) {
        if ($@GROTTO) {
            mesc l("The torch is currently lit.");
            mesc l("Do you want to put it out, or to make it brighter?");
            next;
            select
                l("I have to think."),
                l("Put it out"),
                l("Make it brighter");
            mes "";
            // Put it out
            if (@menu == 2) {
                $@GROTTO = 0;
                $@GROATA = 0;
                enablenpc "#006-5_49_54";
            }
            // I do not want to continue
            if (@menu != 3)
                close;
        } else {
            mesc l("Lit the torch?");
            if (askyesno() == ASK_NO) close;
            disablenpc "#006-5_49_54";
        }
        if (!getq(CandorQuest_Groata)) {
            getitem any(Coal, SulfurPowder, FluoPowder, PileOfAsh, Pearl), 2;
            setq CandorQuest_Groata, 1;
        }
        $@GROTTO += 1;
        // Create monsters based on GROTTO
        $@GROATA = max(BaseLevel, $@GROATA+1);
        GroataGrotto();
        close;
    }
    mesc l("The torch is lit.");
    close;

// Rewards
OnLv50:
    if (getq(CandorQuest_Groata) == 1) {
        dispbottom l("This is ridiculous. Groata is not here, I am wasting my time!");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Uh? Hey, look! A platinum card! This should be worth something with the Guild Merchant Guild, right?");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("...I'll take it.");
        Zeny+=7500;
        Mobpt+=2500;
        getexp 0, 10000;
        setq CandorQuest_Groata, 2;
    }
    end;

OnLv100:
    if (getq(CandorQuest_Groata) == 2) {
        dispbottom l("Groata : Uh. What's happening here?");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : Hey. I live here. Why are you spawning monsters in my home??");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : This is rude. Seriously, stop doing this.");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : Let's make a deal. Take this, clear my house, and get out.");
        getitem Mustache, 1;
        setq CandorQuest_Groata, 3;
    }
    end;

OnLv150:
    if (getq(CandorQuest_Groata) == 3) {
        dispbottom l("Groata : You must be idiotic in keeping spawning.");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : I wonder for how long you can survive here...");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : ...Will you seriously just keep running around? Like a headless chicken?");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : C'mon, that is boring. What I need to do to get you out of my house?");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : ...Meh. I'll give you this... stuff, and for the last time, don't bother me again...");
        sleep2(5000);
        if (getmap() != "006-5") end;
        dispbottom l("Groata : ...Because I am out of freebies and need to sleep. So shoo.");
        getitembound MylarinDust, 1, 1;
        setq CandorQuest_Groata, 4;
    }
    end;

OnInit:
    .sex = G_OTHER;
    .distance = 1;
    end;
}

006-5,52,36,0	script	Crystal#0065	NPC_NO_SPRITE,{
    if (!mobcount("006-5", "all")) {
        if ($@GROTTO) {
            mesc l("The crystal looks damaged.");
            mesc l("Do you want to restore it, or to keep breaking it?");
            next;
            select
                l("I have to think."),
                l("Restore it"),
                l("Keep breaking");
            mes "";
            // Restore it
            if (@menu == 2) {
                $@GROTTO = 0;
                $@GROATA = 0;
                enablenpc "#006-5_49_54";
            }
            // I do not want to continue
            if (@menu != 3)
                close;
        } else {
            mesc l("Break the crystal?");
            if (askyesno() == ASK_NO) close;
            disablenpc "#006-5_49_54";
        }
        if (!getq(CandorQuest_Groata)) {
            getitem any(WurtziteOre, DarkCrystal, CandorWarpCrystal), 1;
            setq CandorQuest_Groata, 1;
        }
        $@GROTTO += 5;
        // Create monsters based on GROTTO
        $@GROATA = max(BaseLevel, $@GROATA+1);
        GroataGrotto();
        close;
    }
    mesc l("The crystal has a shard missing.");
    close;

OnInit:
    .sex = G_OTHER;
    .distance = 1;
    end;
}