Алгоритмы, Наработки и Способности
Способ реализации:
cJass
Тип:
Наработка
Библиотека, которая позволяет добавлять общее событие "юнит получает урон":
cJass
library UnitDamaged initializer InitRect {
    #include "cj_types_priv.j"

    private group   allUnits;
    private region  mapArea;
    private trigger Trigger[];
    private int     TrigsNum = 0;

    private void unitDamagedEvent() {
        TriggerRegisterUnitEvent(Trigger[TrigsNum], GetEnumUnit(), EVENT_UNIT_DAMAGED);
    }

    void AnyUnitDamagedEvent(trigger toTrigger) {
        Trigger[TrigsNum] = toTrigger;
        ForGroup(allUnits, function unitDamagedEvent);
        TrigsNum++;
    }

    private void onUnitSpawn() {
        for (int i = 0; i < TrigsNum; i++) {
            TriggerRegisterUnitEvent(Trigger[i], GetEnteringUnit(), EVENT_UNIT_DAMAGED);
        }
        GroupAddUnit(allUnits, GetEnteringUnit());
    }

    private void onUnitDecay() {
        GroupRemoveUnit(allUnits, GetDecayingUnit());
    }

    private void InitRect() {
        trigger onSpawn = CreateTrigger();
        trigger onDecay = CreateTrigger();
        allUnits = CreateGroup();
        mapArea = CreateRegion();
        GroupEnumUnitsInRect(allUnits, GetWorldBounds(), null);
        RegionAddRect(mapArea, GetWorldBounds());
        TriggerRegisterEnterRegion(onSpawn, mapArea, null);
        for (int i = 0; i < bj_MAX_PLAYER_SLOTS; i++) {
            TriggerRegisterPlayerUnitEvent(onDecay, Player(i), EVENT_PLAYER_UNIT_DECAY, null);
        }
        TriggerAddAction(onSpawn, function onUnitSpawn);
        TriggerAddAction(onDecay, function onUnitDecay);
    }
}
vJass
library UnitDamaged initializer initRect
    globals
        private group   allUnits
        private region  mapArea
        private trigger Trigger[]
        private integer TrigsNum = 0
    endglobals

    private function unitDamagedEvent takes nothing returns nothing
        call TriggerRegisterUnitEvent(Trigger[TrigsNum], GetEnumUnit(), EVENT_UNIT_DAMAGED)
    endfunction

    function AnyUnitDamagedEvent takes trigger toTrigger returns nothing
        set Trigger[TrigsNum] = toTrigger
        call ForGroup(allUnits, function unitDamagedEvent)
        set TrigsNum = TrigsNum + 1
    endfunction

    private function onUnitSpawn takes nothing returns nothing
        local integer i = 0
        loop
            exitwhen (i == TrigsNum)
            call TriggerRegisterUnitEvent(Trigger[i], GetEnteringUnit(), EVENT_UNIT_DAMAGED)
            set i = i + 1
        endloop
        call GroupAddUnit(allUnits, GetEnteringUnit())
    endfunction

    private function onUnitDecay takes nothing returns nothing
        call GroupRemoveUnit(allUnits, GetDecayingUnit())
    endfunction

    private function initRect takes nothing returns nothing
        local integer i = 0
        local trigger onSpawn = CreateTrigger()
        local trigger onDecay = CreateTrigger()
        set allUnits = CreateGroup()
        set mapArea = CreateRegion()
        call GroupEnumUnitsInRect(allUnits, GetWorldBounds(), null)
        call RegionAddRect(mapArea, GetWorldBounds())
        call TriggerRegisterEnterRegion(onSpawn, mapArea, null)
        loop
            exitwhen (i == bj_MAX_PLAYER_SLOTS)
            call TriggerRegisterPlayerUnitEvent(onDecay, Player(i), EVENT_PLAYER_UNIT_DECAY, null)
            set i = i + 1
        endloop
        call TriggerAddAction(onSpawn, function onUnitSpawn)
        call TriggerAddAction(onDecay, function onUnitDecay)
    endfunction
endlibrary

Добавление события:
    call AnyUnitDamagedEvent(subscribingTrigger)

Источник урона (атаковавший юнит):
GetEventDamageSource()
Цель урона (атакованный юнит):
GetTriggerUnit() 
Величина нанесённого урона:
GetEventDamage()

Установка: скопировать в Нестандартный Код Карты, дальнейших действий не требуется.

Ограничения:
  • Нельзя использовать с динамичными триггерами
  • Нельзя использовать более, чем с JASS_MAX_ARRAY_SIZE триггеров
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
30
11 лет назад
0
Я уже свою точку зрения подтвердил своей альтернативной системой, которая полностью реализует то о чем я говорил.
Да ладно? "Твоя система говно, эта лучше" - плохой способ подтвердить.
Чем ж она перегружена?
Ты её как хм... ну в общем очень неаккуратно написал.
0
24
11 лет назад
0
Да ладно? "Твоя система говно, эта лучше" - плохой способ подтвердить.
По моему мой код сам за себя говорит. Думаю тут даже не о чем рассуждать и где лучше совершенно очевидно. Фильтрации есть, лишних действий нету. Тут максимум к чему можно придраться, так это выгрузке параметров в глобалки, и невозможность использование самих нативок. Что в принципе дело привычки, а в плане производительности совершенно не существенно. В твоей же системе совершенно неуклюжая инициализация. Ну и фильтацию твоя система не поддерживает.
Ты её как хм... ну в общем очень неаккуратно написал.
Лень было форматирование делать и комменты проставлять, писал на коленке, больше 15 минут тратить на такую лажу было лень.
0
30
11 лет назад
Отредактирован Clamp
0
фильтацию твоя система не поддерживает.
facepalm
Мне фильтр не нужен - я его не напиал. Офк это сложно, пять строчек добавить, вплоть до "не поддерживается".
Всё ясно с тобой в общем. Изображай, что всё, что не твоё - лажа дальше. С=
0
24
11 лет назад
Отредактирован Faion
0
Изображай, что всё, что не твоё - лажа дальше.
Зачем мне что то "изображать" ? Разница между твоей системой и моей более чем очевидна. Пока что что то изображать пытаешься только ты.
0
32
11 лет назад
0
Чё к чему, какая такая нужна отслеживать всех юнитов на карте, в большинстве карт за ранние известны юниты которые нанесут урон и которые получат, что так мудрить?
1
24
11 лет назад
1
quq_CCCP, лолшто? Банально систему отслеживания нанесения урона как ты будешь писать?
0
32
11 лет назад
0
Faion, всех то на карте зачем?
1
30
11 лет назад
1
О, Господи, почему?!
quq_CCCP, ты тупой, как пробка от вина, ставшего уксусом от того, что купивший его человек думал, что оно станет лучше через десять лет, так как был очень тупым.
На карте есть юниты, много юнитов. Каждый из них может нанести урон любому другому, и чтобы этот урон поймать, надо быть готовым к тому, что КТО УГОДНО получит урон.
0
32
11 лет назад
0
На карте 60 мобов и 2 героя, у которых есть пассивки типо критов (триггеного типа) мы будет писать ивенты на всех всех мобов на карте. даже когда герои небудут их бить....
Идиотизм и только...
0
30
11 лет назад
Отредактирован Clamp
0
мы будет писать ивенты на всех всех мобов на карте даже когда герои небудут их бить
Эвенты пишутся 1 раз за игру, мастер кода.
дальнейшие твои сообщения будут удаляться в силу твоей некомпетентности.
0
37
11 лет назад
0
Faion, в чем разница ? Тот же форгруп, тот же евент демейдж.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.