diff options
-rw-r--r-- | npc/014-2-2/gemini.txt | 2 | ||||
-rw-r--r-- | npc/014-2-2/valia.txt | 2 | ||||
-rw-r--r-- | npc/034-2/gemini.txt | 2 | ||||
-rw-r--r-- | npc/034-3/gemini.txt | 18 | ||||
-rw-r--r-- | npc/034-4/storage.txt | 176 |
5 files changed, 197 insertions, 3 deletions
diff --git a/npc/014-2-2/gemini.txt b/npc/014-2-2/gemini.txt index c05f96699..bd6d12554 100644 --- a/npc/014-2-2/gemini.txt +++ b/npc/014-2-2/gemini.txt @@ -61,6 +61,8 @@ OnCore: getexp 32000, 800; break; case 7: // Ambushed & Captured + if (!is_gm()) + nude(); @lockpicks=false; // Prision Area .@m=any(Bandit, RobinBandit, SleepingBandit); diff --git a/npc/014-2-2/valia.txt b/npc/014-2-2/valia.txt index 346a9c7b6..09d02c6a3 100644 --- a/npc/014-2-2/valia.txt +++ b/npc/014-2-2/valia.txt @@ -136,7 +136,7 @@ function script GeminiFail { if ($EVENT$ != "Gemini" || ($EVENT$ == "Gemini" && GEMINI_DAY == gettime(5))) { - if (getq(HurnscaldQuest_Gemini)) { + if (getq(HurnscaldQuest_Gemini) && !is_gm()) { delitem GemPowder, 1; delitem EverburnPowder, 1; } diff --git a/npc/034-2/gemini.txt b/npc/034-2/gemini.txt index a6a09ac36..ca8a3ae30 100644 --- a/npc/034-2/gemini.txt +++ b/npc/034-2/gemini.txt @@ -59,7 +59,7 @@ OnTouch: sleep2(3000); // 5s unittalk(.@b2, "Ahaha, that was easy! Ok, knock them out!"); sleep2(3000); // 2s - areawarp(.@m$, 23, 67, 32, 74, .@m$, 30, 92, 33, 95); + areawarp(.@m$, 23, 67, 32, 77, .@m$, 30, 92, 33, 95); unitwalk(.@b1, 37, 90); unitwalk(.@b2, 37, 90); sleep2(2000); diff --git a/npc/034-3/gemini.txt b/npc/034-3/gemini.txt index 6d9ec0d67..5f195ba43 100644 --- a/npc/034-3/gemini.txt +++ b/npc/034-3/gemini.txt @@ -4,6 +4,16 @@ // Description: // Gemini Sisters Quest - Outside the Building +034-3,23,50,0 script #GeminiBack2 NPC_HIDDEN,0,0,{ + end; +OnTouch: + if (instance_id() < 0 || getcharid(1) < 1) end; + GeminiCheck(8); + .@p=getcharid(1); + warp "val2@"+.@p, 37, 25; + end; +} + 034-3,57,29,0 script #GeminiDoor NPC_HIDDEN,0,0,{ end; @@ -108,12 +118,14 @@ OnTimer2000: if (!attachrid(.aid)) { npctalk "The caster ceased to exist!"; + stopnpctimer; end; } getmapxy(.@m$, .@x, .@y, 0, .aid); - if (.@m$ != .@mp$) { + if (.@m$ != .mp$) { npctalk "The caster is gone!"; + stopnpctimer; end; } if (.@x < 52 || @@ -123,6 +135,7 @@ OnTimer2000: npctalk "The caster left the power circle!"; dispbottom l("The magic accumulated backfires at you!"); heal -(.power), -(.power/2); + stopnpctimer; end; } @@ -132,10 +145,12 @@ OnTimer2000: if (ispcdead()) { npctalk "The caster is dead!"; + stopnpctimer; end; } if (Sp <= 0) { npctalk "The caster ran out of mana!"; + stopnpctimer; end; } @@ -173,6 +188,7 @@ OnTimer2000: .mp$=""; .aid=0; } + stopnpctimer; end; } detachrid(); 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; +} |