Exemplo n.º 1
0
    public void RemoveTarget(RemoveTarget rpc)
    {
        var pair = _targets.Find(t => t.target.networkID == rpc.targetID);

        if (pair != null)
        {
            _targets.Remove(pair);
        }
    }
Exemplo n.º 2
0
        partial void InitializeAutoCombat()
        {
            var game = Locator.Current.GetService <GameModel>();

            SearchBehavior = AutoCombatSearchBehavior.SearchAndDestroy;
            NearbyMonsters = new ReactiveList <string>();
            TargetList     = new ReactiveList <string>();
            TargetList.CountChanged.Subscribe(_ => TargetList.Sort());

            var canRefreshNearbyMonsters = game.WhenAnyValue(x => x.Status, x => x == GameStatus.LoggedIn);

            RefreshNearbyMonsters = ReactiveCommand.CreateAsyncTask(canRefreshNearbyMonsters, async _ =>
            {
                var names = await Task.Run(() =>
                {
                    return(new NpcContainer(game.Game).GetItems()
                           .Where(x => x.NpcType.Value == NpcType.Monster)
                           .Select(x => x.Name.Value.Value)
                           .Distinct());
                });

                return(names);
            });
            RefreshNearbyMonsters.Subscribe(results =>
            {
                NearbyMonsters.Clear();
                foreach (var item in results)
                {
                    NearbyMonsters.Add(item);
                }
            });

            AddTarget = ReactiveCommand.Create();
            AddTarget.Subscribe(x =>
            {
                var name = (string)x;

                if (!TargetList.Contains(name))
                {
                    TargetList.Add(name);
                }
            });

            var canClearTargetList = TargetList.CountChanged.Select(x => x != 0);

            ClearTargetList = ReactiveCommand.Create(canClearTargetList);
            ClearTargetList.Subscribe(_ => TargetList.Clear());

            RemoveTarget = ReactiveCommand.Create();
            RemoveTarget.Subscribe(name => TargetList.Remove((string)name));

#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
            var dialogService       = Locator.Current.GetService <IDialogService>();
            var canExportTargetList = TargetList.CountChanged.Select(x => x != 0);
            ExportTargetList = ReactiveCommand.CreateAsyncTask(canExportTargetList, async _ =>
            {
                var dialog = new SaveFileDialog()
                {
                    Filter = TargetListFileFormat
                };
                if (dialog.ShowDialog() == false)
                {
                    return;
                }

                var serializer = new XmlSerializer(typeof(List <string>));
                using (var stream = dialog.OpenFile())
                    serializer.Serialize(stream, TargetList.ToList());
            });
            ExportTargetList.ThrownExceptions.Subscribe(async e => await dialogService.DisplayExceptionAsyncOn <SettingViewModel>(e));

            ImportTargetList = ReactiveCommand.CreateAsyncTask(async _ =>
            {
                var dialog = new OpenFileDialog()
                {
                    Filter = TargetListFileFormat
                };
                if (dialog.ShowDialog() == false)
                {
                    return;
                }

                if (TargetList.Any())
                {
                    var result = await dialogService.ShowMessageDialogAsyncOn <SettingViewModel>("Confirmation",
                                                                                                 "Do you wish to merge the current list with this list?",
                                                                                                 "Merge them",
                                                                                                 "Keep new list",
                                                                                                 "Cancel, keep current list");
                    switch (result)
                    {
                    case DialogResult.Affirmative:
                        break;

                    case DialogResult.Negative:
                        TargetList.Clear();
                        break;

                    case DialogResult.FirstAuxiliary:
                        return;
                    }
                }

                var serializer = new XmlSerializer(typeof(List <string>));
                using (var stream = dialog.OpenFile())
                {
                    var list = serializer.Deserialize(stream) as List <string>;
                    foreach (var item in list)
                    {
                        if (!TargetList.Contains(item))
                        {
                            TargetList.Add(item);
                        }
                    }
                }
            });
            ImportTargetList.ThrownExceptions.Subscribe(async e => await dialogService.DisplayExceptionAsyncOn <SettingViewModel>(e));
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        }