Beispiel #1
0
 public void WriteCoupleData(CoupleArenaCoupleDataK coupleData)
 {
     if (coupleData != null)
     {
         try
         {
             string sql = string.Format("INSERT INTO t_couple_arena_group(`couple_id`,`man_rid`,`man_zoneid`,`wife_rid`,`wife_zoneid`,`total_pk_times`,`total_win_times`,`liansheng`,`jifen`,`duanwei_type`,`duanwei_level`,`rank`,`is_divorced`,`man_data1`,`wife_data1`)  VALUES({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},@man_data1,@wife_data1)  ON DUPLICATE KEY UPDATE `total_pk_times`={5},`total_win_times`={6},`liansheng`={7},`jifen`={8},`duanwei_type`={9},`duanwei_level`={10},`rank`={11},`is_divorced`={12},`man_data1`=@man_data1,`wife_data1`=@wife_data1;", new object[]
             {
                 coupleData.Db_CoupleId,
                 coupleData.ManRoleId,
                 coupleData.ManZoneId,
                 coupleData.WifeRoleId,
                 coupleData.WifeZoneId,
                 coupleData.TotalFightTimes,
                 coupleData.WinFightTimes,
                 coupleData.LianShengTimes,
                 coupleData.JiFen,
                 coupleData.DuanWeiType,
                 coupleData.DuanWeiLevel,
                 coupleData.Rank,
                 coupleData.IsDivorced
             });
             DbHelperMySQL.ExecuteSqlInsertImg(sql, new List <Tuple <string, byte[]> >
             {
                 new Tuple <string, byte[]>("man_data1", coupleData.ManSelectorData),
                 new Tuple <string, byte[]>("wife_data1", coupleData.WifeSelectorData)
             });
         }
         catch (Exception ex)
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("FlushRandList2Db failed, couple_id={0},man={1},wife={2}", coupleData.Db_CoupleId, coupleData.ManRoleId, coupleData.WifeRoleId), ex, true);
         }
     }
 }
Beispiel #2
0
        public List <CoupleArenaCoupleDataK> LoadRankFromDb()
        {
            MySqlDataReader sdr = null;
            List <CoupleArenaCoupleDataK> result = new List <CoupleArenaCoupleDataK>();

            try
            {
                string sql = "SELECT `couple_id`,`man_rid`,`man_zoneid`,`man_data1`,`wife_rid`,`wife_zoneid`,`wife_data1`,`total_pk_times`,`total_win_times`,`liansheng`,`jifen`,`duanwei_type`,`duanwei_level`,`rank`,`is_divorced` FROM t_couple_arena_group ORDER BY `rank`;";
                sdr = DbHelperMySQL.ExecuteReader(sql, false);
                while (sdr != null && sdr.Read())
                {
                    CoupleArenaCoupleDataK data = new CoupleArenaCoupleDataK();
                    data.Db_CoupleId = Convert.ToInt32(sdr["couple_id"]);
                    data.ManRoleId   = Convert.ToInt32(sdr["man_rid"]);
                    data.ManZoneId   = Convert.ToInt32(sdr["man_zoneid"]);
                    if (!sdr.IsDBNull(sdr.GetOrdinal("man_data1")))
                    {
                        data.ManSelectorData = (byte[])sdr["man_data1"];
                    }
                    data.WifeRoleId = Convert.ToInt32(sdr["wife_rid"]);
                    data.WifeZoneId = Convert.ToInt32(sdr["wife_zoneid"]);
                    if (!sdr.IsDBNull(sdr.GetOrdinal("wife_data1")))
                    {
                        data.WifeSelectorData = (byte[])sdr["wife_data1"];
                    }
                    data.TotalFightTimes = Convert.ToInt32(sdr["total_pk_times"]);
                    data.WinFightTimes   = Convert.ToInt32(sdr["total_win_times"]);
                    data.LianShengTimes  = Convert.ToInt32(sdr["liansheng"]);
                    data.DuanWeiType     = Convert.ToInt32(sdr["duanwei_type"]);
                    data.DuanWeiLevel    = Convert.ToInt32(sdr["duanwei_level"]);
                    data.JiFen           = Convert.ToInt32(sdr["jifen"]);
                    data.Rank            = Convert.ToInt32(sdr["rank"]);
                    data.IsDivorced      = Convert.ToInt32(sdr["is_divorced"]);
                    result.Add(data);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.Message);
            }
            finally
            {
                if (sdr != null)
                {
                    sdr.Close();
                }
            }
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// 清除情侣数据,离婚了
        /// </summary>
        /// <param name="roleId1"></param>
        /// <param name="roleId2"></param>
        /// <returns></returns>
        public int CoupleArenaPreDivorce(int roleId1, int roleId2)
        {
            lock (Mutex)
            {
                if (!IsValidCoupleIfExist(roleId1, roleId2))
                {
                    return(StdErrorCode.Error_Server_Internal_Error);
                }

                CoupleArenaQuit(roleId1, roleId2);

                DateTime now = TimeUtil.NowDateTime();
                CoupleArenaCoupleDataK data = null;
                if (!IsInWeekRangeActTimes(now))
                {
                    // 非活动时间内,离婚不影响排行榜,不用清除
                    // 但是第一名离婚,即使复婚也不能再获得称号
                    data = null;
                    if (SyncData.RoleDict.TryGetValue(roleId1, out data))
                    {
                        // 设置为已离婚,并存入数据库
                        data.IsDivorced = 1;
                        Persistence.WriteCoupleData(data);
                        if (data.Rank == 1)
                        {
                            // 如果是第一名才设置更新时间,让GameServer同步到
                            SyncData.ModifyTime = now;
                        }
                    }

                    return(StdErrorCode.Error_Success);
                }

                data = null;
                if (!SyncData.RoleDict.TryGetValue(roleId1, out data))
                {
                    // 加入离婚记录
                    DivorceRecord.Add(roleId1, roleId2);
                    // 夫妻双方不再排行榜上,无效清理
                    return(StdErrorCode.Error_Success);
                }

                if (data == null)
                {
                    return(StdErrorCode.Error_Success);
                }

                // 必须保证竞技数据清理成功
                if (!Persistence.ClearCoupleData(data.Db_CoupleId))
                {
                    return(StdErrorCode.Error_DB_Faild);
                }

                // 优化删除操作
                if (data.Rank - 1 >= 0 && data.Rank - 1 < SyncData.RankList.Count && SyncData.RankList[data.Rank - 1].Db_CoupleId == data.Db_CoupleId)
                {
                    SyncData.RankList.RemoveAt(data.Rank - 1);
                }
                else
                {
                    SyncData.RankList.RemoveAll(_r => _r.Db_CoupleId == data.Db_CoupleId);
                }

                // 加入离婚记录
                DivorceRecord.Add(roleId1, roleId2);
                SyncData.BuildRoleDict();
                SyncData.ModifyTime = now;

                this.IsNeedSort = true;

                return(StdErrorCode.Error_Success);
            }
        }
Beispiel #4
0
        private void HandlePkResult(int man, int manzone, byte[] mandata, int wife, int wifezone, byte[] wifedata, int pkDuanWeiType, int pkDuanWeiLevel, CoupleArenaPkResultItem retData)
        {
            CoupleArenaCoupleDataK coupleData = null;

            if (!SyncData.RoleDict.TryGetValue(man, out coupleData))
            {
                coupleData                  = new CoupleArenaCoupleDataK();
                coupleData.Db_CoupleId      = Persistence.GetNextDbCoupleId();
                coupleData.ManRoleId        = man;
                coupleData.ManZoneId        = manzone;
                coupleData.ManSelectorData  = mandata;
                coupleData.WifeRoleId       = wife;
                coupleData.WifeZoneId       = wifezone;
                coupleData.WifeSelectorData = wifedata;
                coupleData.DuanWeiLevel     = _DuanWeiCfgList[0].DuanWeiLevel;
                coupleData.DuanWeiType      = _DuanWeiCfgList[0].DuanWeiType;
                coupleData.Rank             = SyncData.RankList.Count + 1;
                if (retData.Result != (int)ECoupleArenaPkResult.Invalid)
                {
                    SyncData.RankList.Add(coupleData);
                    SyncData.RoleDict[coupleData.ManRoleId]  = coupleData;
                    SyncData.RoleDict[coupleData.WifeRoleId] = coupleData;
                }
            }
            else
            {
                // 更新形象
                coupleData.ManSelectorData  = mandata;
                coupleData.WifeSelectorData = wifedata;
            }

            retData.OldDuanWeiType  = coupleData.DuanWeiType;
            retData.OldDuanWeiLevel = coupleData.DuanWeiLevel;

            // 失败扣除自己段位的积分
            _CoupleArenaDuanWeiCfg duanweiCfgLose = _DuanWeiCfgList.Find(
                _d => _d.DuanWeiLevel == coupleData.DuanWeiLevel && _d.DuanWeiType == coupleData.DuanWeiType);

            if (duanweiCfgLose == null)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("couplearena.HandlePkResult can't find duanwei cfg ,type={0}, level={1}", coupleData.DuanWeiType, coupleData.DuanWeiLevel));
                return;
            }

            // 胜利奖励对方段位的积分
            _CoupleArenaDuanWeiCfg duanweiCfgWin = _DuanWeiCfgList.Find(
                _d => _d.DuanWeiLevel == pkDuanWeiLevel && _d.DuanWeiType == pkDuanWeiType);

            if (duanweiCfgWin == null)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("couplearena.HandlePkResult can't find duanwei cfg ,type={0}, level={1}", pkDuanWeiType, pkDuanWeiLevel));
                return;
            }

            if (retData.Result == (int)ECoupleArenaPkResult.Invalid)
            {
                retData.NewDuanWeiType  = coupleData.DuanWeiType;
                retData.NewDuanWeiLevel = coupleData.DuanWeiLevel;
            }
            else
            {
                coupleData.TotalFightTimes++;
                if (retData.Result == (int)ECoupleArenaPkResult.Win)
                {
                    coupleData.WinFightTimes++;
                    coupleData.LianShengTimes++;
                    coupleData.JiFen += duanweiCfgWin.WinJiFen;

                    retData.GetJiFen = duanweiCfgWin.WinJiFen;
                }
                else
                {
                    coupleData.LianShengTimes = 0;
                    coupleData.JiFen         += duanweiCfgLose.LoseJiFen;
                    coupleData.JiFen          = Math.Max(coupleData.JiFen, 0);

                    retData.GetJiFen = duanweiCfgLose.LoseJiFen;
                }

                ParseDuanweiByJiFen(coupleData.JiFen, out coupleData.DuanWeiType, out coupleData.DuanWeiLevel);
                SyncData.ModifyTime = TimeUtil.NowDateTime();

                retData.NewDuanWeiLevel = coupleData.DuanWeiLevel;
                retData.NewDuanWeiType  = coupleData.DuanWeiType;
                this.IsNeedSort         = true;
            }

            if (retData.Result != (int)ECoupleArenaPkResult.Invalid)
            {
                Persistence.WriteCoupleData(coupleData);
            }
        }
Beispiel #5
0
        public int CoupleArenaPreDivorce(int roleId1, int roleId2)
        {
            int result;

            lock (this.Mutex)
            {
                DateTime now = TimeUtil.NowDateTime();
                if (!this.IsValidCoupleIfExist(roleId1, roleId2))
                {
                    if (!this.IsInWeekRangeActTimes(now))
                    {
                        CoupleArenaCoupleDataK coupleData;
                        this.SyncData.RoleDict.TryGetValue(roleId1, out coupleData);
                        CoupleArenaCoupleDataK coupleData2;
                        this.SyncData.RoleDict.TryGetValue(roleId2, out coupleData2);
                        if (coupleData != null && coupleData.IsDivorced == 1)
                        {
                            return(1);
                        }
                        if (coupleData2 != null && coupleData2.IsDivorced == 1)
                        {
                            return(1);
                        }
                    }
                    result = -11003;
                }
                else
                {
                    this.CoupleArenaQuit(roleId1, roleId2);
                    CoupleArenaCoupleDataK data = null;
                    if (!this.IsInWeekRangeActTimes(now))
                    {
                        data = null;
                        if (this.SyncData.RoleDict.TryGetValue(roleId1, out data))
                        {
                            data.IsDivorced = 1;
                            this.Persistence.WriteCoupleData(data);
                            if (data.Rank == 1)
                            {
                                this.SyncData.ModifyTime = now;
                            }
                        }
                        result = 1;
                    }
                    else
                    {
                        data = null;
                        if (!this.SyncData.RoleDict.TryGetValue(roleId1, out data))
                        {
                            this.DivorceRecord.Add(roleId1, roleId2);
                            result = 1;
                        }
                        else if (data == null)
                        {
                            result = 1;
                        }
                        else if (!this.Persistence.ClearCoupleData(data.Db_CoupleId))
                        {
                            result = -15;
                        }
                        else
                        {
                            if (data.Rank - 1 >= 0 && data.Rank - 1 < this.SyncData.RankList.Count && this.SyncData.RankList[data.Rank - 1].Db_CoupleId == data.Db_CoupleId)
                            {
                                this.SyncData.RankList.RemoveAt(data.Rank - 1);
                            }
                            else
                            {
                                this.SyncData.RankList.RemoveAll((CoupleArenaCoupleDataK _r) => _r.Db_CoupleId == data.Db_CoupleId);
                            }
                            this.DivorceRecord.Add(roleId1, roleId2);
                            this.SyncData.BuildRoleDict();
                            this.SyncData.ModifyTime = now;
                            this.IsNeedSort          = true;
                            result = 1;
                        }
                    }
                }
            }
            return(result);
        }