Добавлен 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 триггеров
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Faion
Clamp:
AnyUnitDamagedEvent(trigger trg)
И регистрируем 100, опустим тот факт, что нефига не зарегистрируется, если на карте много юнитов, ну а далее, мы уничтожаем 99 триггеров(ты же не думал что они будут все статичными, лол).
Отредактирован Clamp
Заметка: аргумент про перманентность событий для каждого динамичного триггера появился только что, а сообщил ты о нём так, как будто уже три дня только об этом и говоришь.
Дополнение: твоя регистрация не менее костыльная ввиду того, что у тебя тоже нельзя её удалить.
P.S.: дискуссия с тобой неприятна ввиду твоей речевой стилистики, низкой грамотности, открытого неуважения к оппоненту и того, что ты не скрываешь, что это неуважение вызвано самим фактом того, что он является твоим оппонентом. Также твоё общение выглядит так, будто ты страдаешь нарциссизмом, однако при этом готов вылизывать обувь людям, от которых зависишь, что является типичным признаком низкой самооценки и вызывает следствие в виде попыток самоутвердиться на тех, кто заведомо слабее тебя в теме дискуссии, и даже при этом ты умудряешься опускаться до переходов на личности и повторов отбитых аргументационных суждений.
P.P.S.: дальнейшие твои сообщения с речевыми конструкциями вида "твоё ... - убогое" или "моё ... лучше по факту того, что оно лучше" будут просто игнорироваться, а в случаях, где будет отсутствовать иное содержание - удаляться.
Дальше ясно, или нужна помощь кэпа?
Отредактирован Clamp
Если использующий не способен адекватно использовать данную систему, простота которой стремится к максимальной отметке, то он в любом случае не сможет создавать программированием контент, достойный внимания. А использование моей системы для создание плохого контента не кажется мне интересной идеей.
Faion:
Отредактирован Faion
Clamp:
Faion:
Clamp:
Если я могу использовать что-то, что я не в состоянии сделать самостоятельно, я всё равно буду стараться использовать это адекватно. Например, не буду забивать гвозди микроскопом.
Попробуйте затестить например простое изменение 1000 переменных и с повешенными на них событиями.
Ну с таймером офк
Ну и пстодиод www.wc3c.net/showthread.php?t=107658
Тоесть просто у джасса в операторе аля JassSetValue есть проверка, есть ли триггеры на данный эвент