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); }
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); }