public async Task <HookResult> ElenKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword != "about_skill" || npc.HasSkill(SkillId.Refining)) { return(HookResult.Continue); } if (!npc.QuestActive(this.Id)) { npc.Msg("Did my grandpa send you over this way?<br/>Hehe.... Oh, nothing.<br/>Here, take this..."); npc.Msg("Are you interested in refining by any chance?<br/>Refining is the first step in becoming a blacksmith..."); npc.Msg("You can use ore in its raw form.<br/>You have to melt it to extract the pure metal from it.<br/>You can simply assume that you can use the ore as it is."); npc.Msg("We've been looking for more ore anyway,<br/>so why don't you go to Barri Dungeon and mine some ore for us?<br/>Bring some ore and I'll teach you how to refine metal. Tee hee...<br/>Of course, if you are going to mine, you will need at least a pickaxe."); await npc.Select(); npc.StartQuest(this.Id); npc.Close(); } else { npc.Msg("Did you forget what I asked you?"); npc.Msg("You can find ore inside Barri Dungeon over there.<br/>Of course, you can't mine with bare hands. You will need a pickaxe for that."); } return(HookResult.End); }
public async Task <HookResult> KeywordsHook(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword != "about_skill" || npc.HasSkill(SkillId.Weaving)) { return(HookResult.Continue); } if (!npc.QuestActive(this.Id)) { npc.Msg("Have you heard of the Weaving skill?<br/>It is a skill of spinning yarn from natural materials and making fabric."); npc.Msg("Do you want to learn the Weaving skill?<br/>Actually, I'm out of thick yarn and can't meet all the orders for fabric...<br/>If you get me some wool, I'll teach you the Weaving skill in return.<br/>An owl will deliver you a note on how to find wool if you wait outside."); await npc.Select(); npc.StartQuest(this.Id); npc.Close(); } else { // Unofficial npc.Msg("If you get me some wool, I'll teach you the Weaving skill in return."); } return(HookResult.End); }
public async Task<HookResult> ElenKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword != "about_skill" || npc.HasSkill(SkillId.Refining)) return HookResult.Continue; if (!npc.QuestActive(this.Id)) { npc.Msg("Did my grandpa send you over this way?<br/>Hehe.... Oh, nothing.<br/>Here, take this..."); npc.Msg("Are you interested in refining by any chance?<br/>Refining is the first step in becoming a blacksmith..."); npc.Msg("You can use ore in its raw form.<br/>You have to melt it to extract the pure metal from it.<br/>You can simply assume that you can use the ore as it is."); npc.Msg("We've been looking for more ore anyway,<br/>so why don't you go to Barri Dungeon and mine some ore for us?<br/>Bring some ore and I'll teach you how to refine metal. Tee hee...<br/>Of course, if you are going to mine, you will need at least a pickaxe."); await npc.Select(); npc.StartQuest(this.Id); npc.Close(); } else { npc.Msg("Did you forget what I asked you?"); npc.Msg("You can find ore inside Barri Dungeon over there.<br/>Of course, you can't mine with bare hands. You will need a pickaxe for that."); } return HookResult.End; }
public async Task <HookResult> TarlachBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_bone_of_glasgavelen" && npc.HasKeyword("g1_28")) { if (!npc.QuestActive(NextQuestId)) { npc.StartQuest(NextQuestId); // Obtain the Magic Powder of Preservation npc.GiveWarpScroll(63009, "Fiodth_Dungeon"); npc.Msg(L("...!<p/>That's it! In order to revive Glas Ghaibhleann,<br/>his bones must be exacavated and re-assembled.<br/>Any missing bones must be replaced with Adamantium.")); npc.Msg(L("But Adamantium is difficult to shape. It must<br/>be melted at very high temperatures first. And<br/>there's a special ingredient that must be applied to the bone.")); npc.Msg(L("It won't be enough to simply destroy the bones before it's<br/>completed. Once the Adamantium hardens, you can't destroy it. I have no<br/>doubt the Formors have already gathered all the bones<br/>and prepared their magical reagents, too.")); npc.Msg(L("It's only a matter of time before the Fomors invade Erinn...")); npc.Msg(L("How do I know all this? I learned it<br/>in the land of Fomors, Tir Na Nog.<br/>Tir Na Nog is a reflection of Erinn...or perhaps it's the other way around?<br/>At any rate, the worlds are quite similar.")); npc.Msg(L("Perhaps it would be better for you to see it first hand.<br/>Can you do me a favor?")); npc.Msg(L("These glasses carry the memories of my time there."), npc.Image("g1_ch25_glasses")); npc.Msg(L("I can't say for certain if the memories<br/>are intact, but if you wish to see what I saw through<br/>these glasses, you'll need them.<br/>Please find me some Magic Powder of Preservation."), npc.Image("g1_ch25_glasses")); npc.Msg(L("The powder will prevent the glasses from breaking further.<br/>This will also sustain the memories contained within,<br/>If you get me the powder, I'll preserve the glasses.")); npc.Msg(L("You can find Magic Powder of Preservation<br/>deep inside Fiodh Dungeon.")); } else { npc.Msg(L("You can find Magic Powder of Preservation<br/>deep inside Fiodh Dungeon.<br/>If you get me the powder, I'll preserve the glasses.")); } return(HookResult.Break); } return(HookResult.Continue); }
public async Task Class2_3(NpcScript npc) { npc.Msg(L("Hmm... Is it already our last class?<br/>I'll explain today to you why the Defense skill is so important.")); npc.Msg(L("You've probably seen a stat called Defense Rate.<br/>It's particularly difficult to upgrade this stat.")); npc.Msg(L("Clothes can add only 1 or 2 defense points at the best.<br/>What you can do is to train yourself hard enough to improve your critical defense.")); npc.Msg(L("You may not agree that the Defense Rate is so critical in the beginning, but it will become more and more important for your survival.")); npc.Msg(L("<image name='whitespider'/>Here's the assignment for the class.<br/>Go to Alby Dungeon and defeat 5 spiders.<br/>Dismissed!")); npc.StartQuest(200041); // Basic Combat 2 Mission }
public async Task<HookResult> LearnDefense(NpcScript npc) { npc.Msg("It seems you are seeking a warrior's advice from me.<br/>Let's see, first, just lunging at your enemy is not everything.<br/>Defend your opponent's attack to break its flow<br/>and win a chance to strike back. It's really a critical part in a fight. <p/>That's the Defense skill.<br/>Hmm... If you haven't learned it yet, can you do me a favor?<br/>I'll let you know what it is so you can practice by yourself."); npc.Notice("Received Defense Guidebook from Ranald."); if(!npc.QuestActive(this.Id)) npc.StartQuest(this.Id); npc.CompleteQuest(this.Id); npc.Msg("How to use the Defense skill is described in this book.<br/>Read it well and practice hard. That's the only efficient way you can defend yourself."); return HookResult.Break; }
public async Task <HookResult> LearnDefense(NpcScript npc) { npc.Msg("It seems you are seeking a warrior's advice from me.<br/>Let's see, first, just lunging at your enemy is not everything.<br/>Defend your opponent's attack to break its flow<br/>and win a chance to strike back. It's really a critical part in a fight. <p/>That's the Defense skill.<br/>Hmm... If you haven't learned it yet, can you do me a favor?<br/>I'll let you know what it is so you can practice by yourself."); npc.Notice("Received Defense Guidebook from Ranald."); if (!npc.QuestActive(this.Id)) { npc.StartQuest(this.Id); } npc.CompleteQuest(this.Id); npc.Msg("How to use the Defense skill is described in this book.<br/>Read it well and practice hard. That's the only efficient way you can defend yourself."); return(HookResult.Break); }
public async Task Class1_3(NpcScript npc) { npc.Msg(L("Then let's begin the class. I need you to sit up and focus.<br/>HP is the basic parameter.<br/>What happens when you run out of HP?<br/>You lose consciousness. But don't worry. You are not dead yet...")); npc.Msg(L("<image name='HP'/>Just like Stamina, the HP bar also has a black region that cannot be recovered by resting.<br/>That represents how serious your wound is.")); npc.Msg(L("<image name='HP'/>Some enemies may injure you with their attacks.<br/>Bats and Mimics especially can cause injuries very easily. You need to be careful when you meet them.<br/>So, what if you ignored the wounds and fought on?")); npc.Msg(L("<image name='Die'/>That's what happens. You would even lose some EXP. It hurts a lot.")); npc.Msg(L("Wounds can be cured by simply using the Resting skill or the First Aid skill.<br/>In other words, make sure to take a rest whenever you get wounded.")); npc.Msg(L("But resting too much in a dungeon may backfire.<br/>What do you think will happen if you just take a quick break after a battle without even checking your HP bar and face another monster right away?")); npc.Msg(L("<image name='Die'/>Again, this would happen.")); npc.Msg(L("You can't cure your wounds by resting in a dungeon. Probably because of the cold temperature inside.<br/>But a campfire will help you recover. Someone who knows how to start a campfire may be good company for you.")); npc.Msg(L("Now, like I said, I'm giving you homework.<br/>Gather nails that are dangerously protruding from objects around the town.<br/>You must have seen many people hitting a variety of objects to get small gems.")); npc.Msg(L("Anyone learning how to fight should first think about how to serve others.<br/>There's no way you can follow them one by one and stop them from doing stupid things,<br/>but you can help them by removing nails from those objects they hit.<br/>At least, they won't get hurt by them. Just hit the objects a few times and get the nails from them.")); npc.Msg(L("Get me 10 nails and you're done for the day.<br/>Cheating is not allowed. Nails from other people don't count.<br/>Get them on your own.<br/>Now, go!")); npc.StartQuest(200040); // Basic Combat 1 Mission }
public async Task<HookResult> GoroBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_voucher_of_priest") { if (npc.QuestActive(this.Id)) { npc.Msg(L("If you get Goro's Ring back, I'll read it to you.")); } else if (npc.HasItem(FomorMedal)) { npc.RemoveKeyword("g1_voucher_of_priest"); npc.RemoveKeyword("g1_12"); npc.GiveKeyword("g1_13"); npc.StartQuest(this.Id); npc.Msg(L("Priest's Token...? This...?<br/>This...is an amulet that belongs to a high ranking Fomor...let's see...<br/>Just what I'd thought...'Dul Brau Dairam Shanon.' It surely belongs to a Fomor. Heh."), npc.Image("g1_ch11_12_fomormedal02")); npc.Msg(L("It's been a while since I came across such Fomor writings. Heheh.")); npc.Msg(L("I learned the human language as a child<br/>so I'm a little rusty...<br/>but since Goro is smart, this is no problem.")); npc.Msg(L("As a sign of respect for your courage and<br/>since I'm such a nice goblin,<br/>I'll read it to you...")); npc.Msg(L("If you help Goro that is. Heheh.")); npc.Msg(L("I've lost a ring in Ciar Dungeon, if you get Goro's Ring back, I'll read it to you.")); } else { npc.Msg(L("Priest's Token...?")); } return HookResult.Break; } else if (keyword == "g1_dulbrau2") { npc.Msg(L("...Oh... that's what it means?<br/>Wow...I'm amazed.")); npc.Msg(L("Ha...! You truly live up to the hype as someone who's obtained the Fomor Medal...<br/>To be honest, because I was raised in the Human world since I was young,<br/>my Fomor language skills aren't that good...hehe...<br/>I hope you understand...hehe...")); npc.Msg(L("...In order to make up for this embarrassment,<br/>I'll tell you who can decipher the Fomor writing.")); npc.Msg(L("...<p/>...<p/>I'm sorry, but I can't seem to remember the name.")); npc.Msg(L("...Wait, please don't get angry now!")); npc.Msg(L("Um... right!<br/>Goro had heard this story once...The Black Roses of the dungeons,<br/>known as Succubus to Humans,<br/>said there was someone who had betrayed them...and is now living in Dunbarton...")); npc.Msg(L("They said they were waiting to get revenge on that person if they ever ran into her...<br/>Well, I mean it's just a rumor...but still... Hehe...")); npc.Msg(L("The Succubus is a Fomor also...<br/>so they might know more about the Fomor language...or that world...no?<br/>But it won't be easy to find them...ha...haha...")); return HookResult.Break; } return HookResult.Continue; }
public async Task <HookResult> GoroBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_voucher_of_priest") { if (npc.QuestActive(this.Id)) { npc.Msg(L("If you get Goro's Ring back, I'll read it to you.")); } else if (npc.HasItem(FomorMedal)) { npc.RemoveKeyword("g1_voucher_of_priest"); npc.RemoveKeyword("g1_12"); npc.GiveKeyword("g1_13"); npc.StartQuest(this.Id); npc.Msg(L("Priest's Token...? This...?<br/>This...is an amulet that belongs to a high ranking Fomor...let's see...<br/>Just what I'd thought...'Dul Brau Dairam Shanon.' It surely belongs to a Fomor. Heh."), npc.Image("g1_ch11_12_fomormedal02")); npc.Msg(L("It's been a while since I came across such Fomor writings. Heheh.")); npc.Msg(L("I learned the human language as a child<br/>so I'm a little rusty...<br/>but since Goro is smart, this is no problem.")); npc.Msg(L("As a sign of respect for your courage and<br/>since I'm such a nice goblin,<br/>I'll read it to you...")); npc.Msg(L("If you help Goro that is. Heheh.")); npc.Msg(L("I've lost a ring in Ciar Dungeon, if you get Goro's Ring back, I'll read it to you.")); } else { npc.Msg(L("Priest's Token...?")); } return(HookResult.Break); } else if (keyword == "g1_dulbrau2") { npc.Msg(L("...Oh... that's what it means?<br/>Wow...I'm amazed.")); npc.Msg(L("Ha...! You truly live up to the hype as someone who's obtained the Fomor Medal...<br/>To be honest, because I was raised in the Human world since I was young,<br/>my Fomor language skills aren't that good...hehe...<br/>I hope you understand...hehe...")); npc.Msg(L("...In order to make up for this embarrassment,<br/>I'll tell you who can decipher the Fomor writing.")); npc.Msg(L("...<p/>...<p/>I'm sorry, but I can't seem to remember the name.")); npc.Msg(L("...Wait, please don't get angry now!")); npc.Msg(L("Um... right!<br/>Goro had heard this story once...The Black Roses of the dungeons,<br/>known as Succubus to Humans,<br/>said there was someone who had betrayed them...and is now living in Dunbarton...")); npc.Msg(L("They said they were waiting to get revenge on that person if they ever ran into her...<br/>Well, I mean it's just a rumor...but still... Hehe...")); npc.Msg(L("The Succubus is a Fomor also...<br/>so they might know more about the Fomor language...or that world...no?<br/>But it won't be easy to find them...ha...haha...")); return(HookResult.Break); } return(HookResult.Continue); }
public async Task Class3_5(NpcScript npc) { npc.Msg(L("OK, today is your last day.<br/>You've done very well so far.<br/>Take a look at the Quest Scroll I gave you.")); npc.Msg(L("Just do what it says.<br/>Take advantage of everything you've learned<br/>and make it to the end of Alby Dungeon and come back in one piece.")); npc.Msg(L("You don't seem too enthused...<br/>Either do it or not. It's totally up to you.<br/>If you think you can't do it, then you can give it up.")); npc.Msg(L("But if you're the same student with guts I saw before, this task should be a piece of cake, right?<br/>I'll wait for you here.")); npc.Msg(L("<image name='alby_dungeon01'/>Here's our last class.<br/>Since you have the final assignment, I'll tell you how to fight in a dungeon.")); npc.Msg(L("<br/>The key is to control your HP and Stamina.")); npc.Msg(L("<image name='HP'/>First is Life.<br/>Just using the Resting skill alone cannot recover your HP in dungeons.<br/>You must rest near a campfire.<br/>I think I told you that before. Do you still remember?")); npc.Msg(L("Do not let yourself be injured or surrounded by monsters. You should avoid a situation like that at all costs.<br/>You need to be much more careful in a dungeon than when you fight in the field outside.")); npc.Msg(L("Potions could be helpful,<br/>but they won't cure your wounds.<br/>In other words, when you're in a dungeon, your safety comes before defeating your opponent.")); npc.Msg(L("<image name='Stamina'/>Next is Stamina. It's not really different.<br/>The best way to recover your Stamina is by food.<br/>But it's not easy to get something to eat in a dungeon unless you pack it for yourself.<br/>That means you need to save your Stamina as much as possible.")); npc.Msg(L("Get rid of any unnecessary motions,<br/>and be efficient in every move you make.<br/>Don't forget.")); npc.Msg(L("And last,<br/>there are some books<br/>about dungeons and exploration.<br/>Read them. They can only help you.")); npc.Msg(L("All right, this is the end of Basic Combat.<br/>You've been a good student.<br/>Don't stop training. Become a great warrior.")); npc.Msg(L("When you're done with your homework, make sure you come back and let me know.<br/>I'll be all ears for your whining if you make it through Alby Dungeon, hahaha.<br/>")); npc.StartQuest(200028); // Basic Combat 3 Mission }
public async Task<HookResult> SeumasAfterIntro(NpcScript npc, params object[] args) { if (npc.QuestActive(this.Id, "talk_seumas")) { npc.CompleteQuest(this.Id); npc.StartQuest(210012); npc.GiveItem(FathersGift); npc.Notice(L("You have received Father's Gift from Seumas.")); npc.Msg(L("(He gasps for breath as he speaks.)<br/>Ah... I suppose you're the one Lassar mentioned...?<br/>You need the...book of Fomors...?")); npc.Msg(L("Not too long ago...I asked Lassar...<br/>to translate it<br/>but she said she couldn't do it...")); npc.Msg(L("I probably won't be able to figure it out myself anyway...")); npc.Msg(L("Could you do me a little favor... before I give it to you?<br/>I can't leave here right now,<br/>Please deliver this present to my son Sion in Bangor.")); return HookResult.Break; } return HookResult.Continue; }
public async Task <HookResult> SeumasAfterIntro(NpcScript npc, params object[] args) { if (npc.QuestActive(this.Id, "talk_seumas")) { npc.CompleteQuest(this.Id); npc.StartQuest(210012); npc.GiveItem(FathersGift); npc.Notice(L("You have received Father's Gift from Seumas.")); npc.Msg(L("(He gasps for breath as he speaks.)<br/>Ah... I suppose you're the one Lassar mentioned...?<br/>You need the...book of Fomors...?")); npc.Msg(L("Not too long ago...I asked Lassar...<br/>to translate it<br/>but she said she couldn't do it...")); npc.Msg(L("I probably won't be able to figure it out myself anyway...")); npc.Msg(L("Could you do me a little favor... before I give it to you?<br/>I can't leave here right now,<br/>Please deliver this present to my son Sion in Bangor.")); return(HookResult.Break); } return(HookResult.Continue); }
public async Task<HookResult> RanaldKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if(keyword == "about_skill" && npc.HasSkill(SkillId.Defense) && !npc.HasSkill(SkillId.Windmill)) { // Unofficial npc.Msg("You would like to learn more? That's the attitude!"); npc.Msg("Unfortunately I'm a little busy right now, I've borrowed an armor from Ferghus that I have to get back to him. Unless..."); npc.Msg("Could you deliver it to him for me? Afterwards I'll give you help with the Windmill skill.<button title='End Conversation' keyword='@end'/>"); await npc.Select(); npc.StartQuest(this.Id); //npc.GiveItem(70002); // Full Ring Mail to be Delivered (TODO: implement quest item handling) npc.Close(); return HookResult.End; } return HookResult.Continue; }
public async Task <HookResult> DuncanBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_goddess_morrighan1") { npc.StartQuest(this.Id); npc.RemoveKeyword("g1_goddess_morrighan1"); npc.RemoveKeyword("g1_22"); npc.GiveKeyword("g1_23"); npc.Msg(L("...<p/>It's hard to believe that such a thing could have happened<br/>to Mores. Is he still alive?")); npc.Msg(L("And...this is the first time I've heard<br/>how much he hated humans.<br/>Please, don't speak of this to anyone else.<br/>It's better he's remembered as a hero.")); npc.Msg(L("Besides, we may have gotten something wrong.<br/>I'd like to investigate this more on my own.<br/>And I'll have to read the book Mores wrote.<br/>Can you get it from Tarlach for me?")); return(HookResult.Break); } return(HookResult.Continue); }
public async Task<HookResult> DuncanBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_goddess_morrighan1") { npc.StartQuest(this.Id); npc.RemoveKeyword("g1_goddess_morrighan1"); npc.RemoveKeyword("g1_22"); npc.GiveKeyword("g1_23"); npc.Msg(L("...<p/>It's hard to believe that such a thing could have happened<br/>to Mores. Is he still alive?")); npc.Msg(L("And...this is the first time I've heard<br/>how much he hated humans.<br/>Please, don't speak of this to anyone else.<br/>It's better he's remembered as a hero.")); npc.Msg(L("Besides, we may have gotten something wrong.<br/>I'd like to investigate this more on my own.<br/>And I'll have to read the book Mores wrote.<br/>Can you get it from Tarlach for me?")); return HookResult.Break; } return HookResult.Continue; }
public async Task <HookResult> RanaldKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "about_skill" && npc.HasSkill(SkillId.Defense) && !npc.HasSkill(SkillId.Windmill)) { // Unofficial npc.Msg("You would like to learn more? That's the attitude!"); npc.Msg("Unfortunately I'm a little busy right now, I've borrowed an armor from Ferghus that I have to get back to him. Unless..."); npc.Msg("Could you deliver it to him for me? Afterwards I'll give you help with the Windmill skill.<button title='End Conversation' keyword='@end'/>"); await npc.Select(); npc.StartQuest(this.Id); //npc.GiveItem(70002); // Full Ring Mail to be Delivered (TODO: implement quest item handling) npc.Close(); return(HookResult.End); } return(HookResult.Continue); }
public async Task <HookResult> TarlachBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_message_of_kristell") { npc.RemoveKeyword("g1_17"); npc.GiveKeyword("g1_17_1"); npc.RemoveKeyword("g1_message_of_kristell"); npc.GiveItem(BookOfFomor); npc.StartQuest(210003); // Translating the Book of Fomors npc.Msg(L("Kristell's in Dunbarton?<br/>How...troubling.")); npc.Msg(L("I'm sorry, but I'm in no position to reciprocate her feelings...<br/>But if it really is her, perhaps<br/>she can translate this book.")); npc.Msg(Hide.Name, L("(Tarlach pulls a book from his chest.)")); npc.Msg(L("Could you give this to her?<br/>Tell her it's my last request to her...<br/>If she could just translate this book...")); return(HookResult.Break); } return(HookResult.Continue); }
public async Task<HookResult> KeywordsHook(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword != "about_skill" || npc.HasSkill(SkillId.Weaving)) return HookResult.Continue; if (!npc.QuestActive(this.Id)) { npc.Msg("Have you heard of the Weaving skill?<br/>It is a skill of spinning yarn from natural materials and making fabric."); npc.Msg("Do you want to learn the Weaving skill?<br/>Actually, I'm out of thick yarn and can't meet all the orders for fabric...<br/>If you get me some wool, I'll teach you the Weaving skill in return.<br/>An owl will deliver you a note on how to find wool if you wait outside."); await npc.Select(); npc.StartQuest(this.Id); npc.Close(); } else { // Unofficial npc.Msg("If you get me some wool, I'll teach you the Weaving skill in return."); } return HookResult.End; }
public async Task Class1_3(NpcScript npc) { npc.Msg(L("Then let's begin the class. I need you to sit up and focus.<br/>HP is the basic parameter.<br/>What happens when you run out of HP?<br/>You lose consciousness. But don't worry. You are not dead yet...")); npc.Msg(L("<image name='HP'/>Just like Stamina, the HP bar also has a black region that cannot be recovered by resting.<br/>That represents how serious your wound is.")); npc.Msg(L("<image name='HP'/>Some enemies may injure you with their attacks.<br/>Bats and Mimics especially can cause injuries very easily. You need to be careful when you meet them.<br/>So, what if you ignored the wounds and fought on?")); npc.Msg(L("<image name='Die'/>That's what happens. You would even lose some EXP. It hurts a lot.")); npc.Msg(L("Wounds can be cured by simply using the Resting skill or the First Aid skill.<br/>In other words, make sure to take a rest whenever you get wounded.")); npc.Msg(L("But resting too much in a dungeon may backfire.<br/>What do you think will happen if you just take a quick break after a battle without even checking your HP bar and face another monster right away?")); npc.Msg(L("<image name='Die'/>Again, this would happen.")); npc.Msg(L("You can't cure your wounds by resting in a dungeon. Probably because of the cold temperature inside.<br/>But a campfire will help you recover. Someone who knows how to start a campfire may be good company for you.")); npc.Msg(L("Now, like I said, I'm giving you homework.<br/>Gather nails that are dangerously protruding from objects around the town.<br/>You must have seen many people hitting a variety of objects to get small gems.")); npc.Msg(L("Anyone learning how to fight should first think about how to serve others.<br/>There's no way you can follow them one by one and stop them from doing stupid things,<br/>but you can help them by removing nails from those objects they hit.<br/>At least, they won't get hurt by them. Just hit the objects a few times and get the nails from them.")); npc.Msg(L("Get me 10 nails and you're done for the day.<br/>Cheating is not allowed. Nails from other people don't count.<br/>Get them on your own.<br/>Now, go!")); npc.StartQuest(200040); // Basic Combat 1 Mission }
public async Task AboutArbeit(NpcScript npc) { // Check if already doing another PTJ if (npc.DoingPtjForOtherNpc()) { npc.Msg("Are you working for someone else?<br/>Can you help me after you're finished?"); return; } // Check if PTJ is in progress if (npc.DoingPtjForNpc()) { var result = npc.GetPtjResult(); // Check if report time if (!npc.ErinnHour(Report, Deadline)) { if (result == QuestResult.Perfect) npc.Msg("You're a little early.<br/>Report to me when it's closer to the deadline."); else npc.Msg("How's it going?"); return; } // Report? npc.Msg("Did you complete the job I asked you to do?<br/>You can report to me even if you have not finished it<br/>and I will pay you for what you have done.<button title='Report Now' keyword='@report' /><button title='Report Later' keyword='@later' />"); if (await npc.Select() != "@report") { npc.Msg("Good, I trust you.<br/>Please make sure to report before the deadline."); return; } // Nothing done if (result == QuestResult.None) { npc.GiveUpPtj(); npc.Msg(npc.FavorExpression(), "Are you feeling sick?<br/>You should rest instead of working so hard.<br/>But, a promise is a promise. I am sorry, but I can't pay you this time."); npc.ModifyRelation(0, -Random(3), 0); } // Low~Perfect result else { npc.Msg("Nice job, <username/>. You did great.<br/>For now, this is all I can give you as a token of my gratitude.<br/>Please choose one. <button title='Report Later' keyword='@later' /><arbeit_report result=\"0\"/>"); var reply = await npc.Select(); // Report later if (!reply.StartsWith("@reward:")) { npc.Msg("Yes, <username/>.<br/>even if you come back later, I will hold on to your pay.<br/>But don't be too late."); return; } // Complete npc.CompletePtj(reply); remaining--; // Result msg if (result == QuestResult.Perfect) { npc.Msg(npc.FavorExpression(), "Fine job. Just what I asked!<br/>Thank you very much."); npc.ModifyRelation(0, Random(3), 0); } else if (result == QuestResult.Mid) { npc.Msg(npc.FavorExpression(), "You didn't bring me enough this time.<br/>I am sorry, but I will have to deduct it from your pay."); npc.ModifyRelation(0, Random(1), 0); } else if (result == QuestResult.Low) { npc.Msg(npc.FavorExpression(), "You don't seem to be at the top of your game today.<br/>Sorry, I can only pay you for what you've completed."); npc.ModifyRelation(0, -Random(2), 0); } // Herbalism quest if (npc.GetPtjSuccessCount(JobType) >= 10 && !npc.HasSkill(SkillId.Herbalism) && !npc.HasQuest(200042) && !npc.HasQuest(200063)) { npc.Msg("Say, <username/>. Do you have any interest in learning Herbalism?<br/>You've been such a great help to me here, I thought you might be interested in becoming a healer.<br/>If you're interested in Herbalism, I have a favor to ask you.<br/>If you do it, then I'll teach you.<button title='I will do it' keyword='@yes' /><button title='No, thanks' keyword='@no' />"); if (await npc.Select() == "@yes") { npc.StartQuest(200063); // Gather Base Herb (Dilys) npc.Msg("You sound really interested in becoming a healer...<br/>If you step outside, an owl will deliver my request to you."); } else { npc.Msg("Really?<br/>Then, I will see you next time when you need another part-time job."); } } } return; } // Check if PTJ time if (!npc.ErinnHour(Start, Deadline)) { npc.Msg("It's not time to start work yet.<br/>Can you come back and ask for a job later?"); return; } // Check if not done today and if there are jobs remaining if (!npc.CanDoPtj(JobType, remaining)) { npc.Msg("There are no more jobs today.<br/>I will give you another job tomorrow."); return; } // Offer PTJ var randomPtj = npc.RandomPtj(JobType, QuestIds); var ptjXml = npc.GetPtjXml(randomPtj, "Dilys's Healer's House Part-Time Job", "Looking for help with delivering goods in Healer's House.", PerDay, remaining); var msg = ""; if (npc.GetPtjDoneCount(JobType) == 0) msg = "Do you need some work to do?<br/>If you want, you can help me here.<br/>The pay is not great, but I will definitely pay you for your work.<br/>The pay also depends on how long you've worked for me.<br/>Would you like to try?"; else msg = "Ah, <username/>. Can you help me today?"; npc.Msg(msg + ptjXml); if (await npc.Select() == "@accept") { npc.Msg("Thank you for your help in advance."); npc.StartPtj(randomPtj); } else { npc.Msg("You seem busy today."); } }
// Dialog pieced together from vague translations // and snippets of official dialog. public async Task <HookResult> KristellBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_cichol") { npc.Msg(L("He's amongst one of the evil Gods that lead the Fomors.<br/>Yes, Fomors do worship Gods.")); npc.Msg(L("I don't particularly feel up to talking about him.<br/>But, I'll tell you now, you should hurry if you think Cichol<br/>is somehow involved with GOddess Morrighan.")); npc.Msg(L("He is cunning and meticulous, so he will<br/>be very difficult to stop by ourselves.")); } else if (keyword == "g1_way_to_tirnanog1") { if (npc.Player.Level < 25) { npc.Msg(L("...<p/>I have heard people call your name...<br/>And I know what kind of person you are.")); npc.Msg(L("...But, <username/>... Tir Na Nog is a bad place to be.<br/>In that place even your connection<br/>to the Soul Stream won't help you...")); npc.Msg(L("You don't have the experience to survive there.")); npc.Msg(L("You should at least reach level 25...<br/>Otherwise, going there would be suicide.")); return(HookResult.Break); } var hasSlayerTitle = (npc.Title == 79 || npc.Title == 80 || npc.Title == 81 || npc.Title == 82 || npc.Title == 83 || npc.Title == 85 || npc.Title == 53); if (!hasSlayerTitle) { npc.Msg(L("...<br/>If...<br/>If Tir Na Nog is...")); npc.Msg(L("If it really is the land of the Fomors, like Tarlach said...")); npc.Msg(L("I've already betrayed the Fomors. I supposed it doesn't hurt to tell you.<br/>The land of the Fomors is a dangerous place.<br/>There are no friendly faces or safe places...<br/>You have no one but yourself and your party members to rely on.")); npc.Msg(L("Do you... think you have the strength to bear the pain...?")); npc.Msg(L("I can tell you how to reach Tir Na Nog.")); npc.Msg(L("But... please show me that you're capable<br/>of fighting Erinn's powerful monsters.")); npc.Msg(L("I can't tell you how to reach Tir Na Nog before that.")); return(HookResult.Break); } if (npc.HasKeyword("g1_33")) { if (!npc.HasQuest(this.Id)) { npc.StartQuest(this.Id); } npc.Msg(L("That title above your head<br/>tells me that you're confident<br/>with your strength.")); npc.Msg(L("If you're so strong,<br/>could I ask you for one favor?")); npc.Msg(L("I've betrayed the Fomors to become a Human.<br/>Fomors are always waiting for the chance to hurt me.")); npc.Msg(L("Ever since I translated the book for Tarlach,<br/>I sensed someone stalking me.")); npc.Msg(L("I'm really insecure because I feel the Fomors looking for me.<br/>I saw the Fomor Command Scroll and think I'm supposed to be the target.<br/>Can you help me so they can't come anywhere near here?")); npc.Msg(L("If you do that,<br/>I'll feel a bit more at ease.")); } else { if (!npc.HasItem(BlackFomorPass)) { npc.GiveItem(BlackFomorPass); npc.Msg(L("This is a Fomor Pass used only by high ranking Fomors.<br/>I pray that you won't lose it.")); } else { npc.Msg(L("Yes, offer the pass I gave you in Barri Dungeon.<br/>...<br/>Please be careful.")); } } return(HookResult.Break); } return(HookResult.Continue); }
public async Task<HookResult> TarlachBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_message_of_kristell") { npc.RemoveKeyword("g1_17"); npc.GiveKeyword("g1_17_1"); npc.RemoveKeyword("g1_message_of_kristell"); npc.GiveItem(BookOfFomor); npc.StartQuest(210003); // Translating the Book of Fomors npc.Msg(L("Kristell's in Dunbarton?<br/>How...troubling.")); npc.Msg(L("I'm sorry, but I'm in no position to reciprocate her feelings...<br/>But if it really is her, perhaps<br/>she can translate this book.")); npc.Msg(Hide.Name, L("(Tarlach pulls a book from his chest.)")); npc.Msg(L("Could you give this to her?<br/>Tell her it's my last request to her...<br/>If she could just translate this book...")); return HookResult.Break; } return HookResult.Continue; }
public async Task Class3_3(NpcScript npc) { npc.Msg(L("This is the last class already...")); npc.Msg(L("I recall the day when you, <username/>, first came to me to learn magic.<br/>Heeheehee... It seems like only yesterday. Time flies, doesn't it?")); npc.Msg(L("Now, let's start the class.<br/>You need to be extra focused since this is the last class of chapter three.<br/>There is an assignment after the class, too.")); npc.Msg(L("Now, please pay attention. You will learn two things today.")); npc.Msg(L("First, the delay time of magic.<br/>Second, how to secure the distance from the target<br/>with the help of allies.")); npc.Msg(L("Let me first explain<br/>about delay time of magic.<br/>As I said before,<br/>any magic requires time for casting.")); npc.Msg(L("But, if you are attacked while casting a spell,<br/>what would happen?<br/>Have you ever been in this kind of situation?")); npc.Msg(L("<image name='firebolt_attacked'/>If you are attacked while casting a spell,<br/>the Mana you have used so far becomes useless<br/>and the casting also fails.")); npc.Msg(L("Even if you are not knocked down from the attack,<br/>the attack itself<br/>can make these things happen.<br/>So, you need to be extra careful.")); npc.Msg(L("Now, then,<br/>you must be as careful as you can<br/>not to be attacked while you are casting a spell.<br/>Unfortunately, however, it is easier said than done.")); npc.Msg(L("As you probably know from experience,<br/>making the time to cast while maintaining a certain distance from the enemy is nearly impossible.")); npc.Msg(L("You probably know that<br/>you cannot move while casting a spell<br/>because you are concentrating, right?")); npc.Msg(L("When this happens, the best way<br/>to maintain the distance from the target is<br/>by getting some help from your friends.")); npc.Msg(L("It is simple and easy<br/>to secure the distance from the target with the help of friends.")); npc.Msg(L("If you have a melee-type ally,<br/>you can stand at a distance from him<br/>while your friend stands between the target and you,<br/>guarding you physically.")); npc.Msg(L("Long range attack types... That is,<br/>when you have a party consisting of archers or wizards,<br/>you can make magic attacks on the target<br/>that is attacking your friend.")); npc.Msg(L("Well, that's all for today.<br/>If you have a good understanding of the characteristics of Icebolt and Firebolt,<br/>today's class will be a big help.")); npc.Msg(L("Let me briefly explain the assignment and finish this class.<br/>I will send details to you via an owl.")); npc.Msg(L("The assignment is to enter Alby Dungeon<br/>and to defeat the Giant Spider.<br/>If you cannot do this alone,<br/>you can go there with others by forming a party.")); npc.Msg(L("Don't be too scared.<br/>You are already a good wizard.<br/>Plus, there is no deadline for this assignment. So, you have plenty of time to do it.")); npc.Msg(L("You can start the assignment as soon as the owl delivers it.<br/>Check it immediately after receiving the assignment.")); npc.Msg(L("Now, then, I wish you good luck.")); npc.StartQuest(200029); // Basic Sorcery 3 Mission }
public async Task Class3_5(NpcScript npc) { npc.Msg(L("OK, today is your last day.<br/>You've done very well so far.<br/>Take a look at the Quest Scroll I gave you.")); npc.Msg(L("Just do what it says.<br/>Take advantage of everything you've learned<br/>and make it to the end of Alby Dungeon and come back in one piece.")); npc.Msg(L("You don't seem too enthused...<br/>Either do it or not. It's totally up to you.<br/>If you think you can't do it, then you can give it up.")); npc.Msg(L("But if you're the same student with guts I saw before, this task should be a piece of cake, right?<br/>I'll wait for you here.")); npc.Msg(L("<image name='alby_dungeon01'/>Here's our last class.<br/>Since you have the final assignment, I'll tell you how to fight in a dungeon.")); npc.Msg(L("<br/>The key is to control your HP and Stamina.")); npc.Msg(L("<image name='HP'/>First is Life.<br/>Just using the Resting skill alone cannot recover your HP in dungeons.<br/>You must rest near a campfire.<br/>I think I told you that before. Do you still remember?")); npc.Msg(L("Do not let yourself be injured or surrounded by monsters. You should avoid a situation like that at all costs.<br/>You need to be much more careful in a dungeon than when you fight in the field outside.")); npc.Msg(L("Potions could be helpful,<br/>but they won't cure your wounds.<br/>In other words, when you're in a dungeon, your safety comes before defeating your opponent.")); npc.Msg(L("<image name='Stamina'/>Next is Stamina. It's not really different.<br/>The best way to recover your Stamina is by food.<br/>But it's not easy to get something to eat in a dungeon unless you pack it for yourself.<br/>That means you need to save your Stamina as much as possible.")); npc.Msg(L("Get rid of any unnecessary motions,<br/>and be efficient in every move you make.<br/>Don't forget.")); npc.Msg(L("And last,<br/>there are some books<br/>about dungeons and exploration.<br/>Read them. They can only help you.")); npc.Msg(L("All right, this is the end of Basic Combat.<br/>You've been a good student.<br/>Don't stop training. Become a great warrior.")); npc.Msg(L("When you're done with your homework, make sure you come back and let me know.<br/>I'll be all ears for your whining if you make it through Alby Dungeon, hahaha.<br/>")); npc.StartQuest(200028); // Basic Combat 3 Mission }
public async Task AboutArbeit(NpcScript npc) { // Check if already doing another PTJ if (npc.DoingPtjForOtherNpc()) { npc.Msg(L("Are you working for someone else?<br/>Can you help me after you're finished?")); return; } // Check if PTJ is in progress if (npc.DoingPtjForNpc()) { var result = npc.GetPtjResult(); // Check if report time if (!npc.ErinnHour(Report, Deadline)) { if (result == QuestResult.Perfect) { npc.Msg(L("You're a little early.<br/>Report to me when it's closer to the deadline.")); } else { npc.Msg(L("How's it going?")); } return; } // Report? npc.Msg(L("Did you complete the job I asked you to do?<br/>You can report to me even if you have not finished it<br/>and I will pay you for what you have done."), npc.Button(L("Report Now"), "@report"), npc.Button(L("Report Later"), "@later")); if (await npc.Select() != "@report") { npc.Msg(L("Good, I trust you.<br/>Please make sure to report before the deadline.")); return; } // Nothing done if (result == QuestResult.None) { npc.GiveUpPtj(); npc.Msg(npc.FavorExpression(), L("Are you feeling sick?<br/>You should rest instead of working so hard.<br/>But, a promise is a promise. I am sorry, but I can't pay you this time.")); npc.ModifyRelation(0, -Random(3), 0); } // Low~Perfect result else { npc.Msg(L("Nice job, <username/>. You did great.<br/>For now, this is all I can give you as a token of my gratitude.<br/>Please choose one."), npc.Button(L("Report Later"), "@later"), npc.PtjReport(result)); var reply = await npc.Select(); // Report later if (!reply.StartsWith("@reward:")) { npc.Msg(L("Yes, <username/>.<br/>even if you come back later, I will hold on to your pay.<br/>But don't be too late.")); return; } // Complete npc.CompletePtj(reply); remaining--; // Result msg if (result == QuestResult.Perfect) { npc.Msg(npc.FavorExpression(), L("Fine job. Just what I asked!<br/>Thank you very much.")); npc.ModifyRelation(0, Random(3), 0); } else if (result == QuestResult.Mid) { npc.Msg(npc.FavorExpression(), L("You didn't bring me enough this time.<br/>I am sorry, but I will have to deduct it from your pay.")); npc.ModifyRelation(0, Random(1), 0); } else if (result == QuestResult.Low) { npc.Msg(npc.FavorExpression(), L("You don't seem to be at the top of your game today.<br/>Sorry, I can only pay you for what you've completed.")); npc.ModifyRelation(0, -Random(2), 0); } // Herbalism quest if (npc.GetPtjSuccessCount(JobType) >= 10 && !npc.HasSkill(SkillId.Herbalism) && !npc.HasQuest(200042) && !npc.HasQuest(200063)) { npc.Msg(L("Say, <username/>. Do you have any interest in learning Herbalism?<br/>You've been such a great help to me here, I thought you might be interested in becoming a healer.<br/>If you're interested in Herbalism, I have a favor to ask you.<br/>If you do it, then I'll teach you."), npc.Button(L("I will do it"), "@yes"), npc.Button(L("No, thanks"), "@no")); if (await npc.Select() == "@yes") { npc.StartQuest(200063); // Gather Base Herb (Dilys) npc.Msg(L("You sound really interested in becoming a healer...<br/>If you step outside, an owl will deliver my request to you.")); } else { npc.Msg(L("Really?<br/>Then, I will see you next time when you need another part-time job.")); } } } return; } // Check if PTJ time if (!npc.ErinnHour(Start, Deadline)) { npc.Msg(L("It's not time to start work yet.<br/>Can you come back and ask for a job later?")); return; } // Check if not done today and if there are jobs remaining if (!npc.CanDoPtj(JobType, remaining)) { npc.Msg(L("There are no more jobs today.<br/>I will give you another job tomorrow.")); return; } // Offer PTJ var randomPtj = npc.RandomPtj(JobType, QuestIds); var msg = ""; if (npc.GetPtjDoneCount(JobType) == 0) { msg = L("Do you need some work to do?<br/>If you want, you can help me here.<br/>The pay is not great, but I will definitely pay you for your work.<br/>The pay also depends on how long you've worked for me.<br/>Would you like to try?"); } else { msg = L("Ah, <username/>. Can you help me today?"); } npc.Msg(msg, npc.PtjDesc(randomPtj, L("Dilys's Healer's House Part-Time Job"), L("Looking for help with delivering goods in Healer's House."), PerDay, remaining, npc.GetPtjDoneCount(JobType))); if (await npc.Select() == "@accept") { npc.Msg(L("Thank you for your help in advance.")); npc.StartPtj(randomPtj); } else { npc.Msg(L("You seem busy today.")); } }
public async Task Class2_3(NpcScript npc) { npc.Msg(L("Hmm... Is it already our last class?<br/>I'll explain today to you why the Defense skill is so important.")); npc.Msg(L("You've probably seen a stat called Defense Rate.<br/>It's particularly difficult to upgrade this stat.")); npc.Msg(L("Clothes can add only 1 or 2 defense points at the best.<br/>What you can do is to train yourself hard enough to improve your critical defense.")); npc.Msg(L("You may not agree that the Defense Rate is so critical in the beginning, but it will become more and more important for your survival.")); npc.Msg(L("<image name='whitespider'/>Here's the assignment for the class.<br/>Go to Alby Dungeon and defeat 5 spiders.<br/>Dismissed!")); npc.StartQuest(200041); // Basic Combat 2 Mission }
// Dialog pieced together from vague translations // and snippets of official dialog. public async Task<HookResult> KristellBeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword == "g1_cichol") { npc.Msg(L("He's amongst one of the evil Gods that lead the Fomors.<br/>Yes, Fomors do worship Gods.")); npc.Msg(L("I don't particularly feel up to talking about him.<br/>But, I'll tell you now, you should hurry if you think Cichol<br/>is somehow involved with GOddess Morrighan.")); npc.Msg(L("He is cunning and meticulous, so he will<br/>be very difficult to stop by ourselves.")); } else if (keyword == "g1_way_to_tirnanog1") { if (npc.Player.Level < 25) { npc.Msg(L("...<p/>I have heard people call your name...<br/>And I know what kind of person you are.")); npc.Msg(L("...But, <username/>... Tir Na Nog is a bad place to be.<br/>In that place even your connection<br/>to the Soul Stream won't help you...")); npc.Msg(L("You don't have the experience to survive there.")); npc.Msg(L("You should at least reach level 25...<br/>Otherwise, going there would be suicide.")); return HookResult.Break; } var hasSlayerTitle = (npc.Title == 79 || npc.Title == 80 || npc.Title == 81 || npc.Title == 82 || npc.Title == 83 || npc.Title == 85 || npc.Title == 53); if (!hasSlayerTitle) { npc.Msg(L("...<br/>If...<br/>If Tir Na Nog is...")); npc.Msg(L("If it really is the land of the Fomors, like Tarlach said...")); npc.Msg(L("I've already betrayed the Fomors. I supposed it doesn't hurt to tell you.<br/>The land of the Fomors is a dangerous place.<br/>There are no friendly faces or safe places...<br/>You have no one but yourself and your party members to rely on.")); npc.Msg(L("Do you... think you have the strength to bear the pain...?")); npc.Msg(L("I can tell you how to reach Tir Na Nog.")); npc.Msg(L("But... please show me that you're capable<br/>of fighting Erinn's powerful monsters.")); npc.Msg(L("I can't tell you how to reach Tir Na Nog before that.")); return HookResult.Break; } if (npc.HasKeyword("g1_33")) { if (!npc.HasQuest(this.Id)) npc.StartQuest(this.Id); npc.Msg(L("That title above your head<br/>tells me that you're confident<br/>with your strength.")); npc.Msg(L("If you're so strong,<br/>could I ask you for one favor?")); npc.Msg(L("I've betrayed the Fomors to become a Human.<br/>Fomors are always waiting for the chance to hurt me.")); npc.Msg(L("Ever since I translated the book for Tarlach,<br/>I sensed someone stalking me.")); npc.Msg(L("I'm really insecure because I feel the Fomors looking for me.<br/>I saw the Fomor Command Scroll and think I'm supposed to be the target.<br/>Can you help me so they can't come anywhere near here?")); npc.Msg(L("If you do that,<br/>I'll feel a bit more at ease.")); } else { if (!npc.HasItem(BlackFomorPass)) { npc.GiveItem(BlackFomorPass); npc.Msg(L("This is a Fomor Pass used only by high ranking Fomors.<br/>I pray that you won't lose it.")); } else { npc.Msg(L("Yes, offer the pass I gave you in Barri Dungeon.<br/>...<br/>Please be careful.")); } } return HookResult.Break; } return HookResult.Continue; }