PDA

Просмотр полной версии : ValidateLocation


alexov
22.01.2015, 12:12
Пишу своего бота на C#, пока для с4., хочу полностью понять протокол.
Пакеты изучаю поглядывая в l2ph.

Тестирую пакеты в безлюдном месте. так вот - раз в ~110с, сервер присылает пакет ValidateLocation (0x61), который содержит данные charID, X Y Z и какой-то Heading.

значение CharID находится в небольшом диапазоне (от 0 до 150 000), короче похоже что это действительно идентификатор какого-то персонажа (не путайте с ObjectID).

Значения координат тоже весьма похожи на те которые бывают в разных местах ла2., короче в структуре пакета ошибки вроде бы нет. Но возникает вопрос - зачем клиенту нужны координаты какого-то "рандомного?" персонажа, каждые 110 секунд? особенно учитывая то, что мой клиент не знает CharID никаких других персонажей, кроме своего, полученного при логине в пакете CharSelected (0x15)

Добавлено через 3 минуты
Прилагаю небольшой лог, для понимания:

61 DB 56 00 00 28 76 01 00 68 5F 03 00 6E 03 00 00 3B 7A 00 00
Tип: 0x61 (ValidateLocation)
Pазмер: 21+2
Время прихода: 13:16:55:671
0002 d charID: 22235 (0x000056DB)
0006 d X: 95784 (0x00017628)
0010 d Y: 221032 (0x00035F68)
0014 d Z: 878 (0x0000036E)
0018 d Heading: 31291 (0x00007A3B)

61 FC 30 00 00 C8 06 01 00 D8 19 03 00 2D 2F 00 00 97 7C 00 00
Tип: 0x61 (ValidateLocation)
Pазмер: 21+2
Время прихода: 13:18:45:046
0002 d charID: 12540 (0x000030FC)
0006 d X: 67272 (0x000106C8)
0010 d Y: 203224 (0x000319D8)
0014 d Z: 12077 (0x00002F2D)
0018 d Heading: 31895 (0x00007C97)

61 CF 32 00 00 88 64 01 00 E8 6B 03 00 3F 31 00 00 79 4C 00 00
Tип: 0x61 (ValidateLocation)
Pазмер: 21+2
Время прихода: 13:20:35:531
0002 d charID: 13007 (0x000032CF)
0006 d X: 91272 (0x00016488)
0010 d Y: 224232 (0x00036BE8)
0014 d Z: 12607 (0x0000313F)
0018 d Heading: 19577 (0x00004C79)

61 06 17 00 00 18 3D 01 00 58 31 03 00 A7 5D 00 00 AC 44 00 00
Tип: 0x61 (ValidateLocation)
Pазмер: 21+2
Время прихода: 13:22:25:999
0002 d charID: 5894 (0x00001706)
0006 d X: 81176 (0x00013D18)
0010 d Y: 209240 (0x00033158)
0014 d Z: 23975 (0x00005DA7)
0018 d Heading: 17580 (0x000044AC)

61 4E 4D 00 00 68 6D 01 00 28 26 03 00 40 06 00 00 57 70 00 00
Tип: 0x61 (ValidateLocation)
Pазмер: 21+2
Время прихода: 13:24:16:015
0002 d charID: 19790 (0x00004D4E)
0006 d X: 93544 (0x00016D68)
0010 d Y: 206376 (0x00032628)
0014 d Z: 1600 (0x00000640)
0018 d Heading: 28759 (0x00007057)

NLObP
22.01.2015, 18:41
пакет ValidateLocation (0x61), который содержит данные charID, X Y Z и какой-то Heading

Где charID (твой ID) и ObjectID (ID мобов и игроков) разные названия одного и того-же, Heading - направление куда смотрит объект.

Пакет показывает перемещения окружения вокруг чара. Как только кто либо сместился, так сервер шлет пакет с изменениями координат.

alexov
22.01.2015, 19:45
ты невнимательно прочитал что пишу.
1) ObjectID всегда принимает большое значение - 7-8 знаков или больше., а CharID - маленькое значение., в данном пакете это точно не ObjectID
2) тестирую пакеты в пустынном месте, там 100% никого нет. А если бы кто и был - посмотри координаты в пакетах, они из разных концов мира

xixi
22.01.2015, 21:42
Я вообще не знаю откуда берется этот пакет. На хф используется 59=ValidatePosition:d(X)d(Y)d(Z)d(Heading)d(Data) - hf

Добавлено через 14 минут
Вообще может там стоит шифрация пакетов?

Breadfan
22.01.2015, 23:27
Я вообще не знаю откуда берется этот пакет. На хф используется 59=ValidatePosition:d(X)d(Y)d(Z)d(Heading)d(Data) - hf

Добавлено через 14 минут
Вообще может там стоит шифрация пакетов?
Вообще-то и в ХФ используется
$79 = ValidateLocation:d(CharID)d(X)d(Y)d(Z)d(Heading);
А то, что Вы указываете - это пакет от клиента - серверу.

по теме: вообще - есть ли уверенность, что пакет полностью верно расшифрован?

xixi
23.01.2015, 02:12
Вообще-то и в ХФ используется
$79 = ValidateLocation:d(CharID)d(X)d(Y)d(Z)d(Heading);
А то, что Вы указываете - это пакет от клиента - серверу.

по теме: вообще - есть ли уверенность, что пакет полностью верно расшифрован?
Приведите пример, когда этот пакет отправляется. У меня за 15 минут в игре он ни разу не появился.

alexov
23.01.2015, 08:36
по теме: вообще - есть ли уверенность, что пакет полностью верно расшифрован?

Ну, пакеты либо все расшифровываются, либо все не расшифровываются, по другому не бывает) у меня все нормально работает, бот бегает качается. значит я все нормально с шифрацией справился :)

supernewbie
23.01.2015, 09:09
2) тестирую пакеты в пустынном месте
либо сервер считает что кто-то видимый для тебя все-таки есть, либо это ошибка в сервере
возможно за тобой невидимый гм следит, возможно это особенная, уличная защита - слать левые пакеты чтобы плохо написанные боты вылетали. кто знает
ах да, для дебага попробуй послать на сервер Action пакет с CharID из ValidateLocation и посмотреть на таргет

alexov
23.01.2015, 20:48
чтобы послать Action, мне нужен ObjectID. а здесь CharID, и это не просто название, как я уже говорил. ObjectID всегда принимает большие значения, а CharID - маленькие

Breadfan
24.01.2015, 21:56
Кусок из хф сборки:

public ValidateLocation(L2Character cha)
{
_charObjId = cha.getObjectId();//<<<--- прошу обратить внимание
_x = cha.getX();
_y = cha.getY();
_z = cha.getZ();
_heading = cha.getHeading();
}

protected final void writeImpl()
{
writeC(121);
writeD(_charObjId);
writeD(_x);
writeD(_y);
writeD(_z);
writeD(_heading);
}

Не из ц4, но подозреваю что там будет практически тоже самое.


Upd: да, тож самое (из RT C4) -

public ValidateLocation(L2Character cha)
{
_chaId = cha.getObjectId();
_x = cha.getX();
_y = cha.getY();
_z = cha.getZ();
_heading = cha.getHeading();
}

final void runImpl()
{
}

final void writeImpl()
{
writeC(97);
writeD(_chaId);
writeD(_x);
writeD(_y);
writeD(_z);
writeD(_heading);
}

alexov
25.01.2015, 18:27
Короче никто ничо не знает) пока остановлюсь на версии что конкретно тот сервер на котором я тестируюсь шлет мне ошибочные пакеты. допилю бота потом буду тестить на других., а пока лень

xixi
01.02.2015, 10:55
Там птс или ява то? Советую поднять локальную птску ибо на яве много косяков.

alexov
01.02.2015, 18:58
PTS, но значительно модифицированный. админы над ним работают

ScythLab
01.02.2015, 19:30
я такие пакеты то же видел, причем срабатывают они рандомно в пределах квадрата карты, поначалу думал, что может какие-нить квестовые точки, но в итоге решил, что проще их игнорить

CptMcMillan
02.02.2015, 22:01
А не может такого быть что это пакет на проверку ботов?... так, в порядке бреда. Чтобы не возиться с шифрацией админы юзают такой примитивный метод. Типо клиент должен как-то особо отвечать на такой пакет если он приходит. А если не отвечает у них все записывается в лог и в один прекрасный день свершится страшный суд над всеми аккаунтами, которые ранее не отвечали на этот пакет?
P.S. ну или дейстивтельно в коде серверной части косяк и сервер периодически отъезжает и шлет хз что хз кому и хз зачем.

alexov
02.02.2015, 23:52
клиент не отвечает на этот пакет

ScythLab
03.02.2015, 01:21
А не может такого быть что это пакет на проверку ботов?... так, в порядке бреда. Чтобы не возиться с шифрацией админы юзают такой примитивный метод. Типо клиент должен как-то особо отвечать на такой пакет если он приходит. А если не отвечает у них все записывается в лог и в один прекрасный день свершится страшный суд над всеми аккаунтами, которые ранее не отвечали на этот пакет?
P.S. ну или дейстивтельно в коде серверной части косяк и сервер периодически отъезжает и шлет хз что хз кому и хз зачем.такую проверку можно сделать несколько проще, 100% расшифровать весь протокол навряд ли кому-то удалось, так что в качестве "проверок" можно рандомно менять какие-нить незначимые параметры в пакетах.
А здесь скорей всего забыли отключить какую-нить отладочную инфу в сервере, вот она и живет.

alexov
04.02.2015, 15:10
такую проверку можно сделать несколько проще, 100% расшифровать весь протокол навряд ли кому-то удалось, так что в качестве "проверок" можно рандомно менять какие-нить незначимые параметры в пакетах.
А здесь скорей всего забыли отключить какую-нить отладочную инфу в сервере, вот она и живет.

ну вот этот ответ похож на правду наверное)) чо я сам не догадался хз)) ладно на этом и закончим я думаю))

Antharas
05.02.2015, 21:23
мало че понимаю скажу Просто. Если в безлюдном и без монстров месте, и вы еще не подвижно стоите? Не случится дисконект в случае такого молчания? Может поэтому и нужно хоть чет слать) или админы конкретной сборки рукодствовались моими рассуждениями)

xixi
06.02.2015, 14:37
мало че понимаю скажу Просто. Если в безлюдном и без монстров месте, и вы еще не подвижно стоите? Не случится дисконект в случае такого молчания? Может поэтому и нужно хоть чет слать) или админы конкретной сборки рукодствовались моими рассуждениями)
Для дисконнекта достаточно не слать NetPing