summaryrefslogtreecommitdiff
path: root/npc/007-1
diff options
context:
space:
mode:
Diffstat (limited to 'npc/007-1')
-rw-r--r--npc/007-1/_import.txt2
-rw-r--r--npc/007-1/_mobs.txt20
-rw-r--r--npc/007-1/_warps.txt4
-rw-r--r--npc/007-1/caelum.txt154
-rw-r--r--npc/007-1/dracoula.txt153
-rw-r--r--npc/007-1/pylon.txt145
-rw-r--r--npc/007-1/torches.txt153
-rw-r--r--npc/007-1/zarkor.txt228
8 files changed, 847 insertions, 12 deletions
diff --git a/npc/007-1/_import.txt b/npc/007-1/_import.txt
index d9dd3f9bb..79c6fdd2e 100644
--- a/npc/007-1/_import.txt
+++ b/npc/007-1/_import.txt
@@ -2,4 +2,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/007-1/_mobs.txt",
"npc/007-1/_warps.txt",
-"npc/007-1/tycoon.txt", \ No newline at end of file
+"npc/007-1/tycoon.txt",
diff --git a/npc/007-1/_mobs.txt b/npc/007-1/_mobs.txt
index a3e403378..2477c31f0 100644
--- a/npc/007-1/_mobs.txt
+++ b/npc/007-1/_mobs.txt
@@ -1,11 +1,13 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 007-1: Tulimshar Mining Camp mobs
-007-1,135,101,43,90 monster Cave Maggot 1027,35,35000,300000
-007-1,120,43,10,7 monster Black Scorpion 1074,3,35000,300000
-007-1,65,60,19,15 monster Ratto 1005,3,35000,300000
-007-1,59,50,19,23 monster Piou 1002,3,35000,300000
-007-1,113,140,57,52 monster Cave Snake 1035,25,35000,300000
-007-1,52,156,37,29 monster Red Scorpion 1072,10,35000,300000
-007-1,34,125,7,6 monster Cave Maggot 1027,4,35000,300000
-007-1,84,72,75,57 monster Cave Bat 1039,6,35000,300000
-007-1,99,99,99,99 monster Ruby Bif 1099,8,35000,300000
+007-1,140,101,43,90 monster Cave Maggot 1027,38,35000,300000,Tycoon::OnKillCaveMaggot
+007-1,129,45,14,9 monster Black Scorpion 1074,4,35000,220000,Tycoon::OnKillBlackScorpion
+007-1,70,60,19,15 monster Ratto 1005,3,35000,300000,Tycoon::OnKillRatto
+007-1,64,50,19,23 monster Piou 1002,3,35000,300000
+007-1,118,140,57,52 monster Cave Snake 1035,25,35000,300000,Tycoon::OnKillCaveSnake
+007-1,57,156,37,29 monster Red Scorpion 1072,10,35000,300000,Tycoon::OnKillRedScorpion
+007-1,39,125,7,6 monster Cave Maggot 1027,5,35000,300000,Tycoon::OnKillCaveMaggot
+007-1,89,72,75,57 monster Cave Bat 1039,7,35000,300000
+007-1,104,99,99,99 monster Ruby Bif 1099,9,35000,300000
+007-1,117,94,10,7 monster Black Scorpion 1074,1,35000,300000,Tycoon::OnKillBlackScorpion
+007-1,93,110,9,9 monster Cave Maggot 1027,8,35000,300000,Tycoon::OnKillCaveMaggot
diff --git a/npc/007-1/_warps.txt b/npc/007-1/_warps.txt
index 64f5e9e5a..ff417a276 100644
--- a/npc/007-1/_warps.txt
+++ b/npc/007-1/_warps.txt
@@ -1,4 +1,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
// Map 007-1: Tulimshar Mining Camp warps
-007-1,51,37,0 warp #007-1_51_37 0,0,004-1,33,110
-007-1,85,52,0 warp #007-1_85_52 0,0,004-1,92,115
+007-1,56,37,0 warp #007-1_56_37 0,0,004-1,33,110
+007-1,90,52,0 warp #007-1_90_52 0,0,004-1,92,115
diff --git a/npc/007-1/caelum.txt b/npc/007-1/caelum.txt
new file mode 100644
index 000000000..6aaa2aa0a
--- /dev/null
+++ b/npc/007-1/caelum.txt
@@ -0,0 +1,154 @@
+// TMW2 Script
+// Author:
+// SkyDragon
+// Saulc
+// Reviewer:
+// Jesusalva
+// Description:
+// Caelum Miner, main author Skydragon Caelum mean Sky in Latin.
+// id:193 MineQuests_Caelum
+
+007-1,143,49,0 script Caelum NPC_PLAYER,{
+ .@Miner = getq(MineQuest_Caelum);
+ if (BaseLevel < 28) goto L_TooWeak;
+ if (.@Miner == 1) goto L_Check;
+ if (.@Miner == 2) goto L_Complete;
+
+L_GiveTask:
+ mesn;
+ mesq lg("Hello, wanderer!");
+ next;
+ mesq l("How did you end up here?");
+ next;
+
+ menu
+ l("To be honest, I don't know. I was only walking, seeking for adventure!"), L_Quest,
+ l("It's none of your business."), L_Quit;
+
+
+L_Quest:
+ mes "";
+ mesn;
+ mesq l("You perchance said in adventure? Good, because I just hurt my arm while mining!");
+ next;
+ mesn;
+ mesq l("If you bring me some items to I do a bandage and heal myself, I'll give you my gloves!");
+ next;
+
+ menu
+ l("Really? What do you need?"), L_Start,
+ l("Better do this some other time..."), L_Quit;
+
+
+L_Start:
+ setq MineQuest_Caelum, 1;
+ mes "";
+ mesn;
+ mesq l("Ok, what I need is:");
+ goto L_List;
+
+L_Quit:
+ mes "";
+ mesn;
+ mesq l("Alright.");
+ close;
+
+L_List:
+ mes "";
+ mesn;
+ mes l("Here's what I need:");
+ mes l("@@/1 @@", countitem(Lifestone), getitemlink(Lifestone));
+ mes l("@@/1 @@", countitem(CottonCloth), getitemlink(CottonCloth));
+ mes l("@@/2 @@", countitem(BlackScorpionStinger), getitemlink(BlackScorpionStinger));
+ mes l("@@/5 @@", countitem(ScorpionClaw), getitemlink(ScorpionClaw));
+ mes l("@@/10 @@", countitem(BatTeeth), getitemlink(BatTeeth));
+ mes l("@@/10 @@", countitem(CactusDrink), getitemlink(CactusDrink));
+ mes l("@@/20 @@", countitem(MaggotSlime), getitemlink(MaggotSlime));
+ mes l("@@/8 @@, just because I'm hungry as a bear.", countitem(BugLeg), getitemlink(BugLeg));
+ close;
+
+L_Check:
+ mesn;
+ mesq l("Did you brought me everything I asked for?");
+ next;
+ menu
+ l("Yes!"), L_Give,
+ l("I forgot what you need!"), L_List,
+ l("No!"), L_Quit;
+
+L_Give:
+ if (
+ countitem(Lifestone) < 1 ||
+ countitem(CottonCloth) < 1 ||
+ countitem(BlackScorpionStinger) < 2 ||
+ countitem(BugLeg) < 8 ||
+ countitem(BatTeeth) < 10 ||
+ countitem(CactusDrink) < 10 ||
+ countitem(MaggotSlime) < 20 ||
+ countitem(ScorpionClaw) < 5
+ ) goto L_Lying;
+
+ inventoryplace MinerGloves, 1;
+
+ delitem(Lifestone, 1);
+ delitem(CottonCloth, 1);
+ delitem(BlackScorpionStinger, 2);
+ delitem(BugLeg, 8);
+ delitem(BatTeeth, 10);
+ delitem(CactusDrink, 10);
+ delitem(MaggotSlime, 20);
+ delitem(ScorpionClaw, 5);
+
+ getitem(MinerGloves, 1);
+ getexp(855, 3);
+ setq(MineQuest_Caelum, 2);
+
+ mes "";
+ mesn;
+ mesq l("Here, all yours. I can't use them like I am now. Thank you.");
+ close;
+
+L_Complete:
+ mesn;
+ mesq l("Wandering too much? Take care to don't get lost.");
+ close;
+
+// Funnier to write than to read, but the player lied. :angel:
+L_Lying:
+ mesn;
+ mesq l("No no no, that's wrong.");
+ next;
+ mesc l("The miner goes to count your stuff again.");
+ next;
+ mesc l("And again.");
+ next;
+ mesc l("And again, and again.");
+ next;
+ mesc l("And again, and again, again.");
+ next;
+ mesc l("You wonder, maybe he entered on an infinite loop? Hellooo, anybody home?");
+ next;
+ mesn;
+ mesq l("No no no, you don't have everything I've asked for!");
+ next;
+ goto L_List;
+
+L_TooWeak:
+ mesn;
+ mesq l("Wanderer, here is dangerous! Go back!");
+ close;
+
+OnInit:
+ .@npcId = getnpcid(0, .name$);
+ setunitdata(.@npcId, UDT_HEADTOP, MinerHat);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, LeatherShirt);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, BromenalPants);
+ setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 4);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 3);
+
+ .sex = G_MALE;
+ .distance = 4;
+
+ end;
+}
diff --git a/npc/007-1/dracoula.txt b/npc/007-1/dracoula.txt
new file mode 100644
index 000000000..1c9f99c4c
--- /dev/null
+++ b/npc/007-1/dracoula.txt
@@ -0,0 +1,153 @@
+// TMW2 Script
+// Author:
+// Saulc
+// Jesusalva
+// Description:
+// Dracoula is daily npc, ask for bat teeth every 23 h
+// Variable:
+// MineQuest_Dracoula
+
+007-1,170,99,0 script Dracoula NPC_UKAR_F,{
+ mesn;
+ mesq lg("Hello adventurer! Are you lost?");
+ next;
+ mesq l("This is not a place for non-experimented people!");
+ next;
+ mesq l("Mine exit is top left!");
+ mes "";
+ if (BaseLevel >= 15) goto L_Menu;
+ close;
+
+L_Menu:
+ mesn;
+ mesq l("But as you're here now, could you do me a favour?");
+ mes "";
+ menu
+ l("Hum, Which type of favor?"),L_Quest,
+ l("Can I find a mana source here?"),L_Mana,
+ l("Can I become a miner?"),L_Miner,
+ l("No, thanks. I gonna leave this place."),L_Close;
+
+L_Quest:
+ mes "";
+ .@q=getq(MineQuest_Dracoula);
+ if (!.@q) {
+ mesn;
+ mesq l("Nice! First let me introduce myself. I am Dracoula, a miner!");
+ next;
+ mesn;
+ mesq l("I mine here since a while. My favorite activity it's to scare others miners!");
+ next;
+ }
+ if (.@q == 0) goto L_Continue;
+ .@q2=getq2(MineQuest_Dracoula) + 60 * 60 * 23;
+ if (santime() >= .@q2) goto L_Repeat;
+ mesn;
+ mesq l("But come back in a few hours, I didn't lost all @@!", getitemlink(BatTeeth));
+ close;
+
+L_Continue:
+ mesq l("I love seeing their terrorize face.");
+ mes "";
+ menu
+ l("Ok. Cool life!"), L_Close,
+ l("Haha, Nice, but how do you do that?"), L_Next;
+
+L_Next:
+ mes "";
+ mesq l("I disguise myself into a giant mutated bat, but every time I break or lose my fake teeth.");
+ next;
+ mesq l("I usually ask adventurers for 11 @@, but new miners should be arriving soon. I need to make them cry!", getitemlink(BatTeeth));
+ next;
+ mesq l("So it could be nice, if you could bring me 20 @@,", getitemlink(BatTeeth));
+ mes "";
+ menu
+ rif(countitem(BatTeeth) >= 20, l("Hey! I already got them!")), L_Finish,
+ l("I'll get to it."), L_Close;
+ close; // double sure
+
+L_Repeat:
+ mesn;
+ if (getequipid(EQI_HEAD_TOP) > 0)
+ mesq l("Oh it's you @@, I did not recognize you with your hat!", strcharinfo(0));
+ else
+ mesq l("Oh it's you @@, I did not recognize you without a hat!", strcharinfo(0));
+ next;
+ mesq l("Do you have an extra of 11 @@ for me?", getitemlink(BatTeeth));
+ mes "";
+ menu
+ rif(countitem(BatTeeth) >= 11, l("Yep, I bring them for you!")), L_Finish2,
+ l("Actually not."), L_Close;
+ close;
+
+// First Time Only
+L_Finish:
+ delitem BatTeeth, 20;
+ getexp 666, 5; // 20 / 18% = 111 kills * 15 xp = 1665 xp gained from killing. (40% bonus)
+ Zeny = (Zeny + 240); // 3*20 = 60 base (400% bonus)
+ setq MineQuest_Dracoula, 1, santime();
+ mes "";
+ mesn;
+ mesq l("WAW thank you! Come back later to bring me extra @@!", getitemlink(BatTeeth));
+ close;
+
+// Repeat
+L_Finish2:
+ delitem BatTeeth, 11;
+ getexp 275, 1; // 11 / 18% = 61 kills * 15 xp = 915 xp gained from killing. (30% bonus)
+ Zeny = (Zeny + 120); // 3*11 = 33 base (x% bonus)
+ setq MineQuest_Dracoula, 1, santime();
+ mes "";
+ mesn;
+ mesq l("So COOL, thanks! Come back later to bring me extra @@!", getitemlink(BatTeeth));
+ close;
+
+L_Mana:
+ mes "";
+ mesn;
+ mesq l("Ah! Actually nobody found one.");
+ next;
+ mesn;
+ mesq l("But it's ultimate goal of miners there.");
+ next;
+ mesn;
+ mesq l("If one of us found a Mana stone. They would become rich!");
+ next;
+ mesn;
+ mesq l("Twelve times more if it is an elusive Mana Fragment no one knows where they are!");
+ next;
+ mesn;
+ mesq l("That is.");
+ next;
+ goto L_Menu;
+
+L_Miner:
+ mes "";
+ mesn;
+ mesq l("You should ask Tycoon.");
+ next;
+ mesn;
+ mesq l("He is the Miners leader.");
+ next;
+ goto L_Menu;
+
+L_Close:
+ closedialog;
+ goodbye;
+ close;
+
+OnInit:
+ .@npcId = getnpcid(0, .name$);
+ setunitdata(.@npcId, UDT_HEADTOP, MinerHat);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, ArtisTankTop);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts);
+ setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 7);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 8);
+
+ .sex = G_FEMALE;
+ .distance = 4;
+
+ end;
+}
+
diff --git a/npc/007-1/pylon.txt b/npc/007-1/pylon.txt
new file mode 100644
index 000000000..c68e3763a
--- /dev/null
+++ b/npc/007-1/pylon.txt
@@ -0,0 +1,145 @@
+// TMW2 scripts.
+// TMW2 Authors:
+// Saulc
+// Jesusalva
+// Description:
+// Miner Pylon transforme gems into gem powder, he ask for 100gp + 1 gem and give 100 EXp (each time) + 1 to 3 gem powder's.
+// Variable:
+// dont need variable
+// Reference:
+// https://fr.wikipedia.org/wiki/Pilon#Objets not Epiphysis !
+
+007-1,47,44,0 script Pylon NPC_PLAYER,{
+
+ mesn;
+ mesq l("Hello, I'm Pylon!");
+ next;
+ mesq l("I work in this mine since 3 years, I'm an expert on gems: Ruby, Topaz, Sapphire, You know!");
+ next;
+ mesq l("If you have some gems, I can transform them into powder.");
+ next;
+ mesq l("I only take a tax of 100 gp per gem.");
+ if (Zeny < 100)
+ close;
+ next;
+ mesq lg("Then, would you like me to transform one of your gems?");
+ next;
+ goto L_Menu;
+
+L_Menu:
+ mesn strcharinfo(0);
+ // We could add a drag zone, and allow players to drag their gems, but... Meh.
+ select
+ l("Hum, how many gem powders can I get from one gem?"),
+ rif(countitem(Diamond) >= 1 && Zeny >= 100, l("Yeah sure, take my Diamond!")),
+ rif(countitem(Ruby) >= 1 && Zeny >= 100, l("Yeah sure, take my Ruby!")),
+ rif(countitem(Emerald) >= 1 && Zeny >= 100, l("Yeah sure, take my Emerald!")),
+ rif(countitem(Sapphire) >= 1 && Zeny >= 100, l("Yeah sure, take my Sapphire!")),
+ rif(countitem(Topaz) >= 1 && Zeny >= 100, l("Yeah sure, take my Topaz!")),
+ rif(countitem(Amethyst) >= 1 && Zeny >= 100, l("Yeah sure, take my Amethyst!")),
+ rif(countitem(IronOre) >= 1 && Zeny >= 100, l("And what's about Iron Ore?")),
+ l("No, thanks, I will keep my gems.");
+
+ mes "";
+
+ switch (@menu) {
+ case 1:
+ goto L_Question;
+ break;
+ case 8:
+ goto L_Ore;
+ break;
+ case 9:
+ close;
+ break;
+ default:
+ goto L_Powder;
+ break;
+ }
+
+L_Question:
+ mesn;
+ mesq lg("That depends on your luck!");
+ next;
+ mesq l("With one gem you can expect to get 1 to 3 powders!");
+ next;
+ mesc l("We must blame Saulc!");
+ next;
+ mesq lg("By the way would you like to transform your gem?");
+ next;
+ goto L_Menu;
+
+L_Ore:
+ mesn;
+ mesq l("Hum... I'm not really good at it.");
+ next;
+ mesn;
+ mesq l("But I can try my best for you!");
+ next;
+ mesn;
+ mesq l("If you want it?");
+ next;
+ goto L_MenuOre;
+
+L_MenuOre:
+ menu
+ rif(countitem(IronOre) >= 1 && Zeny >= 100, l("Make me an Iron Powder.")), L_OreOk,
+ l("Nah, thank you."), L_Close;
+
+L_OreOk:
+ // Amount iron ore
+ .@amo=rand(1,2);
+
+ delitem IronOre, 1;
+ Zeny = Zeny - 100;
+ getexp 10, 0;
+ inventoryplace IronPowder, .@amo;
+ getitem IronPowder, .@amo;
+ mes "";
+ mesn;
+ mesq l("Here you go, I tried my best! Do you want another?");
+ next;
+ goto L_MenuOre;
+
+
+// Must rework IDs
+L_Powder:
+ // Magic
+ .@id=Diamond+@menu-2;
+ .@pw=DiamondPowder+@menu-2;
+
+ // Amount
+ .@am=rand(1,3);
+
+ delitem .@id, 1;
+ Zeny = Zeny - 100;
+ getexp 60, 0;
+
+
+ inventoryplace .@pw, .@am;
+ getitem .@pw, .@am;
+
+ mes "";
+ mesn;
+ mesq l("Here is your powder! I hope it will be useful.");
+ next;
+ mesq l("Would you like to transform one more?");
+ next;
+ goto L_Menu;
+
+
+L_Close:
+ close;
+
+OnInit:
+ .@npcId = getnpcid(0, .name$);
+ setunitdata(.@npcId, UDT_HEADTOP, MinerHat);
+ setunitdata(.@npcId, UDT_HEADMIDDLE, ArtisTankTop);
+ setunitdata(.@npcId, UDT_HEADBOTTOM, BromenalPants);
+ setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots);
+ setunitdata(.@npcId, UDT_HAIRSTYLE, 15);
+ setunitdata(.@npcId, UDT_HAIRCOLOR, 4);
+ .sex = G_MALE;
+ .distance = 4;
+ end;
+}
diff --git a/npc/007-1/torches.txt b/npc/007-1/torches.txt
new file mode 100644
index 000000000..0dff30ac1
--- /dev/null
+++ b/npc/007-1/torches.txt
@@ -0,0 +1,153 @@
+// TMW-2 script.
+// Author:
+// Crazyfefe
+// Jesusalva
+// Description:
+// Torches
+// Variables:
+// TulimsharQuest_DarkInvocator
+// Values:
+// 0 Default.
+// 1 Quest Found.
+// 2 Quest Accepted.
+// 3 Bomb Defused.
+// 4 Quest Completed.
+
+
+function script CheckTorch {
+ @torch_count = 0;
+ @count_tmp = 0;
+ if (debug)
+ npctalk3 l("Hello, I am T-@@, of the @@ order.", @torch, $@TorchBits[@torch]);
+ if (getq2(TulimsharQuest_DarkInvocator) & $@TorchBits[@torch])
+ goto L_Empty;
+ if (countitem(EverburnPowder) <= 0) {
+ dispbottom(l("I do not have Everburn Powder to lit the torch."));
+ end;
+ }
+ setq2 TulimsharQuest_DarkInvocator, getq2(TulimsharQuest_DarkInvocator) | $@TorchBits[@torch];
+
+ goto L_Loop;
+
+L_TorchTally:
+ specialeffect(62);
+ specialeffect(54);
+ getmapxy(@m$, .@x, .@y, 0);
+
+ switch (@torch_count) {
+ case 1:
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Maggot", CaveMaggot, 4, "Zarkor::OnMonster";
+ break;
+ case 2:
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Maggot", CaveMaggot, 5, "Zarkor::OnMonster";
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Goblin", MagicGoblin, 1, "Zarkor::OnMonster";
+ break;
+ case 3:
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Maggot", CaveMaggot, 6, "Zarkor::OnMonster";
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Goblin", MagicGoblin, 5, "Zarkor::OnMonster";
+ break;
+ case 4:
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Black Scorpion", BlackScorpion, 1, "Zarkor::OnMonster";
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Maggot", CaveMaggot, 6, "Zarkor::OnMonster";
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Goblin", MagicGoblin, 7, "Zarkor::OnMonster";
+ break;
+ case 5:
+ areamonster @m$, .@x-3, .@y-3, .@x+3, .@y+3, "Black Scorpion", BlackScorpion, 3, "Zarkor::OnMonster";
+ areamonster @m$, .@x-3, .@y-3, .@x+3, .@y+3, "Magic Maggot", CaveMaggot, 8, "Zarkor::OnMonster";
+ areamonster @m$, .@x-3, .@y-3, .@x+3, .@y+3, "Magic Goblin", MagicGoblin, 10, "Zarkor::OnMonster";
+ break;
+ default:
+ dispbottom l("BUG, Please report: TorchTally, err_val @@", @torch_count);
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Black Scorpion", BlackScorpion, rand(1,2), "Zarkor::OnMonster";
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Maggot", CaveMaggot, rand(1,3), "Zarkor::OnMonster";
+ areamonster @m$, .@x-2, .@y-2, .@x+2, .@y+2, "Magic Goblin", MagicGoblin, rand(1,5), "Zarkor::OnMonster";
+ }
+
+ delitem EverburnPowder, 1;
+ if (@torch_count == 5) {
+ message strcharinfo(0), l("All torches are lit!");
+ //killmonsterall("007-1");
+ setq1 TulimsharQuest_DarkInvocator, 6;
+ }
+
+ return;
+
+L_Loop:
+ while (@count_tmp < 5) {
+ @count_tmp = (@count_tmp + 1);
+ if (getq2(TulimsharQuest_DarkInvocator) & $@TorchBits[@count_tmp])
+ @torch_count = (@torch_count + 1);
+ }
+ goto L_TorchTally;
+
+L_Empty:
+ message strcharinfo(0), l("This torch is already lit.");
+ return;
+
+}
+
+007-1,171,145,0 script Torch#1 NPC_NO_SPRITE,{
+ @torch = 1;
+ .@q = getq(TulimsharQuest_DarkInvocator);
+ if (.@q == 5) {
+ CheckTorch();
+ npctalk(l("What is @@ doing?", strcharinfo(0)), "Miner#SkyDG");
+ }
+ end;
+OnInit:
+ // Remember: array start at zero, but barrels count start at 1. "Fixing" may break torch 5!
+ setarray $@TorchBits, (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6);
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
+007-1,70,116,0 script Torch#2 NPC_NO_SPRITE,{
+ @torch = 2;
+ .@q = getq(TulimsharQuest_DarkInvocator);
+ if (.@q == 5) {
+ CheckTorch();
+ }
+ end;
+OnInit:
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+
+007-1,67,133,0 script Torch#3 NPC_NO_SPRITE,{
+ @torch = 3;
+ .@q = getq(TulimsharQuest_DarkInvocator);
+ if (.@q == 5) {
+ CheckTorch();
+ }
+ end;
+OnInit:
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+007-1,40,125,0 script Torch#4 NPC_NO_SPRITE,{
+ @torch = 4;
+ .@q = getq(TulimsharQuest_DarkInvocator);
+ if (.@q == 5) {
+ CheckTorch();
+ }
+ end;
+OnInit:
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
+007-1,144,24,0 script Torch#5 NPC_NO_SPRITE,{
+ @torch = 5;
+ .@q = getq(TulimsharQuest_DarkInvocator);
+ if (.@q == 5) {
+ CheckTorch();
+ }
+ end;
+OnInit:
+ .sex = G_OTHER;
+ .distance = 1;
+ end;
+}
diff --git a/npc/007-1/zarkor.txt b/npc/007-1/zarkor.txt
new file mode 100644
index 000000000..a9e6c12d1
--- /dev/null
+++ b/npc/007-1/zarkor.txt
@@ -0,0 +1,228 @@
+// TMW2 Script
+// Author:
+// Crazyfefe
+// Jesusalva
+// Description:
+// Dark Invocator Quest
+// Notes:
+// You'll be tempted to sell the Dark Desert Mushroom for 8'000 GP. There's a but.
+// You won't be able to finish this quest. Ok, no biggie, it was not that rewarding.
+// But you won't be able to do more Everburn Powder. And it can be required on another
+// quest. And there won't be other way to get the Powder. So DO NOT SELL IT. Think ahead.
+
+007-1,157,155,0 script Zarkor NPC_MIRAJ,{
+ .@q=getq(TulimsharQuest_DarkInvocator);
+ if (BaseLevel <= 30)
+ goto L_Weak;
+ switch (.@q) {
+ case 0:
+ goto L_Start;
+ break;
+ case 1:
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Talk to Zitoni, the Alchemist of Candor. He may look humble, but he is the greatest alchemist of this world. I need five @@.", getitemlink(EverburnPowder));
+ close;
+ break;
+ case 2:
+ goto L_Price;
+ break;
+ case 3:
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Talk to Zitoni, and deliver the @@. I can't give you another one, they're super rare.", getitemlink(DarkDesertMushroom));
+ close;
+ break;
+ case 4:
+ goto L_Quest;
+ break;
+ case 5:
+ mesn "Saulc, the Bug Master";
+ mesq col("What, are we really letting you do something so insane as summoning the Monster King?! Blame Saulc!!");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("You didn't lit every torch yet! Hurry up!!");
+ close;
+ break;
+ case 6:
+ if (getq2(TulimsharQuest_DarkInvocator) == 0) {
+ setq TulimsharQuest_DarkInvocator, 4;
+ goto L_Quest;
+ }
+ goto L_Ritual;
+ break;
+
+ }
+ mesn;
+ mesq l("One day... One day! ONE DAY I'LL GET REVENGE ON YOU, MONSTER KING!");
+ close;
+
+L_Weak:
+ mesn;
+ mesq lg("Stay out of harm way. Nothing to see here. Stay away, pathetically weak human.");
+ close;
+
+L_Start:
+ mesn;
+ mesq l("Hey... You... Come here.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("I am Zarkor, the Dark Summoner. I want to do a dark summoning ritual, but there are strings attached.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("I need to buy your silence. I'll reward you greatly when I'm done. But first, I need to know if you'll be loyal to me.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("To prove me your faith, bring me 1 @@ or 1 @@.",getitemlink(Ruby),getitemlink(Topaz));
+ mesq l("Such precious gem, is not something you would give for free, unless you are interested on my... rituals.");
+ next;
+ mesn strcharinfo(0);
+ select
+ l("Indeed. Sorry. I'm not giving you anything."),
+ rif(countitem(Ruby) >= 1, l("I swear silence, over this bloody ruby.")),
+ rif(countitem(Topaz) >= 1, l("I swear silence, over this shining topaz."));
+
+ mes "";
+ switch (@menu) {
+ case 1:
+ mesn;
+ mesq l("Very well. This conversation never happened.");
+ next;
+ mesn;
+ mesq l("But if you regret this choice later... You know where you can find me.");
+ close;
+ break;
+ case 2:
+ delitem Ruby, 1; // Acc: 712 GP
+ setq TulimsharQuest_DarkInvocator, 1;
+ break;
+ case 3:
+ delitem Topaz, 1; // Acc: 825 GP
+ setq TulimsharQuest_DarkInvocator, 1;
+ break;
+ }
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Very well. I shall now share with you the details of this rite.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("I will summon the Monster King. Don't ask me my reasons. I know this will put Tulimshar in danger. But I will still do it.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("For that, I need to light five torches. The pentagram, the magic, and all the else are with me. Just light the torches.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Talk to Zitoni, the Alchemist of Candor. He may look humble, but he is the greatest alchemist of this world. I need five @@.", getitemlink(EverburnPowder));
+ close;
+
+L_Price:
+ mesn strcharinfo(0);
+ mesq l("Zitoni refused to make the Powder.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("I thought he would. After all, Everburn Powder... is not a mere powder.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Well, you gave me the gems, so I trust you. Here, take this @@.", getitemlink(DarkDesertMushroom));
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Take much care with it. It is a very, very rare drop from a rare monster from a difficult, high level area.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Deliver it to Zitoni on my name. He'll trust it. The relation between me and Zitoni... goes way back.");
+ getitem DarkDesertMushroom, 1;
+ setq TulimsharQuest_DarkInvocator, 3;
+ close;
+
+L_Quest:
+ if (countitem(EverburnPowder) < 5) {
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("This is not enough, I need 5 @@ to perform the rite. Go talk with Zitoni.", getitemlink(EverburnPowder));
+ close;
+ }
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Good, good, you have enough powder. Now I need you to lit all five torches with them.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Once you lit one of them, monsters will pour out, so take care to don't die.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("If you die, you'll have to begin again. And there is the experience penalty, too.");
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("Good luck, because you'll need it. Talk to me once all of them are lit, and I'll SUMMON DAH MONSTER KING.");
+ setq TulimsharQuest_DarkInvocator, 5;
+ close;
+
+L_Ritual:
+ percentheal 100, 0;
+ specialeffect(56);
+ mesc l("Zarkor spills many fluids on the lake, with much concentration.");
+ next;
+ specialeffect(56);
+ mesn "Zarkor, the Dark Summoner";
+ mesc l("Zarkor starts a weird chant.");
+ next;
+ specialeffect(52);
+ killmonster("007-1", "Zarkor::OnMonster");
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("MONSTER KING, APPEAR TO ME!");
+ next;
+ mesn "MONSTER KING";
+ mesc l("...Foolish human... Do you really think I will attend your summon?"), 1;
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("But... But! Where are you?! That summon ritual is equivalent to GM magic!");
+ next;
+ mesn "MONSTER KING";
+ mesc l("And who do you think that created GM Magic in first place, inexperienced kid?"), 1;
+ next;
+ mesn "Zarkor, the Dark Summoner";
+ mesq l("You... You killed my father during Nivalis siege! I'll make you pay for that!!");
+ next;
+ mesn "MONSTER KING";
+ mesc l("You humans are so greedy... Just like me. I have more important things to do, other than waste time with you."), 1;
+ next;
+ mesn "MONSTER KING";
+ mesc l("Zarkor, fell a small taste of my power. That is nothing. If you can't handle that, you're not even near my lowest lieutenant."), 1;
+ mesc l("And you got help from a kid, Zarkor? Lucky is that kid, that I don't have time to deal with them. Farewell."), 1;
+ next;
+ specialeffect(312);
+ mesn "Zarkor, the Dark Summoner";
+ mes l("GAAAAAAAAAAAAAAAAHHHHHHH!");
+ next;
+ goto L_Finish;
+
+
+
+L_Finish:
+ setq TulimsharQuest_DarkInvocator, 7;
+ // These values were taken from Experience table, and are magic numbers
+ getexp 7995, 412; // 100% for levelset (30,11)
+ // Pay roughly what you spent
+ // Powder + Trips + Gems + Sulf + Iron + Ash + Profit = Money
+ // (3000*5 + 4*500G + 1000 + 5*84 + 5*66 + 5*80 + 850) = 20.000
+ Zeny=Zeny+20000;
+ getitem ZarkorScroll, 1;
+
+ mesn;
+ mesq l("*Ugh* Thanks for your help. Here... Take this, as promised.");
+ next;
+ mesn strcharinfo(0);
+ mesq l("Are you feeling well? That was a pretty powerful attack!");
+ next;
+ mesn;
+ mesq lg("Do not worry with me, youngling... I'll be fine.");
+ close;
+
+OnMonster:
+ end;
+
+OnPCDieEvent:
+ if (getq(TulimsharQuest_DarkInvocator) == 5 || getq(TulimsharQuest_DarkInvocator) == 6)
+ setq2 TulimsharQuest_DarkInvocator, 0;
+ end;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 6;
+ end;
+
+}