我还没有找到任何方法来为任何东西分配钩子,如果可以的话,它会非常有用。另外,如何检查游戏对象是否仍然存在? (即没有死于年龄,也没有被敌人摧毁。)
答案 0 :(得分:4)
如果您的意思是通过API - 还不是。但是您可以更改当前状态并将其与记忆的对象先前状态进行比较。例如,如果Memory
中的某些蠕变名称仍然存在,但它已在Game.creeps
中消失,则会发生一些事情。
for(var i in Game.creeps) {
var creep = Game.creeps[i];
creep.memory.lastSeenAt = {x: creep.pos.x, y: creep.pos.y};
}
for(var i in Memory.creeps) {
if(!Game.creeps[i]) {
console.log("Oops! Something happened with a creep "+creep.name+" at "+
Memory.creeps[i].lastSeenAt.x+","+Memory.creeps[i].lastSeenAt.y);
}
}
答案 1 :(得分:3)
这是我的用例:
过了一会儿,当使用Room.find(Game.MY_CREEPS)
时,我也会得到死警卫。必须一直过滤它们真的很痛苦,全局Memory
继续列出它们。有没有办法从全局Memory
对象中删除死亡小兵?
[编辑] 发现这一点,希望它会有所帮助。
for(var i in Memory.creeps) {
if(!Game.creeps[i]) {
delete Memory.creeps[i];
}
}
我在每次打勾开始时运行它
答案 2 :(得分:1)
我分叉了脚本示例存储库并创建了我自己的事件处理代码 - https://github.com/pineapplemachine/script-samples/tree/master/hooks
使用该脚本,您可以为事件分配初始化,更新和销毁方法,而不必更加迟钝地处理事务。
答案 3 :(得分:0)
我不这么认为。 API似乎专注于为主游戏循环开发代码,比如在while(true)
内编写代码。但是,例如,你可以让你的小兵在他们死之前做点什么。
我已经创建了一个防护模块(就像你在教程中创建的收割机模块一样)。下面的代码应该有效:
module.exports = function (creep) {
if(creep.hits<=100) { Game.spawns.Spawn1.createCreep([Game.ATTACK, Game.ATTACK, Game.TOUGH, Game.TOUGH, Game.MOVE], "guard2", {role:"guard"}); }
var targets = creep.room.find(Game.HOSTILE_CREEPS);
if(targets.length) {
creep.moveTo(targets[0]);
creep.attack(targets[0]);
} else{
creep.moveTo(Game.spawns.Spawn1);
}
}