Добавлен Clamp,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
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 триггеров
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Clamp
Если использующий не способен адекватно использовать данную систему, простота которой стремится к максимальной отметке, то он в любом случае не сможет создавать программированием контент, достойный внимания. А использование моей системы для создание плохого контента не кажется мне интересной идеей.
Faion:
Отредактирован Faion
Clamp:
Faion:
Clamp:
Если я могу использовать что-то, что я не в состоянии сделать самостоятельно, я всё равно буду стараться использовать это адекватно. Например, не буду забивать гвозди микроскопом.