public void UpdateMazingerStoreInfo(GameServerClient client, int nID, byte[] cmdParams, int count) { try { MazingerStoreData data = DataHelper.BytesToObject <MazingerStoreData>(cmdParams, 0, count); if (data != null) { if (!DBWriter.UpdateMazingerStoreInfo(data.RoleID, data.Type, data.Stage, data.StarLevel, data.Exp)) { LogManager.WriteLog(LogTypes.Error, string.Format("更新魔神秘宝信息失败,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, data.RoleID), null, true); client.sendCmd <int>(nID, -1); } } } catch (Exception ex) { client.sendCmd <int>(nID, -1); LogManager.WriteException(ex.ToString()); } client.sendCmd <int>(nID, 1); }
public MazingerStore ProcessMazingerStoreUpGrade(GameClient client, int ClientType, int ClientOpt) { MazingerStore res = new MazingerStore(); res.IsBoom = 0; bool up = false; MazingerStore result; if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.MazingerStore, false)) { LogManager.WriteLog(LogTypes.Error, string.Format("玩家魔神秘宝功能未开启, 玩家id RoleID={0}", client.ClientData.RoleID), null, true); res.result = 12; result = res; } else { if (ClientOpt < 0 || ClientOpt > 1) { res.result = 2; } else if (ClientOpt == 0) { if (this.MazingerStar == null || this.MazingerStarLevelMax == null || !this.MazingerStar.ContainsKey(ClientType) || !this.MazingerStarLevelMax.ContainsKey(ClientType)) { res.result = 3; } else { if (client.ClientData.MazingerStoreDataInfo == null) { client.ClientData.MazingerStoreDataInfo = new Dictionary <int, MazingerStoreData>(); } MazingerStoreData newData = null; bool flag = false; int StarLevelMax = 0; if (client.ClientData.MazingerStoreDataInfo.ContainsKey(ClientType)) { StarLevelMax = this.MazingerStarLevelMax[ClientType][client.ClientData.MazingerStoreDataInfo[ClientType].Stage]; if (client.ClientData.MazingerStoreDataInfo[ClientType].StarLevel >= StarLevelMax) { res.result = 5; goto IL_B64; } newData = this.CopyMazingerStoreMemData(client, ClientType); flag = true; } else { newData = new MazingerStoreData(); newData.RoleID = client.ClientData.RoleID; newData.Type = ClientType; newData.Exp = 0; newData.Stage = 1; newData.StarLevel = 0; StarLevelMax = this.MazingerStarLevelMax[ClientType][newData.Stage]; } if (newData == null || !this.MazingerStar.ContainsKey(newData.Type) || !this.MazingerStar[newData.Type].ContainsKey(newData.Stage) || !this.MazingerStar[newData.Type][newData.Stage].ContainsKey(newData.StarLevel) || this.MazingerStar[newData.Type][newData.Stage][newData.StarLevel].UseGoods == null || this.MazingerStar[newData.Type][newData.Stage][newData.StarLevel].UseGoods.Count == 0) { res.result = 6; } else { List <double> rate = this.GetSystemParamMibao(); if (rate == null || rate.Count != 2) { res.result = 4; } else { int AddExp = this.MazingerStar[newData.Type][newData.Stage][newData.StarLevel].Exp; double rand = Global.GetRandom(); if (rand <= rate[0]) { AddExp = Convert.ToInt32((double)AddExp * rate[1]); res.IsBoom = 1; } foreach (KeyValuePair <int, int> iter in this.MazingerStar[newData.Type][newData.Stage][newData.StarLevel].UseGoods) { bool EquipBindUse; if (!RebornStone.RebornUseGoodHasBinding(client, iter.Key, iter.Value, 1, out EquipBindUse)) { res.result = 7; break; } } if (res.result != 7) { int totleExp = newData.Exp + AddExp; int currLevel = newData.StarLevel; int oldUpExp = this.MazingerStar[newData.Type][newData.Stage][newData.StarLevel].UpExp; while (currLevel < StarLevelMax) { if (totleExp < oldUpExp) { break; } currLevel++; totleExp -= oldUpExp; if (totleExp < 0) { totleExp = 0; break; } if (this.MazingerStar[newData.Type][newData.Stage].ContainsKey(currLevel)) { oldUpExp = this.MazingerStar[newData.Type][newData.Stage][currLevel].UpExp; } if (!up) { up = true; } } newData.StarLevel = currLevel; if (currLevel >= StarLevelMax) { newData.Exp = 0; } else { newData.Exp = totleExp; } if (flag) { int ret = Global.sendToDB <int, MazingerStoreData>(14126, newData, client.ServerId); if (ret < 0) { LogManager.WriteLog(LogTypes.Error, string.Format("魔神秘宝修改数据出错, 玩家id RoleID={0}", client.ClientData.RoleID), null, true); res.result = 10; goto IL_B64; } GameManager.logDBCmdMgr.AddDBLogInfo(-1, "魔神秘宝升星", DateTime.Now.ToString(), newData.Type.ToString(), client.ClientData.RoleName, "系统", ClientType, client.ClientData.ZoneID, client.strUserID, -1, client.ServerId, null); EventLogManager.AddMazingerStoreEvent(client, client.ClientData.MazingerStoreDataInfo[newData.Type].StarLevel, newData.StarLevel, client.ClientData.MazingerStoreDataInfo[newData.Type].Exp, newData.Exp, "魔神秘宝升星"); client.ClientData.MazingerStoreDataInfo[newData.Type] = newData; } else { int ret = Global.sendToDB <int, MazingerStoreData>(14125, newData, client.ServerId); if (ret < 0) { LogManager.WriteLog(LogTypes.Error, string.Format("魔神秘宝插入数据出错, 玩家id RoleID={0}", client.ClientData.RoleID), null, true); res.result = 10; goto IL_B64; } GameManager.logDBCmdMgr.AddDBLogInfo(-1, "魔神秘宝升星", DateTime.Now.ToString(), newData.Type.ToString(), client.ClientData.RoleName, "系统", ClientType, client.ClientData.ZoneID, client.strUserID, -1, client.ServerId, null); EventLogManager.AddMazingerStoreEvent(client, 0, newData.StarLevel, 0, newData.Exp, "魔神秘宝升星"); client.ClientData.MazingerStoreDataInfo.Add(newData.Type, newData); } res.result = 1; res.data = client.ClientData.MazingerStoreDataInfo[newData.Type]; } } } } } else if (this.MazingerGrade == null || this.MazingerGradeLevelMax == null || !this.MazingerGrade.ContainsKey(ClientType) || !this.MazingerGradeLevelMax.ContainsKey(ClientType)) { res.result = 3; } else if (client.ClientData.MazingerStoreDataInfo == null || !client.ClientData.MazingerStoreDataInfo.ContainsKey(ClientType)) { res.result = 11; } else if (client.ClientData.MazingerStoreDataInfo[ClientType].Stage >= this.MazingerGradeLevelMax[ClientType]) { res.result = 5; } else { MazingerStoreData newData = this.CopyMazingerStoreMemData(client, ClientType); if (newData == null || !this.MazingerGrade.ContainsKey(newData.Type) || !this.MazingerGrade[newData.Type].ContainsKey(newData.Stage) || this.MazingerGrade[newData.Type][newData.Stage].UseGoods == null || this.MazingerGrade[newData.Type][newData.Stage].UseGoods.Count == 0) { res.result = 6; } else { foreach (KeyValuePair <int, int> iter in this.MazingerGrade[newData.Type][newData.Stage].UseGoods) { bool EquipBindUse; if (!RebornStone.RebornUseGoodHasBinding(client, iter.Key, iter.Value, 1, out EquipBindUse)) { res.result = 7; break; } } if (res.result != 7) { newData.Exp++; if (this.MazingerGrade[newData.Type][newData.Stage].LuckyOne + newData.Exp >= 110000) { newData.Stage++; newData.StarLevel = 0; newData.Exp = 0; up = true; } else if (this.MazingerGrade[newData.Type][newData.Stage].LuckyOne + newData.Exp > this.MazingerGrade[newData.Type][newData.Stage].LuckyTwo) { if (Global.GetRandom() < this.MazingerGrade[newData.Type][newData.Stage].Rate) { newData.Stage++; newData.StarLevel = 0; newData.Exp = 0; up = true; res.IsBoom = 1; } } int ret = Global.sendToDB <int, MazingerStoreData>(14126, newData, client.ServerId); if (ret < 0) { LogManager.WriteLog(LogTypes.Error, string.Format("魔神秘宝修改数据出错, 玩家id RoleID={0}", client.ClientData.RoleID), null, true); res.result = 10; } else { GameManager.logDBCmdMgr.AddDBLogInfo(-1, "魔神秘宝升阶", DateTime.Now.ToString(), newData.Type.ToString(), client.ClientData.RoleName, "系统", ClientType, client.ClientData.ZoneID, client.strUserID, -1, client.ServerId, null); EventLogManager.AddMazingerStoreEvent(client, client.ClientData.MazingerStoreDataInfo[newData.Type].Stage, newData.Stage, client.ClientData.MazingerStoreDataInfo[newData.Type].Exp, newData.Exp, "魔神秘宝升阶"); client.ClientData.MazingerStoreDataInfo[newData.Type] = newData; res.result = 1; res.data = client.ClientData.MazingerStoreDataInfo[newData.Type]; } } } } IL_B64: if (up && res.result == 1) { Global.RefreshEquipPropAndNotify(client); } result = res; } return(result); }