// 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_between2(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_between2(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_between2(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_between2(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_between2(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_between2(40, .@lv, 80)) { array_push(.@mb, Wolvern); array_push(.@mb, FireSkull); array_push(.@mb, DarkLizard); } if (is_between2(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_between2(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_between2(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_between2(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_between2(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_between2(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_between2(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_between2(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; }