示例#1
0
 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
     });
 }
示例#2
0
        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());
 }