TriggerEvalute наследует поток из которого запущен, а так же проверяет условие триггера, возвращая результат.
Мб. так было проще передавать аргумент. т.к триггер и поток из которого мы запустили триггер один, т.е работают GetTriggUnit\GetExpiredTimer и так далее.
ScopteRectuS, нет. Явного ограничения нету, но все упирается в память.
Миллионы триггеров ненормально! У вас что то нетак, подумайте над этим на досуге.
Дело именно в количестве триггеров а не в их начинки и назначении, создавать триггеры динамически по мере надобности в гуях нельзя, так что переходите на jass.
GRESHNIK1, все ваши красивые гуи - переводятся в jass интерпретатором в момент сохранения карты, все триггеры - это такие обьекты, как к примеру юниты которых вы видите, триггеры нужно сначала создать, потом добавить в них события и дейсвия, а их овер дофига.
Для инициализации гуи триггеров используется отдельная функция InitCustomTriggers( ), в нее записываются все триггеры которые нужно создать, перед стартом игры, в момент когда загрузка почти завершилась. В jass есть лимит операций, когда в одной функции очень много действий, которые превышают этот лимит, функция считается зависшей, и движок перестает её выполнять. Вот почему триггеры перестали работать - да их просто не создали.
Потом вопрос зачем вам столько триггеров?
Есть лимит операций, а так же кривое гуи.
Вы превысили лимит операций напихав 100500 триггеров которые, функция инициализации которых уходит в обрыв потока, т.к превышает лимит операций потока.
Выход, подумывать о переходе на jass или более правильно использовать триггеры, не создавая овер 100500 штук.
Darknessay, Канал не чанеллистя в предметах и точка, это могут лишь некоторые абилки.
Пробуй юзнуть Звездопад (Starfall ), Вейты не юзай, иначе ничего работать не будет никогда!
Способность это не обязательно кнопка на карте команд, 100500 способностей не имеют кнопки на карте команд, если вам так хочется это исправить - делайте пустышку с иконкой из любой другой способности, у которой есть такой параметр. Т.к у каждой способности в игре описаны все взаимодействия, включая кнопку на карте комманд, тип цели и прочее, а еще писалось это разными людьми и в разное время - универсального способа нет!
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
Nelloy, делай для всех предметов ранзый Id, проблема то. Система бонус атрибутов была на сайте, делать разные бонусы изи, невижу проблемы.
Предметы это тупо кнопка в инвентаре и 4 абилки, это можно эмитировать триггерно. Как и все параметры, да и вовсе что за халтура наплодить 100500 одинаковых предметов с разными параметрами, не играл бы в такую карту сразу, ибо халтура...
Материальное заклинание - на него срабатывает амулет защиты, оно наносит 0. ед урона, т.е агрит нейтралов, кароче эмитирует реальное заклинание, не дает применять в маг имунных.
Универсальное заклинание - заклинание которое можно применять на маг имунных, неуязвимых союзников. Кароче заклинание которое может быть и полезным и вредным.
Только ручное применение - неизвестно, я так и не нашел инфы по этому.
Насколько помню есть готовая функция которая добавляет в предмет А списко способностей предмета Б, включая его иконку и описание.
Да и вовсе зачем предметам менять способности? Когда можно просто вручать юниту абилки без мемхака.
KPOKODIL, и что это дает? Апгрейд глобальная абилка, только движок видит юнита у игрока с этой абилкой, как сразу же вручает этому юниту бонусы.
Менять владельца бестолку, ну если только это не союзник с общим контролем, что муторно, неудобно.
Тип брони 1 раз, менают апгрейдом. Если нужно менять 100500 раз, то делают либо морф юнита, либо мемхаком меняют эти данные.
Ну ошибки в коде, там какая то переменная, её заменить на 1 как на скрине.
w3m потому что в ней нет объектов из дополнения. Свою карту приложить смотрю жалко - вдруг сопрут...
Ну а в чем проблемы? Событие юнит покидает область. EVENT_GAME_LEAVE_REGION.
Ну в координаты цетра сместить юнита, ну или можно выпендрится и сделать x\y юнита меньше максимума x\y области, или больше минимума...
Тогда юнит будет скользить по краю области, не пересекая край.
JNGP > копируем, сохраняем дважды карту, запускаем. Профит?
Что не так? Мб ошибки в коде? Без карты что у вас не так, сказать нельзя - экстрасенсов на XGM не осталось...
» WarCraft 3 / как сделать так что бы при приближении к юниту он поменял владел
» WarCraft 3 / Строение структур
» WarCraft 3 / Строение структур
Мб. так было проще передавать аргумент. т.к триггер и поток из которого мы запустили триггер один, т.е работают GetTriggUnit\GetExpiredTimer и так далее.
» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?
Миллионы триггеров ненормально! У вас что то нетак, подумайте над этим на досуге.
» WarCraft 3 / Поиск именных структур
» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?
» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?
Для инициализации гуи триггеров используется отдельная функция InitCustomTriggers( ), в нее записываются все триггеры которые нужно создать, перед стартом игры, в момент когда загрузка почти завершилась. В jass есть лимит операций, когда в одной функции очень много действий, которые превышают этот лимит, функция считается зависшей, и движок перестает её выполнять. Вот почему триггеры перестали работать - да их просто не создали.
Потом вопрос зачем вам столько триггеров?
» WarCraft 3 / Есть ли ограничение по числу триггеров, областей или переменных?
Вы превысили лимит операций напихав 100500 триггеров которые, функция инициализации которых уходит в обрыв потока, т.к превышает лимит операций потока.
Выход, подумывать о переходе на jass или более правильно использовать триггеры, не создавая овер 100500 штук.
» WarCraft 3 / Как сделать свиток телепорта из доты?
Пробуй юзнуть Звездопад (Starfall ), Вейты не юзай, иначе ничего работать не будет никогда!
» WarCraft 3 / как зафиксировать время суток в редакторе варкрафта 3
» WarCraft 3 / Иконки способностей для предметов
Т.к у каждой способности в игре описаны все взаимодействия, включая кнопку на карте комманд, тип цели и прочее, а еще писалось это разными людьми и в разное время - универсального способа нет!
Ред. quq_CCCP
» WarCraft 3 / Как сделать свиток телепорта из доты?
Все вейты нафиг удаляем, это никогда не будет работать...
Необходимо отловить начало каста, потом следить сбили ли каст и найти ближайшее здание возле точки телепорта, если время вышло и юниту не сбили телепорт, переместить юнита в ближашую точку возде здания, иначе ничего не делать...
» WarCraft 3 / Предметы(memhach)
» WarCraft 3 / Предметы(memhach)
Предметы это тупо кнопка в инвентаре и 4 абилки, это можно эмитировать триггерно. Как и все параметры, да и вовсе что за халтура наплодить 100500 одинаковых предметов с разными параметрами, не играл бы в такую карту сразу, ибо халтура...
» WarCraft 3 / Настройка Канала
Универсальное заклинание - заклинание которое можно применять на маг имунных, неуязвимых союзников. Кароче заклинание которое может быть и полезным и вредным.
Только ручное применение - неизвестно, я так и не нашел инфы по этому.
» WarCraft 3 / Предметы(memhach)
Да и вовсе зачем предметам менять способности? Когда можно просто вручать юниту абилки без мемхака.
» WarCraft 3 / Замена типа брони
Менять владельца бестолку, ну если только это не союзник с общим контролем, что муторно, неудобно.
Тип брони 1 раз, менают апгрейдом. Если нужно менять 100500 раз, то делают либо морф юнита, либо мемхаком меняют эти данные.
» WarCraft 3 / Замена типа брони
» WarCraft 3 / Замена типа брони
» WarCraft 3 / Как подключить MMD?
» WarCraft 3 / Как подключить MMD?
w3m потому что в ней нет объектов из дополнения.
Свою карту приложить смотрю жалко - вдруг сопрут...
» WarCraft 3 / Возвращение назад
Ну в координаты цетра сместить юнита, ну или можно выпендрится и сделать x\y юнита меньше максимума x\y области, или больше минимума...
Тогда юнит будет скользить по краю области, не пересекая край.
» WarCraft 3 / Как подключить MMD?
Что не так? Мб ошибки в коде? Без карты что у вас не так, сказать нельзя - экстрасенсов на XGM не осталось...
» WarCraft 3 / Возвращение назад
» WarCraft 3 / Канал в предмете не channelится?