38

» WarCraft 3 / Система отлова нанесённого урона

Про ту что я система, я пришел, зарегал на моих юнитов эвент и работаю только с ним, а мне будет сыпаться всякий хлам от чужих систем.
38

» WarCraft 3 / Система отлова нанесённого урона

А с чего ты взял что там происходит эвалюейт триггера?
При любом срабатывании event происходит эвалюэйт триггера, или ты что-то иное имеешь ввиду под этим словом?
38

» WarCraft 3 / Система отлова нанесённого урона

Ну так эвалюейт триггера работает дольше простого вызова функции =)
А лямбда классы в вжасс уже есть?
38

» WarCraft 3 / Система отлова нанесённого урона

ScorpioT1000:
Мне лень
Вот чтд xgm.ru/forum/showthread.php?t=28464
Ну и пстодиод www.wc3c.net/showthread.php?t=107658
Тоесть просто у джасса в операторе аля JassSetValue есть проверка, есть ли триггеры на данный эвент
38

» Блог Кета Голосова / Ненормативная лексика на XGM

Кет, потому что она болеет и ей плохо =))
RiseD_Konst, был 2006-2008 год, когда реально шарящие люди отвечали на темы, стоит только поискать. Но теперь эти люди ушли в более серьезные проекты, а нас ("средненьких") осталось мало чтобы каждый раз повторять вам одно и то же. Создавая новые темы по тем же ключевым словам, но в которых отвечают уже не "отцы варкрафта", а какие-то проходимцы, вы только портите результаты поиска для новеньких юзеров.
38

» WarCraft 3 / Система отлова нанесённого урона

Есть мнение, что вариэйбл эвент очень сильно тормозит систему кстати, адик что-то говорил про это.
Попробуйте затестить например простое изменение 1000 переменных и с повешенными на них событиями.
Ну с таймером офк
38

» Блог Кета Голосова / Ненормативная лексика на XGM

Потому что ваши темы абсолютно бесполезны и приносят только вред системе поиска по форуму.
38

» WarCraft 3 / Система отлова нанесённого урона

Кароче вот метод отца:
code
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)
   
    
    interface IUnitDamageEventHandler
    {
        void OnDamage(unit from, unit to, real amount)
    }
    
    private IUnitDamageEventHandler array handlerStack
    private int handlerStackCount = 0
    
    void RegisterUnitDamageEvent(IUnitDamageEventHandler handler)
    {
        handlerStack[handlerStackCount] = handler
        handlerStackCount++
    }

    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()
        {
            int i=0
            whilenot(i >= handlerStackCount) {
                handlerStack[i].OnDamage(GetEventDamageSource(),GetTriggerUnit(),GetEventDamage())
                ++i
            }
        });
    }
}
Пример:
library UnitDamageEventTest uses UnitDamageEvent
{

// простой пример
    struct myUnitDamageEventHandlerSimple extends IUnitDamageEventHandler
    {
        void OnDamage(unit from, unit to, real amount) {
            // ваш код по дамагу
        }
    }

// пример посложнее
    struct myUnitDamageEventHandler extends IUnitDamageEventHandler
    {
        int myData1
        real myData2
        
        static myUnitDamageEventHandler New(int _myData1, real _myData2) {
            thistype h = thistype.create()
            myData1 = _myData1
            myData2 = _myData2
            return h
        }
        
        void OnDamage(unit from, unit to, real amount) {
            // ваш код по дамагу
            BJDebugMsg(I2S(myData1) + " " + R2S(myData2))
        }
    }

// просто
    void somefunc1()
    {
        myUnitDamageEventHandlerSimple myHandler1 = myUnitDamageEventHandlerSimple.create()
        RegisterUnitDamageEvent(myHandler1)
    }

// посложнее
    void somefunc2()
    {
        RegisterUnitDamageEvent( myUnitDamageEventHandler.New(1, 2.0) )
        RegisterUnitDamageEvent( myUnitDamageEventHandler.New(100500, 123456.789) )
    }
}
38

» WarCraft 3 / Система отлова нанесённого урона

А зачем вообще TriggerResgister ? сделайте класс, наследуйтесь от него и передавайте системе
38

» WarCraft 3 / Система отлова нанесённого урона

Faion, в чем разница ? Тот же форгруп, тот же евент демейдж.
38

» WarCraft 3 / vJass модуль list

хотел бы добавить
If this is set to true, UnitUserData will be used.
заметим, что юнит юзердата ставится в спец. ячейку в объекте юнита, поиск производится по int, доступ прямой
A hashtable will be used instead, but it is about 60% slower.
поиск по хештейбл проводится по string, при чем хештейбла 2, доступ типа хеш-таблица
Also you can use struct data, but it is about 30% slower.
структуры == массивы, поиск по int, доступ прямой
Напрашивается ответ что нараян опять нихрена не понял.
38

» WarCraft 3 / Система отлова нанесённого урона

Bornikkeny, ты не ошибся?
Я помню, там ещё таймеры зачем-то создавались, чтобы удалить юнита из подборки D:
Да, чтобы после этого анрегать эвент, видимо, проседало фпс. Надо почитать векса.
38

» WarCraft 3 / Система отлова нанесённого урона

  1. берешь файона
  2. добавляешь его код к себе
  3. дописываешь его к авторам
  4. ??????
  5. встречаешь маму
Ну тоесть суть была в том чтобы на событие "юнит атакован" делать то же самое
это в 2004 году еще было
38

» Game Dev / Как попасть в гейм-индустрию и как там чего-то добиться

Потерять его можно точно так же, как и найти. А вот врожденные "влияния" неизменны)
38

» WarCraft 3 / Система отлова нанесённого урона

На моей слабенькой одноядерной машине даже лагов нету. Ты облажался.
Если бы все авторы мелких наработок это утверждали =)))
38

» WarCraft 3 / Система отлова нанесённого урона

Ясно, лол.
Я никогда не работал с отловом урона и почему-то запомнилось как будто этой функции там не было, наверное из этой темы xgm.ru/forum/showthread.php?t=19398.
38

» WarCraft 3 / Система отлова нанесённого урона

Это не то, я думал это та система в которой можно будет узнать, кто атаковал, а это просто штука которая регает "юнит получил урон" на всех юнитов на карте.
Переименовал, а то подумают именно первое.