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> 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> 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> 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> 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 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 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.SendOwl(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 AboutArbeit(NpcScript npc) { // Check if already doing another PTJ if (npc.DoingPtjForOtherNpc()) { npc.Msg(L("So, you want to work at a Healer's House, do you?<br/>I appreciate your enthusiasm, but finish the work you're doing first.")); 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("It's not the deadline yet. Come back later.<p/>Alright. I'll see you later!")); else npc.Msg(L("I trust that your work is going well?")); return; } // Report? npc.Msg(L("So, do you want to wrap up today's work here?<br/>You can report and finish the work without completing it,<br/>but it's good to finish something you've started."), npc.Button(L("Report Now"), "@report"), npc.Button(L("Report Later"), "@later") ); if (await npc.Select() != "@report") { npc.Msg(L("Alright! Go for it!<br/>I look forward to your report!")); return; } // Nothing done if (result == QuestResult.None) { npc.GiveUpPtj(); npc.Msg(npc.FavorExpression(), L("Weak.<br/>If you keep this up,<br/>you'll never get paid.")); npc.ModifyRelation(0, -Random(3), 0); } // Low~Perfect result else { npc.Msg(L("Ha ha. I knew I was an excellent judge of character!<br/>Now, I should pay you for the work you have done, hmm? Take your pick here.<br/>I have to give to other workers, too, so don't even think about taking them all! Hahaha."), npc.Button(L("Report Later"), "@later"), npc.PtjReport(result) ); var reply = await npc.Select(); // Report later if (!reply.StartsWith("@reward:")) { npc.Msg(npc.FavorExpression(), L("Eh? What, are you going to just leave?")); return; } // Complete npc.CompletePtj(reply); remaining--; // Result msg if (result == QuestResult.Perfect) { npc.Msg(npc.FavorExpression(), L("Alright! Well done!<br/>You've worked hard.")); npc.ModifyRelation(0, Random(3), 0); } else if (result == QuestResult.Mid) { npc.Msg(npc.FavorExpression(), L("Hmm. That's not quite enough.<br/>I'll deduct it from your pay.")); npc.ModifyRelation(0, Random(1), 0); } else if (result == QuestResult.Low) { npc.Msg(npc.FavorExpression(), L("Is this the best you can do?<br/>Then I have no choice but to pay only a little.")); npc.ModifyRelation(0, -Random(2), 0); } // Herbalism quest if (npc.GetPtjSuccessCount(JobType) >= 10 && !npc.HasSkill(SkillId.Herbalism) && !npc.HasQuest(200042) && !npc.HasQuest(200063)) { // Unofficial/Copy of Dilys 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.SendOwl(200042); // Gather Base Herb (Manus) 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("Try again later.<br/>It's not time for work yet.")); return; } // Check if not done today and if there are jobs remaining if (!npc.CanDoPtj(JobType, remaining)) { npc.Msg(L("Come back tomorrow.")); return; } // Offer PTJ var randomPtj = npc.RandomPtj(JobType, QuestIds); var msg = ""; if (npc.GetPtjDoneCount(JobType) == 0) msg = L("Looking for some work, are you?<br/>I happen to be in need of extra hands here,<br/>so help me out here and I'll pay you adequately.<br/>It's not much, though...<p/>So, are you interested?"); else msg = L("So, you're here to help out again."); npc.Msg(msg, npc.PtjDesc(randomPtj, L("Manus's Healer's House part-time job"), L("Looking for help with delivering goods to Healer's House."), PerDay, remaining, npc.GetPtjDoneCount(JobType))); if (await npc.Select() == "@accept") { if (npc.GetPtjDoneCount(JobType) == 0) npc.Msg(L("Great. Good choice.<br/>Remember to report back to me before the deadline.<br/>")); else npc.Msg(L("I look forward to your job well done.")); npc.StartPtj(randomPtj); } else { if (npc.GetPtjDoneCount(JobType) == 0) npc.Msg(L("If you don't want to report, though, I won't force you.")); else npc.Msg(L("You must be feeling off today.")); } }
public async Task AboutArbeit(NpcScript npc) { // Check if already doing another PTJ if (npc.DoingPtjForOtherNpc()) { npc.Msg(L("So, you want to work at a Healer's House, do you?<br/>I appreciate your enthusiasm, but finish the work you're doing first.")); 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("It's not the deadline yet. Come back later.<p/>Alright. I'll see you later!")); } else { npc.Msg(L("I trust that your work is going well?")); } return; } // Report? npc.Msg(L("So, do you want to wrap up today's work here?<br/>You can report and finish the work without completing it,<br/>but it's good to finish something you've started."), npc.Button(L("Report Now"), "@report"), npc.Button(L("Report Later"), "@later") ); if (await npc.Select() != "@report") { npc.Msg(L("Alright! Go for it!<br/>I look forward to your report!")); return; } // Nothing done if (result == QuestResult.None) { npc.GiveUpPtj(); npc.Msg(npc.FavorExpression(), L("Weak.<br/>If you keep this up,<br/>you'll never get paid.")); npc.ModifyRelation(0, -Random(3), 0); } // Low~Perfect result else { npc.Msg(L("Ha ha. I knew I was an excellent judge of character!<br/>Now, I should pay you for the work you have done, hmm? Take your pick here.<br/>I have to give to other workers, too, so don't even think about taking them all! Hahaha."), npc.Button(L("Report Later"), "@later"), npc.PtjReport(result) ); var reply = await npc.Select(); // Report later if (!reply.StartsWith("@reward:")) { npc.Msg(npc.FavorExpression(), L("Eh? What, are you going to just leave?")); return; } // Complete npc.CompletePtj(reply); remaining--; // Result msg if (result == QuestResult.Perfect) { npc.Msg(npc.FavorExpression(), L("Alright! Well done!<br/>You've worked hard.")); npc.ModifyRelation(0, Random(3), 0); } else if (result == QuestResult.Mid) { npc.Msg(npc.FavorExpression(), L("Hmm. That's not quite enough.<br/>I'll deduct it from your pay.")); npc.ModifyRelation(0, Random(1), 0); } else if (result == QuestResult.Low) { npc.Msg(npc.FavorExpression(), L("Is this the best you can do?<br/>Then I have no choice but to pay only a little.")); npc.ModifyRelation(0, -Random(2), 0); } // Herbalism quest if (npc.GetPtjSuccessCount(JobType) >= 10 && !npc.HasSkill(SkillId.Herbalism) && !npc.HasQuest(200042) && !npc.HasQuest(200063)) { // Unofficial/Copy of Dilys 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.SendOwl(200042); // Gather Base Herb (Manus) 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("Try again later.<br/>It's not time for work yet.")); return; } // Check if not done today and if there are jobs remaining if (!npc.CanDoPtj(JobType, remaining)) { npc.Msg(L("Come back tomorrow.")); return; } // Offer PTJ var randomPtj = npc.RandomPtj(JobType, QuestIds); var msg = ""; if (npc.GetPtjDoneCount(JobType) == 0) { msg = L("Looking for some work, are you?<br/>I happen to be in need of extra hands here,<br/>so help me out here and I'll pay you adequately.<br/>It's not much, though...<p/>So, are you interested?"); } else { msg = L("So, you're here to help out again."); } npc.Msg(msg, npc.PtjDesc(randomPtj, L("Manus's Healer's House part-time job"), L("Looking for help with delivering goods to Healer's House."), PerDay, remaining, npc.GetPtjDoneCount(JobType))); if (await npc.Select() == "@accept") { if (npc.GetPtjDoneCount(JobType) == 0) { npc.Msg(L("Great. Good choice.<br/>Remember to report back to me before the deadline.<br/>")); } else { npc.Msg(L("I look forward to your job well done.")); } npc.StartPtj(randomPtj); } else { if (npc.GetPtjDoneCount(JobType) == 0) { npc.Msg(L("If you don't want to report, though, I won't force you.")); } else { npc.Msg(L("You must be feeling off today.")); } } }
public async Task <HookResult> BeforeKeywords(NpcScript npc, params object[] args) { var keyword = args[0] as string; if (keyword != "about_skill") { return(HookResult.Continue); } // Arrow revolver can only be learned by humans if (!npc.Player.IsHuman) { npc.Msg(L("(Missing dialog: Aranwen about non-humans and bows? (Arrow Revolver)")); return(HookResult.Break); } // Aranwen can't do anything for you before AR is enabled if (!IsEnabled("ArrowRevolver")) { npc.Msg(L("I know a little bit about bows,<br/>but it's not quite the right time.")); npc.Msg(L("Please come back some other time.")); return(HookResult.Break); } // Check Fire Arrow title if (npc.Title != 88) { npc.Msg(L("...I am sorry, but someone that has yet to master the skill<br/>should not be bluntly asking questions about skills like this.")); npc.Msg(L("...if you are interested in high-leveled bowman skills, then<br/>you should at least master the Fire Arrow skill first.")); return(HookResult.Break); } // Check skill if (npc.HasSkill(SkillId.ArrowRevolver2)) { // Unofficial npc.Msg(L("...You've learned Arrow Revolver. I hope you keep learning<br/>until you master it.")); return(HookResult.Break); } // Start quest if (!npc.QuestActive(this.Id)) { if (!npc.HasItem(this.ScrollId)) { npc.Msg(L("Hmmm... <username/>, you knew how to shoot a Fire Arrow?<br/>It seems like you are interested in bows, and...<br/>it's nice to meet someone who's talent is only surpassed by their work ethic.")); npc.Msg(L("I think it'll be very beneficial for you to learn this skill called the Arrow Revolver...")); npc.Msg(L("Arrow Revolver is a skill that lets you fire arrows consecutively.<br/>You'll fire multiple arrows in quick succession, not giving your enemy enough time to react..<br/>This skill will allow you to shoot up to 5 arrows at once.")); npc.Msg(L("Arrow Revolver is very effective against powerful enemies by applying multiple<br/>damages and wounds in the blink of an eye. It's also effective against groups of enemies.")); npc.Msg(L("...Are you interested in learning this skill?<br/>Yes, the Arrow Revolver...<br/>Please promise me that you will not quit on me midway through. Okay?"), npc.Button(L("Okay!"), "@yes"), npc.Button(L("No"), "@no")); if (await npc.Select() == "@yes") { npc.Player.GiveItem(Aura.Channel.World.Entities.Item.CreateQuestScroll(this.Id)); npc.Player.GiveItem(BookOnArrowRevolver); npc.Msg(L("Great, <username/>.<br/>I'll give you this book and the quest.<br/>Technically speaking, Arrow Revolver<br/>relies somewhat on the power of Mana.")); npc.Msg(L("Gather together all of the pages in this book.<br/>Our ancestors seperated them in hopes of preventing<br/>the reoccurrence of the same mistakes that had been made by inexperienced bowmen.")); npc.Msg(L("Read the scroll carefully, and once you complete the book,<br/>you'll be able to use Arrow Revolver.<br/>...Good luck.")); } else { npc.Msg(L("...I see.<br/>Please talk to me when you change your mind.")); } return(HookResult.Break); } } // Finish quest else { // Check if book is complete and finish quest if it is var book = npc.Player.Inventory.GetItem(a => a.Info.Id == BookOnArrowRevolver && a.OptionInfo.Suffix == BookOnArrowRevolverPage10); if (book != null) { npc.FinishQuest(this.Id, "talk"); npc.Player.Inventory.Remove(book); npc.Msg(L("Yes? Please don't block my view.")); } else { npc.Msg(L("...You're learning Arrow Revolver. I hope you keep trying<br/>until you master it.")); } return(HookResult.Break); } return(HookResult.Continue); }