public static void ModifyEffect(GameClient client, int effectID, int talentType, int newLevel) { try { TalentData talentData = client.ClientData.MyTalentData; TalentInfo talentInfo = TalentManager.GetTalentInfoByID(client.ClientData.Occupation, effectID); if (talentInfo != null) { List <TalentEffectInfo> newItemEffectList = talentInfo.EffectList[newLevel]; bool result = TalentManager.DBTalentEffectModify(client.ClientData.RoleID, talentType, effectID, newLevel, client.ClientData.ZoneID, client.ServerId); Dictionary <int, int> countList; (countList = talentData.CountList)[talentType] = countList[talentType] + newLevel; TalentEffectItem effectItemOld = TalentManager.GetOpenEffectItem(talentData, effectID); if (effectItemOld == null) { effectItemOld = new TalentEffectItem(); effectItemOld.ID = effectID; effectItemOld.TalentType = talentType; talentData.EffectList.Add(effectItemOld); } effectItemOld.Level = newLevel; effectItemOld.ItemEffectList = newItemEffectList; } } catch (Exception ex) { LogManager.WriteException(ex.ToString()); } }
void Awake() { TalentInfo talent1 = new TalentInfo(1, "Spirit Enchance", "Light bless you, your mana regenerate faster."); TalentInfo talent2 = new TalentInfo(2, "Inteligence Power", "Long time meditation give you more inteligence"); TalentInfo talent3 = new TalentInfo(3, "Prayer of Fortidue", "Powerfull stamina buff for all raid members."); TalentInfo talent4 = new TalentInfo(4, "Previous focus", "Heal and Flash Heal, heal previeous target for small amout"); TalentInfo talent5 = new TalentInfo(5, "Renew renew", "Heal and Flash Heal can refresh renew on target."); TalentInfo talent6 = new TalentInfo(6, "Bonus Flash", "Cast Flash Heal have chance to make your next Flash Heal instant"); TalentInfo talent7 = new TalentInfo(7, "Ressurect", "After Angel you not die."); TalentInfo talent8 = new TalentInfo(8, "Angel Bless", "Your angel form takes more time."); TalentInfo talent9 = new TalentInfo(9, "Revive", "Ressurect first die person in your raid."); TalentInfo talent10 = new TalentInfo(10, "Prayer of Mana", "Prayer of Healing cost less mana."); TalentInfo talent11 = new TalentInfo(11, "Dispel Healing", "Dispel Magic also heal target."); TalentInfo talent12 = new TalentInfo(12, "Bless Hymn", "Untill Divine Hymn, Prayer of Mending jump to others members, without lose stacks."); TalentInfo talent13 = new TalentInfo(13, "Speed Holy Word", "Holy Word Serenity and Sanctify decrease cooldown more efficiently."); TalentInfo talent14 = new TalentInfo(14, "Holy Word Power", "When Holy Word Serenity or Sanctify finish cooldown, you will heal all raid for small amout."); TalentInfo talent15 = new TalentInfo(15, "Prayer over Time", "Prayer of Mending have chance to leave Renew."); TalentsInfo.Add(talent1); TalentsInfo.Add(talent2); TalentsInfo.Add(talent3); TalentsInfo.Add(talent4); TalentsInfo.Add(talent5); TalentsInfo.Add(talent6); TalentsInfo.Add(talent7); TalentsInfo.Add(talent8); TalentsInfo.Add(talent9); TalentsInfo.Add(talent10); TalentsInfo.Add(talent11); TalentsInfo.Add(talent12); TalentsInfo.Add(talent13); TalentsInfo.Add(talent14); TalentsInfo.Add(talent15); }
private static void LoadTalentInfoData() { TalentManager._TalentInfoList.Clear(); for (int i = 0; i < 6; i++) { Dictionary <int, TalentInfo> list = new Dictionary <int, TalentInfo>(); string fileName = Global.GameResPath(string.Format("Config/TianFuProperty_{0}.xml", i)); XElement xml = CheckHelper.LoadXml(fileName, false); if (null == xml) { TalentManager._TalentInfoList.Add(i, list); } else { try { IEnumerable <XElement> xmlItems = xml.Elements(); foreach (XElement xmlItem in xmlItems) { if (xmlItem != null) { TalentInfo config = new TalentInfo(); config.ID = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "ID", "0")); config.Type = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "TianFuType", "0")); config.Name = Global.GetDefAttributeStr(xmlItem, "Name", ""); config.NeedTalentCount = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "NeedInputPoint", "0")); config.NeedTalentID = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "NeedTianFu", "0")); config.NeedTalentLevel = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "NeedTianFuLevel", "0")); config.LevelMax = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "LevelMax", "0")); config.EffectType = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "EffectType", "0")); config.EffectList = new Dictionary <int, List <TalentEffectInfo> >(); string effect = Global.GetDefAttributeStr(xmlItem, "Effect1", ""); TalentManager.XmlGetTalentEffect(config, 1, effect); effect = Global.GetDefAttributeStr(xmlItem, "Effect2", ""); TalentManager.XmlGetTalentEffect(config, 2, effect); effect = Global.GetDefAttributeStr(xmlItem, "Effect3", ""); TalentManager.XmlGetTalentEffect(config, 3, effect); effect = Global.GetDefAttributeStr(xmlItem, "Effect4", ""); TalentManager.XmlGetTalentEffect(config, 4, effect); effect = Global.GetDefAttributeStr(xmlItem, "Effect5", ""); TalentManager.XmlGetTalentEffect(config, 5, effect); list.Add(config.ID, config); } } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("加载[{0}]时出错!!!{1}", fileName, ex.Message), null, true); } TalentManager._TalentInfoList.Add(i, list); } } }
public static void initTalentEffectProp(GameClient client) { TalentData myTalentData = TalentManager.GetTalentData(client); if (myTalentData != null && myTalentData.IsOpen) { TalentPropData myPropData = client.ClientData.MyTalentPropData; myPropData.ResetProps(); foreach (TalentEffectItem item in myTalentData.EffectList) { TalentInfo talentInfo = TalentManager.GetTalentInfoByID(client.ClientData.Occupation, item.ID); if (talentInfo.LevelMax >= item.Level) { item.ItemEffectList = talentInfo.EffectList[item.Level]; foreach (TalentEffectInfo info in item.ItemEffectList) { switch (info.EffectType) { case 1: myPropData.PropItem.BaseProps[info.EffectID] += (double)((int)info.EffectValue); break; case 2: myPropData.PropItem.ExtProps[info.EffectID] += info.EffectValue; break; case 3: if (myPropData.SkillOneValue.ContainsKey(info.EffectID)) { Dictionary <int, int> skillOneValue; int effectID; (skillOneValue = myPropData.SkillOneValue)[effectID = info.EffectID] = skillOneValue[effectID] + (int)info.EffectValue; } else { myPropData.SkillOneValue.Add(info.EffectID, (int)info.EffectValue); } break; case 4: myPropData.SkillAllValue += (int)info.EffectValue; break; } } } } TalentManager.InitSpecialProp(client); client.ClientData.MyTalentData.SkillOneValue = client.ClientData.MyTalentPropData.SkillOneValue; client.ClientData.MyTalentData.SkillAllValue = client.ClientData.MyTalentPropData.SkillAllValue; TalentManager.SetTalentProp(client, TalentEffectType.PropBasic, myPropData.PropItem); TalentManager.SetTalentProp(client, TalentEffectType.PropExt, myPropData.PropItem); } }
private static void XmlGetTalentEffect(TalentInfo talentInfo, int level, string strEffect) { if (!string.IsNullOrEmpty(strEffect)) { string[] arrEffect = strEffect.Split(new char[] { '|' }); List <TalentEffectInfo> list = new List <TalentEffectInfo>(); foreach (string effect in arrEffect) { string[] arr = effect.Split(new char[] { ',' }); TalentEffectInfo info = new TalentEffectInfo(); info.EffectType = talentInfo.EffectType; switch (info.EffectType) { case 1: info.EffectID = (int)Enum.Parse(typeof(UnitPropIndexes), arr[0]); info.EffectValue = double.Parse(arr[1]); break; case 2: info.EffectID = (int)Enum.Parse(typeof(ExtPropIndexes), arr[0]); info.EffectValue = double.Parse(arr[1]); break; case 3: case 4: info.EffectID = int.Parse(arr[1]); info.EffectValue = double.Parse(arr[2]); break; } list.Add(info); } talentInfo.EffectList.Add(level, list); } }
/// <summary> /// 解析效果数据 /// </summary> private static void XmlGetTalentEffect(TalentInfo talentInfo, int level, string strEffect) { if (string.IsNullOrEmpty(strEffect)) { return; } string[] arrEffect = strEffect.Split('|'); List <TalentEffectInfo> list = new List <TalentEffectInfo>(); foreach (string effect in arrEffect) { string[] arr = effect.Split(','); TalentEffectInfo info = new TalentEffectInfo(); info.EffectType = talentInfo.EffectType; switch (info.EffectType) { case (int)TalentEffectType.PropBasic: info.EffectID = (int)Enum.Parse(typeof(UnitPropIndexes), arr[0]); info.EffectValue = double.Parse(arr[1]); break; case (int)TalentEffectType.PropExt: info.EffectID = (int)Enum.Parse(typeof(ExtPropIndexes), arr[0]); info.EffectValue = double.Parse(arr[1]); break; case (int)TalentEffectType.SkillOne: case (int)TalentEffectType.SkillAll: info.EffectID = int.Parse(arr[1]); //技能id,职业类型 info.EffectValue = double.Parse(arr[2]); break; } list.Add(info); } talentInfo.EffectList.Add(level, list); }
/// <summary> /// 初始天赋效果属性 /// </summary> public static void initTalentEffectProp(GameClient client) { TalentData myTalentData = GetTalentData(client); if (myTalentData == null || !myTalentData.IsOpen) { return; } TalentPropData myPropData = client.ClientData.MyTalentPropData; myPropData.ResetProps(); foreach (TalentEffectItem item in myTalentData.EffectList) { TalentInfo talentInfo = GetTalentInfoByID(client.ClientData.Occupation, item.ID); if (talentInfo.LevelMax < item.Level) { continue; } item.ItemEffectList = talentInfo.EffectList[item.Level]; //计算效果值 foreach (TalentEffectInfo info in item.ItemEffectList) { switch (info.EffectType) { case (int)TalentEffectType.PropBasic: myPropData.PropItem.BaseProps[info.EffectID] += (int)info.EffectValue; break; case (int)TalentEffectType.PropExt: myPropData.PropItem.ExtProps[info.EffectID] += info.EffectValue; break; case (int)TalentEffectType.SkillOne: { if (myPropData.SkillOneValue.ContainsKey(info.EffectID)) { myPropData.SkillOneValue[info.EffectID] += (int)info.EffectValue; } else { myPropData.SkillOneValue.Add(info.EffectID, (int)info.EffectValue); } } break; case (int)TalentEffectType.SkillAll: myPropData.SkillAllValue += (int)info.EffectValue; break; } //switch } //foreach 计算效果值 } InitSpecialProp(client); client.ClientData.MyTalentData.SkillOneValue = client.ClientData.MyTalentPropData.SkillOneValue; client.ClientData.MyTalentData.SkillAllValue = client.ClientData.MyTalentPropData.SkillAllValue; SetTalentProp(client, TalentEffectType.PropBasic, myPropData.PropItem); SetTalentProp(client, TalentEffectType.PropExt, myPropData.PropItem); }
/// <summary> /// 效果升级 /// </summary> /// <param name="client"></param> /// <param name="effectID">效果id</param> /// <returns></returns> private static int TalentAddEffect(GameClient client, int effectID, int addCount) { //开放 if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Talent)) { return(TalentResultType.EnoOpen); } // 如果1.6的功能没开放 if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6)) { return(TalentResultType.EnoOpen); } //配置信息 TalentInfo talentInfo = GetTalentInfoByID(client.ClientData.Occupation, effectID); if (talentInfo == null) { return(TalentResultType.EnoEffect); } TalentData talentData = client.ClientData.MyTalentData; //天赋点数不足 int talentCountLeft = talentData.TotalCount - GetTalentUseCount(talentData); if (talentCountLeft < addCount) { return(TalentResultType.EnoTalentCount); } //前置效果开启 if (!IsEffectOpen(talentData, talentInfo.NeedTalentID, talentInfo.NeedTalentLevel)) { return(TalentResultType.EnoOpenPreEffect); } //前置开启点数 if (talentInfo.NeedTalentCount > 0 && talentInfo.NeedTalentCount > talentData.CountList[talentInfo.Type]) { return(TalentResultType.EnoOpenPreCount); } int newLevel = 0; List <TalentEffectInfo> newItemEffectList = null; //当前等级 TalentEffectItem effectItemOld = GetOpenEffectItem(talentData, effectID); if (effectItemOld != null) { //最高等级 if (effectItemOld.Level >= talentInfo.LevelMax) { return(TalentResultType.EisMaxLevel); } newLevel = effectItemOld.Level; } newLevel += addCount; newItemEffectList = talentInfo.EffectList[newLevel]; //是否溢出 if (newLevel > talentInfo.LevelMax) { return(TalentResultType.EisMaxLevel); } //更新数据库 bool result = DBTalentEffectModify(client.ClientData.RoleID, talentInfo.Type, effectID, newLevel, client.ClientData.ZoneID, client.ServerId); if (!result) { return(TalentResultType.EFail); } //更新内存 talentData.CountList[talentInfo.Type] += addCount; if (effectItemOld == null) { effectItemOld = new TalentEffectItem(); effectItemOld.ID = effectID; effectItemOld.TalentType = talentInfo.Type; talentData.EffectList.Add(effectItemOld); } effectItemOld.Level = newLevel; effectItemOld.ItemEffectList = newItemEffectList; //属性加成 initTalentEffectProp(client); //属性刷新 RefreshProp(client); return(TalentResultType.Success); }
private static int TalentAddEffect(GameClient client, int effectID, int addCount) { int result; if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Talent, false)) { result = TalentResultType.EnoOpen; } else if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6)) { result = TalentResultType.EnoOpen; } else { TalentInfo talentInfo = TalentManager.GetTalentInfoByID(client.ClientData.Occupation, effectID); if (talentInfo == null) { result = TalentResultType.EnoEffect; } else { TalentData talentData = client.ClientData.MyTalentData; int talentCountLeft = talentData.TotalCount - TalentManager.GetTalentUseCount(talentData); if (talentCountLeft < addCount) { result = TalentResultType.EnoTalentCount; } else if (!TalentManager.IsEffectOpen(talentData, talentInfo.NeedTalentID, talentInfo.NeedTalentLevel)) { result = TalentResultType.EnoOpenPreEffect; } else if (talentInfo.NeedTalentCount > 0 && talentInfo.NeedTalentCount > talentData.CountList[talentInfo.Type]) { result = TalentResultType.EnoOpenPreCount; } else { int newLevel = 0; TalentEffectItem effectItemOld = TalentManager.GetOpenEffectItem(talentData, effectID); if (effectItemOld != null) { if (effectItemOld.Level >= talentInfo.LevelMax) { return(TalentResultType.EisMaxLevel); } newLevel = effectItemOld.Level; } newLevel += addCount; List <TalentEffectInfo> newItemEffectList = talentInfo.EffectList[newLevel]; if (newLevel > talentInfo.LevelMax) { result = TalentResultType.EisMaxLevel; } else if (!TalentManager.DBTalentEffectModify(client.ClientData.RoleID, talentInfo.Type, effectID, newLevel, client.ClientData.ZoneID, client.ServerId)) { result = TalentResultType.EFail; } else { Dictionary <int, int> countList; int type; (countList = talentData.CountList)[type = talentInfo.Type] = countList[type] + addCount; if (effectItemOld == null) { effectItemOld = new TalentEffectItem(); effectItemOld.ID = effectID; effectItemOld.TalentType = talentInfo.Type; talentData.EffectList.Add(effectItemOld); } effectItemOld.Level = newLevel; effectItemOld.ItemEffectList = newItemEffectList; TalentManager.initTalentEffectProp(client); TalentManager.RefreshProp(client); result = TalentResultType.Success; } } } } return(result); }