Пример #1
0
        // Note: this does not seem to be the way you are supposed to use Conditions, if it works, it works
        public static void DisplaceByTalents(this Aura aura, AuraGrid grid, int position, params int[] talents)
        {
            var script = PositionByTalentsLua;

            var talentsLuaArray = $"{position}, {talents.Length}, " + string.Join(", ", talents);

            script = script.Replace("%talents%", talentsLuaArray);
            script = script.Replace("%update%", grid.GetUpdateLua());
            script = script.Replace("%check%", grid.GetBoundsCheckLua());
            script = script.Replace("%resetLine%", grid.GetResetLineLua());
            script = script.Replace("%nextLine%", grid.GetNextLineLua());
            // script = script.Replace("%name%", aura.Id.Split('_')[2]);
            script = script.Replace("%id%", aura.Id);

            aura.Conditions.Add(new Condition
            {
                Check = new Check
                {
                    Trigger  = -1,
                    Variable = "customcheck",
                    Op       = "PLAYER_TALENT_UPDATE",
                    Value    = script
                },
                Changes = new List <Change>()
            });
        }
Пример #2
0
 public static void DisplaceByTalents(this IEnumerable <Aura> auras, AuraGrid grid, int position, params int[] talents)
 {
     foreach (var aura in auras)
     {
         aura.DisplaceByTalents(grid, position, talents.ToArray());
     }
 }
        // todo: this is _really_ bad logic, only works since lists don't change order
        // LUA DRIVEN VARIANT
        public static void ArrangeSpells2(this WeakAura weak, AuraGrid grid, ClassSpec spec, IEnumerable <Spell> spells)
        {
            foreach (var spell in spells)
            {
                var spellAuras = weak.AddSpell(spell, spec, 0, 0);

                for (var i = 0; i < spellAuras.Count; i++)
                {
                    var advance       = i == spellAuras.Count - 1;
                    var aura          = spellAuras[i];
                    var auraGrid      = grid.LuaId;
                    var auraTalent    = spell.Talent;
                    var auraClassSpec = (int)spec;

                    if (auraClassSpec != _auraClassSpec)
                    {
                        _sb.AddRecords(aura.Id, advance, auraGrid, auraTalent, auraClassSpec);
                    }
                    else if (auraTalent != _auraTalent)
                    {
                        _sb.AddRecords(aura.Id, advance, auraGrid, auraTalent);
                    }
                    else if (auraGrid != _auraGrid)
                    {
                        _sb.AddRecords(aura.Id, advance, auraGrid);
                    }
                    else if (advance)
                    {
                        _sb.AddRecords(aura.Id, advance);
                    }
                    else
                    {
                        _sb.AddRecords(aura.Id);
                    }

                    _auraGrid      = auraGrid;
                    _auraTalent    = auraTalent;
                    _auraClassSpec = auraClassSpec;
                }
            }
        }
        // OLD VARIANT
        public static void ArrangeSpells(this WeakAura weak, AuraGrid grid, ClassSpec spec, IEnumerable <Spell> spells)
        {
            var talents  = new List <int>();
            var position = 0;

            grid = grid.Clone();
            grid.Reset();

            foreach (var spell in spells)
            {
                weak.AddSpell(spell, spec, 0, 0);

                var o = grid.Location?.Clone();

                grid.Next();

                var x = grid.Location.X;
                var y = grid.Location.Y;

                // Console.WriteLine($"{position}:: {x}, {y} -- {spell.Name} -- {y} - {grid.Origin.Y} < -{grid.Height} * {grid.Size}");

                var spellAuras = weak.AddSpell(spell, spec, x, y);
                if (talents.Any())
                {
                    spellAuras.DisplaceByTalents(grid, position, talents.ToArray());
                }

                if (spell.Talent != 0)
                {
                    talents.Add(spell.Talent);
                    grid.Location = o;
                }
                else
                {
                    position++;
                }
            }
        }