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го игрока по тем же координатам, что передал первый?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.