C#多重属性用作要求

时间:2017-05-13 19:05:24

标签: c# attributes

所以我一直试图创建一个mod,并且我遇到了一个问题,试图要求多个技能组合,或者更确切地说是限制一个以上的技能组合。

我试图将其锁定,以便玩家一次只能访问一个技能树。我所拥有的是以下内容,但它并不能阻止他们在另一棵树上学习技能。

namespace Test.run.TechTree
{
    using System;
    using System.Runtime.Serialization;
    using Test.Gameplay.Components;
    using Test.Gameplay.DynamicValues;
    using Test.Gameplay.Items;
    using Test.Gameplay.Players;
    using Test.Gameplay.Property;
    using Test.Gameplay.Skills;
    using Test.Gameplay.Systems.TextLinks;
    using Test.Shared.Services;
    using Test.Shared.Utils;
    using Gameplay.Systems.Tooltip;

    [DataContract]

    [RequiresSkill(typeof(FireSkill), 0)]
    public partial class ShootingSkill : Skill
    {
        public override string FriendlyName { get { return "Shooting"; } }
        public override string Description { get { return "This is how you shoot"; } }

        public static int[] SkillPointCost = { 1, 2, 2, 3, 3 };
        public override int RequiredPoint { get { return this.Level < this.MaxLevel ? SkillPointCost[this.Level] : 0; } }
        public override int MaxLevel { get { return 4; } }
    }

}

这允许他们学习并将点数放入这个技能树中,这很棒,但我想限制它,这样如果他们已经在另一个技能树中学习技能,他们就无法将技能放入这个技能树。最后,我希望能够说,如果你没有把积分放到另一个或者你在另一个中至少得到50分,你就可以掌握这个技能。

在这个例子中,玩家想要开始将点数放入射击技能树的Fireskill中,但是我想说如果他们在Gearskill的部分附件技能树中有1到49个,我不希望他们能够使用它直到他们要么没有把任何东西放入Gearskill或至少50进入它。我承认我对C#很陌生,并且仍然在学习更多有关属性的内容,但我怎样才能得到下面的概念。任何帮助将不胜感激。

namespace Test.run.TechTree
{
    using System;
    using System.Runtime.Serialization;
    using Test.Gameplay.Components;
    using Test.Gameplay.DynamicValues;
    using Test.Gameplay.Items;
    using Test.Gameplay.Players;
    using Test.Gameplay.Property;
    using Test.Gameplay.Skills;
    using Test.Gameplay.Systems.TextLinks;
    using Test.Shared.Services;
    using Test.Shared.Utils;
    using Gameplay.Systems.Tooltip;

    [DataContract]

    [RequiresSkill(typeof(FireSkill), 0), RequiresSkill(typeof(GearSkill), >1 or  <50]
    public partial class ShootingSkill : Skill
    {
        public override string FriendlyName { get { return "Shooting"; } }
        public override string Description { get { return "This is how you shoot"; } }

        public static int[] SkillPointCost = { 1, 2, 2, 3, 3 };
        public override int RequiredPoint { get { return this.Level < this.MaxLevel ? SkillPointCost[this.Level] : 0; } }
        public override int MaxLevel { get { return 4; } }
    }

}

1 个答案:

答案 0 :(得分:1)

您需要为AllowMultiple = true属性设置RequiresSkill

[AttributeUsage(AttributeTargets.{whatever}, AllowMultiple = true)]  
public class RequiresSkill : Attribute  
{  
}