public bool ProcessCmdPrestigeMedalInfo(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { if (cmdParams.Length != 1) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket, false), cmdParams.Length), null, true); return(false); } int roleID = Convert.ToInt32(cmdParams[0]); if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID)) { LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket, false), roleID), null, true); return(false); } PrestigeMedalData runeData = PrestigeMedalManager.GetPrestigeMedalData(client); client.sendCmd <PrestigeMedalData>(782, runeData, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
public bool ProcessCmdPrestigeMedalInfo(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { //解析用户id,符文id if (cmdParams.Length != 1) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket), cmdParams.Length)); return(false); } int roleID = Convert.ToInt32(cmdParams[0]); if (null == client || client.ClientData.RoleID != roleID) { LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket), roleID)); return(false); } PrestigeMedalData runeData = GetPrestigeMedalData(client); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_PRESTIGE_MEDAL_INFO, runeData); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
/// <summary> /// 返回声望勋章数据 /// </summary> /// <returns></returns> public static PrestigeMedalData GetPrestigeMedalData(GameClient client) { // 如果1.4.1的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { return(null); } //开放等级 声望4阶 if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal)) { return(null); } PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData; if (prestigeMedalData == null) { PrestigeMedalBasicData basic = null; prestigeMedalData = new PrestigeMedalData(); List <int> data = Global.GetRoleParamsIntListFromDB(client, RoleParamName.PrestigeMedal); if (data == null || data.Count <= 0) { basic = GetPrestigeMedalBasicDataByID(_defaultMedalID); prestigeMedalData.RoleID = client.ClientData.RoleID; prestigeMedalData.MedalID = basic.MedalID; ModifyPrestigeMedalData(client, prestigeMedalData, true); } else { prestigeMedalData.RoleID = client.ClientData.RoleID; prestigeMedalData.MedalID = data[0]; prestigeMedalData.LifeAdd = data[1]; prestigeMedalData.AttackAdd = data[2]; prestigeMedalData.DefenseAdd = data[3]; prestigeMedalData.HitAdd = data[4]; if (prestigeMedalData.MedalID > _prestigeMedalBasicList.Count) { prestigeMedalData.UpResultType = 3; basic = GetPrestigeMedalBasicDataByID(_prestigeMedalBasicList.Count); } else { basic = GetPrestigeMedalBasicDataByID(prestigeMedalData.MedalID); } } prestigeMedalData.Diamond = GetPrestigeMedalDiamond(client, GetPrestigeMedalUpCount(client)); prestigeMedalData.Prestige = basic.PrestigeCost; client.ClientData.prestigeMedalData = prestigeMedalData; } prestigeMedalData.PrestigeLeft = GameManager.ClientMgr.GetShengWangValue(client); return(prestigeMedalData); }
public static void SetPrestigeMedalCount(GameClient client, int count) { count = ((count < 0) ? 0 : count); PrestigeMedalManager.ModifyPrestigeMedalUpCount(client, count, true); PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData; prestigeMedalData.Diamond = PrestigeMedalManager.GetPrestigeMedalDiamond(client, PrestigeMedalManager.GetPrestigeMedalUpCount(client)); client.ClientData.prestigeMedalData = prestigeMedalData; }
/// <summary> /// 声望勋章——设置当天升级次数 /// </summary> /// <param name="client"></param> /// <param name="level"></param> /// <returns></returns> public static void SetPrestigeMedalCount(GameClient client, int count) { count = count < 0 ? 0 : count; ModifyPrestigeMedalUpCount(client, count, true); PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData; prestigeMedalData.Diamond = GetPrestigeMedalDiamond(client, GetPrestigeMedalUpCount(client)); client.ClientData.prestigeMedalData = prestigeMedalData; }
public static void initSetPrestigeMedalProps(GameClient client) { if (!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { if (GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal, false)) { PrestigeMedalData PrestigeMedalData = PrestigeMedalManager.GetPrestigeMedalData(client); PrestigeMedalManager.SetPrestigeMedalProps(client, PrestigeMedalData); } } }
/// <summary> /// 修改声望勋章数据 /// </summary> /// <returns></returns> public static void ModifyPrestigeMedalData(GameClient client, PrestigeMedalData data, bool writeToDB = false) { // 如果1.4.1的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { return; } List <int> dataList = new List <int>(); dataList.AddRange(new int[] { data.MedalID, data.LifeAdd, data.AttackAdd, data.DefenseAdd, data.HitAdd }); Global.SaveRoleParamsIntListToDB(client, dataList, RoleParamName.PrestigeMedal, writeToDB); }
public static void SetPrestigeMedalLevel(GameClient client, int level) { level = ((level <= 0) ? 1 : level); PrestigeMedalData prestigeMedalData = new PrestigeMedalData(); PrestigeMedalBasicData basic = PrestigeMedalManager.GetPrestigeMedalBasicDataByID(level); prestigeMedalData.RoleID = client.ClientData.RoleID; prestigeMedalData.MedalID = basic.MedalID; if (prestigeMedalData.MedalID > PrestigeMedalManager._prestigeMedalBasicList.Count) { prestigeMedalData.UpResultType = 3; } PrestigeMedalManager.ModifyPrestigeMedalData(client, prestigeMedalData, true); client.ClientData.prestigeMedalData = prestigeMedalData; PrestigeMedalManager.SetPrestigeMedalProps(client, prestigeMedalData); }
/// <summary> /// 设置声望勋章属性 /// </summary> /// <param name="client"></param> public static void initSetPrestigeMedalProps(GameClient client) { // 如果1.4.1的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { return; } //开放等级 声望4阶 if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal)) { return; } PrestigeMedalData PrestigeMedalData = GetPrestigeMedalData(client); SetPrestigeMedalProps(client, PrestigeMedalData); }
/// <summary> /// 设置声望勋章属性 /// </summary> /// <param name="client"></param> public static void SetPrestigeMedalProps(GameClient client, PrestigeMedalData PrestigeMedalData) { // 如果1.4.1的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { return; } //加成 int life = PrestigeMedalData.LifeAdd; int attack = PrestigeMedalData.AttackAdd; int defense = PrestigeMedalData.DefenseAdd; int hit = PrestigeMedalData.HitAdd; foreach (PrestigeMedalBasicData d in _prestigeMedalBasicList.Values) { if (d.MedalID < PrestigeMedalData.MedalID) { life += d.LifeMax; attack += d.AttackMax; defense += d.DefenseMax; hit += d.HitMax; } } //额外加成 double zhuoYue = 0; double diKang = 0; if (PrestigeMedalData.MedalID > 1) { PrestigeMedalSpecialData d = GetPrestigeMedalSpecialDataByID(PrestigeMedalData.MedalID - 1); zhuoYue += d.DoubleAttack; diKang += d.DiDouble; } client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.PrestigeMedal, (int)ExtPropIndexes.MaxLifeV, life); client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.PrestigeMedal, (int)ExtPropIndexes.AddAttack, attack); client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.PrestigeMedal, (int)ExtPropIndexes.AddDefense, defense); client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.PrestigeMedal, (int)ExtPropIndexes.HitV, hit); client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.PrestigeMedal, (int)ExtPropIndexes.DoubleAttack, zhuoYue); client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.PrestigeMedal, (int)ExtPropIndexes.DeDoubleAttack, diKang); }
public bool ProcessCmdPrestigeMedalUp(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { //解析用户id,符文id if (cmdParams.Length != 2) { LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket), cmdParams.Length)); return(false); } int roleID = Convert.ToInt32(cmdParams[0]); int runeID = Convert.ToInt32(cmdParams[1]); if (null == client || client.ClientData.RoleID != roleID) { LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket), roleID)); return(false); } // 如果1.4.1的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { LogManager.WriteLog(LogTypes.Error, string.Format("ProcessCmdPrestigeMedalUp功能尚未开放, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(client.ClientSocket), roleID)); return(false); } PrestigeMedalData runeData = UpPrestigeMedal(client, runeID); client.sendCmd((int)TCPGameServerCmds.CMD_SPR_PRESTIGE_MEDAL_UP, runeData); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false); } return(false); }
/// <summary> /// 声望勋章——提升 /// </summary> /// <param name="client"></param> /// <param name="MedalID"></param> /// <returns></returns> public static PrestigeMedalData UpPrestigeMedal(GameClient client, int MedalID) { PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData; if (prestigeMedalData != null && prestigeMedalData.UpResultType == (int)PrestigeMedalResultType.End) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EOver; return(prestigeMedalData); } if (prestigeMedalData == null || prestigeMedalData.MedalID != MedalID) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.Fail; return(prestigeMedalData); } //开放等级 声望4阶 bool isOpen = GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal); if (!isOpen) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoOpen; return(prestigeMedalData); } PrestigeMedalBasicData basicMedal = GetPrestigeMedalBasicDataByID(MedalID); //声望 int prestigeNow = GameManager.ClientMgr.GetShengWangValue(client); if (basicMedal.PrestigeCost > prestigeNow) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoPrestige; return(prestigeMedalData); } //钻石 int upCount = GetPrestigeMedalUpCount(client); int diamondNeed = GetPrestigeMedalDiamond(client, upCount); if (diamondNeed > 0 && !GameManager.ClientMgr.SubUserMoney(client, diamondNeed, "声望勋章提升")) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoDiamond; return(prestigeMedalData); } try { GameManager.ClientMgr.ModifyShengWangValue(client, -basicMedal.PrestigeCost, "声望勋章提升"); } catch (Exception) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.EnoPrestige; return(prestigeMedalData); } //几率 int[] addNums = null; int rate = 0; int r = Global.GetRandomNumber(0, 100); for (int i = 0; i < basicMedal.RateList.Count; i++) { rate += basicMedal.RateList[i]; if (r <= rate) { addNums = basicMedal.AddNumList[i]; prestigeMedalData.BurstType = i;//暴击 break; } } //加成 prestigeMedalData.LifeAdd += addNums[0] * _medalRate; prestigeMedalData.LifeAdd = prestigeMedalData.LifeAdd > basicMedal.LifeMax ? basicMedal.LifeMax : prestigeMedalData.LifeAdd; prestigeMedalData.AttackAdd += addNums[1] * _medalRate; prestigeMedalData.AttackAdd = prestigeMedalData.AttackAdd > basicMedal.AttackMax ? basicMedal.AttackMax : prestigeMedalData.AttackAdd; prestigeMedalData.DefenseAdd += addNums[2] * _medalRate; prestigeMedalData.DefenseAdd = prestigeMedalData.DefenseAdd > basicMedal.DefenseMax ? basicMedal.DefenseMax : prestigeMedalData.DefenseAdd; prestigeMedalData.HitAdd += addNums[3] * _medalRate; prestigeMedalData.HitAdd = prestigeMedalData.HitAdd > basicMedal.HitMax ? basicMedal.HitMax : prestigeMedalData.HitAdd; if (prestigeMedalData.LifeAdd < basicMedal.LifeMax || prestigeMedalData.DefenseAdd < basicMedal.DefenseMax || prestigeMedalData.AttackAdd < basicMedal.AttackMax || prestigeMedalData.HitAdd < basicMedal.HitMax) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.Success; prestigeMedalData.Prestige = basicMedal.PrestigeCost; prestigeMedalData.Diamond = GetPrestigeMedalDiamond(client, upCount + 1); } else { prestigeMedalData.MedalID += 1; prestigeMedalData.LifeAdd = 0; prestigeMedalData.AttackAdd = 0; prestigeMedalData.DefenseAdd = 0; prestigeMedalData.HitAdd = 0; prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.Next; if (prestigeMedalData.MedalID > _prestigeMedalBasicList.Count) { prestigeMedalData.UpResultType = (int)PrestigeMedalResultType.End; prestigeMedalData.Prestige = 0; prestigeMedalData.Diamond = 0; } else { basicMedal = GetPrestigeMedalBasicDataByID(prestigeMedalData.MedalID); prestigeMedalData.Prestige = basicMedal.PrestigeCost; prestigeMedalData.Diamond = GetPrestigeMedalDiamond(client, upCount + 1); } } ModifyPrestigeMedalUpCount(client, upCount + 1, true); ModifyPrestigeMedalData(client, prestigeMedalData); client.ClientData.prestigeMedalData = prestigeMedalData; SetPrestigeMedalProps(client, prestigeMedalData); //通知客户端属性变化 GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); // 总生命值和魔法值变化通知(同一个地图才需要通知) GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); prestigeMedalData.PrestigeLeft = GameManager.ClientMgr.GetShengWangValue(client); return(prestigeMedalData); }
public static void SetPrestigeMedalProps(GameClient client, PrestigeMedalData PrestigeMedalData) { if (!GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot4Dot1)) { int life = PrestigeMedalData.LifeAdd; int attack = PrestigeMedalData.AttackAdd; int defense = PrestigeMedalData.DefenseAdd; int hit = PrestigeMedalData.HitAdd; foreach (PrestigeMedalBasicData d in PrestigeMedalManager._prestigeMedalBasicList.Values) { if (d.MedalID < PrestigeMedalData.MedalID) { life += d.LifeMax; attack += d.AttackMax; defense += d.DefenseMax; hit += d.HitMax; } } double zhuoYue = 0.0; double diKang = 0.0; if (PrestigeMedalData.MedalID > 1) { PrestigeMedalSpecialData d2 = PrestigeMedalManager.GetPrestigeMedalSpecialDataByID(PrestigeMedalData.MedalID - 1); zhuoYue += d2.DoubleAttack; diKang += d2.DiDouble; } client.ClientData.PropsCacheManager.SetExtPropsSingle(new object[] { 9, 13, life }); client.ClientData.PropsCacheManager.SetExtPropsSingle(new object[] { 9, 45, attack }); client.ClientData.PropsCacheManager.SetExtPropsSingle(new object[] { 9, 46, defense }); client.ClientData.PropsCacheManager.SetExtPropsSingle(new object[] { 9, 18, hit }); client.ClientData.PropsCacheManager.SetExtPropsSingle(new object[] { 9, 36, zhuoYue }); client.ClientData.PropsCacheManager.SetExtPropsSingle(new object[] { 9, 53, diKang }); } }
public static PrestigeMedalData UpPrestigeMedal(GameClient client, int MedalID) { PrestigeMedalData prestigeMedalData = client.ClientData.prestigeMedalData; PrestigeMedalData result; if (prestigeMedalData != null && prestigeMedalData.UpResultType == 3) { prestigeMedalData.UpResultType = -4; result = prestigeMedalData; } else if (prestigeMedalData == null || prestigeMedalData.MedalID != MedalID) { prestigeMedalData.UpResultType = 0; result = prestigeMedalData; } else if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.PrestigeMedal, false)) { prestigeMedalData.UpResultType = -1; result = prestigeMedalData; } else { PrestigeMedalBasicData basicMedal = PrestigeMedalManager.GetPrestigeMedalBasicDataByID(MedalID); int prestigeNow = GameManager.ClientMgr.GetShengWangValue(client); if (basicMedal.PrestigeCost > prestigeNow) { prestigeMedalData.UpResultType = -2; result = prestigeMedalData; } else { int upCount = PrestigeMedalManager.GetPrestigeMedalUpCount(client); int diamondNeed = PrestigeMedalManager.GetPrestigeMedalDiamond(client, upCount); if (diamondNeed > 0 && !GameManager.ClientMgr.SubUserMoney(client, diamondNeed, "声望勋章提升", true, true, true, true, DaiBiSySType.ShengWangYinJi)) { prestigeMedalData.UpResultType = -3; result = prestigeMedalData; } else { try { GameManager.ClientMgr.ModifyShengWangValue(client, -basicMedal.PrestigeCost, "声望勋章提升", false, true); } catch (Exception) { prestigeMedalData.UpResultType = -2; return(prestigeMedalData); } int[] addNums = null; int rate = 0; int r = Global.GetRandomNumber(0, 100); for (int i = 0; i < basicMedal.RateList.Count; i++) { rate += basicMedal.RateList[i]; if (r <= rate) { addNums = basicMedal.AddNumList[i]; prestigeMedalData.BurstType = i; break; } } prestigeMedalData.LifeAdd += addNums[0] * PrestigeMedalManager._medalRate; prestigeMedalData.LifeAdd = ((prestigeMedalData.LifeAdd > basicMedal.LifeMax) ? basicMedal.LifeMax : prestigeMedalData.LifeAdd); prestigeMedalData.AttackAdd += addNums[1] * PrestigeMedalManager._medalRate; prestigeMedalData.AttackAdd = ((prestigeMedalData.AttackAdd > basicMedal.AttackMax) ? basicMedal.AttackMax : prestigeMedalData.AttackAdd); prestigeMedalData.DefenseAdd += addNums[2] * PrestigeMedalManager._medalRate; prestigeMedalData.DefenseAdd = ((prestigeMedalData.DefenseAdd > basicMedal.DefenseMax) ? basicMedal.DefenseMax : prestigeMedalData.DefenseAdd); prestigeMedalData.HitAdd += addNums[3] * PrestigeMedalManager._medalRate; prestigeMedalData.HitAdd = ((prestigeMedalData.HitAdd > basicMedal.HitMax) ? basicMedal.HitMax : prestigeMedalData.HitAdd); if (prestigeMedalData.LifeAdd < basicMedal.LifeMax || prestigeMedalData.DefenseAdd < basicMedal.DefenseMax || prestigeMedalData.AttackAdd < basicMedal.AttackMax || prestigeMedalData.HitAdd < basicMedal.HitMax) { prestigeMedalData.UpResultType = 1; prestigeMedalData.Prestige = basicMedal.PrestigeCost; prestigeMedalData.Diamond = PrestigeMedalManager.GetPrestigeMedalDiamond(client, upCount + 1); } else { prestigeMedalData.MedalID++; prestigeMedalData.LifeAdd = 0; prestigeMedalData.AttackAdd = 0; prestigeMedalData.DefenseAdd = 0; prestigeMedalData.HitAdd = 0; prestigeMedalData.UpResultType = 2; if (prestigeMedalData.MedalID > PrestigeMedalManager._prestigeMedalBasicList.Count) { prestigeMedalData.UpResultType = 3; prestigeMedalData.Prestige = 0; prestigeMedalData.Diamond = 0; } else { basicMedal = PrestigeMedalManager.GetPrestigeMedalBasicDataByID(prestigeMedalData.MedalID); prestigeMedalData.Prestige = basicMedal.PrestigeCost; prestigeMedalData.Diamond = PrestigeMedalManager.GetPrestigeMedalDiamond(client, upCount + 1); } } PrestigeMedalManager.ModifyPrestigeMedalUpCount(client, upCount + 1, true); PrestigeMedalManager.ModifyPrestigeMedalData(client, prestigeMedalData, true); client.ClientData.prestigeMedalData = prestigeMedalData; PrestigeMedalManager.SetPrestigeMedalProps(client, prestigeMedalData); GameManager.ClientMgr.NotifyUpdateEquipProps(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client); GameManager.ClientMgr.NotifyOthersLifeChanged(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, true, false, 7); prestigeMedalData.PrestigeLeft = GameManager.ClientMgr.GetShengWangValue(client); result = prestigeMedalData; } } } return(result); }