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

Похожие вопросы:

ответ
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Ответ: Да есть способ: вот шпаргалка
ответ
Дело именно в количестве триггеров а не в их начинки и назначении, создавать триггеры динамически по мере надобности в гуях нельзя, так что переходите на jass.
ответ
Или сделай debounce для конкретного игрока
ответ
Extremator:
call RemoveLocation( udg_Player_Attac_Zone_Massive[1] )
set udg_Player_Attac_Zone_Massive[1] = null
А вообще, раз уж это стартовые позиции игроков, то просто один раз создай там точки и обращайся потом в ним.
Это не стартовые позиции, а просто привязанные к игроку
Madness:
Extremator:
call RemoveLocation( udg_Player_Attac_Zone_Massive[1] )
set udg_Player_Attac_Zone_Massive[1] = null
А вообще, раз уж это стартовые позиции игроков, то просто один раз создай там точки и обращайся потом в ним.
Это не стартовые позиции, а просто условно привязанные к игроку
ответ
Я разобрался в данном вопросе. "Не большое уточнение для стандартных карт тип (милишные)". Моя ошибка заключалась в том то сделал не стандартную боевую единицу "герои" и продублировал имеющихся героев "соответственно с внесением изменений в "редакторе объектов" и добавлением в "игровые константы" (стандартный герой "Паладин" = не стандартная боевая единица "Паладин") и т.д..
Достаточно было внести изменения для каждого стандартного героя в "редакторе объектов" без добавления в "игровые константы" и добавить их в не стандартную боевую единицу "таверна". все вроде работает без написания "триггеров".
"На всякий случай может пригодится кому"
Технологии - требования = Любой алтарь
Технологии - требования = Любой центр поселения 2 класса, Любой алтарь
Технологии - требования = Любой центр поселения 3 класса, Любой алтарь
Характеристики - Задержка перед первым пополнением = 130
Характеристики - Интервал пополнения = 0
Характеристики - Макс. количество = 1

`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Принятый ответ
Похожие вопросы:

ответ
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Ответ: Да есть способ: вот шпаргалка
ответ
Дело именно в количестве триггеров а не в их начинки и назначении, создавать триггеры динамически по мере надобности в гуях нельзя, так что переходите на jass.
ответ
Или сделай debounce для конкретного игрока
ответ
Extremator:
call RemoveLocation( udg_Player_Attac_Zone_Massive[1] )
set udg_Player_Attac_Zone_Massive[1] = null
А вообще, раз уж это стартовые позиции игроков, то просто один раз создай там точки и обращайся потом в ним.
Это не стартовые позиции, а просто привязанные к игроку
Madness:
Extremator:
call RemoveLocation( udg_Player_Attac_Zone_Massive[1] )
set udg_Player_Attac_Zone_Massive[1] = null
А вообще, раз уж это стартовые позиции игроков, то просто один раз создай там точки и обращайся потом в ним.
Это не стартовые позиции, а просто условно привязанные к игроку
ответ
Я разобрался в данном вопросе. "Не большое уточнение для стандартных карт тип (милишные)". Моя ошибка заключалась в том то сделал не стандартную боевую единицу "герои" и продублировал имеющихся героев "соответственно с внесением изменений в "редакторе объектов" и добавлением в "игровые константы" (стандартный герой "Паладин" = не стандартная боевая единица "Паладин") и т.д..
Достаточно было внести изменения для каждого стандартного героя в "редакторе объектов" без добавления в "игровые константы" и добавить их в не стандартную боевую единицу "таверна". все вроде работает без написания "триггеров".
"На всякий случай может пригодится кому"
Технологии - требования = Любой алтарь
Технологии - требования = Любой центр поселения 2 класса, Любой алтарь
Технологии - требования = Любой центр поселения 3 класса, Любой алтарь
Характеристики - Задержка перед первым пополнением = 130
Характеристики - Интервал пополнения = 0
Характеристики - Макс. количество = 1

28
может потому что триггер регистрирует регион, а не рект?..
21
rsfghd, function Trig_____________________________________002_Actions takes nothing returns nothing
call RemoveRect( gg_rct_000 )
endfunction
===========================================================================
function InitTrig_____________________________________002 takes nothing returns nothing
set gg_trg_____________________________________002 = CreateTrigger( )
call TriggerRegisterPlayerChatEvent( gg_trg_____________________________________002, Player(0), "1", true )
call TriggerAddAction( gg_trg_____________________________________002, function Trig_____________________________________002_Actions )
endfunction
28
SсRealm, ну и что за фигню ты мне скинул? ты можешь пользоваться форматированием и перед конвертацией своих русских гуи - переименовывать триггер хотя бы на латинскую букву? вроде несложно же?
21
rsfghd, Какая разница? Оно не на что не влияет. call RemoveRect( gg_rct_000 ) это все что я хотел показать.
26
SсRealm, есть конкретные области (как юниты), а есть их массивы (как отряды). Так вот события вешаются на сам "отряды областей", а сколько в нем "юнитов-областе" - это уже совсем другой вопрос.
13
Как и сказал rsfghd, в событиях используется РЕГИОН, а не область. Регион - таже область, только может быть неправильной формы.
Вот пример триггера "юнит вошел в область":
Глянем что внутри события:
Как мы видим создается новый регион(а не рект), в который добавляется наша область и вызывается нативное событие.
Загруженные файлы
21
IzobretatelBoom:
Значит у меня кривой перевод, потому что написано "удалить область" и указывается область для удаления
Загруженные файлы
1
SсRealm, ну, нет.
Чем дают пользоваться в GUI - только rect (Область). То что удаляется с помощью "call RemoveRect(SomeRect)" - удаляется rect.
Rect - не Region.
Region может быть любой формы, а rect - в форме прямоугольника (4 угла). Через GUI не дали возможности взаимодействовать с Region.
12
native RemoveRegion takes region whichRegion returns nothing
\\Зачем удалять регион?
28
Makeba, сам в шоке, благо люди подтянулись, я с этим выжигателем мозгов толковать больше не хочу, необучаемое
23
А какая собственно цель преследуется? Отключить триггер входа/выхода в область? Так его можно и так просто отключить
21
EugeAl, Да это и так понятно, что можно отключить.
Забавно, что у меня в редакторе написано " удаление области" в джассе она указана как
"call RemoveRect( gg_rct_000 )" и указывает на область и вроде как удаление области, но вся Хигама твердит, что это нифига не область, админы обзывают меня тупым.
Короче, ну её, эту функцию. Жили без нее и дальше как - нибудь справимся!
27
SсRealm,
"call RemoveRect( gg_rct_000 )"
вся Хигама твердит, что это нифига не область
Это кто и где такое сказал, можно цитату?
23
SсRealm, она действительно удаляет область, но тут она не поможет, потому что триггер по факту работает по региону (грубо говоря - группе областей, регион это аналог отряда и группы игроков), в который добавляется эта область. Потому что события триггера по области в дефолте не существует.
30
EugeAl, и ровно по этой причине, кстати, не существует GetTriggerRect().
21
EugeAl, Можно тогда последний вопрос: А нафига удалять область, если это вообще ни на что не влияет?!
Если вот эта штука есть для меня как объект в игре, но триггерно она хоть и удаляется, но не удалятся. То для чего мне эта функция вообще?!
Загруженные файлы
27
SсRealm, удаление области ты всё ещё проверяешь работоспособностью триггера, который висит на регионе, а не на области?
7
SсRealm, объекты удаляют(область тоже объект в данном контексте), что бы они не занимали место в памяти, если они больше не нужны. Это нужно когда создается относительно большое количество временных объектов. Это относится к точкам(Location), таймерам, областям и тд. Если ты не понимаешь зачем, что либо удалять, то вероятнее всего тебе удалять ничего не стоит, что бы не удалить чего лишнего.
И еще раз повторю то, что сказали все до меня. Твой триггер регистрирует событие входа в Region, Region в свою очередь создается под капотом Гуи из области, удаляя область ты не удаляешь регион, а значит никак не влияешь на триггер.
23
nazarpunk, да, естественно, за ненадобностью.
23
SсRealm, например, у тебя квест есть, и там у тебя условие, что юнит в области такой то и что нибудь с ним сделать, и допустим по сценарию нужно что то перестроить в квесте, и область больше не нужна, тогда её можно удалить. Про триггер с регионом в данном случае забудь, ему пофиг на удаление области.
30
EugeAl, за какой ненадобностью? Вот тебе простейший пример - ты разметил в рпг области чтоб писать, то-то вроди "Герой вошёл в Тёмный Лес". Повесил слобытие на регион. И как определить, куда именно вошёл герой? Создавать на каждый рект регион?
23
nazarpunk, ну близы для этого сделали GetTriggeringRegion()
В гуях они как раз и сделали на каждый рект регион.
А насчёт областей - просто в регион можно добавлять не только области, но и точки, и координаты, и тут как тогда вычислять, на чем стоит юнит? Он может войти не в область, а в координаты, например
( RegionAddCellAtLoc, RegionAddCell )
И тут получается нужно вызывать к примеру getTriggerRect и getTriggerlocation и getTriggerXY, причём сразу 3 функции, если бы они были. Такое себе.
Недоработка, тогда им надо было тупо событие входа в рект сделать.
спасибо за идейку, пожалуй, можно будет попробовать накостылить getTriggeringRect()
11
Вот, офигеваю от вопросов "за какой надобностью". Вот с той же проблемой столкнулся. Хочу максимально эффективно использовать память. Поэтму создал я ОДИН триггер и запихнул в нее одно действие. Создаю динамически события
function Object:init_object()
    self.region = CreateRegion()
    local rect = Rect(xmin, ymin, xmax, ymax)
    Object.region_rect_link[region] = rect
    TriggerRegisterEnterRegion(Object.enter_trigger, region, nil)
    RegionAddRect(region, rect)
end
Затем мне надо отключить одно из событий, козалось бы, просто
function Object:deactivate_region()
        local rect = self.region_rect_link[self.region]
        RegionClearRect(self.region, rect)
end
А это просто не работает, триггер с регионом работает будто его (регион) и не очищали от ректа. Однако
function Object:deactivate_region()
        local rect = self.region_rect_link[self.region]
         RemoveRegion(self.region)
end
работает и событие не проигрывается, но цель отключить событие, что бы затем переназначить rect на другой bounding box (xmin, xmax, ...). Опять таки ради эффективного использования памяти.

update но! Все тоже самое работает с
RegionAddCell(self.region, self.x, self.y)
RegionClearCell(self.region, self.x, self.y)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.