Система восстановления декораций

Published
Библиотека, которая позволяет однвременно восстанавливать все разрушенные декорации с учётом условий.
» либра с дудадами
library DoodadsRestore initializer initialize {
    #include "cj_types_priv.j"

    private float ACTIVATION_FREQUENCY = 30.0;
    private float HERO_DETECTION_RANGE = 250.0;

    private location tempLocation = Location(0.0, 0.0);
    private group tempGroup = CreateGroup();
    private int heroesAround = 0;

    private void countHeroes() {
        if (IsHeroUnitId(GetUnitTypeId(GetEnumUnit()))) {
            heroesAround++;
        }
    }

    private void restore() {
        destructible enumDestr = GetEnumDestructable();
        int destrX = GetDestructableX(enumDestr);
        int destrY = GetDestructableY(enumDestr);
        MoveLocation(tempLocation, destrX, destrY);

        player p;
        int witnessCount = 0;
        for (int i = 0; i <= 11; i++) {
            p = Player(i);
            if (IsLocationVisibleToPlayer(tempLocation, p) && GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING && GetPlayerController(p) == MAP_CONTROL_USER) {
                witnessCount++;
            }
        }

        heroesAround = 0;
        GroupEnumUnitsInRange(tempGroup, destrX, destrY, HERO_DETECTION_RANGE, null);
        ForGroup(tempGroup, function countHeroes);
        GroupClear(tempGroup);

        if (GetDestructableLife(enumDestr) <= GetDestructableMaxLife(enumDestr) && witnessCount == 0 && heroesAround == 0) {
            DestructableRestoreLife(enumDestr, GetDestructableMaxLife(enumDestr), true);
        }
    }

    private void activate() {
        EnumDestructablesInRect(bj_mapInitialPlayableArea, null, function restore);
    }

    private void initialize() {
        trigger activator = CreateTrigger();
        TriggerRegisterTimerEvent(activator, ACTIVATION_FREQUENCY, true);
        TriggerAddAction(activator, function activate);
    }
}
Каждые ACTIVATION_FREQUENCY секунд возрождает все деревья на карте, которые удовлетворяют двум условиям:
  1. Конкретное дерево никто не видит
  2. На расстоянии HERO_DETECTION_RANGE от дерева нет героев.

Для работы требует cJass, для установки достаточно скопировать в нестандартный код карты.


Views: 1 396

Shown only a small set of comments around the pointed one. Go to actual.

K0lenval #1 - 9 years ago 0
Голосов: +0 / -0
Я конвертировал код на обычный джаз и игра стала зависать.
Clamp #2 - 9 years ago 0
Голосов: +0 / -0
Всё правильно, ведь этот код написан не на JASS2
Плюс к этому Вы наверняка совершили где нибудь ошибку, давайте результат конвертирования.

Shown only a small set of comments around the pointed one. Go to actual.