public static ICollection <AbilityRequirement> ScanApiEndpointsForRequirements(this HttpConfiguration config) { var explorer = new ApiExplorer(config); var endpoints = new List <AbilityRequirement>(); foreach (var description in explorer.ApiDescriptions) { var action = description.ActionDescriptor; var endpoint = new AbilityRequirement { HttpMethod = description.HttpMethod.Method, Controller = description.ActionDescriptor.ControllerDescriptor.ControllerName, Action = description.ActionDescriptor.ActionName, EndpointPath = $"/{description.RelativePath}" }; var pipeline = action.GetFilterPipeline(); foreach (var filter in pipeline.OfType <CustomAttribute>()) { endpoint.Policies.Add(filter.AbilityType.Name); } endpoints.Add(endpoint); } return(endpoints); }
public override AbilityInfo LoadItem(Module module, string id, ObjectData data) { var dataObj = data.Data; var result = new AbilityInfo { Name = dataObj.EnsureString("Name"), Mana = dataObj.OptionalInt("Mana", 0), Type = dataObj.EnsureEnum <AbilityType>("Type"), Description = dataObj.EnsureString("Description") }; var requirementsObject = dataObj.EnsureJObject("Requirements"); var requirements = new List <AbilityRequirement>(); foreach (var pair in requirementsObject) { var cls = module.Classes.Ensure(pair.Key); var level = pair.Value.ToString().ToInt(); var requirement = new AbilityRequirement { Class = cls, Level = level }; requirements.Add(requirement); } result.Requirements = requirements.ToArray(); var effectsObject = dataObj.OptionalJObject("Effects"); var effects = new List <AbilityEffect>(); if (effectsObject != null) { if (result.Type == AbilityType.Permanent) { RaiseError("Permanent ability can't have effects."); } foreach (var pair in effectsObject) { AbilityEffect effect = null; var effectObj = (JObject)pair.Value; switch (pair.Key) { case "HealSelf": var healSelf = new HealSelf { Minimum = effectObj.EnsureInt("Minimum"), Maximum = effectObj.EnsureInt("Maximum"), MessageActivated = effectObj.EnsureString("Message"), }; effect = healSelf; break; default: RaiseError("Unknown ability effect {0}", pair.Key); break; } effects.Add(effect); } } result.Effects = effects.ToArray(); var bonusesObject = dataObj.OptionalJObject("Bonuses"); if (bonusesObject != null) { if (result.Type != AbilityType.Permanent) { RaiseError("Non-permanent ability can't have bonuses"); } foreach (var pair in bonusesObject) { var bonusType = (BonusType)Enum.Parse(typeof(BonusType), pair.Key); var value = pair.Value.ToString().ToInt(); result.Bonuses[bonusType] = value; } } return(result); }
public MapLogicInfo(bool unlocksAbilitiy, AbilityRequirement unlock, AbilityRequirement completion) { this.unlocksAbility = unlocksAbilitiy; abilityUnlockRequirement = unlock; abilityCompleteRequirement = completion; }