Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Работа над Goddess of Destruction (part 6) (https://forum.zone-game.info/showthread.php?t=31771)

VenomRaider 15.12.2013 17:15

Re: Работа над Goddess of Destruction (part 6)
 
это 558 чтоли???
а я то спрашиваю 575

Добавлено через 20 минут
ещё несколько пакетов:
ExAcquirableSkillListByClass:
Свернуть ↑Развернуть ↓

ExAcquireAPSkillList:
Свернуть ↑Развернуть ↓

ExPledgeWaitingListAlarm:
Свернуть ↑Развернуть ↓

Mifesto 16.12.2013 05:58

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Hint (Сообщение 339216)
Смотрите внимательнее:
https://forum.zone-game.info/showthr...559#post336559

а ReadBitFlags можно функцию?

или хотя бы что читает и в каком формате возвращает.

n3k0nation 16.12.2013 09:46

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Mifesto (Сообщение 339384)
а ReadBitFlags можно функцию?

или хотя бы что читает и в каком формате возвращает.

Это побитовое чтение ;) Возвращать может, то что Вы соберете из этих самых битов, любое число или bool-тип. Следуя логике тут читает ~3 байта, я думаю, что можно округлить до int.

Hint 16.12.2013 10:11

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Mifesto (Сообщение 339384)
а ReadBitFlags можно функцию?

или хотя бы что читает и в каком формате возвращает.

function TGamePacket.ReadBitFlags(Count: Integer = 0): TGamePacketBitFlags;
var
  N, I: Integer;
  B: array of Byte;
begin
  N := ReadH;
  if (N < 1) or ((Count > 0) and (N <> Count)) then raise Exception.Create('Invalid bit flags count!');
  I := Ceil(N / 8);
  SetLength(B, I);
  Move(FData[FCursor], B[0], I);
  Inc(FCursor, I);
  SetLength(Result, N);
  for I := 0 to N - 1 do
    begin
      Result[I] := (B[I div 8] shr (7 - (I mod 8))) and 1 = 1;
    end;
end;
Code: Pascal

Mifesto 16.12.2013 17:29

Re: Работа над Goddess of Destruction (part 6)
 
 
Result[I] := (B[I div 8] shr (7 - (I mod 8)))[COLOR="Red"] and 1 = 1[/COLOR];
 
Code: Pascal
Вот мне интересно выделенное сравнение, зачем? Или это что бы паскаль записал результат первой операции как bool?

Hint 16.12.2013 18:39

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Mifesto (Сообщение 339454)
 
Result[I] := (B[I div 8] shr (7 - (I mod 8)))[COLOR="Red"] and 1 = 1[/COLOR];
 
Code: Pascal
Вот мне интересно выделенное сравнение, зачем? Или это что бы паскаль записал результат первой операции как bool?

Да, чтобы преобразовать Integer в Boolean.
Код:

TGamePacketBitFlags = array of Boolean;

Mifesto 16.12.2013 19:12

Re: Работа над Goddess of Destruction (part 6)
 
Странно, у меня все флаги -1 вот кусочек пакета до ника:
Цитата:

FE 5C 01 66 B6 D0 49 87 01 00 00 17 00 FF FF FE
00 00 00 00 1E 00 07
Зеленым выделено количество флагов, а красным 3 байта отвечающие за флаги(если судить по вашему коду).

Вот что получилось у меня на Java:
 
int N = readH(); // 23
 
if(N < 1)
    new Exception("Incorrect flags count.");
 
int I = (int)  Math.ceil((double) N / 8); // 23 / 8 = 3
 
byte B[] = new byte[I];
 
readB(B);
 
int result[] = new int[N];
for(int i = 0; i < N; i++)
{
        result[i] = B[i / 8] >> (7 - (i % 8)); // result[0] = -1 >> 7 
}
 
Code: Java

n3k0nation 16.12.2013 23:33

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Mifesto (Сообщение 339467)
Странно, у меня все флаги -1 вот кусочек пакета до ника:


Зеленым выделено количество флагов, а красным 3 байта отвечающие за флаги(если судить по вашему коду).

Вот что получилось у меня на Java:
 
int N = readH(); // 23
 
if(N < 1)
    new Exception("Incorrect flags count.");
 
int I = (int)  Math.ceil((double) N / 8); // 23 / 8 = 3
 
byte B[] = new byte[I];
 
readB(B);
 
int result[] = new int[N];
for(int i = 0; i < N; i++)
{
        result[i] = B[i / 8] >> (7 - (i % 8)); // result[0] = -1 >> 7 
}
 
Code: Java

Лучше используйте побитовое ИЛИ.

Mifesto 17.12.2013 11:33

Re: Работа над Goddess of Destruction (part 6)
 
Эх в битовых операциях я еще мало разобрался(

Bonux 17.12.2013 16:16

Re: Работа над Goddess of Destruction (part 6)
 
ExUserInfo 575 протокол:

Код:

                writeEx(0x15C);
                writeD(obj_id);

                /*if(_secondInit)
                {
                        writeD(56);

                        writeB(new byte[]{(byte) 0x00, (byte) 0x80, (byte) 0x00});
                }
                else if(_init)*/
                {
                        writeD(342 + _name.length() * 2 + title.length() * 2);
                        writeH(23);

                        writeB(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF});

                        writeD(_relation);
                        writeH(16 + _name.length() * 2);
                        writeH(_name.length());
                        writeCutS(_name);
                        writeC(gm_commands);
                        writeC(_race);
                        writeC(sex);
                        writeD(base_class);
                        writeD(class_id);
                        writeC(level);

                        writeH(14);
                        writeH(_str);
                        writeH(_dex);
                        writeH(_con);
                        writeH(_int);
                        writeH(_wit);
                        writeH(_men);

                        writeH(14);
                        writeD(maxHp);
                        writeD(maxMp);
                        writeD(maxCp);

                        writeH(38);
                        writeD(curHp);
                        writeD(curMp);
                        writeD(curCp);
                        writeQ(_sp);
                        writeQ(_exp);
                        writeF(_expPercent);

                        writeH(4);
                        writeH(15); // unk

                        writeH(15);
                        writeD(hair_style);
                        writeD(hair_color);
                        writeD(face);
                        writeC(1);

                        writeH(5);
                        writeC(mount_type);
                        writeC(private_store);
                        writeC(can_crystalize);

                        writeH(56);
                        writeH(_weaponFlag);
                        writeD(_patk);
                        writeD(_patkspd);
                        writeD(_pdef);
                        writeD(_pEvasion);
                        writeD(_pAccuracy);
                        writeD(_pCrit);
                        writeD(_matk);
                        writeD(_matkspd);
                        writeD(_patkspd);
                        writeD(_mdef);
                        writeD(_mEvasion);
                        writeD(_mAccuracy);
                        writeD(_mCrit);

                        writeH(14);
                        writeH(defenceFire);
                        writeH(defenceWater);
                        writeH(defenceWind);
                        writeH(defenceEarth);
                        writeH(defenceHoly);
                        writeH(defenceUnholy);

                        writeH(18);
                        writeD(_loc.x);
                        writeD(_loc.y);
                        writeD(_loc.z + Config.CLIENT_Z_SHIFT);
                        writeD(vehicle_obj_id);

                        writeH(18);
                        writeH(_runSpd);
                        writeH(_walkSpd);
                        writeH(_swimRunSpd);
                        writeH(_swimWalkSpd);
                        writeH(_flRunSpd);
                        writeH(_flWalkSpd);
                        writeH(_flyRunSpd);
                        writeH(_flyWalkSpd);

                        writeH(18);
                        writeF(move_speed);
                        writeF(attack_speed);

                        writeH(18);
                        writeF(col_radius);
                        writeF(col_height);

                        writeH(5);
                        writeC(attackElement.getId());
                        writeH(attackElementValue);

                        writeH(32 + title.length() * 2);
                        writeH(title.length());
                        writeCutS(title);
                        writeH(pledge_type);
                        writeD(clan_id);
                        writeD(large_clan_crest_id);
                        writeD(clan_crest_id);
                        writeD(ClanPrivs);
                        writeC(1);
                        writeD(ally_id);
                        writeD(ally_crest_id);
                        writeC(partyRoom ? 0x01 : 0x00);

                        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);

                        writeH(15);
                        writeD(vitality);
                        writeC(0);
                        writeD(fame);
                        writeD(0x00); // UNK

                        writeH(10);
                        writeC(talismans);
                        writeC(openCloak);
                        writeC(_team.ordinal());
                        writeC(0);
                        writeC(0);
                        writeC(0);
                        writeC(0);
                        writeC(0);

                        writeH(4);
                        writeC(isFlying ? 0x02 : 0x00);
                        writeC(running);

                        writeH(10);
                        writeD(name_color);
                        writeD(title_color);

                        writeH(9);
                        writeD(0);
                        writeH(InventoryLimit);
                        writeC(0);

                        writeH(13);
                        writeC(1);
                        writeH(0);
                        writeD(0);
                        writeD(0);
                }



Текущее время: 01:32. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot