コード例 #1
0
ファイル: TalentManager.cs プロジェクト: qiuhoude/mu_server
 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());
     }
 }
コード例 #2
0
    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);
    }
コード例 #3
0
ファイル: TalentManager.cs プロジェクト: qiuhoude/mu_server
 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);
         }
     }
 }
コード例 #4
0
ファイル: TalentManager.cs プロジェクト: qiuhoude/mu_server
        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);
            }
        }
コード例 #5
0
ファイル: TalentManager.cs プロジェクト: qiuhoude/mu_server
        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);
            }
        }
コード例 #6
0
ファイル: TalentManager.cs プロジェクト: chenchungit/ky
        /// <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);
        }
コード例 #7
0
ファイル: TalentManager.cs プロジェクト: chenchungit/ky
        /// <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);
        }
コード例 #8
0
ファイル: TalentManager.cs プロジェクト: chenchungit/ky
        /// <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);
        }
コード例 #9
0
ファイル: TalentManager.cs プロジェクト: qiuhoude/mu_server
        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);
        }