как присвоить локальные значения игрока в глобальные переменные?
(не путать с local внутри функций)
т.е. например у игрока стоит -zoom 2500
но это у него только локально, и другие игроки не знают о его зуме
if GetLocalPlayer()==Player(i-1) then
set zz[i] = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
endif
как глобальной переменной zz[i] присвоить значение зума какого-то игрока?
в коде выше это конечно же будет десинхрон сразу
в принципе можно было бы через отправку сообщения в чат от игрока
а потом парсануть это сообщение из чата в переменную
только нативной функции отправки сообщения в общий чат не существует
даже новомодная BlzDisplayChatMessage и то - только в личку
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
14
1 год назад
Отредактирован host_pi
0
создать массивы точек
давай ещё раз
ты мне предлагаешь задать самому в коде переменные set X=100 set Y=200 и создать по этим координатам там же в коде юнита? так?
или как конкретно ты предлагаешь создать массив точек? пиши код

Просто возьми друга
на xgm ещё не изобрели multiwindow ?
Borodach:
))
протести создание юнита в центре камеры, с вероятностю в 98% десинхрона не будет
я это протестил ещё ДО создания этой темы
и если бы десинхрона от координат камеры не было, этой темы бы тоже не было
да даже без тестов ясно как белый день что будет десинхрон
и да, на тестах десинхрон был физический а не только в значениях переменных
и да, на разных клиентах был разный результат исполнения кода
и да, на одном клиенте был объект, а на втором клиенте не было объекта
но это не десинхрон, это просто надо "правильно" кодить. но как конкретно - за 20 коментов никто не знает , да?
)))))))))))))) пиу пиу тирлюм тирлюм )))))))) весила смишна ))))))
Borodach:
Но не проверяй значение переменных, а именно функцию в целом.
а если у вас десинхрон это не разные значения у одних и тех же переменных, а табличка "ОЖИДАНИЕ ИГРОКА" - то удачи. щас бы сидеть и ловить когда игра обнаружит несоответствие переменных и выдаст тебе табличку не сразу в моменте, а минуты через две. зато две минуты не было десинхрона ага
Borodach:
с вероятностю в 98% десинхрона не будет
это после таких советов появляются карты, которые крашат даже на стадии инициализации? а "умные" дяди советуют перезайти в лобби после скачки карты? а из новшеств в карте примерно НИЧЕГО особенного, но ты перезайди, а то вася-кодер криво накодил и обложил всё мемхаками. да?
0
18
1 год назад
0
А если сделать глобал массив чисел, куда отправлять все 2500 итп по индексу игрока, вводящего сообщение, это будет десинк? Мне кажется, что нет.
0
29
1 год назад
0
host_pi, ты куда слово паралельные из цитаты дел?
0
14
1 год назад
Отредактирован host_pi
0
ты куда
пиши код
EugeAl:
сделать глобал массив чисел, куда отправлять все 2500 итп по индексу игрока, вводящего сообщение
пример кода? имеется ввиду ставить зум по числу из чата? или что?
команды из чата не десинхронят
но задача состоит в том, чтобы получить число 2500 не из чата (путём ввода игроком этих 2500), а напрямую из настроек камеры игрока либо если такое невозможно - то признаться что такое невозможно сделать
1
32
1 год назад
1
В jass есть gamecache (кешь) и набор функций для его работы, в нем есть функции для синхронизации сохраненных в кешь данных между игроками, синхронизация кеша производится только в потоке триггера, и синхронизация не мгновенная, может понадобится несколько секунд.
Вот именно для синхронизации и нужны TriggerSleepAction и gamecache.
На сайте полно примеров работы с кешем, а так же статей по сихронизации.
0
14
1 год назад
Отредактирован host_pi
0
синхронизация не мгновенная, может понадобится несколько секунд
это не подходит. 0,2-0,5 секунды это максимально допустимый инпут лаг
quq_CCCP:
На сайте полно примеров работы с кешем, а так же статей по сихронизации
	if GetLocalPlayer()==GetOwningPlayer(s)then //взять конкретного игрока
	call StoreReal(AL,NKB(s),"MouseX",x) //засейвить мышь в хэш
	call StoreReal(AL,NKB(s),"MouseY",y)
	call SyncStoredReal(AL,NKB(s),"MouseX") //отправить кэш в синк
	call SyncStoredReal(AL,NKB(s),"MouseY")
	endif
	call StoreReal(AL,NKB(s),"MouseX",0) //перезаписать коорды всем
	call StoreReal(AL,NKB(s),"MouseY",0)
попробую покурить, посмотрю на инпут лаг
паладин перемещающийся по мыше красного игрока
о, там даже есть пример именно того что нужно
и инпут лаг как раз 0.2 сек
похоже на первое решение в этой теме, точно покурю
только видимо размер кода очень большой на всё это, измеряется сотнями строк
Среднее время синка - 0.16 секунд
о, глазомер в порядке
0
32
1 год назад
0
Тут дело в том что от игры к игре это время рандомно, бывают случаи что синх длится секунд 5, то вовсе игроки таки отваливаются.
0
14
1 год назад
Отредактирован host_pi
0
GameCacheSync 2021

Warcraft III map script
Generated by the Warcraft III World Editor
Date: Sat Nov 27 19:10:21 2021
Map Author: Unryze & quq_CCCP
а статья от N1ghtSiren

бывают случаи что синх длится секунд 5
а это зависит от количества операций? одно дело периодически передавать координаты постоянно. а другое дело - передать две координаты, скажем 1 раз в 10 секунд или 1 раз в минуту. только вопрос - сколько строк кода такое займёт. я там вижу и доп файлы в той карте "ExtraCache.dat" "text.fdf" - слишком всё это громоздко, и наверное зависит от целеполагания. когда такая фича является основой карты - это можно понять. а когда хочешь сделать просто БОНУСОМ функцию, то пару сотен строк кода и доп файлы - дороговато
0
18
1 год назад
0
host_pi, Да, по числу из чата. Зачем брать из камеры, если камера юзает число из чата?)

host_pi, А вот насчёт получения не знаю, как оно будет там работать.
0
14
1 год назад
Отредактирован host_pi
0
Да, по числу из чата.
с добрым утром, по числу из чата любой сможет
Зачем брать из камеры, если камера юзает число из чата?)
зачем брать из чата, когда можно взять из координат камеры?
ты сам пробовал хоть раз написать -создатьюнита +25724 -15876 ? попробуй
а потом попробуй 10 раз для разных координат написать
может потом ты поймешь смысол этой темы уже
если камера юзает число из чата?)
то был как пример синхронизации данных т.е вывода локального значения у локального игрока в глобальную общую переменную, но там же и указано, что такого невозможно сделать через чат, т.к. попросту на джасе нет функции написания сообщения в чат от игрока
1
15
1 год назад
1
Можно синкать через SelectUnit, он вроде как быстрее кэша.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.