PT153, это как пример я дал просто
а так что триггеры что группы и тд гонят при инициализации карты
я вот фишку нашел одну хз баг это и ли нет
но вот 2 примера
Пример 1 он показывает что создано 2080 хенодлов это с учетом зданий декоров и тд_______________________________________________________________
void add_struct(){
group g = CreateGroup();
region r = CreateRegion();
trigger t = CreateTrigger();
trigger t2 = CreateTrigger()
DestroyTimer(GetExpiredTimer());
GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, function ActionsFunc);
DestroyGroup(g); g = null;
RegionAddRect(r, bj_mapInitialPlayableArea);
TriggerRegisterEnterRegion(t, r, function ActionsFunc);
t = null; r = null;
TriggerRegisterPlayerUnitEvent(t2, Player(0x00), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x01), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x02), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x03), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x04), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x05), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x06), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x07), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x09), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, null);
TriggerAddCondition(t2, Condition(function ActionsFunc));
t2 = null;
}
void BUG(){
timer t = GetExpiredTimer()
TimerStart(t, 0.00, false, function add_struct);
t = null;
}
void InitTrig_AddStruct(){
TimerStart(CreateTimer(), 1.10, false,function BUG);
}
_______________________________________________________________________
когда я запускаю функцию через 2 таймера то норм
но если сделаю по другому запущу на прямую или через 1 таймер показывает 2102 хендела
quq_CCCP, и какое время примерно?
просто делаю карту и мне не надо чтобы она через мин 20 лагала хоть как то
это я не начал ещё спелы делать а чисто старт карты а при спелах я не представляю сколько так будет висеть хендалов
и да есть возможность как-то самому обнулить handle ?
короче я кажется понял он не удаляется пока не создам новый
поставил в таймер с периодом 0.01 и система показывает то 2 то 1 но не больше
trigger t = CreateTrigger();
DestroyTrigger(t);
t = null;
group g = CreateGroup()
GroupClear(g)
DestroyGroup(g);
g = null;
поверил ещё один метод он работает если верить системе
globals
group g = CreateGroup();
endglobals
void DG(){
DestroyGroup(g);
g = null;
}
вот если что система не помню где её нашел
ReD_Unicorn, а ты учел то что у тебя триггеры отключены и включение я только заметил в триггере Arena который обратно же отключен и не имеет события
Run <имя триггера> ignoring condition игнорирует только условия триггера Condition
оператор if - else к нему не как не касается
примерно в не зависимости что за условие ты поставишь в триггер оно будет игнорироваться (точнее даже триггер будет запущен напрямую якобы условия вообще нет )
но в самих действиях ты спокойно можешь поставить if-else и оно будет работать
Maniac_91, вот тебепример
function Actions2 takes nothing returns boolean
if GetTriggerEventId() == EVENT_PLAYER_UNIT_ATTACKED then действие при атаки
elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_EFFECT действие при касте спела
endif
return false
endfunction ===========================================================================
function InitTrig_Ev takes nothing returns nothing
set gg_trg_Ev = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( gg_trg_Ev, EVENT_PLAYER_UNIT_ATTACKED )//ид 1
call TriggerRegisterAnyUnitEventBJ( gg_trg_Ev, EVENT_PLAYER_UNIT_SPELL_EFFECT )//ид2
TriggerAddCondition(gg_trg_Ev, Condition(function Actions2))
endfunction
и да тут не просто так вместо TriggerAddAction стоит TriggerAddCondition
поскольку action утечна и ну для неё это норм она постояно копит в себе количество активаций триггера этим и жрет доп память
Maniac_91, в один триггер можно поставить хоть все события поскольку события есть id и его можно отследить в действиях и проверять сработало нужное событие или нет
GetTriggerEventId() вернет эвент ид
WiLian, Game_Nikitav_1, верно написал
ты можешь сделать 2 триггера в 1 триггере сделать игрок 1 выбирает юнитов и занести юнита в переменную а в 2 триггере сделать событие игрок 1 напечатал такое сообщение и в действии уже сменить цвет юнита который записан в переменную
хотя это все можно сделать и на одном триггере
заставь юнита двигаться к вышке и начинай отслеживать дистанцию между вышкой и юнитом и если дистанция меньше требуемого то делаешь нужные действия
чтобы узнать дистанцию
x = GetUnitX(вышка) - GetUnitX(юнит)
y = GetUnitY(вышка) - GetUnitY(юнит)
dist = SquareRoot(x*x + y*y);
dist товя дистанция между вышкой и юнитом
и да тебе работать с таймером
я не б нем в векторах
и незнаю как
вот и задал впопрос как сделать
у меня высота допустим 50 у моей цели 200 мне надо чтобы высота постепенно повышалась дамика пока она летит к цели и достигла равной высоты цели
ну или понизилась если цель опустилась ниже
Clamp, я векторы изучу и переделаю потом
в данный момент я в них но особо разобрался Clamp, если я пока не понимаю то и делать на этом не смогу Clamp, и да спасибо за помощь и потраченное время на меня
bifurcated, все понял полностью спасибо помог наработкой
x = GetUnitX(sa.at1);
y = GetUnitY(sa.at1);
angle_x = GetUnitFacing(sa.at1) + 90
angle_y = GetUnitFacing(sa.at1) + 180
x = x + DB.x_model * Cos(angle_x * bj_DEGTORAD);
y = y + DB.x_model * Sin(angle_x * bj_DEGTORAD);
sa.dummy = NewDummy('hhes', x, y);
x = GetUnitX(sa.dummy) + DB.y_model * Cos(angle_y * bj_DEGTORAD);
y = GetUnitY(sa.dummy) + DB.y_model * Sin(angle_y * bj_DEGTORAD);
SetUnitX(sa.dummy,x)
SetUnitY(sa.dummy,y)
могу изменять и по X и по Y
Maniac_91, Вполне работает но есть косяк .
x допустим я смещаю на 100 , а y на 1
и при определенных градусах все работает но при некоторых атакует с неверной стороны
x = GetUnitX(sa.at1);
y = GetUnitY(sa.at1);
a = GetUnitFacing(sa.at1)
x = x + 100 * CosBJ(a - 1.57079632679)
y = y + 1 * SinBJ(a - 1.57079632679)
ledoed, давно не обращал внимание на мой вопрос не закрытый решил написать ledoed, ты меня все равно не понял ну тут моя вина все способности которые я пишу не как не связаны с стандартными только если как пустышка . Допустим есть предмет который позволяет нанести крит урон но внутри этого предмета нету не каких способностей я просто привязываю к предмету триггер со скилом (крита ) и если при атаке у юнита есть предмет этот то с шансом N срабатывает функция триггера
» WarCraft 3 / DestroyGroup()
а так что триггеры что группы и тд гонят при инициализации карты
я вот фишку нашел одну хз баг это и ли нет
но вот 2 примера
Пример 1 он показывает что создано 2080 хенодлов это с учетом зданий декоров и тд_______________________________________________________________
void add_struct(){
group g = CreateGroup();
region r = CreateRegion();
trigger t = CreateTrigger();
trigger t2 = CreateTrigger()
DestroyTimer(GetExpiredTimer());
GroupEnumUnitsInRect(g, bj_mapInitialPlayableArea, function ActionsFunc);
DestroyGroup(g); g = null;
RegionAddRect(r, bj_mapInitialPlayableArea);
TriggerRegisterEnterRegion(t, r, function ActionsFunc);
t = null; r = null;
TriggerRegisterPlayerUnitEvent(t2, Player(0x00), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x01), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x02), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x03), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x04), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x05), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x06), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x07), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x09), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, null);
TriggerRegisterPlayerUnitEvent(t2, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, null);
TriggerAddCondition(t2, Condition(function ActionsFunc));
t2 = null;
}
void BUG(){
timer t = GetExpiredTimer()
TimerStart(t, 0.00, false, function add_struct);
t = null;
}
void InitTrig_AddStruct(){
TimerStart(CreateTimer(), 1.10, false,function BUG);
}
_______________________________________________________________________
когда я запускаю функцию через 2 таймера то норм
но если сделаю по другому запущу на прямую или через 1 таймер показывает 2102 хендела
» WarCraft 3 / DestroyGroup()
просто делаю карту и мне не надо чтобы она через мин 20 лагала хоть как то
это я не начал ещё спелы делать а чисто старт карты а при спелах я не представляю сколько так будет висеть хендалов
и да есть возможность как-то самому обнулить handle ?
короче я кажется понял он не удаляется пока не создам новый
поставил в таймер с периодом 0.01 и система показывает то 2 то 1 но не больше
trigger t = CreateTrigger();
DestroyTrigger(t);
t = null;
Отредактирован Sergey105
» WarCraft 3 / DestroyGroup()
GroupClear(g)
DestroyGroup(g);
g = null;
поверил ещё один метод он работает если верить системе
globals
group g = CreateGroup();
endglobals
void DG(){
DestroyGroup(g);
g = null;
}
вот если что система не помню где её нашел
Отредактирован Sergey105
» WarCraft 3 / Run trigger ignoring condition
Run <имя триггера> ignoring condition игнорирует только условия триггера Condition
оператор if - else к нему не как не касается
примерно в не зависимости что за условие ты поставишь в триггер оно будет игнорироваться (точнее даже триггер будет запущен напрямую якобы условия вообще нет )
но в самих действиях ты спокойно можешь поставить if-else и оно будет работать
» WarCraft 3 / Подчинение одного юнита или героя триггерно
function Actions2 takes nothing returns boolean
if GetTriggerEventId() == EVENT_PLAYER_UNIT_ATTACKED then
действие при атаки
elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_SPELL_EFFECT
действие при касте спела
endif
return false
endfunction
===========================================================================
function InitTrig_Ev takes nothing returns nothing
set gg_trg_Ev = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( gg_trg_Ev, EVENT_PLAYER_UNIT_ATTACKED )//ид 1
call TriggerRegisterAnyUnitEventBJ( gg_trg_Ev, EVENT_PLAYER_UNIT_SPELL_EFFECT )//ид2
TriggerAddCondition(gg_trg_Ev, Condition(function Actions2))
endfunction
и да тут не просто так вместо TriggerAddAction стоит TriggerAddCondition
поскольку action утечна и ну для неё это норм она постояно копит в себе количество активаций триггера этим и жрет доп память
» WarCraft 3 / Подчинение одного юнита или героя триггерно
GetTriggerEventId() вернет эвент ид
Отредактирован Sergey105
» WarCraft 3 / Подчинение одного юнита или героя триггерно
ты можешь сделать 2 триггера в 1 триггере сделать игрок 1 выбирает юнитов и занести юнита в переменную а в 2 триггере сделать событие игрок 1 напечатал такое сообщение и в действии уже сменить цвет юнита который записан в переменную
хотя это все можно сделать и на одном триггере
» WarCraft 3 / Как отследить момент, что юнит добрался до указанной точки?
Отредактирован Sergey105
» WarCraft 3 / Как отследить момент, что юнит добрался до указанной точки?
чтобы узнать дистанцию
x = GetUnitX(вышка) - GetUnitX(юнит)
y = GetUnitY(вышка) - GetUnitY(юнит)
dist = SquareRoot(x*x + y*y);
dist товя дистанция между вышкой и юнитом
и да тебе работать с таймером
» WarCraft 3 / Высота Z
и незнаю как
вот и задал впопрос как сделать
у меня высота допустим 50 у моей цели 200 мне надо чтобы высота постепенно повышалась дамика пока она летит к цели и достигла равной высоты цели
ну или понизилась если цель опустилась ниже
Отредактирован N7 Molot
» WarCraft 3 / Высота Z
Zahanc, ясно что таймером я и двигаю таймером тут без него не как
» WarCraft 3 / Высота Z
я знаю как утсновить высоту
мне надо чтобы снаряд повышеал или понижал высоту плавно пока летит к цели
» WarCraft 3 / Координаты xy
в данный момент я в них но особо разобрался
Clamp, если я пока не понимаю то и делать на этом не смогу
Clamp, и да спасибо за помощь и потраченное время на меня
» WarCraft 3 / Координаты xy
x = GetUnitX(sa.at1);
y = GetUnitY(sa.at1);
angle_x = GetUnitFacing(sa.at1) + 90
angle_y = GetUnitFacing(sa.at1) + 180
x = x + DB.x_model * Cos(angle_x * bj_DEGTORAD);
y = y + DB.x_model * Sin(angle_x * bj_DEGTORAD);
sa.dummy = NewDummy('hhes', x, y);
x = GetUnitX(sa.dummy) + DB.y_model * Cos(angle_y * bj_DEGTORAD);
y = GetUnitY(sa.dummy) + DB.y_model * Sin(angle_y * bj_DEGTORAD);
SetUnitX(sa.dummy,x)
SetUnitY(sa.dummy,y)
могу изменять и по X и по Y
» WarCraft 3 / Координаты xy
и да мне бы желательно вне зависимости от таргета
а именно от радиуса поворота героя
» WarCraft 3 / Координаты xy
» WarCraft 3 / Координаты xy
сними только работаю
» WarCraft 3 / Координаты xy
» WarCraft 3 / Координаты xy
Maniac_91, я делаю примерно как в стандартном редакторе
» WarCraft 3 / Координаты xy
x допустим я смещаю на 100 , а y на 1
и при определенных градусах все работает но при некоторых атакует с неверной стороны
x = GetUnitX(sa.at1);
y = GetUnitY(sa.at1);
a = GetUnitFacing(sa.at1)
x = x + 100 * CosBJ(a - 1.57079632679)
y = y + 1 * SinBJ(a - 1.57079632679)
Отредактирован Clamp
» WarCraft 3 / Один таймер
что непонятно пиши
и да это пример с юнитами
ну можно переделать по своему
» WarCraft 3 / Один таймер
» WarCraft 3 / Обработка предметов
» WarCraft 3 / Таймер или Регион
» WarCraft 3 / ТестТаг перестал работать (без bj)