コード例 #1
0
        public static PluginCommunicationResponse Receive(IPlugin sender, string command, params object[] args)
        {
            switch (command)
            {
            case "PING":
                return(Respond("PONG"));

            case "MOVETO":
                var destination = (Vector3)args[0];
                var moveResult  = Navigator.NavigationProvider.MoveTo(destination);
                return(Respond(moveResult));

            case "COMBATMODE":
                CombatMode mode;
                if (TryGetEnum <CombatMode>(args[0], out mode))
                {
                    Logger.Log("Setting Combat Mode to {0} at request of {0}", sender.Name);
                    CombatBase.CombatMode = mode;
                    return(Respond(true));
                }
                return(Respond(false));

            case "ResetInactivity":
                Logger.Log("Resetting Gold/XP Inactivity at request of {0}", sender.Name);
                GoldInactivity.Instance.ResetCheckGold();
                XpInactivity.Instance.ResetCheckXp();
                return(Respond(true));
            }
            return(Respond(PluginCommunicationResult.InvalidCommand));
        }
コード例 #2
0
        public static void RunCleanStash()
        {
            if (!BotMain.IsRunning)
            {
                TaskDispatcher.Start(ret => CleanTask(), ret => !IsCleaning);
                return;
            }

            try
            {
                GoldInactivity.Instance.ResetCheckGold();
                XpInactivity.Instance.ResetCheckXp();

                if (!_hookInserted)
                {
                    _cleanBehavior = CreateCleanBehavior();
                    TreeHooks.Instance.InsertHook(HookName, 0, _cleanBehavior);
                    _hookInserted   = true;
                    BotMain.OnStop += bot => RemoveBehavior("Bot stopped");
                }
            }
            catch (Exception ex)
            {
                Logger.LogError("Error running clean stash: " + ex);
                RemoveBehavior("Exception");
            }
        }
コード例 #3
0
        private static void btnClick_Test1(object sender, RoutedEventArgs routedEventArgs)
        {
            try
            {
                Logger.Log("Starting");

                using (ZetaDia.Memory.AcquireFrame())
                {
                    ZetaDia.Actors.Update();

                    foreach (var item in ZetaDia.Me.Inventory.Backpack)
                    {
                        var stackHi = item.GetAttribute <int>(ActorAttributeType.ItemStackQuantityHi);
                        var stackLo = item.GetAttribute <int>(ActorAttributeType.ItemStackQuantityLo);

                        Logger.Log("Item: {0} {1} ItemStackQuantity={2} StackHi={3} StackLo={4}",
                                   item.Name, item.ACDGuid, item.ItemStackQuantity, stackHi, stackLo);
                    }
                }

                Logger.Log("Finished");
            }
            catch (Exception ex)
            {
                Logger.LogError("Exception: " + ex);
            }
        }
コード例 #4
0
        /// <summary>
        /// Updates the selected collection whenever an object is set to selected.
        /// </summary>
        /// <param name="args"></param>
        public void SyncSelectedItem(ChildElementPropertyChangedEventArgs args)
        {
            var item = args.ChildElement as LItem;

            if (item != null && args.PropertyName.ToString() == "IsSelected")
            {
                var match = _selectedItems.FirstOrDefault(i => i.Id == item.Id);
                if (match != null)
                {
                    if (!item.IsSelected)
                    {
                        // Remove
                        _selectedItems.Remove(match);
                        Logger.LogVerbose("Removed {0} ({2}) from Selected Items, NewSelectedCount={1}", item.Name, _selectedItems.Count, item.Id);
                    }
                    else
                    {
                        // Update Data
                    }
                }
                else if (match == null && item.IsSelected)
                {
                    _selectedItems.Add(item);
                    Logger.LogVerbose("Added {0} ({2}) to Selected Items, NewSelectedCount={1}", item.Name, _selectedItems.Count, item.Id);
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Decodes an export code and applies it to the current state.
        /// </summary>
        public ItemListSettings ImportFromCode(string code)
        {
            if (string.IsNullOrEmpty(code) || string.IsNullOrWhiteSpace(code))
            {
                ValidationMessage = "You must enter an import/export code";
                Logger.Log("You must enter an import/export code");
            }
            try
            {
                var decompressedXml = ExportHelper.Decompress(ExportCode);
                var newSettings     = TrinitySetting.GetSettingsInstance <ItemListSettings>(decompressedXml);

                Grouping = newSettings.Grouping;

                using (Collection.DeferRefresh())
                {
                    SelectedItems = newSettings.SelectedItems;
                    UpdateSelectedItems();
                }
            }
            catch (Exception ex)
            {
                ValidationMessage = string.Format("Error importing itemlist. {0} {1}", ex.Message, ex.InnerException);
                Logger.Log("Error importing itemlist. {0} {1}", ex.Message, ex.InnerException);
            }
            return(this);
        }
コード例 #6
0
        private static void btnClick_MassConvertRareToMagic(object sender, RoutedEventArgs routedEventArgs)
        {
            try
            {
                Logger.Log("Starting Conversion of Backpack VeiledCrystals to ArcaneDust");


                if (Trinity.Settings.Loot.Pickup.MiscItemQuality > TrinityItemQuality.Common)
                {
                    Logger.LogError("Aborting - Too dangerous to put crafting items into backpack when MiscItemQuality setting is set above common");
                    return;
                }

                var from = InventoryItemType.VeiledCrystal;
                var to   = InventoryItemType.ArcaneDust;

                if (!UIElements.TransmuteItemsDialog.IsVisible || !ConvertMaterials.CanRun(from, to))
                {
                    Logger.LogError("You need to have the cube window open and all the required materials in your backpack.");
                    return;
                }

                LastStartedConvert = DateTime.UtcNow;

                CoroutineHelper.RunCoroutine(() => ConvertMaterials.Execute(from, to), result => !ConvertMaterials.CanRun(from, to) || CheckConvertTimeout());

                Logger.Log("Finished");
            }
            catch (Exception ex)
            {
                Logger.LogError("Exception: " + ex);
            }
        }
コード例 #7
0
ファイル: ItemSort.cs プロジェクト: shmilyzxt/db-plugins
        public static void SortStash()
        {
            if (!BotMain.IsRunning)
            {
                TaskDispatcher.Start(ret => SortTask(InventorySlot.SharedStash), ret => !IsSorting);
                return;
            }

            try
            {
                GoldInactivity.Instance.ResetCheckGold();
                XpInactivity.Instance.ResetCheckXp();

                if (!_hookInserted)
                {
                    _sortBehavior = CreateSortBehavior(inventorySlot: InventorySlot.SharedStash);
                    TreeHooks.Instance.InsertHook(HookName, 0, _sortBehavior);
                    _hookInserted   = true;
                    BotMain.OnStop += bot => RemoveBehavior();
                }
            }
            catch (Exception ex)
            {
                Logger.LogError("Error running Sort stash: " + ex);
                RemoveBehavior();
            }
        }
コード例 #8
0
        public void LoadCommands()
        {
            ResetFilterCommand = new RelayCommand(parameter =>
            {
                FilterText = string.Empty;
            });

            LoadModalCommand = new RelayCommand(parameter =>
            {
                if (parameter == null)
                {
                    return;
                }

                ModalPage page;
                if (Enum.TryParse(parameter.ToString(), out page))
                {
                    if (page != ModalPage.None)
                    {
                        SelectedModalPage = page;
                        IsModalVisible    = true;
                    }

                    ExportCode = string.Empty;

                    if (page == ModalPage.Export)
                    {
                        ExportCommand.Execute(parameter);
                    }
                }

                Logger.Log("Selecting modal content... {0}", parameter.ToString());
            });

            CloseModalCommand = new RelayCommand(parameter =>
            {
                IsModalVisible = false;
            });

            ImportCommand = new RelayCommand(parameter =>
            {
                Logger.Log("Importing ItemList...");

                var oldSlected = _selectedItems.Count;

                ImportFromCode(ExportCode);

                Logger.Log("Selected Before = {0} After = {1}", oldSlected, _selectedItems.Count);

                IsModalVisible = false;
            });

            ExportCommand = new RelayCommand(parameter =>
            {
                Logger.Log("Exporting ItemList... {0}", parameter);
                ExportCode = CreateExportCode();
            });
        }
コード例 #9
0
        public static void SetCombatMode(CombatMode combatMode)
        {
            var result = Me.SendToAll("COMBATMODE", combatMode.ToString());

            foreach (var pluginCommunicationResponse in result)
            {
                Logger.LogDebug("[PluginCommunicator][" + pluginCommunicationResponse.Plugin.Name + "] Response: " + pluginCommunicationResponse.Result);
            }
        }
コード例 #10
0
ファイル: ItemSort.cs プロジェクト: shmilyzxt/db-plugins
 private static void MarkCellAsUsed(int currentRow, int currentCol, ItemWrapper i)
 {
     _usedGrid[currentCol, currentRow] = true;
     if (i.IsTwoSquareItem)
     {
         Logger.LogDebug("{0} is two squares, marking {1},{2} as used", i.Name, currentCol, currentRow + 1);
         _usedGrid[currentCol, currentRow + 1] = true;
     }
 }
コード例 #11
0
 public static bool CheckConvertTimeout()
 {
     if (DateTime.UtcNow.Subtract(LastStartedConvert).TotalSeconds > 20)
     {
         Logger.LogError("Timeout");
         return(true);
     }
     return(false);
 }
コード例 #12
0
 private static void SortBackEventHandler(object sender, RoutedEventArgs e)
 {
     try
     {
         ItemSort.SortBackpack();
     }
     catch (Exception ex)
     {
         Logger.LogError("Error sorting backpack:" + ex);
     }
 }
コード例 #13
0
 private static void LogInvalidHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         DebugUtil.LogInvalidItems();
     }
     catch (Exception ex)
     {
         Logger.LogError("Exception {0}", ex);
     }
 }
コード例 #14
0
 private static void SortStashEventHandler(object sender, RoutedEventArgs e)
 {
     try
     {
         ItemSort.SortStash();
     }
     catch (Exception ex)
     {
         Logger.LogError("Error dropping legendaries:" + ex);
     }
 }
コード例 #15
0
        /**************
         *
         * WARNING
         *
         * ALWAYS surround your RoutedEventHandlers in try/catch. Failure to do so will result in Demonbuddy CRASHING if an exception is thrown.
         *
         * WARNING
         *
         *************/

        private static void btnClick_LogRunTime(object sender, RoutedEventArgs routedEventArgs)
        {
            try
            {
                Logger.Log("Bot {0} has been running for {1} hours {2} minutes and {3} seconds", ZetaDia.CPlayer.HeroName, GameStats.Instance.RunTime.Hours, GameStats.Instance.RunTime.Minutes, GameStats.Instance.RunTime.Seconds);
            }
            catch (Exception ex)
            {
                Logger.LogError("Exception {0}", ex);
            }
        }
コード例 #16
0
 private static void DumpBuildEventHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         DebugUtil.LogBuildAndItems();
     }
     catch (Exception ex)
     {
         Logger.LogError("DumpBuildEventHandler: " + ex);
     }
 }
コード例 #17
0
 private static void CacheTestCacheEventHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         Logger.Log("Finished Cache Test");
     }
     catch (Exception ex)
     {
         Logger.LogError("Exception {0}", ex);
     }
 }
コード例 #18
0
 private static void ShowCacheWindowEventHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         CacheUI.CreateWindow();
     }
     catch (Exception ex)
     {
         Logger.LogError("Error showing CacheUI:" + ex);
     }
 }
コード例 #19
0
 private static void StopTestHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         Worker.Stop();
     }
     catch (Exception ex)
     {
         Logger.LogError("Error Starting LazyCache: " + ex);
     }
 }
コード例 #20
0
 private static void GetNewActorSNOsEventHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         DebugUtil.LogNewItems();
     }
     catch (Exception ex)
     {
         Logger.LogError("Error logging new items:" + ex);
     }
 }
コード例 #21
0
 private static void ShowMainTrinityUIEventHandler(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         var configWindow = UILoader.GetDisplayWindow();
         configWindow.ShowDialog();
     }
     catch (Exception ex)
     {
         Logger.LogError("Error showing Configuration from TabUI:" + ex);
     }
 }
コード例 #22
0
        public static async Task <bool> ReturnToStashTask()
        {
            if (ZetaDia.Me.IsInCombat)
            {
                Logger.LogDebug("Cannot return to stash while in combat");
                return(false);
            }
            if (!ZetaDia.IsInTown && ZetaDia.Me.IsFullyValid() && !ZetaDia.Me.IsInCombat && UIElements.BackgroundScreenPCButtonRecall.IsEnabled)
            {
                StartedOutOfTown = true;
                await CommonCoroutines.UseTownPortal("Returning to stash");

                return(true);
            }

            if (!GameUI.IsElementVisible(GameUI.StashDialogMainPage) && ZetaDia.IsInTown)
            {
                // Move to Stash
                if (TownRun.StashLocation.Distance2D(ZetaDia.Me.Position) > 10f)
                {
                    await MoveTo(TownRun.StashLocation, "Shared Stash");

                    return(true);
                }
                if (TownRun.StashLocation.Distance2D(ZetaDia.Me.Position) <= 10f && TownRun.SharedStash == null)
                {
                    Logger.LogError("Shared Stash actor is null!");
                    return(false);
                }

                // Open Stash
                if (TownRun.StashLocation.Distance2D(ZetaDia.Me.Position) <= 10f && TownRun.SharedStash != null && !GameUI.IsElementVisible(GameUI.StashDialogMainPage))
                {
                    while (ZetaDia.Me.Movement.IsMoving)
                    {
                        Navigator.PlayerMover.MoveStop();
                        await Coroutine.Yield();
                    }
                    Logger.Log("Opening Stash");
                    TownRun.SharedStash.Interact();
                    await Coroutine.Sleep(200);

                    await Coroutine.Yield();

                    if (GameUI.IsElementVisible(GameUI.StashDialogMainPage))
                    {
                        return(true);
                    }
                    return(true);
                }
            }
            return(true);
        }
コード例 #23
0
 private static void btnClick_TestItemList(object sender, RoutedEventArgs routedEventArgs)
 {
     try
     {
         using (new MemoryHelper())
         {
             DebugUtil.ItemListTest();
         }
     }
     catch (Exception ex)
     {
         Logger.LogError("Exception {0}", ex);
     }
 }
コード例 #24
0
        /// <summary>
        /// Updates the DisplayItems collection to match the Selected collection.
        /// </summary>
        public void UpdateSelectedItems()
        {
            if (_selectedItems == null || _displayItems == null || _collection == null || _collection.View == null || _collection.View.SourceCollection == null)
            {
                Logger.Log("Skipping UpdateSelectedItems due to Null");
                return;
            }

            // Prevent the collection from updating until outside of the using block.
            using (Collection.DeferRefresh())
            {
                var selectedDictionary = _selectedItems.DistinctBy(i => i.Id).ToDictionary(k => k.Id, v => v);
                var castView           = _collection.View.SourceCollection.Cast <LItem>();

                castView.ForEach(item =>
                {
                    // After XML settings load _selectedItems will contain LItem husks that are lacking useful information, just what was saved.
                    // We want to take the saved information and make an object that is fully populated and linked with the UI collection.

                    LItem selectedItem;

                    if (selectedDictionary.TryGetValue(item.Id, out selectedItem))
                    {
                        //if(!item.IsSelected)
                        //Logger.LogVerbose("Update: Selecting {0} ({1}) with {2} rules", item.Name, item.Id, item.Rules.Count);

                        selectedItem.Rules.ForEach(r =>
                        {
                            r.TrinityItemType = item.TrinityItemType;
                            r.ItemStatRange   = item.GetItemStatRange(r.ItemProperty);
                        });
                        item.IsSelected = true;
                        item.Rules      = selectedItem.Rules;
                        item.Ops        = selectedItem.Ops;

                        // Replacing the reference to automatically receive changes from UI.
                        _selectedItems.Remove(selectedItem);
                        _selectedItems.Add(item);
                    }
                    else
                    {
                        if (item.IsSelected)
                        {
                            Logger.LogVerbose("Update: Deselecting {0}", item.Name);
                            item.IsSelected = false;
                        }
                    }
                });
            }
        }
コード例 #25
0
        private static void btnClick_MoveToCube(object sender, RoutedEventArgs routedEventArgs)
        {
            try
            {
                Logger.Log("Starting");

                CoroutineHelper.RunCoroutine(() => Navigator.MoveTo(Town.Locations.KanaisCube));

                Logger.Log("Finished");
            }
            catch (Exception ex)
            {
                Logger.LogError("Exception: " + ex);
            }
        }
コード例 #26
0
        private static void btnClick_UpgradeRares(object sender, RoutedEventArgs routedEventArgs)
        {
            try
            {
                Logger.Log("Starting");

                CoroutineHelper.RunCoroutine(() => CubeRaresToLegendary.Execute());

                Logger.Log("Finished");
            }
            catch (Exception ex)
            {
                Logger.LogError("Exception: " + ex);
            }
        }
コード例 #27
0
        private static void btnClick_HijackTest(object sender, RoutedEventArgs routedEventArgs)
        {
            try
            {
                Logger.Log("HijackTest Started");

                CoroutineHelper.ForceRunCoroutine(() => CubeRaresToLegendary.Execute(), result => !CubeRaresToLegendary.CanRun());

                Logger.Log("HijackTest Finished");
            }
            catch (Exception ex)
            {
                Logger.LogError("Exception: " + ex);
            }
        }
コード例 #28
0
        public static async Task <bool> MoveTo(Vector3 location, string destinationName, float range = 10f)
        {
            while (ZetaDia.Me.IsFullyValid() && !ZetaDia.Me.IsInCombat && location.Distance2D(ZetaDia.Me.Position) > range)
            {
                Logger.LogVerbose("Moving to " + destinationName);
                PlayerMover.NavigateTo(location, destinationName);
                await Coroutine.Yield();
            }
            if (location.Distance2D(ZetaDia.Me.Position) <= range)
            {
                Navigator.PlayerMover.MoveStop();
            }

            return(true);
        }
コード例 #29
0
ファイル: ItemSort.cs プロジェクト: shmilyzxt/db-plugins
        internal static Tuple <int, int> FindEmptySquare(InventorySlot inventorySlot, int targetCol, int targetRow, bool isTwoSquare, bool isForward)
        {
            switch (inventorySlot)
            {
            case InventorySlot.BackpackItems:
                return(FindEmptyBackpackSquare(targetCol, targetRow, isTwoSquare, isForward));

            case InventorySlot.SharedStash:
                return(FindEmptyStashSquare(targetCol, targetRow, isTwoSquare, isForward));

            default:
                Logger.LogError("Invalid location to find empty slot: {0}", inventorySlot);
                return(new Tuple <int, int>(-1, -1));
            }
        }
コード例 #30
0
ファイル: SkillUtils.cs プロジェクト: shmilyzxt/db-plugins
        /// <summary>
        /// Fast lookup for a Skill by SNOPower
        /// </summary>
        public static Skill ById(SNOPower power)
        {
            if (!_allSkillBySnoPower.Any())
            {
                _allSkillBySnoPower = All.ToDictionary(s => s.SNOPower, s => s);
            }

            Skill skill;
            var   result = _allSkillBySnoPower.TryGetValue(power, out skill);

            if (!result)
            {
                Logger.LogDebug("Unable to find skill for power {0}", power);
            }
            return(result ? skill : new Skill());
        }