所以我一直试图创建一个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; } }
}
}
答案 0 :(得分:1)
您需要为AllowMultiple = true
属性设置RequiresSkill
。
[AttributeUsage(AttributeTargets.{whatever}, AllowMultiple = true)]
public class RequiresSkill : Attribute
{
}