From d5fbfef36f37bd73227fa0efd48a7cfb03723904 Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Sun, 26 Dec 2021 00:46:48 -0300 Subject: Bloodbath (Candor Survival) Challenge --- npc/006-9/ctrl.txt | 287 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 283 insertions(+), 4 deletions(-) (limited to 'npc/006-9/ctrl.txt') diff --git a/npc/006-9/ctrl.txt b/npc/006-9/ctrl.txt index c9bdaba19..b533a6820 100644 --- a/npc/006-9/ctrl.txt +++ b/npc/006-9/ctrl.txt @@ -2,26 +2,305 @@ // Author: // Jesusalva +006-9 mapflag zone MMO + 006-9,37,21,0 script #OutOf0069 NPC_HIDDEN,0,0,{ end; OnTouch: if (!$@SURVIVAL_CANDOR) - warp "006-6", 40, 36; + warp "006-6", 54, 36; end; } 006-9,55,32,0 script Bloodbath NPC_NO_SPRITE,{ - if ($@SURVIVAL_CANDOR) end; - // $@SURVIVAL_CANDOR = gettimetick(2); + 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("After five minutes, they'll also start spawning on whole map."); + 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?"); + if (askyesno() == ASK_NO || Zeny < .price) { + closeclientdialog; + 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 < 2+(.@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; } -- cgit v1.2.3-60-g2f50