跳转至

监控内存

要检测生命条降低等简单事件,你可以编程让机器人定期从内存读取生命值,并与某个最低可接受值比较,如清单 10-1 所示。

// 每 10 毫秒执行一次(每秒 100 次)
auto health = readMemory<int>(HEALTH_ADDRESS);
if (health <= 500) {
    // 一些告诉机器人如何反应的代码
}

清单 10-1:检查生命值的 if 语句

有了角色生命值的地址,你可以按需经常检查那里的值;每 10 毫秒通常是个不错的速度。(如果需要复习在内存中定位值,请翻回第 1 章。)一旦生命值降到某个值以下,你会想运行一些反应代码来施放治疗法术或喝药水。我将在本章后面讨论如何做到这一点。

如果你希望机器人有更细粒度的信息,以及更多样化的响应机会,你可以编程让它对生命值的任何变化做出反应,而不是只在阈值之后。要做到这一点,修改清单 10-1 中的代码,把当前生命值与上一次执行时的值比较,如下所示:

// 仍然每 10 毫秒执行一次
static int previousHealth = 0;
auto health = readMemory<int>(HEALTH_ADDRESS);
if (health != previousHealth) {
    if (health > previousHealth) {
        // 对增加做出反应
    } else {
        // 对减少做出反应
    }
    previousHealth = health;
}

现在,这段代码用名为 previousHealth 的静态变量跟踪上一次迭代的 health 值。如果 previousHealth 和 health 不同,机器人不仅会对生命值变化做出反应,还会对生命值增加和减少做出不同反应。这种技术是对游戏状态变化做出反应最简单、最常见的方式。有了正确的内存地址,你可以用这个代码模式观察生命值、魔法值、技能冷却和其他关键信息的变化。