public virtual Mobile GetEscorter() { Mobile master = ControlMaster; if (master == null || !Controlled) { return(master); } else if (master.Map != Map || !master.InRange(Location, 30) || !master.Alive) { TimeSpan lastSeenDelay = DateTime.UtcNow - LastSeenEscorter; if (lastSeenDelay >= TimeSpan.FromMinutes(2.0)) { EscortObjective escort = GetObjective(); if (escort != null) { master.SendLocalizedMessage(1071194); // You have failed your escort quest… master.PlaySound(0x5B3); escort.Fail(); } master.SendLocalizedMessage(1042473); // You have lost the person you were escorting. Say(1005653); // Hmmm. I seem to have lost my master. StopFollow(); m_EscortTable.Remove(master); m_DeleteTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerCallback(Delete)); return(null); } else { ControlOrder = OrderType.Stay; } } else { if (ControlOrder != OrderType.Follow) { StartFollow(master); } LastSeenEscorter = DateTime.UtcNow; } return(master); }
public virtual EscortObjective GetObjective() { if (Quest != null) { for (int i = 0; i < Quest.Objectives.Count; i++) { EscortObjective escort = Quest.Objectives[i] as EscortObjective; if (escort != null && !escort.Completed && !escort.Failed) { return(escort); } } } return(null); }
public virtual bool CheckAtDestination() { if (Quest != null) { EscortObjective escort = GetObjective(); if (escort == null) { return(false); } Mobile escorter = GetEscorter(); if (escorter == null) { return(false); } if (escort.Region != null && escort.Region.Contains(Location)) { Say(1042809, escorter.Name); // We have arrived! I thank thee, ~1_PLAYER_NAME~! I have no further need of thy services. Here is thy pay. escort.Complete(); if (Quest.Completed) { escorter.SendLocalizedMessage(1046258, null, 0x23); // Your quest is complete. if (QuestHelper.AnyRewards(Quest)) { escorter.SendGump(new MondainQuestGump(Quest, MondainQuestGump.Section.Rewards, false, true)); } else { Quest.GiveRewards(); } escorter.PlaySound(Quest.CompleteSound); StopFollow(); m_EscortTable.Remove(escorter); m_DeleteTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerCallback(Delete)); // fame Misc.Titles.AwardFame(escorter, escort.Fame, true); // compassion bool gainedPath = false; PlayerMobile pm = escorter as PlayerMobile; if (pm != null) { if (pm.CompassionGains > 0 && DateTime.UtcNow > pm.NextCompassionDay) { pm.NextCompassionDay = DateTime.MinValue; pm.CompassionGains = 0; } if (pm.CompassionGains >= 5) // have already gained 5 times in one day, can gain no more { pm.SendLocalizedMessage(1053004); // You must wait about a day before you can gain in compassion again. } else if (VirtueHelper.Award(pm, VirtueName.Compassion, escort.Compassion, ref gainedPath)) { pm.SendLocalizedMessage(1074949, null, 0x2A); // You have demonstrated your compassion! Your kind actions have been noted. if (gainedPath) { pm.SendLocalizedMessage(1053005); // You have achieved a path in compassion! } else { pm.SendLocalizedMessage(1053002); // You have gained in compassion. } pm.NextCompassionDay = DateTime.UtcNow + TimeSpan.FromDays(1.0); // in one day CompassionGains gets reset to 0 ++pm.CompassionGains; } else { pm.SendLocalizedMessage(1053003); // You have achieved the highest path of compassion and can no longer gain any further. } } } else { escorter.PlaySound(Quest.UpdateSound); } return(true); } } else if (!m_Checked) { Region region = GetDestination(); if (region != null && region.Contains(Location)) { m_DeleteTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerCallback(Delete)); m_Checked = true; } } return(false); }