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); }
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; }
public AbilityData(SerializationInfo info, StreamingContext context) { Template = AbilityFactory.GetTemplate(info.GetValue(nameof(Template), "")); }