Пример #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));
        }
Пример #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);
        }