Привет, нужен совет. Есть карта, для 12 человек, но может быть и меньше (4,6,8,10). На определенном этапе игры, хочу симулировать клик юнита для всех игроков.
Дело в том, что некоторые из игроков видеть юнита не могут. И нужно отловить лишь тех, у кого после симуляции клика будет выбран юнит.
Есть код, который работает только для одного игрока, Player(0).
А как сделать такое для каждого и чтобы потом отловить именно тех, у кого был выбран юнит после клика?
Видел, что есть функции GetTriggerPlayer(), GetOwningPlayer(), но не знаю как их применять.
function Trig_IsUnitSelected_Conditions takes nothing returns boolean
	if(not(IsUnitSelected(imbaUnit,Player(0))==true))then
		return false
	endif
		return true
endfunction

function Trig_IsUnitSelected_Actions takes nothing returns nothing
	call ClearSelectionForPlayer(Player(0))
	//здесь будут какие-то действия с игроком, который выбрал юнита
	//но как понять какой именно игрок кликнул на юнита?
endfunction

function InitTrig_IsUnitSelected takes nothing returns nothing
	set gg_trg_IsUnitSelected=CreateTrigger()
	call TriggerRegisterUnitEvent(gg_trg_IsUnitSelected, imbaUnit, EVENT_UNIT_SELECTED)
	call TriggerAddCondition(gg_trg_IsUnitSelected,Condition(function Trig_IsUnitSelected_Conditions))
	call TriggerAddAction(gg_trg_IsUnitSelected,function Trig_IsUnitSelected_Actions)
endfunction

function Trig_UnitSelector_Actions takes nothing returns nothing
	call SelectUnitSingle(imbaUnit)
endfunction

function InitTrig_UnitSelector takes nothing returns nothing
	set gg_trg_UnitSelector=CreateTrigger()
	call TriggerRegisterTimerEventPeriodic(gg_trg_UnitSelector, 0.5)
	call TriggerAddAction(gg_trg_UnitSelector, function Trig_UnitSelector_Actions)
endfunction

Если юнит не виден для игрока, юнит не будет выделен. Это уже работает и проверено для Player(0).
В таком случае нужно создать force - группу игроков - и в триггере с событием на выделение добавлять игрока триггера в этот форсе.
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
Нахрена возится с кликом, если можно просто сделать все эти действия без клика. Проверить играет ли игрок и видит ли твоего юнита, дальше делаем действия...
То что сейчас выбрал игрок - локально, и требует синхронизации, в мульиплеере на это порой уходит много времени.
28
Ну так есть событие на выбор юнита. Насколько мне известно, SelectUnit не может выбрать юнита вне обзора игрока. Если это так, то проблемы нет. Если нет, то в триггер на выбор юнита добавляем условие, что игрок триггера видет выбранного юнита.
2
PT153, quq_CCCP,
Проверка через IsUnitVisible() не нужна. Я хотел бы симулировать клик по юниту каждому игроку.
Если юнит не виден для игрока, юнит не будет выделен. Это уже работает и проверено для Player(0).
Но как для всех это сделать и сохранить игроков, у которых будет выделен юнит, не знаю.
18
function Trig_IsUnitSelected_Conditions takes nothing returns boolean
	if(not(IsUnitSelected(imbaUnit, GetTriggerPlayer())==true))then
		return false
	endif
		return true
endfunction

function Trig_IsUnitSelected_Actions takes nothing returns nothing
	call ClearSelectionForPlayer(GetTriggerPlayer())
	//здесь будут какие-то действия с игроком, который выбрал юнита
	//но как понять какой именно игрок кликнул на юнита?
endfunction
24
Если это очередная попытка борьбы с мапхаком, то у меня для вас плохие новости - нормальный мапхак давно умеет показывать невидимых юнитов не делая их выделяемыми.
28
Если юнит не виден для игрока, юнит не будет выделен. Это уже работает и проверено для Player(0).
В таком случае нужно создать force - группу игроков - и в триггере с событием на выделение добавлять игрока триггера в этот форсе.
Принятый ответ
32
prog:
Если это очередная попытка борьбы с мапхаком, то у меня для вас плохие новости - нормальный мапхак давно умеет показывать невидимых юнитов не делая их выделяемыми.
Как я сразу не догадался =)
Думаю нафига ему эмитировать клик, если есть все и так. А тут борьба с мх, там клик в туман войны заменяется селф кликом уже давно.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.