diff options
-rw-r--r-- | maps/re/034-1.mcache | bin | 637 -> 641 bytes | |||
-rw-r--r-- | npc/014-2-2/valia.txt | 73 | ||||
-rw-r--r-- | npc/034-1/gemini.txt | 1 | ||||
-rw-r--r-- | npc/034-2/_import.txt | 1 | ||||
-rw-r--r-- | npc/034-2/gemini.txt | 159 |
5 files changed, 234 insertions, 0 deletions
diff --git a/maps/re/034-1.mcache b/maps/re/034-1.mcache Binary files differindex 4ccc14d50..6993a7dd3 100644 --- a/maps/re/034-1.mcache +++ b/maps/re/034-1.mcache 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; +} + |