- Timestamp:
- Sep 3, 2018, 7:11:10 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
binary-improvements/7dtd-server-fixes/src/PersistentData/Inventory.cs
r287 r324 1 1 using System; 2 2 using System.Collections.Generic; 3 using System.Runtime.Serialization;4 using System.Threading;5 3 6 namespace AllocsFixes.PersistentData 7 { 8 [Serializable] 9 public class Inventory { 10 public List<InvItem> bag; 11 public List<InvItem> belt; 12 public InvItem[] equipment; 4 namespace AllocsFixes.PersistentData { 5 [Serializable] 6 public class Inventory { 7 public List<InvItem> bag; 8 public List<InvItem> belt; 9 public InvItem[] equipment; 13 10 14 15 16 17 18 11 public Inventory () { 12 bag = new List<InvItem> (); 13 belt = new List<InvItem> (); 14 equipment = null; 15 } 19 16 20 21 22 23 24 25 26 27 17 public void Update (PlayerDataFile pdf) { 18 lock (this) { 19 //Log.Out ("Updating player inventory - player id: " + pdf.id); 20 ProcessInv (bag, pdf.bag, pdf.id); 21 ProcessInv (belt, pdf.inventory, pdf.id); 22 ProcessEqu (pdf.equipment, pdf.id); 23 } 24 } 28 25 29 private void ProcessInv (List<InvItem> target, ItemStack[] sourceFields, int id) { 30 target.Clear (); 31 for (int i = 0; i < sourceFields.Length; i++) { 32 InvItem item = CreateInvItem (sourceFields [i].itemValue, sourceFields [i].count, id); 33 if (item != null && sourceFields [i].itemValue.Parts != null) { 34 ProcessParts (sourceFields [i].itemValue.Parts, item, id); 35 } 36 target.Add (item); 37 } 38 } 26 private void ProcessInv (List<InvItem> target, ItemStack[] sourceFields, int id) { 27 target.Clear (); 28 for (int i = 0; i < sourceFields.Length; i++) { 29 InvItem item = CreateInvItem (sourceFields [i].itemValue, sourceFields [i].count, id); 30 if (item != null && sourceFields [i].itemValue.Modifications != null) { 31 ProcessParts (sourceFields [i].itemValue.Modifications, item, id); 32 } 39 33 40 private void ProcessEqu (Equipment sourceEquipment, int _playerId) { 41 equipment = new InvItem[sourceEquipment.GetSlotCount ()]; 42 for (int i = 0; i < sourceEquipment.GetSlotCount (); i++) { 43 equipment [i] = CreateInvItem (sourceEquipment.GetSlotItem (i), 1, _playerId); 44 } 45 } 34 target.Add (item); 35 } 36 } 46 37 47 private void ProcessParts (ItemValue[] _parts, InvItem _item, int _playerId) { 48 InvItem[] itemParts = new InvItem[_parts.Length]; 49 for (int i = 0; i < _parts.Length; i++) { 50 InvItem partItem = CreateInvItem (_parts [i], 1, _playerId); 51 if (partItem != null && _parts [i].Parts != null) { 52 ProcessParts (_parts [i].Parts, partItem, _playerId); 53 } 54 itemParts [i] = partItem; 55 } 56 _item.parts = itemParts; 57 } 38 private void ProcessEqu (Equipment sourceEquipment, int _playerId) { 39 equipment = new InvItem[sourceEquipment.GetSlotCount ()]; 40 for (int i = 0; i < sourceEquipment.GetSlotCount (); i++) { 41 equipment [i] = CreateInvItem (sourceEquipment.GetSlotItem (i), 1, _playerId); 42 } 43 } 58 44 59 private InvItem CreateInvItem (ItemValue _itemValue, int _count, int _playerId) { 60 if (_count > 0 && _itemValue != null && !_itemValue.Equals (ItemValue.None)) { 61 ItemClass itemClass = ItemClass.list [_itemValue.type]; 62 int maxAllowed = itemClass.Stacknumber.Value; 63 string name = itemClass.GetItemName (); 45 private void ProcessParts (ItemValue[] _parts, InvItem _item, int _playerId) { 46 InvItem[] itemParts = new InvItem[_parts.Length]; 47 for (int i = 0; i < _parts.Length; i++) { 48 InvItem partItem = CreateInvItem (_parts [i], 1, _playerId); 49 if (partItem != null && _parts [i].Modifications != null) { 50 ProcessParts (_parts [i].Modifications, partItem, _playerId); 51 } 64 52 65 if (_count > maxAllowed) { 66 Log.Out ("Player with ID " + _playerId + " has stack for \"" + name + "\" greater than allowed (" + _count + " > " + maxAllowed + ")"); 67 } 53 itemParts [i] = partItem; 54 } 68 55 69 InvItem item = null; 70 if (_itemValue.HasQuality) { 71 item = new InvItem (name, _count, _itemValue.Quality, _itemValue.MaxUseTimes, _itemValue.UseTimes); 72 } else { 73 item = new InvItem (name, _count, -1, _itemValue.MaxUseTimes, _itemValue.UseTimes); 74 } 56 _item.parts = itemParts; 57 } 75 58 76 item.icon = itemClass.GetIconName (); 59 private InvItem CreateInvItem (ItemValue _itemValue, int _count, int _playerId) { 60 if (_count > 0 && _itemValue != null && !_itemValue.Equals (ItemValue.None)) { 61 ItemClass itemClass = ItemClass.list [_itemValue.type]; 62 int maxAllowed = itemClass.Stacknumber.Value; 63 string name = itemClass.GetItemName (); 77 64 78 item.iconcolor = AllocsUtils.ColorToHex (itemClass.GetIconTint ()); 79 80 return item; 81 } else { 82 return null; 83 } 84 } 85 } 65 if (_count > maxAllowed) { 66 Log.Out ("Player with ID " + _playerId + " has stack for \"" + name + "\" greater than allowed (" + 67 _count + " > " + maxAllowed + ")"); 68 } 69 70 InvItem item = null; 71 if (_itemValue.HasQuality) { 72 item = new InvItem (name, _count, _itemValue.Quality, _itemValue.MaxUseTimes, _itemValue.UseTimes); 73 } else { 74 item = new InvItem (name, _count, -1, _itemValue.MaxUseTimes, _itemValue.UseTimes); 75 } 76 77 item.icon = itemClass.GetIconName (); 78 79 item.iconcolor = AllocsUtils.ColorToHex (itemClass.GetIconTint ()); 80 81 return item; 82 } else { 83 return null; 84 } 85 } 86 } 86 87 }
Note:
See TracChangeset
for help on using the changeset viewer.