14

» WarCraft 3 / Библиотека функций

Clamp, мой метод ничуть не хуже.
  1. При желании с малыми времезатратами его можно перевести на хеш-таблицы.
Есть одна проблема, которую мне решать лень и я просто не знаю, как её решить в самой системе: при создании нового юнита сработает каждый триггер с событием на урон.
TriggerAddCondition()
А у меня эта проблема не возникает.
  1. Выход за пределы зоны карты у тебя приведёт к повторному добавлению события.
  2. Зачем тебе глобалка региона?
  3. При необходимости мой ивент сильно упрощается.
В общем у нас примерно то же самое.
Hares добавил:
Clamp:
Clamp добавил:
quq_CCCP
Ты кинул НЕ функцию. Это триггер.
В триггере использована единственная нативка.
Это тупой конверт из гуи.
Согласен.
Hares добавил:
Clamp:
quq_CCCP, удали ЭТО и не позорься
Всеми руками за.
14

» WarCraft 3 / Библиотека функций

Doc:
Датышо, а bool это стандартный тип?
В смысле? bool = boolean - стандартный тип.
Doc:
Hares, я о globals, loop и array
А мне так нравится. Если быть точным, то просто хочю оставлять джазз джаззом.
14

» WarCraft 3 / Библиотека функций

goldplay99:
Что за ужасная смесь жасса и сжасса? И где инклюды?
Ты это о чём? какая ещё смесь? В чём это выражено? Если ты о типе real вместо си-шного float или double, то просто real проще звучит и его быстрее писать. А инклуды не использую за ненадобностью.
goldplay99:
И как я ранее говорил, можно было и без массива групп.
Нельзя. Т.к. проверки на наличие события нет, а нам эту проверку осуществлять надо: собыите может быть прикреплено и в середине игры, тогда разные триггеры будут иметь разные события. Для избежания сего мы создаём массив групп потриггерно. Угу? (В идеале правда надо было на уничтожение триггера-владельца уничтожать и эти группы, но я не знаю как.)
14

» WarCraft 3 / Библиотека функций

Generic Unit Event - Юнит получает урон
Сам код.
Если в карте этого нет, то добавьте:
define
{
    bool = boolean;
    void = nothing;
    int = integer;
}
Непосредственно:
globals
    trigger array Owners;
    int OwnerBounty = 0;
    group array RegistredUnits;
endglobals

bool UnitTakesDamage_Filter()
{
    unit u = GetFilterUnit();
    if (u == null)
        {u = GetEnumUnit()}
    int i = 0;
    
    loop
    {
        exitwhen i >= OwnerBounty
        
        if !(IsUnitInGroup(u, RegistredUnits[i]))
        {
            TriggerRegisterUnitEvent(Owners[i], u, EVENT_UNIT_DAMAGED);
            GroupAddUnit(RegistredUnits[i], u);
        }
        i++;
    }
    
    u = null; return false;
}

event TriggerAddEventUnitTakesDamage(trigger Owner)
{
    if (OwnerBounty == 0)
    {
        trigger t = CreateTrigger();
        region r = CreateRegion();
        
        RegionAddRect(r, bj_mapInitialCameraBounds);
        TriggerRegisterEnterRegion(t, r, function UnitTakesDamage_Filter);
        
        t = null; r = null;
    }
    
    RegistredUnits[OwnerBounty] = CreateGroup();
    Owners[OwnerBounty] = Owner;
    OwnerBounty++;
    
    group g = CreateGroup();
    GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, null);
    ForGroup(g, function UnitTakesDamage_Filter);
    DestroyGroup(g);
    
    g = null; return null;
}
Применение:
    call TriggerAddEventUnitTakesDamage(TRIGGER)
    //где TRIGGER - имя нашего триггера, к которому аттачиться событие
Автор ф-ии - я.
Огромное спасибо за помощь пользователю MyRtZ за те баталии по поводу кода и самому принципу работы ф-ии. Именно он и предложил принцип действия через событие "юнит входит в область ("вся карта")", я пытался делать всё таймером на 0,01 сек. Получилось быстрее, оптимизация сделана.
Внимание!
Ф-ия создаёт побочный триггер и 3 глобалки.
14

» WarCraft 3 / Библиотека функций

Народ, нужнаСделана функция, игнорируящая дамаг для юнита. Я её сделал, однако она работает корректно только в двух ситуациях из 3: Теперь работает для всех случаев, но для одного из них - слегка коряво (но исправно).
  1. Урон + ХП < макс. ХП.
  2. Урон + ХП > макс. ХП и юнит не умрёт.
  3. Урон + ХП > макс. ХП и юнит умрёт - не получилось сделать правильно.
Вот ф-ия:
define AbilAddHp = 'AInc'; //Ф-ия, добавляющая 1 000 000 к ХП. При необходимости увеличить, однако при этом может процентно уменьшать его.

globals
    group AlreadyIgnoring = null;
endglobals

void IgnoreDamage()
{
    if (AlreadyIgnoring == null)
        {AlreadyIgnoring = CreateGroup()}
    
    unit u = GetTriggerUnit();
    if IsUnitInGroup(u, AlreadyIgnoring)
        {return}
    GroupAddUnit(AlreadyIgnoring, u);
    
    real Life = GetUnitState(u, UNIT_STATE_LIFE);
    real Damage = GetEventDamage();
    real MaxLife = GetUnitState(u, UNIT_STATE_MAX_LIFE);
    
    if (Life + Damage > MaxLife)
    {
        if Life - Damage < 0.405
        {
            UnitAddAbility(u, AbilAddHp);
            
            TriggerSleepAction(0.001);
            
            UnitRemoveAbility(u, AbilAddHp);
            SetUnitState(u, UNIT_STATE_LIFE, Life);
        }
        else
        {
            TriggerSleepAction(0.001);
            SetUnitState(u, UNIT_STATE_LIFE, Life);
        }
    }
    else
    {
        Life += Damage;
        SetUnitState(u, UNIT_STATE_LIFE, Life);
    }
    GroupRemoveUnit(AlreadyIgnoring, u);
    u = null;
}
Поясню суть проблемы:
В случае 1 (в ф-ии он последний) всё просто: мы добавляем к хп юнита урон, и урон это самое хп снимает. Но если таким образом у юнита хп станет выше максимального, то он получит урон. Откуда вытекают случаи 2 и 3 (2 и 1 соответственно): от этого урона юнит не умрёт или умрёт. С первым случаем всё ясно - ждём мгновение и повышаем хп. Однако на практике выяснено, что повышением хп юнит не оживить (а функцию воскрешения я не нашёл). Тогда надо обнулить урон. Но как это сделать? Опять же, в голове 3 варианта:
  1. Добавить неуязвимость (в моей ф-ии так и сделано, но это ради удобства). При этом сбиваются все многие приказы, направленные на данного юнита. Да ещё и надпись "Неуязвимый" в глазах рябит.
  2. Добавить модифицированную Каменную Кожу (Горного Великана), полностью убирающую урон. Недостаток: иконка (неактивный спеллбук нам в помощь) и игнорирование всего урона, полученного в небольшой промежуток времени.
  3. Добавить атаковавшему модифицированную версию Разгрома (Тинкер), полностью убирающую его урон. Недостатки: иконка, обнуление всего урона, нанесённого в небольшой промежуток времени, и обнуление урона сплеш (АоЕ) атак.
  4. (новое) модифицировать его хп =).
Нужно, чтобы ф-ия действовалаует локально и ничему не мешалает. К примеру, каждая 3-я атака по юниту игнорируется.
P.S.
Делал ф-ию на таймерах вместо слипов, но почему-то не реботает.
P.P.S.
Ф-ия ещё не прошла все необходимые тесты.
14

» StarCraft 2 / Starcraft II: Rebel Yell

Кстати, а в СК был ведь пеший Рейнор. Модно и его озвучку впихать.
14

» StarCraft 2 / Starcraft II: Rebel Yell

GadenbIsh, разодбудь перевод от Фаргуса. У них всё по-русски, причём проффесионально. (Единственное что, так это перевод некоторых "терминологий" не сошёлся с локализованным, например executor - палач у Фаргуса и Вершитель у 1с (они вроде делали), а ещё Феникс кричит "Фаргус зе бест, Билл Гейтс маст дай!")
GadenbIsh, И кстати, почему Рейнора нельзя было посадить в "Стервяника"?
14

» WarCraft 3 / Этап II: костное анимирование

А почему при повороте 4 аргумента? 3 последних я понял: поворот по 3 координатам, но 1 - ?
14

» WarCraft 3 / GetLocalPlayer()

Не губите внешний вид комментов
local integer i = 0
local integer a = 255
local unit u = CreateUnit(GetOwningPlayer(GetSpellAbilityUnit()), x, y, angle)

if not(GetLocalPlayer() == GetOwningPlayer(GetSpellTargetUnit())) then
	set a = 0
	set i = 'Aloc'
endif
call UnitAddAbility(u,i)
call UnitAddAbility(u,l)
call SetUnitVertexColor(u, 255, 255, 255, a)

call TriigerSleepAction(time)

call RemoveUnit(u)
set u = null
Поясню:
Мне нужно сделать юнита невидимым, невыбераемым и неатакумым для всех игроков, кроме владельца цели заклинания.
А ещё мне нужно, чтоб цель заклинания могла бить врагов-галлюцинаций. (а другие на ето спокойно(!) смотрели)
Будет работать, а?
сори, невыбИраемым
14

» Way of Others / Кампания Морлоков

GadenbIsh, part3, файл повреждён. скачал 2 раза.
вар открывается, даже работает, но мод не пашет.
14

» Way of Others / Way of Others

part3, файл повреждён. скачал 2 раза.
вар открывается, даже работает, но мод не пашет.
14

» WarCraft 3 / Церковь Света

кул, но по поводу алтаря: ОН ВСЁ РАВНО ЗА СТЕНКОЙ! (а главный вход должен быть на восток)
14

» WarCraft 3 / Женщина - маг Кровавых Эльфов

по-моему, первая версия (давноооо... качал) лучше была. Посох мне не нравится как-то.
14

» StarCraft 2 / Смягчение ограничений пользовательских карт

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

» WarCraft 3 / Эльдар-Страж

Наконец-то и эльдары! /[а то космо-ВДВ и имперцы уже в горлн стоят =)]/
14

» WarCraft 3 / Динамическая смена текстуры

а зачем тогда линейки альтернэйт, деффэнд, фёрст, ("зю" наконец) и другие? Так мона создавать и несколько нест. тексутр: Фёрст деффенд аттак
Также существует и редактор анимации текстур - на что он?
14

» StarCraft 2 / 1.10 Требования

в процессе или лучше - вроде бы мозершип (а в кампинии доп. условие на него сделано: отсутствие Артаниса)
нет, вру, там в очереди или лучше.
Такой вопрос: а где писать (ручками на клаве) требованаие на вполне понятном игроку русском языке. Вроде бы это должно описываться в условиях дерева, но в статье об этом ни слова
14

» StarCraft 2 / Желтый сталкер

а текстуру на основе чего рисовал? иль фотошоп вам в помощь?
и есть ли рабочий конвертер (сохраняющий анимацию, желательно) M3 <-> MDX
14

» SC2 Учебник / 5.13 Редактор рас

Следует учитывать: еда тоже ресурс. Её мона и не отображать (я такое в одной карте видел, там вместо неё был терразин))
14

» WarCraft 3 / Modern Warfare Vehicles Pack

А почему они так сильно качаются? (Мне-то ладно, я ВИЗом работать умею =) )