Цитата:
Сообщение от VORON
NLO, я незнаю синтаксиса КЕЙС ОФ.. просьба и не говарить что я нуб.. я ето и так занаю.. вопщем твой скрипт мне не понятен.. но плиз по факту: ХП и ЦП сдвинуто в "ц4" и в "интерлюде" на несколько байтов.. если они сдвинуты то нельзя говорить об том что общий скрипт существует для "ц" и "интерлюда".. я же говарю про то что сдвинуты порядковые номера.. за счет увеличения чего???- непонятно но сдвинуты.. на 2 байта вроде.. вродеде в сторону увеличения.... там где МАКСИМАЛЬНОЕ КОЛ-ВО ХП = пишется ТЕКУЩЕЕ... тоже самое справедливо и для МП..
лучше лог пакета дай от интерлюда... и нуждающийся в помощи- аналогичны лог даст.. и станет всё понятно
|
Вот кусочек исходника пакета Интерлюдии
writeC(0x04);
writeD(_cha.getX());
writeD(_cha.getY());
writeD(_cha.getZ());
writeD(_cha.getHeading());
writeD(_cha.getObjectId());
writeS(_cha.getName());
writeD(_cha.getRace().ordinal());
writeD(_cha.getSex());
writeD(_cha.getBaseClass());
writeD(_cha.getLevel());
writeQ(_cha.getExp());
writeD(_cha.getSTR());
writeD(_cha.getDEX());
writeD(_cha.getCON());
writeD(_cha.getINT());
writeD(_cha.getWIT());
writeD(_cha.getMEN());
writeD(_cha.getMaxHp());
writeD((int) _cha.getCurrentHp());
writeD(_cha.getMaxMp());
writeD((int) _cha.getCurrentMp());
writeD(_cha.getSp());
writeD(_cha.getCurrentLoad());
writeD(_cha.getMaxLoad());
Вот то же самое для С4
writeC(0x04);
writeD(_cha.getX());
writeD(_cha.getY());
writeD(_cha.getZ());
writeD(_cha.getHeading());
writeD(_cha.getObjectId());
writeS(_cha.getName());
writeD(_cha.getRace().ordinal());
writeD(_cha.getSex());
writeD(_cha.getClassId().getId());
writeD(_cha.getLevel());
writeD(_cha.getExp());
writeD(_cha.getSTR());
writeD(_cha.getDEX());
writeD(_cha.getCON());
writeD(_cha.getINT());
writeD(_cha.getWIT());
writeD(_cha.getMEN());
writeD(_cha.getMaxHp());
writeD((int) _cha.getCurrentHp());
writeD(_cha.getMaxMp());
writeD((int)_cha.getCurrentMp());
writeD(_cha.getSp());
writeD(_cha.getCurrentLoad());
writeD(_cha.getMaxLoad());
Отличаются в размерности EXP'ы. В С4 это 4 байта в Интерлюдии 8 байт - вот оно и смещение!
По поводу пакета StatusUpdate #0E. Он появляется гораздо чаще пакета UserInfo #04. И одинаков для С4 и Интерлюдии
Коды атрибутов в пакете UserInfo
public static int LEVEL = 0x01;
public static int EXP = 0x02;
public static int STR = 0x03;
public static int DEX = 0x04;
public static int CON = 0x05;
public static int INT = 0x06;
public static int WIT = 0x07;
public static int MEN = 0x08;
public static int CUR_HP = 0x09;
public static int MAX_HP = 0x0a;
public static int CUR_MP = 0x0b;
public static int MAX_MP = 0x0c;
public static int SP = 0x0d;
public static int CUR_LOAD = 0x0e;
public static int MAX_LOAD = 0x0f;
public static int P_ATK = 0x11;
public static int ATK_SPD = 0x12;
public static int P_DEF = 0x13;
public static int EVASION = 0x14;
public static int ACCURACY = 0x15;
public static int CRITICAL = 0x16;
public static int M_ATK = 0x17;
public static int CAST_SPD = 0x18;
public static int M_DEF = 0x19;
public static int PVP_FLAG = 0x1a;
public static int KARMA = 0x1b;
public static int CUR_CP = 0x21;
public static int MAX_CP = 0x22;
И сам пакет
{
writeC(0x0e); //тип пакета
writeD(_objectId); //указывает к кому относится этот пакет
writeD(_attributes.size()); //кол-во атрибутов в пакете
for (Attribute temp : _attributes)
{
writeD(temp.id); //код атрибута
writeD(temp.value); //величина
}
}
Вышеприведенная мною процедура, в цикле сравнивает атрибуты с необходимым нам и подставлеет его величину.
Из UserInfo, по мне, надо только ObjID чара брать, ну может еще макс. значения атрибутов, а все остальное из StatusUpdate.