/// <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 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> /// <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); }
/// <summary> /// 加载声望勋章基本信息 /// </summary> public static bool LoadPrestigeMedalBasicData() { string fileName = "Config/ShengWangXunZhang.xml"; GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath(fileName)); XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath(fileName)); if (null == xml) { LogManager.WriteLog(LogTypes.Fatal, "加载Config/ShengWangXunZhang.xml时出错!!!文件不存在"); return(false); } try { _prestigeMedalBasicList.Clear(); IEnumerable <XElement> xmlItems = xml.Elements(); foreach (var xmlItem in xmlItems) { if (xmlItem == null) { continue; } PrestigeMedalBasicData config = new PrestigeMedalBasicData(); config.MedalID = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "ID", "0")); config.MedalName = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "Name", "")); config.LifeMax = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "LifeV", "0")); config.AttackMax = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "AddAttack", "0")); config.DefenseMax = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "AddDefense", "0")); config.HitMax = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "HitV", "0")); config.PrestigeCost = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "CostShengWang", "0")); string addString = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "QiangHua", "")); if (addString.Length > 0) { config.RateList = new List <int>(); config.AddNumList = new List <int[]>(); string[] addArr = addString.Split('|'); foreach (string str in addArr) { string[] oneArr = str.Split(','); float rate = float.Parse(oneArr[0]); config.RateList.Add((int)(rate * 100)); List <int> numList = new List <int>(); for (int i = 1; i < oneArr.Length; i++) { numList.Add(int.Parse(oneArr[i])); } config.AddNumList.Add(numList.ToArray()); } } _prestigeMedalBasicList.Add(config.MedalID, config); } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, "加载Config/ShengWangXunZhang.xml时文件出现异常!!!", ex); return(false); } return(true); }
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); }