Попробуй воспользоваться подпрограммами
Надо учесть, что пакет A7=PartyMemberPosition:d(membercount)d(objID)d(X)d (Y)d(Z)
1-й это командир пати, следующие патимемберы по порядку как перечислены в клиенте.
Код:
//***************************************************************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag)
procedure Target(AttackerObjID: Integer);
begin
buf:=#$04;
WriteD(AttackerObjID);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$04: begin
//пакет с инфой о моём чаре
i:=2;
MyXpos:=ReadD(i); //получаю координату х моего чара
MyYpos:=ReadD(i); //получаю координату у моего чара
MyZpos:=ReadD(i); //получаю координату z моего чара
//Запоминаем ИД
i:=18;
MyObjID:=ReadD(i); //получаю ид моего чара
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+48; //44 для С4
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
end;
//****************************************************************************
//если от сервака принят пакет с ИД и Координатами членов пати то
//A7=PartyMemberPosition:d(membercount)d(objID)d(X)d(Y)d(Z)
#$A7: begin
//запоминаем ИД командира
MyObjID:=ReadD(6);
end;
end;
end;
if (ConnectName=Name) and FromClient then begin
case pck[1] of
//ValidatePosition пакет от клиента с моими кординатами
#$48: begin
//обновляем если мы сошли с места
MyXpos:=ReadD(2); //получаю координату х моего чара
MyYpos:=ReadD(6); //получаю координату у моего чара
MyZpos:=ReadD(10); //получаю координату z моего чара
end;
end;
end.
Народ,вот мне skymanrus сделал скрипт на бег за нужным чаром второго моего чара
Можете сделать его так,чтобы он включался по нажатию SokolA действия Pick UP,но сам он неподбирал бы дроп,а включался скрипт ходьбы за SokolA и SokolB тоже бы пытался подобрать дроп столько раз сколько нажал на Pick UP SokolA.Потом чтобы когда SokolA нажимает например Victory,то l2phx бы неотправлял этот пакет серверу,но выключал бы скрипт ходьбы за SokolA и SokolB начинал атаковать цель SokolA по ассисту
Код:
begin // main!!!!!!!!!!!!!!!!!!!
if FromClient and (ConnectName='SokolA') and (pck[1]=#$48) then //мы сошли с места
begin
buf:=#$01;
WriteD(ReadD(2));
WriteD(ReadD(6));
WriteD(ReadD(10));
WriteD(0);
WriteD(0);
WriteD(0);
buf:=buf+#$01+#$00+#$00+#$00;
SendToServerEx('SokolB');
end;
end.
Вот пример xkor'a на то чтобы пакет на действие Victory от SokolA недоходил до сервера, а SokolB садится
Код:
begin
if FromClient and (ConnectName='SokolA')
and (pck=HStr('1b 04 00 00 00')) then begin
buf:=HStr('45 00 00 00 00 00 00 00 00 00');
SendToServerEx('SokolB');
pck:='';
end;
end.
-режим бега(второе соц. действие) -режим бега работает так, что бот бежит туда же куда и хозяин, но с отклонением которое можно указать в const -chaos, генерируется случайным образом
режимы включаются и выключаются тем же соц. действием.
:beer: Сам давно хотел написать, да некогда все было
Цитата:
Сообщение от ASS
var
target: string;
begin
//PartyMemberPosition
if fromserver and (pck[1]=#$A7) then
begin
target:=#$04+pck[6]+pck[7]+pck[8]+pck[9]+pck[10]+pck[11]+pck[12]+pck[13]+pck[14]+pck[15]+pck[16]+pck[17]+pck[18]+pck[19]+pck[20]+pck[21]+#$00;
end;
//Say ? ??????
if fromserver and (pck[1]+pck[6]=#$4A#$02) then
begin
case ord(pck[18]) of
$38:
begin
buf:=target;
SendToServer;
end;
end;
end;
end.
от сервера и от клиента пакеты путаешь, от сервера приходит пакет о том, что кто-то кого-то выделил, а от клиента нужно посылать пакет Action (04)
кто-нибудь вот это действие с бегом за лидером по координатам с небольшим отставанием
Ты бредишь? МКС его ж написал, глаза разуй на предыдущую страничку загляни.
Цитата:
Сообщение от Shnaider
другим кто нешарит помочь вам западло
Ты считаешь эта фраза кого-нить вдохновит написать нужный тебе скрипт? Нефиг тут сопли раводить, не умеешь - учись, здесь форум программистов, а не халаявное написание скриптов на заказ. :evil:
//-------------------------------------------------------------------------------------------
//ловим пакет от клиента отправленный коммандиром при перемещении
if FromClient and (ConnectName=MasterName) and (pck[1]=#$01) then
begin
x:=ReadD(2);
y:=ReadD(6);
z:=ReadD(10); //координаты точки куда пошел коммандир
ox:=ReadD(14);
oy:=ReadD(18);
oz:=ReadD(22);//координаты точки откуда шел коммандир
//-------------------------------------------------------------------------------------------
//имеем координаты точек откуда и куда шел коммандир
//делаем с координатами все что душе угодно
//строим аналогичный пакет
buf:=#$01;
WriteD(x);
WriteD(y);
WriteD(z);
WriteD(ox);
WriteD(oy);
WriteD(oz);
SendToServerEx(BotName); //отправляем его серверу ботом
end;
for i:=1 to ListCount do begin
ObjID:=ReadD(j); //ObjectID
ItmID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Level
case ItmID of ScrollID: begin
ScrollBase[ss]:=ObjID;
inc(ss);
Say('ColvoScrl='+IntToStr(ss));
end;
Что может быть за ошибка в слове которое подчеркнули выделил?В чём ошбика?
Слушай за скрип твой на СЕ Хиллера огромный респект, все супер сделано - только вот у меня такая проблема пока незнаю как решить, Вообщем если задать значение HP больше чем есть реально у SE - SE начинает себя хилять пока руки не отсохнут - вот хотел какнибудь решить этот казус - может ли скрип какнибудь следить за максимальными значениями HP членов пати и уже исходя из этих значений хилять тех у кого это значение стало меньше? Извиняюсь за калабур сам еще от НГ не отошел )))
Слушай за скрип твой на СЕ Хиллера огромный респект, все супер сделано - только вот у меня такая проблема пока незнаю как решить, Вообщем если задать значение HP больше чем есть реально у SE - SE начинает себя хилять пока руки не отсохнут - вот хотел какнибудь решить этот казус - может ли скрип какнибудь следить за максимальными значениями HP членов пати и уже исходя из этих значений хилять тех у кого это значение стало меньше? Извиняюсь за калабур сам еще от НГ не отошел )))
скрипт запоминает все значиния и максимальные и текущие и HP и MP.
для твоего случая у меня там имеется переменная dev (extended) которая содержит в себе отношение текущего ХП к макс ХП, т.е. CurHP/MaxHP, так что здесь ты можешь немного переделать в условиях, что б сравнивалось не с текущим количеством ХП а с этой переменной, и будет хилить как тебе удобно, допустим если хп члена пати меньше чем 1/2 от максимума
Добавлено спустя 38 минут 34 секунды:
Re: ДА БУДЕТ БОТ!
или еще проще добавь в этом месте
for t:=1 to PartyCount do
begin
if (CurHP[t]=MinHP) and (CurHP[t]<MaxHP[t]) then
begin
NeedHP:=t;
break;
end;
end;
или еще проще добавь в этом месте
for t:=1 to PartyCount do
begin
if (CurHP[t]=MinHP) and (CurHP[t]<MaxHP[t]) then
begin
NeedHP:=t;
break;
end;
end;
Блин, запутался я в трех соснах, если делать таким макаром, то SE начинает хилять как только HP начинает уменьшаться, но как только HP достигает Максимума SE продолжает тупо хилять полностью здорового перса - два дня ковыряюсь немогу найти где косяк...