Как убрать из выделенных героев одного?(Что-то типо SelectionOnSpawn)

Nears

Пользователь
31 Окт 2017
12
7
Собственно вопрос, как убрать из списка выделенных юнитов одного?
Типа вот я имею героя и юнита, я хочу убрать из выделения только героя. Как это сделать? Ваще не представляю.
 

Nears

Пользователь
31 Окт 2017
12
7
Собственно вопрос, как убрать из списка выделенных юнитов одного?
Типа вот я имею героя и юнита, я хочу убрать из выделения только героя. Как это сделать? Ваще не представляю.
Решение:
Я просто взял и начал выделять того кто мне нужен вот этой командой:
Код:
PlayerResource:SetOverrideSelectionEntity( Айди героя который будет выделять юнита, сам юнит для выделения)
 
  • Нравится
Реакции: -ExotiC-
20 Дек 2016
892
170
Решение:
Я просто взял и начал выделять того кто мне нужен вот этой командой:
Код:
PlayerResource:SetOverrideSelectionEntity( Айди героя который будет выделять юнита, сам юнит для выделения)
Разве таким способом можно выделить несколько юнитов? Или тебе и не надо несколько?
 

doter.ua

Продвинутый
17 Авг 2014
280
5
SetOverrideSelectionEntity не позволяет выделять других юнитов. Есть идея как сделать через клиент(js), суть ее в том, чтобы отправлять ивент клиенту, который соберет инфу и отправит ее серверу, а потом сервак еще раз отправит ивент клиенту для непосредственно самого выделения. Но такой способ не подойдет, если твой кейс про core механику т.е. если время обработки критично. При грубых расчетах скорость = 3 * пинг + время на обработку в самом коде. Если тебя устроит такой вариант, то вот суть идеи:

1) Отправляем клиенту ивент Send_ServerToPlayer.
2) Клиент принимает ивент (любой рабочий .js файл из панорамы, у которого есть код для приема ивента).
Он собирает инфу о выделенных юнитах (аналогичного метода для луа не нашел) Players.GetSelectedEntities( integer iPlayerID )
и отправляет ее серваку.
3) Сервак принимает ее и анализирует кого нужно выгнать из селекшина(entityIndex в луа и js одинаковые, дополнительная магия по конвертации не нужна). После анализа отправляет другой ивент клиенту со списком ид юнитов, которые должны быть выделены.
4) У клиента нет метода ан\деселект, зато есть обратный - GameUI.SelectUnit( integer nEntityIndex, boolean bAddToGroup )
первого из списка выделяешь с флагом false, остальных с тру, чтобы они добавились в группу к первому.

Подробнее про ивенты.
P.S. в идеале создать отдельный js файл для таких утильных кейсов. Так же для этого нужна будет xml заглушка в которой будет какой-нибудь элемент(Panel) с hittest=false и размерами(width hight) отличными от нуля. Если в хмл ничего не рисуется, то он не будет работать.
 

Nears

Пользователь
31 Окт 2017
12
7
SetOverrideSelectionEntity не позволяет выделять других юнитов. Есть идея как сделать через клиент(js), суть ее в том, чтобы отправлять ивент клиенту, который соберет инфу и отправит ее серверу, а потом сервак еще раз отправит ивент клиенту для непосредственно самого выделения. Но такой способ не подойдет, если твой кейс про core механику т.е. если время обработки критично. При грубых расчетах скорость = 3 * пинг + время на обработку в самом коде. Если тебя устроит такой вариант, то вот суть идеи:

1) Отправляем клиенту ивент Send_ServerToPlayer.
2) Клиент принимает ивент (любой рабочий .js файл из панорамы, у которого есть код для приема ивента).
Он собирает инфу о выделенных юнитах (аналогичного метода для луа не нашел) Players.GetSelectedEntities( integer iPlayerID )
и отправляет ее серваку.
3) Сервак принимает ее и анализирует кого нужно выгнать из селекшина(entityIndex в луа и js одинаковые, дополнительная магия по конвертации не нужна). После анализа отправляет другой ивент клиенту со списком ид юнитов, которые должны быть выделены.
4) У клиента нет метода ан\деселект, зато есть обратный - GameUI.SelectUnit( integer nEntityIndex, boolean bAddToGroup )
первого из списка выделяешь с флагом false, остальных с тру, чтобы они добавились в группу к первому.

Подробнее про ивенты.
P.S. в идеале создать отдельный js файл для таких утильных кейсов. Так же для этого нужна будет xml заглушка в которой будет какой-нибудь элемент(Panel) с hittest=false и размерами(width hight) отличными от нуля. Если в хмл ничего не рисуется, то он не будет работать.
Возьму на заметку.
 
  • Нравится
Реакции: doter.ua
20 Дек 2016
892
170
SetOverrideSelectionEntity не позволяет выделять других юнитов. Есть идея как сделать через клиент(js), суть ее в том, чтобы отправлять ивент клиенту, который соберет инфу и отправит ее серверу, а потом сервак еще раз отправит ивент клиенту для непосредственно самого выделения. Но такой способ не подойдет, если твой кейс про core механику т.е. если время обработки критично. При грубых расчетах скорость = 3 * пинг + время на обработку в самом коде. Если тебя устроит такой вариант, то вот суть идеи:

1) Отправляем клиенту ивент Send_ServerToPlayer.
2) Клиент принимает ивент (любой рабочий .js файл из панорамы, у которого есть код для приема ивента).
Он собирает инфу о выделенных юнитах (аналогичного метода для луа не нашел) Players.GetSelectedEntities( integer iPlayerID )
и отправляет ее серваку.
3) Сервак принимает ее и анализирует кого нужно выгнать из селекшина(entityIndex в луа и js одинаковые, дополнительная магия по конвертации не нужна). После анализа отправляет другой ивент клиенту со списком ид юнитов, которые должны быть выделены.
4) У клиента нет метода ан\деселект, зато есть обратный - GameUI.SelectUnit( integer nEntityIndex, boolean bAddToGroup )
первого из списка выделяешь с флагом false, остальных с тру, чтобы они добавились в группу к первому.

Подробнее про ивенты.
P.S. в идеале создать отдельный js файл для таких утильных кейсов. Так же для этого нужна будет xml заглушка в которой будет какой-нибудь элемент(Panel) с hittest=false и размерами(width hight) отличными от нуля. Если в хмл ничего не рисуется, то он не будет работать.

А можно ли теоретически написать свою селекцию через ордер фильтр?
Типо "выделенных" заносить в массив и давать им визуальный эффект селекции, а в фильре как-то отдавать приказ всем юнитам из массива?
 

doter.ua

Продвинутый
17 Авг 2014
280
5
А можно ли теоретически написать свою селекцию через ордер фильтр?
Типо "выделенных" заносить в массив и давать им визуальный эффект селекции, а в фильре как-то отдавать приказ всем юнитам из массива?

Селект - это чисто клиентская штука. Список доступных ордеров, поиск по странице по слову DOTA_UNIT_ORDER_
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
2 пункт считаю бессмысленным, т.к. Можно просто отправить сервером к клиенту эвент с нужными для выделения ентиндексами
 

doter.ua

Продвинутый
17 Авг 2014
280
5
2 пункт считаю бессмысленным, т.к. Можно просто отправить сервером к клиенту эвент с нужными для выделения ентиндексами
Ну это если у тебя заранее известен список юнитов, а в вопросе было про "редактирование" группы уже выделенных юнитов.
 
Реклама: