public override void Use(IEffectContext context) { foreach (var target in context.Targets) { var chance = context.Battle.RandomProvider.RandomDouble(); var hits = chance switch { var n when n < 0.375 => 2, var n when n < 0.75 => 3, var n when n < 0.875 => 4, _ => 5 }; // Only the first strike can be a critical hit var damage = context.Battle.DamageFormula.DamageDealt(context, target); target.Damage(damage); // Successive hits deal the same amount of damage damage = context.Battle.DamageFormula.DamageDealt(context, target, false); for (var i = 1; i < hits; i++) { target.Damage(damage); } // TODO: DoubleSlap will end immediately if it breaks a substitute. Bide and Counter will only acknowledge the last strike of this move. } } }
public static async Task OnCreateWorkflow(CreateWorkflow action, IEffectContext context) { var dispatcher = context.Services.GetRequiredService <IDispatcher>(); if (dispatcher == null) { throw new NullReferenceException("Unable to resolved service 'IDispatcher'."); } dispatcher.Dispatch(new DisableCreateButton()); var api = context.Services.GetRequiredService <ISynapseManagementApi>(); if (api == null) { throw new NullReferenceException("Unable to resolved service 'ISynapseManagementApi'."); } var command = new V1CreateWorkflowCommand() { Definition = action.Definition }; try { var workflow = await api.CreateWorkflowAsync(command); dispatcher.Dispatch(new EnableCreateButton()); if (workflow != null) { context.Dispatcher.Dispatch(new NavigateTo("workflows")); } } catch (Exception ex) { dispatcher.Dispatch(new EnableCreateButton()); } }
public static async Task OnGetV1WorkflowById(GetV1WorkflowById action, IEffectContext context) { var api = context.Services.GetRequiredService <ISynapseManagementApi>(); var workflow = await api.GetWorkflowByIdAsync(action.WorkflowId); context.Dispatcher.Dispatch(new AddV1Workflow(workflow)); }
public static async Task OnListV1Workflows(ListV1Workflows action, IEffectContext context) { var api = context.Services.GetRequiredService <ISynapseManagementApi>(); var workflows = await api.GetWorkflowsAsync(); context.Dispatcher.Dispatch(new SetV1WorkflowCollection(workflows)); }
public decimal Multiplier(IEffectContext context, IBattlePokemon target) { return(TargetsMultiplier(context.Targets.Count) * WeatherMultiplier(context) * RandomMultiplier(context.Battle.RandomProvider) * StabMultiplier(context.User, context.Move.Type) * TypeMultiplier(context.Move.Type, target)); }
public override void Use(IEffectContext context) { foreach (var target in context.Targets) { var damage = context.Battle.DamageFormula.DamageDealt(context, target); target.Damage(damage); } }
public static async Task OnNavigateTo(NavigateTo action, IEffectContext context) { var navigationManager = context.Services.GetRequiredService <NavigationManager>(); if (navigationManager == null) { throw new NullReferenceException("Unable to resolved service 'NavigationManager'."); } navigationManager.NavigateTo(action.Uri, action.ForceLoad, action.Replace); await Task.CompletedTask; }
// TODO OtherMultiplier public int DamageDealt(IEffectContext context, IBattlePokemon target, bool canCrit = true) { var crit = CriticalStrike(context); var level = crit ? context.User.Level * 2 : context.User.Level; var power = context.Move.Power; var attack = context.Move.Category.AttackStat(target); var defense = context.Move.Category.DefenseStat(target); var modifier = Multiplier(context, target); return((int)(((2 * level / 5 + 2) * power * (attack.ModifiedValue / defense.ModifiedValue) / 50 + 2) * modifier)); }
public bool CriticalStrike(IEffectContext context) { var @event = new CriticalRatioEvent(); context.Battle.EventBus.Raise(@event); var multiplier = @event.Multiplier; var t = (int)(context.User.Speed.ModifiedValue / 2M * multiplier); var tByte = (byte)Math.Clamp(t, byte.MinValue, byte.MaxValue); var threshold = context.Battle.RandomProvider.RandomByte(); return(tByte < threshold); }
public override void Use(IEffectContext context) { }
public virtual void Use(IEffectContext context) { }
public decimal WeatherMultiplier(IEffectContext context) { return(1); // TODO }
public static async Task OnDeleteV1WorkflowInstance(DeleteV1WorkflowInstance action, IEffectContext context) { var api = context.Services.GetRequiredService <ISynapseManagementApi>(); await api.DeleteWorkflowInstanceAsync(action.InstanceId); }
public static async Task OnListV1WorkflowInstancesByDefinition(ListV1WorkflowInstancesByDefinition action, IEffectContext context) { var api = context.Services.GetRequiredService <ISynapseManagementApi>(); var workflowInstances = await api.GetWorkflowInstancesAsync($"$filter={nameof(V1WorkflowInstance.WorkflowId)} eq '{action.DefinitionId}'"); context.Dispatcher.Dispatch(new SetV1WorkflowInstanceCollection(workflowInstances)); }