// 装备只有装上取下两个操作,没有公开的需求,先不提供包装类了。 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)); }
// 装备只有装上取下两个操作,没有公开的需求,先不提供包装类了。 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); }
public Equip(Game.Bag.BItem bItem, BEquipExtra extra) : base(bItem) { }
public Horse(Game.Bag.BItem bItem, BHorseExtra extra) : base(bItem) { this.extra = extra; }
public Food(Game.Bag.BItem bItem, BFoodExtra extra) : base(bItem) { this.extra = extra; }
protected Game.Bag.BItem bItem; // bItem.Position: 根据所在容器不同,含义可能不一样:比如在包裹中是格子号,在装备中就是装备位置。 public Item(Game.Bag.BItem bItem) { this.bItem = bItem; }