检查是否有东西增加了1

时间:2015-12-05 01:45:45

标签: c# visual-studio-2015

    public int LevelReward()
    {
        int oldlevel = Client.Player.Level;

        if (Client.Player.Level == oldlevel + 1)
        {
            for (int i = 0; i < Client.Player.Inventory.Length; i++)
                if (Client.Player.Inventory[i] == null)
                {
                    Client.Player.Inventory[i] = Client.Player.Manager.GameData.Items[0x7016];
                    Client.Player.UpdateCount++;
                    Client.Player.SaveToCharacter();
                    Client.Player.SendInfo("You've been given 10 gold for leveling up!");
                }
        }
        return 0;
    }

我想要的是这个代码,无论何时玩家升级,给他们项目“10 Gold”(这就是0x7016) 但是看看代码的顶部,我很难在玩家升级时如何检查/实现它...下面的代码只是其余部分,在库存点产生项目等等,但是我我只需要顶部的帮助

        int oldlevel = Client.Player.Level;

        if (Client.Player.Level == oldlevel + 1)

2 个答案:

答案 0 :(得分:5)

最好的方法是在实际发生的事件中发出10金币。你什么时候更新球员的水平?在这一点上给予黄金。

答案 1 :(得分:2)

我会在我的Player类上使用INotifyPropertyChanged。然后,当不同的属性发生变化时,您会收到通知,并将事件逻辑放入事件x发生时应该发生的事情。

这是一个例子。您可以将其复制并粘贴到应用LinqPad中,并在将概念应用到项目之前使用它。

财产变更通知的示例代码:

public static void Main()
{
    var player = new Player { Level = 1 };
    player.PropertyChanged += (sender, pcEventArgs) =>
    {
          var self = (Player)sender;
          self.Gold += 10;
          Console.WriteLine($"Player has leveled up to level {self.Level} and given 10 gold, gold is now at {self.Gold}.");
    };

    for(var i = 0; i < 10; i++)
    {
        player.Level++;
    }
}

public class Player : INotifyPropertyChanged
{
    public int Gold { get; set; }

    private int level;
    public int Level
    {
        get
        { 
            return level;
        }
        set 
        {
            level = value;
            OnPropertyChanged(nameof(Level));
        } 
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

结果:

每次关卡都会触发事件。

控制台输出将是:

Player has leveled up to level 2 and given 10 gold, gold is now at 10.
Player has leveled up to level 3 and given 10 gold, gold is now at 20.
Player has leveled up to level 4 and given 10 gold, gold is now at 30.
Player has leveled up to level 5 and given 10 gold, gold is now at 40.
Player has leveled up to level 6 and given 10 gold, gold is now at 50.
Player has leveled up to level 7 and given 10 gold, gold is now at 60.
Player has leveled up to level 8 and given 10 gold, gold is now at 70.
Player has leveled up to level 9 and given 10 gold, gold is now at 80.
Player has leveled up to level 10 and given 10 gold, gold is now at 90.
Player has leveled up to level 11 and given 10 gold, gold is now at 100.

在你的播放器类中添加INotifyPropertyChange之后,你会在第一次创建播放器之后立即将更改后的事件放在代码中的某个位置。

Client.Player.PropertyChanged += (sender, pcEventArgs) =>
{
    var player= (Player)sender;

    if(pcEventArgs.PropertyName == nameof(player.Level))
    {
        for (int i = 0; i < player.Inventory.Length; i++)
        { 
            if (player.Inventory[i] == null)
            {
                player.Inventory[i] = player.Manager.GameData.Items[0x7016];
                player.UpdateCount++;
                player.SaveToCharacter();
                player.SendInfo("You've been given 10 gold for leveling up!");
            }
        }
    }
}

现在,只要您拥有Client.Player.Level ++或更改了该值,它就会触发您的逻辑。

注意:虽然您的循环看起来可能会在库存中为每件商品提供10金币。不确定这是否是您想要的但是您要求知道何时更改其等级的概念。