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 путь, кешь, но кешь не годится для таких динамических синхов, он медленный и ненадежный. Других способов нет.
Ни одна добрая фея не сделала библиотеку которая бы сделала возможным то что вы хотите, не смотря на не однократные попытки...
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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()
ну накрайняк уже записывать в файл и от туда преладить
32
Bergi_Bear, нет, невозможно, курсоры, да что там все визуалки, вся видеопамять твоего компа если тебе так понятнее не синхронизируется, синхронизируются лишь вектора приказов, т.е ты кликнул идти, через N времени хост пересчитал все очереди приказов и раздал команды кто и как дальше движется, синхронизировать курсор не получится, т.к ты не сможешь так часто синхать и так много данных, с уровня.. Jass. Есть лишь 1 путь, кешь, но кешь не годится для таких динамических синхов, он медленный и ненадежный. Других способов нет.
Ни одна добрая фея не сделала библиотеку которая бы сделала возможным то что вы хотите, не смотря на не однократные попытки...
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.