Ignore:
Timestamp:
Sep 3, 2018, 7:11:10 PM (6 years ago)
Author:
alloc
Message:

A17 compatibility changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Inventory.cs

    r287 r324  
    11using System;
    22using System.Collections.Generic;
    3 using System.Runtime.Serialization;
    4 using System.Threading;
    53
    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;
     4namespace AllocsFixes.PersistentData {
     5    [Serializable]
     6    public class Inventory {
     7        public List<InvItem> bag;
     8        public List<InvItem> belt;
     9        public InvItem[] equipment;
    1310
    14                 public Inventory () {
    15                         bag = new List<InvItem> ();
    16                         belt = new List<InvItem> ();
    17                         equipment = null;
    18                 }
     11        public Inventory () {
     12            bag = new List<InvItem> ();
     13            belt = new List<InvItem> ();
     14            equipment = null;
     15        }
    1916
    20                 public void Update (PlayerDataFile pdf) {
    21                         lock (this) {
    22                                 //Log.Out ("Updating player inventory - player id: " + pdf.id);
    23                                 ProcessInv (bag, pdf.bag, pdf.id);
    24                                 ProcessInv (belt, pdf.inventory, pdf.id);
    25                                 ProcessEqu (pdf.equipment, pdf.id);
    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        }
    2825
    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                }
    3933
    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        }
    4637
    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        }
    5844
    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                }
    6452
    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            }
    6855
    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        }
    7558
    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 ();
    7764
    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    }
    8687}
Note: See TracChangeset for help on using the changeset viewer.