Рейтинг темы:
  • 3 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Работа над Goddess of Destruction (part 3)
#21
Может кто нить дать пакет CharSelectionInfo просто искал в двух предыдущих темах его не было =(
#22
Agent50 на чьих исходах делаешь? Если фени, пиши в пм поделюсь)

Ну что не осталось "благородных", кто бы смог подтянуть, что я не так делаю, мир не грузится, выдает типа packet e1 IN_GAME
Если помог, ткни плюсеГ, это же так просто
#23
От лыжи стандарный HF пакет подходит.
#24
Paka Написал:От лыжи стандарный HF пакет подходит.

какой пакет, к чему подходит, к кому относится Big Grin
Если помог, ткни плюсеГ, это же так просто
#25
есть у кого папка систем с протоколом 393,выложите пож если есть,ато я пробовал убить гг вроде убил,и пропатчил,но при смене ип в l2.ini л2 не запускается.
#26
Ultimate Написал:какой пакет, к чему подходит, к кому относится Big Grin
Я для Agent50 написал.
#27
Ultimate,

CharacterSelectionInfo

Код:
package l2p.gameserver.serverpackets;

import l2p.Config;
import l2p.database.DatabaseUtils;
import l2p.database.FiltredPreparedStatement;
import l2p.database.L2DatabaseFactory;
import l2p.database.ThreadConnection;
import l2p.gameserver.instancemanager.PlayerManager;
import l2p.gameserver.model.CharSelectInfoPackage;
import l2p.gameserver.model.base.Experience;
import l2p.gameserver.model.items.Inventory;
import l2p.gameserver.tables.CharTemplateTable;
import l2p.gameserver.templates.L2PlayerTemplate;
import l2p.util.AutoBan;
import l2p.util.GArray;

import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CharacterSelectionInfo extends L2GameServerPacket
{
    // d (SdSddddddddddffdQdddddddddddddddddddddddddddddddddddddddffdddchhd)
    private static Logger _log = Logger.getLogger(CharacterSelectionInfo.class.getName());
    private String _loginName;
    private int _sessionId;
    private CharSelectInfoPackage[] _characterPackages;

    public CharacterSelectionInfo(String loginName, int sessionId)
    {
        _sessionId = sessionId;
        _loginName = loginName;
        _characterPackages = loadCharacterSelectInfo(loginName);
        if(getClient() != null)
        {
            getClient().setCharSelection(_characterPackages);
        }
    }

    public CharSelectInfoPackage[] getCharInfo()
    {
        return _characterPackages;
    }

    @Override
    protected final void writeImpl()
    {
        int size = _characterPackages != null ? _characterPackages.length : 0;
        writeC(0x09);
        writeD(size);
        writeD(0x07); //Kamael, 0x07 ?
        writeC(0x00); //Kamael разрешает или запрещает создание РёРіСЂРѕРєРѕРІ
        long lastAccess = 0L;
        int lastUsed = -1;
        for(int i = 0; i < size; i++)
        {
            if(lastAccess < _characterPackages[i].getLastAccess())
            {
                lastAccess = _characterPackages[i].getLastAccess();
                lastUsed = i;
            }
        }
        for(int i = 0; i < size; i++)
        {
            CharSelectInfoPackage charInfoPackage = _characterPackages[i];
            writeS(charInfoPackage.getName());
            writeD(charInfoPackage.getCharId());
            writeS(_loginName);
            writeD(_sessionId);
            writeD(charInfoPackage.getClanId());
            writeD(0x00); // ??
            writeD(charInfoPackage.getSex());
            writeD(charInfoPackage.getRace());
            if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
                writeD(charInfoPackage.getClassId());
            else
                writeD(charInfoPackage.getBaseClassId());
            writeD(0x01); // active ??
            writeD(charInfoPackage.getX()); // x
            writeD(charInfoPackage.getY()); // y
            writeD(charInfoPackage.getZ()); // z
            writeF(charInfoPackage.getCurrentHp()); // hp cur
            writeF(charInfoPackage.getCurrentMp()); // mp cur
            writeD(charInfoPackage.getSp());
            writeQ(charInfoPackage.getExp());
            writeF((float)(charInfoPackage.getExp() - Experience.LEVEL[charInfoPackage.getLevel()]) / (Experience.LEVEL[charInfoPackage.getLevel() + 1] - Experience.LEVEL[charInfoPackage.getLevel()])); // High Five exp %
            writeD(charInfoPackage.getLevel());
            writeD(charInfoPackage.getKarma()); // karma
            writeD(charInfoPackage.getPk());
            writeD(charInfoPackage.getPvP());
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_REAR));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_NECK));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
            writeD(0x00);
            // writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_CLOAK));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
            writeD(0x00);
            //writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR2));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
            writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BELT));
            writeD(charInfoPackage.getHairStyle());
            writeD(charInfoPackage.getHairColor());
            writeD(charInfoPackage.getFace());
            writeF(charInfoPackage.getMaxHp()); // hp max
            writeF(charInfoPackage.getMaxMp()); // mp max
            long deleteTime = charInfoPackage.getDeleteTimer();
            int deletedays = 0;
            if (deleteTime > 0)
                deletedays = (int)((deleteTime-System.currentTimeMillis())/1000);
            writeD(deletedays); // days left before
            // delete .. if != 0
            // then char is inactive
            writeD(charInfoPackage.getClassId());
            if (i == _sessionId)
                writeD(0x01);
            else
                writeD(0x00); //c3 auto-select char
            
            writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect());
            writeH(0);
            writeH(0);
            //writeD(charInfoPackage.getAugmentationId());

            
            //writeD(charInfoPackage.getTransformId()); // Used to display Transformations
            writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
            
            // Freya by Vistall:
            writeD(0); // npdid - 16024    Tame Tiny Baby Kookaburra        A9E89C
            writeD(0); // level
            writeD(0); // ?
            writeD(0); // food? - 1200
            writeF(0); // max Hp
            writeF(0); // cur Hp
            
            // High Five by Vistall:
            writeD(charInfoPackage.getVitalityPoints());    // H5 Vitality
        }
    }

    public static CharSelectInfoPackage[] loadCharacterSelectInfo(String loginName)
    {
        CharSelectInfoPackage charInfopackage;
        GArray<CharSelectInfoPackage> characterList = new GArray<CharSelectInfoPackage>();
        ThreadConnection con = null;
        FiltredPreparedStatement statement = null;
        ResultSet pl_rset = null;
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("SELECT * FROM characters AS c LEFT JOIN character_subclasses AS cs ON (c.obj_Id=cs.char_obj_id AND cs.isBase=1) WHERE account_name=? LIMIT 7");
            statement.setString(1, loginName);
            pl_rset = statement.executeQuery();
            while(pl_rset.next()) // fills the package
            {
                charInfopackage = restoreChar(pl_rset, pl_rset);
                if(charInfopackage != null)
                {
                    characterList.add(charInfopackage);
                }
            }
        }
        catch(Exception e)
        {
            _log.log(Level.WARNING, "could not restore charinfo:", e);
        }
        finally
        {
            DatabaseUtils.closeDatabaseCSR(con, statement, pl_rset);
        }
        return characterList.toArray(new CharSelectInfoPackage[characterList.size()]);
    }

    private static CharSelectInfoPackage restoreChar(ResultSet chardata, ResultSet charclass)
    {
        CharSelectInfoPackage charInfopackage = null;
        try
        {
            int objectId = chardata.getInt("obj_Id");
            int classid = charclass.getInt("class_id");
            boolean female = chardata.getInt("sex") == 1;
            L2PlayerTemplate templ = CharTemplateTable.getInstance().getTemplate(classid, female);
            if(templ == null)
            {
                _log.log(Level.WARNING, "restoreChar fail | templ == null | objectId: " + objectId + " | classid: " + classid + " | female: " + female);
                return null;
            }
            String name = chardata.getString("char_name");
            charInfopackage = new CharSelectInfoPackage(objectId, name);
            charInfopackage.setLevel(charclass.getInt("level"));
            charInfopackage.setMaxHp(charclass.getInt("maxHp"));
            charInfopackage.setCurrentHp(charclass.getDouble("curHp"));
            charInfopackage.setMaxMp(charclass.getInt("maxMp"));
            charInfopackage.setCurrentMp(charclass.getDouble("curMp"));
            charInfopackage.setX(chardata.getInt("x"));
            charInfopackage.setY(chardata.getInt("y"));
            charInfopackage.setZ(chardata.getInt("z"));
            charInfopackage.setPk(chardata.getInt("pkkills"));
            charInfopackage.setPvP(chardata.getInt("pvpkills"));
            charInfopackage.setFace(chardata.getInt("face"));
            charInfopackage.setHairStyle(chardata.getInt("hairstyle"));
            charInfopackage.setHairColor(chardata.getInt("haircolor"));
            charInfopackage.setSex(female ? 1 : 0);
            charInfopackage.setExp(charclass.getLong("exp"));
            charInfopackage.setSp(charclass.getInt("sp"));
            charInfopackage.setClanId(chardata.getInt("clanid"));
            charInfopackage.setKarma(chardata.getInt("karma"));
            charInfopackage.setRace(templ.race.ordinal());
            charInfopackage.setClassId(classid);
            long deletetime = chardata.getLong("deletetime");
            int deletedays = 0;
            if(Config.DELETE_DAYS > 0)
            {
                if(deletetime > 0)
                {
                    deletetime = (int) (System.currentTimeMillis() / 1000 - deletetime);
                    deletedays = (int) (deletetime / 3600 / 24);
                    if(deletedays >= Config.DELETE_DAYS)
                    {
                        PlayerManager.deleteFromClan(objectId, charInfopackage.getClanId());
                        PlayerManager.deleteCharByObjId(objectId);
                        return null;
                    }
                    deletetime = Config.DELETE_DAYS * 3600 * 24 - deletetime;
                }
                else
                {
                    deletetime = 0;
                }
            }
            charInfopackage.setDeleteTimer((int) deletetime);
            charInfopackage.setLastAccess(chardata.getLong("lastAccess") * 1000L);
            charInfopackage.setAccessLevel(chardata.getInt("accesslevel"));
            if(charInfopackage.getAccessLevel() < 0 && !AutoBan.isBanned(objectId))
            {
                charInfopackage.setAccessLevel(0);
            }
        }
        catch(Exception e)
        {
            _log.log(Level.INFO, "", e);
        }
        return charInfopackage;
    }
}

L2GamePacketHandler

Код:
case AUTHED:
                switch(id)
                {
                    case 0x00:
                        msg = new Logout();
                        break;
                    case 0x0c:
                        msg = new CharacterCreate(); //RequestCharacterCreate();
                        break;
                    case 0x0d:
                        msg = new CharacterDelete(); //RequestCharacterDelete();
                        break;
                    case 0x12:
                        msg = new CharacterSelected(); //CharacterSelect();
                        break;
                    case 0x13:
                        msg = new NewCharacter(); //RequestNewCharacter();
                        break;
                    case 0x7b:
                        msg = new CharacterRestore(); //RequestCharacterRestore();
                        break;
                    case 0xcb:
                        msg = new ReplyGameGuardQuery();
                        break;
                    case 0xd0:
                        msg = new RequestCharacterNameCreatable(); //RequestCharacterNameCreatable();
                        if(data.remaining() < 2)
                        {
                            handleIncompletePacket(client);
                            break;
                        }
                        int id3 = data.getShort() & 0xffff;
                        if(id3 == 0x36)
                        {
                            msg = new GotoLobby();
                            msg = new RequestCharacterNameCreatable(); //RequestCharacterNameCreatable();
                        }
                        break;
                    default:
                        //_log.severe("Unknown packet on state: AUTHED, id: " + Integer.toHexString(id));
                        break;
                }
                break;
#28
выложите плиз папку систем новую,протокола 393
#29
vigorian Написал:выложите плиз папку систем новую,протокола 393
если бы было все так просто...старый l2.exe пусть и от года не подходит...или я не так что делаю О_О
Если помог, ткни плюсеГ, это же так просто
#30
l2.bin всего лишь надо переименовать в l2.exe


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Работа над Goddess of Destruction (part 7) n3k0nation 459 172,796 03-21-2022, 04:21 PM
Последний пост: TieLay
  Помогите с Сервером L2Dream версии 439 для Lineage 2 Gracia Part 2 CAHTEX 4 3,345 10-01-2021, 02:40 PM
Последний пост: tenor
  Работа с камерой и Энтер чат FriendlyGhost 0 1,286 04-29-2018, 06:07 AM
Последний пост: FriendlyGhost
  Goddess of Destruction ( новая ветка от NcSoft ) Bacek 180 58,462 08-22-2017, 12:32 PM
Последний пост: BadStealth
  EmuRT Gracia part 2 ? knaif 3 1,602 02-08-2016, 01:19 PM
Последний пост: knaif
  Gracia Part 1 от l2emu исходы TFH 6 1,934 10-05-2015, 07:53 PM
Последний пост: G1ta0
  Ищу исходы L2-Dream gracia part 2 knaif 1 1,366 10-05-2015, 07:51 PM
Последний пост: G1ta0
  Оплачиваемая работа Grek1993 1 1,330 08-01-2015, 11:29 AM
Последний пост: ztaecz
  Работа над Goddess of Destruction (part 6) Ashe 1,274 466,666 07-11-2015, 08:00 PM
Последний пост: n3k0nation
  Работа с мультиселлом Evencelance 11 2,409 09-19-2014, 12:43 PM
Последний пост: Evencelance

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


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