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
ну смари серв такой отправляет запрос,и спрашивает клиента"чувак че у тя там по x,а он ему у меня 0",а серв на него с вылуплеными глазами смотрит и говорит "а у меня 1000,и мне надо обьект передвинуть на эту координату",а клиент такой "ты бухой?",а серв "в чс троля".
33
if GetLocalPlayer() == Player(0)//GetOwningPlayer(u)
x=GetMouseTerrainX()
y=GetMouseTerrainY()
BJDebugMsg("Условие GetlocalP"+R2S(x))//выводит 0
BJDebugMsg("Условие GetlocalP"+R2S(GetMouseTerrainY()))//выводит значение
endif
А эта дичь в сингле, вообще ужас прост =(, я уже ничего не понимаю
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()
ну накрайняк уже записывать в файл и от туда преладить
32
Bergi_Bear, нет, невозможно, курсоры, да что там все визуалки, вся видеопамять твоего компа если тебе так понятнее не синхронизируется, синхронизируются лишь вектора приказов, т.е ты кликнул идти, через N времени хост пересчитал все очереди приказов и раздал команды кто и как дальше движется, синхронизировать курсор не получится, т.к ты не сможешь так часто синхать и так много данных, с уровня.. Jass. Есть лишь 1 путь, кешь, но кешь не годится для таких динамических синхов, он медленный и ненадежный. Других способов нет.
Ни одна добрая фея не сделала библиотеку которая бы сделала возможным то что вы хотите, не смотря на не однократные попытки...
Принятый ответ
32
Ах да. Еще кешь нужно синхронизировать только в действии триггера и желательно чтобы пока идет синх ничего не происходило, реализация есть в статье про getlocalplayer, и там описано что это небыстро и ненадежно.
17
кста попробкй не замарачиваться с координатами а лови дельту от мыхи и для каждого игрока свой сохран файл,тоесть если те над управление игрока 9 проверить то файл должен называтья "Файл9"
33
ledoed, вот зачем ты вселяешь надежду XD, я же уже почти всё понял (что это не возможно и почему), но хочу посмотреть как себя прелоад поведёт, в моём случае тут всё проще, такими возможностями сможет лишь 1 игрок обладать а не несколько
17
да не моно на всех вот пимер
MouseX1{
поворот для игрока 1 по положительному х
}
Mouse_X1{
по отрицательному x
}
для y индечично
смори поварачивать нужно не на динамическое кол,а допустим 100 в сек (а в функции итерполировать буш )
и вызывать эти функции с прелоада
и 2 файла для X,Y для одного игрока
ну таймеры само собой дял игроков должны не в с одинаковым там лайном робить иначе лаги сильней будут
кста а их хэша эти значения ваще моно получать?
33
Ну всё, я успокоился, прелоад работает в целом на десинх его и не стал проверять, потому что он в момент запроса, когда читает из файла делает фриз на 1 секунду XD, это конечно забавно, если он и в локалке будет работать даже через такой лаг. ledoed, а про что ты вообще говорил? Дельта от мышки?
17
dx = x(текущее положение мыхи)-centrx(где центр представим это как 0)
if(dx<100&&dx>-100){
это для того чтобы не дергался на каждое вздергивание мыхи
}elseif(dx>100){
Preload(R2S("поворот в право"))
}elseif(dx<-100){
Preload(R2S("поворот влево"))
}
100 это абстрактное значение для тебя там будет свое
в локалке тести иначе игра на паузу ставиться пока не подгрузит нужный файл
ну и вконце концов моно мега извратом замутить 3д фпс шутан
тут дет статься была насчет абилы артелерия,где она чекает во время работы,короче суть такова создаешь перед камерой стену невидимых юнитов, а артелерия чекает их и в зависимости от дамика поворачиваешь камеру,также и дамиков переносишь в зависимости от направления камеры
33
ledoed, да не делаю я шута, с чего вы взяли, может я хочу пэинт мультиплееровский под варом сделать, я вот все 15 лет хочу добраться до курсора, даже забросил чутка, возвращаюсь а тут мемхаки и рендерэджи, как 2 года уже, кстати да я и забыл что в локалке, то прелоад не будет лагать. в моём случае да обязательно надо двигать юнита мышкой ибо Setunitlookat может смотреть только на юнита, вот я и двигаю курсором дамми юнита. (и всё прекрасно работает, только не в локалке)
Прелоад тоже десинхронит, пошло оно всё нафиг, мне уже смешно, но так и должно быть, ведь у каждого игрока создаётся своё файл прелоада, и в нём у одного 0 записан а у другого 238,787, и естественно что при загрузке рассинхрон...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.