コード例 #1
0
ファイル: YiObject.cs プロジェクト: Pircs/Yi
        public Item GetEquip(MsgItemPosition position)
        {
            Item found;

            Equipment.TryGetValue(position, out found);
            return(found);
        }
コード例 #2
0
ファイル: YiObject.cs プロジェクト: Pircs/Yi
        public void AddArmorProf(MsgItemPosition position, uint exp)
        {
            var item = GetEquip(position);

            if (item != null)
            {
                Prof prof;
                if (Profs.TryGetValue((int)(item.ItemId / 1000), out prof))
                {
                    prof.Experience += exp;
                }
            }
        }
コード例 #3
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
        public unsafe bool Unequip(MsgItemPosition position)
        {
            if (_owner.Inventory.Count == 40)
            {
                return(false);
            }

            if (TryRemove(position, out var item))
            {
                _owner.Inventory.AddOrUpdate(item.UniqueId, item);
                (_owner as Player)?.ForceSend(new MsgItemInformation(item, MsgItemPosition.Inventory), (ushort)sizeof(MsgItemInformation));
                ScreenSystem.Send(_owner, MsgSpawn.Create(_owner as Player));
                EntityLogic.Recalculate(_owner);
            }
            return(true);
        }
コード例 #4
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
        public void AddDura(MsgItemPosition position)
        {
            if (!Items.TryGetValue(position, out var found))
            {
                return;
            }

            if (found.CurrentDurability < found.MaximumDurability)
            {
                found.CurrentDurability += 1;
            }
            else
            {
                found.CurrentDurability = found.MaximumDurability;
            }
            var packet = new MsgItemInformation(found, MsgItemInfoAction.Update);

            (_owner as Player)?.ForceSend(packet, packet.Size);
        }
コード例 #5
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
        public void RemoveDura(MsgItemPosition position, bool arrows = false)
        {
            if (!arrows && !YiCore.Success(25))
            {
                return;
            }

            if (!Items.TryGetValue(position, out var found))
            {
                return;
            }
            if (found.CurrentDurability > 0)
            {
                found.CurrentDurability -= 1;
            }

            if (found.CurrentDurability < 10 && !arrows)
            {
                Message.SendTo(_owner, "Your " + Enum.GetName(typeof(MsgItemPosition), position) + " is about to break. (" + found.CurrentDurability + " uses left)", MsgTextType.Center);
            }

            var packet = new MsgItemInformation(found, MsgItemInfoAction.Update);

            (_owner as Player)?.ForceSend(packet, packet.Size);

            if (found.CurrentDurability == 0)
            {
                if (position == MsgItemPosition.RightWeapon)
                {
                    Unequip(MsgItemPosition.LeftWeapon);
                    (_owner as Player)?.ForceSend(MsgItem.Create(found.UniqueId, 0, (int)MsgItemPosition.LeftWeapon, MsgItemType.RemoveEquipment), 24);
                }

                Unequip(position);
                (_owner as Player)?.ForceSend(MsgItem.Create(found.UniqueId, 0, (int)position, MsgItemType.RemoveEquipment), 24);
                (_owner as Player)?.Inventory.RemoveItem(found);
                if (!arrows)
                {
                    Message.SendTo(_owner, "Your " + Enum.GetName(typeof(MsgItemPosition), position) + " broke.", MsgTextType.Center);
                }
            }
        }
コード例 #6
0
ファイル: MsgItemInformation.cs プロジェクト: Pircs/Yi
 public MsgItemInformation(Item item, MsgItemInfoAction action = MsgItemInfoAction.AddItem, MsgItemPosition position = MsgItemPosition.Inventory) : this()
 {
     Size               = (ushort)sizeof(MsgItemInformation);
     Id                 = 1008;
     UniqueId           = item.UniqueId;
     ItemId             = item.ItemId;
     CurrentDurability  = item.CurrentDurability;
     MaxiumumDurability = item.MaximumDurability;
     Action             = action;
     Ident              = 0;
     Position           = position;
     Gem1               = item.Gem1;
     Gem2               = item.Gem2;
     RebornEffect       = item.RebornEffect;
     Magic2             = 0;
     Bless              = item.Bless;
     Plus               = item.Plus;
     Enchant            = item.Enchant;
     Restrain           = item.CustomTextId;
 }
コード例 #7
0
ファイル: MsgItemInfoEx.cs プロジェクト: Pircs/Yi
 public MsgItemInfoEx(Product product, MsgItemPosition position = MsgItemPosition.Inventory, ItemExType type = ItemExType.None) : this()
 {
     Size               = (ushort)sizeof(MsgItemInfoEx);
     Id                 = 1108;
     OwnerUID           = product.Owner;
     UniqueId           = product.Item.UniqueId;
     ItemId             = product.Item.ItemId;
     Price              = product.Price;
     CurrentDurability  = product.Item.CurrentDurability;
     MaxiumumDurability = product.Item.MaximumDurability;
     ItemExType         = type;
     Position           = position;
     Gem1               = product.Item.Gem1;
     Gem2               = product.Item.Gem2;
     RebornEffect       = product.Item.RebornEffect;
     Plus               = product.Item.Plus;
     Bless              = product.Item.Bless;
     Enchant            = product.Item.Enchant;
     Restrain           = product.Item.CustomTextId;
 }
コード例 #8
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
        public unsafe bool Equip(Item item, MsgItemPosition position)
        {
            if (!_owner.Inventory.TryRemove(item.UniqueId, out item))
            {
                return(false);
            }

            if (item.ItemId / 10000 == 105)
            {
                position = MsgItemPosition.LeftWeapon;
            }

            (_owner as Player)?.Send(MsgItem.Create(item.UniqueId, 0, 0, MsgItemType.RemoveInventory));
            if (Unequip(position))
            {
                (_owner as Player)?.ForceSend(new MsgItemInformation(item, position), (ushort)sizeof(MsgItemInformation));
                AddOrUpdate(position, item);
                ScreenSystem.Send(_owner, MsgSpawn.Create(_owner as Player));
                EntityLogic.Recalculate(_owner);
            }
            return(true);
        }
コード例 #9
0
ファイル: YiObject.cs プロジェクト: Pircs/Yi
 public void RemoveDura(MsgItemPosition boots)
 {
 }
コード例 #10
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
 public bool TryRemove(MsgItemPosition position, out Item item) => Items.TryRemove(position, out item);
コード例 #11
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
 public void AddOrUpdate(MsgItemPosition position, Item item) => Items.AddOrUpdate(position, item);
コード例 #12
0
ファイル: Equipment.cs プロジェクト: Pircs/Yi
 public bool TryGetValue(MsgItemPosition position, out Item found) => Items.TryGetValue(position, out found);