c# - 如何使用 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);`
我需要从游戏值中刷新变量
解决方案
在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
}
查看脚本类的源代码以获得更好的理解。
推荐阅读
- java - 创建 jmx 文件时出现错误“org/apache/jorphan/test/UnitTestManager”
- aframe - 我的 GLB 模型没有加载 A-Frame 1.0.0
- python - python读取加密(使用gnupg)zip文件的内容而不将文件解密到文件系统
- git - 合并后保留分支历史
- javascript - 将 redux saga 与 next.js 一起使用是反模式吗?
- javascript - Sequelize::findAll 不是函数
- mysql - 比较mysql中的两个表
- java - 仅在某些条件为真时才使用来自 Kafka 的消息
- sql - 我可以为添加到 SQL 表的所有新行从数据库发送邮件(通知到表中的电子邮件字段)吗
- laravel - 如何在 laravel 中编辑和更新多选表单