From 5a38d4cd1df53dffd2af1ce7f2ae6f5a634b7228 Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Sun, 17 Jun 2018 16:11:42 -0300 Subject: Hungry Quirin Arena completly ported and adapted from TMW-BR v2 / TMW:Æ to TMW2. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- npc/001-8/_import.txt | 1 + npc/001-8/hub.txt | 307 +++++++++++++++++++++++++++++++++++++++++++++++-- npc/001-8/mapflags.txt | 2 + npc/003-10/quirino.txt | 2 +- 4 files changed, 303 insertions(+), 9 deletions(-) create mode 100644 npc/001-8/mapflags.txt (limited to 'npc') diff --git a/npc/001-8/_import.txt b/npc/001-8/_import.txt index e0d26df2c..0dce52764 100644 --- a/npc/001-8/_import.txt +++ b/npc/001-8/_import.txt @@ -2,3 +2,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-8/_mobs.txt", "npc/001-8/hub.txt", +"npc/001-8/mapflags.txt", diff --git a/npc/001-8/hub.txt b/npc/001-8/hub.txt index 3fae0afab..3667a9902 100644 --- a/npc/001-8/hub.txt +++ b/npc/001-8/hub.txt @@ -8,41 +8,320 @@ 001-8,0,0,0 script #QuirinoHUB NPC_HIDDEN,{ end; + // HUBspawn( mobID, amount ) + function HUBspawn { + areamonster "001-8", 20, 20, 80, 80, strmobinfo(1, getarg(0)), getarg(0), getarg(1); + return; } + + // HUBscatter( itemID ) + function HUBscatter { + makeitem(getarg(0), 1, "001-8", rand(20,80), rand(20,80)); + return; } + + // HUBarrow() + function HUBarrow { + makeitem(rand(TrainingArrow,BoneArrow), rand(10,30), "001-8", rand(20,80), rand(20,80)); + return; } + + // HUBrandwpn( full ) + function HUBrandwpn { + if (getarg(0)) { + .@x=rand(20,80); .@y=rand(20,80); + } else { + .@x=rand(44,55); .@y=rand(46,54); + } + + .@r=rand(1,8); + switch(.@r){ + case 1: + makeitem(rand(Knife, WoodenSword), 1, "001-8", .@x, .@y); break; + case 2: + makeitem(rand(SharpKnife, Dagger), 1, "001-8", .@x, .@y); break; + case 3: + makeitem(rand(ThunderStaff,Judgment), 1, "001-8", .@x, .@y); break; + case 4: + makeitem(rand(BronzeGladius,Scythe), 1, "001-8", .@x, .@y); break; + case 5: + makeitem(rand(WoodenBow, DesertBow), 1, "001-8", .@x, .@y); break; + case 6: + makeitem(rand(WoodenBow, ShortBow), 1, "001-8", .@x, .@y); break; + case 7: + makeitem(rand(ForestBow, BansheeBow), 1, "001-8", .@x, .@y); break; + default: + makeitem(WoodenShield, 1, "001-8", .@x, .@y); break; + } + + return; } + +// Only one player standing! CONGRATULATIONS, YOU HAVE WON!! +OnGameOver: + .@u=getmapusers("001-8"); + if (.@u == 1) + maptimer("001-8", 10, "#QuirinoHUB::OnVictory"); + // GoldenGift + end; + + +// Ordered by GM to start. OnStart: + $@EQ_STATUS=1; + + // 2 Necklaces, 1 Charm and 1 Quiver + makeitem(rand(1000,1003), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(1006,1011), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(1150,1151), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(1172,1174), 1, "001-8", rand(44,55), rand(46,54)); + + makeitem(GoldenRing, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(SilverRing, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(SilverRing, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(PolishedDiamond,PolishedEmerald), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(PolishedDiamond,PolishedEmerald), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(PolishedDiamond,PolishedEmerald), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(TrainingArrow,BoneArrow), 50, "001-8", rand(44,55), rand(46,54)); + + makeitem(CandorBoots, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(LousyMocassins, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(CottonBoots, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(CreasedBoots, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(TulimsharGuardBoots, 1, "001-8", rand(44,55), rand(46,54)); + + makeitem(rand(CreasedGloves, MinerGloves), 1, "001-8", rand(44,55), rand(46,54)); + + makeitem(CottonShorts, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(JeanShorts, 1, "001-8", rand(44,55), rand(46,54)); + makeitem(PirateShorts, 1, "001-8", rand(44,55), rand(46,54)); + + maptimer("001-8", 5000, "#QuirinoHUB::OnCount10"); announce("##1HUNGRY QUIRIN EVENT: ##3##BCountdown: 15 seconds!", bc_all|bc_npc); end; OnCount10: - misceffect(4); + // Random arrows + weapon + makeitem(rand(TrainingArrow,BoneArrow), 50, "001-8", rand(44,55), rand(46,54)); + + // Random Weapon + HUBrandwpn(0); + + // Throw some random, weighty stuff on the whole map. + HUBscatter(rand(CopperOre, TitaniumOre)); + + specialeffect(4); addtimer(5000, "#QuirinoHUB::OnCount5"); dispbottom l("10 seconds!"); end; OnCount5: - misceffect(4); + specialeffect(4); + + // Random Helmet + .@r=rand(1,9); + switch(.@r){ + case 1: + makeitem(Bandana, 1, "001-8", rand(44,55), rand(46,54)); break; + case 2: + makeitem(Bucket, 1, "001-8", rand(44,55), rand(46,54)); break; + case 3: + makeitem(MoubooHat, 1, "001-8", rand(44,55), rand(46,54)); break; + case 4: + makeitem(CandleHelmet, 1, "001-8", rand(44,55), rand(46,54)); break; + case 5: + makeitem(PinkieHat, 1, "001-8", rand(44,55), rand(46,54)); break; + case 6: + makeitem(GraduationCap, 1, "001-8", rand(44,55), rand(46,54)); break; + case 7: + makeitem(SerfHat, 1, "001-8", rand(44,55), rand(46,54)); break; + case 8: + makeitem(MinerHat, 1, "001-8", rand(44,55), rand(46,54)); break; + default: + makeitem(PaperBag, 1, "001-8", rand(44,55), rand(46,54)); break; + } + + // Throw some random, weighty stuff on the whole map. + HUBscatter(rand(CopperIngot, TitaniumIngot)); + addtimer(5000, "#QuirinoHUB::OnBegin"); dispbottom l("5 seconds!"); end; OnBegin: + // Scatter some healing items, specially where the weapons are, to mess drop lists + makeitem(rand(Acorn, Croconut), 1, "001-8", rand(44,55), rand(46,54)); + makeitem(rand(Manana, Carrot), 1, "001-8", rand(24,75), rand(26,74)); + makeitem(rand(RoastedMaggot, CherryCake), 1, "001-8", rand(24,75), rand(26,74)); + HUBscatter(rand(BottleOfDivineWater, BottleOfSewerWater)); + + // Scatter around whole map a few arrows, a training bow, a knife, a creased shirt and a creased knife + HUBarrow(); + HUBscatter(TrainingBow); + HUBscatter(Knife); + HUBscatter(CreasedShirt); + HUBscatter(CreasedShort); + + // Throw some random stuff on the whole map. + HUBscatter(rand(AquadaBox, WoodenLog)); + setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_ITEM|PCBLOCK_MOVE|PCBLOCK_COMMANDS, false); - misceffect(60); - misceffect(11); + specialeffect(60); + specialeffect(11); dispbottom col("Run! Event started!", 1); + initnpctimer; // Restart the timer to fix any desync. end; +// We only have a schedule for the first 15 minutes. This accelerate stuff. OnSendWave: + HUBspawn(AngryRedScorpion, 3); + HUBspawn(BlackScorpion, 1); + HUBscatter(rand(PiberriesInfusion,LachesisBrew)); + HUBscatter(CelestiaTea); + HUBarrow(); + // Throw some ENTIRELY random stuff on the whole map. + HUBscatter(rand(700, 713)); + HUBscatter(rand(731, 875)); + HUBrandwpn(1); + HUBspawn(SlimeBlast, 1); end; +// 15 seconds after, I'm sure it is synced, so start spawning monsters. +OnTimer15000: + HUBspawn(WhiteSlime, 3); + HUBspawn(SlimeBlast, 1); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + end; -OnPCLogoutEvent: + +// one minute is due. +OnTimer60000: + HUBspawn(RedSlime, 12); + HUBspawn(SlimeBlast, 4); + HUBarrow(); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + end; + +// Two minutes are due. +OnTimer120000: + HUBspawn(LavaSlime, 2); + HUBspawn(GreenSlime, 2); + HUBspawn(SeaSlime, 2); + HUBspawn(CaveMaggot, 2); + HUBspawn(Bandit, 2); + HUBarrow(); + HUBarrow(); + HUBscatter(ElixirOfLife); + HUBscatter(FatesPotion); + HUBscatter(LachesisBrew); + end; + + +// Three minutes are due. +OnTimer180000: + HUBspawn(GreenSlime, 4); + HUBspawn(SeaSlime, 4); + HUBspawn(Squirrel, 4); + HUBspawn(Snake, 1); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBscatter(AshUrn); + HUBscatter(Monocle); + HUBscatter(GreenEggshellHat); + HUBscatter(LeatherShirt); + end; + +// Five minutes are due. +OnTimer300000: + HUBspawn(GreenSlime, 4); + HUBspawn(AngryRedScorpion, 3); + HUBspawn(Sarracenus, 1); + HUBspawn(Snake, 2); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBscatter(LeatherGloves); + HUBscatter(Judgment); + HUBscatter(ForestBow); + HUBscatter(GoldenPearlRing); + HUBscatter(ElixirOfLife); + end; + +// Nine minutes are due. +OnTimer540000: + HUBspawn(BlackScorpion, 2); + HUBspawn(DarkLizard, 3); + HUBspawn(Tipiou, 2); + HUBspawn(Snake, 2); + HUBspawn(MountainSnake, 1); + HUBspawn(SeaSlime, 2); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBscatter(BugSlayer); + HUBscatter(DesertBow); + HUBscatter(GoldenBlackPearlRing); + HUBscatter(ElixirOfLife); + end; + +// Fifteen minutes are due. No more random stuff will show. +OnTimer900000: + HUBspawn(BlackScorpion, 4); + HUBspawn(DarkLizard, 3); + HUBspawn(Tipiou, 2); + HUBspawn(Snake, 1); + HUBspawn(MountainSnake, 2); + HUBspawn(SeaSlime, 2); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBscatter(Scythe); + HUBscatter(WoodenShield); + HUBscatter(ShortGladius); + HUBscatter(ElixirOfLife); + end; + +OnVictory: + @qhub_victor=1; OnPCDieEvent: - if (checkpcblock() & PCBLOCK_ATTACK) - setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_ITEM|PCBLOCK_MOVE|PCBLOCK_COMMANDS, false); + @qhub_died=1; +OnPCLogoutEvent: getmapxy(.@mapa$, .@a,.@b, 0); if (.@mapa$ == "001-8") { + // Deal with the environment { + .@u=getmapusers("001-8"); + mapannounce("001-8", "Total remaining players: "+.@u,0); + HUBscatter(rand(PiberriesInfusion,AtroposMixture)); + HUBscatter(CelestiaTea); + HUBarrow(); + HUBspawn(SlimeBlast, 1); + if (.@u % 2 == 1) + HUBscatter(Piberries); + if (.@u == 2) { + mapannounce("001-8", "The wolves were released!",0); + HUBscatter(ElixirOfLife); + HUBscatter(Aquada); + HUBscatter(Piberries); + HUBscatter(Beer); + HUBarrow(); + HUBspawn(Wolvern, 4); + HUBspawn(NightScorpion, 2); + } + if (.@u == 1) { + donpcevent "#QuirinoHUB::OnGameOver"; + } + + // } Deal with the player { clearitem(); + if (checkpcblock() & PCBLOCK_ATTACK) + setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_ITEM|PCBLOCK_MOVE|PCBLOCK_COMMANDS, false); // Check if to reduce clearitem() efficiency you've used the cart in an illegal way. getcartinventorylist(); @@ -54,13 +333,25 @@ OnPCDieEvent: setcart(0); // Delete the storage register. You now need to pay it again, to don't cheat anymore! setq General_Banker, 0; - // And be happy I did not removed your experience or gold! + // You'll also forsake any event reward. + @qhub_victor=0; + @qhub_died=0; + } + + // If you are the victor (and didn't cheat), you can now hold your reward ;-) + if (@qhub_victor) { + getitem GoldenGift, 1; + Zeny=Zeny+rand(500, 2500); } + if (@qhub_died || @qhub_victor) + getexp rand(100,300), 0; // Dying on this map is enough to get a reward. Logout = no reward. // You'll be revived/fully healed, and then warped. recovery(getcharid(3)); warp "000-1", 22, 22; } + @qhub_victor=0; + @qhub_died=0; end; } diff --git a/npc/001-8/mapflags.txt b/npc/001-8/mapflags.txt new file mode 100644 index 000000000..ee2bf319e --- /dev/null +++ b/npc/001-8/mapflags.txt @@ -0,0 +1,2 @@ +001-8 mapflag zone MMO +001-8 mapflag pvp diff --git a/npc/003-10/quirino.txt b/npc/003-10/quirino.txt index 3f845b022..1fdd49bb0 100644 --- a/npc/003-10/quirino.txt +++ b/npc/003-10/quirino.txt @@ -45,7 +45,7 @@ L_Register: L_Info: mesn col("Hungry Quirin Arena Rules", 3); mes col("1- You must not be carrying anything with you.", 9); - mes col("2- You must not use a cart. If you do, and get logged out for whatever reason, YOU WILL BE SEVERELY PENALIZED.", 9); + mes col("2- You must not use a cart. If you do, YOU WILL BE SEVERELY PENALIZED.", 9); mes col("3- All items from the Arena are from the Arena. You won't carry any of them back with you.", 9); mes col("4- Experience and Gold earned during this event can be kept.", 9); next; -- cgit v1.2.3-60-g2f50