예제 #1
0
        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);
        }