diff options
author | Jesusaves <cpntb1@ymail.com> | 2021-09-24 05:36:47 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2021-09-24 05:36:47 -0300 |
commit | 2a64f8c25598a7f2e374eefb5a9bf93680b72708 (patch) | |
tree | fee25ee2486c11d0135aa698d9e73cf17b4927b9 /npc/functions/event.txt | |
parent | 3079464676d63e74c5c5caab59dd50fbfe00edaa (diff) | |
download | serverdata-2a64f8c25598a7f2e374eefb5a9bf93680b72708.tar.gz serverdata-2a64f8c25598a7f2e374eefb5a9bf93680b72708.tar.bz2 serverdata-2a64f8c25598a7f2e374eefb5a9bf93680b72708.tar.xz serverdata-2a64f8c25598a7f2e374eefb5a9bf93680b72708.zip |
Dream Tower Event. Will begin this monday. Obviously poorly tested.
And balance-wise broken as ****** but whatever - it is done.
And it is 05:37, any issues can be addressed after waking up.
Diffstat (limited to 'npc/functions/event.txt')
-rw-r--r-- | npc/functions/event.txt | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/npc/functions/event.txt b/npc/functions/event.txt index 9efcd68e8..f3b094b03 100644 --- a/npc/functions/event.txt +++ b/npc/functions/event.txt @@ -67,6 +67,302 @@ OnCleanUp: end; } +- script sDreamTower NPC_HIDDEN,{ +OnWarpTo: + if ($EVENT$ != "Tower") end; + if (!countitem(EventDreamTicket)) end; + + // Reset progress + if (DTOWER_DAY != gettimeparam(GETTIME_DAYOFMONTH) || DTOWER_FLOOR < 1) { + DTOWER_DAY=gettimeparam(GETTIME_DAYOFMONTH); + DTOWER_FLOOR=1; + dispbottom l("A new Dream Tower opens its gates before you..."); + } + + // Create maze and populate + CreateMaze(IOT_CHAR); + .@mx=getmapinfo(MAPINFO_SIZE_X, MAZE_MAP$)-20; + .@my=getmapinfo(MAPINFO_SIZE_Y, MAZE_MAP$)-20; + .@tl=(20-.@mx)*(20-.@my) * 3 / 10; // Total tiles + collision guess + .@tl=.@tl / rand2(8,12) + 1; // Monster density is a bit random + + /* *** Copied from 006-5/groata.txt & 018-2-2/main.txt! *** */ + /* ********* Spawn monsters based on DTOWER_FLOOR ********* */ + .@lv = (BaseLevel/10) + DTOWER_FLOOR * 5; + .@mb[0] = MagicGoblin; + .@mb[1] = IceMaggot; + + // Artillery & Chests + if (.@lv > 10) + array_push(.@mb, BronzeChest); + if (.@lv > 20) + array_push(.@mb, SmallMagicBif); + if (.@lv > 30) + array_push(.@mb, Bif); + if (.@lv > 40) + array_push(.@mb, RobinBandit); + if (.@lv > 45) + array_push(.@mb, SilverChest); + if (.@lv > 50) + array_push(.@mb, DustGatling); + if (.@lv > 55) + array_push(.@mb, MagicBif); + if (.@lv > 60) + array_push(.@mb, DustRifle); + if (.@lv > 70) + array_push(.@mb, DustRevolver); + if (.@lv > 75) + array_push(.@mb, GoldenChest); + if (.@lv > 80) + array_push(.@mb, DustBoss); + if (.@lv > 85) + array_push(.@mb, BigMagicBif); + if (.@lv > 90) + array_push(.@mb, GreatMoubooSlime); + if (.@lv > 100) + array_push(.@mb, Jhon); + if (.@lv > 105) + array_push(.@mb, PrismChest); + + // 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+(.@tl); .@i++) { + .@mid = any_of(.@mb); + .@m=areamonster(MAZE_MAP$, 20, 20, .@mx, .@my, strmobinfo(1, .@mid), .@mid, 1); + set_aggro(.@m); + } + freeloop(false); + + // Spawn & Configure the boss monster + .@mob=areamonster(MAZE_MAP$, 20, 20, .@mx, .@my, "Gatekeeper", MonsterSergeant, 1, "sDreamTower::OnBossDie"); + setunitdata(.@mob, UDT_LEVEL, DTOWER_FLOOR * 5); + setunitdata(.@mob, UDT_STR, DTOWER_FLOOR * 2); + setunitdata(.@mob, UDT_AGI, DTOWER_FLOOR * 2); + setunitdata(.@mob, UDT_VIT, DTOWER_FLOOR * 3); + setunitdata(.@mob, UDT_INT, DTOWER_FLOOR * 2); + setunitdata(.@mob, UDT_DEX, DTOWER_FLOOR * 3); + setunitdata(.@mob, UDT_LUK, DTOWER_FLOOR * 2); + setunitdata(.@mob, UDT_ADELAY, max(640, 1572-(DTOWER_FLOOR * 24))); + setunitdata(.@mob, UDT_MAXHP, 200+DTOWER_FLOOR*36); + setunitdata(.@mob, UDT_HP, 200+DTOWER_FLOOR*36); + setunitdata(.@mob, UDT_ATKMIN, 20+DTOWER_FLOOR*4); + setunitdata(.@mob, UDT_ATKMAX, 40+DTOWER_FLOOR*4); + setunitdata(.@mob, UDT_DEF, 1+DTOWER_FLOOR*3); + setunitdata(.@mob, UDT_MDEF, 1+DTOWER_FLOOR); + setunitdata(.@mob, UDT_HIT, (BaseLevel+DTOWER_FLOOR)*25/10); + setunitdata(.@mob, UDT_FLEE, (BaseLevel+DTOWER_FLOOR)*24/10); + setunitdata(.@mob, UDT_CRIT, rand2(40, min(120, 40+DTOWER_FLOOR))); + // TODO: Spawn more treasure chests? (exp, gp, items) + + // Consume the ticket and begin the maze + delitem EventDreamTicket, 1; + InitMaze(3600); + dispbottom col(l("Reminder : Defeat the %s to win.", b("Gatekeeper")), 2); + dispbottom l("Mana Plane - Dream Tower, %dº floor. Time limit: 60 minutes or death.", DTOWER_FLOOR); + end; + +// Dream Tower cleared +OnBossDie: + dispbottom l("Mana Plane - Dream Tower, %dº floor %s", DTOWER_FLOOR, b(l("CLEAR!"))); + DTOWER_FLOOR+=1; + if ($EVENT$ == "Tower") + getitem BrokenMedal, 1; + unitskilluseid(getcharid(3), BS_GREED, 1, getcharid(3)); + sleep2(500); + teleporthome(); + end; +} + function script sThanksgiving { // Variables: // #THANKS_DAY |