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); } }
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); } }
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); } }