summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--maps/re/034-1.mcachebin637 -> 641 bytes
-rw-r--r--npc/014-2-2/valia.txt73
-rw-r--r--npc/034-1/gemini.txt1
-rw-r--r--npc/034-2/_import.txt1
-rw-r--r--npc/034-2/gemini.txt159
5 files changed, 234 insertions, 0 deletions
diff --git a/maps/re/034-1.mcache b/maps/re/034-1.mcache
index 4ccc14d50..6993a7dd3 100644
--- a/maps/re/034-1.mcache
+++ b/maps/re/034-1.mcache
Binary files differ
diff --git a/npc/014-2-2/valia.txt b/npc/014-2-2/valia.txt
index d4c886d2b..892f5641f 100644
--- a/npc/014-2-2/valia.txt
+++ b/npc/014-2-2/valia.txt
@@ -48,6 +48,8 @@ function script GeminiKill {
break;
case 6: // Just entered the Den
break;
+ case 7: // Just got stunned
+ break;
// Forest -> Desert -> Bandit Cave -> Island -> Fake showdown -> Storage -> Showdown -> Chest, Lore and Exit -> Wumpus' Trap -> End
}
return;
@@ -223,6 +225,31 @@ OnCore:
case 5: // JackO shows up
getexp 32000, 1400;
break;
+ case 7: // Ambushed & Captured
+ @lockpicks=false;
+ // Prision Area
+ .@m=any(Bandit, RobinBandit, SleepingBandit);
+ areamonster("val2@"+.@p, 52, 93, 70, 98, strmobinfo(1, .@m), .@m, 1);
+ .@m=any(Bandit, RobinBandit, SleepingBandit);
+ areamonster("val2@"+.@p, 52, 93, 70, 98, strmobinfo(1, .@m), .@m, 1);
+ // Ante-chamber
+ areamonster("val2@"+.@p, 69, 96, 85, 107, strmobinfo(1, Bandit), Bandit, 1);
+ .@m=any(Bandit, RobinBandit, SleepingBandit, RobinBandit);
+ areamonster("val2@"+.@p, 69, 96, 85, 107, strmobinfo(1, .@m), .@m, 1);
+ // Reception & Lord Desk
+ areamonster("val2@"+.@p, 50, 30, 80, 75, strmobinfo(1, Bandit), Bandit, (BaseLevel/15));
+ areamonster("val2@"+.@p, 50, 30, 80, 75, strmobinfo(1, RobinBandit), RobinBandit, (BaseLevel/25));
+ // Whole Map
+ areamonster("val2@"+.@p, 20, 24, 78, 72, strmobinfo(1, Archant), Archant, (BaseLevel/8));
+ // Great Hall
+ areamonster("val2@"+.@p, 25, 24, 50, 45, strmobinfo(1, RobinBandit), RobinBandit, (BaseLevel/22));
+ areamonster("val2@"+.@p, 25, 24, 50, 45, strmobinfo(1, Assassin), Assassin, (BaseLevel/20));
+ areamonster("val2@"+.@p, 25, 24, 50, 45, strmobinfo(1, Bandit), Bandit, (BaseLevel/18));
+ areamonster("val2@"+.@p, 25, 24, 50, 45, strmobinfo(1, HoodedNinja), HoodedNinja, 1);
+ break;
+ case 8: // Key retrieved
+ getexp 128000, 2000;
+ break;
}
}
addtimer(5000, "Valia::OnCoreInit");
@@ -230,35 +257,81 @@ OnCore:
OnGSlime:
fix_mobkill(GreenSlime);
+ .@p = getcharid(1);
areamonster("val1@"+.@p, 20, 20, 60, 60, strmobinfo(1, GreenSlime), GreenSlime, 1, "Valia::OnGSlime");
end;
OnLHead:
fix_mobkill(LogHead);
+ .@p = getcharid(1);
areamonster("val1@"+.@p, 20, 20, 70, 60, strmobinfo(1, LogHead), LogHead, 1, "Valia::OnLHead");
end;
OnFShroom:
fix_mobkill(ForestMushroom);
+ .@p = getcharid(1);
areamonster("val1@"+.@p, 20, 20, 70, 60, strmobinfo(1, ForestMushroom), ForestMushroom, 1, "Valia::OnFShroom");
end;
OnRShroom:
fix_mobkill(RedMushroom);
+ .@p = getcharid(1);
areamonster("val1@"+.@p, 20, 20, 70, 60, strmobinfo(1, RedMushroom), RedMushroom, 1, "Valia::OnRShroom");
end;
///////////////////////////////////
OnCSnake:
fix_mobkill(CaveSnake);
+ .@p = getcharid(1);
areamonster("val1@"+.@p, 100, 20, 170, 60, strmobinfo(1, CaveSnake), CaveSnake, 1, "Valia::OnCSnake");
end;
OnMGoblin:
fix_mobkill(MagicGoblin);
+ .@p = getcharid(1);
areamonster("val1@"+.@p, 100, 20, 170, 60, strmobinfo(1, MagicGoblin), MagicGoblin, 2, "Valia::OnMGoblin");
end;
+///////////////////////////////////
+OnKey1:
+ .@p = getcharid(1);
+ .@mob=monster("val2@"+.@p, 57, 104, strmobinfo(1, CopperSlime), CopperSlime, 1, "Valia::OnKey1");
+ // This should wipe the monster experience value
+ setunitdata(.@mob, UDT_LEVEL, 1);
+ if (countitem(Lockpicks) || @lockpicks || rand2(3)) end;
+ getitem Lockpicks, 1;
+ @lockpicks=true;
+ end;
+
+OnKey2:
+ .@p = getcharid(1);
+ .@mob=monster("val2@"+.@p, 61, 104, strmobinfo(1, CopperSlime), CopperSlime, 1, "Valia::OnKey2");
+ // This should wipe the monster experience value
+ setunitdata(.@mob, UDT_LEVEL, 1);
+ if (countitem(Lockpicks) || @lockpicks || rand2(3)) end;
+ getitem Lockpicks, 1;
+ @lockpicks=true;
+ end;
+
+OnKey3:
+ .@p = getcharid(1);
+ .@mob=monster("val2@"+.@p, 66, 104, strmobinfo(1, CopperSlime), CopperSlime, 1, "Valia::OnKey3");
+ // This should wipe the monster experience value
+ setunitdata(.@mob, UDT_LEVEL, 1);
+ if (countitem(Lockpicks) || @lockpicks || rand2(3)) end;
+ getitem Lockpicks, 1;
+ @lockpicks=true;
+ end;
+
+OnLord:
+ .@p = getcharid(1);
+ if (mobcount("val2@"+.@p, "Valia::OnLord")) {
+ 'STATUS = 8;
+ Zeny+=15000;
+ dispbottom l("This lord dropped a key and a stash of gold!");
+ }
+ end;
+
OnInit:
.distance=4;
end;
diff --git a/npc/034-1/gemini.txt b/npc/034-1/gemini.txt
index 0d53a9b2c..0f43acd0f 100644
--- a/npc/034-1/gemini.txt
+++ b/npc/034-1/gemini.txt
@@ -31,6 +31,7 @@
close;
OnInit:
+OnInstanceInit:
.distance = 2;
end;
}
diff --git a/npc/034-2/_import.txt b/npc/034-2/_import.txt
index 77d11a7b2..ae5722e5e 100644
--- a/npc/034-2/_import.txt
+++ b/npc/034-2/_import.txt
@@ -1,3 +1,4 @@
// Map 034-2: Bandit Cave
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/034-2/_mobs.txt",
+"npc/034-2/gemini.txt",
diff --git a/npc/034-2/gemini.txt b/npc/034-2/gemini.txt
new file mode 100644
index 000000000..dff5c7668
--- /dev/null
+++ b/npc/034-2/gemini.txt
@@ -0,0 +1,159 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// Description:
+// Gemini Sisters Quest - Bandit Den
+
+034-2,24,60,0 script #GeminiBack1 NPC_HIDDEN,0,0,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(6);
+ .@p=getcharid(1);
+ warp "val1@"+.@p, 169, 25;
+ end;
+}
+
+034-2,37,24,0 script #GeminiExit3 NPC_HIDDEN,0,0,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(7);
+ if ('STATUS < 8) {
+ dispbottom l("One of the bandits locked this door; We need to find the key!");
+ end;
+ }
+ .@p=getcharid(1);
+ warp "val3@"+.@p, 23, 51;
+ end;
+}
+
+// Ambush
+034-2,29,73,0 script #GeminiDen1 NPC_HIDDEN,0,0,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(6);
+ // TODO: areasc... stun ... etc.
+ .@c=getunits(BL_PC, .@mbs, false, getmap(), 23, 67, 32, 74);
+ for (.@i = 0; .@i < .@c; .@i++) {
+ sc_start(SC_STUN, 15000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@mbs[.@i]);
+ specialeffect(FX_CRITICAL, AREA, .@mbs[.@i]);
+ }
+ .@p=getcharid(1);
+ .@m$=getmap();
+ .@b1=monster(.@m$, 30, 70, "Bandit A", Bandit, 1);
+ .@b2=monster(.@m$, 32, 71, "Bandit B", RobinBandit, 1);
+ immortal(.@b1);
+ immortal(.@b2);
+ sc_start(SC_STUN, 12000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@b1);
+ sc_start(SC_STUN, 12000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@b2);
+ // Begin cutscene
+ sleep2(2000); // 13 s
+ unittalk(.@b1, "Did you think you could sneak in our den without a problem?");
+ sleep2(2000); // 11s
+ unittalk(.@b2, "Haha, we caught them, n00bs!");
+ sleep2(3000); // 8s
+ unittalk(.@b1, "Drop your weapons, and come with us!");
+ 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);
+ unitwalk(.@b1, 37, 90);
+ unitwalk(.@b2, 37, 90);
+ sleep2(2000);
+ // Get them... wherever
+ unitwarp(.@b1, "034-2", 37, 90);
+ unitwarp(.@b2, "034-2", 37, 90);
+ unitkill(.@b1);
+ unitkill(.@b2);
+ areawarp(.@m$, 30, 92, 33, 95, .@m$, 57, 101, 66, 104);
+ // First ambush, set some stuff up
+ if ('STATUS == 6) {
+ 'STATUS=7;
+
+ .@mob=monster("val2@"+.@p, 57, 104, strmobinfo(1, CopperSlime), CopperSlime, 1, "Valia::OnKey1");
+ setunitdata(.@mob, UDT_LEVEL, 1);
+ .@mob=monster("val2@"+.@p, 61, 104, strmobinfo(1, CopperSlime), CopperSlime, 1, "Valia::OnKey2");
+ setunitdata(.@mob, UDT_LEVEL, 1);
+ .@mob=monster("val2@"+.@p, 66, 104, strmobinfo(1, CopperSlime), CopperSlime, 1, "Valia::OnKey3");
+ setunitdata(.@mob, UDT_LEVEL, 1);
+
+ monster("val2@"+.@p, 47, 72, strmobinfo(1, BanditLord), BanditLord, 1, "Valia::OnLord");
+ monster("val2@"+.@p, 85, 106, strmobinfo(1, BanditLord), BanditLord, 1, "Valia::OnLord");
+ monster("val2@"+.@p, 58, 45, strmobinfo(1, BanditLord), BanditLord, 1, "Valia::OnLord");
+ monster("val2@"+.@p, 40, 42, strmobinfo(1, BanditLord), BanditLord, 1, "Valia::OnLord");
+
+ monster("val2@"+.@p, 47, 25, strmobinfo(1, RedSlimeMother), RedSlimeMother, 1);
+ }
+ end;
+}
+
+
+// Cell Doors
+034-2,58,100,0 script Cell Door#G01 NPC_NO_SPRITE,{
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(7);
+ mes l("A complex lock seems to be posing a threat to you.");
+ mes l("But thanks to your %s skills, maybe you can pry this open.", thiefrank());
+ next;
+ .@s=LockPicking(3, 3, false);
+ // You broke free!
+ if (.@s) {
+ slide .x, 98;
+ closeclientdialog;
+ end;
+ }
+ @lockpicks=false;
+ mes l("What's this dark magic, the password has changed!");
+ close;
+OnInit:
+OnInstanceInit:
+ .distance=2;
+ end;
+}
+
+034-2,62,100,0 script Cell Door#G02 NPC_NO_SPRITE,{
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(7);
+ mes l("A complex lock seems to be posing a threat to you.");
+ mes l("But thanks to your %s skills, maybe you can pry this open.", thiefrank());
+ next;
+ .@s=LockPicking(3, 3, false);
+ // You broke free!
+ if (.@s) {
+ slide .x, 98;
+ closeclientdialog;
+ end;
+ }
+ @lockpicks=false;
+ mes l("What's this dark magic, the password has changed!");
+ close;
+OnInit:
+OnInstanceInit:
+ .distance=2;
+ end;
+}
+
+034-2,64,100,0 script Cell Door#G01 NPC_NO_SPRITE,{
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(7);
+ mes l("A complex lock seems to be posing a threat to you.");
+ mes l("But thanks to your %s skills, maybe you can pry this open.", thiefrank());
+ next;
+ .@s=LockPicking(3, 3, false);
+ // You broke free!
+ if (.@s) {
+ slide .x, 98;
+ closeclientdialog;
+ end;
+ }
+ @lockpicks=false;
+ mes l("What's this dark magic, the password has changed!");
+ close;
+OnInit:
+OnInstanceInit:
+ .distance=2;
+ end;
+}
+