public override void OnFinished() { // NB: we don't unhook _behaviorTreeHook_Main // This was installed when HB created the behavior, and its up to HB to unhook it if (_behaviorTreeHook_CombatMain != null) { TreeHooks.Instance.RemoveHook("Combat_Main", _behaviorTreeHook_CombatMain); _behaviorTreeHook_CombatMain = null; } if (_behaviorTreeHook_CombatOnly != null) { TreeHooks.Instance.RemoveHook("Combat_Only", _behaviorTreeHook_CombatOnly); _behaviorTreeHook_CombatOnly = null; } if (_behaviorTreeHook_DeathMain != null) { TreeHooks.Instance.RemoveHook("Death_Main", _behaviorTreeHook_DeathMain); _behaviorTreeHook_DeathMain = null; } if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } BlackspotManager.RemoveBlackspots(Blackspots); TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; base.OnFinished(); }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { _configMemento = new ConfigMemento(); // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; ProfileManager.CurrentProfile.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; var mob = ObjectManager.GetObjectsOfType <WoWUnit>() .FirstOrDefault(unit => unit.Entry == MobId); this.UpdateGoalText(QuestId, "Escorting " + ((mob != null) ? mob.SafeName : ("Mob(" + MobId + ")"))); } }
public void Dispose(bool isExplicitlyInitiatedDispose) { if (!_isDisposed) { // NOTE: we should call any Dispose() method for any managed or unmanaged // resource, if that resource provides a Dispose() method. // Clean up managed resources, if explicit disposal... if (isExplicitlyInitiatedDispose) { // empty, for now } // Clean up unmanaged resources (if any) here... if (_configMemento != null) { _configMemento.Dispose(); } _configMemento = null; BotEvents.OnBotStop -= BotEvents_OnBotStop; BotEvents.Player.OnPlayerDied -= Player_OnPlayerDied; Targeting.Instance.RemoveTargetsFilter -= Instance_RemoveTargetsFilter; TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; // Call parent Dispose() (if it exists) here ... base.Dispose(); } _isDisposed = true; }
public override void OnStart() { PlayerQuest quest = StyxWoW.Me.QuestLog.GetQuestById((uint)QuestId); if ((QuestId != 0) && (quest == null)) { QBCLog.Error("This behavior has been associated with QuestId({0}), but the quest is not in our log", QuestId); IsAttributeProblem = true; } // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { _configMemento = new ConfigMemento(); // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.PullDistance = 25; GlobalSettings.Instance.KillBetweenHotspots = true; _behaviorTreeCombatHook = CreateCombatBehavior(); TreeHooks.Instance.InsertHook("Combat_Only", 0, _behaviorTreeCombatHook); this.UpdateGoalText(QuestId); } }
public void Dispose(bool isExplicitlyInitiatedDispose) { if (!_isDisposed) { // NOTE: we should call any Dispose() method for any managed or unmanaged // resource, if that resource provides a Dispose() method. // Clean up managed resources, if explicit disposal... if (isExplicitlyInitiatedDispose) { if (_configMemento != null) { _configMemento.Dispose(); } _configMemento = null; } // Clean up unmanaged resources (if any) here... BotEvents.OnBotStop -= BotEvents_OnBotStop; // Call parent Dispose() (if it exists) here ... base.Dispose(); } _isDisposed = true; }
public override void OnFinished() { if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; base.OnFinished(); }
public override void OnStart() { PlayerQuest quest = StyxWoW.Me.QuestLog.GetQuestById((uint)QuestId); if ((QuestId != 0) && (quest == null)) { QBCLog.Error("This behavior has been associated with QuestId({0}), but the quest is not in our log", QuestId); IsAttributeProblem = true; } // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // We need to move off boat after quest is complete, so we can't use "quest complete" // as part of the normal IsDone criteria for this behavior. So, we explicitly check for // quest complete here, and set IsDone appropriately. if (!UtilIsProgressRequirementsMet(QuestId, QuestRequirementInLog, QuestRequirementComplete)) { _isBehaviorDone = true; } // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { _configMemento = new ConfigMemento(); // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; BlackspotManager.AddBlackspots(Blackspots); State_MainBehavior = StateType_MainBehavior.AssigningTask; _behaviorTreeHook_CombatMain = CreateBehavior_CombatMain(); TreeHooks.Instance.InsertHook("Combat_Main", 0, _behaviorTreeHook_CombatMain); _behaviorTreeHook_CombatOnly = CreateBehavior_CombatOnly(); TreeHooks.Instance.InsertHook("Combat_Only", 0, _behaviorTreeHook_CombatOnly); _behaviorTreeHook_DeathMain = CreateBehavior_DeathMain(); TreeHooks.Instance.InsertHook("Death_Main", 0, _behaviorTreeHook_DeathMain); this.UpdateGoalText(QuestId); } }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.OnBotStop += BotEvents_OnBotStop; // We don't want the bot running around harvesting while the user // is manually controlling it trying to get the task completed. // (We've already captured the existing configuration which will // be restored when this behavior exits, or the bot is stopped. // So there are no worries about destroying user's configuration.) CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; _completionToken = new AsyncCompletionToken(StyxWoW.Me.Name, DialogTitle, DialogText, ExpiryActionName, ExpiryTime, IsBotStopAllowed, IsStopOnContinue, SoundCue, SoundCueIntervalInSeconds); TreeRoot.GoalText = "User Attention Required..."; TreeRoot.StatusText = "Waiting for user dialog to close"; } }
public override void OnStart() { PlayerQuest quest = StyxWoW.Me.QuestLog.GetQuestById((uint)QuestId); if ((QuestId != 0) && (quest == null)) { QBCLog.Error("This behavior has been associated with QuestId({0}), but the quest is not in our log", QuestId); IsAttributeProblem = true; } // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { _configMemento = new ConfigMemento(); // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; // CharacterSettings.Instance.PullDistance = 1; // don't pull anything unless we absolutely must BlackspotManager.AddBlackspots(Blackspots); State_MainBehavior = StateType_MainBehavior.DroppingOffVictim; _behaviorTreeHook_CombatMain = CreateBehavior_CombatMain(); TreeHooks.Instance.InsertHook("Combat_Main", 0, _behaviorTreeHook_CombatMain); _behaviorTreeHook_CombatOnly = CreateBehavior_CombatOnly(); TreeHooks.Instance.InsertHook("Combat_Only", 0, _behaviorTreeHook_CombatOnly); _behaviorTreeHook_DeathMain = CreateBehavior_DeathMain(); TreeHooks.Instance.InsertHook("Death_Main", 0, _behaviorTreeHook_DeathMain); this.UpdateGoalText(QuestId); } }
public override void OnFinished() { if (_behaviorTreeCombatHook != null) { TreeHooks.Instance.RemoveHook("Combat_Only", _behaviorTreeCombatHook); } if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; base.OnFinished(); }
public override void OnFinished() { if (_completionToken != null) { _completionToken.Dispose(); _completionToken = null; } if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } UserDialogExitProcessing(PopdownReason.UNKNOWN); TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; base.OnFinished(); }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.OnBotStop += BotEvents_OnBotStop; // Disable any settings that may cause distractions -- // When we use transport, we don't want to be distracted by other things. // We also set PullDistance to its minimum value. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; CharacterSettings.Instance.PullDistance = 1; PlayerQuest quest = StyxWoW.Me.QuestLog.GetQuestById((uint)QuestId); TreeRoot.GoalText = this.GetType().Name + ": " + ((!string.IsNullOrEmpty(DestName)) ? DestName : (quest != null) ? ("\"" + quest.Name + "\"") : "In Progress"); } }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.OnBotStop += BotEvents_OnBotStop; // Disable any settings that may cause us to dismount -- // When we mount for travel via FlyTo, we don't want to be distracted by other things. // We also set PullDistance to its minimum value. If we don't do this, HB will try // to dismount and engage a mob if it is within its normal PullDistance. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; CharacterSettings.Instance.PullDistance = 1; TreeRoot.GoalText = "Flying to " + DestinationName; // This information was directly requested by profile writers... LogMessage("debug", "Flying to '{0}': {1}.", DestinationName, Destination); } }
public override void OnFinished() { // NB: we don't unhook _behaviorTreeHook_Main // This was installed when HB created the behavior, and its up to HB to unhook it if (_behaviorTreeHook_Combat != null) { TreeHooks.Instance.RemoveHook("Combat_Main", _behaviorTreeHook_Combat); _behaviorTreeHook_Combat = null; } if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; base.OnFinished(); }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { _configMemento = new ConfigMemento(); // We don't want the bot running around harvesting while the user // is manually controlling it trying to get the task completed. // (We've already captured the existing configuration which will // be restored when this behavior exits, or the bot is stopped. // So there are no worries about destroying user's configuration.) CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; ProfileManager.CurrentProfile.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; _completionToken = new AsyncCompletionToken(StyxWoW.Me.Name, DialogTitle, DialogText, ExpiryActionName, ExpiryTime, IsBotStopAllowed, IsStopOnContinue, SoundCue, SoundCueIntervalInSeconds); this.UpdateGoalText(QuestId, "User Attention Required..."); TreeRoot.StatusText = "Waiting for user dialog to close"; } }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.OnBotStop += BotEvents_OnBotStop; // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; WoWUnit mob = ObjectManager.GetObjectsOfType <WoWUnit>() .Where(unit => MobId.Contains((int)unit.Entry)) .FirstOrDefault(); TreeRoot.GoalText = "Escorting " + ((mob != null) ? mob.Name : ("Mob(" + MobId + ")")); } }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.Player.OnPlayerDied += Player_OnPlayerDied; BotEvents.OnBotStop += BotEvents_OnBotStop; Targeting.Instance.RemoveTargetsFilter += Instance_RemoveTargetsFilter; // Disable any settings that may cause distractions -- // When we do this quest, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; CharacterSettings.Instance.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; CharacterSettings.Instance.RessAtSpiritHealers = true; TreeRoot.GoalText = this.GetType().Name + ": In Progress"; } }
public /*virtual*/ void Dispose(bool isExplicitlyInitiatedDispose) { if (!_isDisposed) { // NOTE: we should call any Dispose() method for any managed or unmanaged // resource, if that resource provides a Dispose() method. // Clean up managed resources, if explicit disposal... if (isExplicitlyInitiatedDispose) { // empty, for now } // Clean up unmanaged resources (if any) here... if (_completionToken != null) { _completionToken.Dispose(); } if (_configMemento != null) { _configMemento.Dispose(); } _completionToken = null; _configMemento = null; BotEvents.OnBotStop -= BotEvents_OnBotStop; TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; // Call parent Dispose() (if it exists) here ... base.Dispose(); } _isDisposed = true; }
public override void OnStart() { QuestBehaviorBase.UsageCheck_ScheduledForDeprecation(this, "EscortGroup"); // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { _configMemento = new ConfigMemento(); // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. CharacterSettings.Instance.HarvestHerbs = false; CharacterSettings.Instance.HarvestMinerals = false; CharacterSettings.Instance.LootChests = false; ProfileManager.CurrentProfile.LootMobs = false; CharacterSettings.Instance.NinjaSkin = false; CharacterSettings.Instance.SkinMobs = false; var mobNames = (from mob in ObjectManager.GetObjectsOfType <WoWUnit>() where ObjectId.Contains((int)mob.Entry) let mobName = Utility.GetObjectNameFromId((int)mob.Entry) orderby mobName select mobName) .Distinct(); this.UpdateGoalText(QuestId, string.Format("Escorting {0}", string.Join(", ", mobNames))); } }
public void Dispose(bool isExplicitlyInitiatedDispose) { if (!_isDisposed) { // NOTE: we should call any Dispose() method for any managed or unmanaged // resource, if that resource provides a Dispose() method. // Clean up managed resources, if explicit disposal... if (isExplicitlyInitiatedDispose) { // empty, for now } // Clean up unmanaged resources (if any) here... if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } BotEvents.OnBotStop -= BotEvents_OnBotStop; TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; // Call parent Dispose() (if it exists) here ... base.Dispose(); } _isDisposed = true; }
public override void OnStart() { // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.OnBotStop += BotEvents_OnBotStop; // Disable any settings that may interfere with the escort -- // When we escort, we don't want to be distracted by other things. // NOTE: these settings are restored to their normal values when the behavior completes // or the bot is stopped. LevelbotSettings.Instance.HarvestHerbs = false; LevelbotSettings.Instance.HarvestMinerals = false; LevelbotSettings.Instance.LootChests = false; LevelbotSettings.Instance.LootMobs = false; LevelbotSettings.Instance.NinjaSkin = false; LevelbotSettings.Instance.SkinMobs = false; WoWUnit mob = ObjectManager.GetObjectsOfType<WoWUnit>() .Where(unit => unit.Entry == MobId) .FirstOrDefault(); TreeRoot.GoalText = "Escorting " + ((mob != null) ? mob.Name : ("Mob(" + MobId + ")")); } }
public override void OnStart() { // We needed to defer this from constructor due to lack of Element (location) information... CheckPhrases(); // Check locale if (!SupportedLocales.Contains(_wowClientLocale) && !SupportedLocales.Contains("*") /*any locale*/) { LogMessage("fatal", "This profile does not support the locale of your WoWClient ({0})," + " and will be unable to continue. Supported locales include: {1}.\n" + "Your choices are:\n" + " 1) complete Quest \"{2}\" by hand, and restart the profile after its complete, or\n" + " 2) Ask the profile writer to support your WoWclient's locale ({0})", _wowClientLocale, ("'" + string.Join("', '", SupportedLocales) + "'"), QuestName); IsAttributeProblem = true; } // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); CharacterSettings.Instance.PullDistance = 1; TreeRoot.GoalText = this.GetType().Name + ": " + QuestName; _isBehaviorInProgress = true; GuiShowProgress(null); } }
// 24Feb2013-08:10UTC chinajade protected void Dispose(bool isExplicitlyInitiatedDispose) { if (!_isDisposed) { // NOTE: we should call any Dispose() method for any managed or unmanaged // resource, if that resource provides a Dispose() method. // Clean up managed resources, if explicit disposal... if (isExplicitlyInitiatedDispose) { // empty, for now } // Clean up unmanaged resources (if any) here... // NB: we don't unhook _behaviorTreeHook_Main // This was installed when HB created the behavior, and its up to HB to unhook it if (_behaviorTreeHook_CombatMain != null) { TreeHooks.Instance.RemoveHook("Combat_Main", _behaviorTreeHook_CombatMain); _behaviorTreeHook_CombatMain = null; } if (_behaviorTreeHook_CombatOnly != null) { TreeHooks.Instance.RemoveHook("Combat_Only", _behaviorTreeHook_CombatOnly); _behaviorTreeHook_CombatOnly = null; } if (_behaviorTreeHook_DeathMain != null) { TreeHooks.Instance.RemoveHook("Death_Main", _behaviorTreeHook_DeathMain); _behaviorTreeHook_DeathMain = null; } BotEvents.OnBotStop -= BotEvents_OnBotStop; // Restore configuration... if (_configMemento != null) { _configMemento.Dispose(); _configMemento = null; } TreeRoot.GoalText = string.Empty; TreeRoot.StatusText = string.Empty; BehaviorLoggingContext = null; base.Dispose(); } _isDisposed = true; }
/// <summary> /// <para>This reports problems, and stops BT processing if there was a problem with attributes... /// We had to defer this action, as the 'profile line number' is not available during the element's /// constructor call.</para> /// <para>It also captures the user's configuration, and installs Behavior Tree hooks. The items will /// be restored when the behavior terminates, or Honorbuddy is stopped.</para> /// </summary> /// <param name="extraGoalTextDescription"></param> protected void OnStart_QuestBehaviorCore(string extraGoalTextDescription = null) { UsageCheck_SemanticCoherency(Element, ((QuestObjectiveIndex > 0) && (QuestId <= 0)), context => string.Format("QuestObjectiveIndex of '{0}' specified, but no corresponding QuestId provided", QuestObjectiveIndex)); EvaluateUsage_SemanticCoherency(Element); // Deprecated attributes... // TODO: Do this later, after we've made a sweep through Kick's profiles... EvaluateUsage_DeprecatedAttributes(Element); // This reports problems, and stops BT processing if there was a problem with attributes... // We had to defer this action, as the 'profile line number' is not available during the element's // constructor call. OnStart_HandleAttributeProblem(); // If the quest is complete, this behavior is already done... // So we don't want to falsely inform the user of things that will be skipped. if (!IsDone) { // The ConfigMemento() class captures the user's existing configuration. // After its captured, we can change the configuration however needed. // When the memento is dispose'd, the user's original configuration is restored. // More info about how the ConfigMemento applies to saving and restoring user configuration // can be found here... // http://www.thebuddyforum.com/mediawiki/index.php?title=Honorbuddy_Programming_Cookbook:_Saving_and_Restoring_User_Configuration _configMemento = new ConfigMemento(); BotEvents.OnBotStop += BotEvents_OnBotStop; PlayerQuest quest = StyxWoW.Me.QuestLog.GetQuestById((uint)QuestId); TreeRoot.GoalText = string.Format( "{1}: \"{2}\"{0}{3}{0}{0}{4}", Environment.NewLine, GetType().Name, ((quest != null) ? string.Format("\"{0}\" (QuestId: {1})", quest.Name, QuestId) : "In Progress (no associated quest)"), (extraGoalTextDescription ?? string.Empty), GetProfileReference(Element)); _behaviorTreeHook_CombatMain = new ExceptionCatchingWrapper(this, CreateBehavior_CombatMain()); TreeHooks.Instance.InsertHook("Combat_Main", 0, _behaviorTreeHook_CombatMain); _behaviorTreeHook_CombatOnly = new ExceptionCatchingWrapper(this, CreateBehavior_CombatOnly()); TreeHooks.Instance.InsertHook("Combat_Only", 0, _behaviorTreeHook_CombatOnly); _behaviorTreeHook_DeathMain = new ExceptionCatchingWrapper(this, CreateBehavior_DeathMain()); TreeHooks.Instance.InsertHook("Death_Main", 0, _behaviorTreeHook_DeathMain); } }