--если юнит не может двигаться
function CheckUnitForBuild(u, PlaYer)
	--если юнит наземный
	local a1 = IsUnitType(u, UNIT_TYPE_GROUND)
	--если юнит видим
	local a2 = IsUnitVisible(u, PlaYer)
	--если юнит жив
	local a3 = not IsUnitDeadBJ(u)
	--если юнит видим
	local a4= not IsUnitHiddenBJ(u)
	
	local b1,b2=IsUnitEnemy(u, PlaYer),false
	local pp = GetOwningPlayer(u)
	if pp~=PlaYer then
		--если враждебный
		--если этот юнит неподконтролен частично
		--если этот юнит неподконтролен полностью
		b2 = (not GetPlayerAlliance(PlaYer, pp, ALLIANCE_SHARED_CONTROL))or( not GetPlayerAlliance(PlaYer, pp, bj_ALLIANCE_ALLIED_ADVUNITS ))
	end
	
	--если юнит не может двигаться
	local m1 = GetUnitMoveSpeed(u)<=0

	return (a1 and a2 and a3 and a4) and (b1 or m1 or b2) 
end
у меня есть юнит союзника, который находится под контролем (заключен аспект союза). Но он не может двигаться, скорость на нуле. Но система нифига этого не показывает.
область должна быть закрашена красными квадратиками. но этого не происходит, ибо че то не правильно в условии. я на логику почитал, не знаю. полчаса бьюсь, я не понимаю, что не работает.
и только в b2 два условия объединил в 1, только тогда все заработало

Принятый ответ

Я условия проверил, и они работают. ну она работает от случая к случаю. Что-то изменяю, и пашет. Вношу изменения снова, не работает. вернее, часть условия работает верно.
Пример, есть 4 игрока:
  1. красный (собственно я) => несколько юнитов могут не двигаться, а остальные разбегаются
  2. синий (подконтрольный союзник) => несколько юнитов могут не двигаться, а остальные разбегаются
  3. голубой враг
  4. фиолетовый нейтральный
все войска кроме подвижных подконтрольных являются как бы препятствием

пример, я сделал все работало. кроме синего неподвижных юнитов, решил в условиях похимичить, и сломал, короче, перестали работать: теперь, на голубого не работает. иногда не пашет на друкгих.

забавно но факт: тут бывает где то в условиях обрывается поток, и поэтому не работает что то. что делать то? условие как бы нужное, ну раз не пашет, надо понять причину
--если этот юниты подконтрольны частично
local flag1=GetPlayerAlliance(PlaYer, pp, ALLIANCE_SHARED_CONTROL)
 --если этот юниты подконтрольны полностью
local flag2=GetPlayerAlliance(PlaYer, pp, bj_ALLIANCE_ALLIED_ADVUNITS)
--если игрок нейтральный
--local flag3=GetPlayerAlliance(PlaYer, pp, ALLIANCE_PASSIVE)

продвинутый контроль не нужен, только обычного достаточно. В редакторе его не включить, нужно частичный и только потом открывается полный. Также и через триггеры. Думаю, что достаточно проверять частичное, иначе продвинутый обрывает поток
flag2=GetPlayerAlliance(PlaYer, pp, bj_ALLIANCE_ALLIED_ADVUNITS)
короче, еле еле решил проблему
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
22
2 года назад
1
Предупреждение автору публикации

2 пункта: 1.1 Публичное использование ненормативной лексики.
Этот комментарий удален
0
27
2 года назад
0
могут быть вражеские юниты подконтрольными быть?
0
29
2 года назад
0
Выведи результат каждого условия по отдельности и поймёшь какое не проходит.
0
27
2 года назад
Отредактирован MpW
0
Я условия проверил, и они работают. ну она работает от случая к случаю. Что-то изменяю, и пашет. Вношу изменения снова, не работает. вернее, часть условия работает верно.
Пример, есть 4 игрока:
  1. красный (собственно я) => несколько юнитов могут не двигаться, а остальные разбегаются
  2. синий (подконтрольный союзник) => несколько юнитов могут не двигаться, а остальные разбегаются
  3. голубой враг
  4. фиолетовый нейтральный
все войска кроме подвижных подконтрольных являются как бы препятствием

пример, я сделал все работало. кроме синего неподвижных юнитов, решил в условиях похимичить, и сломал, короче, перестали работать: теперь, на голубого не работает. иногда не пашет на друкгих.

забавно но факт: тут бывает где то в условиях обрывается поток, и поэтому не работает что то. что делать то? условие как бы нужное, ну раз не пашет, надо понять причину
--если этот юниты подконтрольны частично
local flag1=GetPlayerAlliance(PlaYer, pp, ALLIANCE_SHARED_CONTROL)
 --если этот юниты подконтрольны полностью
local flag2=GetPlayerAlliance(PlaYer, pp, bj_ALLIANCE_ALLIED_ADVUNITS)
--если игрок нейтральный
--local flag3=GetPlayerAlliance(PlaYer, pp, ALLIANCE_PASSIVE)

продвинутый контроль не нужен, только обычного достаточно. В редакторе его не включить, нужно частичный и только потом открывается полный. Также и через триггеры. Думаю, что достаточно проверять частичное, иначе продвинутый обрывает поток
flag2=GetPlayerAlliance(PlaYer, pp, bj_ALLIANCE_ALLIED_ADVUNITS)
короче, еле еле решил проблему
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.