Esempio n. 1
0
        public void ExportPlayers()
        {
            var spells = new FakeSpellParser();
            var chars  = new CharTracker(spells);
            var today  = DateTime.Today;

            var red = chars.GetOrAdd("Red");

            red.IsPlayer  = true;
            red.UpdatedOn = today;

            var blue = chars.GetOrAdd("Blue");

            blue.UpdatedOn = today;

            var green = chars.GetOrAdd("Green");

            green.IsPlayer  = true;
            green.Class     = "CLR";
            green.UpdatedOn = today;

            var spot = chars.GetOrAdd("Spot");

            spot.Owner     = "Green";
            spot.UpdatedOn = today;

            var s = chars.ExportPlayers();

            Assert.Equal($"Red:::{today:yyyy-MM-dd};Green:CLR::{today:yyyy-MM-dd};Spot::Green:{today:yyyy-MM-dd};", s);
        }
Esempio n. 2
0
        public void ImportPlayers()
        {
            var spells = new FakeSpellParser();
            var chars  = new CharTracker(spells);
            var today  = DateTime.Today;

            chars.ImportPlayers($"Red:::{today:yyyy-MM-dd};Green:CLR::{today:yyyy-MM-dd};Spot::Green:{today:yyyy-MM-dd};");

            var red = chars.Get("Red");

            Assert.NotNull(red);
            Assert.True(red.IsPlayer);
            Assert.Null(red.Class);
            Assert.Equal(today, red.UpdatedOn);

            var green = chars.Get("Green");

            Assert.NotNull(green);
            Assert.True(green.IsPlayer);
            Assert.Equal("CLR", green.Class);
            Assert.Equal(today, green.UpdatedOn);

            var spot = chars.Get("Spot");

            Assert.NotNull(spot);
            Assert.False(spot.IsPlayer);
            Assert.Null(spot.Class);
            Assert.Equal("Green", spot.Owner);
            Assert.Equal(today, spot.UpdatedOn);
        }
Esempio n. 3
0
        public void Ignore_Group_Buff_Emote_Shared_With_Self_Buff_Lands_On_Self()
        {
            var spells = new FakeSpellParser();
            var buffs  = new BuffTracker(spells);

            buffs.AddSpell(new SpellInfo {
                Name = "Group Guardian of the Forest I", Target = (int)SpellTarget.Caster_Group, LandSelf = "The power of the forest surges through your muscles.", LandOthers = " channels the power of the forest."
            });
            buffs.AddSpell(new SpellInfo {
                Name = "Guardian of the Forest I", Target = (int)SpellTarget.Self, LandSelf = "The power of the forest surges through your muscles.", LandOthers = " channels the power of the forest."
            });

            buffs.HandleEvent(new LogCastingEvent()
            {
                Spell = "Guardian of the Forest X", Source = PLAYER, Timestamp = DateTime.UtcNow
            });
            buffs.HandleEvent(new LogRawEvent()
            {
                Text = "The power of the forest surges through your muscles.", Timestamp = DateTime.UtcNow, Player = PLAYER
            });

            var list = buffs.Get(PLAYER, DateTime.Today, DateTime.UtcNow.AddSeconds(1)).ToList();

            Assert.Single(list);
            Assert.Equal("Guardian of the Forest X", list[0].Name);
        }
Esempio n. 4
0
        public void ImportPlayers_Skip_Stale()
        {
            var spells = new FakeSpellParser();
            var chars  = new CharTracker(spells);
            var today  = DateTime.Today;

            chars.ImportPlayers($"Red:CLR::{today:yyyy-MM-dd};Green:CLR::{today.AddDays(-50):yyyy-MM-dd}");
            Assert.NotNull(chars.Get("Red"));
            Assert.Null(chars.Get("Green"));
        }
Esempio n. 5
0
        public void Spell_Rank_2_Should_Assign_Class()
        {
            var spells = new FakeSpellParser();

            spells.Spells.Add(new SpellInfo()
            {
                Name = "Super Fire Arrow Rk. II", ClassesMask = (int)ClassesMaskShort.RNG, ClassesCount = 1
            });

            var chars = new CharTracker(spells);

            chars.HandleEvent(new LogCastingEvent()
            {
                Source = "Rumstil", Spell = "Super Fire Arrow Rk. II", Type = CastingType.Spell
            });
            Assert.Equal("RNG", chars.Get("Rumstil")?.Class);
        }
Esempio n. 6
0
        public void Spell_With_Ambiguous_Class_Shouldnt_Assign_Class()
        {
            var spells = new FakeSpellParser();

            spells.Spells.Add(new SpellInfo()
            {
                Name = "Invis", ClassesMask = (int)(ClassesMaskShort.RNG | ClassesMaskShort.ENC), ClassesCount = 2
            });

            var chars = new CharTracker(spells);

            chars.HandleEvent(new LogCastingEvent()
            {
                Source = "Rumstil", Spell = "Invis", Type = CastingType.Spell
            });
            Assert.Null(chars.Get("Rumstil")?.Class);
        }
Esempio n. 7
0
        public void Spell_Click_Shouldnt_Assign_Class()
        {
            var spells = new FakeSpellParser();

            spells.Spells.Add(new SpellInfo()
            {
                Name = "Super Fire Arrow", ClassesMask = (int)ClassesMaskShort.RNG, ClassesCount = 1
            });

            var chars = new CharTracker(spells);

            chars.HandleEvent(new LogCastingEvent()
            {
                Source = "Rumstil", Spell = "Super Fire Arrow", Type = CastingType.Spell
            });
            // click/procs (which are never rank 2/3) can misidentify a class
            Assert.Null(chars.Get("Rumstil")?.Class);
        }
Esempio n. 8
0
        public void Ignore_Self_Buff_Lands_On_Caster()
        {
            var spells = new FakeSpellParser();
            var buffs  = new BuffTracker(spells);

            buffs.AddSpell(new SpellInfo {
                Name = "Superfly TNT", LandSelf = "You should be in the front seat.", Target = (int)SpellTarget.Self
            });

            // self buffs are handled by the casting event so the emote must be ignored to prevent double counting
            buffs.HandleEvent(new LogRawEvent()
            {
                Text = "You should be in the front seat.", Timestamp = DateTime.UtcNow, Player = PLAYER
            });

            var list = buffs.Get(PLAYER, DateTime.Today, DateTime.UtcNow.AddSeconds(1)).ToList();

            Assert.Empty(list);
        }
Esempio n. 9
0
        public void Self_Spell_Casting()
        {
            var spells = new FakeSpellParser();
            var buffs  = new BuffTracker(spells);

            buffs.AddSpell(new SpellInfo {
                Name = "Guns of the Navarone I", Target = (int)SpellTarget.Self
            });

            // we only registered the first rank -- make sure it accepts any rank
            buffs.HandleEvent(new LogCastingEvent()
            {
                Spell = "Guns of the Navarone XV", Source = "Tokiel", Timestamp = DateTime.UtcNow
            });

            var list = buffs.Get("Tokiel", DateTime.Today, DateTime.UtcNow.AddSeconds(1)).ToList();

            Assert.Single(list);
            Assert.Equal("Guns of the Navarone XV", list[0].Name);
        }
Esempio n. 10
0
        public void Group_Buff_Lands_On_Caster_From_Bystanders_Log()
        {
            var spells = new FakeSpellParser();
            var buffs  = new BuffTracker(spells);

            buffs.AddSpell(new SpellInfo {
                Name = "Illusions of Grandeur I", LandOthers = " is consumed by Illusions of Grandeur.", Target = (int)SpellTarget.Caster_Group
            });

            buffs.HandleEvent(new LogCastingEvent()
            {
                Spell = "Illusions of Grandeur I", Source = "Fourier", Timestamp = DateTime.UtcNow
            });
            buffs.HandleEvent(new LogRawEvent()
            {
                Text = "Fourier is consumed by Illusions of Grandeur.", Player = PLAYER, Timestamp = DateTime.UtcNow
            });

            var list = buffs.Get("Fourier", DateTime.Today, DateTime.UtcNow.AddSeconds(1)).ToList();

            Assert.Single(list);
            Assert.Equal("Illusions of Grandeur", list[0].Name);
        }