function MovePointer takes nothing returns nothing
unit u=GetEnumUnit()
real x=0
real y=0
if GetLocalPlayer() == GetOwningPlayer(u)
x=1000//GetMouseTerrainX() // протестировав с реальными цифрами, понял, что дело не в мемхаке
y=1000//GetMouseTerrainY()
endif
SetUnitX(u,x)
SetUnitY(u,y)
endfunction
Тут у нас десинх из за SetUniX, прочитал на warcraft3ft.clan.su/forum/60-41449-1 пишут вот что
SetUnitX, SetUnitY, SetUnitPosition, SetUnitPositionLoc - нельзя давать приказы двигаться, мешать путям, атаковать юнита
А как же мне тогда передать в SetUnitX(u,GetMouseTerrainX()) ??? без десинхронизации?? как использовать GetLocalPlayer в моём случае?

Bergi_Bear, нет, невозможно, курсоры, да что там все визуалки, вся видеопамять твоего компа если тебе так понятнее не синхронизируется, синхронизируются лишь вектора приказов, т.е ты кликнул идти, через N времени хост пересчитал все очереди приказов и раздал команды кто и как дальше движется, синхронизировать курсор не получится, т.к ты не сможешь так часто синхать и так много данных, с уровня.. Jass. Есть лишь 1 путь, кешь, но кешь не годится для таких динамических синхов, он медленный и ненадежный. Других способов нет.
Ни одна добрая фея не сделала библиотеку которая бы сделала возможным то что вы хотите, не смотря на не однократные попытки...
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
17
в сринг пробни сохранить типо
string _x = R2S(GetMouseTerrainX())
а потом получай так
x= S2R(_x)
22
чтобы не нарушали как обычно гласят его не должен получат данные если вы его сделаете так
local real x = 0.
if GetLocalPlayer() == Player(0) then
set x = 1000.
endif
SetPos... // Тут уже позиция тогда не будет нарушено десихнка
но если его игрок тыкнет или двинет то уже десихнр так что нет смысла
32
Эмм - никак, ничего нельзя сделать с кодами мыши хоть ты лопни,ибо ты ломаешь синхронизацию, нельзя сделать никакие от первого лица стрелялки.
33
ledoed, ну да так то работает, но в сингле, в локалке же десинхрон моментом =(
32
Bergi_Bear, разумеется десинхронизация, ты вдуматься как может продолжатся игра если у тебя ы идешь в лево, а у твоего соперника стоишь на месте ( допустим).
Неужели непонятно что координаты мыши или камеры никак нельзя использовать для глобальных действий, все приказы, пути, здоровье, опыт, абилки - все синхронизируется, шаг в сторону = десинх.
33
quq_CCCP, так что мешает поместить позицию курсора в отдельную переменную real или стринг? её то и надо синхронизировать, а дальше значение это переменной должно быть видно всем, у меня ничего не создаются, дальше данные должны стать общими
Код (((
function MovePointer takes nothing returns nothing
unit u=GetEnumUnit()
real x=0
real y=0
string x2=""
string y2=""
if GetLocalPlayer() == Player(0)GetOwningPlayer(u)
x2=R2S(GetMouseTerrainX())
y2=R2S(GetMouseTerrainY())
endif
CreateUnit(GetOwningPlayer(u),'e009',S2R(x2),S2R(y2),0)
endfunction
)))
У первого игрока юнит создался там где курсор, у 2 игрока в кооринатах 0 0, не важно закоменчен ли гет локал плеер, тут то понятен смысл десинха, он прям визуально виден, но почему нельзя создать юнита у 2го игрока по тем же координатам, что передал первый?
32
Bergi_Bear, ага, всего то синхронизированы? Так просто бля, что бились над этим 15 лет наверное...
Как ты собрался что либо синхронизировать? У тебя есть только gamecache, который сработает только в потоке триггера и только не сразу, синхроеизация вещь не мгновенная и вейт надо подольше, иначе те кто не успел - отвалятся....
Ну а т.к быстрый синх с уровня jass невозможен то и управление клавишами и отловы курсоров с целью управления Юнитами тоже невозможны, синхроеизация не только медленная, она еще рандомная, нельзя узнать сколько потребуется времени на синхронизацию...
Синхать можно сейвкоды, к примеру в начале игры пока н кто не двигается и в рпгшке все грузят персонажей, секунд 40, а в игре курсор ловить постоянно не прокатит, я вроде доступно описал почему? В теме с мемхаком раза три мусолилось.
33
quq_CCCP, бились бились, я не вижу попыток биться, я вижу только твои сообщения в каждом посте, о невозможности этого, написал бы уже статью...
32
Bergi_Bear, флаг в руки идти дальше ловить десинхи, если не понимаешь почему...
33
quq_CCCP, не хочу спорить с тобой, ты разумеется прав и знаешь больше, я в эту синхронизацию даже в Unity не вдолбился, решил добить варкрафт. Правильно ли я понимаю, что допустим данные которые делает триггер на обоих компах каждые 0,01 допустим даже всегда успешно просинхронизированы потому что выполняются одновременно и одинаково? а теоретически курсор заработает если его синхронизировать через гейм кеш допустим каждые 5 сек?, хотя это уже ничего не решит. Мне просто чуваки в ветках мемхака вселили надежду, что всё таки что-то возможно, что не такой уж и гейм кеш медленный, что не всё так плохо, что должно работать.... =(
17
ну смори потом эту стрингу в прелоад и от туда эту стрингу получаешь
If(locplayer=player(0)){
_x=mouseposx
}
preload(_x)
_x=getpreload()
preloadclear()
ну накрайняк уже записывать в файл и от туда преладить
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.