XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
DualShock

offline
Опыт: 5,023
Активность:
GetLatency
Когда то давно в академии я спрашивал: можно ли отследить пинг в варкрафте? Как ни странно мне ответили нет. Но вот совершенно случайным образом наткнулся на эту либу, которая позволяет это отловить:
((код jass
library GetLatency initializer OnInit

globals
private constant real PERIOD=0.7
private constant real MAX_TIME=1000000.0
endglobals

globals
private gamecache gc
private string array Number
private timer GameTimer
endglobals

private function Modules takes real r returns integer
if r < 0. then
return R2I(-r)
endif
return R2I(r)
endfunction

function GetLatency takes player source, player object returns integer
return Modules(GetStoredReal(gc,"Test",Number[GetPlayerId(source)]) - GetStoredReal(gc,"Test",Number[GetPlayerId(object)]))
endfunction

private function Update takes nothing returns nothing
local integer i = GetPlayerId(GetLocalPlayer())
call StoreReal(gc,"Test",Number[i],TimerGetRemaining(GameTimer) * 100.)
call SyncStoredReal(gc,"Test",Number[i])
endfunction

private function OnInit takes nothing returns nothing
set Number[0] = "Player 1"
set Number[1] = "Player 2"
set Number[2] = "Player 3"
set Number[3] = "Player 4"
set Number[4] = "Player 5"
set Number[5] = "Player 6"
set Number[6] = "Player 7"
set Number[7] = "Player 8"
set Number[8] = "Player 9"
set Number[9] = "Player 10"
set Number[10] = "Player 11"
set Number[11] = "Player 12"

set GameTimer = CreateTimer()
call TimerStart(GameTimer,MAX_TIME,false,null)

call FlushGameCache(InitGameCache("GetLatency"))
set gc = InitGameCache("GetLatency")

call TimerStart(CreateTimer(),PERIOD,true,function Update)
endfunction

endlibrary
))
Тестил в гарене с двумя компами пинг показывал, но некорректно : 62, 72, 0 ...
Заметил эту фичу в очередном апдейте любимой тд-шки, версия открытая, собсна код от туда же.
Обсуждаем, как это работает я еще не разбирал написал сразу тут
Старый 09.05.2013, 23:15
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Забавно, если кэш реально имеет отклик до сервера отдельный, то всё должно нормально работать.
Старый 09.05.2013, 23:28
IceFog

online
Опыт: 6,486
Активность:
Похоже, в этой либе пытаются определить задержку игрока, в зависимости от его скорости синхронизации данных.
Старый 09.05.2013, 23:30
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Караваса сильный кодер, но он же забил на элемент? то есть это кастомная версия на опенсорсе?
Старый 09.05.2013, 23:30
DualShock

offline
Опыт: 5,023
Активность:
Clamp:
Караваса сильный кодер, но он же забил на элемент? то есть это кастомная версия на опенсорсе?
да давно забил насколько я знаю, но на офф сайте написано что теперь варкрафт версией занимается нейкий kingkingyyk3
Старый 09.05.2013, 23:34
DioD

offline
Опыт: 45,134
Активность:
ничего общего с пингом эта либа не имеет и показывает на самом деле погоду.
Старый 10.05.2013, 06:27
Zetox

offline
Опыт: 1,738
Активность:
я где-то создавал тему, тем отслеживалось время пинга + задержка компьютера. А в карте gondar wars отслеживается хост, по подобной системе.
Старый 10.05.2013, 14:18
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 20:56.