summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/re/item_db.conf2
-rw-r--r--npc/001-8/_import.txt1
-rw-r--r--npc/001-8/hub.txt307
-rw-r--r--npc/001-8/mapflags.txt2
-rw-r--r--npc/003-10/quirino.txt2
5 files changed, 304 insertions, 10 deletions
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 3459baa34..19f33fb21 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -1740,7 +1740,7 @@ item_db: (
noauction: true
}
Script: <"
- setarray .@r, StrangeCoin, IronIngot, SaxsoKey, SilverGift;
+ setarray .@r, StrangeCoin, IronIngot, SaxsoKey, GoldenApple, GoldenRing, GoldOre, Coal, SilverGift;
.@n=rand(getarraysize(.@r));
if (.@n > 0)
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;