Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Баги при входе в комнату
#1
При входе игрока в комнату ту у него вылетает клиент но это еще не все смена настроек тоже с багами при смене настроек комнаты то появляютьмя лишнии игроки и при переходе игрока за синих у него проподает ник
Пакет входа игрока в комнату:
Код:
writeD(slot.getId());
        writeC(slot.getState().ordinal());
        writeH(slot.getPlayer() == null ? 0 : slot.getPlayer().getRank());
        writeB(new byte[8]);
        writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo1());
        writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo2());
        writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo3());
        writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo4());
        writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 0 : slot.getPlayer().getClan().getColor());
        writeS(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? "" : slot.getPlayer().getClan().getName(), Clan.CLAN_NAME_SIZE);
        writeC(slot.getId());
        writeC(slot.getPlayer().getName().length());
        writeH(0);
        writeC(0);
        writeH(slot.getPlayer().getName().length()+1);
        writeS(slot.getPlayer() == null ? "" : slot.getPlayer().getName());
        writeC(slot.getPlayer() == null ? 0 : slot.getPlayer().getColor());
Ответ
#2
slawa560, PROTOCOL_ROOM_GET_SLOTINFO_ACK ошибки
Ответ
#3
slawa560;412610 Написал:writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo1());
writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo2());
writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo3());
writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo4());

nichoci Всегда интересовало, что это такое?
Ответ
#4
PROGRAMMATOR, Это творчество, человек подходит с умом.:redlol:
slawa560, Делай дамп пакета, или разберай через Ида.
Те где 8 байт в пропуске:
int clanId
int ClanRole
Ответ
#5
Смотри рум инфо
Код:
public class SM_ROOM_INFO extends ServerPacket {

    private final Room room;

    public SM_ROOM_INFO(Room room) {
        super(0xF15);
        this.room = room;
    }

    @Override
    public void writeImpl() {

        if (room.getRoomSlotByPlayer(room.getLeader()) == null)
            room.setNewLeader();

        writeD(room.getRoomSlotByPlayer(room.getLeader()).getId());
        for (int i = 0; i < 16; i++) {
            RoomSlot slot = room.getRoomSlot(i);
            writeC(slot.getState().ordinal());
            writeC(slot.getPlayer() == null ? 0 : slot.getPlayer().getRank());
            writeB(new byte[9]); // unk
            writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo1());
            writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo2());
            writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo3());
            writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo4());
            writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 0 : slot.getPlayer().getClan().getColor());
            writeB(new byte[6]); // unk
            writeS(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? "" : slot.getPlayer().getClan().getName(), Clan.CLAN_NAME_SIZE);
            writeH(0); // unk
            writeC(0); // unk
            writeC(0);
        }
    }
}
Ответ
#6
slawa560, это PROTOCOL_ROOM_GET_SLOTINFO_ACK а не ROOM_INFO, здесь же нет информации о комнате, только о слотах. Да и не шлется он при входе в комнату.

Тот, кто входит, получает PROTOCOL_ROOM_JOIN_ACK (остальные получают PROTOCOL_ROOM_GET_SLOTONEINFO_ACK), так что не там ищете.
Ответ
#7
slawa560, какой клиент используешь?
И версию клиента
Ответ
#8
пб тахади и бразильский клиент там все опкоды оденаковые

Добавлено через 2 минуты
а вот и джоин рум
Код:
for (RoomSlot slot : room.getRoomSlots()) {
                if (slot.getPlayer() == null) {
                    writeC(slot.getState().ordinal());
                    writeB(new byte[9]);
                    writeC(255);
                    writeC(255);
                    writeC(255);
                    writeC(255);
                    writeC(0);
                    writeB(new byte[27]);
                } else {
                    writeC((byte)(int)slot.getState().ordinal());
                        writeC(slot.getPlayer().getRank());
                        writeB(new byte[8]);
                writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo1());
                writeC(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? 255 : slot.getPlayer().getClan().getLogo2());
                writeC(slot.getPlayer() == null || slot.getPlayer().getClan() ==  null ? 255 : slot.getPlayer().getClan().getLogo3());
                writeC(slot.getPlayer() == null || slot.getPlayer().getClan() ==  null ? 255 : slot.getPlayer().getClan().getLogo4());
                        writeC(0);
                        writeB(new byte[6]);
                        writeS(slot.getPlayer() == null || slot.getPlayer().getClan() == null ? "" : slot.getPlayer().getClan().getName(), Clan.CLAN_NAME_SIZE);
                        writeD(0);
                    }
                }

                writeC((byte)room.getPlayers().size());
                for (Player player : room.getPlayers().values())
                {
                    writeC((byte)room.getRoomSlotByPlayer(player).getId());
                    writeC((byte)Player.MAX_NAME_SIZE);
                    writeS(player.getName(), Player.MAX_NAME_SIZE);
                    writeC(0); //player.getColor()
                }

                writeC((byte)room.getAiCount()); // aiCount
                writeC((byte)room.getAiLevel()); // aiLevel

            }
        }

Добавлено через 9 минут
[2016/5/30-13h:17m:40s] =============================================
[2016/5/30-13h:17m:40s] Version Log( GAME_VER_MONTH 12 GAME_VER_DAY 20 )
[2016/5/30-13h:17m:40s] Version Log( GAME VER : 1.15.23.9. )
[2016/5/30-13h:17m:40s] Version Log( UDP PROTOCOL VER : 1012.8 )
[2016/5/30-13h:17m:40s] Build Log( Dec 11 2014, 14:23:38 )
[2016/5/30-13h:17m:40s] Play Log( 5 Mon - 30 Day, 13 Hour : 17 Min)

Добавлено через 19 минут
еще какойто рум инфо
PHP код:
<?php 
public class SM_BATTLE_ROOM_INFO extends ServerPacket {

private final
Room room;

public
SM_BATTLE_ROOM_INFO(Room room) {
super(0xf08);
this.room = room;
}

@
Override
public void writeImpl() {

writeD(room.getId());
writeS(room.getName(), 0x17);
writeC((byte) room.getMapId());
writeH(0);
writeC((byte) room.getType());
writeC(5);
writeC((byte) room.getPlayers().size());
writeC((byte) room.getSlots());
writeC(5);
writeC((byte) room.getAllWeapons());
writeC((byte) room.getRandomMap());
writeC((byte) room.getSpecial());
writeS(room.getLeader().getName(), Player.MAX_NAME_SIZE);
writeD(room.getKillMask());
writeC((byte) room.getLimit());
writeC((byte) room.getSeeConf());
writeH((short) room.getAutobalans());
if ((
room.getAiCount() > 0) && (room.getAiLevel() > 0))
{
writeC((byte) room.getAiCount());
writeC((byte) room.getAiLevel());
}
}
Ответ
#9
PHP код:
<?php 
/*
* Java Server Emulator Project Blackout / PointBlank
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Authors: DarkSkeleton, sjke, Felixx
* Copyright (C) 2013 PBDevв„ў
*/

package ru.pb.game.network.client.packets.client;

import ru.pb.core.models.Player;
import ru.pb.core.models.Room;
import ru.pb.core.utils.concurrent.ThreadPoolManager;
import ru.pb.game.network.client.packets.ClientPacket;
import ru.pb.game.network.client.packets.server.SM_BATTLE_ROOM_INFO;

/**
* Пакет полной смены настроек комнаты
*
* @author: Felixx, DarkSkeleton
*/
public class CM_ROOM_CHANGE_INFO extends ClientPacket {

private
Room room;

public
CM_ROOM_CHANGE_INFO(int opcode) {
super(opcode);
}

@
Override
public void readImpl() {
room = getConnection().getRoom();
readH();
readD(); // тут всегда 0
room.setName(readS(Room.ROOM_NAME_SIZE).trim());
room.setMapId(readC());
readC(); // unk
room.setStage4v4(readC());
room.setType(readC());
readC(); // unk
readC(); // unk
room.setSlots(readC());
readC(); // unk
room.setAllWeapons(readC());
room.setRandomMap(readC());
room.setSpecial(readC());
readS(Player.MAX_NAME_SIZE);
room.setKillMask(readC());
readC(); // unk
readC(); // unk
readC(); // unk
room.setLimit(readC());
room.setSeeConf(readC());
room.setAutobalans(readH());
room.setLeader(getConnection().getPlayer());
room.addPlayer(getConnection().getPlayer());
if (
getBuf().readableBytes() > 0) {
room.setAiCount(readC());
room.setAiLevel(readC());
}

}

@
Override
public void runImpl() {
if (
getConnection().getPlayer() != null) {
ThreadPoolManager.getInstance().executeTask(new Runnable() {
@
Override
public void run() {
for (
Player member : getConnection().getRoom().getPlayers().values()) {
member.getConnection().sendPacket(new SM_BATTLE_ROOM_INFO(getConnection().getRoom()));
}
}
});
}
}
}
Ответ
#10
вы поможите мне?
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Помогите с комнатами при входе игрока вылетает клиент slawa560 2 1,278 05-23-2016, 06:38 PM
Последний пост: slawa560
  Ошибка при входе на канал Boris2105 6 1,536 02-05-2016, 05:20 PM
Последний пост: Boris2105

Перейти к форуму:


Пользователи, просматривающие эту тему: 4 Гость(ей)