Esempio n. 1
0
        public void ApplyChangesAndNotifyAsync_WhenMankdebolIsSet_UpdateValue_LogInGroupHistory()
        {
            var group = new Group {
                Data = GroupDataJson
            };
            var groupData         = new GroupData();
            var groupHistoryEntry = new GroupHistoryEntry();
            var request           = new PatchGroupRequest
            {
                Mankdebol = 4
            };

            _groupHistoryUtil.CreateLogChangeMankdebol(group, null, 4)
            .Returns(groupHistoryEntry);
            _jsonUtil.Deserialize <GroupData>(GroupDataJson)
            .Returns(groupData);
            _jsonUtil.Serialize(groupData)
            .Returns(UpdatedGroupDataJson);

            _util.ApplyChangesAndNotify(group, request, _notificationSession);

            group.Data.Should().BeEquivalentTo(UpdatedGroupDataJson);
            groupData.Mankdebol.Should().Be(4);
            group.HistoryEntries.Should().Contain(groupHistoryEntry);
        }
        public async Task <ActiveStatsModifier> AddModifierAsync(NaheulbookExecutionContext executionContext, int monsterId, ActiveStatsModifier statsModifier)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var monster = await uow.Monsters.GetAsync(monsterId);

                if (monster == null)
                {
                    throw new MonsterNotFoundException(monsterId);
                }

                var group = await uow.Groups.GetAsync(monster.GroupId);

                if (group == null)
                {
                    throw new GroupNotFoundException(monster.GroupId);
                }

                _authorizationUtil.EnsureIsGroupOwner(executionContext, group);

                var modifiers = _jsonUtil.Deserialize <List <ActiveStatsModifier> >(monster.Modifiers) ?? new List <ActiveStatsModifier>();
                _activeStatsModifierUtil.AddModifier(modifiers, statsModifier);
                monster.Modifiers = _jsonUtil.Serialize(modifiers);

                await uow.SaveChangesAsync();

                var notificationSession = _notificationSessionFactory.CreateSession();
                notificationSession.NotifyMonsterAddModifier(monster.Id, statsModifier);
                await notificationSession.CommitAsync();

                return(statsModifier);
            }
        }
Esempio n. 3
0
        public T Serdes(T existing, AssetInfo info, AssetMapping mapping, ISerializer s, IJsonUtil jsonUtil)
        {
            if (s == null)
            {
                throw new ArgumentNullException(nameof(s));
            }
            if (jsonUtil == null)
            {
                throw new ArgumentNullException(nameof(jsonUtil));
            }

            if (s.IsWriting())
            {
                if (existing == null)
                {
                    throw new ArgumentNullException(nameof(existing));
                }

                var json = Encoding.UTF8.GetBytes(jsonUtil.Serialize(existing));
                s.Bytes(null, json, json.Length);
                return(existing);
            }
            else
            {
                var json = s.Bytes(null, null, (int)s.BytesRemaining);
                return(jsonUtil.Deserialize <T>(json));
            }
        }
Esempio n. 4
0
        public bool HasFlag(Origin origin, string flagName)
        {
            var originFlags = _jsonUtil.Deserialize<IList<NhbkFlag>>(origin.Flags) ?? new List<NhbkFlag>();
            if (originFlags.Any(f => f.Type == flagName))
                return true;

            foreach (var bonus in origin.Bonuses)
            {
                var flags = _jsonUtil.Deserialize<IList<NhbkFlag>>(bonus.Flags) ?? new List<NhbkFlag>();
                if (flags.Any(f => f.Type == flagName))
                    return true;
            }

            foreach (var restrict in origin.Restrictions)
            {
                var flags = _jsonUtil.Deserialize<IList<NhbkFlag>>(restrict.Flags) ?? new List<NhbkFlag>();
                if (flags.Any(f => f.Type == flagName))
                    return true;
            }

            return false;
        }
Esempio n. 5
0
    public object Serdes(object existing, AssetInfo info, AssetMapping mapping, ISerializer s, IJsonUtil jsonUtil)
    {
        if (s == null)
        {
            throw new ArgumentNullException(nameof(s));
        }
        if (jsonUtil == null)
        {
            throw new ArgumentNullException(nameof(jsonUtil));
        }
        var bytes = s.Bytes(null, null, (int)s.BytesRemaining);

        return(jsonUtil.Deserialize <IntStringDictionary>(bytes));
    }
Esempio n. 6
0
        public void ApplyChangesAndNotify(Group group, PatchGroupRequest request, INotificationSession notificationSession)
        {
            var groupData = _jsonUtil.Deserialize <GroupData>(group.Data) ?? new GroupData();

            if (request.Mankdebol.HasValue)
            {
                group.AddHistoryEntry(_groupHistoryUtil.CreateLogChangeMankdebol(group, groupData.Mankdebol, request.Mankdebol.Value));
                groupData.Mankdebol = request.Mankdebol.Value;
            }

            if (request.Debilibeuk.HasValue)
            {
                group.AddHistoryEntry(_groupHistoryUtil.CreateLogChangeDebilibeuk(group, groupData.Debilibeuk, request.Debilibeuk.Value));
                groupData.Debilibeuk = request.Debilibeuk.Value;
            }

            if (request.Date != null)
            {
                var newDate = new NhbkDate(request.Date);
                group.AddHistoryEntry(_groupHistoryUtil.CreateLogChangeDate(group, groupData.Date, newDate));
                groupData.Date = newDate;
            }

            if (request.FighterIndex != null)
            {
                groupData.CurrentFighterIndex = request.FighterIndex.Value;
            }

            if (request.Name != null)
            {
                group.Name = request.Name;
            }

            notificationSession.NotifyGroupChangeGroupData(group.Id, groupData);

            group.Data = _jsonUtil.Serialize(groupData);
        }
Esempio n. 7
0
        public static InputConfig Load(string basePath, IFileSystem disk, IJsonUtil jsonUtil)
        {
            if (disk == null)
            {
                throw new ArgumentNullException(nameof(disk));
            }
            if (jsonUtil == null)
            {
                throw new ArgumentNullException(nameof(jsonUtil));
            }
            var inputConfig = new InputConfig(basePath);
            var configPath  = Path.Combine(basePath, "data", "input.json");

            if (disk.FileExists(configPath))
            {
                var configText = disk.ReadAllBytes(configPath);
                inputConfig.Bindings = jsonUtil.Deserialize <IDictionary <InputMode, IDictionary <string, string> > >(configText);
            }

            return(inputConfig);
        }
Esempio n. 8
0
        public static GeneralSettings Load(IGeneralConfig config, IFileSystem disk, IJsonUtil jsonUtil)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            if (disk == null)
            {
                throw new ArgumentNullException(nameof(disk));
            }
            if (jsonUtil == null)
            {
                throw new ArgumentNullException(nameof(jsonUtil));
            }

            var path = config.ResolvePath(UserPath);

            if (!disk.FileExists(path))
            {
                path = config.ResolvePath(DefaultsPath);
            }

            if (!disk.FileExists(path))
            {
                throw new FileNotFoundException($"Could not find default settings file (expected at {path})");
            }

            var settings = disk.FileExists(path)
                ? jsonUtil.Deserialize <GeneralSettings>(disk.ReadAllBytes(path))
                : new GeneralSettings();

            if (!settings.ActiveMods.Any())
            {
                settings.ActiveMods.Add("Base");
            }
            return(settings);
        }
 public ItemTemplateData GetItemTemplateData(ItemTemplate itemTemplate)
 {
     return(_jsonUtil.Deserialize <ItemTemplateData>(itemTemplate.Data) ?? new ItemTemplateData());
 }
Esempio n. 10
0
        public void ApplyCharactersChange(NaheulbookExecutionContext executionContext, PatchCharacterRequest request, Character character, INotificationSession notificationSession)
        {
            if (request.Debilibeuk.HasValue)
            {
                _authorizationUtil.EnsureIsGroupOwner(executionContext, character.Group);
                var gmData = _jsonUtil.Deserialize <CharacterGmData>(character.GmData) ?? new CharacterGmData();
                gmData.Debilibeuk = request.Debilibeuk.Value;
                character.GmData  = _jsonUtil.Serialize(gmData);
                notificationSession.NotifyCharacterGmChangeData(character, gmData);
            }

            if (request.Mankdebol.HasValue)
            {
                _authorizationUtil.EnsureIsGroupOwner(executionContext, character.Group);
                var gmData = _jsonUtil.Deserialize <CharacterGmData>(character.GmData) ?? new CharacterGmData();
                gmData.Mankdebol = request.Mankdebol.Value;
                character.GmData = _jsonUtil.Serialize(gmData);
                notificationSession.NotifyCharacterGmChangeData(character, gmData);
            }

            if (request.IsActive.HasValue)
            {
                _authorizationUtil.EnsureIsGroupOwner(executionContext, character.Group);
                character.IsActive = request.IsActive.Value;
                notificationSession.NotifyCharacterGmChangeActive(character);
            }

            if (request.Color != null)
            {
                _authorizationUtil.EnsureIsGroupOwner(executionContext, character.Group);
                character.Color = request.Color;
                notificationSession.NotifyCharacterGmChangeColor(character);
            }

            if (request.OwnerId != null)
            {
                _authorizationUtil.EnsureIsGroupOwner(executionContext, character.Group);
                character.OwnerId = request.OwnerId.Value;
            }

            if (request.Target != null)
            {
                _authorizationUtil.EnsureIsGroupOwner(executionContext, character.Group);
                if (request.Target.IsMonster)
                {
                    character.TargetedCharacterId = null;
                    character.TargetedMonsterId   = request.Target.Id;
                }
                else
                {
                    character.TargetedMonsterId   = null;
                    character.TargetedCharacterId = request.Target.Id;
                }

                notificationSession.NotifyCharacterGmChangeTarget(character, request.Target);
            }

            if (request.Ev.HasValue)
            {
                character.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeEv(character, character.Ev, request.Ev));
                character.Ev = request.Ev;
                notificationSession.NotifyCharacterChangeEv(character);
            }

            if (request.Ea.HasValue)
            {
                character.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeEa(character, character.Ea, request.Ea));
                character.Ea = request.Ea;
                notificationSession.NotifyCharacterChangeEa(character);
            }

            if (request.FatePoint.HasValue)
            {
                character.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeFatePoint(character, character.FatePoint, request.FatePoint));
                character.FatePoint = request.FatePoint.Value;
                notificationSession.NotifyCharacterChangeFatePoint(character);
            }

            if (request.Experience.HasValue)
            {
                character.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeExperience(character, character.Experience, request.Experience));
                character.Experience = request.Experience.Value;
                notificationSession.NotifyCharacterChangeExperience(character);
            }

            if (request.Sex != null)
            {
                character.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeSex(character, character.Sex, request.Sex));
                character.Sex = request.Sex;
                notificationSession.NotifyCharacterChangeSex(character);
            }

            if (request.Name != null)
            {
                character.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeName(character, character.Name, request.Name));
                character.Name = request.Name;
                notificationSession.NotifyCharacterChangeName(character);
            }

            if (request.Notes != null)
            {
                character.Notes = request.Notes;
                notificationSession.NotifyCharacterChangeNotes(character);
            }
        }