- 6
- 0
Здравствуйте.
Представим, что у нас есть клиент с установленным модом и какой-то сервер. На сервере есть мини-игра, суть которой в том, что на экране в титле появляются цифры от 1 до 6 (своеобразная рулетка), а задача игроков - нажать ПКМ в тот момент, когда на экране цифра 6 (нажать можно в любой момент, но от цифры зависит количество полученных очков, поэтому чем больше, тем лучше). Так как я ещё новичок в разработке модов, идея, которая пришла мне в голову, как реализовать это с помощью мода, такая:
1. Отслеживать каждый тик, что находится в титле у игрока.
2. Если титл равен "6", отправить пакет CPacketPlayerTryUseItem (или вызвать метод mc.playerController.processRightClick, пробовал и то, и то, результат примерно одинаковый).
Цифры меняются примерно раз в 4 тика (по моим подсчётам). Всё, что я описал выше, у меня реализовано и работает, то есть мод фиксирует "нужный" титл и отправляет пакет на сервер. Однако проблема в том, что результат моего действия (ответ от сервера) не тот, который мне нужен - если, например, на экране цифры меняются в порядке 4-6-2-3, то во время шестёрки пакет отправится, но сервер отправляет сообщение о том, что я "выбил" двойку или тройку, то есть словно я отправил пакет на несколько тиков позже.
Я не понимаю, можно ли это вообще как-то исправить. У меня есть подозрение, что такое поведение зависит от скорости интернет-соединения и никак, кроме как переехать к хосту сервера, исправить я это не могу.
Можно ли, например, как-то отправить такой пакет, который даст серверу понять, что я "нажал ПКМ" именно когда на экране была шестёрка? Такое вообще возможно? Если нет, то что делать?
Не думаю, что здесь необходимо прикреплять какой-то код, но если надо будет, то прикреплю.
Представим, что у нас есть клиент с установленным модом и какой-то сервер. На сервере есть мини-игра, суть которой в том, что на экране в титле появляются цифры от 1 до 6 (своеобразная рулетка), а задача игроков - нажать ПКМ в тот момент, когда на экране цифра 6 (нажать можно в любой момент, но от цифры зависит количество полученных очков, поэтому чем больше, тем лучше). Так как я ещё новичок в разработке модов, идея, которая пришла мне в голову, как реализовать это с помощью мода, такая:
1. Отслеживать каждый тик, что находится в титле у игрока.
2. Если титл равен "6", отправить пакет CPacketPlayerTryUseItem (или вызвать метод mc.playerController.processRightClick, пробовал и то, и то, результат примерно одинаковый).
Цифры меняются примерно раз в 4 тика (по моим подсчётам). Всё, что я описал выше, у меня реализовано и работает, то есть мод фиксирует "нужный" титл и отправляет пакет на сервер. Однако проблема в том, что результат моего действия (ответ от сервера) не тот, который мне нужен - если, например, на экране цифры меняются в порядке 4-6-2-3, то во время шестёрки пакет отправится, но сервер отправляет сообщение о том, что я "выбил" двойку или тройку, то есть словно я отправил пакет на несколько тиков позже.
Я не понимаю, можно ли это вообще как-то исправить. У меня есть подозрение, что такое поведение зависит от скорости интернет-соединения и никак, кроме как переехать к хосту сервера, исправить я это не могу.
Можно ли, например, как-то отправить такой пакет, который даст серверу понять, что я "нажал ПКМ" именно когда на экране была шестёрка? Такое вообще возможно? Если нет, то что делать?
Не думаю, что здесь необходимо прикреплять какой-то код, но если надо будет, то прикреплю.