Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
public class DRemoveNPC extends Directive {
static public const NAME : String = "RemoveNPC";
override public function get directiveName() : String {
return NAME;
}
override public function validate() : Boolean {
if (Player.instance.friendMode) {
return false;
}
return super.validate();
}
//signature_args = {"id":"str"}
override public function run() : void {
var id : String = this.args['id'];
var level : Level = Level.instance;
for (var i : int = 0; i < level.npc.length; i++) {
var id2 : String = level.npc[i];
var npc : GameObjectDataProxy = this.facade.retrieveProxy(id2) as GameObjectDataProxy;
if (npc.id == id2) {
level.npc.splice(i, 1);
this.sendNotification(ObjectNotifications.DELETE, npc);
break;
}
}
this.finish();
}
}
Побило все рекорды по соотношению времени / нервов. Главным образом потому что воспроизводилось раз в 10 минут потестить - обычно первый попавшийся объект и был нужным.
А кстати, а почему автор не использовал им же написаную функцию утилиту по удалению элементов из массива? Или это не тот автор?
this.facade.retrieveProxy(level.npc[i]) возвращает то же самое, что и level.npc[i]?
Т.е. перефразируя,
и вынести за цикл?
А должен искать 😉 Это и есть баг. Тоесть надо if (npc.id == id) вместо if (npc.id == id2) чтобы корректно работало.
В сумме метод должен запускать удаление с массива айдишников уровня и с карты.