Exemple #1
0
        // 装备只有装上取下两个操作,没有公开的需求,先不提供包装类了。

        public override int ProcessEquipementRequest(Equipement rpc)
        {
            Login.Session session = Login.Session.Get(rpc);

            Bag.Bag bag = App.Instance.Game_Bag.GetBag(session.RoleId.Value);
            if (bag.Items.TryGetValue(rpc.Argument.BagPos, out var bItem))
            {
                int equipPos = GetEquipPosition(bItem.Id);
                if (equipPos < 0)
                {
                    return(ReturnCode(ResultCodeCannotEquip));
                }

                BEquips        equips = _tequip.GetOrAdd(session.RoleId.Value);
                Game.Bag.BItem bEquipAdd;
                if (equips.Items.TryGetValue(equipPos, out var eItem))
                {
                    // 装备目标位置已经存在装备,交换。
                    // 先都删除,这样就能在原位置上交换的装备,否则对于包裹可能加到其他位置。
                    equips.Items.Remove(equipPos);
                    bag.Remove(rpc.Argument.BagPos, bItem.Id, 1);

                    bag.Add(rpc.Argument.BagPos, new Bag.BItem()
                    {
                        Id = eItem.Id, Number = 1, Extra_Game_Equip_BEquipExtra = eItem.Extra_Game_Equip_BEquipExtra.Copy()
                    }
                            );

                    bEquipAdd = new Game.Bag.BItem()
                    {
                        Id = bItem.Id, Number = 1, Extra_Game_Equip_BEquipExtra = bItem.Extra_Game_Equip_BEquipExtra.Copy()
                    };
                    equips.Items.Add(equipPos, bEquipAdd);
                }
                else
                {
                    // 装备目标位置为空
                    bag.Remove(rpc.Argument.BagPos, bItem.Id, 1);
                    bEquipAdd = new Game.Bag.BItem()
                    {
                        Id = bItem.Id, Number = 1, Extra_Game_Equip_BEquipExtra = bItem.Extra_Game_Equip_BEquipExtra.Copy()
                    };
                    equips.Items.Add(equipPos, bEquipAdd);
                }
                session.SendResponse(rpc);
                return(Procedure.Success);
            }
            return(ReturnCode(ResultCodeItemNotFound));
        }
Exemple #2
0
        // 装备只有装上取下两个操作,没有公开的需求,先不提供包装类了。

        public override int ProcessCEquipement(CEquipement protocol)
        {
            Login.Session session = Login.Session.Get(protocol);

            Bag.Bag bag = App.Instance.Game_Bag.GetBag(session.LoginRoleId.Value);
            if (bag.Items.TryGetValue(protocol.Argument.BagPos, out var bItem))
            {
                int equipPos = GetEquipPosition(bItem.Id);
                if (equipPos < 0)
                {
                    return(Zeze.Transaction.Procedure.LogicError);
                }

                BEquips        equips = _tequip.GetOrAdd(session.LoginRoleId.Value);
                Game.Bag.BItem bEquipAdd;
                if (equips.Items.TryGetValue(equipPos, out var eItem))
                {
                    // 装备目标位置已经存在装备,交换。
                    // 先都删除,这样就能在原位置上交换的装备,否则对于包裹可能加到其他位置。
                    equips.Items.Remove(equipPos);
                    bag.Remove(protocol.Argument.BagPos, bItem.Id, 1);

                    bag.Add(protocol.Argument.BagPos, new Bag.BItem()
                    {
                        Id = eItem.Id, Number = 1, Extra_Game_Equip_BEquipExtra = eItem.Extra_Game_Equip_BEquipExtra.Copy()
                    }
                            );

                    bEquipAdd = new Game.Bag.BItem()
                    {
                        Id = bItem.Id, Number = 1, Extra_Game_Equip_BEquipExtra = bItem.Extra_Game_Equip_BEquipExtra.Copy()
                    };
                    equips.Items.Add(equipPos, bEquipAdd);
                }
                else
                {
                    // 装备目标位置为空
                    bag.Remove(protocol.Argument.BagPos, bItem.Id, 1);
                    bEquipAdd = new Game.Bag.BItem()
                    {
                        Id = bItem.Id, Number = 1, Extra_Game_Equip_BEquipExtra = bItem.Extra_Game_Equip_BEquipExtra.Copy()
                    };
                    equips.Items.Add(equipPos, bEquipAdd);
                }
                return(Zeze.Transaction.Procedure.Success);
            }
            return(Zeze.Transaction.Procedure.LogicError);
        }
Exemple #3
0
 public Equip(Game.Bag.BItem bItem, BEquipExtra extra) : base(bItem)
 {
 }
Exemple #4
0
 public Horse(Game.Bag.BItem bItem, BHorseExtra extra) : base(bItem)
 {
     this.extra = extra;
 }
Exemple #5
0
 public Food(Game.Bag.BItem bItem, BFoodExtra extra) : base(bItem)
 {
     this.extra = extra;
 }
Exemple #6
0
        protected Game.Bag.BItem bItem; // bItem.Position: 根据所在容器不同,含义可能不一样:比如在包裹中是格子号,在装备中就是装备位置。

        public Item(Game.Bag.BItem bItem)
        {
            this.bItem = bItem;
        }