Ignore:
Timestamp:
Aug 12, 2015, 6:10:28 PM (9 years ago)
Author:
alloc
Message:

Fixes 5_7_9

File:
1 edited

Legend:

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

    r245 r250  
    2323                                ProcessInv (bag, pdf.bag, pdf.id);
    2424                                ProcessInv (belt, pdf.inventory, pdf.id);
    25                                 ProcessEqu (pdf.equipment);
     25                                ProcessEqu (pdf.equipment, pdf.id);
    2626                        }
    2727                }
     
    3030                        target.Clear ();
    3131                        for (int i = 0; i < sourceFields.Length; i++) {
    32                                 if (sourceFields [i].count > 0) {
    33                                         int count = sourceFields [i].count;
    34                                         int maxAllowed = ItemClass.list [sourceFields [i].itemValue.type].Stacknumber.Value;
    35                                         string name = ItemClass.list [sourceFields [i].itemValue.type].GetItemName ();
    36 
    37                                         if (count > maxAllowed) {
    38                                                 Log.Out ("Player with ID " + id + " has stack for \"" + name + "\" greater than allowed (" + count + " > " + maxAllowed + ")");
    39                                         }
    40                                         target.Add (new InvItem (name, count));
    41                                 } else {
    42                                         target.Add (null);
     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);
    4335                                }
     36                                target.Add (item);
    4437                        }
    4538                }
    4639
    47                 private void ProcessEqu (Equipment sourceEquipment) {
     40                private void ProcessEqu (Equipment sourceEquipment, int _playerId) {
    4841                        equipment = new InvItem[sourceEquipment.GetSlotCount ()];
    4942                        for (int i = 0; i < sourceEquipment.GetSlotCount (); i++) {
    50                                 if (sourceEquipment.GetSlotItem (i) != null && !sourceEquipment.GetSlotItem (i).Equals (ItemValue.None)) {
    51                                         int count = 1;
    52                                         string name = ItemClass.list [sourceEquipment.GetSlotItem (i).type].GetItemName ();
     43                                equipment [i] = CreateInvItem (sourceEquipment.GetSlotItem (i), 1, _playerId);
     44                        }
     45                }
    5346
    54                                         equipment [i] = new InvItem (name, count);
     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                }
     58
     59                private InvItem CreateInvItem (ItemValue _itemValue, int _count, int _playerId) {
     60                        if (_count > 0 && _itemValue != null && !_itemValue.Equals (ItemValue.None)) {
     61                                int maxAllowed = ItemClass.list [_itemValue.type].Stacknumber.Value;
     62                                string name = ItemClass.list [_itemValue.type].GetItemName ();
     63
     64                                if (_count > maxAllowed) {
     65                                        Log.Out ("Player with ID " + _playerId + " has stack for \"" + name + "\" greater than allowed (" + _count + " > " + maxAllowed + ")");
     66                                }
     67
     68                                InvItem item = null;
     69                                if (_itemValue.HasQuality) {
     70                                        item = new InvItem (name, _count, _itemValue.Quality);
    5571                                } else {
    56                                         equipment [i] = null;
     72                                        item = new InvItem (name, _count);
    5773                                }
     74                                return item;
     75                        } else {
     76                                return null;
    5877                        }
    5978                }
Note: See TracChangeset for help on using the changeset viewer.