void doTask_JoinGame(IntPtr connId, string data)
    {
        try
        {
            JObject jo           = JObject.Parse(data);
            string  tag          = jo.GetValue("tag").ToString();
            string  uid          = jo.GetValue("uid").ToString();
            string  gameroomtype = jo.GetValue("gameroomtype").ToString();
            int     playAction   = Convert.ToInt32(jo.GetValue("playAction"));

            RoomData room = null;

            // 检测该玩家是否已经加入房间
            if (GameUtil.checkPlayerIsInRoom(uid))
            {
                // 给客户端回复
                {
                    JObject respondJO = new JObject();
                    respondJO.Add("tag", tag);
                    respondJO.Add("playAction", playAction);
                    respondJO.Add("gameRoomType", GameUtil.getRoomByUid(uid).m_gameRoomType);
                    respondJO.Add("code", (int)TLJCommon.Consts.Code.Code_CommonFail);

                    // 发送给客户端
                    PlayService.m_serverUtil.sendMessage(connId, respondJO.ToString());
                }

                return;
            }

            lock (m_roomList)
            {
                // 在已有的房间寻找可以加入的房间
                for (int i = 0; i < m_roomList.Count; i++)
                {
                    //if (gameroomtype.CompareTo(m_roomList[i].m_gameRoomType) == 0)
                    if ((gameroomtype.CompareTo(m_roomList[i].m_gameRoomType) == 0) && (1 == m_roomList[i].m_rounds_pvp) && (m_roomList[i].getRoomState() == RoomState.RoomState_waiting))
                    {
                        if (m_roomList[i].joinPlayer(new PlayerData(connId, uid, false, gameroomtype)))
                        {
                            room = m_roomList[i];
                            break;
                        }
                    }
                }

                // 当前没有房间可加入的话则创建一个新的房间
                if (room == null)
                {
                    //room = new RoomData(this, m_roomList.Count + 1, gameroomtype);
                    room = new RoomData(this, gameroomtype);
                    room.joinPlayer(new PlayerData(connId, uid, false, gameroomtype));

                    m_roomList.Add(room);

                    LogUtil.getInstance().writeRoomLog(room, "新建比赛场房间:" + room.getRoomId());
                }
            }

            // 扣除报名费
            {
                string baomingfei = PVPGameRoomDataScript.getInstance().getDataByRoomType(gameroomtype).baomingfei;
                if (baomingfei.CompareTo("0") != 0)
                {
                    List <string> tempList = new List <string>();
                    CommonUtil.splitStr(baomingfei, tempList, ':');
                    Request_ChangeUserWealth.doRequest(uid, int.Parse(tempList[0]), -int.Parse(tempList[1]), "比赛场报名费");
                }
            }

            // 加入房间成功,给客户端回复
            {
                JObject respondJO = new JObject();
                respondJO.Add("tag", tag);
                respondJO.Add("playAction", playAction);
                respondJO.Add("gameRoomType", gameroomtype);
                respondJO.Add("code", (int)TLJCommon.Consts.Code.Code_OK);
                respondJO.Add("roomId", room.getRoomId());

                // 发送给客户端
                PlayService.m_serverUtil.sendMessage(connId, respondJO.ToString());
            }

            // 检测房间人数是否可以开赛
            GameLogic.checkRoomStartGame(room, m_tag, true);
        }
        catch (Exception ex)
        {
            TLJ_PlayService.PlayService.log.Error(m_logFlag + "----" + ":doTask_JoinGame异常:" + ex);
        }
    }
    // 游戏结束
    public override void gameOver(RoomData room)
    {
        try
        {
            room.setRoomState(RoomState.RoomState_end);
            room.m_masterPokerType = -1;

            LogUtil.getInstance().writeRoomLog(room, m_logFlag + "----" + ":比赛结束,roomid = :" + room.getRoomId());

            // 游戏在线统计
            for (int i = 0; i < room.getPlayerDataList().Count; i++)
            {
                Request_OnlineStatistics.doRequest(room.getPlayerDataList()[i].m_uid, room.getRoomId(), room.m_gameRoomType, room.getPlayerDataList()[i].m_isAI, (int)Request_OnlineStatistics.OnlineStatisticsType.OnlineStatisticsType_exit);
            }

            // 计算每个玩家的金币(积分)
            GameUtil.setPlayerScore(room, false);

            // 加减金币
            {
                for (int i = 0; i < room.getPlayerDataList().Count; i++)
                {
                    // 如果玩家这一局赢了,则检测是否有金币加倍buff?
                    if (room.getPlayerDataList()[i].m_score > 0)
                    {
                        bool          canUse        = false;
                        UserInfo_Game userInfo_Game = UserInfo_Game_Manager.getDataByUid(room.getPlayerDataList()[i].m_uid);
                        if (userInfo_Game != null)
                        {
                            for (int j = 0; j < userInfo_Game.BuffData.Count; j++)
                            {
                                if ((userInfo_Game.BuffData[j].prop_id == (int)TLJCommon.Consts.Prop.Prop_jiabeika) && (userInfo_Game.BuffData[j].buff_num > 0))
                                {
                                    userInfo_Game.BuffData[j].buff_num -= 1;
                                    canUse = true;

                                    LogUtil.getInstance().writeRoomLog(room, m_logFlag + "----" + ":此玩家有双倍金币buff,金币奖励加倍 :" + room.getPlayerDataList()[i].m_uid);

                                    break;
                                }
                            }
                        }

                        if (canUse)
                        {
                            room.getPlayerDataList()[i].m_score *= 2;

                            // 扣除玩家buff:加倍卡
                            Request_UseBuff.doRequest(room.getPlayerDataList()[i].m_uid, (int)TLJCommon.Consts.Prop.Prop_jiabeika);
                        }
                    }

                    // 加、减玩家金币值
                    Request_ChangeUserWealth.doRequest(room.getPlayerDataList()[i].m_uid, 1, room.getPlayerDataList()[i].m_score, "休闲场结算");
                }
            }

            // 逻辑处理
            {
                List <string> winnerList = new List <string>();

                // 闲家赢
                if (room.m_getAllScore >= 80)
                {
                    for (int i = 0; i < room.getPlayerDataList().Count; i++)
                    {
                        if (room.getPlayerDataList()[i].m_isBanker == 0)
                        {
                            winnerList.Add(room.getPlayerDataList()[i].m_uid);

                            ++room.getPlayerDataList()[i].m_myLevelPoker;
                            if (room.getPlayerDataList()[i].m_myLevelPoker == 15)
                            {
                                room.getPlayerDataList()[i].m_myLevelPoker = 2;
                            }

                            room.m_levelPokerNum = room.getPlayerDataList()[i].m_myLevelPoker;

                            // 提交任务
                            if (!room.getPlayerDataList()[i].m_isAI)
                            {
                                Request_ProgressTask.doRequest(room.getPlayerDataList()[i].m_uid, 203);
                                Request_ProgressTask.doRequest(room.getPlayerDataList()[i].m_uid, 212);
                            }

                            // 记录胜利次数数据
                            {
                                Request_RecordUserGameData.doRequest(room.getPlayerDataList()[i].m_uid, room.m_gameRoomType, (int)TLJCommon.Consts.GameAction.GameAction_Win);
                            }
                        }
                    }
                }
                // 庄家赢
                else
                {
                    for (int i = 0; i < room.getPlayerDataList().Count; i++)
                    {
                        if (room.getPlayerDataList()[i].m_isBanker == 1)
                        {
                            winnerList.Add(room.getPlayerDataList()[i].m_uid);

                            ++room.getPlayerDataList()[i].m_myLevelPoker;
                            if (room.getPlayerDataList()[i].m_myLevelPoker == 15)
                            {
                                room.getPlayerDataList()[i].m_myLevelPoker = 2;
                            }

                            room.m_levelPokerNum = room.getPlayerDataList()[i].m_myLevelPoker;

                            // 提交任务
                            if (!room.getPlayerDataList()[i].m_isAI)
                            {
                                Request_ProgressTask.doRequest(room.getPlayerDataList()[i].m_uid, 203);
                                Request_ProgressTask.doRequest(room.getPlayerDataList()[i].m_uid, 212);
                            }

                            // 记录胜利次数数据
                            {
                                Request_RecordUserGameData.doRequest(room.getPlayerDataList()[i].m_uid, room.m_gameRoomType, (int)TLJCommon.Consts.GameAction.GameAction_Win);
                            }
                        }
                    }
                }

                // 游戏数据统计
                Request_GameStatistics.doRequest(room, winnerList);
            }

            // 通知
            {
                JObject respondJO;
                {
                    respondJO = new JObject();

                    respondJO.Add("tag", m_tag);
                    respondJO.Add("playAction", (int)TLJCommon.Consts.PlayAction.PlayAction_GameOver);
                    respondJO.Add("getAllScore", room.m_getAllScore);
                    respondJO.Add("isBankerWin", room.m_getAllScore >= 80 ? 0 : 1);
                    respondJO.Add("isContiune", false);
                }

                // 给在线的人推送
                for (int i = 0; i < room.getPlayerDataList().Count; i++)
                {
                    // 推送给客户端
                    if (!room.getPlayerDataList()[i].isOffLine())
                    {
                        if (!(room.getPlayerDataList()[i].m_isAI))
                        {
                            if (respondJO.GetValue("score") != null)
                            {
                                respondJO.Remove("score");
                            }

                            respondJO.Add("score", room.getPlayerDataList()[i].m_score);

                            PlayService.m_serverUtil.sendMessage(room.getPlayerDataList()[i].m_connId, respondJO.ToString());
                        }
                    }
                    else
                    {
                        if (!(room.getPlayerDataList()[i].m_isAI))
                        {
                            // 记录逃跑数据
                            Request_RecordUserGameData.doRequest(room.getPlayerDataList()[i].m_uid, room.m_gameRoomType, (int)TLJCommon.Consts.GameAction.GameAction_Run);
                        }
                    }

                    // 告诉数据库服务器该玩家打完一局
                    {
                        Request_GameOver.doRequest(room.getPlayerDataList()[i].m_uid, room.m_gameRoomType);
                    }
                }
            }

            // 检查是否删除该房间
            {
                if (GameUtil.checkRoomNonePlayer(room))
                {
                    LogUtil.getInstance().writeRoomLog(room, m_logFlag + "----" + ":所有人都离线,解散该房间:" + room.getRoomId());
                    GameLogic.removeRoom(this, room, true);
                }
            }
        }
        catch (Exception ex)
        {
            TLJ_PlayService.PlayService.log.Error(m_logFlag + "----" + ":gameOver异常:" + ex);
        }
    }
    public void sendBaoXiang()
    {
        for (int i = 0; i < m_roomList.Count; i++)
        {
            if (m_roomList[i].m_isStartGame)
            {
                for (int j = 0; j < m_roomList[i].getPlayerDataList().Count; j++)
                {
                    PlayerData player = m_roomList[i].getPlayerDataList()[j];
                    if ((!player.m_isAI) && (!player.isOffLine()))
                    {
                        JObject respondJO;
                        {
                            respondJO = new JObject();

                            respondJO.Add("tag", TLJCommon.Consts.Tag_BaoXiangDrop);

                            // 奖励
                            {
                                int prop_id  = 1;
                                int prop_num = 88;
                                int r        = RandomUtil.getRandom(1, 100);

                                // 5元碎片*1
                                if (r <= 25)
                                {
                                    prop_id  = 121;
                                    prop_num = 1;
                                }
                                // 5元碎片*2
                                else if (r <= 30)
                                {
                                    prop_id  = 121;
                                    prop_num = 2;
                                }
                                // 10元碎片*1
                                else if (r <= 55)
                                {
                                    prop_id  = 122;
                                    prop_num = 1;
                                }
                                // 10元碎片*1
                                else if (r <= 60)
                                {
                                    prop_id  = 122;
                                    prop_num = 2;
                                }
                                // 金币*1
                                else if (r <= 80)
                                {
                                    prop_id  = 1;
                                    prop_num = 88;
                                }
                                // 金币*1
                                else if (r <= 100)
                                {
                                    prop_id  = 1;
                                    prop_num = 188;
                                }

                                string reward = (prop_id + ":" + prop_num);
                                respondJO.Add("reward", reward);

                                Request_ChangeUserWealth.doRequest(player.m_uid, prop_id, prop_num, "宝箱掉落");
                            }
                        }

                        PlayService.m_serverUtil.sendMessage(player.m_connId, respondJO.ToString());
                    }
                }
            }
        }
    }
Exemple #4
0
    // 游戏结束
    public override void gameOver(DDZ_RoomData room)
    {
        try
        {
            room.setRoomState(DDZ_RoomState.RoomState_end);

            LogUtil.getInstance().writeRoomLog(room, m_logFlag + "----" + ":比赛结束,roomid = :" + room.getRoomId());

            // 游戏在线统计
            for (int i = 0; i < room.getPlayerDataList().Count; i++)
            {
                Request_OnlineStatistics.doRequest(room.getPlayerDataList()[i].m_uid, room.getRoomId(), room.m_gameRoomType, room.getPlayerDataList()[i].m_isAI, (int)Request_OnlineStatistics.OnlineStatisticsType.OnlineStatisticsType_exit);
            }

            // 是否春天
            {
                if (room.m_winPlayerData.m_isDiZhu == 1)
                {
                    bool isChunTian = true;
                    for (int i = 0; i < room.getPlayerDataList().Count; i++)
                    {
                        if (room.getPlayerDataList()[i].m_isDiZhu == 0)
                        {
                            if (room.getPlayerDataList()[i].m_outPokerCiShu > 0)
                            {
                                isChunTian = false;
                                break;
                            }
                        }
                    }

                    if (isChunTian)
                    {
                        room.m_beishu_chuntian = 2;
                    }
                }
                else
                {
                    bool isChunTian = true;
                    for (int i = 0; i < room.getPlayerDataList().Count; i++)
                    {
                        if (room.getPlayerDataList()[i].m_isDiZhu == 1)
                        {
                            if (room.getPlayerDataList()[i].m_outPokerCiShu > 1)
                            {
                                isChunTian = false;
                                break;
                            }
                        }
                    }

                    if (isChunTian)
                    {
                        room.m_beishu_chuntian = 2;
                    }
                }
            }

            // 计算每个玩家的金币(积分)
            DDZ_GameUtil.setPlayerScore(room, false);

            // 加减金币
            {
                for (int i = 0; i < room.getPlayerDataList().Count; i++)
                {
                    // 加、减玩家金币值
                    Request_ChangeUserWealth.doRequest(room.getPlayerDataList()[i].m_uid, 1, room.getPlayerDataList()[i].m_score, "斗地主结算");
                }
            }

            //// 逻辑处理
            //{
            //    List<string> winnerList = new List<string>();

            //    // 游戏数据统计
            //    Request_GameStatistics.doRequest(room, winnerList);
            //}

            {
                JObject respondJO = new JObject();
                {
                    respondJO.Add("tag", room.m_tag);
                    respondJO.Add("playAction", (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_GameOver);
                    respondJO.Add("isDiZhuWin", room.m_winPlayerData.m_isDiZhu);

                    for (int i = 0; i < room.getPlayerDataList().Count; i++)
                    {
                        JObject jo = new JObject();
                        jo.Add("score", room.getPlayerDataList()[i].m_score);

                        float beishu = room.m_maxJiaoFenPlayerData.m_jiaofen * room.m_beishu_chuntian * room.m_beishu_bomb;
                        jo.Add("beishu", (int)beishu * (room.getPlayerDataList()[i].m_isJiaBang + 1));

                        respondJO.Add(room.getPlayerDataList()[i].m_uid, jo);
                    }

                    // 倍数
                    for (int i = 0; i < room.getPlayerDataList().Count; i++)
                    {
                        DDZ_PlayerData playerData = room.getPlayerDataList()[i];

                        JArray ja = new JArray();

                        {
                            ja.Add("初始倍数X" + room.m_maxJiaoFenPlayerData.m_jiaofen);

                            if (playerData.m_isJiaBang == 1)
                            {
                                ja.Add("加棒X2");
                            }

                            if (room.m_beishu_bomb > 1)
                            {
                                ja.Add("炸弹X" + room.m_beishu_bomb);
                            }

                            if (room.m_beishu_chuntian > 1)
                            {
                                ja.Add("春天X" + room.m_beishu_chuntian);
                            }
                        }

                        respondJO.Add("beishu_" + playerData.m_uid, ja);
                    }
                }

                for (int i = 0; i < room.getPlayerDataList().Count; i++)
                {
                    // 推送给客户端
                    if (!room.getPlayerDataList()[i].isOffLine())
                    {
                        PlayService.m_serverUtil.sendMessage(room.getPlayerDataList()[i].m_connId, respondJO.ToString());
                    }
                }
            }

            DDZ_GameLogic.removeRoom(this, room, true);
        }
        catch (Exception ex)
        {
            TLJ_PlayService.PlayService.log.Error(m_logFlag + "gameOver异常: " + ex);
        }
    }