08-16-2016, 11:02 AM
HiredKiller Написал:подскажите плиз структуру пакетов для входа в мир UserInfo,CharacterSelectionInfo и тд (28 протокол)
UI
Код:
@Override
protected final void writeImpl()
{
writeC(0x32);
writeD(obj_id);
writeD(_initSize);
writeH(23);
writeB(_masks);
if (containsMask(UserInfoType.RELATION))
writeD(_relation);
if (containsMask(UserInfoType.BASIC_INFO))
{
writeH(16 + _name.length() * 2);
writeH(_name.length());
writeShortS(_name);
writeC(gm_commands);
writeC(_race);
writeC(sex);
writeD(base_class);
writeD(class_id);
writeC(level);
}
if (containsMask(UserInfoType.BASE_STATS))
{
writeH(18);
writeH(_str);
writeH(_dex);
writeH(_con);
writeH(_int);
writeH(_wit);
writeH(_men);
writeH(_luc);
writeH(_cha);
}
if (containsMask(UserInfoType.MAX_HPCPMP))
{
writeH(14);
writeD(maxHp);
writeD(maxMp);
writeD(maxCp);
}
if (containsMask(UserInfoType.CURRENT_HPMPCP_EXP_SP))
{
writeH(38);
writeD(curHp);
writeD(curMp);
writeD(curCp);
writeQ(_sp); //96
writeQ(_exp); //26
writeF(_expPercent);
}
if (containsMask(UserInfoType.ENCHANTLEVEL))
{
writeH(4);
writeC(_enchant);
writeC(0x00);//armor enchant
}
if (containsMask(UserInfoType.APPAREANCE))
{
writeH(15);
writeD(hair_style);
writeD(hair_color);
writeD(face);
writeC(0x00);
}
if (containsMask(UserInfoType.STATUS))
{
writeH(6);
writeC(mount_type);
writeC(private_store);
writeC(can_crystalize);
writeC(used_ability_points);
}
if (containsMask(UserInfoType.STATS))
{
writeH(56);
writeH(_weaponFlag);
writeD(_patk);
writeD(_patkspd);
writeD(_pdef);
writeD(evasion);
writeD(accuracy);
writeD(crit);
writeD(_matk);
writeD(_matkspd);
writeD(_patkspd);
writeD(_mevasion);
writeD(_mdef);
writeD(_maccuracy);
writeD(_mCritRate);
}
if (containsMask(UserInfoType.ELEMENTALS))
{
writeH(14);
writeH(defenceFire);
writeH(defenceWater);
writeH(defenceWind);
writeH(defenceEarth);
writeH(defenceHoly);
writeH(defenceUnholy);
}
if (containsMask(UserInfoType.POSITION))
{
writeH(18);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_loc.h);
}
if (containsMask(UserInfoType.SPEED))
{
writeH(18);
writeH(_runSpd);
writeH(_walkSpd);
writeH(_swimRunSpd);
writeH(_swimWalkSpd);
writeH(_flRunSpd);
writeH(_flWalkSpd);
writeH(_flyRunSpd);
writeH(_flyWalkSpd);
}
if (containsMask(UserInfoType.MULTIPLIER))
{
writeH(18);
writeF(move_speed);
writeF(attack_speed);
}
if (containsMask(UserInfoType.COL_RADIUS_HEIGHT))
{
writeH(18);
writeF(col_radius);
writeF(col_height);
}
if (containsMask(UserInfoType.ATK_ELEMENTAL))
{
writeH(5);
writeC(attackElement.getId());
writeH(attackElementValue);
}
if (containsMask(UserInfoType.CLAN))
{
writeH(32 + title.length() * 2);
writeH(title.length());
writeShortS(title);
writeH(pledge_type);
writeD(clan_id);
writeD(large_clan_crest_id);
writeD(clan_crest_id);
writeC(clan_leader);
writeD(ClanPrivs);
writeD(ally_id);
writeD(ally_crest_id);
writeC(partyRoom ? 0x01 : 0x00);
}
if (containsMask(UserInfoType.SOCIAL))
{
writeH(22);
writeC(pvp_flag);
writeD(karma);
writeC(noble);
writeC(hero);
writeC(pledge_class);
writeD(pk_kills);
writeD(pvp_kills);
writeH(rec_left);
writeH(rec_have);
}
if (containsMask(UserInfoType.VITA_FAME))
{
writeH(15);
writeD(vitality.getPoints());
writeC(vitality.getItems());
writeD(fame);
writeD(0x00); //TODO: Raid points support
}
if (containsMask(UserInfoType.SLOTS))
{
writeH(9);
writeC(talismans);
writeC(0x00);//TODO: jewels
writeC(_team.ordinal());
writeD(0x00);
}
if (containsMask(UserInfoType.MOVEMENTS))
{
writeH(4);
writeC(isFlying ? 0x02 : 0x00);
writeC(running);
}
if (containsMask(UserInfoType.COLOR))
{
writeH(10);
writeD(name_color);
writeD(title_color);
}
if (containsMask(UserInfoType.INVENTORY_LIMIT))
{
writeH(9);
writeD(mount_id);
writeH(InventoryLimit);
writeC(cw_level);
}
if (containsMask(UserInfoType.UNK_3))
{
writeH(13);
writeD(0x00);
writeD(0x00);
writeH(0x00);
writeC(ceremony); // Chaos Festival Hero Aura
}
}
CSI
Код:
@Override
protected final void writeImpl()
{
writeC(0x09);
writeD(charSelectionInfo.size());
writeD(0x07);
writeC(0x00);
writeC(0x01);
writeC(0x02);
writeD(0x00);
long lastAccess = -1L;
int lastUsed = -1;
for (CharSelectInfoPackage info : charSelectionInfo)
{
if (lastAccess < info.getLastAccess())
{
lastAccess = info.getLastAccess();
lastUsed++;
}
}
int i = 0;
for (CharSelectInfoPackage charInfoPackage : charSelectionInfo)
{
writeS(charInfoPackage.getName());
writeD(charInfoPackage.getCharId()); // ?
writeS(_loginName);
writeD(_sessionId);
writeD(charInfoPackage.getClanId());
writeD(0x00); // ??
writeD(charInfoPackage.getSex());
writeD(charInfoPackage.getRace());
writeD(charInfoPackage.getBaseClassId());
writeD(0x01);//Server id
writeD(charInfoPackage.getX());
writeD(charInfoPackage.getY());
writeD(charInfoPackage.getZ());
writeF(charInfoPackage.getCurrentHp());
writeF(charInfoPackage.getCurrentMp());
writeQ(charInfoPackage.getSp());
writeQ(charInfoPackage.getExp());
writeF(ExperienceHandler.getInstance().getExpPercent(charInfoPackage.getLevel(), charInfoPackage.getExp()));
writeD(charInfoPackage.getLevel());
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getPk());
writeD(charInfoPackage.getPvP());
for (int j = 0; j < 7; j++)
{
writeD(0x00);
}
writeD(0x00); // Ertheia
writeD(0x00); // Ertheia
for (int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
writeD(charInfoPackage.getPaperdollItemId(PAPERDOLL_ID));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_GLOVES));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_CHEST));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LEGS));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_BACK));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_HAIR));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_DHAIR));
//Enchant armor effect block
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(charInfoPackage.getNewHairStyle() > 0 ? charInfoPackage.getNewHairStyle() : charInfoPackage.getHairStyle());
writeD(charInfoPackage.getNewHairColor() > 0 ? charInfoPackage.getNewHairColor() : charInfoPackage.getHairColor());
writeD(charInfoPackage.getNewFace() > 0 ? charInfoPackage.getNewFace() : charInfoPackage.getFace());
writeF(charInfoPackage.getMaxHp()); // hp max
writeF(charInfoPackage.getMaxMp()); // mp max
writeD(charInfoPackage.getAccessLevel() > -100 ? charInfoPackage.getDeleteTimer() : -1);
writeD(charInfoPackage.getClassId());
writeD(i == lastUsed ? 1 : 0);
writeC(Math.min(charInfoPackage.getPaperdollEnchantEffect(Inventory.PAPERDOLL_RHAND), 127));
writeD(charInfoPackage.getPaperdollVariation1Id(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getPaperdollVariation2Id(Inventory.PAPERDOLL_RHAND));
writeD(0x00);//transformation id
for (int j = 0; j < 4; j++)
writeD(0x00);
for(int k = 0; k < 2; k++)
writeF(0x00);
writeD(charSelectionInfo.getVitalityPoints());
writeD(charSelectionInfo.getPremiumAccess() > 0 ? 300 : 200); // Vitality percent
writeD(charSelectionInfo.getVitalityItems()); //Vitality items count
writeD(charInfoPackage.getAccessLevel() > -100 ? 0x01 : 0x00);
writeC(0x00);
writeC(0x00);//is Hero
writeC(0x00);//hair accessory enabled
i++;
}
}