Beispiel #1
0
        public static SpellData GetRandomMinNoDuplicate(int level, string skill, CharacterNode actor)
        {
            if (!_setup)
            {
                Init();
            }
            var spellsContainer = actor.Entity.Get <SpellsContainer>();
            int chk             = 0;

            while (chk < 10000)
            {
                chk++;
                var template = _spellMinLevels[level].RandomElement();
                if (template.Skill == skill && !spellsContainer.HasSpell(template))
                {
                    return(AbilityFactory.BuildAbility(template, false).Get <SpellData>());
                }
            }
            return(null);
        }
Beispiel #2
0
        private static void Init()
        {
            GameData.AddInit(Init);
            for (int i = 0; i < _spellLevels.Length; i++)
            {
                _spellLevels[i]    = new List <AbilityConfig>();
                _spellMinLevels[i] = new List <AbilityConfig>();
                _spellMaxLevels[i] = new List <AbilityConfig>();
            }
            var dict = AbilityFactory.GetDict();

            foreach (var dataEntry in dict)
            {
                var spell = dataEntry.Value;
                int lvl   = spell.Level;
                if (!_spellMaxLevels.HasIndex(lvl))
                {
                    Debug.LogErrorFormat("Spell {0} has invalid lvl {1}", spell.Name, lvl);
                    return;
                }
                if (lvl > 1)
                {
                    for (int m = lvl - 1; m >= 0; m--)
                    {
                        _spellMaxLevels[m].Add(spell);
                    }
                }
                else
                {
                    _spellMaxLevels[lvl].Add(spell);
                }
                for (int m = lvl; m < _spellMinLevels.Length; m++)
                {
                    _spellMinLevels[m].Add(spell);
                }
                _spellLevels[lvl].Add(spell);
            }
            _setup = true;
        }
Beispiel #3
0
 public AbilityData(SerializationInfo info, StreamingContext context)
 {
     Template = AbilityFactory.GetTemplate(info.GetValue(nameof(Template), ""));
 }