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()); } }
public bool initialize() { TalentManager.LoadTalentExpInfo(); TalentManager.LoadTalentSpecialData(); TalentManager.LoadTalentInfoData(); return(true); }
public bool startup() { TCPCmdDispatcher.getInstance().registerProcessorEx(999, 1, 1, TalentManager.getInstance(), TCPCmdFlags.IsStringArrayParams); TCPCmdDispatcher.getInstance().registerProcessorEx(1000, 1, 1, TalentManager.getInstance(), TCPCmdFlags.IsStringArrayParams); TCPCmdDispatcher.getInstance().registerProcessorEx(1001, 1, 1, TalentManager.getInstance(), TCPCmdFlags.IsStringArrayParams); TCPCmdDispatcher.getInstance().registerProcessorEx(1002, 2, 2, TalentManager.getInstance(), TCPCmdFlags.IsStringArrayParams); TCPCmdDispatcher.getInstance().registerProcessorEx(1003, 3, 3, TalentManager.getInstance(), TCPCmdFlags.IsStringArrayParams); return(true); }
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); } }
public bool ProcessCmdTalentGetData(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { if (!CheckHelper.CheckCmdLengthAndRole(client, nID, cmdParams, 1)) { return(false); } TalentData talentData = TalentManager.GetTalentData(client); client.sendCmd <TalentData>(1000, talentData, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
public static bool TalentAddCount(GameClient client, int count) { TalentData talentData = client.ClientData.MyTalentData; bool result; if (!talentData.IsOpen) { result = false; } else if (!TalentManager.DBTalentModify(client.ClientData.RoleID, count, 0L, 0L, false, client.ClientData.ZoneID, client.ServerId)) { result = false; } else { talentData.TotalCount = count; GlobalEventSource.getInstance().fireEvent(new OrnamentGoalEventObject(client, OrnamentGoalType.OGT_Talent, new int[0])); result = true; } return(result); }
public bool ProcessCmdTalentWash(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { if (!CheckHelper.CheckCmdLengthAndRole(client, nID, cmdParams, 2)) { return(false); } int washType = int.Parse(cmdParams[1]); int state = TalentManager.TalentWash(client, washType); TalentData talentData = TalentManager.GetTalentData(client); talentData.State = state; client.sendCmd <TalentData>(1002, talentData, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
private static bool IsEffectOpen(TalentData talentData, int effectID, int level) { bool result; if (effectID <= 0) { result = true; } else { TalentEffectItem item = TalentManager.GetOpenEffectItem(talentData, effectID); if (item != null) { if (item.Level >= level) { return(true); } } result = false; } return(result); }
public bool ProcessCmdTalentOther(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { if (!CheckHelper.CheckCmdLength(client, nID, cmdParams, 1)) { return(false); } int roleID = Convert.ToInt32(cmdParams[0]); TalentData talentData = null; GameClient otherClient = GameManager.ClientMgr.FindClient(roleID); if (otherClient != null) { talentData = TalentManager.GetTalentData(otherClient); } client.sendCmd <TalentData>(999, talentData, false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }
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); }
private static int TalentWash(GameClient client, int washType) { int result; if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Talent, false)) { result = TalentResultType.EnoOpen; } else if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6)) { result = TalentResultType.EnoOpen; } else { TalentData talentData = client.ClientData.MyTalentData; int washCount = TalentManager.GetTalentUseCount(talentData); if (washCount <= 0) { result = TalentResultType.EnoTalentCount; } else { if (washType == 0) { int needDiamond = TalentManager.GetWashDiamond(washCount); if (!GameManager.ClientMgr.SubUserMoney(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, needDiamond, "天赋洗点", true, true, false, DaiBiSySType.TianFuXiDian)) { return(TalentResultType.EnoDiamond); } } else { int goodsId = 0; int goodsCount = 0; TalentManager.GetWashGoods(out goodsId, out goodsCount); GoodsData goodsData = Global.GetGoodsByID(client, goodsId); if (goodsData == null) { return(TalentResultType.EnoWash); } if (!GameManager.ClientMgr.NotifyUseGoods(Global._TCPManager.MySocketListener, Global._TCPManager.tcpClientPool, Global._TCPManager.TcpOutPacketPool, client, goodsData, goodsCount, false, false)) { return(TalentResultType.EnoWash); } } if (!TalentManager.DBTalentEffectClear(client.ClientData.RoleID, client.ClientData.ZoneID, client.ServerId)) { result = TalentResultType.EFail; } else { talentData.CountList[1] = 0; talentData.CountList[2] = 0; talentData.CountList[3] = 0; talentData.EffectList = new List <TalentEffectItem>(); TalentPropData propData = client.ClientData.MyTalentPropData; propData.ResetProps(); TalentManager.SetTalentProp(client, TalentEffectType.PropBasic, propData.PropItem); TalentManager.SetTalentProp(client, TalentEffectType.PropExt, propData.PropItem); TalentManager.RefreshProp(client); result = TalentResultType.Success; } } } return(result); }
private static int TalentAddExp(GameClient client) { int result; if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Talent, false)) { result = TalentResultType.EnoOpen; } else if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6)) { result = TalentResultType.EnoOpen; } else if (client.ClientData.Experience <= 0L) { result = TalentResultType.EnoExp; } else { TalentData talentData = client.ClientData.MyTalentData; int talentCount = (talentData.TotalCount <= 0) ? 1 : (talentData.TotalCount + 1); if (!TalentManager._TalentExpList.ContainsKey(talentCount)) { result = TalentResultType.EnoOpenPoint; } else { TalentExpInfo expInfo = TalentManager._TalentExpList[talentCount]; int level = client.ClientData.ChangeLifeCount * 100 + client.ClientData.Level; if (level < expInfo.RoleLevel) { result = TalentResultType.EnoOpenPoint; } else { long needExp = expInfo.Exp - talentData.Exp; long exp = 0L; long expRole = client.ClientData.Experience; bool isUp = false; long expAdd; if (needExp <= expRole) { isUp = true; expAdd = needExp; } else { exp = talentData.Exp + expRole; talentCount--; expAdd = expRole; } if (!TalentManager.DBTalentModify(client.ClientData.RoleID, talentCount, exp, expAdd, isUp, client.ClientData.ZoneID, client.ServerId)) { result = TalentResultType.EFail; } else { if (isUp) { talentData.Exp = exp; talentData.TotalCount++; client.ClientData.Experience -= needExp; } else { talentData.Exp = exp; client.ClientData.Experience -= expRole; } GameManager.ClientMgr.NotifySelfExperience(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, -exp); GlobalEventSource.getInstance().fireEvent(new OrnamentGoalEventObject(client, OrnamentGoalType.OGT_Talent, new int[0])); if (isUp) { result = TalentResultType.Success; } else { result = TalentResultType.SuccessHalf; } } } } } return(result); }