diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/001-8 | |
download | serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2 serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip |
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/001-8')
-rw-r--r-- | npc/001-8/_import.txt | 5 | ||||
-rw-r--r-- | npc/001-8/_mobs.txt | 8 | ||||
-rw-r--r-- | npc/001-8/hub.txt | 433 | ||||
-rw-r--r-- | npc/001-8/mapflags.txt | 5 |
4 files changed, 451 insertions, 0 deletions
diff --git a/npc/001-8/_import.txt b/npc/001-8/_import.txt new file mode 100644 index 0000000..0dce527 --- /dev/null +++ b/npc/001-8/_import.txt @@ -0,0 +1,5 @@ +// Map 001-8: Hungry Quirin Arena +// 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/_mobs.txt b/npc/001-8/_mobs.txt new file mode 100644 index 0000000..24a0290 --- /dev/null +++ b/npc/001-8/_mobs.txt @@ -0,0 +1,8 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 001-8: Hungry Quirin Arena mobs +001-8,49,49,30,30 monster Piousse 1003,11,20000,20000 +001-8,28,47,10,7 monster Plushroom Field 1011,18,30000,30000 +001-8,70,51,10,7 monster Chagashroom Field 1128,18,30000,30000 +001-8,49,28,31,10 monster Manana Tree 1017,26,30000,30000 +001-8,28,70,10,10 monster Squirrel 1032,8,30000,30000 +001-8,67,72,14,9 monster Manana Tree 1017,8,30000,30000 diff --git a/npc/001-8/hub.txt b/npc/001-8/hub.txt new file mode 100644 index 0000000..9ba3cf5 --- /dev/null +++ b/npc/001-8/hub.txt @@ -0,0 +1,433 @@ +// TMW2 Script +// Author: +// Ernando <ernando.quirino@hotmail.com> (Creator) +// Jesusalva <admin@tmw2.org> +// Description: +// Hunger Games™ version for The Mana World Brazil v2, created by Ernando Quirino. + +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, ElficBow), 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")-1; + debugmes "OnGameOver Check: "+str(.@u); + if (.@u == 1) { + $@EQ_STATUS=2; + maptimer("001-8", 10, "#QuirinoHUB::OnVictory"); + killmonsterall("001-8"); + stopnpctimer; + cleanmap("001-8"); + } + 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(LousyMoccasins, 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(JeansShorts, 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: + // 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, AREA, getcharid(3)); + addtimer(5000, "#QuirinoHUB::OnCount5"); + dispbottom l("10 seconds!"); + end; + +OnCount5: + specialeffect(4, AREA, getcharid(3)); + + // 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; Send armor too + 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)); + makeitem(rand(CreasedShirt, CandorShirt), 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(CreasedShorts); + + // Throw some random stuff on the whole map. + HUBscatter(rand(AquadaBox, WoodenLog)); + + // Free player, let's start! + delcells "qhubN"; + delcells "qhubS"; + setpcblock(PCBLOCK_SOFT, false); + specialeffect(FX_MGSHIELD, AREA, getcharid(3)); + specialeffect(FX_CRITICAL, AREA, getcharid(3)); + dispbottom col(l("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; + + +// 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); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + 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); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + end; + +// Five minutes are due. +OnTimer300000: + HUBspawn(GreenSlime, 4); + HUBspawn(AngryRedScorpion, 3); + HUBspawn(Sarracenus, 1); + HUBspawn(Snake, 2); + HUBarrow(); + HUBarrow(); + HUBarrow(); + HUBscatter(LeatherGloves); + HUBrandwpn(1); + HUBrandwpn(1); + HUBscatter(GoldenPearlRing); + HUBscatter(ElixirOfLife); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + HUBscatter(rand(731, 875)); + 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(); + HUBrandwpn(1); + HUBrandwpn(1); + HUBscatter(GoldenBlackPearlRing); + HUBscatter(ElixirOfLife); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + HUBscatter(rand(731, 875)); + 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(); + HUBrandwpn(1); + HUBrandwpn(1); + HUBrandwpn(1); + HUBscatter(ElixirOfLife); + // Throw some random stuff on the whole map. + HUBscatter(rand(731, 875)); + HUBscatter(rand(731, 875)); + HUBscatter(rand(731, 875)); + end; + +OnVictory: + @qhub_victor=1; + announce(sprintf("##1HUNGRY QUIRIN EVENT: ##3##B%s has won the match! Hail!", strcharinfo(0)), bc_all|bc_npc); + if (!QUIRINO_WINNER) + QUIRINO_WINNER = gettimetick(2); +OnPCDieEvent: + @qhub_died=1; +OnPCLogoutEvent: + getmapxy(.@mapa$, .@a,.@b, 0); + if (.@mapa$ == "001-8") { + // Deal with the environment { + .@u=getmapusers("001-8")-1; + 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 && !@qhub_victor) { + donpcevent "#QuirinoHUB::OnGameOver"; + } + + // } Deal with the player { + clearitem(); + if (checkpcblock() & PCBLOCK_ATTACK) + setpcblock(PCBLOCK_SOFT, false); + + // Check if to reduce clearitem() efficiency you've used the cart in an illegal way. + getcartinventorylist(); + if (@cartinventorylist_count>=1) { + // Obviously a cheater, you should not be using the cart on the event. I HATE CHEATERS! + // Destroy everything you had on the cart + if ($@HAS_API) { + query_sql("DELETE FROM `cart_inventory` WHERE `char_id`="+getcharid(0)); + } else { + apiasync("SQL", sprintf("DELETE FROM `cart_inventory` WHERE `char_id`='%d'", getcharid(0))); + apiasync("SQLRUN", ""); + } + // Destroy the cart. Cheaters doesn't deserve it!! + setcart(0); + // Delete the storage register. You now need to pay it again, to don't cheat anymore! + setq General_Banker, 0; + // 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 any(MercBoxA, MercBoxA, SilverGift, MercBoxBB, GoldenGift), 1; + Zeny=Zeny+rand2(500, 2500); + } + if (@qhub_died || @qhub_victor) + getexp rand2(100,300), BaseLevel*10; // Dying on this map is enough to get a reward. Logout = no reward. + + // You'll be revived/fully healed, and then warped. + // FIXME: It will throw you in Nard's ship if you are on logout... + recovery(getcharid(3)); + // If recovery() is broken: + //atcommand "#alive \""+strcharinfo(0)+"\""; + //percentheal 100, 100; + warp "000-1", 22, 22; + } + + // TODO: Checks which doesn't belong here shouldn't be here! + HUB_Logout(@qhub_died); + + @qhub_victor=0; + @qhub_died=0; + end; + +OnCancel: + setpcblock(PCBLOCK_SOFT, false); + warp "Save", 0, 0; + end; + +// No penalty override +OnNoPenaltyCommand: + @realvalue=@deathpenalty_realvalue-readparam(BaseExp); + @realvaljob=@deathpenalty_realvaljob-readparam(JobExp); + + // GM Report + if (is_staff()) + debugmes("Old values: %d %d Current Values: %d %d Real Difference: %d %d", @deathpenalty_realvalue, @deathpenalty_realvaljob, readparam(BaseExp), readparam(JobExp), @realvalue, @realvaljob); + + // Revive and Warp you to save point or it'll have no effect + recovery(getcharid(3)); + warp "Save", 0, 0; + addtimer(500, "#QuirinoHUB::OnNoPenaltyCommand2"); + end; + +OnNoPenaltyCommand2: + // Restitute the lost experience + if (@deathpenalty_override == 1) + getexp @realvalue, @realvaljob; + else if (@deathpenalty_override == 2) + getexp @realvalue/2, @realvaljob/2; + else + dispbottom l("BUG, REPORT ME: QHUB PENALTY OVERRIDE INVALID SIGNAL @@", @deathpenalty_override); + + // Clear temporary variables + @deathpenalty_override=0; + @deathpenalty_realvalue=0; + @deathpenalty_realvaljob=0; + @realvalue=0; + @realvaljob=0; + end; +} + diff --git a/npc/001-8/mapflags.txt b/npc/001-8/mapflags.txt new file mode 100644 index 0000000..5fcbceb --- /dev/null +++ b/npc/001-8/mapflags.txt @@ -0,0 +1,5 @@ +001-8 mapflag zone MMO +001-8 mapflag pvp +001-8 mapflag pvp_noparty +001-8 mapflag pvp_noguild +001-8 mapflag nostorage |