/* This is the method we declared as callback for the hooks we set to * Sir Quait. It will be called whenever a player right clicks on Sir Quait * or when he whispers something to him. */ protected static void TalkToElvarTambor(DOLEvent e, object sender, EventArgs args) { // We get the player from the event arguments and check if he qualifies GamePlayer player = ((SourceEventArgs)args).Source as GamePlayer; if (player == null) { return; } // We also check if the player is already doing the quest YdeniasCrush quest = player.IsDoingQuest(typeof(YdeniasCrush)) as YdeniasCrush; elvarTambor.TurnTo(player); // The player whispered to NPC (clicked on the text inside the []) if (e == GameLivingEvent.WhisperReceive) { WhisperReceiveEventArgs wArgs = (WhisperReceiveEventArgs)args; if (quest != null) { switch (wArgs.Text) { case "Cotswold": elvarTambor.SayTo(player, "If you are traveling back that way, would you mind delivering this letter to Ydenia for me? I would be ever so appreciative."); if (quest.Step == 2) { player.GainExperience(GameLiving.eXPSource.Quest, 10, true); long money = Money.GetMoney(0, 0, 0, 2, Util.Random(50)); player.AddMoney(money, "You are awarded 2 silver and some copper!"); InventoryLogging.LogInventoryAction("(QUEST;" + quest.Name + ")", player, eInventoryActionType.Quest, money); // give letter GiveItem(elvarTambor, player, letterToYdenia); quest.Step = 3; } break; } } } }
/* This is our callback hook that will be called when the player clicks * on any button in the quest offer dialog. We check if he accepts or * declines here... */ private static void CheckPlayerAbortQuest(GamePlayer player, byte response) { YdeniasCrush quest = player.IsDoingQuest(typeof(YdeniasCrush)) as YdeniasCrush; if (quest == null) { return; } if (response == 0x00) { SendSystemMessage(player, "Good, no go out there and finish your work!"); } else { SendSystemMessage(player, "Aborting Quest " + questTitle + ". You can start over again if you want."); quest.AbortQuest(); } }
/* This is the method we declared as callback for the hooks we set to * NPC. It will be called whenever a player right clicks on NPC * or when he whispers something to him. */ protected static void TalkToYdeniaPhilpott(DOLEvent e, object sender, EventArgs args) { // We get the player from the event arguments and check if he qualifies GamePlayer player = ((SourceEventArgs)args).Source as GamePlayer; if (player == null) { return; } if (ydeniaPhilpott.CanGiveQuest(typeof(YdeniasCrush), player) <= 0) { return; } // We also check if the player is already doing the quest YdeniasCrush quest = player.IsDoingQuest(typeof(YdeniasCrush)) as YdeniasCrush; ydeniaPhilpott.TurnTo(player); // Did the player rightclick on NPC? if (e == GameObjectEvent.Interact) { if (quest == null) { // Player is not doing the quest... ydeniaPhilpott.SayTo(player, "Hello there! Are you new here? My name is Ydenia. I am a minstrel. I lost my husband two years ago in a great battle in Pennine Mountains. I was sad for a very long time, but now, I am [happy] again."); return; } else { if (quest.Step == 3) { ydeniaPhilpott.SayTo(player, "Oh! Thank you for delivering my letter for me! Did he have one in return?"); } return; } } // The player whispered to NPC (clicked on the text inside the []) else if (e == GameLivingEvent.WhisperReceive) { WhisperReceiveEventArgs wArgs = (WhisperReceiveEventArgs)args; if (quest == null) { // Do some small talk :) switch (wArgs.Text) { case "happy": ydeniaPhilpott.SayTo(player, "Oh yes! I have met someone who is very interesting. I think about him all the time when we are apart, which is often. His name is Elvar Tambor, and he is a weapons merchant in Prydwen Keep. We [met] about six months ago."); break; case "met": ydeniaPhilpott.SayTo(player, "He came to Cotswold to do some business with the other merchants here and came into the tavern for a drink. He listened to me play and then came over and talked with me when I was done. He said he would like to [write] to me"); break; case "write": ydeniaPhilpott.SayTo(player, "So we have been writing to each other ever since. I rarely get the chance to go to Prydwen Keep, so it's just easier if I send someone over there to deliver the letters for me. Say, how would you like to earn a [few silvers] and deliver this for me"); break; // If the player offered his help, we send the quest dialog now! case "few silvers": player.Out.SendQuestSubscribeCommand(ydeniaPhilpott, QuestMgr.GetIDForQuestType(typeof(YdeniasCrush)), "Will you deliver the letter to \nElvar Tambor for Ydenia?\n[Level " + player.Level + "]"); break; } } else { switch (wArgs.Text) { case "something": if (quest.Step == 4) { ydeniaPhilpott.SayTo(player, "I found this in my belongings. I don't use it anymore, so I thought you could use it. Thank you again Gwonn. You have made both of us very happy today."); quest.FinishQuest(); } break; case "abort": player.Out.SendCustomDialog("Do you really want to abort this quest, \nall items gained during quest will be lost?", new CustomDialogResponse(CheckPlayerAbortQuest)); break; } } } }