예제 #1
0
        /// <summary>
        /// 创建玩家对象
        /// </summary>
        /// <param name="playerId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public static async Task <Gamer> Create(long playerId, long userId, long?id = null)
        {
            Gamer gamer = ComponentFactory.CreateWithId <Gamer, long>(id ?? IdGenerater.GenerateId(), userId);

            gamer.PlayerID       = playerId;
            gamer.isOffline      = false;
            gamer.playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(userId);

            return(gamer);
        }
예제 #2
0
        protected override async void Run(Session session, C2G_UseZhuanPan message, Action <G2C_UseZhuanPan> reply)
        {
            G2C_UseZhuanPan response = new G2C_UseZhuanPan();

            try
            {
                DBProxyComponent proxyComponent = Game.Scene.GetComponent <DBProxyComponent>();
                PlayerBaseInfo   playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(message.Uid);

                if (playerBaseInfo.ZhuanPanCount <= 0)
                {
                    response.Error   = ErrorCode.TodayHasSign;
                    response.Message = "您的抽奖次数不足";
                    reply(response);

                    return;
                }
                else
                {
                    playerBaseInfo.ZhuanPanCount -= 1;
                    playerBaseInfo.LuckyValue    += 1;

                    response.itemId = getRewardItemId(playerBaseInfo.LuckyValue);
                    response.reward = getReward(response.itemId, playerBaseInfo.LuckyValue);

                    // 满99后重置
                    if (playerBaseInfo.LuckyValue >= 99)
                    {
                        playerBaseInfo.LuckyValue = 0;
                    }

                    await proxyComponent.Save(playerBaseInfo);

                    reply(response);

                    {
                        await DBCommonUtil.changeWealthWithStr(message.Uid, response.reward, "转盘奖励");

                        // 转盘日志
                        {
                            Log_UseZhuanPan log_UseZhuanPan = ComponentFactory.CreateWithId <Log_UseZhuanPan>(IdGenerater.GenerateId());
                            log_UseZhuanPan.Uid    = message.Uid;
                            log_UseZhuanPan.Reward = response.reward;
                            await proxyComponent.Save(log_UseZhuanPan);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.Debug(e.ToString());
                ReplyError(response, e, reply);
            }
        }
예제 #3
0
        protected override async void Run(Session session, C2G_Share message, Action <G2C_Share> reply)
        {
            G2C_Share response = new G2C_Share();

            try
            {
                DBProxyComponent proxyComponent = Game.Scene.GetComponent <DBProxyComponent>();

                // 分享增加转盘次数
                {
                    List <Log_UseZhuanPan> log_UseZhuanPan = await proxyComponent.QueryJson <Log_UseZhuanPan>($"{{CreateTime:/^{DateTime.Now.GetCurrentDay()}/,Uid:{ message.Uid}}}");

                    PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(message.Uid);

                    // 贵族
                    if (playerBaseInfo.VipTime.CompareTo(CommonUtil.getCurTimeNormalFormat()) > 0)
                    {
                        if (log_UseZhuanPan.Count == 4)
                        {
                            Log.Debug("该用户是贵族,游戏增加的转盘次数已用完,通过分享增加次数");
                            playerBaseInfo.ZhuanPanCount = 1;
                            await proxyComponent.Save(playerBaseInfo);
                        }
                    }
                    else
                    {
                        if (log_UseZhuanPan.Count == 3)
                        {
                            Log.Debug("该用户是普通玩家,游戏增加的转盘次数已用完,通过分享增加次数");
                            playerBaseInfo.ZhuanPanCount = 1;
                            await proxyComponent.Save(playerBaseInfo);
                        }
                    }
                }

                // 分享日志
                {
                    Log_Share log_Share = ComponentFactory.CreateWithId <Log_Share>(IdGenerater.GenerateId());
                    log_Share.Uid = message.Uid;
                    await proxyComponent.Save(log_Share);
                }

                reply(response);
            }
            catch (Exception e)
            {
                Log.Debug(e.ToString());
                ReplyError(response, e, reply);
            }
        }
예제 #4
0
        protected override async void Run(Session session, G2M_PlayerEnterRoom message, Action <M2G_PlayerEnterRoom> reply)
        {
            M2G_PlayerEnterRoom response = new M2G_PlayerEnterRoom();

            //Log.Info("G2M_GamerEnterRoomHandler" + JsonHelper.ToJson(message));

            try
            {
                RoomComponent roomCompnent = Game.Scene.GetComponent <RoomComponent>();
                Gamer         gamer        = null;
                Room          room         = null;

                foreach (var _room in roomCompnent.rooms.Values)
                {
                    room  = _room;
                    gamer = room.Get(message.UserId);
                    if (gamer != null)
                    {
                        Log.Info("找到房间:" + _room.Id);
                        break;
                    }
                }

                //断线重连
                if (gamer != null)
                {
                    //在空闲房间内
                    if (room.State == RoomState.Idle)
                    {
                        response.Message = "已经进入房间";
                        response.Error   = ErrorCode.ERR_Common;
                        Log.Error("玩家多次进入空闲房间");
                        room.Remove(gamer.UserID);
                        reply(response);
                        return;
                    }
                    DeskComponent deskComponent = room.GetComponent <DeskComponent>();

                    //重新更新actor
                    gamer.PlayerID = message.PlayerId;
                    gamer.GetComponent <UnitGateComponent>().GateSessionActorId = message.SessionId;

                    //短线重连
                    Actor_GamerReconnet reconnet = new Actor_GamerReconnet();
                    foreach (var _gamer in room.GetAll())
                    {
                        if (_gamer == null)
                        {
                            Log.Error($"断线重连后玩家为空");
                            continue;
                        }
                        GamerData gamerData = new GamerData();

                        HandCardsComponent handCardsComponent = _gamer.GetComponent <HandCardsComponent>();
                        if (handCardsComponent == null)
                        {
                            Log.Error($"{_gamer.UserID}断线重连后玩家的手牌为空,移除玩家");
                            continue;
//                            room.Remove(_gamer.UserID);
//			                //房间没人就释放
//			                if (room.seats.Count == 0)
//			                {
//                                roomCompnent.RemoveRoom(room);
//			                    room.Dispose();
//			                }
//                            return;
                        }
                        List <MahjongInfo> handCards = handCardsComponent.GetAll();

                        gamerData.handCards = handCards;
                        gamerData.faceCards = handCardsComponent.FaceCards;
                        gamerData.playCards = handCardsComponent.PlayCards;

                        //添加碰刚的uid
                        foreach (var pengOrBar in handCardsComponent.PengOrBars)
                        {
                            //碰
                            if (pengOrBar.OperateType == OperateType.Peng)
                            {
                                gamerData.pengCards.Add(new MahjongInfo()
                                {
                                    weight = (byte)pengOrBar.Weight
                                });
                                gamerData.OperatedPengUserIds.Add(pengOrBar.UserId);
                            }
                            //杠
                            else
                            {
                                gamerData.gangCards.Add(new MahjongInfo()
                                {
                                    weight = (byte)pengOrBar.Weight
                                });
                                gamerData.OperatedGangUserIds.Add(pengOrBar.UserId);
                            }
                        }

                        gamerData.IsBanker      = handCardsComponent.IsBanker;
                        gamerData.UserID        = _gamer.UserID;
                        gamerData.SeatIndex     = room.GetGamerSeat(_gamer.UserID);
                        gamerData.OnlineSeconds = await DBCommonUtil.GetRestOnlineSeconds(_gamer.UserID);

                        gamerData.IsTrusteeship = gamer.IsTrusteeship;
                        PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(_gamer.UserID);

                        PlayerInfo playerInfo = PlayerInfoFactory.Create(playerBaseInfo);

                        gamerData.playerInfo = playerInfo;

                        reconnet.Gamers.Add(gamerData);
                    }

                    reconnet.RestCount = deskComponent.RestLibrary.Count;
                    reconnet.RoomType  = (int)room.GetComponent <GameControllerComponent>().RoomConfig.Id;
                    if (room.IsFriendRoom)
                    {
                        GameControllerComponent gameControllerComponent = room.GetComponent <GameControllerComponent>();
                        reconnet.RoomId         = gameControllerComponent.RoomConfig.FriendRoomId;
                        reconnet.MasterUserId   = gameControllerComponent.RoomConfig.MasterUserId;
                        reconnet.JuCount        = gameControllerComponent.RoomConfig.JuCount;
                        reconnet.Multiples      = gameControllerComponent.RoomConfig.Multiples;
                        reconnet.CurrentJuCount = room.CurrentJuCount;
                    }
                    room.GamerReconnect(gamer, reconnet);

                    gamer.isOffline = false;
                    gamer.RemoveComponent <TrusteeshipComponent>();
                    Log.Info($"玩家{message.UserId}断线重连");
                    gamer.StartTime = DateTime.Now;
                }
                else
                {
                    Log.Info($"{message.UserId}进入房间");

                    gamer = await GamerFactory.Create(message.PlayerId, message.UserId);

                    await gamer.AddComponent <MailBoxComponent>().AddLocation();

                    gamer.AddComponent <UnitGateComponent, long>(message.SessionId);

                    RoomComponent roomComponent = Game.Scene.GetComponent <RoomComponent>();
                    //获得空闲的房间
                    Room idleRoom;

                    if (message.RoomType == 3)
                    {
                        idleRoom = roomComponent.GetFriendRoomById(message.RoomId);
                        if (idleRoom == null)
                        {
                            response.Error   = ErrorCode.ERR_Common;
                            response.Message = "房间号不存在";
                            reply(response);
                            return;
                        }

                        if (idleRoom.Count == 4)
                        {
                            response.Error   = ErrorCode.ERR_Common;
                            response.Message = "房间人数已满";
                            reply(response);
                            return;
                        }
                    }
                    else
                    {
                        idleRoom = roomComponent.GetIdleRoomById(message.RoomType);
                        if (idleRoom == null)
                        {
                            idleRoom = RoomFactory.Create(message.RoomType);
                            roomComponent.Add(idleRoom);
                        }
                    }
                    idleRoom.Add(gamer);
                    await idleRoom.BroadGamerEnter(gamer.UserID);
                }
                response.GameId = gamer.Id;
                reply(response);

                if (message.RoomType == 3)
                {
                    await Actor_GamerReadyHandler.GamerReady(gamer, new Actor_GamerReady()
                    {
                    });
                }
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }

            await Task.CompletedTask;
        }
예제 #5
0
        protected override async void Run(Session session, C2G_LoginGate message, Action <G2C_LoginGate> reply)
        {
            G2C_LoginGate response = new G2C_LoginGate();

            try
            {
                long userId = Game.Scene.GetComponent <NjmjGateSessionKeyComponent>().Get(message.Key);
                if (userId == 0)
                {
                    response.Error   = ErrorCode.ERR_ConnectGateKeyError;
                    response.Message = "Gate key验证失败!";
                    reply(response);
                    return;
                }

                // 检测是否已存在
                UserComponentSystem.CheckIsExistTheUser(userId);

                //创建User对象
                User user = UserFactory.Create(userId, session);
                await user.AddComponent <MailBoxComponent>().AddLocation();

                //添加心跳包
                session.AddComponent <HeartBeatComponent>().CurrentTime = TimeHelper.ClientNowSeconds();
                //添加User对象关联到Session上
                session.AddComponent <SessionUserComponent>().User = user;

                //添加消息转发组件
                session.AddComponent <MailBoxComponent, string>(ActorType.GateSession);

                response.PlayerId = user.Id;
                response.Uid      = userId;

                ConfigComponent  configCom      = Game.Scene.GetComponent <ConfigComponent>();
                DBProxyComponent proxyComponent = Game.Scene.GetComponent <DBProxyComponent>();

                {
                    //商城
                    if (ShopData.getInstance().getDataList().Count == 0)
                    {
                        List <ShopConfig> shopList = new List <ShopConfig>();
                        for (int i = 1; i < configCom.GetAll(typeof(ShopConfig)).Length + 1; ++i)
                        {
                            int        id     = 1000 + i;
                            ShopConfig config = (ShopConfig)configCom.Get(typeof(ShopConfig), id);
                            shopList.Add(config);
                        }
                        ShopData.getInstance().getDataList().AddRange(shopList);
                    }

                    //#region AddShopInfo
                    List <ShopInfo> shopInfoList = new List <ShopInfo>();
                    for (int i = 0; i < ShopData.getInstance().getDataList().Count; ++i)
                    {
                        ShopConfig config = ShopData.getInstance().getDataList()[i];
                        ShopInfo   info   = new ShopInfo();
                        info.Id           = (int)config.Id;
                        info.Name         = config.Name;
                        info.Price        = config.Price;
                        info.ShopType     = config.shopType;
                        info.Desc         = config.Desc;
                        info.CurrencyType = config.CurrencyType;
                        info.Items        = config.Items;
                        info.Icon         = config.Icon;
                        info.VipPrice     = config.VipPrice;
                        shopInfoList.Add(info);
                    }
                    response.ShopInfoList = shopInfoList;
                }
                {
                    //任务
                    if (TaskData.getInstance().getDataList().Count == 0)
                    {
                        List <TaskConfig> taskList = new List <TaskConfig>();
                        for (int i = 1; i < configCom.GetAll(typeof(TaskConfig)).Length + 1; ++i)
                        {
                            int        id     = 100 + i;
                            TaskConfig config = (TaskConfig)configCom.Get(typeof(TaskConfig), id);
                            taskList.Add(config);
                        }
                        TaskData.getInstance().getDataList().AddRange(taskList);
                    }
                }

                {
                    //成就
                    if (ChengjiuData.getInstance().getDataList().Count == 0)
                    {
                        List <ChengjiuConfig> chengjiuList = new List <ChengjiuConfig>();
                        for (int i = 1; i < configCom.GetAll(typeof(ChengjiuConfig)).Length + 1; ++i)
                        {
                            int            id     = 100 + i;
                            ChengjiuConfig config = (ChengjiuConfig)configCom.Get(typeof(ChengjiuConfig), id);
                            chengjiuList.Add(config);
                        }
                        ChengjiuData.getInstance().getDataList().AddRange(chengjiuList);
                    }
                }

                List <UserBag> bagInfoList = await proxyComponent.QueryJson <UserBag>($"{{UId:{userId}}}");

                response.BagList = new List <Bag>();
                List <Bag> bagList = new List <Bag>();
                for (int i = 0; i < bagInfoList.Count; ++i)
                {
                    Bag bag = new Bag();
                    bag.ItemId = bagInfoList[i].BagId;
                    bag.Count  = bagInfoList[i].Count;
                    bagList.Add(bag);
                }
                response.BagList = bagList;

                PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(userId);

                // 老用户检测
                {
                    try
                    {
                        AccountInfo accountInfo = await DBCommonUtil.getAccountInfo(userId);

                        if (accountInfo.OldAccountState == 1)
                        {
                            string url = "http://fksq.hy51v.com:10086/CheckIsOldUser?machine_id=" + accountInfo.MachineId + "&game_id=217";
                            string str = HttpUtil.GetHttp(url);
                            Log.Debug("web地址:" + url);
                            Log.Debug("判断是否是老用户:" + str);

                            JObject result  = JObject.Parse(str);
                            string  old_uid = (string)result.GetValue("old_uid");

                            // 不是老用户
                            if (string.IsNullOrEmpty(old_uid))
                            {
                                accountInfo.OldAccountState = 3;
                                await proxyComponent.Save(accountInfo);
                            }
                            // 是老用户
                            else
                            {
                                List <Log_OldUserBind> log_OldUserBinds = await proxyComponent.QueryJson <Log_OldUserBind>($"{{macId:'{accountInfo.MachineId}'}}");

                                if (log_OldUserBinds.Count > 0)
                                {
                                    accountInfo.OldAccountState = 3;
                                    await proxyComponent.Save(accountInfo);
                                }
                                else
                                {
                                    accountInfo.OldAccountState = 2;
                                    await proxyComponent.Save(accountInfo);

                                    // 记录绑定日志
                                    {
                                        Log_OldUserBind log_OldUserBind = ComponentFactory.CreateWithId <Log_OldUserBind>(IdGenerater.GenerateId());
                                        log_OldUserBind.Uid          = userId;
                                        log_OldUserBind.OldUid       = old_uid;
                                        log_OldUserBind.macId        = accountInfo.MachineId;
                                        log_OldUserBind.isSendReward = 1;

                                        await proxyComponent.Save(log_OldUserBind);
                                    }

                                    {
                                        url = ("http://fksq.hy51v.com:10086/GetOldNjmjData?UserId=" + old_uid);
                                        str = HttpUtil.GetHttp(url);

                                        result = JObject.Parse(str);
                                        int moneyAmount  = (int)result.GetValue("moneyAmount");
                                        int gIngotAmount = (int)result.GetValue("gIngotAmount");

                                        Log.Debug("老用户金币=" + moneyAmount + "   元宝=" + gIngotAmount);

                                        playerBaseInfo.GoldNum = moneyAmount;
                                        playerBaseInfo.WingNum = gIngotAmount;
                                        await proxyComponent.Save(playerBaseInfo);

                                        await DBCommonUtil.changeWealthWithStr(userId, "111:10;2:10", "老用户赠送");
                                    }

                                    // 发送老用户广播
                                    Actor_OldUser actor_OldUser = new Actor_OldUser();
                                    actor_OldUser.OldAccount = old_uid;
                                    Game.Scene.GetComponent <UserComponent>().BroadCastToSingle(actor_OldUser, userId);
                                }
                            }
                        }
                        else if (accountInfo.OldAccountState == 2)
                        {
                            List <Log_OldUserBind> log_OldUserBinds = await proxyComponent.QueryJson <Log_OldUserBind>($"{{macId:'{accountInfo.MachineId}'}}");

                            if (log_OldUserBinds.Count > 0)
                            {
                                if (log_OldUserBinds[0].isSendReward != 1)
                                {
                                    log_OldUserBinds[0].isSendReward = 1;
                                    await proxyComponent.Save(log_OldUserBinds[0]);

                                    await DBCommonUtil.SendMail(userId, "更新游戏奖励", "亲爱的玩家,南京麻将最新版本更新了,特意送上更新奖励,请笑纳,祝您游戏愉快!", "111:10;2:10");
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error("检测是否是老用户出错:" + ex);
                    }
                }

                #region 用户活动所获得的头像数据
                List <OtherData> otherDatas = await proxyComponent.QueryJson <OtherData>($"{{UId:{userId}}}");

                if (otherDatas.Count > 0)
                {
                    response.ownIcon = otherDatas[0].OwnIcon;
                }
                #endregion

                reply(response);
                session.Send(new G2C_TestHotfixMessage()
                {
                    Info = "recv hotfix message success"
                });

                // vip上线全服广播
                {
                    if (playerBaseInfo.VipTime.CompareTo(CommonUtil.getCurTimeNormalFormat()) > 0)
                    {
                        Actor_LaBa actor_LaBa = new Actor_LaBa();
                        actor_LaBa.LaBaContent = "贵族玩家" + playerBaseInfo.Name + "上线啦!";
                        Game.Scene.GetComponent <UserComponent>().BroadCast(actor_LaBa);
                    }
                }
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
예제 #6
0
        protected override async void Run(Session session, C2G_UseHuaFei message, Action <G2C_UseHuaFei> reply)
        {
            G2C_UseHuaFei response = new G2C_UseHuaFei();

            try
            {
                DBProxyComponent proxyComponent = Game.Scene.GetComponent <DBProxyComponent>();

                // 兑换话费
                if (message.Type == 1)
                {
                    if (message.HuaFei == 5 * 100)
                    {
                        PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(message.Uid);

                        if (playerBaseInfo.HuaFeiNum >= 5 * 100)
                        {
                            List <UseHuaFei> useHuaFeis = await proxyComponent.QueryJson <UseHuaFei>($"{{CreateTime:/^{DateTime.Now.GetCurrentDay()}/,Uid:{message.Uid},HuaFei:{message.HuaFei}}}");

                            if (useHuaFeis.Count > 0)
                            {
                                response.Error   = ErrorCode.TodayHasSign;
                                response.Message = "您今天的兑换机会已用完";
                                reply(response);

                                return;
                            }
                            else
                            {
                                // 充值话费
                                {
                                    string str = HttpUtil.PhoneFeeRecharge(message.Uid.ToString().Substring(1), "话费", "5", message.Phone, "3", "1");
                                    Log.Debug("=======" + str);

                                    if (!CommonUtil.checkHuaFeiChongZhiResult(str))
                                    {
                                        response.Message = "充值失败";
                                        response.Error   = ErrorCode.ERR_PhoneCodeError;
                                        reply(response);
                                        return;
                                    }
                                    // 充值成功
                                    else
                                    {
                                        // 充值话费
                                        UseHuaFei useHuaFei = ComponentFactory.CreateWithId <UseHuaFei>(IdGenerater.GenerateId());
                                        useHuaFei.Uid    = message.Uid;
                                        useHuaFei.HuaFei = message.HuaFei;
                                        useHuaFei.Phone  = message.Phone;
                                        await proxyComponent.Save(useHuaFei);

                                        await DBCommonUtil.ChangeWealth(message.Uid, 3, -5 * 100, "话费充值");
                                    }
                                }

                                reply(response);
                            }
                        }
                        else
                        {
                            response.Error   = ErrorCode.TodayHasSign;
                            response.Message = "您的话费余额不足";
                            reply(response);

                            return;
                        }
                    }
                    else
                    {
                        // 不合法的金额
                        response.Error   = ErrorCode.TodayHasSign;
                        response.Message = "您的充值金额不存在";
                        reply(response);

                        return;
                    }
                }
                // 兑换元宝
                else if (message.Type == 2)
                {
                    if (message.HuaFei == 1 * 100)
                    {
                        PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(message.Uid);

                        if (playerBaseInfo.HuaFeiNum >= 1 * 100)
                        {
                            List <UseHuaFei> useHuaFeis = await proxyComponent.QueryJson <UseHuaFei>($"{{CreateTime:/^{DateTime.Now.GetCurrentDay()}/,Uid:{message.Uid},HuaFei:{message.HuaFei}}}");

                            if (useHuaFeis.Count >= 10)
                            {
                                response.Error   = ErrorCode.TodayHasSign;
                                response.Message = "您今天的兑换机会已用完";
                                reply(response);

                                return;
                            }
                            else
                            {
                                // 兑换10个元宝
                                {
                                    await DBCommonUtil.ChangeWealth(message.Uid, 2, 10, "话费兑换元宝");

                                    {
                                        // 记录日志
                                        UseHuaFei useHuaFei = ComponentFactory.CreateWithId <UseHuaFei>(IdGenerater.GenerateId());
                                        useHuaFei.Uid    = message.Uid;
                                        useHuaFei.HuaFei = message.HuaFei;
                                        useHuaFei.Phone  = message.Phone;
                                        await proxyComponent.Save(useHuaFei);

                                        await DBCommonUtil.ChangeWealth(message.Uid, 3, -1 * 100, "话费兑换元宝");
                                    }
                                }

                                response.Reward = "2:10";

                                reply(response);
                            }
                        }
                        else
                        {
                            response.Error   = ErrorCode.TodayHasSign;
                            response.Message = "您的话费余额不足";
                            reply(response);

                            return;
                        }
                    }
                    else
                    {
                        // 不合法的金额
                        response.Error   = ErrorCode.TodayHasSign;
                        response.Message = "您的充值金额不存在";
                        reply(response);

                        return;
                    }
                }
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        public static async Task GamerContinue(Gamer gamer)
        {
            try
            {
                Log.Info($"玩家{gamer.UserID}继续游戏");

                RoomComponent roomComponent = Game.Scene.GetComponent <RoomComponent>();
                Room          room          = roomComponent.Get(gamer.RoomID);
                if (room == null)
                {
                    return;
                }

                GameControllerComponent  gameControllerComponent  = room.GetComponent <GameControllerComponent>();
                OrderControllerComponent orderControllerComponent = room.GetComponent <OrderControllerComponent>();

                gamer.ReadyTimeOut = 0;
                List <GamerInfo> Gamers = new List <GamerInfo>();
                for (int i = 0; i < room.GetAll().Length; i++)
                {
                    Gamer _gamer = room.GetAll()[i];
                    if (_gamer == null)
                    {
                        continue;
                    }
                    GamerInfo gamerInfo = new GamerInfo();
                    gamerInfo.UserID    = _gamer.UserID;
                    gamerInfo.SeatIndex = room.GetGamerSeat(_gamer.UserID);
                    gamerInfo.IsReady   = _gamer.IsReady;
                    PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(gamerInfo.UserID);

                    //判断金币是否不够
                    if (!room.IsFriendRoom)
                    {
                        if (playerBaseInfo.GoldNum < gameControllerComponent.RoomConfig.MinThreshold)
                        {
                            room.GamerBroadcast(_gamer, new Actor_GamerReadyTimeOut()
                            {
                                Message = "金币不足"
                            });
                            room.Remove(_gamer.UserID);
                            _gamer.Dispose();
                            if (room.Count == 0)
                            {
                                GameHelp.RoomDispose(room);
                                return;
                            }
                            continue;
                        }
                    }

                    PlayerInfo playerInfo = PlayerInfoFactory.Create(playerBaseInfo);
                    gamerInfo.playerInfo = playerInfo;

                    Gamers.Add(gamerInfo);
                }

                Actor_GamerEnterRoom actorGamerEnterRoom = new Actor_GamerEnterRoom()
                {
                    RoomType = (int)gameControllerComponent.RoomConfig.Id,
                    Gamers   = Gamers
                };
                if (room.IsFriendRoom)
                {
                    actorGamerEnterRoom.RoomId         = gameControllerComponent.RoomConfig.FriendRoomId;
                    actorGamerEnterRoom.MasterUserId   = gameControllerComponent.RoomConfig.MasterUserId;
                    actorGamerEnterRoom.JuCount        = gameControllerComponent.RoomConfig.JuCount;
                    actorGamerEnterRoom.Multiples      = gameControllerComponent.RoomConfig.Multiples;
                    actorGamerEnterRoom.CurrentJuCount = room.CurrentJuCount;
                }

                room.Broadcast(actorGamerEnterRoom);

//                if (room.IsFriendRoom)
//                {
                await Actor_GamerReadyHandler.GamerReady(gamer, new Actor_GamerReady()
                {
                });

//                }
            }
            catch (Exception e)
            {
                Log.Error(e);
            }

            await Task.CompletedTask;
        }
예제 #8
0
        /// <summary>
        /// 加入房间Actor
        /// </summary>
        /// <param name="self"></param>
        /// <param name="userId"></param>
        public static async Task BroadGamerEnter(this Room self, long userId)
        {
            List <GamerInfo> gamerInfos  = new List <GamerInfo>();
            long             roomType    = self.GetComponent <GameControllerComponent>().RoomConfig.Id;
            GamerInfo        currentInfo = null;

            for (int i = 0; i < self.GetAll().Length; i++)
            {
                Gamer _gamer = self.GetAll()[i];
                if (_gamer == null)
                {
                    continue;
                }
                GamerInfo gamerInfo = new GamerInfo();
                gamerInfo.UserID    = _gamer.UserID;
                gamerInfo.SeatIndex = self.GetGamerSeat(_gamer.UserID);
                gamerInfo.IsReady   = _gamer.IsReady;

                if (_gamer.playerBaseInfo == null)
                {
                    _gamer.playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(gamerInfo.UserID);
                }

                PlayerInfo playerInfo = PlayerInfoFactory.Create(_gamer.playerBaseInfo);
                gamerInfo.playerInfo = playerInfo;

                if (gamerInfo.UserID == userId)
                {
                    currentInfo = gamerInfo;
                }

                gamerInfos.Add(gamerInfo);
            }

            foreach (var _gamer in self.GetAll())
            {
                if (_gamer == null || _gamer.isOffline)
                {
                    continue;
                }

                //第一次进入
                if (_gamer.UserID == userId)
                {
                    Actor_GamerEnterRoom actorGamerEnterRoom = new Actor_GamerEnterRoom()
                    {
                        RoomType = (int)roomType,
                        Gamers   = gamerInfos,
                    };

                    if (roomType == 3)
                    {
                        GameControllerComponent gameControllerComponent = self.GetComponent <GameControllerComponent>();
                        actorGamerEnterRoom.RoomId         = gameControllerComponent.RoomConfig.FriendRoomId;
                        actorGamerEnterRoom.MasterUserId   = gameControllerComponent.RoomConfig.MasterUserId;
                        actorGamerEnterRoom.JuCount        = gameControllerComponent.RoomConfig.JuCount;
                        actorGamerEnterRoom.Multiples      = gameControllerComponent.RoomConfig.Multiples;
                        actorGamerEnterRoom.CurrentJuCount = self.CurrentJuCount;
                    }

                    self.GamerBroadcast(_gamer, actorGamerEnterRoom);
                }
                //有人加入
                else
                {
                    Actor_GamerJionRoom actorGamerJionRoom = new Actor_GamerJionRoom()
                    {
                        Gamer = currentInfo
                    };

                    self.GamerBroadcast(_gamer, actorGamerJionRoom);
                }
            }
        }
예제 #9
0
        /// <summary>
        /// 更新任务
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="taskId"></param>
        /// <param name="progress"></param>
        public static async Task UpdateTask(long uid, int taskId, int progress)
        {
            DBProxyComponent        proxyComponent       = Game.Scene.GetComponent <DBProxyComponent>();
            TaskInfo                taskInfo             = new TaskInfo();
            List <TaskProgressInfo> taskProgressInfoList =
                await proxyComponent.QueryJson <TaskProgressInfo>($"{{UId:{uid},TaskId:{taskId}}}");

            if (taskProgressInfoList.Count <= 0)
            {
                TaskProgressInfo info   = ComponentFactory.CreateWithId <TaskProgressInfo>(IdGenerater.GenerateId());
                TaskConfig       config = ConfigHelp.Get <TaskConfig>(taskId);
//                TaskConfig config = TaskData.getInstance().GetDataByTaskId(taskId);
                info.IsGet       = false;
                info.UId         = uid;
                info.Name        = config.Name;
                info.TaskId      = (int)config.Id;
                info.IsComplete  = false;
                info.Target      = config.Target;
                info.Reward      = config.Reward;
                info.Desc        = config.Desc;
                info.CurProgress = 0;

                await proxyComponent.Save(info);

                taskProgressInfoList =
                    await proxyComponent.QueryJson <TaskProgressInfo>($"{{UId:{uid},TaskId:{taskId}}}");
            }

            if (taskProgressInfoList.Count > 0)
            {
                /*
                 * progress = -1  代表输
                 * progress = 1  代表赢
                 */
                if (taskId == 104)
                {
                    if (!taskProgressInfoList[0].IsComplete)
                    {
                        if (progress == -1)
                        {
                            taskProgressInfoList[0].CurProgress = 0;
                            await proxyComponent.Save(taskProgressInfoList[0]);
                        }
                        else if (progress == 1)
                        {
                            taskProgressInfoList[0].CurProgress += progress;
                            if (taskProgressInfoList[0].CurProgress == taskProgressInfoList[0].Target)
                            {
                                taskProgressInfoList[0].IsComplete = true;
                            }

                            await proxyComponent.Save(taskProgressInfoList[0]);
                        }
                    }
                }
                else
                {
                    taskProgressInfoList[0].CurProgress += progress;
                    if (taskProgressInfoList[0].CurProgress >= taskProgressInfoList[0].Target)
                    {
                        taskProgressInfoList[0].IsComplete = true;
                    }

                    await proxyComponent.Save(taskProgressInfoList[0]);
                }
            }

            // 增加转盘次数
            if (taskId == 101)
            {
                if (taskProgressInfoList[0].CurProgress < 4)
                {
                    PlayerBaseInfo playerBaseInfo = await DBCommonUtil.getPlayerBaseInfo(uid);

                    ++playerBaseInfo.ZhuanPanCount;
                    await proxyComponent.Save(playerBaseInfo);
                }
            }

//            Log.Debug("UpdateTask111111111111");
        }