public MinerState GetState() { return(new MinerState { Name = this.Name, Diggers = Diggers.Select(x => x.GetState()).ToList(), TaterTokens = TaterTokens, AttainedAchievements = AttainedAchievements, InventoryItems = InventoryItems.Select(x => new InventoryItemState { Count = x.Count, ItemId = x.Item.Id }).ToList(), LifeTimeStats = LifetimeStats }); }
public void AddGem(byte bag, byte slot, byte destinationBag, byte destinationSlot, byte hammerBag, byte hammerSlot) { InventoryItems.TryGetValue((bag, slot), out var gem); if (gem is null || gem.Type != Gem.GEM_TYPE) { return; } var linkingGold = _linkingManager.GetGold(gem); if (Gold < linkingGold) { // TODO: send warning, that not enough money? return; } InventoryItems.TryGetValue((destinationBag, destinationSlot), out var item); if (item is null || item.FreeSlots == 0 || item.ContainsGem(gem.TypeId)) { return; } Item hammer = null; if (hammerBag != 0) { InventoryItems.TryGetValue((hammerBag, hammerSlot), out hammer); } Item saveItem = null; if (gem.ReqVg > 0) { saveItem = InventoryItems.Select(itm => itm.Value).FirstOrDefault(itm => itm.Special == SpecialEffect.LuckyCharm); if (saveItem != null) { UseItem(saveItem.Bag, saveItem.Slot); } } var result = _linkingManager.AddGem(item, gem, hammer); ChangeGold((uint)(Gold - linkingGold)); if (gem.Count > 0) { _taskQueue.Enqueue(ActionType.UPDATE_ITEM_COUNT_IN_INVENTORY, Id, gem.Bag, gem.Slot, gem.Count); } else { InventoryItems.TryRemove((gem.Bag, gem.Slot), out var removedGem); _taskQueue.Enqueue(ActionType.REMOVE_ITEM_FROM_INVENTORY, Id, gem.Bag, gem.Slot); } if (result.Success) { _taskQueue.Enqueue(ActionType.UPDATE_GEM, Id, item.Bag, item.Slot, result.Slot, (int)gem.TypeId); } if (hammer != null) { UseItem(hammer.Bag, hammer.Slot); } _packetsHelper.SendAddGem(Client, result.Success, gem, item, result.Slot, Gold, saveItem, hammer); if (result.Success && item.Bag == 0) { ExtraStr += gem.Str; ExtraDex += gem.Dex; ExtraRec += gem.Rec; ExtraInt += gem.Int; ExtraLuc += gem.Luc; ExtraWis += gem.Wis; ExtraHP += gem.HP; ExtraSP += gem.SP; ExtraMP += gem.MP; ExtraDefense += gem.Defense; ExtraResistance += gem.Resistance; Absorption += gem.Absorb; MoveSpeed += gem.MoveSpeed; SetAttackSpeedModifier(gem.AttackSpeed); if (gem.Str != 0 || gem.Dex != 0 || gem.Rec != 0 || gem.Wis != 0 || gem.Int != 0 || gem.Luc != 0 || gem.MinAttack != 0 || gem.MaxAttack != 0) { SendAdditionalStats(); } if (gem.AttackSpeed != 0 || gem.MoveSpeed != 0) { InvokeAttackOrMoveChanged(); } } if (!result.Success && saveItem == null && gem.ReqVg > 0) { RemoveItemFromInventory(item); SendRemoveItemFromInventory(item, true); if (item.Bag == 0) { if (item == Helmet) { Helmet = null; } else if (item == Armor) { Armor = null; } else if (item == Pants) { Pants = null; } else if (item == Gauntlet) { Gauntlet = null; } else if (item == Boots) { Boots = null; } else if (item == Weapon) { Weapon = null; } else if (item == Shield) { Shield = null; } else if (item == Cape) { Cape = null; } else if (item == Amulet) { Amulet = null; } else if (item == Ring1) { Ring1 = null; } else if (item == Ring2) { Ring2 = null; } else if (item == Bracelet1) { Bracelet1 = null; } else if (item == Bracelet2) { Bracelet2 = null; } else if (item == Mount) { Mount = null; } else if (item == Pet) { Pet = null; } else if (item == Costume) { Costume = null; } } } }
public override int GetCurrentInventoryWeight() { return((int)InventoryItems.Select(o => o.itemCode.Contains("WEAPON_") ? 50.0f : o.itemWeight *o.itemAmount).Sum()); }