function AddLocalEffect takes string eff, real x, real y, player pl returns effect
	local string e = ""
	if (GetLocalPlayer() == pl) then
		set e = eff
	endif
	return AddSpecialEffect(e, x, y)
endfunction

function Trig_TTTT_Actions takes nothing returns nothing
local real x = 0
local real y = 0
local integer k=0
local unit u=null
set u=h[0]
if GetLocalPlayer()==Player(0) then
set x=GetMouseX()// координаты мыши на экране у локального игрока
set y=GetMouseY()// в дебаг выводит всё верно
endif
if GetUnitAbilityLevel(u,'A001')>=1 and IsUnitSelected(u,GetOwningPlayer(u)) then
if x>=1485 and x<=1485+61 and y>=1000 and y<=1064 then //1920*1080
call BJDebugMsg("1")
call AddLocalEffect("war3mapImported\\RedRange.mdl",GetUnitX(u),GetUnitY(u),GetOwningPlayer(u)) // создание эффекта вызывает десинх
endif
endif
set u=null
endfunction
Комментарии на коде, код создаёт спецэффект, при наведении на способность Q, код упростил до безумия даже воткнул болванчика из статьи про гетлокал плеера, думал у меня что не так, нет, просто десинхает второго игрока =(

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

попробуй что я сделал)
GetMouseX() не может вызывать десинхрон, т.к не создает хендл

Десинхронило потому что ты делал условие if x>=1485 and x<=1485+61 and y>=1000 and y<=1064 then
на машинах других игроков X был равен 0 и поэтому он не проходил через условие, т.е получается что ты создавал игровой объект локально
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
23
5 лет назад
0
if GetLocalPlayer()==Player(0) then
set x=GetMouseX()// координаты мыши на экране у локального игрока
set y=GetMouseY()// в дебаг выводит всё верно
endif
100% десинхр
2
26
5 лет назад
2
Как понимаю, ты должен создавать эффект для всех через переменную, но для GetLocalPlayer у переменной должна быть твоя модель эффекта, а у всех остальных невидимая.
0
28
5 лет назад
0
Как понимаю, ты должен создавать эффект для всех через переменную, но для GetLocalPlayer у переменной должна быть твоя модель эффекта, а у всех остальных невидимая.
Вот-вот, абсолютно верно.
2
18
5 лет назад
2
function AddLocalEffect takes string eff, real x, real y, bool b returns effect
	local string e = ""
	if b then
		set e = eff
	endif
	return AddSpecialEffect(e, x, y)
endfunction

function Trig_TTTT_Actions takes nothing returns nothing
local real x = 0
local real y = 0
local integer k=0
local unit u=null
set u=h[0]
if GetLocalPlayer()==Player(0) then
set x=GetMouseX()// координаты мыши на экране у локального игрока
set y=GetMouseY()// в дебаг выводит всё верно
endif
if GetUnitAbilityLevel(u,'A001')>=1 and IsUnitSelected(u,GetOwningPlayer(u)) then
call AddLocalEffect("war3mapImported\\RedRange.mdl",GetUnitX(u),GetUnitY(u),x>=1485 and x<=1485+61 and y>=1000 and y<=1064)? // создание эффекта вызывает десинх
endif
set u=null
endfunction
0
32
5 лет назад
0
8gabriel8, ахаха кто, то не умеет создавать эффекты, я кажись всё понял, щас попробую и отпишусь
pro100master:
100% десинхр
на удивление здесь не десинхает =)
2
18
5 лет назад
Отредактирован Hodor
2
а ещё лучше - упростить вот так:
function AddLocalEffect takes string eff, real x, real y, bool b returns effect
	if not b then
		set eff = ""
	endif
	return AddSpecialEffect(eff, x, y)
endfunction
bool это boolean, просто по привычке написал)

И не юзай IsUnitSelected, оно на некоторых машинах выдает неправильное значение и может случиться десинхрон
0
32
5 лет назад
0
Как понимаю, ты должен создавать эффект для всех через переменную, но для GetLocalPlayer у переменной должна быть твоя модель эффекта, а у всех остальных невидимая.
Так стоп, но я же так и делал!
UrsaBoss, а IsUnitSelected, обязательное условие, и я не пойму а как я игрока передам в вашу функцию?, я снова еще больше не понимаю!
2
18
5 лет назад
Отредактирован Hodor
2
Bergi_Bear, игрока не надо передавать, только у нужного игрока переменная будет положительной
вот пример:
переменная X имеет значение 0
далее
if GetLocalPlayer() == Player(0) then
	set x = 1
endif
далее вызываешь функцию и передаешь туда эту переменную X
на машинах синего и остальных игроков X будет равен 0
а на машине красного игрока X будет равен 1
в самой функции там будет условие:
if x == 0 then
	set eff = ""
endif
т.е получается у синего и остальных игроков модель эффекта будет спрятана, а у красного игрока нет, т.к x = 1
0
32
5 лет назад
0
ладно, это сути не меняет, может pro100master, и прав, но мне эти маусы и не надо сихронизировать всем пусть локально выполняются, а что тогд десинхает? если строчку с эффектом убрать в дебаг всё отлично выводится
2
18
5 лет назад
Отредактирован Hodor
2
я уже написал код который не должен десинкать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.