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 / Система отлова нанесённого урона

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

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

И? Я об этом и говорю. То есть если ты изначально не интересуешься политикой/управлением at all, то очень велики шансы, что тебе это будет не интересно в будущем.
38

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

не понял, ты вообще сам то пробовал ? юниты они двигаются по карте если что
38

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

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

» WarCraft 3 / 3DS MAX .DAE to MDL? Встречайте: xlDataConverter (alpha)

Надеюсь, да. Мы это поправим позже.
Сначала про куб посмотрю.
Суть в том, что вар будет фейлиться на таком кол-ве вершин, если не при 1, то при нескольких моделях точно.
Насчет ограничения - начали писать в 2009 году, тогда еще все делали лоуполи модели, как Кет сейчас (не в обиду) и это считалось нормальным, а дальше уже разросся по всей программе этот короткий тип данных ) пофиксить можно за час-два.