public static SkillTreeUnit GetMaxLevelSkillByType(int type)
    {
        SkillTreeUnit temp = null;

        foreach (KeyValuePair <int, Dictionary <int, Dictionary <int, SkillTreeUnit> > > kvp1 in _skillTreeInfo)
        {
            foreach (KeyValuePair <int, Dictionary <int, SkillTreeUnit> > kvp2 in kvp1.Value)
            {
                foreach (KeyValuePair <int, SkillTreeUnit> item in kvp2.Value)
                {
                    if (item.Value._skillType == type)
                    {
                        if (temp == null)
                        {
                            temp = item.Value;
                        }
                        else
                        {
                            if (temp._level < item.Value._level)
                            {
                                temp = item.Value;
                            }
                        }
                    }
                }
            }
        }
        return(temp);
    }
    public ulong GetNextExpBySkillType(int skillType)
    {
        SkillTreeUnit skill = FindSkillUnit(skillType);
        SkillTreeUnit nextSkill;

        if (skill != null)
        {
            int nextLevel = skill._level + 1;
            nextSkill = SkillTreeInfo.GetSkillUnit(skillType, nextLevel);
            if (nextSkill != null)
            {
                return(nextSkill._exp);
            }
            else
            {
                return(0);
            }
        }
        else
        {
            nextSkill = SkillTreeInfo.GetMinLevelSkillByType(skillType);
            if (nextSkill != null)
            {
                return(nextSkill._exp);
            }
            else
            {
                return(0);
            }
        }
    }
    public static void LoadData()
    {
        _skillTreeInfo = new Dictionary <int, Dictionary <int, Dictionary <int, SkillTreeUnit> > >();
        SqliteDataReader reader = LocalDatabase.Instance.ReadFullTable("skilltree");

//        int nFieldCount = reader.FieldCount;
        while (reader.Read())
        {
            int    id         = Convert.ToInt32(reader.GetString(reader.GetOrdinal("id")));
            int    maintype   = Convert.ToInt32(reader.GetString(reader.GetOrdinal("maintype")));
            int    skilltype  = Convert.ToInt32(reader.GetString(reader.GetOrdinal("skilltype")));
            int    skillgroup = Convert.ToInt32(reader.GetString(reader.GetOrdinal("skillgroup")));
            int    skillgrade = Convert.ToInt32(reader.GetString(reader.GetOrdinal("skillgrade")));
            int    level      = Convert.ToInt32(reader.GetString(reader.GetOrdinal("level")));
            UInt64 exp        = Convert.ToUInt64(reader.GetString(reader.GetOrdinal("exp")));
            string parent     = reader.GetString(reader.GetOrdinal("parent"));
            string value      = reader.GetString(reader.GetOrdinal("value"));
            string sprName    = reader.GetString(reader.GetOrdinal("sprname"));
            int    desc       = Convert.ToInt32(reader.GetString(reader.GetOrdinal("desc")));
            if (!_skillTreeInfo.ContainsKey(maintype))
            {
                _skillTreeInfo[maintype] = new Dictionary <int, Dictionary <int, SkillTreeUnit> >();
            }
            if (!_skillTreeInfo[maintype].ContainsKey(skilltype))
            {
                _skillTreeInfo[maintype][skilltype] = new Dictionary <int, SkillTreeUnit>();
            }
            SkillTreeUnit info = new SkillTreeUnit();
            info._id         = id;
            info._mainType   = maintype;
            info._skillType  = skilltype;
            info._skillGroup = skillgroup;
            info._skillGrade = skillgrade;
            info._level      = level;
            info._exp        = exp;
            info._parent     = parent;
            info._value      = value;
            info._sprName    = sprName;
            info._descIndex  = desc;
            info._desc       = PELocalization.GetString(desc);
            info.Parse(value);
            _skillTreeInfo[maintype][skilltype][level] = info;
        }
        foreach (var iter in _skillTreeInfo)
        {
            foreach (var iter1 in iter.Value)
            {
                foreach (var iter2 in iter1.Value)
                {
                    SkillTreeUnit unit = GetMaxLevelSkillByType(iter2.Value._skillType);
                    if (unit != null)
                    {
                        iter2.Value._maxLevel = unit._level;
                    }
                }
            }
        }
        LoadMainTypeData();
    }
 public void AddSkillUnit(SkillTreeUnit unit)
 {
     if (_learntSkills.Contains(unit))
     {
         return;
     }
     unit.RefreshBuff(_ske);
     _learntSkills.Add(unit);
 }
    public SKTLearnResult SKTLearn(int skillType)
    {
        SkillTreeUnit skill = FindSkillUnit(skillType);
        SkillTreeUnit nextSkill;

        if (skill != null)
        {
            int nextLevel = skill._level + 1;
            nextSkill = SkillTreeInfo.GetSkillUnit(skillType, nextLevel);
            if (nextSkill != null)
            {
                SKTLearnResult result = CheckLevelUpCondition(nextSkill);
                if (result != SKTLearnResult.SKTLearnResult_Success)
                {
                    return(result);
                }
                if (!DecExp(nextSkill._exp))
                {
                    return(SKTLearnResult.SKTLearnResult_DontHaveEnoughExp);
                }
                RemoveSkillUnit(skill);
                AddSkillUnit(nextSkill);
            }
            else
            {
                return(SKTLearnResult.SKTLearnResult_DataError);
            }
        }
        else
        {
            nextSkill = SkillTreeInfo.GetMinLevelSkillByType(skillType);
            if (nextSkill != null)
            {
                SKTLearnResult result = CheckLevelUpCondition(nextSkill);
                if (result != SKTLearnResult.SKTLearnResult_Success)
                {
                    return(result);
                }
                if (!DecExp(nextSkill._exp))
                {
                    return(SKTLearnResult.SKTLearnResult_DontHaveEnoughExp);
                }
                ;
                AddSkillUnit(nextSkill);
            }
            else
            {
                return(SKTLearnResult.SKTLearnResult_DataError);
            }
        }
        SkillTreeInfo.RefreshUI(nextSkill._mainType);
        if (GameConfig.IsMultiMode && _net != null)
        {
            _net.RPCServer(EPacketType.PT_InGame_SKTLevelUp, skillType, PlayerNetwork.mainPlayerId);
        }
        return(SKTLearnResult.SKTLearnResult_Success);
    }
Esempio n. 6
0
 void RPC_S2C_InitLearntSkills(uLink.BitStream stream, uLink.NetworkMessageInfo info)
 {
     int[] ids = stream.Read <int[]>();
     for (int i = 0; i < ids.Length; i++)
     {
         SkillTreeUnit skillUnit = SkillTreeInfo.GetSkillUnit(ids[i]);
         if (skillUnit != null)
         {
             _learntSkills.AddSkillUnit(skillUnit);
         }
     }
     _learntSkills.InitDefaultSkill();
 }
 public void ChangeSkillState(SkillTreeUnit skill)
 {
     skill._state = SkillState.Lock;
     if (_learntSkills.Contains(skill))
     {
         skill._state = SkillState.learnt;
         return;
     }
     string[] args = skill._parent.Split(';');
     for (int i = 0; i < args.Length; i++)
     {
         SkillTreeUnit skillUnit = SkillTreeInfo.GetSkillUnit(System.Int32.Parse(args[i]));
         if (skillUnit == null)
         {
             if (args[i] == "0")
             {
                 skill._state = SkillState.unLock;
             }
             else
             {
                 skill._state = SkillState.Lock;
                 Debug.LogError("parent skill is not exsit");
             }
             return;
         }
         else
         {
             SkillTreeUnit skilllearnt = FindSkillUnit(skillUnit._skillType);
             if (skilllearnt != null)
             {
                 if (skilllearnt._level >= skillUnit._level)
                 {
                     if (i == args.Length - 1)
                     {
                         skill._state = SkillState.unLock;
                     }
                 }
                 else
                 {
                     skill._state = SkillState.Lock;
                     return;
                 }
             }
             else
             {
                 skill._state = SkillState.Lock;
                 return;
             }
         }
     }
 }
    public static List <SkillTreeUnit> GetMinLevelByMainType(int mainType)
    {
        List <SkillTreeUnit> skills = new List <SkillTreeUnit>();

        if (_skillTreeInfo.ContainsKey(mainType))
        {
            foreach (KeyValuePair <int, Dictionary <int, SkillTreeUnit> > kvp1 in _skillTreeInfo[mainType])
            {
                SkillTreeUnit unit = null;
                foreach (KeyValuePair <int, SkillTreeUnit> item in kvp1.Value)
                {
                    if (unit == null)
                    {
                        unit = item.Value;
                    }
                    if (unit != null && item.Value != null)
                    {
                        if (unit._level > item.Value._level)
                        {
                            unit = item.Value;
                        }
                    }
                }
                if (unit != null)
                {
                    skills.Add(unit);
                }
            }
        }
        if (skills != null)
        {
            skills.Sort((left, right) =>
            {
                if (left._skillGrade > right._skillGrade)
                {
                    return(1);
                }
                else if (left._skillGrade == right._skillGrade)
                {
                    return(0);
                }
                else
                {
                    return(-1);
                }
            });
        }
        return(skills);
    }
 SKTLearnResult CheckLevelUpCondition(SkillTreeUnit skill)
 {
     if (_ske == null)
     {
         return(SKTLearnResult.SKTLearnResult_SkAliveEntityIsNULL);
     }
     if (skill != null)
     {
         if (_ske.GetAttribute((int)AttribType.Exp) < skill._exp)
         {
             return(SKTLearnResult.SKTLearnResult_DontHaveEnoughExp);
         }
         if (skill._parent != "0")
         {
             string[] args = skill._parent.Split(';');
             for (int i = 0; i < args.Length; i++)
             {
                 SkillTreeUnit skillunit = SkillTreeInfo.GetSkillUnit(System.Int32.Parse(args[i]));
                 if (skillunit == null)
                 {
                     return(SKTLearnResult.SKTLearnResult_DataError);
                 }
                 else
                 {
                     SkillTreeUnit skilllearnt = FindSkillUnit(skillunit._skillType);
                     if (skilllearnt != null)
                     {
                         if (skilllearnt._level >= skillunit._level)
                         {
                             if (i == args.Length - 1)
                             {
                                 return(SKTLearnResult.SKTLearnResult_Success);
                             }
                         }
                         else
                         {
                             return(SKTLearnResult.SKTLearnResult_NeedLearntParentSkill);
                         }
                     }
                 }
             }
             return(SKTLearnResult.SKTLearnResult_DataError);
         }
         return(SKTLearnResult.SKTLearnResult_Success);
     }
     return(SKTLearnResult.SKTLearnResult_DataError);
 }
Esempio n. 10
0
    public override void Deserialize(BinaryReader _in)
    {
        if (_net != null)
        {
            return;
        }
        int count = _in.ReadInt32();

        for (int i = 0; i < count; i++)
        {
            int           id        = _in.ReadInt32();
            SkillTreeUnit skillUnit = SkillTreeInfo.GetSkillUnit(id);
            if (skillUnit != null)
            {
                AddSkillUnit(skillUnit);
            }
        }
    }
Esempio n. 11
0
    void RPC_S2C_SKTLevelUp(uLink.BitStream stream, uLink.NetworkMessageInfo info)
    {
        int levelUpType = stream.Read <int>();
        int level       = stream.Read <int> ();
        int playerid    = stream.Read <int> ();

        if (playerid == PlayerNetwork.mainPlayerId || _learntSkills == null)
        {
            return;
        }
        SkillTreeUnit skillUnit = _learntSkills.FindSkillUnit(levelUpType);

        if (skillUnit != null)
        {
            _learntSkills.RemoveSkillUnit(skillUnit);
        }
        SkillTreeUnit nextSkillUnit = SkillTreeInfo.GetSkillUnit(levelUpType, level);

        if (nextSkillUnit != null)
        {
            _learntSkills.AddSkillUnit(nextSkillUnit);
        }
    }
Esempio n. 12
0
 public void RemoveSkillUnit(SkillTreeUnit unit)
 {
     _learntSkills.Remove(unit);
 }