ДействиеСценарий / Говнокод #12338 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 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 минут потестить - обычно первый попавшийся объект и был нужным.

Запостил: kyzi007 kyzi007, (Updated )

Комментарии (10) RSS

  • GameObjectDataProxy - неудачное название, нужно было сразу GameObjectValueDataProxy.

    А кстати, а почему автор не использовал им же написаную функцию утилиту по удалению элементов из массива? Или это не тот автор?
    Ответить
  • О, я думаю, до меня дошло только сейчас:
    this.facade.retrieveProxy(level.npc[i]) возвращает то же самое, что и level.npc[i]?
    Ответить
      • Я к тому, что это всегда выбирает один и тот же первый элемент массива, а не ищет кого бы удалить?

        Т.е. перефразируя,
        var npcToDelete : GameObjectDataProxy =
            this.facade.retrieveProxy(npcToDeleteId) as GameObjectDataProxy;

        и вынести за цикл?
        Ответить
        • <<Я к тому, что это всегда выбирает один и тот же первый элемент массива, а не ищет кого бы удалить?

          А должен искать 😉 Это и есть баг. Тоесть надо if (npc.id == id) вместо if (npc.id == id2) чтобы корректно работало.

          В сумме метод должен запускать удаление с массива айдишников уровня и с карты.
          Ответить
  • Ощутив явное превосходство противника в силе, Ромка извернулся и топнул ногой по ступне агрессора. Олег взвыл от боли и с ещё большей яростью потащил отчаянно сопротивляющегося парня вниз.
    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8