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
я уже написал код который не должен десинкать
0
32
5 лет назад
0
UrsaBoss, да это тоже самое только в другой обложке, ок я попробую, сделаю всё что вы написали
2
18
5 лет назад
Отредактирован Hodor
2
попробуй что я сделал)
GetMouseX() не может вызывать десинхрон, т.к не создает хендл

Десинхронило потому что ты делал условие if x>=1485 and x<=1485+61 and y>=1000 and y<=1064 then
на машинах других игроков X был равен 0 и поэтому он не проходил через условие, т.е получается что ты создавал игровой объект локально
Принятый ответ
0
32
5 лет назад
0
UrsaBoss, Я ничего не понял, но оно работает!, спасибо
function AddLocalEffect takes string eff, real x, real y, boolean b returns effect
	if not b then
		set eff = ""
	endif
	return AddSpecialEffect(eff, 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
local boolean b=false
set u=h[0]
if GetLocalPlayer()==Player(0) then
set x=GetMouseX()// координаты мыши на экране у локального игрока
set y=GetMouseY()// !!!!!
if GetUnitAbilityLevel(u,'A001')>=1 and IsUnitSelected(u,GetOwningPlayer(u)) then
if x>=1485 and x<=1485+64 and y>=1000 and y<=1064 then //1920*1080
set b=true
endif
endif
endif
//call BJDebugMsg("1")
call DestroyEffect(AddLocalEffect("war3mapImported\\RedRange.mdl",GetUnitX(u),GetUnitY(u),b)) // вот так работает

set u=null
endfunction
2
28
5 лет назад
Отредактирован PT153
2
и я не пойму а как я игрока передам в вашу функцию?
Да что не понятного, нужно передать boolean.
call AddLocalEffect(path, x, y, GetLocalPlayer() == Player(0))
У красного b будет равно true, у остальных false. not b у красного будет ложью, у остальных правдой, потому всем кроме красного будет поставлена пустая строка как путь к эффекту.

local unit u=null
local boolean b=false
set u=h[0]
И зачем это лишнее присваивание u = null вначале?
0
32
5 лет назад
Отредактирован Берги
0
PT153, уже всё получилось спасибо, я понял, PT153:
И зачем это лишнее присваивание u = null вначале?
Это пережитки прошлого из cJass где иногда если переменной не приписать нулл, то парсер будет ругаться на несуществующую переменную, я на чистый jass не давно перешёл, много вредных привычек осталось.
И этот код вообще просто огрызок от большой системы, потому что именно здесь у меня вопросы были, но ответ уже дан, всё работает, осталось адаптировать систему под мониторы и готово, мы получили события наведения курсора на панель приказов, я пока даже не знаю зачем мне это
0
18
5 лет назад
0
Bergi_Bear, у тебя наверное старый cJass был.
Я уже год на нем пишу и могу уверенно сказать:
на cJass код пишется намного удобнее и быстрее
имхо - на обычном JASS дохера ненужных букв пишется
0
32
5 лет назад
0
UrsaBoss, я 5 лет на cJass писал, и даже не знаю об этом, а потом оказалось что надо call set then в каждую дырку писать, ну ничего уже привык XD
Чтобы оставить комментарий, пожалуйста, войдите на сайт.