я всё равно буду стараться использовать это адекватно.
Те кто не в состоянии написать подобное, как правило и занимаются забиванием гвоздей микроскопом. Ибо те кто не подходят под это описание, пишут сами свои системы.
1 триггер на реализацию постоянных (пассивных) способностей, реагирующие на получение урона
Быдлокодер будет использовать на каждую способность своему эвенту, очевидно же.
Систем так же может быть более десятка. Новые юниты так же могут пачками создаваться.
Особо одаренные могут подписываться на регистрацию эвента при каждом использовании. Clamp:
Система разрабатывалась с расчётом на адекватное использование, а оно не подразумевает создание нового триггера на каждый случай инициализации заклинания.
Если использующий не способен адекватно использовать данную систему, простота которой стремится к максимальной отметке, то он в любом случае не сможет создавать программированием контент, достойный внимания. А использование моей системы для создание плохого контента не кажется мне интересной идеей.
Речь не о адекватности использующего или еще о чем то ином вязанном о использовании. Как минимум если существует метод Add, то должен быть метод Remove,который будет реализовывать удаление уже не нужного триггера из Trigger[]. Clamp:
Лол. Объясняю для особо одаренных, почему твой код - уг.
Берем из твоей либы:
AnyUnitDamagedEvent(trigger trg)
И регистрируем 100, опустим тот факт, что нефига не зарегистрируется, если на карте много юнитов, ну а далее, мы уничтожаем 99 триггеров(ты же не думал что они будут все статичными, лол).
И смотрим сюда:
private void Adder()
{
int i = 0
loop
{
TriggerRegisterUnitEvent(Trigger[i],GetEnteringUnit(),EVENT_UNIT_DAMAGED)
exitwhen i==TrigsNum
i++
}
GroupAddUnit(Group,GetEnteringUnit())
}
Лол. Конечно же моя система ничем не лучше :D
Для самых одаренных из одаренных поясняю, в твоей системе еще нужно писать метод для удаления твоей костыльной регистрации ._.
Что бы были все стихии, нужно будет отыграть десятки, или даже сотни часов. А уж всякие ВМШ будут у единиц избранных. Некоторые техники из оригинального аниме конечно же будут встречаться, но не слишком часто, и сложность их получения будет зависить от их ранга и прочих параметров. Проще говоря с разенганами и райкири все поголовно бегать не будут.
Да ладно? "Твоя система говно, эта лучше" - плохой способ подтвердить.
По моему мой код сам за себя говорит. Думаю тут даже не о чем рассуждать и где лучше совершенно очевидно. Фильтрации есть, лишних действий нету. Тут максимум к чему можно придраться, так это выгрузке параметров в глобалки, и невозможность использование самих нативок. Что в принципе дело привычки, а в плане производительности совершенно не существенно. В твоей же системе совершенно неуклюжая инициализация. Ну и фильтацию твоя система не поддерживает.
По барабану. Раз говоришь что у меня "слабая" архитектура, то изволь как то подтвердить свои слова. Я уже свою точку зрения подтвердил своей альтернативной системой, которая полностью реализует то о чем я говорил.
ScorpioT1000, нет :)
Это не попсовая функция, я ж выше писал, о ней мало кто знает, и еще меньше людей знают как ее применять, и по факту до сих пор она нигде не применялась, ну или по крайней мере я не видел что б ее применяли.
Как и обещал:
тык
library UnitDamageEvent
{
// источник урона
public unit Source = null;
// цель урона
public unit Target = null;
// урон
// для регистрации эвента нанесения урона установите значение как -1.0
// если вы хотите, что бы нулевой урон не вызывал эвент, то установите как 0.0
#define private EventDamage = -1.0;
public float Damage = EventDamage;
private trigger EventTrigger = null;
private trigger SystemTrigger = null;
// отвечает за включение\отключение фильтрации юнитов
#define private UnitFilterEnable = true;
#if (UnitFilterEnable)
public hashtable sysHashtable = InitHashtable();
#endif
// добавление\удаление типа юнита для фильтрации
#define AddFilterUnitByTypeId(typeId) = SaveBoolean(UnitDamageEvent_sysHashtable, 0,typeId, true)
#define RemoveFilterUnitByTypeId(typeId) = RemoveSavedBoolean(UnitDamageEvent_sysHashtable, 0,typeId)
#define TriggerRegisterAnyUnitTakesDamage(t) = TriggerRegisterVariableEvent(t, "UnitDamageEvent_Damage", GREATER_THAN, EventDamage);
callback onInit()
{
EventTrigger = CreateTrigger(); SystemTrigger = CreateTrigger();
group g = CreateGroup();region r = null;unit u = null;
GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null);
ForGroup(g, lambda void(){
#if(UnitFilterEnable)
if(LoadBoolean(UnitDamageEvent_sysHashtable, 0,GetUnitTypeId(GetEnumUnit()))){return;}
#endif
TriggerRegisterUnitEvent(EventTrigger,GetEnumUnit(),EVENT_UNIT_DAMAGED)
});
GroupClear(g);DestroyGroup(g);g = null;
RegionAddRect(r, bj_mapInitialPlayableArea);
TriggerRegisterEnterRegion(SystemTrigger,r,null); r = null;
TriggerAddAction(SystemTrigger, lambda void(){
#if(UnitFilterEnable)
if(LoadBoolean(UnitDamageEvent_sysHashtable, 0,GetUnitTypeId(GetEnumUnit()))){return;}
#endif
TriggerRegisterUnitEvent(EventTrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
});
TriggerAddAction(EventTrigger, lambda void()
{
Source = GetEventDamageSource();Target = GetTriggerUnit();Damage = GetEventDamage();
Source = null;Target = null;Damage = EventDamage
});
}
}
library UnitDamageEventTest uses UnitDamageEvent
{
callback onInit()
{
trigger t = CreateTrigger();
TriggerRegisterAnyUnitTakesDamage(t);
TriggerAddAction(t, lambda void(){
/* Ваш код */
});
t = null;
}
}
Faion, если работает, в чём проблема? Ты тестил, или споришь о сферическом коне в вакууме?
Работает или не работает в данном случае не обсуждается, ибо к работоспособности нет никаких претензий. Но есть серьезная претензия к логике, мой перфекционизм не позволяет игнорировать данный случай, ибо сейчас не 2002, когда можно было делать "лишь бы работало", сейчас критично важно писать высокопроизводительные библиотеки(к коим данная не относится из за логики).
Так или иначе, тебе придётся пройтись по каждому юниту, чтобы каждый получил этот ивент.
Совершенно верно, ОДНАКО, проход будет 1, который будет происходить во время инита, вместе со всеми системами, причем для любого количества триггеров(в т.ч. подписанных на данный эвент уже после инита и перебора).
Ты не можешь создать свою переменную типа "event", нету нативных функций для этого.
Переменную типа эвент, действительно не могу, она будет другого типа, но будет работать как эвент, нативная функция для этого есть, просто ты ее не знаешь.
Итого, независимо от количества триггеров, будет 1 проход, для всех n триггеров.
но Файону здесь не повезло, и он пытается хоть в чём-нибудь выпендриться.
Файон ничего не пытается, Файон придет с работы, напишет то о чем он написал и опубликует. А вот чего добивается Кламп своими пмсными выходками мне не ясно если честно.
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
Clamp:
Ред. Faion
» WarCraft 3 / Система отлова нанесённого урона
Clamp:
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
Дальше ясно, или нужна помощь кэпа?
» WarCraft 3 / Система отлова нанесённого урона
Ред. Faion
» WarCraft 3 / Система отлова нанесённого урона
Clamp:
AnyUnitDamagedEvent(trigger trg)
И регистрируем 100, опустим тот факт, что нефига не зарегистрируется, если на карте много юнитов, ну а далее, мы уничтожаем 99 триггеров(ты же не думал что они будут все статичными, лол).
» Naruto - Nindogatari / Naruto - Nindogatari
» WarCraft 3 / Система отлова нанесённого урона
Ред. Faion
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» Naruto - Nindogatari / Naruto - Nindogatari
» WarCraft 3 / Система отлова нанесённого урона
Это не попсовая функция, я ж выше писал, о ней мало кто знает, и еще меньше людей знают как ее применять, и по факту до сих пор она нигде не применялась, ну или по крайней мере я не видел что б ее применяли.
Как и обещал:
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
Ред. Clamp
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона
» WarCraft 3 / Система отлова нанесённого урона