コード例 #1
0
ファイル: RoomTrading.cs プロジェクト: DamienJolly/Alias
        public void StartTrade(RoomEntity userOne, RoomEntity userTwo)
        {
            List <TradeUser> users = new List <TradeUser>();

            users.Add(new TradeUser()
            {
                User = userOne
            });
            users.Add(new TradeUser()
            {
                User = userTwo
            });

            RoomTrade trade = new RoomTrade()
            {
                Users = users
            };

            this.Trades.Add(trade);

            users.ForEach(user =>
            {
                if (!user.User.Actions.Has("trd"))
                {
                    user.User.Actions.Add("trd", "");
                    this.Room.EntityManager.Send(new RoomUserStatusComposer(user.User));
                }
            });

            trade.Send(new TradeStartComposer(trade));
        }
コード例 #2
0
        public void Handle(Session session, ClientPacket message)
        {
            Room room = session.Player.CurrentRoom;

            if (room == null)
            {
                return;
            }

            RoomTrade trade = room.RoomTrading.GetActiveTrade(session.Player.Entity);

            if (trade == null)
            {
                return;
            }

            int itemId = message.PopInt();

            if (!session.Player.Inventory.TryGetItemById(itemId, out InventoryItem item))
            {
                return;
            }

            trade.OfferItems(session.Player.Entity, new List <InventoryItem>()
            {
                item
            });
        }
コード例 #3
0
ファイル: EntityPlayer.cs プロジェクト: DamienJolly/Alias
        public override void OnEntityLeave()
        {
            Entity.Player.CurrentRoom = null;
            Entity.Player.Entity      = null;
            CurrentRoom.RoomData.UsersNow--;

            RoomTrade trade = CurrentRoom.RoomTrading.GetActiveTrade(Entity);

            if (trade != null)
            {
                trade.StopTrade(Entity);
            }
        }
コード例 #4
0
ファイル: TradeCloseEvent.cs プロジェクト: DamienJolly/Alias
        public void Handle(Session session, ClientPacket message)
        {
            Room room = session.Player.CurrentRoom;

            if (room == null)
            {
                return;
            }

            RoomTrade trade = room.RoomTrading.GetActiveTrade(session.Player.Entity);

            if (trade == null)
            {
                return;
            }

            trade.StopTrade(session.Player.Entity);
        }
コード例 #5
0
        public void Handle(Session session, ClientPacket message)
        {
            Room room = session.Player.CurrentRoom;

            if (room == null)
            {
                return;
            }

            RoomTrade trade = room.RoomTrading.GetActiveTrade(session.Player.Entity);

            if (trade == null)
            {
                return;
            }

            int amount = message.PopInt();
            int itemId = message.PopInt();

            if (!session.Player.Inventory.TryGetItemById(itemId, out InventoryItem item))
            {
                return;
            }

            int count = 0;
            List <InventoryItem> items = new List <InventoryItem>();

            foreach (InventoryItem i in session.Player.Inventory.Items.Values.Where(x => x.ItemData.Id == item.ItemData.Id))
            {
                if (!trade.GetTradeUser(session.Player.Entity).OfferedItems.Contains(i))
                {
                    items.Add(i);
                    count++;
                }
                if (count == amount)
                {
                    break;
                }
            }

            trade.OfferItems(session.Player.Entity, items);
        }
コード例 #6
0
        public void Handle(Session session, ClientPacket message)
        {
            Room room = session.Player.CurrentRoom;

            if (room == null)
            {
                return;
            }

            RoomTrade trade = room.RoomTrading.GetActiveTrade(session.Player.Entity);

            if (trade == null)
            {
                return;
            }

            if (!trade.GetTradeUser(session.Player.Entity).Accepted)
            {
                return;
            }

            trade.Confirm(session.Player.Entity);
        }
コード例 #7
0
ファイル: RoomTrading.cs プロジェクト: DamienJolly/Alias
 public void EndTrade(RoomTrade trade)
 {
     this.Trades.Remove(trade);
 }
コード例 #8
0
 public TradeUpdateComposer(RoomTrade roomTrade)
 {
     this.roomTrade = roomTrade;
 }
コード例 #9
0
 public TradeStartComposer(RoomTrade roomTrade)
 {
     this.roomTrade = roomTrade;
 }