- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
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 минут потестить - обычно первый попавшийся объект и был нужным.
wvxvw 23.12.2012 17:31 # 0
А кстати, а почему автор не использовал им же написаную функцию утилиту по удалению элементов из массива? Или это не тот автор?
LispGovno 23.12.2012 17:43 # 0
kyzi007 23.12.2012 23:20 # 0
LispGovno 24.12.2012 00:06 # +3
LispGovno 24.12.2012 00:30 # +1
wvxvw 26.12.2012 13:04 # 0
this.facade.retrieveProxy(level.npc[i]) возвращает то же самое, что и level.npc[i]?
kyzi007 26.12.2012 13:39 # 0
wvxvw 26.12.2012 13:45 # 0
Т.е. перефразируя,
и вынести за цикл?
kyzi007 27.12.2012 00:55 # 0
А должен искать ;) Это и есть баг. Тоесть надо if (npc.id == id) вместо if (npc.id == id2) чтобы корректно работало.
В сумме метод должен запускать удаление с массива айдишников уровня и с карты.
7u7 24.08.2021 22:06 # 0