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

  • Автор темы Автор темы MOR_IV
  • Дата начала Дата начала

MOR_IV

Активный участник
Пользователь
Баллы
88
Ник в Minecraft
MOR_IV
Проблема заключается в том, что игроки зайдя на сервер получают текстуры от сервера.
У многих "калькуляторов" этот процесс затягивается.... Во время применения текстур клиент не шлёт пакеты(висит). Так вот сервер отключает игрока через 30 секунд. Как увеличить это время? Рассмотрю все варианты.
 
Может плагином можно имитировать пакеты от игрока?
 
.
Хорошая мысль. Но как мне подкинуть серверу пакет от имени игрока?
Потому как пакет идёт на клиент с id, и должен вернуться с тем же id. Из этого следует, что мне надо поймать исходящий пакет, взять id, вернуть серверу пакет с этим id по каналу этого игрока.
 
Лично мне помогло в 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. Мне помогло, всезнайки, которые пишут: куйня все это, знайте:
Мне лично ПОМОГЛО!
 
Лично мне помогло в 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. Мне помогло, всезнайки, которые пишут: куйня все это, знайте:
Мне лично ПОМОГЛО!
спасибо, но ответ был уже дан.
Использовать Protocollib чтобы отправить пакет PacketPlayInKeepAlive
ProtocolLibrary.getProtocolManager()::receiveClientPacket
 
Да. Дан. Но не помогло почему-то. Пакет отсылается, сервер получает его, id в пакете такой-же что и высылает сервер, но таймаут 30 секунд всё равно...
Могу в личку сорцы кинуть. Правда они с дебагом, его потом вырезать.
 
Да. Дан. Но не помогло почему-то. Пакет отсылается, сервер получает его, id в пакете такой-же что и высылает сервер, но таймаут 30 секунд всё равно...
Могу в личку сорцы кинуть. Правда они с дебагом, его потом вырезать.
А можно скриншот когда игрок "вылетает"?
 
Кстати пробовал отправлять и последний id и все что сервер отсылал... Эффект один
 
Клиент в этот момент висит. То есть думать по идее не может. Когда отвисает - думает что он еще на сервере.
Рубит всё на корню бакит. Пробовал и без банджи. Такое ощущение, что не только в этом пакете дело.
 
Клиент в этот момент висит. То есть думать по идее не может. Когда отвисает - думает что он еще на сервере.
Рубит всё на корню бакит. Пробовал и без банджи. Такое ощущение, что не только в этом пакете дело.
В клиенте дело. Во время подгрузки даже мира клиент посылает пакет:
Java:
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;
    }
}
Java:
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);
    }
}

А вот и сам кик в клиенте:
Java:
    @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!");
        }
    }

@MOR_IV
Скорее всего рандомное число в пакете это время последнего пинга с сервером.
Так что с ним надо химичить, скорее всего...
 
Тогда я не врубаюсь. Клиент применяет ТЕКСТУРЫ от сервера и висит. Его рубит сервер, по таймауту.
Как может клиент рвать канал, если он висит? Или срабатывает шедулер раньше чем до клиента доходит пакет?
@MOR_IV
Скорее всего рандомное число в пакете это время последнего пинга с сервером.
Так что с ним надо химичить, скорее всего...
Врятли, потому как я за ним смотрел, оно может как быть больше, так и меньше.
 
Назад
Верх Низ