首页 > 解决方案 > 如何使用 GTA5 的 Scripthookvdotnet 在 C# 中每秒刷新变量的值

问题描述

所以我有5个变量

string name, int health, bool alarm, float someFloat, int dirt

在一个 void( void VehicleInfo())

如何让这些变量每秒刷新一次?我正在寻找几天的答案,但我找不到任何东西..

void VehicleInfo(){

        string name = Game.Player.Character.CurrentVehicle.DisplayName;
        int health = Game.Player.Character.CurrentVehicle.Health;
        bool alarm = Game.Player.Character.CurrentVehicle.AlarmActive;
        float someFloat = Game.Player.Character.CurrentVehicle.DirtLevel;
        int dirt = (int)Math.Round(someFloat);

       

        UIMenu VehInfo = modMenuPool.AddSubMenu(mainMenu, "Vehicle Info");

        UIMenuItem Name;
        UIMenuItem Health;
        UIMenuItem Dirt;
        UIMenuItem Alarm;

        Name = new UIMenuItem("Vehicle Name: " + name);
        VehInfo.AddItem(Name);
        
        Health = new UIMenuItem("Vehicle Health: " + health);
        VehInfo.AddItem(Health);

        Dirt = new UIMenuItem("Vehicle Dirt Level: " + dirt);
        VehInfo.AddItem(Dirt);

        Alarm = new UIMenuItem("Does This Vehicle Have Alarm: " + alarm);
        VehInfo.AddItem(Alarm);`

我需要从游戏值中刷新变量

标签: c#

解决方案


在github 上查看示例

你可以继承自Script

然后,在构造函数中,您指定一个时间间隔(每 X 毫秒)和一个事件处理程序,用于计时发生的时间。

public YourClass()
{
   Tick += OnTick;
   Interval = 1000; // Every Second 
}

// This method is called every 1 second, based on the Interval
private void OnTick(object sender, EventArgs e)
{
   string name = Game.Player.Character.CurrentVehicle.DisplayName;
   int health = Game.Player.Character.CurrentVehicle.Health;
   bool alarm = Game.Player.Character.CurrentVehicle.AlarmActive;
   float someFloat = Game.Player.Character.CurrentVehicle.DirtLevel;
   int dirt = (int)Math.Round(someFloat);
   // The rest of your code
}

查看脚本类的源代码以获得更好的理解。


推荐阅读