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/007-1 | |
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/007-1')
-rw-r--r-- | npc/007-1/_import.txt | 12 | ||||
-rw-r--r-- | npc/007-1/_mobs.txt | 14 | ||||
-rw-r--r-- | npc/007-1/_warps.txt | 5 | ||||
-rw-r--r-- | npc/007-1/caelum.txt | 171 | ||||
-rw-r--r-- | npc/007-1/dracoula.txt | 160 | ||||
-rw-r--r-- | npc/007-1/naem.txt | 66 | ||||
-rw-r--r-- | npc/007-1/pylon.txt | 174 | ||||
-rw-r--r-- | npc/007-1/torches.txt | 153 | ||||
-rw-r--r-- | npc/007-1/treasure.txt | 86 | ||||
-rw-r--r-- | npc/007-1/tycoon.txt | 382 | ||||
-rw-r--r-- | npc/007-1/zarkor.txt | 228 |
11 files changed, 1451 insertions, 0 deletions
diff --git a/npc/007-1/_import.txt b/npc/007-1/_import.txt new file mode 100644 index 0000000..bbbfd86 --- /dev/null +++ b/npc/007-1/_import.txt @@ -0,0 +1,12 @@ +// Map 007-1: Tulimshar Mining Camp +// 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/caelum.txt", +"npc/007-1/dracoula.txt", +"npc/007-1/naem.txt", +"npc/007-1/pylon.txt", +"npc/007-1/torches.txt", +"npc/007-1/treasure.txt", +"npc/007-1/tycoon.txt", +"npc/007-1/zarkor.txt", diff --git a/npc/007-1/_mobs.txt b/npc/007-1/_mobs.txt new file mode 100644 index 0000000..c0fe019 --- /dev/null +++ b/npc/007-1/_mobs.txt @@ -0,0 +1,14 @@ +// 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,140,101,43,90 monster Cave Maggot 1027,45,35000,300000,Tycoon::OnKillCaveMaggot +007-1,129,50,14,14 monster Black Scorpion 1074,5,32000,210000,Tycoon::OnKillBlackScorpion +007-1,71,61,20,18 monster Ratto 1005,5,35000,220000,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,11,35000,120000,Tycoon::OnKillRedScorpion +007-1,39,125,7,6 monster Cave Maggot 1027,5,35000,270000,Tycoon::OnKillCaveMaggot +007-1,89,72,75,57 monster Cave Bat 1039,9,35000,240000 +007-1,117,94,10,7 monster Black Scorpion 1074,1,35000,220000,Tycoon::OnKillBlackScorpion +007-1,93,110,9,9 monster Cave Maggot 1027,8,35000,300000,Tycoon::OnKillCaveMaggot +007-1,101,141,76,47 monster Night Scorpion 1077,1,3600000,1800000 +007-1,0,0,0,0 monster Ruby Bif 1099,9,35000,300000 diff --git a/npc/007-1/_warps.txt b/npc/007-1/_warps.txt new file mode 100644 index 0000000..2aebed2 --- /dev/null +++ b/npc/007-1/_warps.txt @@ -0,0 +1,5 @@ +// 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,56,37,0 warp #007-1_56_37 0,0,004-1,39,110 +007-1,90,52,0 warp #007-1_90_52 0,0,004-1,98,115 +007-1,99,190,0 warp #007-1_99_190 1,0,007-2,64,66 diff --git a/npc/007-1/caelum.txt b/npc/007-1/caelum.txt new file mode 100644 index 0000000..4cc3dda --- /dev/null +++ b/npc/007-1/caelum.txt @@ -0,0 +1,171 @@ +// 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,{ + // User is behind the wall, do nothing + if (isin("007-1", 142, 43, 3)) + end; + + .@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(RedScorpionStinger), getitemlink(RedScorpionStinger)); + 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(RedScorpionStinger) < 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(RedScorpionStinger, 2); + delitem(BugLeg, 8); + delitem(BatTeeth, 10); + delitem(CactusDrink, 10); + delitem(MaggotSlime, 20); + delitem(ScorpionClaw, 5); + + getitem(MinerGloves, 1); + getexp(2855, 43); + 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."); + if (getq(MineQuest_Pickaxe) < 2) { + next; + select + l("Okay, bye."), + l("Can I become a miner?"); + mes ""; + if (@menu == 2) { + compareandsetq MineQuest_Pickaxe, 0, 1; + mesn; + mesq l("Uh, you should ask %s, he is the miners leader.", b(l("Tycoon"))); + next; + } + } + 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(.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 0000000..323fd78 --- /dev/null +++ b/npc/007-1/dracoula.txt @@ -0,0 +1,160 @@ +// 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 is to scare other 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 + 600); // 10*20 = 200 base (300% 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 + 220); // 10*11 = 110 base (200% 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 %s.", b(l("Tycoon"))); + next; + mesn; + mesq l("He is the Miners leader."); + if (getq(MineQuest_Dracoula)) { + compareandsetq MineQuest_Pickaxe, 0, 1; + } else { + next; + mesn; + mesq l("I can vouch for you, but only if you help me first!"); + } + next; + goto L_Menu; + +L_Close: + closedialog; + goodbye; + close; + +OnInit: + .@npcId = getnpcid(.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/naem.txt b/npc/007-1/naem.txt new file mode 100644 index 0000000..4a7414b --- /dev/null +++ b/npc/007-1/naem.txt @@ -0,0 +1,66 @@ +// TMW2 Script +// Author: +// Jesusalva +// Description: +// Naem is... I'm not sure. + +007-1,180,46,2 script Naem NPC_PLAYER,0,0,{ + .@q = getq(MineQuest_Naem); + mesn; + mesq l("My name is Naem and I guard the tunnels in this direction. You shall not pass. Now leave."); + if (BaseLevel < 28) + close; + if (.@q == 2) { + if (!checkbound(IcedBottle)) close; + next; + inventoryplace MinerTankTop, 1; + delitem IcedBottle, 1; + getitem MinerTankTop, 1; + getexp 440, 0; + setq MineQuest_Naem, 3; + mesn; + mesq l("Oh, %s, thanks! The tunnels behind me are very hot, this will help if I have to go inside them.", getitemlink(IcedBottle)); + next; + mesn; + mesq l("You can have this %s as a token of gratitude. But no, you cannot pass, so keep going!", getitemlink(MinerTankTop)); + close; + } + if (.@q >= 3) + close; + next; + mesn; + mesq l("Actually, you look strong...ish. Still, maybe you can help me."); + next; + mesn; + mesq l("I need groceries. %d %s, %d %s, %d %s, %d %s and %d %s. Give it to my wife, Silvia.", + 7, getitemlink(Aquada), + 6, getitemlink(PiouLegs), + 3, getitemlink(Cheese), + 3, getitemlink(HalfCroconut), + 1, getitemlink(PurpleBlobime)); + next; + mesn; + mesq l("You can collect croconuts by killing any tree with it. Then you can break it in half from the inventory screen."); + compareandsetq MineQuest_Naem, 0, 1; + close; + +// TODO: If you walk past him having the requisite, warp +OnTouch: + npctalk3 l("Hey, I said NO ENTRY! Get moving!"); + end; + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, MinerHat); + setunitdata(.@npcId, UDT_HEADMIDDLE, MinerTankTop); + 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/pylon.txt b/npc/007-1/pylon.txt new file mode 100644 index 0000000..ed2f2c0 --- /dev/null +++ b/npc/007-1/pylon.txt @@ -0,0 +1,174 @@ +// 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?")), + rif(countitem(SunnyCrystal) >= 1 && Zeny >= 1000, l("And what's about Sunny Crystal?")), + 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: + goto L_Savior; + break; + case 10: + 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=rand2(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=rand2(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_Savior: + // FIXME This is a dirt hack. TODO There should be no such checks + if (checkbound(SunnyCrystal)) { + mesn; + mesc l("Not every @@ with you belongs to you.", getitemlink(SunnyCrystal)), 1; + close; + } + mesn; + mesq l("I can make @@ from @@, but this costs @@ GP.", getitemlink(MylarinDust), getitemlink(SunnyCrystal), 1000); + next; + mesn; + mesc l("WARNING, THIS IS A RARE ITEM AND THIS OPERATION CANNOT BE REVERTED!!"); + next; + mesn; + mesc l("Are you sure you want to smash it?"), 1; + next; + if (askyesno() == ASK_YES) { + Zeny-=1000; + delitem SunnyCrystal, 1; + getitem MylarinDust, 3; + mesc l("SMASH! And it is now only dust..."), 3; + next; + } + goto L_Menu; + +L_Close: + close; + +OnInit: + .@npcId = getnpcid(.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 0000000..5dd82e2 --- /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 ($@GM_OVERRIDE) + 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/treasure.txt b/npc/007-1/treasure.txt new file mode 100644 index 0000000..9c887ed --- /dev/null +++ b/npc/007-1/treasure.txt @@ -0,0 +1,86 @@ +// TMW2 scripts. +// Author: +// Jesusalva +// Description: +// Fishing and Treasure Box + +007-1,155,163,0 script #fishing_00710 NPC_WATER_SPLASH,{ + + .@regen_time=200; + fishing(2, CommonCarp, RustyKnife, + ScorpionStinger, FatesPotion, GrassCarp); // begin or continue fishing (AlchemyBlueprintA, EquipmentBlueprintA) TODO + close; + +OnInit: + .sex = G_OTHER; + .distance = 4; + .cooldown = 200; + .bp_chance = 2; + end; +} + +/* +007-1,x,y,0 duplicate(#fishing_00710) #fishing_00711 NPC_WATER_SPLASH +007-1,x,y,0 duplicate(#fishing_00710) #fishing_00712 NPC_WATER_SPLASH +*/ + +// Animation code by Evol Team +// 4144, gumi, Hal9000, Reid +// (Random) Treasure Chest +// Authored by Jesusalva +// Regenerates every 6 hours +007-1,0,0,0 script #chest_00710 NPC_CHEST,{ + + if (!.busy && !.empty) { + TreasureBox(); + + specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing + .dir = .dir == 0 ? 2 : 6; // closed ? opening : closing + .busy = true; // lock until available again + initnpctimer; + } else if (!.busy) { + mesc l("Someone looted this treasure box already..."); + } else { + end; + } + close; + +OnTimer160: + .dir = .dir == 6 ? 0 : 4; // closing ? closed : open + end; + +OnTimer500: + .busy = false; // unlock + if (.dir == 0 || .dir == 4) + stopnpctimer; // stop here if the chest is closed + end; + +OnInit: + .busy = false; + .distance = 2; + .empty = false; + +OnClock0156: +OnClock0756: +OnClock1356: +OnClock1956: + // Try to warp randomly to a walkable spot, up to 20 attempts + // Otherwise, it'll stay where it already is (but will close and refill). + .@e=0; .@x=0; .@y=0; + while (!checkcell(.map$, .@x, .@y, cell_chkpass)) + { + if (.@e == 20) { + .@x=.x; + .@y=.y; + break; + } + // Remember the +20 -20 margin adjustment + .@x = rand(20, 185); + .@y = rand(20, 180); + ++.@e; + } + .busy=false; + .empty=false; + movenpc .name$, .@x, .@y, 0; + end; +} diff --git a/npc/007-1/tycoon.txt b/npc/007-1/tycoon.txt new file mode 100644 index 0000000..f5a3249 --- /dev/null +++ b/npc/007-1/tycoon.txt @@ -0,0 +1,382 @@ +// TMW2 scripts. +// TMW2 Authors: +// Saulc +// Jesusalva +// Description: +// Miner leader asks you to purge mine from monsters. +// Variable: +// MineQuest_Tycoon +// Reference: +// npc name from https://www.idleminertycoon.com/ +// Steps: +// 0: Not started +// +// Experience Table +// 15 16 17 18 19 20 +// 830,970,1120,1260,1420,1620, +// 1860,1990,2240,2504,2950,3426,3934,4474,6889,7995, +// 21 22 23 24 25 26 27 28 29 30 +// +// +// 1: Took ratto Quest 10 kills (lvl 15) +// 2: Completed ratto Quest - 50 EXP 50 GP +// 3: Awaiting next quest +// +// 4: Took Cave Maggot Quest 25 kills (lvl 19) +// 5: Completed Cave Maggot Quest - 200 EXP 150 GP + Miner Knife +// 6: Awaiting next quest +// +// 7: Took Cave Snake Quest 45 kills (lvl 24) +// 8: Completed Cave Snake Quest - 1000 EXP 350 GP +// 9: Awaiting next quest +// +// 10: Took Red Scorpion Quest 100 kills (lvl 29) +// 11: Completed Red Scorpion Quest - Miner Hat +// 12: Awaiting next quest +// +// 13: Took Black Scorpion Quest 200 kills (lvl 34) +// 14: Completed Black Scorpion Quest - 12 000 EXP 5 000 GP +// 15: Finished all trainment + +007-1,71,65,0 script Tycoon NPC_PLAYER,{ + .@q=getq(MineQuest_Tycoon); + + mesn; + mesq lg("Hello my friend!"); + next; + mesq lg("Some of my miners friends died in this mine, because there are plenty of dangerous monsters."); + next; + mesq lg("Would you like to help us? Maybe you just need some information."); + next; + goto L_Menu; + +L_PreMenu: + mesn; + mesq l("I need your help dude!"); + next; + goto L_Menu; + +L_Menu: + mesn strcharinfo(0); + menu + rif(getq(MineQuest_Tycoon) < 15, l("I am a brave adventurer! How can I help you?")), L_Purge, + rif(getq(MineQuest_Pickaxe) < 2, l("Can I become a miner?")), L_Miner, + l("What does miners do in cave?"), L_CaveMiner, + l("Can you give me a tip?"), L_Tip, + l("Are you a terranite?"), L_Terranite, + l("I don't care about dirty miners problem."), L_Close, + l("No, thanks, it's not my job!"), L_Close; + +L_Purge: + .@q=getq(MineQuest_Tycoon); + mes ""; + if (BaseLevel < 15) goto L_NoLevel; + .@k=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + + mesn; + if (.@q == 0) { + mesq l("Ok, you look strong enough. Now, let me think on an easy task for you..."); + next; + mesq l("Ah! I know. Kill 10 @@. They usually are near the mine's inn.", getmonsterlink(Ratto)); + setq MineQuest_Tycoon, 1, 0; + } else if (.@q == 1) { + mesq l("You are killing @@/10 @@. They usually are near the mine's Inn.", .@k, getmonsterlink(Ratto)); + } else if (.@q == 2) { + mesq l("Good job! Here is your reward!"); + getexp 300, 0; // 10% of level requeriment (r7.4) (53->83->300) + set Zeny, Zeny + 50; + setq MineQuest_Tycoon, 3, 0; + } else if (.@q == 3 && BaseLevel >= 19) { + mesq l("Less rattos means more food. So, this time the monsters will be a little stronger."); + next; + mesq l("Ok, now I want you to purge the cave from maggots. Kill 25 @@. They keep respawning and annoy miners team.", getmonsterlink(CaveMaggot)); + setq MineQuest_Tycoon, 4, 0; + } else if (.@q == 3 && BaseLevel < 19) { + mesq l("You are too weak for my task, please come back later with some levels."); + } else if (.@q == 4) { + mesq l("You are killing @@/25 @@ at the cave. Good progress!", getmonsterlink(CaveMaggot)); + } else if (.@q == 5) { + mesq l("Perfect! Here is your reward!"); + getexp 800, 0; // (r7.5 158→800) + set Zeny, Zeny + 150; + getitem MinerKnife, 1; + setq MineQuest_Tycoon, 6, 0; + } else if (.@q == 6 && BaseLevel >= 24) { + mesq l("That was fast. Do not forget to sell their... parts... for some extra cash."); + next; + mesq l("Now, please kill 50 @@, Try to collect some lamps in the same time, they could be useful later.", getmonsterlink(CaveSnake)); + setq MineQuest_Tycoon, 7, 0; + } else if (.@q == 6 && BaseLevel < 24) { + mesq l("You are too weak for my task, please come back later with some levels."); + } else if (.@q == 7) { + mesq l("You are killing @@/50 @@ at the cave.", .@k, getmonsterlink(CaveSnake)); + } else if (.@q == 8) { + mesq l("I hope you got a Jean Shorts, but that depends on luck. Anyway, here is your reward."); + getexp 1150, 0; // (r7.5 1050 → 1150) + set Zeny, Zeny + 350; + setq MineQuest_Tycoon, 9, 0; + } else if (.@q == 9 && BaseLevel >= 29) { + mesq l("If you want to be a real miner friend, do this hard task for me. I will reward you with a @@.", getitemlink(MinerHat)); + next; + mesq l("I'll ask you to kill 100 @@. This will prove your worth. Good luck.", getmonsterlink(RedScorpion)); + setq MineQuest_Tycoon, 10, 0; + } else if (.@q == 9 && BaseLevel < 29) { + mesq l("You are too weak for my task, please come back later with some levels."); + } else if (.@q == 10) { + mesq l("You are killing @@/100 @@. It's still in progress.", .@k, getmonsterlink(RedScorpion)); + } else if (.@q == 11) { + mesq l("Congratulations! Here is your reward, a @@!", getitemlink(MinerHat)); + mesq l("Mining opearations advance steadly day by day with your help, thanks! Maybe one day, we find a Mana Stone here!"); + inventoryplace MinerHat, 1; + getitem MinerHat, 1; + getexp 3800, 0; // r7.5 1365→3800 + setq MineQuest_Tycoon, 12, 0; + } else if (.@q == 12 && BaseLevel >= 40) { + mesq l("The last task I could give you is to exterminate 200 @@. They actually stop miners progress on the mine.", getmonsterlink(BlackScorpion)); + if (BaseLevel < 45) + mesc l("WARNING: This is a level 45 quest!"), 1; + setq MineQuest_Tycoon, 13, 0; + } else if (.@q == 12 && BaseLevel < 40) { + mesq l("You are too weak for my last task, please come back later with some levels."); + } else if (.@q == 13) { + mesq l("You are killing @@/200 @@ at the cave.", .@k, getmonsterlink(BlackScorpion)); + if (BaseLevel < 45) + mesc l("WARNING: This is a level 45 quest!"), 1; + } else if (.@q == 14) { + mesq l("Wow! You did it! I do not think anyone else could have done that."); + mesq l("Here, take this @@ - you deserve it! And here is some gold and experience.", getitemlink(PolishedRuby)); + inventoryplace PolishedRuby, 1; + getitem PolishedRuby, 1; + getexp 55000, 0; // About 94% from needed EXP to level up (you won't be level 45 when you finish) + set Zeny, Zeny + 5000; + setq MineQuest_Tycoon, 15, 0; + } + close; + +L_NoLevel: + mesn; + mesq l("Ah, yes... You see, there is just no task I can give to you right now. You are too weak to fight these monsters."); + next; + mesn; + mesq l("come back stronger, and I will give you a task."); + next; + goto L_Close; + + + +L_Miner: + if (!getq(MineQuest_Pickaxe)) { + mesn; + mesq l("Sorry pal, but only if another miner vouches for you."); + next; + if (getq(MineQuest_Tycoon) >= 9) { + mesn; + mesq l("I'm not neutral, so my vouch have no effect."); + next; + } + tutmes l("You should do the other miners quest first! Some, however, are harder than others. This will unlock the %s, an important item to advance as a crafter.", getitemlink(Pickaxe)); + goto L_Menu; + } + + // Configure Price + .@price=800; + if (getq(MineQuest_Tycoon) >= 9) + .@price-=200; + if (getq(MineQuest_Tycoon) >= 12) + .@price-=100; + if (getq(MineQuest_Tycoon) == 15) + .@price-=300; + if (getq(MineQuest_Caelum) >= 2) + .@price-=150; + + mes ""; + mesn; + mesq l("Well, I'm the miner leader, indeed. A miner need to have the full set."); + next; + mesn; + mesq l("The uniform would be: @@, @@, @@ and @@", getitemlink(LeatherShirt), getitemlink(MinerHat), getitemlink(MinerGloves), getitemlink(Pickaxe)); + mesc l("But you can also wear a %s instead, no problem.", getitemlink(MinerTankTop)); + next; + mesn; + mesq l("I can sell you the Pickaxe for @@ GP if you have and @@ the remaining equipment.", .@price, b(l("equip"))); + if (Zeny < .@price) + close; + + // Allow you to change + enable_items(); + next; + disable_items(); + // If you're in proper uniform, DO NOT ASK FOR CONFIRMATION + if ( + getequipid(EQI_HEAD_TOP) == MinerHat && + (getequipid(EQI_HEAD_MID) == LeatherShirt || + getequipid(EQI_HEAD_MID) == MinerTankTop) && + getequipid(EQI_GARMENT) == MinerGloves && + Zeny >= .@price) { + + inventoryplace Pickaxe, 1; + Zeny-=.@price; + getitem Pickaxe, 1; + setq MineQuest_Pickaxe, 2; + mesn; + mesq l("Good. You look like a real miner! Take this @@ and go mine bifs!", getitemlink(Pickaxe)); + if (TUTORIAL) { + next; + mesc l("@@ is a two-handed weapon with very low damage and attack speed.", getitemlink(Pickaxe)); + mesc l("While it may not be suitable for fighting, by using it against Bifs and other mineral formations, you'll be able to get more ore."); + next; + mesc l("You may even obtain ores which you wouldn't otherwise obtain normally, and the drop rate is fixed."); + mesc l("A Miner is a must-have for a craftsman/craftswoman, as they are in constant need of ores and coal."); + } + next; + } + goto L_Menu; + + +L_CaveMiner: + mes ""; + mesn; + mesq l("Tulimshar miners mainly try to obtain gems."); + next; + mesq l("In this cave we can easily find Coal, Iron ore, and sometimes @@.", getitemlink(Ruby)); // maybe add link for coal and iron ? + next; + goto L_Menu; + +L_Tip: + mes ""; + mesn; + mesq l("If you fight Black scorpion or others dangerous monster you should use the 'hit and run' tactic."); + next; + mesn; + mesq l("To do this you need to disable auto move to target in 'yellow bar'."); + next; + mesn; + mesq l("To open yellow Bar you need to right click on your health bar and active status bar, also called yellow bar. Or you can press '8' on numeric keypad."); + next; + mesn; + mesq l("Now you need to fight monster with the maximum range, you can to do this do these steps in order: lock enemy, Attack, hit, move backwards of one tile, hit, ETC."); + next; + mesn; + mesq l("With this tip you will be able to fight strong monsters. It's on Saul's Strategy Guide Against Archwizards."); + next; + goto L_Menu; + +L_Terranite: + mes ""; + mesn; + mesq l("Haha, no, I'm not! But we found traces of them."); + next; + mesn; + mesq l("Terranite probably mined part of this mine long time ago."); + next; + mesn; + mesq l("That can explain why we have difficulties to find rare gems here. They probably were already extracted."); + next; + goto L_Menu; + + +L_Close: + close; + + + function tycoon_add_kills + { + .@qp=getq(MineQuest_Tycoon); + .@kp=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + setq MineQuest_Tycoon, .@qp, .@kp+1; + //message strcharinfo(0), l("Set status @@ with @@ kills", .@qp, .@kp); + } + + function tycoon_max_kills + { + .@qp=getq(MineQuest_Tycoon); + setq MineQuest_Tycoon, .@qp+1, 0; + //message strcharinfo(0), l("End status @@", .@qp); + } + +OnKillRatto: + .@q=getq(MineQuest_Tycoon); + .@k=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + if (.@q == 1) { + if (.@k+1 >= 10) { + tycoon_max_kills(); + message strcharinfo(0), l("All rattos are dead! Go back to Tycoon."); + } else { + tycoon_add_kills(); + message strcharinfo(0), l("@@/10 Rattos", .@k+1); + } + } + fix_mobkill(Ratto); + end; + +OnKillCaveMaggot: + .@q=getq(MineQuest_Tycoon); + .@k=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + if (.@q == 4) { + if (.@k+1 >= 25) { + tycoon_max_kills(); + message strcharinfo(0), l("All cave maggots are dead! Go back to Tycoon."); + } else { + tycoon_add_kills(); + message strcharinfo(0), l("@@/25 Cave Maggots", .@k+1); + } + } + fix_mobkill(CaveMaggot); + end; +OnKillCaveSnake: + .@q=getq(MineQuest_Tycoon); + .@k=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + if (.@q == 7) { + if (.@k+1 >= 50) { + tycoon_max_kills(); + message strcharinfo(0), l("All cave snakes are dead! Go back to Tycoon."); + } else { + tycoon_add_kills(); + message strcharinfo(0), l("@@/50 Cave Snakes", .@k+1); + } + } + fix_mobkill(CaveSnake); + end; +OnKillRedScorpion: + .@q=getq(MineQuest_Tycoon); + .@k=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + if (.@q == 10) { + if (.@k+1 >= 100) { + tycoon_max_kills(); + message strcharinfo(0), l("All red scorpions are dead! Go back to Tycoon."); + } else { + tycoon_add_kills(); + message strcharinfo(0), l("@@/100 Red Scorpions", .@k+1); + } + } + fix_mobkill(RedScorpion); + end; +OnKillBlackScorpion: + .@q=getq(MineQuest_Tycoon); + .@k=getq2(MineQuest_Tycoon); // Get number of kills (via getq2) + if (.@q == 13) { + if (.@k+1 >= 200) { + tycoon_max_kills(); + message strcharinfo(0), l("All black scorpions are dead! Go back to Tycoon."); + } else { + tycoon_add_kills(); + message strcharinfo(0), l("@@/200 Black Scorpions", .@k+1); + } + } + fix_mobkill(BlackScorpion); + end; + +OnInit: + .@npcId = getnpcid(.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, 19); + setunitdata(.@npcId, UDT_HAIRCOLOR, 8); + + .sex = G_MALE; + .distance = 4; + + end; +} diff --git a/npc/007-1/zarkor.txt b/npc/007-1/zarkor.txt new file mode 100644 index 0000000..2eba368 --- /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 l("Stay out of harm way. Nothing to see here. Stay away, pathetically weak %s.", get_race()); + 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; + +} |