Расшифровка пакетов движения была. В чем трудность - тебе самому прийдется считать траекторию и глушить пакеты, которые клиент будет пытаться отправить в это же время. Причем если ошибешься в скорости или впишешь траекторию в препятствие - последует откат, прийдется контроллировать и это. Пакеты движения идут через определенное время, точно не засекал - на глаз где то полсекунды. По окончании движения отправляется пакет остановки. Проще через инжект - отправил конечную точку и ждешь прибытия. Если не ООГ - лучше не парься.
В чем трудность - тебе самому прийдется считать траекторию и глушить пакеты, которые клиент будет пытаться отправить в это же время. Причем если ошибешься в скорости или впишешь траекторию в препятствие - последует откат, прийдется контроллировать и это. Пакеты движения идут через определенное время, точно не засекал - на глаз где то полсекунды. По окончании движения отправляется пакет остановки. Проще через инжект - отправил конечную точку и ждешь прибытия. Если не ООГ - лучше не парься.
Глушить? не очень понятно, но я ничего не глушу
Траекторию - проблема, но решается полетом
Пакет на откат не помню, но вы его встретите, если будете летать под землю
Движение делится на сегменты, кол-во которых можно узнать вот так:
Код:
int count = (int)(dist * 2 / Speed); // dist - расстояние между текущей позицией и конечной
if (dist % Speed != 0) count++;
Расстояние между текущей позицией и позицией следующего сегмента не должно превышать (Speed * (CSeq / 1000))
Перед отправкой каждого пакета желательно ждать CSeq мсек
В процессе движения отправляются пакета Move(00-00)
Чтобы остановиться, нужно отправить StopMove(00-07)
Можно конечно поизвращаться и заставить перса передвигаться лишь на StopMove или же двигаться со скоростью 0,1 м/с
Move:
Код:
using OOGLibrary.GameTypes;
namespace OOGLibrary.IO.PacketBase.Client
{
public class MoveC00 : DataStream, IClientContainer
{
public MoveC00(float x, float z, float y)
: this(new Point3F(x, z, y))
{
}
public MoveC00(Point3F point)
{
Point = point;
CSeq = 500;
}
public Point3F Point { get; private set; }
public ushort CSeq { get; private set; }
public float Speed { get; set; }
public byte Mode { get; set; }
public ushort Number { get; set; }
public DataStream Serialize()
{
Type = 0x00;
WritePoint(Point); // Точка, в которую мы движемся
WritePoint(Point); // Точка, в которую мы движемся
WriteWord(CSeq); // Дельта времени(обычно 500)
WriteWord((ushort)(Speed * 0x100)); // Скорость
WriteByte(Mode); // Тип движения(Бег, полет и тд)
WriteWord(Number); // Номер пакета на движение
return this;
}
}
}
StopMove:
Код:
using OOGLibrary.GameTypes;
namespace OOGLibrary.IO.PacketBase.Client
{
public class StopMoveC07 : DataStream, IClientContainer
{
public StopMoveC07(float x, float z, float y)
: this(new Point3F(x, z, y))
{
}
public StopMoveC07(Point3F point)
{
Point = point;
CSeq = 500;
}
public Point3F Point { get; private set; }
public ushort CSeq { get; private set; }
public byte Dir { get; set; }
public float Speed { get; set; }
public byte Mode { get; set; }
public ushort Number { get; set; }
public DataStream Serialize()
{
Type = 0x07;
WritePoint(Point); // Точка, в которую движемся
WriteWord((ushort)(Speed * 0x100)); // Скорость
WriteByte(Dir); // Угол поворота
WriteByte(Mode); // Тип движения(Бег, полет и тд)
WriteWord(Number); // Номер пакета на движение
WriteWord(CSeq); // Дельта времени(обычно 500)
return this;
}
}
}
________________ TwinkDB - твинки любого игрока, их дата создания, последний онлайн, статус удаления и прочее
Skype - freepvps
ICQ - 412705115
[Ссылки могут видеть только зарегистрированные пользователи. ] - ставкобот [Ссылки могут видеть только зарегистрированные пользователи. ] - общение в КЧ через смартфон
Последний раз редактировалось FreePVP))); 07.02.2013 в 02:24.
Спасиб, узнал много нового.
Вопрос - количество сегментов для отрезка движения, время ожидания CSeq было вычислено опытным путем или вычленено из клиента?
Цитата:
Сообщение от FreePVP)))
Глушить? не очень понятно, но я ничего не глушу
На ООГ софте это и не требуется Но на клиенте предусмотреть блокирование пакетов движения во время отправки таких же с бота предусмотреть стоИт.
Цитата:
Сообщение от FreePVP)))
Можно конечно поизвращаться и заставить перса передвигаться лишь на StopMove или же двигаться со скоростью 0,1 м/с
Со стороны это выглядит потрясающе - видел возле ГО, кто то, очевидно, испытывал движение пакетами.
sumikot, да, я проводил тесты, смотрел трафик клиента и пришел к такому выводу
Добавлено через 1 час 54 минуты
Цитата:
Сообщение от sumikot
Со стороны это выглядит потрясающе - видел возле ГО, кто то, очевидно, испытывал движение пакетами.
Часом не на Омеге ли недалеко от хх?
________________ TwinkDB - твинки любого игрока, их дата создания, последний онлайн, статус удаления и прочее
Skype - freepvps
ICQ - 412705115
[Ссылки могут видеть только зарегистрированные пользователи. ] - ставкобот [Ссылки могут видеть только зарегистрированные пользователи. ] - общение в КЧ через смартфон
Последний раз редактировалось FreePVP))); 07.02.2013 в 13:58.
Причина: Добавлено сообщение
Все поднял на новой версии кроме движения. Использую инжекты. Не поскажете, что там еще могло смениться кроме адресов walk1,2,3 ???
Вы чутка темой ошиблись, вам в тему с адресами и оффсетами
Добавлено через 19 часов 55 минут
Пожалуй дополню эту тему скринами оог полета
Заходим в игру и врубаем полет:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Взлетаем на некоторую высоту:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Летим в точку X+100 Z-3:
[Ссылки могут видеть только зарегистрированные пользователи. ]
________________ TwinkDB - твинки любого игрока, их дата создания, последний онлайн, статус удаления и прочее
Skype - freepvps
ICQ - 412705115
[Ссылки могут видеть только зарегистрированные пользователи. ] - ставкобот [Ссылки могут видеть только зарегистрированные пользователи. ] - общение в КЧ через смартфон
Последний раз редактировалось FreePVP))); 09.02.2013 в 12:03.
Причина: Добавлено сообщение