PDA

Просмотр полной версии : Движение за objectid с задержкой


CoolNickname
24.07.2014, 23:06
Добрых времени суток. Начну пожалуй с самого начала. И так, есть игра BSFG 2 (модификация ла2 хроники GoD), в ней есть такая фишка как караван. Происходит это следующим образом. По дефолтному маршруту от аванпоста к городу движется повозка, твоя задача бежать рядом с повозкой и в случае нападения мобов на повозку - убивать их. Мобы нападают всегда рандомно, могут вообще не напасть.
На серве стоит шифрация, но побегав с бубном возле phx добился того, что нужные для перемещения чара пакеты приходят нормально.
А приходят собственно такие пакеты:
От клиента:
Action - 1F B9 D4 70 48 0C A9 FF FF 2B 03 01 00 DC F1 FF FF 00 приходит когда берешь в таргет, из него можно узнать objectid.
MoveBackwardToLocation
ValidatePosition
От сервера приходят очень карявые пакеты, но методом тыка узнал что пакет: 0E 01 25 70 49 00 00 00 00 00 00 00 00 02 00 00 00 0A 00 00 00 06 0B 00 00 09 00 00 00 D5 09 00 00 приходит когда рядом с тобой кто-нибудь движется(даже мобы), в этом пакете:
01 25 70 49 - objectid
0B 00 00 09 - x
00 00 00 D5 - y
D5 09 00 00 - z
(Хотя может вообще и не прийти, когда друг рядом бегал минут 5, ни одного пакета не пришло, а как другие бегают, то их валом приходит :search:)
Теперь вот нужно имея эти пакеты сделать скрипт, что бы мой чар бежал за караваном, но на некотором расстоянии, ибо если просто прицепиться, то тебя будет откидывать от каравана все дальше и дальше. Предполагалось сделать так, что бы координаты чара отставали от координат каравана на 5 секунд.
Моя логика для этого скрипта такова:
1)Узнаем objectid каравана.
2)Далее отлавливаем синие пакеты 0E с нужным objectid и вытягиваем из них координаты.
3)Теперь или отлавливать этот пакет раз в 5 сек или придумать иной способ(что бы была задержка) и составлять пакет MoveBackwardToLocation с нужными для нас координатами.
Помогите кто чем сможет в этом деле пожалуйста)

Выяснил что пакет 0E 01 25 70 49 00 00 00 00 00 00 00 00 02 00 00 00 0A 00 00 00 06 0B 00 00 09 00 00 00 D5 09 00 00 приходит когда кто-то начинает атаковать таргет. Теперь узнать координаты каравана не получится( Других пакетов с информацией о таргете не приходит(

Antharas
25.07.2014, 00:17
в линейке есть пакет "начал движение" и остановился. Твой друг бегал видимо не останавливаясь.

а это как расчитывать координаты для точки чтобы подбежать к объекту. Код для другого робота но разберешься.
http://coderx.ru/showpost.php?p=192045&postcount=856

CoolNickname
25.07.2014, 01:04
в линейке есть пакет "начал движение" и остановился.
http://coderx.ru/showpost.php?p=192045&postcount=856
Тут проблема в том что бы найти этот пакет, я думал можно будет вытянуть координаты из пакета на таргет, но там только твои координаты.

За расчет координат спасибо)

CoolNickname
26.07.2014, 13:40
Думаю хорошим тоном будет выложить готовый скрипт.
Var
CharID: Integer;
X,Y,Z: Integer;

//говорилка
Procedure Say(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;


//запись таргета каравана
begin
if FromClient and (ConnectName='InisTrue')
and (pck[1]= #$1F) then begin
CharId:=ReadD(2);
Say('Таргет каравана записан: '+ IntToStr(CharId));
end;

if FromServer and (ConnectName='InisTrue')
and (pck[1]= #$01) and (ReadD(2) = CharID) then begin
X:= (ReadD(6));
Y:= (ReadD(10));
Z:= (ReadD(14));
buf:= #$0F;
WriteD(X);
WriteD(Y);
WriteD(Z);
WriteC(00);
SendToServer;
end;

end.