1. ActionScript / Говнокод #12338

    −86

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 23 Декабря 2012

    Комментарии (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) чтобы корректно работало.

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

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