public Task ExecuteAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { if (action.Type != ActionType) { throw new InvalidActionTypeException(action.Type, ActionType); } if (action.Data == null) { throw new InvalidActionDataException(action.Type); } if (!action.Data.Ev.HasValue) { throw new InvalidActionDataException(action.Type); } var oldEv = context.TargetCharacter.Ev ?? 0; var newEv = oldEv + action.Data.Ev.Value; context.TargetCharacter.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeEv(context.TargetCharacter, oldEv, newEv)); context.TargetCharacter.Ev = newEv; notificationSession.NotifyCharacterChangeEv(context.TargetCharacter); return(Task.CompletedTask); }
public Task ExecuteActionAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { switch (action.Type) { case "addEv": return(_addEvExecutor.ExecuteAsync(action, context, notificationSession)); case "addEa": return(_addEaExecutor.ExecuteAsync(action, context, notificationSession)); case "addItem": return(_addItemExecutor.ExecuteAsync(action, context, notificationSession)); case "removeItem": return(_removeItemExecutor.ExecuteAsync(action, context, notificationSession)); case "addEffect": return(_addEffectExecutor.ExecuteAsync(action, context, notificationSession)); case "addCustomModifier": return(_addCustomModifierExecutor.ExecuteAsync(action, context, notificationSession)); default: return(Task.CompletedTask); } }
public Task ExecuteAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { if (action.Type != ActionType) { throw new InvalidActionTypeException(action.Type, ActionType); } if (action.Data == null) { throw new InvalidActionDataException(action.Type); } if (!action.Data.Ea.HasValue) { throw new InvalidActionDataException(action.Type); } if (!context.TargetCharacter.Ea.HasValue) // DO not touch ea of character that does no have any { return(Task.CompletedTask); } var oldEa = context.TargetCharacter.Ea; var newEa = oldEa + action.Data.Ea.Value; context.TargetCharacter.AddHistoryEntry(_characterHistoryUtil.CreateLogChangeEa(context.TargetCharacter, oldEa, newEa)); context.TargetCharacter.Ea = newEa; notificationSession.NotifyCharacterChangeEa(context.TargetCharacter); return(Task.CompletedTask); }
public Task ExecuteAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { if (action.Type != ActionType) { throw new InvalidActionTypeException(action.Type, ActionType); } if (action.Data?.Modifier == null) { throw new InvalidActionDataException(action.Type); } var modifier = action.Data.Modifier; var characterModifier = new CharacterModifier { Name = modifier.Name, Permanent = false, DurationType = modifier.DurationType, Duration = modifier.Duration, Type = modifier.Type, Description = modifier.Description, Reusable = modifier.Reusable, IsActive = true, CombatCount = modifier.CombatCount, CurrentCombatCount = modifier.CombatCount, TimeDuration = modifier.TimeDuration, CurrentTimeDuration = modifier.TimeDuration, LapCount = modifier.LapCount, CurrentLapCount = modifier.LapCount, Values = modifier.Values.Select(v => new CharacterModifierValue { Type = v.Type, StatName = v.Stat, Value = v.Value }).ToList() }; if (context.TargetCharacter.Modifiers == null) { context.TargetCharacter.Modifiers = new List <CharacterModifier>(); } context.TargetCharacter.Modifiers.Add(characterModifier); context.TargetCharacter.AddHistoryEntry(_characterHistoryUtil.CreateLogAddModifier(context.TargetCharacter, characterModifier)); notificationSession.NotifyCharacterAddModifier(context.TargetCharacter.Id, characterModifier, true); return(Task.CompletedTask); }
public Task ExecuteAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { if (action.Type != ActionType) { throw new InvalidActionTypeException(action.Type, ActionType); } if (_itemUtil.DecrementQuantityOrDeleteItem(context.UsedItem)) { context.UnitOfWork.Items.Remove(context.UsedItem); notificationSession.NotifyItemDeleteItem(context.UsedItem); } return(Task.CompletedTask); }
public async Task ExecuteAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { if (action.Type != ActionType) { throw new InvalidActionTypeException(action.Type, ActionType); } if (action.Data == null) { throw new InvalidActionDataException(action.Type); } if (!action.Data.TemplateId.HasValue) { throw new InvalidActionDataException(action.Type); } var itemTemplate = await context.UnitOfWork.ItemTemplates.GetAsync(action.Data.TemplateId.Value); if (itemTemplate == null) { throw new ItemTemplateNotFoundException(action.Data.TemplateId.Value); } var itemData = new ItemData(); if (!string.IsNullOrEmpty(action.Data.ItemName)) { itemData.Name = action.Data.ItemName; } if (action.Data.Quantity.HasValue) { itemData.Quantity = action.Data.Quantity.Value; } var item = _itemFactory.CreateItem(ItemOwnerType.Character, context.SourceCharacter.Id, itemTemplate, itemData); context.UnitOfWork.Items.Add(item); notificationSession.NotifyCharacterAddItem(context.SourceCharacter.Id, item, true); }
public async Task ExecuteAsync( NhbkAction action, ActionContext context, INotificationSession notificationSession ) { if (action.Type != ActionType) { throw new InvalidActionTypeException(action.Type, ActionType); } if (action.Data == null) { throw new InvalidActionDataException(action.Type); } if (!action.Data.EffectId.HasValue) { throw new InvalidActionDataException(action.Type); } if (action.Data.EffectData == null) { throw new InvalidActionDataException(action.Type); } var effect = await context.UnitOfWork.Effects.GetWithEffectWithModifiersAsync(action.Data.EffectId.Value); if (effect == null) { throw new EffectNotFoundException(); } var combatCount = effect.CombatCount; var timeDuration = effect.TimeDuration; var duration = effect.Duration; var lapCount = effect.LapCount; var customDurationType = action.Data.EffectData.Value <string?>("durationType"); if (!string.IsNullOrEmpty(customDurationType)) { timeDuration = null; duration = null; combatCount = null; lapCount = null; switch (customDurationType) { case "combat": combatCount = action.Data.EffectData.Value <int?>("combatCount"); break; case "time": timeDuration = action.Data.EffectData.Value <int?>("timeDuration"); break; case "custom": duration = action.Data.EffectData.Value <string>("duration"); break; case "lap": lapCount = action.Data.EffectData.Value <int?>("lapCount"); break; case "forever": break; default: throw new InvalidCustomDurationActionException(customDurationType); } } var characterModifier = new CharacterModifier { Name = effect.Name, Permanent = false, DurationType = customDurationType ?? effect.DurationType, Duration = duration, Type = effect.SubCategory.Name, Description = effect.Description, Reusable = false, IsActive = true, CombatCount = combatCount, CurrentCombatCount = combatCount, TimeDuration = timeDuration, CurrentTimeDuration = timeDuration, LapCount = lapCount, CurrentLapCount = lapCount, Values = effect.Modifiers.Select(v => new CharacterModifierValue { Type = v.Type, StatName = v.StatName, Value = v.Value }).ToList() }; if (context.TargetCharacter.Modifiers == null) { context.TargetCharacter.Modifiers = new List <CharacterModifier>(); } context.TargetCharacter.Modifiers.Add(characterModifier); context.TargetCharacter.AddHistoryEntry(_characterHistoryUtil.CreateLogAddModifier(context.TargetCharacter, characterModifier)); notificationSession.NotifyCharacterAddModifier(context.TargetCharacter.Id, characterModifier, true); }