Example #1
0
        public void ExportData(WillowTwoPlayerSaveGame saveGame, Platform platform)
        {
            saveGame.PackedWeaponData.Clear();
            saveGame.PackedItemData.Clear();

            foreach (var viewModel in this.Slots)
            {
                var slot = viewModel.BackpackSlot;

                if (slot is BackpackWeapon)
                {
                    var weapon = (BackpackWeapon)slot;
                    var data   = BackpackDataHelper.Encode(weapon, platform);

                    saveGame.PackedWeaponData.Add(new PackedWeaponData()
                    {
                        InventorySerialNumber = data,
                        QuickSlot             = weapon.QuickSlot,
                        Mark = weapon.Mark,
                    });
                }
                else if (slot is BackpackItem)
                {
                    var item = (BackpackItem)slot;
                    var data = BackpackDataHelper.Encode(item, platform);

                    saveGame.PackedItemData.Add(new PackedItemData()
                    {
                        InventorySerialNumber = data,
                        Quantity = item.Quantity,
                        Equipped = item.Equipped,
                        Mark     = (int)item.Mark,
                    });
                }
                else
                {
                    throw new NotSupportedException();
                }
            }

            this._BrokenWeapons.ForEach(kv => saveGame.PackedWeaponData.Add(kv.Key));
            this._BrokenItems.ForEach(kv => saveGame.PackedItemData.Add(kv.Key));

            // TODO: STUPID STUPID STUPID STUPID WHY GEARBOX WHY?????????????????????
            foreach (var packedItem in this._ExpansionItems)
            {
                saveGame.PackedItemData.Add(packedItem);
            }
        }
Example #2
0
        public IEnumerable <IResult> CopySelectedSlotCode()
        {
            yield return(new DelegateResult(
                             () =>
            {
                if (this.SelectedSlot == null ||
                    this.SelectedSlot.BackpackSlot == null)
                {
                    if (MyClipboard.SetText("") != MyClipboard.Result.Success)
                    {
                        MessageBox.Show(
                            "Clipboard failure.",
                            "Error",
                            MessageBoxButton.OK,
                            MessageBoxImage.Error);
                    }
                    return;
                }

                // just a hack until I add a way to override the unique ID in Encode()
                var copy = (IPackableSlot)this.SelectedSlot.BackpackSlot.Clone();
                copy.UniqueId = 0;

                var data = BackpackDataHelper.Encode(copy, Platform.PC);
                var sb = new StringBuilder();
                sb.Append("BL2(");
                sb.Append(Convert.ToBase64String(data, Base64FormattingOptions.None));
                sb.Append(")");

                /*
                 * if (MyClipboard.SetText(sb.ToString()) != MyClipboard.Result.Success)
                 * {
                 *  MessageBox.Show("Clipboard failure.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                 * }
                 */

                var dobj = new DataObject();
                dobj.SetText(sb.ToString());
                if (MyClipboard.SetDataObject(dobj, false) != MyClipboard.Result.Success)
                {
                    MessageBox.Show(
                        "Clipboard failure.",
                        "Error",
                        MessageBoxButton.OK,
                        MessageBoxImage.Error);
                }
            }));
        }
        public void ExportData(WillowTwoPlayerSaveGame saveGame)
        {
            saveGame.PackedWeaponData.Clear();
            saveGame.PackedItemData.Clear();

            foreach (var viewModel in this.Slots)
            {
                var slot = viewModel.BackpackSlot;

                if (slot is BackpackWeapon)
                {
                    var weapon = (BackpackWeapon)slot;
                    var data   = BackpackDataHelper.Encode(weapon);

                    saveGame.PackedWeaponData.Add(new PackedWeaponData()
                    {
                        Data      = data,
                        QuickSlot = weapon.QuickSlot,
                        Mark      = weapon.Mark,
                    });
                }
                else if (slot is BackpackItem)
                {
                    var item = (BackpackItem)slot;
                    var data = BackpackDataHelper.Encode(item);

                    saveGame.PackedItemData.Add(new PackedItemData()
                    {
                        Data     = data,
                        Quantity = item.Quantity,
                        Equipped = item.Equipped,
                        Mark     = item.Mark,
                    });
                }
                else
                {
                    throw new NotSupportedException();
                }
            }
        }
        public void ImportData(WillowTwoPlayerSaveGame saveGame)
        {
            this.Slots.Clear();

            foreach (var packedWeapon in saveGame.PackedWeaponData)
            {
                var weapon = (BackpackWeapon)BackpackDataHelper.Decode(packedWeapon.Data);
                var test   = BackpackDataHelper.Encode(weapon);
                if (packedWeapon.Data.SequenceEqual(test) == false)
                {
                    throw new FormatException("backpack weapon reencode mismatch");
                }

                weapon.QuickSlot = packedWeapon.QuickSlot;
                weapon.Mark      = packedWeapon.Mark;

                var viewModel = new BackpackWeaponViewModel(weapon);
                this.Slots.Add(viewModel);
            }

            foreach (var packedItem in saveGame.PackedItemData)
            {
                var item = (BackpackItem)BackpackDataHelper.Decode(packedItem.Data);
                var test = BackpackDataHelper.Encode(item);
                if (packedItem.Data.SequenceEqual(test) == false)
                {
                    throw new FormatException("backpack item reencode mismatch");
                }

                item.Quantity = packedItem.Quantity;
                item.Equipped = packedItem.Equipped;
                item.Mark     = packedItem.Mark;

                var viewModel = new BackpackItemViewModel(item);
                this.Slots.Add(viewModel);
            }
        }
Example #5
0
        public void ImportData(WillowTwoPlayerSaveGame saveGame, Platform platform)
        {
            this.Slots.Clear();

            this._BrokenWeapons.Clear();
            foreach (var packedWeapon in saveGame.PackedWeaponData)
            {
                BackpackWeapon weapon;
                try
                {
                    weapon = (BackpackWeapon)BackpackDataHelper.Decode(packedWeapon.InventorySerialNumber, platform);
                }
                catch (Exception e)
                {
                    this._BrokenWeapons.Add(new KeyValuePair <PackedWeaponData, Exception>(packedWeapon, e));
                    continue;
                }

                var test = BackpackDataHelper.Encode(weapon, platform);
                if (packedWeapon.InventorySerialNumber.SequenceEqual(test) == false)
                {
                    throw new FormatException("backpack weapon reencode mismatch");
                }

                weapon.QuickSlot = packedWeapon.QuickSlot;
                weapon.Mark      = packedWeapon.Mark;

                var viewModel = new BackpackWeaponViewModel(weapon);
                this.Slots.Add(viewModel);
            }

            this._ExpansionItems.Clear();
            this._BrokenItems.Clear();
            foreach (var packedItem in saveGame.PackedItemData)
            {
                if (packedItem.Quantity < 0)
                {
                    this._ExpansionItems.Add(packedItem);
                    continue;
                }

                BackpackItem item;
                try
                {
                    item = (BackpackItem)BackpackDataHelper.Decode(packedItem.InventorySerialNumber, platform);
                }
                catch (Exception e)
                {
                    this._BrokenItems.Add(new KeyValuePair <PackedItemData, Exception>(packedItem, e));
                    continue;
                }

                var test = BackpackDataHelper.Encode(item, platform);
                if (packedItem.InventorySerialNumber.SequenceEqual(test) == false)
                {
                    throw new FormatException("backpack item reencode mismatch");
                }

                item.Quantity = packedItem.Quantity;
                item.Equipped = packedItem.Equipped;
                item.Mark     = (PlayerMark)packedItem.Mark;

                // required since protobuf is no longer doing the validation for us
                if (item.Mark != PlayerMark.Trash &&
                    item.Mark != PlayerMark.Standard &&
                    item.Mark != PlayerMark.Favorite)
                {
                    throw new FormatException("invalid PlayerMark value");
                }

                var viewModel = new BackpackItemViewModel(item);
                this.Slots.Add(viewModel);
            }
        }