Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Увеличение TimeOut игрока.

Тема в разделе "Помощь", создана пользователем MOR_IV, 4 ноя 2016.

  1. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Проблема заключается в том, что игроки зайдя на сервер получают текстуры от сервера.
    У многих "калькуляторов" этот процесс затягивается.... Во время применения текстур клиент не шлёт пакеты(висит). Так вот сервер отключает игрока через 30 секунд. Как увеличить это время? Рассмотрю все варианты.
     
  2. Хостинг MineCraft
    <
  3. SaratovGermania

    SaratovGermania Новичок

    Баллы:
    6
    Имя в Minecraft:
    Hermanius
    есть специальный конфиг отвечающее за это
     
  4. _MediaNik_

    _MediaNik_ Активный участник Пользователь

    Баллы:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    Да ну!!!Название нужно, понимаешь?НАЗВАНИЕ!!!
     
  5. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Проблема в том, что в конфиге этого нет.
     
  6. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Может плагином можно имитировать пакеты от игрока?
     
  7. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    timeout-time: 60
     
  8. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Это где такое?[DOUBLEPOST=1478337636,1478305036][/DOUBLEPOST]@alexandrage , так это время, через которое сервер будет считаться зависшим и перезапустится.
    Других идей нет? Даже самые безумные. Надо очень.
     
  9. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    ^^
    Попробуй PacketPlayOutKeepAlive
     
  10. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    .[DOUBLEPOST=1478563040,1478562469][/DOUBLEPOST]
    Хорошая мысль. Но как мне подкинуть серверу пакет от имени игрока?
    Потому как пакет идёт на клиент с id, и должен вернуться с тем же id. Из этого следует, что мне надо поймать исходящий пакет, взять id, вернуть серверу пакет с этим id по каналу этого игрока.
     
  11. Vlad_007WOLFYATINA

    Vlad_007WOLFYATINA Активный участник Пользователь

    Баллы:
    61
    Лично мне помогло в AuthMe (Bukkit)
    antiBotSensibility: Нужное вам время
    # Duration in minutes of the antibot automatic system
    antiBotDuration: Нужное вам время
    Поставить здесь.
    antiBotSensibility: 80
    # Duration in minutes of the antibot automatic system
    antiBotDuration: 80
    Теперь вместо стандартных 10 секунд стало 80. Мне помогло, всезнайки, которые пишут: куйня все это, знайте:
    Мне лично ПОМОГЛО!
     
  12. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    спасибо, но ответ был уже дан.
    Использовать Protocollib чтобы отправить пакет PacketPlayInKeepAlive
    ProtocolLibrary.getProtocolManager()::receiveClientPacket
     
  13. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Да. Дан. Но не помогло почему-то. Пакет отсылается, сервер получает его, id в пакете такой-же что и высылает сервер, но таймаут 30 секунд всё равно...[DOUBLEPOST=1478938528,1478938492][/DOUBLEPOST]Могу в личку сорцы кинуть. Правда они с дебагом, его потом вырезать.
     
  14. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    А можно скриншот когда игрок "вылетает"?
     
  15. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Кстати пробовал отправлять и последний id и все что сервер отсылал... Эффект один
     
  16. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
     
  17. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
  18. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Если это вшито в бакит - копай его исходники и через рефлексию доставай. А если в клиент - то... Никак по сути.
     
  19. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Клиент в этот момент висит. То есть думать по идее не может. Когда отвисает - думает что он еще на сервере.
    Рубит всё на корню бакит. Пробовал и без банджи. Такое ощущение, что не только в этом пакете дело.
     
  20. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    В клиенте дело. Во время подгрузки даже мира клиент посылает пакет:
    Код:
    public class GuiDownloadTerrain extends GuiScreen
    {
        private NetHandlerPlayClient netHandlerPlayClient;
        private int progress;
    
        public GuiDownloadTerrain(final NetHandlerPlayClient netHandler) {
            super();
            this.netHandlerPlayClient = netHandler;
        }
    
        @Override
        protected void keyTyped(final char typedChar, final int keyCode) throws IOException {
        }
    
        @Override
        public void initGui() {
            this.buttonList.clear();
        }
    
        @Override
        public void updateScreen() {
            ++this.progress;
            if (this.progress % 20 == 0) {
                this.netHandlerPlayClient.addToSendQueue(new C00PacketKeepAlive());
            }
        }
    
        @Override
        public void drawScreen(final int mouseX, final int mouseY, final float partialTicks) {
            this.drawBackground(0);
            this.drawCenteredString(this.fontRendererObj, I18n.format("multiplayer.downloadingTerrain", new Object[0]), this.width / 2, this.height / 2 - 50, 16777215);
            super.drawScreen(mouseX, mouseY, partialTicks);
        }
    
        @Override
        public boolean doesGuiPauseGame() {
            return false;
        }
    }
    Код:
    public class C00PacketKeepAlive implements Packet<INetHandlerPlayServer>
    {
        private int key;
      
        public C00PacketKeepAlive() {
            super();
        }
      
        public C00PacketKeepAlive(final int key) {
            super();
            this.key = key;
        }
      
        @Override
        public void processPacket(final INetHandlerPlayServer handler) {
            handler.processKeepAlive(this);
        }
      
        @Override
        public void readPacketData(final PacketBuffer buf) throws IOException {
            this.key = buf.readVarIntFromBuffer();
        }
      
        @Override
        public void writePacketData(final PacketBuffer buf) throws IOException {
            buf.writeVarIntToBuffer(this.key);
        }
      
        public int getKey() {
            return this.key;
        }
      
        @Override
        public /* bridge */ void processPacket(final INetHandler netHandler) {
            this.processPacket((INetHandlerPlayServer)netHandler);
        }
    }
    [DOUBLEPOST=1478939369,1478939129][/DOUBLEPOST]А вот и сам кик в клиенте:
    Код:
        @Override
        public void update() {
            this.field_147366_g = false;
            ++this.networkTickCount;
            this.serverController.theProfiler.startSection("keepAlive");
            if (this.networkTickCount - this.lastSentPingPacket > 40L) {
                this.lastSentPingPacket = this.networkTickCount;
                this.lastPingTime = this.currentTimeMillis();
                this.field_147378_h = (int)this.lastPingTime;
                this.sendPacket(new S00PacketKeepAlive(this.field_147378_h));
            }
            this.serverController.theProfiler.endSection();
            if (this.chatSpamThresholdCount > 0) {
                --this.chatSpamThresholdCount;
            }
            if (this.itemDropThreshold > 0) {
                --this.itemDropThreshold;
            }
            if (this.playerEntity.getLastActiveTime() > 0L && this.serverController.getMaxPlayerIdleMinutes() > 0 && MinecraftServer.getCurrentTimeMillis() - this.playerEntity.getLastActiveTime() > this.serverController.getMaxPlayerIdleMinutes() * 1000 * 60) {
                this.kickPlayerFromServer("You have been idle for too long!");
            }
        }
    [DOUBLEPOST=1478939553][/DOUBLEPOST]@MOR_IV
    Скорее всего рандомное число в пакете это время последнего пинга с сервером.
    Так что с ним надо химичить, скорее всего...
     
  21. Автор темы
    MOR_IV

    MOR_IV Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    MOR_IV
    Тогда я не врубаюсь. Клиент применяет ТЕКСТУРЫ от сервера и висит. Его рубит сервер, по таймауту.
    Как может клиент рвать канал, если он висит? Или срабатывает шедулер раньше чем до клиента доходит пакет?[DOUBLEPOST=1478939651,1478939608][/DOUBLEPOST]
    Врятли, потому как я за ним смотрел, оно может как быть больше, так и меньше.
     

Поделиться этой страницей