PDA

Просмотр полной версии : Нуна ПОМОЩь!


KPECTOHOCElL
25.11.2007, 11:34
ПОМОИГТЕ плиз написать крипт -споил ботом- тоесть что бы он только сполил цель ведущего-тоесть если споил пропер он прекратил его сполить и ждал пока онр умрет и потом свипанул егоя тута ненмного поразбирался в скриптах я так понимаю это должно выглядеть так-(кстати веть скрип работает одновременно с настройками бота?)ТОЕСТЬ я в боте настраиваю атаковать цель ведущего
в скрипте пишем
LABEL(Razb)
USESKILL-тута я Хз так и непонял что надо вставить(мне нуно что бы он прекротил использовать скил если он пропрет)
JMP(Razb)
если неправ то поправьте ^^ а я думаю я ппц ошибаюся

NLObP
25.11.2007, 19:52
В теме "Скриптинг\Да будет бот" первый скрипт от Voron про спойлера.
А вот мой вариант спойлера:
//spoiler by NLObP
//************************************************** ************
// Команды лидера
// 1-следовать за командиром
// 2-спойлить и атаковать цель
// 3-сесть/встать

// На автомате, при нападении лидером на моба бот автоматически спойлит и ассистит
// после боя следует за лидером.
//************************************************** ************
//константы и переменные скрипта
//************************************************** ************
const
Leader='ТДЩиЗ'; //ник перса лидера пати
Spoiler='NLObP'; //ник перса спойлера
var
LeaderID, TargetID, SpoilerID :String; //ИД командира и ИД его таргета
CoordX, CoordY, CoordZ :String; //координаты бота
Cmd :String; //команда боту
Spoiled :String; //заспойлен?

//************************************************** ************
// Подпрограммы
//************************************************** ************
Function HexToStrH(Value:String):String;
Var
Len, I : Integer;
Begin
Result:='';
Len:=Length(Value);
IF Len>0 Then Result:= Format('%.2x',[ord(Value[1])]);
For I:=2 to Len do Result:=Result+Format(' %.2x',[ord(Value[i])]);
End;
//посылаем анонсное сообщение, которое видно только в окне бота
//можно использовать для отладки
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
//все сообщения ботов в приватном чате патилидера
//видны только нам
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(ConnectName);
WriteS(msg);
SendToClientEx(Leader);
end;
//следовать за лидером
procedure FollowLeader;
begin
if (CoordX<>'') and (LeaderID<>'') then begin
//выделяем командира, эмулируя щелчек мыши
//бежим за командиром эмулируя повторный щелчек мыши по таргету
Say('Следуй за мной!');
buf:=hstr('04')+LeaderID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
buf:=hstr('04')+LeaderID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
end
else begin
if CoordX='' then Say ('Бот не готов идти за тобой - CoordX!');
if LeaderID='' then Say ('Бот не готов идти за тобой - LeaderID!');
end;
end;
//атаковать цель командира
procedure Attack;
begin
if (CoordX<>'') and (TargetID<>'') then begin
buf:=hstr('04')+TargetID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
buf:=hstr('04')+TargetID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
end;
end;
//Сесть/встать
procedure Sit;
begin
buf:=hstr('45 00 00 00 00 00 00 00 00 00');
SendToServerEX(Spoiler);
end;
//спойлить цель командира и атаковать
procedure Spoil;
begin
if (CoordX<>'') and (TargetID<>'') then begin
Say('Спойли цель!');
buf:=hstr('04')+TargetID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
//RequestMagicSkillUse Spoil
buf:=hstr('2F FE 00 00 00 00 00 00 00 00');
SendToServerEX(Spoiler);
end
else begin
if CoordX='' then Say ('Бот не готов спойлить - CoordX!');
if TargetID='' then Say ('Бот не готов спойлить - TargetID!');
end;
end;
//свипать цель командира
procedure Sweep;
begin
if (CoordX<>'') and (TargetID<>'') then begin
buf:=hstr('04')+TargetID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
buf:=hstr('2F 2A 00 00 00 00 00 00 00 00');
SendToServerEX(Spoiler);
TargetID:='';
Spoiled:='0';
Say('Юзаю cвип!');
end
else begin
if CoordX='' then Say ('Бот не готов свипать - CoordX!');
if TargetID='' then Say ('Бот не готов свипать - TargetID!');
end;
end;
Procedure SaveCoord;
begin
//координаты бота
//запоминаем координаты (адреса постоянны)
CoordX:= pck[2] + pck[3] + pck[4] + pck[5];
CoordY:= pck[6] + pck[7] + pck[8] + pck[9];
CoordZ:= pck[10] + pck[11] + pck[12] + pck[13];
//для отладки
//Say('Запоминаю свои координаты.');
end;
//************************************************** ************
// Вызывается при включении скрипта
//************************************************** ************
procedure Init;
begin
Spoiled:='0';
end;
//************************************************** ************
// Вызывается при выключении скрипта
//************************************************** ************
procedure Free;
begin
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//если от сервака принят пакет с ИД и Координатами членов пати то
if FromServer and (ConnectName=Leader) and (pck[1]=#$a7) then begin
//запоминаем ИД командира
LeaderID:=pck[6] + pck[7] + pck[8] + pck[9];
Say('Запомнил ИД лидера');
end;
//если от сервака принят пакет с UserInfo
if FromServer and (ConnectName=Leader) and (pck[1]=#$04) then begin //and (LeaderID='')
//Запоминаем собственный ИД
LeaderID:=pck[18] + pck[19] + pck[20] + pck[21];
Say('Запомнил ИД лидера');
end;
//если от сервака принят пакет с UserInfo
if FromServer and (SpoilerID='') and (ConnectName=Spoiler) and (pck[1]=#$04) then begin
//Запоминаем ИД бота
SpoilerID:=pck[18] + pck[19] + pck[20] + pck[21];
Say('Запомнил ИД бота');
end;
{ //пакет TargetSelect
//если принят пакет со сменой таргета у командира то
if FromServer and (ConnectName=Leader) and (pck[1]=#$29) then begin
if (LeaderID=pck[2]+pck[3]+pck[4]+pck[5]) then begin //and ((TargetID='') or (TargetID<>pck[6]+pck[7]+pck[8]+pck[9])) then begin
//запоминаем ИД таргета командира для ассиста
TargetID:= pck[6]+pck[7]+pck[8]+pck[9];
Say('Это ИД таргета.');
Spoiled:='0';
end;
end;
}
//пакет TargetSelect
//если принят пакет со сменой таргета у командира то
if FromServer and (ConnectName=Leader) and (pck[1]=#$a6) then begin
//запоминаем ИД таргета командира для ассиста
TargetID:=pck[2]+pck[3]+pck[4]+pck[5];
Say('Это ИД таргета.');
Spoiled:='0';
end;
//пакет ValidatePosition
//принят пакет от клиента с кординатами
if FromClient and (ConnectName=Spoiler) and (pck[1]=#$48) then begin
//координаты бота
SaveCoord;
end;
//пакет Die (моб умер)
//если скрипт уже перехватил координаты и все значения для переменных
if FromServer and (ConnectName=Spoiler) and (pck[1]=#$06) and (TargetID=pck[2]+pck[3]+pck[4]+pck[5]) then begin
//юзаем cвип (предполагая что в таргет брать ненужно, т.к. мы его спойлили
//и труп остался в таргете у бота)
Sweep;
end;
//пакет TargetUnselected
//командир отменил цель
if FromServer and (ConnectName=Spoiler) and (pck[1]=#$2a) and (LeaderID=pck[2]+pck[3]+pck[4]+pck[5]) then begin
TargetID:='';
Spoiled:='0';
//FollowLeader;
end;
//пакет SystemMessage
//SystemMessage=64 65 01 00 00 00 00 00 00 - already spoiled
//SystemMessage=64 64 02 00 00 00 00 00 00 - spoil activated
//больше не спойлить цель, если сработал спойл (вроде так)
if FromServer and (ConnectName=Spoiler) and (pck[1]+pck[2]+pck[3]=#$64#$64#$02) then Spoiled:='1';
//пакет Attack
//атаковать, если командир напал на цель
if FromServer and (ConnectName=Spoiler) and (pck[1]=#$05) and (LeaderID=pck[2]+pck[3]+pck[4]+pck[5]) then begin
if (CoordX<>'') and (TargetID<>'') then begin
buf:=hstr('04')+TargetID+CoordX+CoordY+CoordZ+hstr ('00');
SendToServerEX(Spoiler);
//можно попробовать расскоментировать, чтобы не спойлил все время
if Spoiled='0' then begin
Say('Спойлю цель!');
//посылаем пакет RequestMagicSkillUse Spoil
buf:=hstr('2F FE 00 00 00 00 00 00 00 00');
SendToServerEX(Spoiler);
end;
end;
end;
//************************************************** ***************
//Команды лидера
//************************************************** ***************
//пакет Say2
if FromClient and (ConnectName=Leader) and (pck[1]=#$38) then begin
Cmd:=ReadS(2);
case Cmd of
'1':
begin
pck:='';
FollowLeader;
end;
'2':
begin
pck:='';
Spoil;
end;
'3':
begin
pck:='';
Sit;
end;
end;
exit;
end;
//************************************************** ***************
end.