Example #1
0
        public TCPProcessCmdResults ProcessQueryMerlinDataCmd(DBManager dbMgr, TCPOutPacketPool pool, GameServerClient client, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            MerlinGrowthSaveDBData updateMerlinData = null;
            int    nRoleID = -1;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                nRoleID = Convert.ToInt32(cmdData);
                DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref nRoleID);
                if (null != dbRoleInfo)
                {
                    lock (dbRoleInfo)
                    {
                        updateMerlinData = dbRoleInfo.MerlinData;
                    }
                }
                else
                {
                    updateMerlinData = MerlinDBOperate.QueryMerlinData(dbMgr, nRoleID);
                }
                if (null != updateMerlinData)
                {
                    tcpOutPacket = DataHelper.ObjectToTCPOutPacket <MerlinGrowthSaveDBData>(updateMerlinData, pool, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                updateMerlinData = new MerlinGrowthSaveDBData();
                for (int i = 0; i < 4; i++)
                {
                    updateMerlinData._ActiveAttr[i]   = 0.0;
                    updateMerlinData._UnActiveAttr[i] = 0.0;
                }
                tcpOutPacket = DataHelper.ObjectToTCPOutPacket <MerlinGrowthSaveDBData>(updateMerlinData, pool, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
        public static MerlinGrowthSaveDBData QueryMerlinData(DBManager dbMgr, int nRoleID)
        {
            MySQLConnection        conn       = null;
            MerlinGrowthSaveDBData MerlinData = null;

            try
            {
                conn = dbMgr.DBConns.PopDBConnection();
                string cmdText = string.Format("SELECT roleID, (SELECT rname  FROM t_roles WHERE rid = roleID ) AS roleName, occupation, level, level_up_fail_num, starNum, starExp, luckyPoint, toTicks, addTime, activeFrozen, activePalsy, activeSpeedDown, activeBlow, unActiveFrozen, unActivePalsy, unActiveSpeedDown, unActiveBlow FROM t_merlin_magic_book WHERE roleID = {0}", nRoleID);
                GameDBManager.SystemServerSQLEvents.AddEvent(string.Format("+SQL: {0}", cmdText), EventLevels.Important);
                MySQLCommand cmd = new MySQLCommand(cmdText, conn);
                try
                {
                    MySQLDataReader reader = cmd.ExecuteReaderEx();
                    if (reader.Read())
                    {
                        MerlinData                  = new MerlinGrowthSaveDBData();
                        MerlinData._RoleID          = Global.SafeConvertToInt32(reader["roleID"].ToString(), 10);
                        MerlinData._Occupation      = Global.SafeConvertToInt32(reader["occupation"].ToString(), 10);
                        MerlinData._Level           = Global.SafeConvertToInt32(reader["level"].ToString(), 10);
                        MerlinData._LevelUpFailNum  = Global.SafeConvertToInt32(reader["level_up_fail_num"].ToString(), 10);
                        MerlinData._StarNum         = Global.SafeConvertToInt32(reader["starNum"].ToString(), 10);
                        MerlinData._StarExp         = Global.SafeConvertToInt32(reader["starExp"].ToString(), 10);
                        MerlinData._LuckyPoint      = Global.SafeConvertToInt32(reader["luckyPoint"].ToString(), 10);
                        MerlinData._ToTicks         = DataHelper.ConvertToTicks(reader["toTicks"].ToString());
                        MerlinData._AddTime         = DataHelper.ConvertToTicks(reader["addTime"].ToString());
                        MerlinData._ActiveAttr[0]   = (double)(Global.SafeConvertToInt32(reader["activeFrozen"].ToString(), 10) / 100);
                        MerlinData._ActiveAttr[1]   = (double)(Global.SafeConvertToInt32(reader["activePalsy"].ToString(), 10) / 100);
                        MerlinData._ActiveAttr[2]   = (double)(Global.SafeConvertToInt32(reader["activeSpeedDown"].ToString(), 10) / 100);
                        MerlinData._ActiveAttr[3]   = (double)(Global.SafeConvertToInt32(reader["activeBlow"].ToString(), 10) / 100);
                        MerlinData._UnActiveAttr[0] = (double)(Global.SafeConvertToInt32(reader["unActiveFrozen"].ToString(), 10) / 100);
                        MerlinData._UnActiveAttr[1] = (double)(Global.SafeConvertToInt32(reader["unActivePalsy"].ToString(), 10) / 100);
                        MerlinData._UnActiveAttr[2] = (double)(Global.SafeConvertToInt32(reader["unActiveSpeedDown"].ToString(), 10) / 100);
                        MerlinData._UnActiveAttr[3] = (double)(Global.SafeConvertToInt32(reader["unActiveBlow"].ToString(), 10) / 100);
                    }
                }
                catch (Exception)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("查询数据库失败: {0}", cmdText), null, true);
                }
                cmd.Dispose();
                cmd = null;
            }
            finally
            {
                if (null != conn)
                {
                    dbMgr.DBConns.PushDBConnection(conn);
                }
            }
            return(MerlinData);
        }
        public static bool InsertMerlinData(DBManager dbMgr, MerlinGrowthSaveDBData merlinData, string addTime)
        {
            bool result;

            if (null == merlinData)
            {
                result = false;
            }
            else
            {
                bool ret = false;
                using (MyDbConnection3 conn = new MyDbConnection3(false))
                {
                    string endTime = new DateTime(merlinData._ToTicks * 10000L).ToString("yyyy-MM-dd HH:mm:ss");
                    string cmdText = string.Format("INSERT INTO t_merlin_magic_book(roleID, occupation, level, level_up_fail_num, starNum, starExp, luckyPoint, toTicks, addTime, activeFrozen, activePalsy, activeSpeedDown, activeBlow, unActiveFrozen, unActivePalsy, unActiveSpeedDown, unActiveBlow) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}, '{7}', '{8}', {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16})", new object[]
                    {
                        merlinData._RoleID,
                        merlinData._Occupation,
                        merlinData._Level,
                        merlinData._LevelUpFailNum,
                        merlinData._StarNum,
                        merlinData._StarExp,
                        merlinData._LuckyPoint,
                        endTime,
                        addTime,
                        merlinData._ActiveAttr[0] * 100.0,
                        merlinData._ActiveAttr[1] * 100.0,
                        merlinData._ActiveAttr[2] * 100.0,
                        merlinData._ActiveAttr[3] * 100.0,
                        merlinData._UnActiveAttr[0] * 100.0,
                        merlinData._UnActiveAttr[1] * 100.0,
                        merlinData._UnActiveAttr[2] * 100.0,
                        merlinData._UnActiveAttr[3] * 100.0
                    });
                    ret = conn.ExecuteNonQueryBool(cmdText, 0);
                }
                result = ret;
            }
            return(result);
        }
Example #4
0
        public TCPProcessCmdResults ProcessInsertMerlinDataCmd(DBManager dbMgr, GameServerClient client, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            MerlinGrowthSaveDBData updateMerlinData = null;
            int  nRoleID = -1;
            bool bRet    = false;

            try
            {
                nRoleID          = BitConverter.ToInt32(data, 0);
                updateMerlinData = DataHelper.BytesToObject <MerlinGrowthSaveDBData>(data, 4, count - 4);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                client.sendCmd <bool>(nID, bRet);
                return(TCPProcessCmdResults.RESULT_OK);
            }
            try
            {
                DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref nRoleID);
                if (null == dbRoleInfo)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, nRoleID), null, true);
                    client.sendCmd <bool>(nID, bRet);
                    return(TCPProcessCmdResults.RESULT_OK);
                }
                DateTime now     = DateTime.Now;
                string   addTime = now.ToString("yyyy-MM-dd HH:mm:ss");
                long     ticks   = now.Ticks / 10000L;
                bRet = MerlinDBOperate.InsertMerlinData(dbMgr, updateMerlinData, addTime);
                if (!bRet)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("添加一个新的梅林魔法书失败,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, nRoleID), null, true);
                }
                else
                {
                    lock (dbRoleInfo)
                    {
                        if (null == dbRoleInfo.MerlinData)
                        {
                            dbRoleInfo.MerlinData = new MerlinGrowthSaveDBData();
                        }
                        dbRoleInfo.MerlinData._RoleID       = updateMerlinData._RoleID;
                        dbRoleInfo.MerlinData._Occupation   = updateMerlinData._Occupation;
                        dbRoleInfo.MerlinData._Level        = updateMerlinData._Level;
                        dbRoleInfo.MerlinData._StarNum      = updateMerlinData._StarNum;
                        dbRoleInfo.MerlinData._StarExp      = updateMerlinData._StarExp;
                        dbRoleInfo.MerlinData._LuckyPoint   = updateMerlinData._LuckyPoint;
                        dbRoleInfo.MerlinData._ToTicks      = updateMerlinData._ToTicks;
                        dbRoleInfo.MerlinData._AddTime      = ticks;
                        dbRoleInfo.MerlinData._ActiveAttr   = updateMerlinData._ActiveAttr;
                        dbRoleInfo.MerlinData._UnActiveAttr = updateMerlinData._UnActiveAttr;
                        MerlinRankManager.getInstance().createMerlinData(nRoleID);
                    }
                }
                client.sendCmd <bool>(nID, bRet);
                return(TCPProcessCmdResults.RESULT_OK);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            client.sendCmd <bool>(nID, bRet);
            return(TCPProcessCmdResults.RESULT_OK);
        }