Пример #1
0
        /// <summary>
        /// 添加道具进背包
        /// </summary>
        /// <param name="sm"></param>
        /// <param name="roleId"></param>
        /// <param name="itemId"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public async Task <AddItemResult> AddItemToRoleBag(int itemId, long count)
        {
            var item = GetItemById(itemId);

            if (item == null)
            {
                return(null);
            }
            AddItemResult result = new AddItemResult();

            if (!CheckBagSpace(itemId, count))
            {
                result.Result = GameEnum.WsResult.NotEnoughBagSpace;
                return(result);
            }
            var itemCount = new Dictionary <int, long>();

            itemCount.Add(itemId, count);
            result = await AddItemToRoleBag(itemCount);

            var data = await InitHelpers.GetPse().SerializeAsync(result);

            await MsgMaker.SendMessage(WSResponseMsgID.AddItemResult, 1, data);    //写入队列

            return(result);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id">道具集合</param>
        /// <param name="oldAvatar">key=部位  value=道具id</param>
        /// <returns></returns>
        private async Task UpdateAvaterAsync(int[] id, Dictionary <int, int> oldAvatar)
        {
            var role = LogicServer.User.role;
            UpdateAvatarResult result = new UpdateAvatarResult();

            foreach (var i in oldAvatar)
            {
                foreach (var j in id)
                {
                    var tmp = GetItemById(j);
                    if (tmp.Parts.Contains(i.Key))
                    {
                        role.Avatar.Remove(i.Value);
                        if (!role.Avatar.Contains(j))
                        {
                            role.Avatar.Add(j);
                            result.Id.Add(j);
                        }
                    }
                }
            }
            await RoleDataHelper.Instance.UpdateRoleByRoleIdAsync(role.Id, role);

            var data = await InitHelpers.GetPse().SerializeAsync(result);

            await MsgMaker.SendMessage(WSResponseMsgID.UpdateAvatarResult, 1, data);
        }
Пример #3
0
        /// <summary>
        /// 房间改变
        /// </summary>
        /// <param name="newRoom"></param>
        private async Task <GameEnum.WsResult> ChangeRoom(Room currRoom, Room newRoom)
        {
            var user   = LogicServer.User;
            var result = GameEnum.WsResult.Success;

            //同样的?
            if (newRoom.RoomId == currRoom.RoomId)
            {
                return(result);
            }

            //是否有足够的货币
            var roominfo = AutoData.Room.GetForKey(newRoom.RoomId);
            var has      = BagController.Instance.CheckMoney((long)roominfo.Cost.Count, roominfo.Cost.ItemId);

            if (!has)
            {
                result = GameEnum.WsResult.NotEnoughMoney;
                return(result);
            }

            //卖掉房间减少身价
            var cost = -AutoData.Room.GetForKey(currRoom.RoomId).Status;

            //增长的身份
            cost += roominfo.Status;

            ////--------------
            //消耗货币,通知减少
            if (roominfo.Cost.Count != 0)
            {
                await BagController.Instance.UseItemsAsync(SM, user.role.Id, roominfo.Cost.ItemId, (long)roominfo.Cost.Count);//db msg
            }

            //把当前的家具添加到背包中
            foreach (var itemId in currRoom.Config.Values)
            {
                await BagController.Instance.AddItemToRoleBag(itemId, 1);//db
            }

            //获得新房间
            await Data.Helper.RoomData.Instance.UpdateRoomData(newRoom);//db

            user.role.SocialStatus += cost;
            await MsgSender.Instance.UpdateIncome();//db


            ////---------------
            //通知房间信息更新
            var send = await GetRoom(user.role.Id);

            await MsgMaker.SendMessage(WSResponseMsgID.RoomResult, send);//msg

            return(result);
        }