Esempio n. 1
0
    public async Task <HookResult> AeiraBeforeKeywords(NpcScript npc, params object[] args)
    {
        var keyword = args[0] as string;

        if (keyword != "g1_book1")
        {
            return(HookResult.Continue);
        }

        if (npc.HasKeyword("g1_06"))
        {
            npc.RemoveKeyword("g1_06");
            npc.GiveKeyword("g1_07");

            npc.Msg(L("'The Land of Eternity, Tir Na Nog'...?"));
            npc.Msg(L("Oh no.<br/>That book wasn't selling at all, so I returned all of them.<br/>Haha! Where did you hear about that book?"));
        }
        else if (npc.HasKeyword("g1_07"))
        {
            npc.RemoveKeyword("g1_07");
            npc.GiveKeyword("g1_08");

            npc.Msg(L("Let's see... I can order one for you,<br/>but it'll take some time to arrive.<br/>I hope that's okay."));
        }
        else if (npc.HasKeyword("g1_08"))
        {
            npc.RemoveKeyword("g1_book1");
            npc.SendOwl(this.Id, OwlDelay);

            npc.Msg(L("I'm sorry!<br/>The book still isn't in stock."));
            npc.Msg(L("Hmm, how about this. I'll send you an owl when the book arrives.<br/>That would be better, right?"));
        }

        return(HookResult.Break);
    }
Esempio n. 2
0
    public async Task <HookResult> KristellAfterIntro(NpcScript npc, params object[] args)
    {
        if (npc.HasKeyword("g1_25") && npc.HasItem(BookOfRevenge2))
        {
            npc.RemoveItem(BookOfRevenge2);
            npc.SendOwl(this.Id, OwlDelay1);

            npc.RemoveKeyword("g1_memo_of_parcelman");
            npc.RemoveKeyword("g1_25");
            npc.GiveKeyword("g1_26");

            npc.Msg(L("So there really was another volume.<br/>I'm impressed. I didn't think you'd be able to find it."));
            npc.Msg(L("I'll translate this book, as promised.<br/>I'll let you know as soon as I'm finished."));

            return(HookResult.Break);
        }
        else if (npc.QuestActive(this.Id, "get_book"))
        {
            npc.FinishQuest(this.Id, "get_book");

            npc.GiveItem(BookOfRevenge2Translated);
            npc.Notice(L("You have received the Book of Revenge, Vol. 2 (Translated) from Kristell."));

            npc.Msg(L("You must be here for your translated copy of the book.<br/>Here, I think you should read it yourself.<br/>It's better than having me summarize it for you."));
            npc.Msg(L("That said, I can't believe what's written in this book..."));

            return(HookResult.Break);
        }

        return(HookResult.Continue);
    }
	public async Task<HookResult> AeiraBeforeKeywords(NpcScript npc, params object[] args)
	{
		var keyword = args[0] as string;
		if (keyword != "g1_book1")
			return HookResult.Continue;

		if (npc.HasKeyword("g1_06"))
		{
			npc.RemoveKeyword("g1_06");
			npc.GiveKeyword("g1_07");

			npc.Msg(L("'The Land of Eternity, Tir Na Nog'...?"));
			npc.Msg(L("Oh no.<br/>That book wasn't selling at all, so I returned all of them.<br/>Haha! Where did you hear about that book?"));
		}
		else if (npc.HasKeyword("g1_07"))
		{
			npc.RemoveKeyword("g1_07");
			npc.GiveKeyword("g1_08");

			npc.Msg(L("Let's see... I can order one for you,<br/>but it'll take some time to arrive.<br/>I hope that's okay."));
		}
		else if (npc.HasKeyword("g1_08"))
		{
			npc.RemoveKeyword("g1_book1");
			npc.SendOwl(this.Id, OwlDelay);

			npc.Msg(L("I'm sorry!<br/>The book still isn't in stock."));
			npc.Msg(L("Hmm, how about this. I'll send you an owl when the book arrives.<br/>That would be better, right?"));
		}

		return HookResult.Break;
	}
	public async Task<HookResult> KristellAfterIntro(NpcScript npc, params object[] args)
	{
		if (npc.HasKeyword("g1_25") && npc.HasItem(BookOfRevenge2))
		{
			npc.RemoveItem(BookOfRevenge2);
			npc.SendOwl(this.Id, OwlDelay1);

			npc.RemoveKeyword("g1_memo_of_parcelman");
			npc.RemoveKeyword("g1_25");
			npc.GiveKeyword("g1_26");

			npc.Msg(L("So there really was another volume.<br/>I'm impressed. I didn't think you'd be able to find it."));
			npc.Msg(L("I'll translate this book, as promised.<br/>I'll let you know as soon as I'm finished."));

			return HookResult.Break;
		}
		else if (npc.QuestActive(this.Id, "get_book"))
		{
			npc.FinishQuest(this.Id, "get_book");

			npc.GiveItem(BookOfRevenge2Translated);
			npc.Notice(L("You have received the Book of Revenge, Vol. 2 (Translated) from Kristell."));

			npc.Msg(L("You must be here for your translated copy of the book.<br/>Here, I think you should read it yourself.<br/>It's better than having me summarize it for you."));
			npc.Msg(L("That said, I can't believe what's written in this book..."));

			return HookResult.Break;
		}

		return HookResult.Continue;
	}
Esempio n. 5
0
    public async Task <HookResult> DuncanBeforeKeywords(NpcScript npc, params object[] args)
    {
        var keyword = args[0] as string;

        if (keyword == "g1_goddess_morrighan2")
        {
            if (npc.HasKeyword("g1_30"))
            {
                npc.RemoveKeyword("g1_30");
                npc.GiveKeyword("g1_31");

                npc.Msg(Hide.Name, L("(You tell Duncan about the experience Tarlach had in Tir Na Nog.)"));
                npc.Msg(L("Is that what happened to Tarlach?<br/>That's unbelievable.<br/>But I suppose there's no choice but to believe him. Hmmm."));
                npc.Msg(L("There is one more thing I'd like to tell you.<br/>What I'm about to tell you is a secret I've kept all my life,<br/>so promise me you won't tell anyone else, okay?"));
                npc.Msg(L("You said Mores tried to save<br/>Tarlach and his friends at the last minute when they went to Tir Na Nog, right?"));
                npc.Msg(L("I'm sure that wasn't because of Tarlach."));
                npc.Msg(L("Mari. It was because of Mari.<br/>Mari was Mores's only daughter.<br/>Mores recognized that fact."), npc.Image("g1_ch27_mari"));
                npc.Msg(L("I knew his wife Shiela before she passed away.<br/>She was killed by humans instigated by nobles,<br/>but Mari was sent to me with the help of the wolves and deer."));
                npc.Msg(L("Mari's memory of her parents<br/>was personally erased by her mother."));
                npc.Msg(L("It would mean death for her to<br/>remember her parents."));
                npc.Msg(L("So I raised Mari myself."));
                npc.Msg(L("Yes, I think I've told you enought about this story."));
                npc.Msg(L("Hmm. Everything else fits into the story except<br/>the Goddess.<br/>You don't aactually agree with Tarlach<br/>about the Goddess, do you?"));
                npc.Msg(L("Ask the other people.<br/>Don't tell them what you think, but just listen<br/>to see if the Goddess is someone who'd betray humankind."));
            }

            npc.Msg(L("I'll remind you one more time.<br/>Please keep what I told you about Mari a secret."));

            return(HookResult.Break);
        }
        else if (keyword == "g1_request_from_goddess")
        {
            var owlDelay = 36 * 60;             // 1 Erinn day
            if (IsEnabled("ShorterWaitTimesChapter1"))
            {
                owlDelay = 4 * 60;
            }

            npc.SendOwl(this.Id, owlDelay);

            npc.RemoveKeyword("g1_32");
            npc.GiveKeyword("g1_33");
            npc.RemoveKeyword("g1_request_from_goddess");
            npc.GiveKeyword("g1_way_to_tirnanog1");

            npc.Msg(L("You dreamt of the Goddess again?<br/>The Goddess said that the day of Glas Ghaibhleann's resurrection is approaching?"));
            npc.Msg(L("It's just as I'd thought... Is Mores<br/>behind the resurrection of Glas Ghaibhleann?<br/>We don't even have the slightest clue what to do about it yet.<br/>This is a big problem!"));
            npc.Msg(L("I think I forgot to tell you this,<br/>Magic doesn't work on Adamantium,<br/>so it's difficult to fuse to a magical creature."));
            npc.Msg(L("That's why special ingredients are required.<br/>They say that the soul of a brave human is needed as an ingredient."));
            npc.Msg(L("It's possible that they may already have the soul<br/>of one of the Three Missing Warriors.<br/>Then this is truly a big problem.<br/>We have to stop them somehow."));
            npc.Msg(L("Now hurry up and find out how to get there!"));

            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_morrighan2")
		{
			if (npc.HasKeyword("g1_30"))
			{
				npc.RemoveKeyword("g1_30");
				npc.GiveKeyword("g1_31");

				npc.Msg(Hide.Name, L("(You tell Duncan about the experience Tarlach had in Tir Na Nog.)"));
				npc.Msg(L("Is that what happened to Tarlach?<br/>That's unbelievable.<br/>But I suppose there's no choice but to believe him. Hmmm."));
				npc.Msg(L("There is one more thing I'd like to tell you.<br/>What I'm about to tell you is a secret I've kept all my life,<br/>so promise me you won't tell anyone else, okay?"));
				npc.Msg(L("You said Mores tried to save<br/>Tarlach and his friends at the last minute when they went to Tir Na Nog, right?"));
				npc.Msg(L("I'm sure that wasn't because of Tarlach."));
				npc.Msg(L("Mari. It was because of Mari.<br/>Mari was Mores's only daughter.<br/>Mores recognized that fact."), npc.Image("g1_ch27_mari"));
				npc.Msg(L("I knew his wife Shiela before she passed away.<br/>She was killed by humans instigated by nobles,<br/>but Mari was sent to me with the help of the wolves and deer."));
				npc.Msg(L("Mari's memory of her parents<br/>was personally erased by her mother."));
				npc.Msg(L("It would mean death for her to<br/>remember her parents."));
				npc.Msg(L("So I raised Mari myself."));
				npc.Msg(L("Yes, I think I've told you enought about this story."));
				npc.Msg(L("Hmm. Everything else fits into the story except<br/>the Goddess.<br/>You don't aactually agree with Tarlach<br/>about the Goddess, do you?"));
				npc.Msg(L("Ask the other people.<br/>Don't tell them what you think, but just listen<br/>to see if the Goddess is someone who'd betray humankind."));
			}

			npc.Msg(L("I'll remind you one more time.<br/>Please keep what I told you about Mari a secret."));

			return HookResult.Break;
		}
		else if (keyword == "g1_request_from_goddess")
		{
			var owlDelay = 36 * 60; // 1 Erinn day
			if (IsEnabled("ShorterWaitTimesChapter1"))
				owlDelay = 4 * 60;

			npc.SendOwl(this.Id, owlDelay);

			npc.RemoveKeyword("g1_32");
			npc.GiveKeyword("g1_33");
			npc.RemoveKeyword("g1_request_from_goddess");
			npc.GiveKeyword("g1_way_to_tirnanog1");

			npc.Msg(L("You dreamt of the Goddess again?<br/>The Goddess said that the day of Glas Ghaibhleann's resurrection is approaching?"));
			npc.Msg(L("It's just as I'd thought... Is Mores<br/>behind the resurrection of Glas Ghaibhleann?<br/>We don't even have the slightest clue what to do about it yet.<br/>This is a big problem!"));
			npc.Msg(L("I think I forgot to tell you this,<br/>Magic doesn't work on Adamantium,<br/>so it's difficult to fuse to a magical creature."));
			npc.Msg(L("That's why special ingredients are required.<br/>They say that the soul of a brave human is needed as an ingredient."));
			npc.Msg(L("It's possible that they may already have the soul<br/>of one of the Three Missing Warriors.<br/>Then this is truly a big problem.<br/>We have to stop them somehow."));
			npc.Msg(L("Now hurry up and find out how to get there!"));

			return HookResult.Break;
		}

		return HookResult.Continue;
	}
Esempio n. 7
0
	public async Task<HookResult> DougalAfterIntro(NpcScript npc, params object[] args)
	{
		if (!npc.HasQuest(this.Id) && !npc.HasKeyword("g1_37_1"))
		{
			npc.SendOwl(this.Id, OwlDelay);
			npc.GiveKeyword("g1_37_1");

			npc.Msg(L("You're quite brave to come to a place like this. I'm Dougal.<br/>I'm here... alone."));
			npc.Msg(L("I see that you're not from around here.<br/>I'm Dougal, the last remaining human here.<br/>I was pretty lonely. It's been a while since I've seen anyone."));
			npc.Msg(L("Why am I left here alone?<br/>It's complicated, but I didn't stay behind<br/>because I wanted to."));
			npc.Msg(L("..."));
			npc.Msg(L("What?<br/>This is Tir Na Nog?<br/>You mean the legendary paradise, Tir Na Nog?"));
			npc.Msg(L("Hah!<br/>Hahaha. I didn't expect to hear such a foolish statement from you."));
			npc.Msg(L("Look, if this truly is Tir Na Nog, the world where sickness and death don't exist,<br/>why would I have a leg like this?"));
			npc.Msg(L("Also, this town has turned into a wasteland<br/>after being invaded by the Fomors."));
			npc.Msg(L("You probably heard a false rumor somewhere.<br/>I'm sorry but this isn't the place you think it is."));
			npc.Msg(L("This is just another world that has become a land of the Fomors."));
			npc.Msg(L("But since you're here, take a look<br/>around as much as you want.<br/>Who knows?<br/>You might find this place similar to a place<br/>you are familiar with. Haha."));

			return HookResult.Break;
		}
		else if (npc.QuestActive(this.Id, "talk1"))
		{
			npc.FinishQuest(this.Id, "talk1");

			npc.Msg(L("You've come... I was waiting for you.<br/>Because you're not from around here,<br/>I thought that losing the freedom of your body<br/>might end up getting you into big trouble."));
			npc.Msg(L("...True... Nobody but your party can help you<br/>in here.<br/>Even if your life ends and you pass away..."));
			npc.Msg(L("When you can't move...<br/>You return to your world.<br/>I do think you have to endure that fact, only because you are a human of another world..."));
			npc.Msg(L("...I've called you because a good plan has come up."));
			npc.Msg(L("Do you...know about the added soul phenomenon?<br/>It is the phenomenon where the spirit doesn't go away from one's body...<br/>I thought maybe if you were to use this trick<br/>you could let your spirit stay near here."));
			npc.Msg(L("Yes... If your spirit does not go away from your fallen body and stays near it<br/>there wouldn't be such a thing as having to resurrect back from the world you were in<br/>even if you were to lose the freedom of your body."));
			npc.Msg(L("But... dealing with spirits is also a dangerous thing...<br/>With the slightest provocation you can turn into one of those zombies behind the graveyard..."));
			npc.Msg(L("...So, I'll have to see if my thoughts are correct.<br/>If you knock down the spiritless zombies<br/>I will measure the added soul phenomenon that happens around the zombies<br/>and see if you can resurrect in this place."));
			npc.Msg(L("What do you think? Would you like to give it a try?"));

			return HookResult.Break;
		}
		else if (npc.QuestActive(this.Id, "talk2"))
		{
			npc.CompleteQuest(this.Id);

			npc.RemoveKeyword("g1_37_1");
			npc.GiveKeyword("g1_bind");

			npc.Msg(L("It's just as I'd thought. We can use the added soul phenomenon<br/>and have your spirit stay here.<br/>If you believe me, from now on,<br/>you won't ever be an undead even if you collapse here."));
			npc.Msg(L("...Yes. My body and soul<br/>are exchanging with you the amount of strength<br/>you need to resurrect here..."));
			npc.Msg(L("Oh no... Are you uncomfortable about exchanging such things with me?<br/>Ha ha, no need to act calm.<br/>But..."));
			npc.Msg(L("Even when you can't move<br/>you can come near me.<br/>You will make it through this world with more ease if you remember this."));

			return HookResult.Break;
		}

		return HookResult.Continue;
	}
Esempio n. 8
0
    public async Task <HookResult> DougalAfterIntro(NpcScript npc, params object[] args)
    {
        if (!npc.HasQuest(this.Id) && !npc.HasKeyword("g1_37_1"))
        {
            npc.SendOwl(this.Id, OwlDelay);
            npc.GiveKeyword("g1_37_1");

            npc.Msg(L("You're quite brave to come to a place like this. I'm Dougal.<br/>I'm here... alone."));
            npc.Msg(L("I see that you're not from around here.<br/>I'm Dougal, the last remaining human here.<br/>I was pretty lonely. It's been a while since I've seen anyone."));
            npc.Msg(L("Why am I left here alone?<br/>It's complicated, but I didn't stay behind<br/>because I wanted to."));
            npc.Msg(L("..."));
            npc.Msg(L("What?<br/>This is Tir Na Nog?<br/>You mean the legendary paradise, Tir Na Nog?"));
            npc.Msg(L("Hah!<br/>Hahaha. I didn't expect to hear such a foolish statement from you."));
            npc.Msg(L("Look, if this truly is Tir Na Nog, the world where sickness and death don't exist,<br/>why would I have a leg like this?"));
            npc.Msg(L("Also, this town has turned into a wasteland<br/>after being invaded by the Fomors."));
            npc.Msg(L("You probably heard a false rumor somewhere.<br/>I'm sorry but this isn't the place you think it is."));
            npc.Msg(L("This is just another world that has become a land of the Fomors."));
            npc.Msg(L("But since you're here, take a look<br/>around as much as you want.<br/>Who knows?<br/>You might find this place similar to a place<br/>you are familiar with. Haha."));

            return(HookResult.Break);
        }
        else if (npc.QuestActive(this.Id, "talk1"))
        {
            npc.FinishQuest(this.Id, "talk1");

            npc.Msg(L("You've come... I was waiting for you.<br/>Because you're not from around here,<br/>I thought that losing the freedom of your body<br/>might end up getting you into big trouble."));
            npc.Msg(L("...True... Nobody but your party can help you<br/>in here.<br/>Even if your life ends and you pass away..."));
            npc.Msg(L("When you can't move...<br/>You return to your world.<br/>I do think you have to endure that fact, only because you are a human of another world..."));
            npc.Msg(L("...I've called you because a good plan has come up."));
            npc.Msg(L("Do you...know about the added soul phenomenon?<br/>It is the phenomenon where the spirit doesn't go away from one's body...<br/>I thought maybe if you were to use this trick<br/>you could let your spirit stay near here."));
            npc.Msg(L("Yes... If your spirit does not go away from your fallen body and stays near it<br/>there wouldn't be such a thing as having to resurrect back from the world you were in<br/>even if you were to lose the freedom of your body."));
            npc.Msg(L("But... dealing with spirits is also a dangerous thing...<br/>With the slightest provocation you can turn into one of those zombies behind the graveyard..."));
            npc.Msg(L("...So, I'll have to see if my thoughts are correct.<br/>If you knock down the spiritless zombies<br/>I will measure the added soul phenomenon that happens around the zombies<br/>and see if you can resurrect in this place."));
            npc.Msg(L("What do you think? Would you like to give it a try?"));

            return(HookResult.Break);
        }
        else if (npc.QuestActive(this.Id, "talk2"))
        {
            npc.CompleteQuest(this.Id);

            npc.RemoveKeyword("g1_37_1");
            npc.GiveKeyword("g1_bind");

            npc.Msg(L("It's just as I'd thought. We can use the added soul phenomenon<br/>and have your spirit stay here.<br/>If you believe me, from now on,<br/>you won't ever be an undead even if you collapse here."));
            npc.Msg(L("...Yes. My body and soul<br/>are exchanging with you the amount of strength<br/>you need to resurrect here..."));
            npc.Msg(L("Oh no... Are you uncomfortable about exchanging such things with me?<br/>Ha ha, no need to act calm.<br/>But..."));
            npc.Msg(L("Even when you can't move<br/>you can come near me.<br/>You will make it through this world with more ease if you remember this."));

            return(HookResult.Break);
        }

        return(HookResult.Continue);
    }
Esempio n. 9
0
    private void LassarFinish(NpcScript npc)
    {
        npc.RemoveKeyword("g1_black_rose");
        npc.RemoveKeyword("g1_17_3");
        npc.RemoveKeyword("g1_17_4");
        npc.GiveKeyword("g1_17_5");

        npc.RemoveItem(HolyWater);
        npc.Notice(L("You have given Holy Water of Lymilark to Lassar."));

        npc.SendOwl(210023, OwlDelay);         // Receive the Requested Object

        npc.Msg(L("Yes, this should be enough.<br/>It's almost ready. Once it forms the proper shape, I'll let you know via an owl. Hahaha.<br/>Owls don't fly into buildings so<br/>don't forget to check the sky outside."));
        npc.Msg(L("Now, will you excuse me?"));
    }
Esempio n. 10
0
    public async Task <HookResult> AeiraAfterIntro(NpcScript npc, params object[] args)
    {
        if (npc.QuestActive(this.Id, "talk_aeira"))
        {
            npc.CompleteQuest(this.Id);
            npc.SendOwl(210008, OwlDelay2);             // Find the Book of Revenge, Vol. III

            npc.Msg(L("Since you're looking for volume 3, I'm guessing you already<br/>found volume 2? I'm afraid I haven't heard anything about volume 3 just yet."));
            npc.Msg(L("It's turning out to be a lot harder to find the last volume.<br/>My distributor has been absolutely useless, and Eavan says<br/>she hasn't come across such a book. Even Leslie says she<br/>doesn't know anything. Same with Stewart."));
            npc.Msg(L("I've asked everywhere, but I don't know how long it will take.<br/>I'm afraid you're going to have to be patient. But even if<br/>you're patient, I just don't have any confidence that I'll<br/>be able to find it..."));

            return(HookResult.Break);
        }

        return(HookResult.Continue);
    }
    public async Task <HookResult> KristellAfterIntro(NpcScript npc, params object[] args)
    {
        if (npc.QuestActive(this.Id, "talk_kristell"))
        {
            npc.CompleteQuest(this.Id);
            npc.SendOwl(210009, OwlDelay);             // Receive the Book of Revenge, Vol. III.

            npc.RemoveItem(BookOfRevenge3);
            npc.Notice(L("You have given the Book of Revenge, Vol. III to Kristell."));

            npc.Msg(L("You really did bring the Book of Fomors...<br/>Volume 3 is indeed the last in the series."));
            npc.Msg(L("I knew you could get the job done.<br/>I'll let you know when my translation is complete."));

            return(HookResult.Break);
        }

        return(HookResult.Continue);
    }
Esempio n. 12
0
	public async Task<HookResult> KristellAfterIntro(NpcScript npc, params object[] args)
	{
		if (!npc.QuestActive(this.Id) || !npc.HasItem(BookOfFomor))
			return HookResult.Continue;

		npc.CompleteQuest(this.Id);
		npc.SendOwl(210004, OwlDelay); // [Book of Fomors] Translation Completed

		npc.RemoveItem(BookOfFomor);
		npc.Notice(L("You have given Book of Fomors to Kristell."));

		npc.Msg(L("...Tarlach asked me...?<br/>To translate...this book for him...?"));
		npc.Msg(L("I see... This is definitely Tarlach's book...<br/>... ...Is he still living as a Druid...with his injured body and all...?<br/>Poor guy..."));
		npc.Msg(L("Okay...<br/>I will translate it..."));
		npc.Msg(L("I will contact you once the translation is completed."));

		return HookResult.Break;
	}
Esempio n. 13
0
    public async Task <HookResult> KristellAfterIntro(NpcScript npc, params object[] args)
    {
        if (!npc.QuestActive(this.Id) || !npc.HasItem(BookOfFomor))
        {
            return(HookResult.Continue);
        }

        npc.CompleteQuest(this.Id);
        npc.SendOwl(210004, OwlDelay);         // [Book of Fomors] Translation Completed

        npc.RemoveItem(BookOfFomor);
        npc.Notice(L("You have given Book of Fomors to Kristell."));

        npc.Msg(L("...Tarlach asked me...?<br/>To translate...this book for him...?"));
        npc.Msg(L("I see... This is definitely Tarlach's book...<br/>... ...Is he still living as a Druid...with his injured body and all...?<br/>Poor guy..."));
        npc.Msg(L("Okay...<br/>I will translate it..."));
        npc.Msg(L("I will contact you once the translation is completed."));

        return(HookResult.Break);
    }
Esempio n. 14
0
    public async Task <HookResult> AeiraAfterIntro(NpcScript npc, params object[] args)
    {
        if (npc.QuestActive(this.Id, "talk_aeira"))
        {
            npc.CompleteQuest(this.Id);
            npc.SendOwl(210006, OwlDelay);             // The Book of Revenge, Volume II

            npc.RemoveKeyword("g1_23");
            npc.GiveKeyword("g1_24");

            npc.Msg(L("'The Book of Revenge...?'<br/>I don't think we have a book by that title.<br/>I'm certain our distributor doesn't carry it, either.<br/>Trust me, I know all the books we carry here..."));
            npc.Msg(L("It's a 3-volume set? If you've already got the first<br/>volume, then I can't sell it to you as a set, either...<br/>I doubt they'll let me order each volume separately."));
            npc.Msg(L("It's written in the Fomor language?!<br/>I'm afraid you'll have to look elsewhere for that.<br/>It's going to be hard for a human bookseller to get such<br/>a book, don't you think?"));
            npc.Msg(L("<username/>, was it? You have quite the unique taste in books...<br/>I'll tell you what. You've piqued my interest, and I know<br/>a number of explorers and scholars. I'll ask around.<br/>If I hear anything, I'll get in touch with you."));

            return(HookResult.Break);
        }

        return(HookResult.Continue);
    }
Esempio n. 15
0
    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."));
        }
    }
Esempio n. 16
0
	private void LassarFinish(NpcScript npc)
	{
		npc.RemoveKeyword("g1_black_rose");
		npc.RemoveKeyword("g1_17_3");
		npc.RemoveKeyword("g1_17_4");
		npc.GiveKeyword("g1_17_5");

		npc.RemoveItem(HolyWater);
		npc.Notice(L("You have given Holy Water of Lymilark to Lassar."));

		npc.SendOwl(210023, OwlDelay); // Receive the Requested Object

		npc.Msg(L("Yes, this should be enough.<br/>It's almost ready. Once it forms the proper shape, I'll let you know via an owl. Hahaha.<br/>Owls don't fly into buildings so<br/>don't forget to check the sky outside."));
		npc.Msg(L("Now, will you excuse me?"));
	}
	public async Task<HookResult> KristellAfterIntro(NpcScript npc, params object[] args)
	{
		if (npc.QuestActive(this.Id, "talk_kristell"))
		{
			npc.CompleteQuest(this.Id);
			npc.SendOwl(210009, OwlDelay); // Receive the Book of Revenge, Vol. III.

			npc.RemoveItem(BookOfRevenge3);
			npc.Notice(L("You have given the Book of Revenge, Vol. III to Kristell."));

			npc.Msg(L("You really did bring the Book of Fomors...<br/>Volume 3 is indeed the last in the series."));
			npc.Msg(L("I knew you could get the job done.<br/>I'll let you know when my translation is complete."));

			return HookResult.Break;
		}

		return HookResult.Continue;
	}
Esempio n. 18
0
	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> AeiraAfterIntro(NpcScript npc, params object[] args)
	{
		if (npc.QuestActive(this.Id, "talk_aeira"))
		{
			npc.CompleteQuest(this.Id);
			npc.SendOwl(210008, OwlDelay2); // Find the Book of Revenge, Vol. III

			npc.Msg(L("Since you're looking for volume 3, I'm guessing you already<br/>found volume 2? I'm afraid I haven't heard anything about volume 3 just yet."));
			npc.Msg(L("It's turning out to be a lot harder to find the last volume.<br/>My distributor has been absolutely useless, and Eavan says<br/>she hasn't come across such a book. Even Leslie says she<br/>doesn't know anything. Same with Stewart."));
			npc.Msg(L("I've asked everywhere, but I don't know how long it will take.<br/>I'm afraid you're going to have to be patient. But even if<br/>you're patient, I just don't have any confidence that I'll<br/>be able to find it..."));

			return HookResult.Break;
		}

		return HookResult.Continue;
	}
Esempio n. 20
0
	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."));
		}
	}
Esempio n. 21
0
	public async Task<HookResult> AeiraAfterIntro(NpcScript npc, params object[] args)
	{
		if (npc.QuestActive(this.Id, "talk_aeira"))
		{
			npc.CompleteQuest(this.Id);
			npc.SendOwl(210006, OwlDelay); // The Book of Revenge, Volume II

			npc.RemoveKeyword("g1_23");
			npc.GiveKeyword("g1_24");

			npc.Msg(L("'The Book of Revenge...?'<br/>I don't think we have a book by that title.<br/>I'm certain our distributor doesn't carry it, either.<br/>Trust me, I know all the books we carry here..."));
			npc.Msg(L("It's a 3-volume set? If you've already got the first<br/>volume, then I can't sell it to you as a set, either...<br/>I doubt they'll let me order each volume separately."));
			npc.Msg(L("It's written in the Fomor language?!<br/>I'm afraid you'll have to look elsewhere for that.<br/>It's going to be hard for a human bookseller to get such<br/>a book, don't you think?"));
			npc.Msg(L("<username/>, was it? You have quite the unique taste in books...<br/>I'll tell you what. You've piqued my interest, and I know<br/>a number of explorers and scholars. I'll ask around.<br/>If I hear anything, I'll get in touch with you."));

			return HookResult.Break;
		}

		return HookResult.Continue;
	}
Esempio n. 22
0
    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."));
            }
        }
    }