From 79f862701558c2564116c02f48432fced6ac76be Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Tue, 3 May 2022 12:34:12 -0300 Subject: Fix some bugs and code a prototype for the storage --- npc/034-4/storage.txt | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) (limited to 'npc/034-4') diff --git a/npc/034-4/storage.txt b/npc/034-4/storage.txt index 0e2523109..3e99e54ef 100644 --- a/npc/034-4/storage.txt +++ b/npc/034-4/storage.txt @@ -4,5 +4,181 @@ // Description: // Gemini Sisters Quest - Part B: Storage Room +034-4,45,78,0 script #GeminiPartC NPC_HIDDEN,0,0,{ + end; +OnTouch: + if (instance_id() < 0 || getcharid(1) < 1) end; + GeminiCheck(11); + .@p=getcharid(1); + if ($@VALIA_STATUS[.@p] < 13) { + dispbottom l("Uh? I can't pass. I wonder why, maybe I need to wait?"); + end; + } + if (mobcount(getmap(), "all") > 0) { + dispbottom l("I should defeat all mobs before passing."); + end; + } + if (mobcount(getmap(), "all") <= 0 && $@VALIA_STATUS[.@p] == 11) { + $@VALIA_STATUS[.@p]=12; + } + if ($@VALIA_STATUS[.@p] >= 12) { + slide 83, 58; + } + end; +} + +034-4,33,77,0 script #GeminiStorei NPC_HIDDEN,2,2,{ +function storageutil; + end; +OnTouch: + if (instance_id() < 0 || getcharid(1) < 1) end; + GeminiCheck(11); + .@p=getcharid(1); + if (strcharinfo(0) != getpartyleader(.@p)) end; + + if (!.state) { + .mp$ = getmap(); + .pn$ = getpartyname(getcharid(1)); + .pid = getcharid(1); + .state = true; + /* We now must calculate amount of waves */ + /* It is a hack for now, though */ + .mto = 5 + (BaseLevel / 30) + getmapusers(.mp$); + initnpctimer; + killmonsterall(.mp$); // Cancel everything done thus far, incl. showdown + } + end; + +OnTimer1000: + .luvia = monster(.mp$, 37, 76, "Luvia Gemini", Luvia, 1); + immortal(.luvia); + setunitdata(.luvia, UDT_MODE, MD_BOSS|MD_PLANT|MD_NOKNOCKBACK); + end; + +OnTimer2500: + unittalk(.luvia, "So you aren't made of sugar!"); + end; + +OnTimer6000: + unittalk(.luvia, "I was worried you would all have melted on the lobby!"); + end; + +OnTimer9500: + unittalk(.luvia, "Hahaha, but this is just the beginning of your journey..."); + end; + + +OnTimer13000: + unittalk(.luvia, "I am Luvia Gemini, and this is my trial for you!"); + end; + + +OnTimer16500: + unittalk(.luvia, "Show me of what you are made of, %s!", .pn$); + .@pi = getmapusers(.mp$) + 2; + monster(.mp$, 44, 78, strmobinfo(1, Scar), Scar, .@pi); + end; + +OnTimer19000: + unittalk(.luvia, "HAHAHahahaha!"); + end; + +OnTimer20000: + unitwarp(.luvia, "034-4", 45, 45); + end; + +OnTimer21000: + unitkill(.luvia); + end; + +OnTimer30000: + storageutil(); + .sto += 1; + end; + +OnTimer45000: + if (.sto < .mto) + setnpctimer 25000; + monster(.mp$, 44, 78, strmobinfo(1, BlackMamba), BlackMamba, 1); + end; + +OnTimer600000: + .@pi = getmapusers(.mp$) + 1; + monster(.mp$, 44, 78, strmobinfo(1, GoboBear), GoboBear, .@pi); + $@VALIA_STATUS[.pid] = 12; + stopnpctimer; + end; + + +function storageutil { + // Decide if we'll spawn or add items. Previous failures are NOT considerated. + .@r=rand2(10000)+(.sto * 100); + + // Super rare drop?! (~1.5%) + if (.@r < 120 || .@r > 10000) { + makeitem(any(DeathPotion, PoisonAmmoBox, AncientBlueprint, ThornAmmoBox, MercBoxD, ScholarshipBadge, DarkDesertMushroom), 1, .mp$, rand2(30, 71), rand2(44, 86)); + } + + // Super strong monster?! (4%) + if ((.@r > 6000 && .@r < 6400) || .sto == 15 || .sto == 17 || .sto >= 20) { + .@mob=any(WanderingShadow, SeaSlimeMother, NightDragon, GiantMutatedBat, Reaper, Mandragora); + monster(.mp$, 44, 78, strmobinfo(1, .@mob), .@mob, 1); + // Warn players? + } + + // Compulsory monster spawn + switch (.sto) { + case 0: + .@mob = ArmoredSkeleton; break; + case 1: + .@mob = DustRifle; break; + case 2: + .@mob = HoodedNinja; break; + case 3: + .@mob = WickedMushroom; break; + case 4: + .@mob = any(Archant, Scar); break; + case 5: + .@mob = Scar; break; + case 6: + .@mob = AzulSkullSlime; break; + case 7: + .@mob = Forain; break; + case 8: + .@mob = GreenDragon; break; + case 9: + .@mob = Michel; break; + case 10: + .@mob = EliteDuck; break; + case 11: + .@mob = Terranite; break; + case 12: + .@mob = JackO; break; + case 13: + .@mob = BloodyMouboo; break; + default: + .@mob = GoboBear; + } + monster(.mp$, 44, 78, strmobinfo(1, .@mob), .@mob, 1+getmapusers(.mp$)); + + // Compulsory item drop + freeloop(true); + for (.@i=0; .@i <= getmapusers(.mp$); .@i++) { + makeitem(any(Wurtzite, ShadowHerb, AlizarinHerb, DiamondPowder, RubyPowder, EmeraldPowder, SapphirePowder, TopazPowder, AmethystPowder, CopperOre, IronOre, Coal, LeadOre, Lifestone, ScorpionClaw, WhiteFur, SquirrelPelt, TinOre, PileOfAsh, EmptyBottle, FluoPowder, TerraniteOre, SulfurPowder, LeatherPatch, LazuriteShard, Root, ReedBundle, GambogeHerb, MauveHerb, CobaltHerb, MaggotSlime, BugLeg, RawLog, BanditHood, BatWing, IronPowder, ArtichokeHerb, LeftCraftyWing, RightCraftyWing, Coral, BlueCoral, Pearl, Moss, RattoTail, RattoTeeth, Knife, SharpKnife, StrangeCoin, PurificationPotion, IcedBottle, Grenade, SmokeGrenade, TreasureMap, AgiPotionA, VitPotionA, IntPotionA, DexPotionA, LukPotionA, EmptyBox, HastePotion, StrengthPotion, Croconut, ChocolateBar, ChocolateBiscuit, PinkieLeg, Potatoz, Coffee, SnakeEgg, Plushroom, Chagashroom, Honey, MoubooSteak, Milk, Orange, CherryCake, Piberries, Aquada, Cheese, Bread, Acorn, Manana), 1, .mp$, rand2(30, 71), rand2(44, 86)); + } + return; +} + +OnInit: +OnInstanceInit: + .state = false; + .mp$ = ""; + .pn$ = ""; + .pid = 0; + .luvia = 0; + .sto = 0; + .mto = 0; + end; +} -- cgit v1.2.3-70-g09d2