32

» WarCraft 3 / Строение структур

Триггеры принимают болекспры - для этого Condition, не соответствие типов при возврате == фатал.
32

» WarCraft 3 / Строение структур

Принятый ответ
TriggerEvalute наследует поток из которого запущен, а так же проверяет условие триггера, возвращая результат.
Мб. так было проще передавать аргумент. т.к триггер и поток из которого мы запустили триггер один, т.е работают GetTriggUnit\GetExpiredTimer и так далее.
32

» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?

ScopteRectuS, нет. Явного ограничения нету, но все упирается в память.
Миллионы триггеров ненормально! У вас что то нетак, подумайте над этим на досуге.
32

» WarCraft 3 / Поиск именных структур

Мемхак в помощь, там у стандартных баффов можно узнать какие они, задать уровень, время и так далее...
32

» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?

Принятый ответ
Дело именно в количестве триггеров а не в их начинки и назначении, создавать триггеры динамически по мере надобности в гуях нельзя, так что переходите на jass.
32

» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?

GRESHNIK1, все ваши красивые гуи - переводятся в jass интерпретатором в момент сохранения карты, все триггеры - это такие обьекты, как к примеру юниты которых вы видите, триггеры нужно сначала создать, потом добавить в них события и дейсвия, а их овер дофига.
Для инициализации гуи триггеров используется отдельная функция InitCustomTriggers( ), в нее записываются все триггеры которые нужно создать, перед стартом игры, в момент когда загрузка почти завершилась. В jass есть лимит операций, когда в одной функции очень много действий, которые превышают этот лимит, функция считается зависшей, и движок перестает её выполнять. Вот почему триггеры перестали работать - да их просто не создали.
Потом вопрос зачем вам столько триггеров?
32

» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?

Есть лимит операций, а так же кривое гуи.
Вы превысили лимит операций напихав 100500 триггеров которые, функция инициализации которых уходит в обрыв потока, т.к превышает лимит операций потока.
Выход, подумывать о переходе на jass или более правильно использовать триггеры, не создавая овер 100500 штук.
32

» WarCraft 3 / Как сделать свиток телепорта из доты?

Darknessay, Канал не чанеллистя в предметах и точка, это могут лишь некоторые абилки.
Пробуй юзнуть Звездопад (Starfall ), Вейты не юзай, иначе ничего работать не будет никогда!
32

» WarCraft 3 / Иконки способностей для предметов

Способность это не обязательно кнопка на карте команд, 100500 способностей не имеют кнопки на карте команд, если вам так хочется это исправить - делайте пустышку с иконкой из любой другой способности, у которой есть такой параметр.
Т.к у каждой способности в игре описаны все взаимодействия, включая кнопку на карте комманд, тип цели и прочее, а еще писалось это разными людьми и в разное время - универсального способа нет!
32

» WarCraft 3 / Как сделать свиток телепорта из доты?

Darknessay, оно и неудивительно. Где триггер с событием юнит завершает применение способности, юнит начинает применять способность, триггер время истекло.
Все вейты нафиг удаляем, это никогда не будет работать...
Необходимо отловить начало каста, потом следить сбили ли каст и найти ближайшее здание возле точки телепорта, если время вышло и юниту не сбили телепорт, переместить юнита в ближашую точку возде здания, иначе ничего не делать...
код свитка из доты
//Calls:
//    M7I
//    Q3I
//Functions as argument:
//    ZWO
function ZXO takes nothing returns boolean
    local trigger t = GetTriggeringTrigger()
    local integer MDI = GetHandleId(t)
    local unit MJI = LoadUnitHandle(XY, MDI, 14)
    local unit TFI = LoadUnitHandle(XY, MDI, 17)
    local real x = LoadReal(XY, MDI, 6)
    local real y = LoadReal(XY, MDI, 7)
    local unit ZHO = LoadUnitHandle(XY, MDI, 448)
    local unit ZZO = LoadUnitHandle(XY, MDI, 447)
    local ubersplat O11 = LoadUbersplatHandle(XY, MDI, 131)
    local integer M4I = LoadInteger(XY, MDI, 34)
    local real BH1 = LoadReal(XY, MDI, 57)
    local real EJ1 = LoadReal(XY, MDI, 442)
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local boolean ZVO = false
    local integer i = 0
    local integer CS1

    if GetTriggerEventId() == EVENT_UNIT_SPELL_ENDCAST then
        if GetSpellAbilityId() == 'A231' then
            call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
            call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
            call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
            call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
            call KillUnit(ZHO)
            call KillUnit(ZZO)
            call DestroyUbersplat(O11)
            call FlushChildHashtable(XY, MDI)
            call M7I(t)
            call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        endif
    elseif GetTriggerEventId() == EVENT_UNIT_DEATH then
        call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
        call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
        call KillUnit(ZHO)
        call KillUnit(ZZO)
        call DestroyUbersplat(O11)
        call FlushChildHashtable(XY, MDI)
        call M7I(t)
    else
        call DestroyEffect(LoadEffectHandle(XY, MDI, 175))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 176))
        call DestroyEffect(LoadEffectHandle(XY, MDI, 177))
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", GetUnitX(MJI), GetUnitY(MJI)))
        call SaveInteger(XY, GetHandleId(MJI), 4256, 2)
        call KillUnit(ZHO)
        call KillUnit(ZZO)
        call DestroyUbersplat(O11)
        call FlushChildHashtable(XY, MDI)
        call M7I(t)
        call UnitRemoveType(TFI, UNIT_TYPE_PEON)
        call Q3I(GetUnitX(TFI) - 1, GetUnitY(TFI) - 1, 240)
        call SetUnitX(MJI, GetUnitX(TFI) - 1)
        call SetUnitY(MJI, GetUnitY(TFI) - 1)
        call PauseUnit(MJI, true)
        call PauseUnit(MJI, false)
        set CK = MJI
        call ExecuteFunc("ZWO")
        call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTarget.mdl", GetUnitX(MJI), GetUnitY(MJI)))
    endif
    set t = null
    set MJI = null
    set ZHO = null
    set ZZO = null
    set O11 = null
    set TFI = null
    return false
endfunction

//Calls:
//    N7I
//    ZAO
//    PII
//    R1I
//    R5I
//    Z5O
//    Z6O
//    Z4O
//    Z3O
//    QAI
//    I51
//Functions as argument:
//    ZGO
function ZYO takes nothing returns nothing
    local unit MJI = GetTriggerUnit()
    local unit TFI = GetSpellTargetUnit()
    local location l
    local real x
    local real y
    local real a
    local trigger t
    local integer MDI
    local unit ZHO
    local unit ZZO
    local ubersplat O11
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local integer M4I
    local real ZJO

    set t = CreateTrigger()
    set MDI = GetHandleId(t)
    call SaveInteger(XY, GetHandleId(MJI), 4256, 1)
    if TFI == null then
        set l = GetSpellTargetLoc()
        set x = GetLocationX(l)
        set y = GetLocationY(l)
        if x == LU0[id] and y == M00[id] then
            if N7I(GetOwningPlayer(MJI)) then
                set x = GetUnitX(LQ)
                set y = GetUnitY(LQ)
            else
                set x = GetUnitX(BF0)
                set y = GetUnitY(BF0)
            endif
        endif
        set TFI = ZAO(MJI, x, y)
        call RemoveLocation(l)
    else
        set x = GetUnitX(TFI)
        set y = GetUnitY(TFI)
    endif
    if PII(x, y, GetUnitX(TFI), GetUnitY(TFI)) > M50 then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + M50 * Cos(a)
        set y = GetUnitY(TFI) + M50 * Sin(a)
    elseif PII(x, y, GetUnitX(TFI), GetUnitY(TFI)) < 50 then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + 120 * Cos(a)
        set y = GetUnitY(TFI) + 120 * Sin(a)
    endif
    if IsPointInRegion(XN, x, y) == true then
        set a = Atan2(y - GetUnitY(TFI), x - GetUnitX(TFI))
        set x = GetUnitX(TFI) + 200 * Cos(a)
        set y = GetUnitY(TFI) + 200 * Sin(a)
    endif
    set x = R1I(x)
    set y = R5I(y)
    if (IsUnitAlly(MJI, GetLocalPlayer()) and GetLocalPlayer() != GetOwningPlayer(MJI)) or (C2 and (GetLocalPlayer() == D10 or GetLocalPlayer() == DO0)) then
        call PingMinimapEx(x, y, 3, 255, 255, 255, false)
    endif
    set ZZO = CreateUnit(GetOwningPlayer(MJI), Z5O(id), x, y, 0)
    set ZHO = CreateUnit(GetOwningPlayer(MJI), Z6O(id), GetUnitX(MJI), GetUnitY(MJI), 0)
    set O11 = CreateUbersplat(GetUnitX(MJI), GetUnitY(MJI), "SCTP", 255, 255, 255, 255, false, false)
    if IsUnitVisible(MJI, GetLocalPlayer()) == true then
        call SetUbersplatRenderAlways(O11, true)
    else
        call SetUbersplatRenderAlways(O11, false)
    endif
    set M4I = Z4O(GetPlayerId(GetOwningPlayer(MJI)), x, y)
    set ZJO = 3
    if M4I > 0 then
        set ZJO = 4.5 + 0.5 * M4I
    endif
    call Z3O(GetPlayerId(GetOwningPlayer(MJI)), x, y)
    if M4I > 0 then
        call SetUnitAnimationByIndex(ZHO, 2)
        call SetUnitAnimationByIndex(ZZO, 2)
    endif
    call TriggerRegisterTimerEvent(t, ZJO - 3, false)
    call TriggerRegisterTimerEvent(t, ZJO, false)
    call TriggerRegisterUnitEvent(t, MJI, EVENT_UNIT_SPELL_ENDCAST)
    call TriggerAddCondition(t, Condition(function ZGO))
    call QAI(GetOwningPlayer(MJI), ZJO, x, y, 200)
    call SaveUnitHandle(XY, MDI, 447, ZZO)
    call SaveUnitHandle(XY, MDI, 448, ZHO)
    call SaveReal(XY, MDI, 6, (x * 1.0))
    call SaveReal(XY, MDI, 7, (y * 1.0))
    call SaveReal(XY, MDI, 442, (TimerGetElapsed(M) * 1.0))
    call SaveReal(XY, MDI, 57, (ZJO * 1.0))
    call SaveUbersplatHandle(XY, MDI, 131, O11)
    call SaveUnitHandle(XY, MDI, 14, MJI)
    call SaveInteger(XY, MDI, 34, 0)
    call I51(MJI, XF, x, y, 2400)
    set MJI = null
    set TFI = null
    set ZHO = null
    set ZZO = null
    set l = null
    set t = null
    set O11 = null
endfunction

//Calls:
//    N7I
//    ZFO
//    QAI
//    I51
//Functions as argument:
//    ZXO
function ZKO takes nothing returns nothing
    local unit MJI = GetTriggerUnit()
    local unit TFI = GetSpellTargetUnit()
    local location l
    local real x
    local real y
    local real a
    local trigger t
    local integer MDI
    local unit ZHO
    local unit ZZO
    local ubersplat O11
    local integer id = GetPlayerId(GetOwningPlayer(MJI))
    local integer M4I
    local real ZJO

    set t = CreateTrigger()
    set MDI = GetHandleId(t)
    if TFI == null then
        set l = GetSpellTargetLoc()
        set x = GetLocationX(l)
        set y = GetLocationY(l)
        if x == LU0[id] and y == M00[id] then
            if N7I(GetOwningPlayer(MJI)) then
                set x = GetUnitX(LQ)
                set y = GetUnitY(LQ)
            else
                set x = GetUnitX(BF0)
                set y = GetUnitY(BF0)
            endif
        endif
        set TFI = ZFO(MJI, x, y)
        call RemoveLocation(l)
    endif
    call SaveInteger(XY, GetHandleId(MJI), 4256, 1)
    set x = GetUnitX(TFI)
    set y = GetUnitY(TFI)
    if (IsUnitAlly(MJI, GetLocalPlayer()) and GetLocalPlayer() != GetOwningPlayer(MJI)) or (C2 and (GetLocalPlayer() == D10 or GetLocalPlayer() == DO0)) then
        call PingMinimapEx(x, y, 3, 255, 255, 255, false)
    endif
    set O11 = CreateUbersplat(GetUnitX(MJI), GetUnitY(MJI), "SCTP", 255, 255, 255, 255, false, false)
    if IsUnitVisible(MJI, GetLocalPlayer()) == true then
        call SetUbersplatRenderAlways(O11, true)
    else
        call SetUbersplatRenderAlways(O11, false)
    endif
    set ZJO = 3
    call UnitAddType(TFI, UNIT_TYPE_PEON)
    call TriggerRegisterTimerEvent(t, ZJO, false)
    call TriggerRegisterUnitEvent(t, MJI, EVENT_UNIT_SPELL_ENDCAST)
    call TriggerRegisterUnitEvent(t, TFI, EVENT_UNIT_DEATH)
    call TriggerAddCondition(t, Condition(function ZXO))
    call QAI(GetOwningPlayer(MJI), ZJO, x, y, 200)
    call SaveReal(XY, MDI, 6, (x * 1.0))
    call SaveReal(XY, MDI, 7, (y * 1.0))
    call SaveReal(XY, MDI, 442, (TimerGetElapsed(M) * 1.0))
    call SaveReal(XY, MDI, 57, (ZJO * 1.0))
    call SaveUbersplatHandle(XY, MDI, 131, O11)
    call SaveUnitHandle(XY, MDI, 14, MJI)
    call SaveUnitHandle(XY, MDI, 17, TFI)
    call SaveInteger(XY, MDI, 34, 0)
    call SaveEffectHandle(XY, MDI, 175, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTo.mdl", MJI, "origin"))
    call SaveEffectHandle(XY, MDI, 176, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportCaster.mdl", MJI, "origin"))
    call SaveEffectHandle(XY, MDI, 177, AddSpecialEffectTarget("Abilities\\Spells\\Human\\MassTeleport\\MassTeleportTo.mdl", TFI, "origin"))
    call I51(MJI, XF, x, y, 2400)
    set MJI = null
    set TFI = null
    set ZHO = null
    set ZZO = null
    set l = null
    set t = null
    set O11 = null
endfunction

//Calls:
//    STI
//    ZYO
//    ZKO
function ZLO takes nothing returns nothing
    if GetSpellAbilityId() == 'A1R5' and STI(GetTriggerUnit()) == false then
        call ZYO()
    endif
    if GetSpellAbilityId() == 'A231' then
        call ZKO()
    endif
endfunction
А вот сам спелл.
Загруженные файлы
32

» WarCraft 3 / Предметы(memhach)

Nelloy, делай для всех предметов ранзый Id, проблема то. Система бонус атрибутов была на сайте, делать разные бонусы изи, невижу проблемы.
Предметы это тупо кнопка в инвентаре и 4 абилки, это можно эмитировать триггерно. Как и все параметры, да и вовсе что за халтура наплодить 100500 одинаковых предметов с разными параметрами, не играл бы в такую карту сразу, ибо халтура...
32

» WarCraft 3 / Настройка Канала

Материальное заклинание - на него срабатывает амулет защиты, оно наносит 0. ед урона, т.е агрит нейтралов, кароче эмитирует реальное заклинание, не дает применять в маг имунных.
Универсальное заклинание - заклинание которое можно применять на маг имунных, неуязвимых союзников. Кароче заклинание которое может быть и полезным и вредным.
Только ручное применение - неизвестно, я так и не нашел инфы по этому.
32

» WarCraft 3 / Предметы(memhach)

Насколько помню есть готовая функция которая добавляет в предмет А списко способностей предмета Б, включая его иконку и описание.
Да и вовсе зачем предметам менять способности? Когда можно просто вручать юниту абилки без мемхака.
32

» WarCraft 3 / Замена типа брони

KPOKODIL, и что это дает? Апгрейд глобальная абилка, только движок видит юнита у игрока с этой абилкой, как сразу же вручает этому юниту бонусы.
Менять владельца бестолку, ну если только это не союзник с общим контролем, что муторно, неудобно.
Тип брони 1 раз, менают апгрейдом. Если нужно менять 100500 раз, то делают либо морф юнита, либо мемхаком меняют эти данные.
32

» WarCraft 3 / Замена типа брони

KPOKODIL, с чего апгрейды слетают? Это такие абилки которые вручаются юниту...
32

» WarCraft 3 / Замена типа брони

Принятый ответ
Смотри апгрейд орков - фортификация, апгрейды нельзя откатить, еще есть морфы и мемхак, но вам пока рановато...
32

» WarCraft 3 / Как подключить MMD?

Принятый ответ
Kirill78, при сохранении 1 переменная не установлена, там должна быть 1.
32

» WarCraft 3 / Как подключить MMD?

Ну ошибки в коде, там какая то переменная, её заменить на 1 как на скрине.
w3m потому что в ней нет объектов из дополнения.
Свою карту приложить смотрю жалко - вдруг сопрут...
Загруженные файлы
32

» WarCraft 3 / Возвращение назад

Ну а в чем проблемы? Событие юнит покидает область. EVENT_GAME_LEAVE_REGION.
Ну в координаты цетра сместить юнита, ну или можно выпендрится и сделать x\y юнита меньше максимума x\y области, или больше минимума...
Тогда юнит будет скользить по краю области, не пересекая край.
32

» WarCraft 3 / Как подключить MMD?

JNGP > копируем, сохраняем дважды карту, запускаем. Профит?
Что не так? Мб ошибки в коде? Без карты что у вас не так, сказать нельзя - экстрасенсов на XGM не осталось...
32

» WarCraft 3 / Возвращение назад

Дак что нужно сделать? Чтобы юнит появлялся в области или не мог сам выйти из области?
32

» WarCraft 3 / Канал в предмете не channelится?

Принятый ответ
Разумеется не чаннелится, практически все не чаннелится.