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 путь, кешь, но кешь не годится для таких динамических синхов, он медленный и ненадежный. Других способов нет.
Ни одна добрая фея не сделала библиотеку которая бы сделала возможным то что вы хотите, не смотря на не однократные попытки...
`
ОЖИДАНИЕ РЕКЛАМЫ...
5
17
6 лет назад
Отредактирован ledoed
5
ну смари серв такой отправляет запрос,и спрашивает клиента"чувак че у тя там по x,а он ему у меня 0",а серв на него с вылуплеными глазами смотрит и говорит "а у меня 1000,и мне надо обьект передвинуть на эту координату",а клиент такой "ты бухой?",а серв "в чс троля".
0
32
6 лет назад
0
if GetLocalPlayer() == Player(0)//GetOwningPlayer(u)
x=GetMouseTerrainX()
y=GetMouseTerrainY()
BJDebugMsg("Условие GetlocalP"+R2S(x))//выводит 0
BJDebugMsg("Условие GetlocalP"+R2S(GetMouseTerrainY()))//выводит значение
endif
А эта дичь в сингле, вообще ужас прост =(, я уже ничего не понимаю
0
17
6 лет назад
0
в сринг пробни сохранить типо
string _x = R2S(GetMouseTerrainX())
а потом получай так
x= S2R(_x)
0
23
6 лет назад
0
чтобы не нарушали как обычно гласят его не должен получат данные если вы его сделаете так
local real x = 0.
if GetLocalPlayer() == Player(0) then
set x = 1000.
endif
SetPos... // Тут уже позиция тогда не будет нарушено десихнка
но если его игрок тыкнет или двинет то уже десихнр так что нет смысла
0
32
6 лет назад
0
Эмм - никак, ничего нельзя сделать с кодами мыши хоть ты лопни,ибо ты ломаешь синхронизацию, нельзя сделать никакие от первого лица стрелялки.
0
32
6 лет назад
0
ledoed, ну да так то работает, но в сингле, в локалке же десинхрон моментом =(
0
32
6 лет назад
0
Bergi_Bear, разумеется десинхронизация, ты вдуматься как может продолжатся игра если у тебя ы идешь в лево, а у твоего соперника стоишь на месте ( допустим).
Неужели непонятно что координаты мыши или камеры никак нельзя использовать для глобальных действий, все приказы, пути, здоровье, опыт, абилки - все синхронизируется, шаг в сторону = десинх.
0
32
6 лет назад
Отредактирован Берги
0
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го игрока по тем же координатам, что передал первый?
0
32
6 лет назад
Отредактирован quq_CCCP
0
Bergi_Bear, ага, всего то синхронизированы? Так просто бля, что бились над этим 15 лет наверное...
Как ты собрался что либо синхронизировать? У тебя есть только gamecache, который сработает только в потоке триггера и только не сразу, синхроеизация вещь не мгновенная и вейт надо подольше, иначе те кто не успел - отвалятся....
Ну а т.к быстрый синх с уровня jass невозможен то и управление клавишами и отловы курсоров с целью управления Юнитами тоже невозможны, синхроеизация не только медленная, она еще рандомная, нельзя узнать сколько потребуется времени на синхронизацию...
Синхать можно сейвкоды, к примеру в начале игры пока н кто не двигается и в рпгшке все грузят персонажей, секунд 40, а в игре курсор ловить постоянно не прокатит, я вроде доступно описал почему? В теме с мемхаком раза три мусолилось.
0
32
6 лет назад
0
quq_CCCP, бились бились, я не вижу попыток биться, я вижу только твои сообщения в каждом посте, о невозможности этого, написал бы уже статью...
0
32
6 лет назад
0
Bergi_Bear, флаг в руки идти дальше ловить десинхи, если не понимаешь почему...
0
32
6 лет назад
0
quq_CCCP, не хочу спорить с тобой, ты разумеется прав и знаешь больше, я в эту синхронизацию даже в Unity не вдолбился, решил добить варкрафт. Правильно ли я понимаю, что допустим данные которые делает триггер на обоих компах каждые 0,01 допустим даже всегда успешно просинхронизированы потому что выполняются одновременно и одинаково? а теоретически курсор заработает если его синхронизировать через гейм кеш допустим каждые 5 сек?, хотя это уже ничего не решит. Мне просто чуваки в ветках мемхака вселили надежду, что всё таки что-то возможно, что не такой уж и гейм кеш медленный, что не всё так плохо, что должно работать.... =(
0
17
6 лет назад
0
ну смори потом эту стрингу в прелоад и от туда эту стрингу получаешь
If(locplayer=player(0)){
_x=mouseposx
}
preload(_x)
_x=getpreload()
preloadclear()
ну накрайняк уже записывать в файл и от туда преладить
0
32
6 лет назад
0
Bergi_Bear, нет, невозможно, курсоры, да что там все визуалки, вся видеопамять твоего компа если тебе так понятнее не синхронизируется, синхронизируются лишь вектора приказов, т.е ты кликнул идти, через N времени хост пересчитал все очереди приказов и раздал команды кто и как дальше движется, синхронизировать курсор не получится, т.к ты не сможешь так часто синхать и так много данных, с уровня.. Jass. Есть лишь 1 путь, кешь, но кешь не годится для таких динамических синхов, он медленный и ненадежный. Других способов нет.
Ни одна добрая фея не сделала библиотеку которая бы сделала возможным то что вы хотите, не смотря на не однократные попытки...
Принятый ответ
0
17
6 лет назад
0
но сделать придеться много функций
0
32
6 лет назад
0
Ах да. Еще кешь нужно синхронизировать только в действии триггера и желательно чтобы пока идет синх ничего не происходило, реализация есть в статье про getlocalplayer, и там описано что это небыстро и ненадежно.
0
17
6 лет назад
0
кста попробкй не замарачиваться с координатами а лови дельту от мыхи и для каждого игрока свой сохран файл,тоесть если те над управление игрока 9 проверить то файл должен называтья "Файл9"
0
32
6 лет назад
Отредактирован Берги
0
ledoed, вот зачем ты вселяешь надежду XD, я же уже почти всё понял (что это не возможно и почему), но хочу посмотреть как себя прелоад поведёт, в моём случае тут всё проще, такими возможностями сможет лишь 1 игрок обладать а не несколько
0
17
6 лет назад
Отредактирован ledoed
0
да не моно на всех вот пимер
MouseX1{
поворот для игрока 1 по положительному х
}
Mouse_X1{
по отрицательному x
}
для y индечично
смори поварачивать нужно не на динамическое кол,а допустим 100 в сек (а в функции итерполировать буш )
и вызывать эти функции с прелоада
и 2 файла для X,Y для одного игрока
ну таймеры само собой дял игроков должны не в с одинаковым там лайном робить иначе лаги сильней будут
кста а их хэша эти значения ваще моно получать?
0
32
6 лет назад
0
Ну всё, я успокоился, прелоад работает в целом на десинх его и не стал проверять, потому что он в момент запроса, когда читает из файла делает фриз на 1 секунду XD, это конечно забавно, если он и в локалке будет работать даже через такой лаг. ledoed, а про что ты вообще говорил? Дельта от мышки?
0
17
6 лет назад
Отредактирован ledoed
0
dx = x(текущее положение мыхи)-centrx(где центр представим это как 0)
if(dx<100&&dx>-100){
это для того чтобы не дергался на каждое вздергивание мыхи
}elseif(dx>100){
Preload(R2S("поворот в право"))
}elseif(dx<-100){
Preload(R2S("поворот влево"))
}
100 это абстрактное значение для тебя там будет свое
в локалке тести иначе игра на паузу ставиться пока не подгрузит нужный файл
ну и вконце концов моно мега извратом замутить 3д фпс шутан
тут дет статься была насчет абилы артелерия,где она чекает во время работы,короче суть такова создаешь перед камерой стену невидимых юнитов, а артелерия чекает их и в зависимости от дамика поворачиваешь камеру,также и дамиков переносишь в зависимости от направления камеры
0
32
6 лет назад
Отредактирован Берги
0
ledoed, да не делаю я шута, с чего вы взяли, может я хочу пэинт мультиплееровский под варом сделать, я вот все 15 лет хочу добраться до курсора, даже забросил чутка, возвращаюсь а тут мемхаки и рендерэджи, как 2 года уже, кстати да я и забыл что в локалке, то прелоад не будет лагать. в моём случае да обязательно надо двигать юнита мышкой ибо Setunitlookat может смотреть только на юнита, вот я и двигаю курсором дамми юнита. (и всё прекрасно работает, только не в локалке)
Прелоад тоже десинхронит, пошло оно всё нафиг, мне уже смешно, но так и должно быть, ведь у каждого игрока создаётся своё файл прелоада, и в нём у одного 0 записан а у другого 238,787, и естественно что при загрузке рассинхрон...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.