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 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 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); }