Сдул пыль со старого пнх, и достал оттуда бот найденый мною на кодриксе, но который я так и не смог запустить. Мозги подросли, перенастроил все пакеты, стёр лишнее(для меня лишнее), добавил новое и родил 2ух ботов - мага и спойлера.
Маг:
Delphi Код:
//Бот_маг with 'Hachling of Star' by NLObP// Edited by ElKornacio. Переведён под Грацию, не лупит игроков, которые лупят Вас и куча другого бреда, как автохилки и тп.{
Социальное действие YES включить
Социальное действие NO выключить
Пить хилки - нажимаем на саааамый первый сошиал экшн в клиенте и стираем одну хилку. вот и всё. дальше она сама будет жрать хилки когда жизни меньше чем MinHP.
NLObP:
"Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя."
А я тем более)
}//******************************************************************************Const
Name='ElKornacio'; //имя чараmax=50; //max количество контролируемых мобов
Radius=4000; //радиус участка для поиска мобов
DeltaZ=250; //глубина/высота до мобов
Distance=700; //дистанция до моба
DU=1031;
HB=1235;
SF=1265;
MinHP=1900;
ToCH='7D 01 00 00 00';
GKID='268464554';
RGKID='268465231';
//******************************************************************************VAR
NameChar: string;
CharID, Attacker, ObjectID: integer;
tempX,tempY, tempLenght: extended;
tempZ, ColvoMobs: integer;
xe,ye: extended;
x,y,z,ox,oy,oz,n,tmp,tmp2: integer;
First,stoped:boolean;
Log:TStrings;
MobCurHP, MobMaxHP, CurHP, MaxHP, CurMP, MaxMP: integer;
BotCoordX,BotCoordY,BotCoordZ: integer; //координаты бота
BotCoordXext,BotCoordYext,BotCoordZext:extended;
MinPutID: integer; //указывает индекс моба в базе путь до которого самый короткий
MinPutLenght: extended; //расстояния до ближайшего моба
timer1: TTimer; //основной таймер
timerA: TTimer; //вспомогательный
i, itm, SocialID, HealID: integer; // вспомогательная
AddMob, UnderAttack, scrready, wh: boolean;
Text,Nick:string;
CharBase: array[1..4,1..max] ofinteger; // описатель игроков (которых не атакуем)
MobBase: array[1..4,1..max] ofinteger; // описатель мобов вокруг
MobBaseExt: array[1..4,1..max] ofextended; // описатель мобов вокруг вспомогательная{ 1 - ID
2 - X
3 - Y
4 - Z}//******************************************************************************procedure Init; //Вызывается при включении скриптаbegin
Log:=TStringList.Create;
UnderAttack:=false;
itm:=0;
scrready:=false;
colvomobs:=0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=False;
timer1.interval:=2000;
timerA:=TTimer.Create(nil);
timerA.OnTimer:=@OnTimerA;
timerA.enabled:=False;
timerA.interval:=500;
stoped:=true;
end;
procedure ReloadLog;
var
e:string;
n:integer;
begin
n:=0;
e:='<html>';
while n<>Log.Countdobegin
e:=e+Log[i]+'<br>';
n:=n+1;
end;
e:=e+'</html>';
buf:=#$19;
WriteD(0);
WriteS(e);
SendToClientEx(Name);
end;
procedure AddLog(s:string);
var
t:string;
begin
t:=Log.Text;
t:='['+TimeToStr(Time)+'] '+s+#13+t;
Log.Text:=t;
ReloadLog;
end;
procedure Free; //Вызывается при выключении скриптаbegin
Log.Free;
timer1.Free;
timerA.Free;
stoped:=false;
wh:=false;
HealID:=0;
First:=true;
BotCoordX:=0;
BotCoordY:=0;
BotCoordZ:=0;
CharID:=0;
ObjectID:=0;
Attacker:=0;
end;
//******************************************************************************//сообщения в приват, на сервер не отправляютсяprocedure Say(msg:string);
begin//AddLog(msg);end;
{procedure SendHTML(s:String);
begin
buf:=#$23;
WriteS('npc_'+GKID+'_'+s);
SendToServer;
end;
procedure ComeToRune;
begin
buf:=hstr('0F 57 D0 FF FF F7 DF 01 00 C9 F3 FF FF');
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteD(1);
SendToServerEx(Name);
Delay(15000);
buf:=hstr('0F 4C CE FF FF C3 DF 01 00 B9 F3 FF FF');
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteD(1);
SendToServerEx(Name);
Delay(6000);
Attacker:=StrToInt(GKID);
TargetAtt;
SendHTML('goto 1041');
Delay(5000);
Attacker:=StrToInt(RGKID);
TargetAtt;
TargetAtt;
SendHTML('goto 1104');
Delay(5000);
stoped:=false;
Timer1.Enabled:=true;
end; }//0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID)d(AttrValue)procedure StatusUpdate;
var
i:integer;
beginfor i:=0to ReadD(6)-1doif pck[i*8+10]=#$09then CurHP:=ReadD(i*8+14);
if CurHP<=MinHP thenbegin
buf:=#$19;
WriteD(HealID);
WriteD(0);
SendToServerEx(Name);
end;
end;
//******************************************************************************procedure OnTimer1(Sender: TObject);
beginif Stoped=falsethenbeginif UnderAttack thenexit;
MinPutID:=0;
MinPutLenght:=99999999;
for i:=1tomaxdobeginif(MobBaseExt[1,i]<>0)thenbegin
tempX:=MobBaseExt[2,i];
tempY:=MobBaseExt[3,i];
tempLenght:=int(sqrt((BotCoordXext-tempx)*(BotCoordXext-tempx)+(BotCoordYext-tempy)*(BotCoordYext-tempy)));
if(tempLenght<MinPutLenght)and(CharID<>MobBase[1,i])thenbeginif(MinPutLenght-tempLenght)>=20thenbegin
MinPutLenght:=tempLenght;
MinPutID:=i;
end;
end;
end;
end;
if(minputid<>0)thenbegin
Attacker:=MobBase[1,MinPutID];
TargetAttacker;
say('Атакуем моба!');
end;
end;
end;
//******************************************************************************//01=MoveBackwardToLocation:d(targetX)d(targetY)d(targetZ)d(originX)d(originY)d(originZ)d(moveByMouse)procedure MoveDistance;
beginif Stoped=falsethenbegin
xe:=MobBase[2,MinPutID]+Distance/4+round(random*(Distance/4));
ye:=MobBase[3,MinPutID]+Distance/4+round(random*(Distance/4));
x:=round(xe);
y:=round(ye);
z:=MobBase[4,MinPutID];
buf:=#$0F;
WriteD(x);
WriteD(y);
WriteD(z);
WriteD(BotCoordx);
WriteD(BotCoordy);
WriteD(BotCoordz);
WriteD(01);
SendToServerEx(Name);
say('Держим дистанцию');
end;
end;
//******************************************************************************procedure TargetAtt;
beginif Stoped=falsethenbegin
buf:=#$1F;
WriteD(Attacker);
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteC(00);
SendToServerEx(Name);
end;
end;
//***************************************************************//2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b(ShiftPressed)procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$39;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//******************************************************************************procedure OnTimerA(Sender: TObject);
beginif Stoped=falsethenbeginif First thenbegin MagicSkillUse(SF); First:=false; end;
Delay(50);
MagicSkillUse(HB);
end;
end;
//******************************************************************************procedure TargetAttacker;
begin
TargetAtt;
timerA.enabled:=true;
First:=true;
UnderAttack:=true; //зацепимся за атакуемогоend;
procedure iDie;
beginend;
procedure WriteOK;
begin
buf:=hstr('49 59 00 65 00 73 00 20 00 53 00 69 00 72 00 21 00 00 00 03 00 00 00 ');
SendToServerEx(Name);
end;
begin//****************************************************************************//не пропускаем пустые пакетыif pck=''thenexit;
//****************************************************************************//16=NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d(X)d(Y)d(Z)d(Heading)d(d)d(Maspd)d(Paspd)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)d(flWSpd)d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f(CollisRadius)f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabove)b(isRun)b(isInFight)b(isAlikeDead)b(isSummoned)s(Name)s(Title)d(d)d(d)d(karma?)d(abnEffect)d(d)d(d)d(d)d(d)b(c)b(Team)f(collisRadius)f(collisHeight)d(d)//NPCInfo, запоминаем мобовif FromServer and(ConnectName=Name)and(pck[1]=#$0C)thenbegin
AddMob:=true;
//проверка, входит моб в радиус действия?
tempX:=ReadD(14); //x
tempY:=ReadD(18); //y
tempLenght:=sqrt((BotCoordX-tempX)*(BotCoordX-tempX)+(BotCoordY-tempY)*(BotCoordY-tempY));
//проверям, не под землей ли моб(в катакомбах)
tempZ:=BotCoordZ-ReadD(22);
if tempz<0then tempZ:=tempz*(-1);
if tempZ<=DeltaZ thenbeginif(tempLenght<Radius)thenbeginfor i:=1tomaxdobegin//если нашли Моба в базе, то коректируем его координаты на новыеif(MobBase[1,i]=ReadD(2))and(CharID<>ReadD(2))thenbegin
MobBase[2,i]:=ReadD(14); //x
MobBase[3,i]:=ReadD(18); //y
MobBase[4,i]:=ReadD(22); //z//Ext массив
MobBaseExt[2,i]:=ReadD(14); //x
MobBaseExt[3,i]:=ReadD(18); //y
MobBaseExt[4,i]:=ReadD(22); //z
AddMob:=false;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового мобаfor i:=1tomaxdobeginif(MobBase[1,i]=0)and AddMob and(CharID<>ReadD(2))thenbegin//запоминаем моба в свободную ячейку
MobBase[1,i]:=ReadD(2); //ObjectID
MobBase[2,i]:=ReadD(14); //x
MobBase[3,i]:=ReadD(18); //y
MobBase[4,i]:=ReadD(22); //z//Ext массив
MobBaseExt[1,i]:=ReadD(2); //ObjectID
MobBaseExt[2,i]:=ReadD(14); //x
MobBaseExt[3,i]:=ReadD(18); //y
MobBaseExt[4,i]:=ReadD(22); //zinc(colvomobs);
say('Запоминаем координаты Моба'+' Количество мобов: '+inttostr(colvomobs));
break;
end;
end;
end;
end;
end;
//****************************************************************************//CharInfo, запоминаем игроковif FromServer and(ConnectName=Name)and(pck[1]=#$31)thenbegin
AddMob:=true;
for i:=1tomaxdobegin//если нашли чара в базе, то коректируем его координаты на новыеif(CharBase[1,i]=ReadD(18))thenbegin
CharBase[2,i]:=ReadD(2); //x
CharBase[3,i]:=ReadD(6); //y
CharBase[4,i]:=ReadD(10); //z
AddMob:=false;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового чараfor i:=1tomaxdobeginif(CharBase[1,i]=0)and AddMob thenbegin//запоминаем моба в свободную ячейку
CharBase[1,i]:=ReadD(18); //ObjectID
CharBase[2,i]:=ReadD(2); //x
CharBase[3,i]:=ReadD(6); //y
CharBase[4,i]:=ReadD(10); //z
NameChar:=ReadS(22);
say('Приближается Игрок '+NameChar+'!!!');
break;
end;
end;
for i:=1tomaxdobegin//если нашли Чара в базе Мобов, то удаляем егоif(MobBase[1,i]=ReadD(18))thenbegin
MobBase[1,i]:=0; //x
MobBase[2,i]:=0; //x
MobBase[3,i]:=0; //y
MobBase[4,i]:=0; //z//Ext массив
MobBaseExt[1,i]:=0; //x
MobBaseExt[2,i]:=0; //x
MobBaseExt[3,i]:=0; //y
MobBaseExt[4,i]:=0; //zdec(colvomobs);
say('Нашли Чара в базе Мобов, удаляем его'+' Количество мобов: '+inttostr(colvomobs));
end;
end;
end;
if FromServer and(pck[1]=#$4A)and(ReadD(6)=3)and(ReadS(10)='Marix')thenbeginText:=ReadS(22);
ifText='stop'thenbegin
timer1.enabled:=false;
timerA.enabled:=False;
underattack:=false;
BotCoordX:=0;
BotCoordY:=0;
BotCoordZ:=0;
Say('Команда Стоп!!!');
stoped:=true;
WriteOK;
endelseifText='start'thenbegin
Say('Команда Старт!!!');
timer1.enabled:=true;
stoped:=false;
WriteOK;
endelseifText='clear'thenbegin UnderAttack:=false; TimerA.enabled:=false; Attacker:=0; WriteOK; endelseifText='unselect_target'thenbegin buf:=hstr('48 01 00'); SendToServerEx(Name); endelseifText='go_with_me'thenbegin
tmp:=ReadD(2);
buf:=#$1F;
WriteD(tmp);
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteC(00);
SendToServerEx(Name);
Delay(100);
buf:=#$1F;
WriteD(tmp);
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteC(00);
SendToServerEx(Name);
WriteOK;
end;
end;
//****************************************************************************//MoveToLocation, коректируем координаты мобов в базеif FromServer and(ConnectName=Name)and(pck[1]=#$2F)thenbegin
AddMob:=true;
//проверка, входит моб в радиус действия?
tempX:=ReadD(6); //x
tempY:=ReadD(10); //y
tempLenght:=sqrt((BotCoordX-tempX)*(BotCoordX-tempX)+(BotCoordY-tempY)*(BotCoordY-tempY));
tempZ:=BotCoordZ-ReadD(14);
if tempz<0then tempZ:=tempz*(-1);
if tempZ<=DeltaZ thenbeginif(int(tempLenght)<Radius)thenbegin//перебираем базу и ищем там моба, который бежитfor i:=1tomaxdobegin//если нашли моба в базе, то коректируем его координаты на новыеif(MobBase[1,i]=ReadD(2))and(CharID<>ReadD(2))and(CharBase[1,i]<>ReadD(2))thenbegin//ObjectID
MobBase[2,i]:=ReadD(6); //x
MobBase[3,i]:=ReadD(10); //y
MobBase[4,i]:=ReadD(14); //z//Ext массив
MobBaseExt[2,i]:=ReadD(6); //x
MobBaseExt[3,i]:=ReadD(10); //y
MobBaseExt[4,i]:=ReadD(14); //z
AddMob:=false;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового мобаfor i:=1tomaxdobeginif(MobBase[1,i]=0)and AddMob and(CharID<>ReadD(2))thenbegin//запоминаем моба в свободную ячейку
MobBase[1,i]:=ReadD(2); //ObjectID
MobBase[2,i]:=ReadD(6); //x
MobBase[3,i]:=ReadD(10); //y
MobBase[4,i]:=ReadD(14); //z//Ext массив
MobBaseExt[1,i]:=ReadD(2); //ObjectID
MobBaseExt[2,i]:=ReadD(6); //x
MobBaseExt[3,i]:=ReadD(10); //y
MobBaseExt[4,i]:=ReadD(14); //zinc(colvomobs);
break;
end;
end;
end;
end;
end;
//****************************************************************************//MagicSkillUse 48, Attack 05if FromServer and(ConnectName=Name)and((pck[1]=#$48)or(pck[1]=#$33))thenbeginif UnderAttack thenexit; //сначало убъем одного
tmp:=ReadD(2);
ObjectID:=ReadD(6);
tmp2:=0;
for i:=1tomaxdoif(CharBase[1,i]=tmp)then tmp2:=1;
if(tmp2=0)and(CharID=ObjectID)thenbegin
UnderAttack:=true; //нас атакуют
Attacker:=tmp;
Say('Нас атакуют!');
TargetAttacker;
end;
end;
//****************************************************************************//если принят пакет Dieif FromServer and(ConnectName=Name)and(pck[1]=#$00)thenbeginif ReadD(2)<>CharID thenbegin//ищем моба в базеif(Attacker=ReadD(2))thenbegin
UnderAttack:=false; //убили атакующего моба
timerA.enabled:=False;
end;
for i:=1tomaxdobegin//очишаем запись связанную с етим мобомif(MobBase[1,i]=ReadD(2))thenbegindec(colvomobs);
MobBase[1,i]:=0; //ObjectID
MobBase[2,i]:=0; //x
MobBase[3,i]:=0; //y
MobBase[4,i]:=0; //z//Ext массив
MobBaseExt[1,i]:=0; //ObjectID
MobBaseExt[2,i]:=0; //x
MobBaseExt[3,i]:=0; //y
MobBaseExt[4,i]:=0; //zbreak;
end;
end;
endelsebegin
stoped:=true;
iDie;
say('Бот был остановлен в связи со смертью.');
end;
end;
if FromServer and(ConnectName=Name)and(pck[1]=#$23)thenbegin// Здесь место для Вашей рекламы. А точнее для создания фигни, что бы бот не бил чужих мобов. Дерзайте :)end;
//****************************************************************************//если принят пакет DeleteObjectif FromServer and(ConnectName=Name)and(pck[1]=#$08)thenbegin//ищем моба в базе//say('DeleteObject');if(Attacker=ReadD(2))thenbegin
UnderAttack:=false; //убили атакующего моба
timerA.enabled:=False;
end;
for i:=1tomaxdobegin//очишаем запись связанную с етим мобомif(MobBase[1,i]=ReadD(2))thenbegindec(colvomobs);
MobBase[1,i]:=0; //ObjectID
MobBase[2,i]:=0; //x
MobBase[3,i]:=0; //y
MobBase[4,i]:=0; //z//Ext массив
MobBaseExt[1,i]:=0; //ObjectID
MobBaseExt[2,i]:=0; //x
MobBaseExt[3,i]:=0; //y
MobBaseExt[4,i]:=0; //zbreak;
end;
end;
for i:=1tomaxdobegin//если нашли в базе, то удаляемif(CharBase[1,i]=ReadD(2))thenbegin
CharBase[2,i]:=0; //x
CharBase[3,i]:=0; //y
CharBase[4,i]:=0; //zend;
end;
end;
//****************************************************************************//ValidatePosition если принят пакет от клиента с моими кординатами тоif FromClient and(ConnectName=Name)and(pck[1]=#$59)thenbegin//запоминаем мои координаты
BotCoordX:=ReadD(2);
BotCoordY:=ReadD(6);
BotCoordZ:=ReadD(10);
//ext
BotCoordXext:=ReadD(2);
BotCoordYext:=ReadD(6);
BotCoordZext:=ReadD(10);
end;
//****************************************************************************//если от сервака принят пакет с UserInfoif FromServer and(ConnectName=Name)and(pck[1]=#$32)thenbegin//Запоминаем собственный ИД
CharID:=ReadD(18);
if scrready thenexitelsebegin
Say('Бот готов. ID лидера записаны.');
scrready:=true;
end;
end;
if FromClient and(ConnectName=Name)and(pck[1]=#$60)and(wh)thenbegin wh:=false; say('ID банки записаны!'); HealID:=ReadD(2); end;
if FromServer and(ConnectName=Name)and(pck[1]=#$18)and(CharID=ReadD(2))then StatusUpdate;
if FromClient {and (ConnectName=Name)}and(pck[1]=#$34)thenbegin
SocialID:=ReadD(2);
case SocialID of//социальное действие Yes для начала6: begin
Say('Команда Старт!!!');
timer1.enabled:=true;
stoped:=false;
exit;
pck:='';
end;
//социальное действие No для окончания5: begin//if CharID=0 then exit;
timer1.enabled:=false;
timerA.enabled:=False;
underattack:=false;
BotCoordX:=0;
BotCoordY:=0;
BotCoordZ:=0;
Say('Команда Стоп!!!');
stoped:=true;
exit;
pck:='';
end;
2: begin wh:=true; say('Ожидаем удаления банки'); pck:=''; end;
3: begin wh:=false; say('Отменено удаление банки'); pck:=''; end;
4: begin pck:=''; UnderAttack:=false; TimerA.enabled:=false; Attacker:=0; end;
end;
end;
end.
Спойлер:
delphi Код:
//Бот_маг with 'Hachling of Star' by NLObP// Edited by ElKornacio. Переведён под Грацию, не лупит игроков, которые лупят Вас. Да и вообще.. Теперь это бот-воин-спойлер, а не маг :){
Социальное действие YES включить
Социальное действие NO выключить
Пить хилки - нажимаем на саааамый первый сошиал экшн в клиенте и стираем одну хилку. вот и всё. дальше она сама будет жрать хилки когда жизни меньше чем MinHP.
NLObP:
"Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя."
А я тем более)
}//******************************************************************************Const
Name='Zhirdyachik'; //имя чараmax=50; //max количество контролируемых мобов
Radius=4000; //радиус участка для поиска мобов
DeltaZ=250; //глубина/высота до мобов
Distance=700; //дистанция до моба
MinHP=1500;
Spoil=254;
Sweeper=42;
//******************************************************************************VAR
NameChar: string;
CharID, Attacker, ObjectID: integer;
tempX,tempY, tempLenght: extended;
tempZ, ColvoMobs: integer;
xe,ye: extended;
x,y,z,ox,oy,oz,n,tmp,tmp2: integer;
stoped:boolean;
Log:TStrings;
MobCurHP, MobMaxHP, CurHP, MaxHP, CurMP, MaxMP: integer;
BotCoordX,BotCoordY,BotCoordZ: integer; //координаты бота
BotCoordXext,BotCoordYext,BotCoordZext:extended;
MinPutID: integer; //указывает индекс моба в базе путь до которого самый короткий
MinPutLenght: extended; //расстояния до ближайшего моба
timer1: TTimer; //основной таймер
timerA: TTimer; //вспомогательный
i, itm, SocialID, HealID: integer; // вспомогательная
AddMob, UnderAttack, scrready, wh, Spoiled: boolean;
Text,Nick:string;
IDH:TStrings;
CharBase: array[1..4,1..max] ofinteger; // описатель игроков (которых не атакуем)
MobBase: array[1..4,1..max] ofinteger; // описатель мобов вокруг
MobBaseExt: array[1..4,1..max] ofextended; // описатель мобов вокруг вспомогательная{ 1 - ID
2 - X
3 - Y
4 - Z}//******************************************************************************procedure Init; //Вызывается при включении скриптаbegin
Log:=TStringList.Create;
UnderAttack:=false;
itm:=0;
scrready:=false;
colvomobs:=0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=False;
timer1.interval:=2000;
timerA:=TTimer.Create(nil);
timerA.OnTimer:=@OnTimerA;
timerA.enabled:=False;
timerA.interval:=500;
stoped:=true;
IDH:=TStringList.Create;
IDH.LoadFromFile('IDH.txt');
HealID:=StrToInt(IDH[0]);
end;
procedure Free; //Вызывается при выключении скриптаbegin
Log.Free;
timer1.Free;
timerA.Free;
stoped:=false;
wh:=false;
IDH[0]:=IntToStr(HealID);
IDH.SaveToFile('IDH.txt');
HealID:=0;
BotCoordX:=0;
BotCoordY:=0;
BotCoordZ:=0;
CharID:=0;
ObjectID:=0;
Attacker:=0;
end;
procedure Say(msg:string);
begin//AddLog(msg);end;
procedure StatusUpdate;
var
i:integer;
beginfor i:=0to ReadD(6)-1doif pck[i*8+10]=#$09then CurHP:=ReadD(i*8+14);
if CurHP<=MinHP thenbegin
buf:=#$19;
WriteD(HealID);
WriteD(0);
SendToServerEx(Name);
end;
end;
procedure OnTimer1(Sender: TObject);
beginif Stoped=falsethenbeginif UnderAttack thenexit;
MinPutID:=0;
MinPutLenght:=99999999;
for i:=1tomaxdobeginif(MobBaseExt[1,i]<>0)thenbegin
tempX:=MobBaseExt[2,i];
tempY:=MobBaseExt[3,i];
tempLenght:=int(sqrt((BotCoordXext-tempx)*(BotCoordXext-tempx)+(BotCoordYext-tempy)*(BotCoordYext-tempy)));
if(tempLenght<MinPutLenght)and(CharID<>MobBase[1,i])thenbegin
MinPutLenght:=tempLenght;
MinPutID:=i;
end;
end;
end;
if(minputid<>0)thenbegin
Attacker:=MobBase[1,MinPutID];
TargetAttacker;
say('Атакуем моба!');
end;
end;
end;
procedure TargetAtt;
beginif Stoped=falsethenbegin
buf:=#$1F;
WriteD(Attacker);
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteC(00);
SendToServerEx(Name);
end;
end;
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$39;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
procedure OnTimerA(Sender: TObject);
beginif(Stoped=false)and(UnderAttack)and(Spoiled=false)thenbegin MagicSkillUse(Spoil); TargetAtt; end;
end;
procedure TargetAttacker;
begin
TargetAtt; //Берём в таргет
timerA.enabled:=true;
Spoiled:=false;
UnderAttack:=true; //зацепимся за атакуемогоend;
begin//не пропускаем пустые пакетыif pck=''thenexit;
//NPCInfo, запоминаем мобовif FromServer and(ConnectName=Name)and(pck[1]=#$0C)thenbegin
AddMob:=true;
//проверка, входит моб в радиус действия?
tempX:=ReadD(14); //x
tempY:=ReadD(18); //y
tempLenght:=sqrt((BotCoordX-tempX)*(BotCoordX-tempX)+(BotCoordY-tempY)*(BotCoordY-tempY));
//проверям, не под землей ли моб(в катакомбах)
tempZ:=BotCoordZ-ReadD(22);
if tempz<0then tempZ:=tempz*(-1);
if tempZ<=DeltaZ thenbeginif(tempLenght<Radius)thenbeginfor i:=1tomaxdobegin//если нашли Моба в базе, то коректируем его координаты на новыеif(MobBase[1,i]=ReadD(2))and(CharID<>ReadD(2))thenbegin
MobBase[2,i]:=ReadD(14); //x
MobBase[3,i]:=ReadD(18); //y
MobBase[4,i]:=ReadD(22); //z//Ext массив
MobBaseExt[2,i]:=ReadD(14); //x
MobBaseExt[3,i]:=ReadD(18); //y
MobBaseExt[4,i]:=ReadD(22); //z
AddMob:=false;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового мобаfor i:=1tomaxdobeginif(MobBase[1,i]=0)and AddMob and(CharID<>ReadD(2))thenbegin//запоминаем моба в свободную ячейку
MobBase[1,i]:=ReadD(2); //ObjectID
MobBase[2,i]:=ReadD(14); //x
MobBase[3,i]:=ReadD(18); //y
MobBase[4,i]:=ReadD(22); //z//Ext массив
MobBaseExt[1,i]:=ReadD(2); //ObjectID
MobBaseExt[2,i]:=ReadD(14); //x
MobBaseExt[3,i]:=ReadD(18); //y
MobBaseExt[4,i]:=ReadD(22); //zinc(colvomobs);
say('Запоминаем координаты Моба'+' Количество мобов: '+inttostr(colvomobs));
break;
end;
end;
end;
end;
end;
//CharInfo, запоминаем игроковif FromServer and(ConnectName=Name)and(pck[1]=#$31)thenbegin
AddMob:=true;
for i:=1tomaxdobegin//если нашли чара в базе, то коректируем его координаты на новыеif(CharBase[1,i]=ReadD(18))thenbegin
CharBase[2,i]:=ReadD(2); //x
CharBase[3,i]:=ReadD(6); //y
CharBase[4,i]:=ReadD(10); //z
AddMob:=false;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового чараfor i:=1tomaxdobeginif(CharBase[1,i]=0)and AddMob thenbegin//запоминаем моба в свободную ячейку
CharBase[1,i]:=ReadD(18); //ObjectID
CharBase[2,i]:=ReadD(2); //x
CharBase[3,i]:=ReadD(6); //y
CharBase[4,i]:=ReadD(10); //z
NameChar:=ReadS(22);
say('Приближается Игрок '+NameChar+'!!!');
break;
end;
end;
for i:=1tomaxdobegin//если нашли Чара в базе Мобов, то удаляем егоif(MobBase[1,i]=ReadD(18))thenbegin
MobBase[1,i]:=0; //x
MobBase[2,i]:=0; //x
MobBase[3,i]:=0; //y
MobBase[4,i]:=0; //z//Ext массив
MobBaseExt[1,i]:=0; //x
MobBaseExt[2,i]:=0; //x
MobBaseExt[3,i]:=0; //y
MobBaseExt[4,i]:=0; //zdec(colvomobs);
say('Нашли Чара в базе Мобов, удаляем его'+' Количество мобов: '+inttostr(colvomobs));
end;
end;
end;
//MoveToLocation, коректируем координаты мобов в базеif FromServer and(ConnectName=Name)and(pck[1]=#$2F)thenbegin
AddMob:=true;
//проверка, входит моб в радиус действия?
tempX:=ReadD(6); //x
tempY:=ReadD(10); //y
tempLenght:=sqrt((BotCoordX-tempX)*(BotCoordX-tempX)+(BotCoordY-tempY)*(BotCoordY-tempY));
tempZ:=BotCoordZ-ReadD(14);
if tempz<0then tempZ:=tempz*(-1);
if tempZ<=DeltaZ thenbeginif(int(tempLenght)<Radius)thenbegin//перебираем базу и ищем там моба, который бежитfor i:=1tomaxdobegin//если нашли моба в базе, то коректируем его координаты на новыеif(MobBase[1,i]=ReadD(2))and(CharID<>ReadD(2))and(CharBase[1,i]<>ReadD(2))thenbegin//ObjectID
MobBase[2,i]:=ReadD(6); //x
MobBase[3,i]:=ReadD(10); //y
MobBase[4,i]:=ReadD(14); //z//Ext массив
MobBaseExt[2,i]:=ReadD(6); //x
MobBaseExt[3,i]:=ReadD(10); //y
MobBaseExt[4,i]:=ReadD(14); //z
AddMob:=false;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового мобаfor i:=1tomaxdobeginif(MobBase[1,i]=0)and AddMob and(CharID<>ReadD(2))thenbegin//запоминаем моба в свободную ячейку
MobBase[1,i]:=ReadD(2); //ObjectID
MobBase[2,i]:=ReadD(6); //x
MobBase[3,i]:=ReadD(10); //y
MobBase[4,i]:=ReadD(14); //z//Ext массив
MobBaseExt[1,i]:=ReadD(2); //ObjectID
MobBaseExt[2,i]:=ReadD(6); //x
MobBaseExt[3,i]:=ReadD(10); //y
MobBaseExt[4,i]:=ReadD(14); //zinc(colvomobs);
break;
end;
end;
end;
end;
end;
//MagicSkillUse , Attackif FromServer and(ConnectName=Name)and((pck[1]=#$48)or(pck[1]=#$33))thenbeginif UnderAttack thenexit; //сначало убъем одного
tmp:=ReadD(2);
ObjectID:=ReadD(6);
tmp2:=0;
for i:=1tomaxdoif(CharBase[1,i]=tmp)then tmp2:=1;
if(tmp2=0)and(CharID=ObjectID)and(tmp<>CharID)thenbegin
UnderAttack:=true; //нас атакуют
Attacker:=tmp;
Say('Нас атакуют!');
TargetAttacker;
end;
end;
//если принят пакет Dieif FromServer and(ConnectName=Name)and(pck[1]=#$00)thenbeginif ReadD(2)<>CharID thenbegin//ищем моба в базеif(Attacker=ReadD(2))thenbegin
UnderAttack:=false; //убили атакующего моба
timerA.enabled:=False;
if Spoiled then MagicSkillUse(Sweeper);
Spoiled:=false;
end;
for i:=1tomaxdobegin//очишаем запись связанную с етим мобомif(MobBase[1,i]=ReadD(2))thenbegindec(colvomobs);
MobBase[1,i]:=0; //ObjectID
MobBase[2,i]:=0; //x
MobBase[3,i]:=0; //y
MobBase[4,i]:=0; //z//Ext массив
MobBaseExt[1,i]:=0; //ObjectID
MobBaseExt[2,i]:=0; //x
MobBaseExt[3,i]:=0; //y
MobBaseExt[4,i]:=0; //zbreak;
end;
end;
endelsebegin
stoped:=true;
say('Бот был остановлен в связи со смертью.');
end;
end;
if FromServer and(ConnectName=Name)and(pck[1]=#$23)thenbegin// Здесь место для Вашей рекламы. А точнее для создания фигни, что бы бот не бил чужих мобов. Дерзайте :)end;
//если принят пакет DeleteObjectif FromServer and(ConnectName=Name)and(pck[1]=#$08)thenbeginif(Attacker=ReadD(2))thenbegin
UnderAttack:=false; //убили атакующего моба
timerA.enabled:=False;
end;
for i:=1tomaxdobegin//очишаем запись связанную с етим мобомif(MobBase[1,i]=ReadD(2))thenbegindec(colvomobs);
MobBase[1,i]:=0; //ObjectID
MobBase[2,i]:=0; //x
MobBase[3,i]:=0; //y
MobBase[4,i]:=0; //z//Ext массив
MobBaseExt[1,i]:=0; //ObjectID
MobBaseExt[2,i]:=0; //x
MobBaseExt[3,i]:=0; //y
MobBaseExt[4,i]:=0; //zbreak;
end;
end;
for i:=1tomaxdobegin//если нашли в базе, то удаляемif(CharBase[1,i]=ReadD(2))thenbegin
CharBase[2,i]:=0; //x
CharBase[3,i]:=0; //y
CharBase[4,i]:=0; //zend;
end;
end;
//ValidatePosition если принят пакет от клиента с моими кординатами тоif FromClient and(ConnectName=Name)and(pck[1]=#$59)thenbegin//запоминаем мои координаты
BotCoordX:=ReadD(2);
BotCoordY:=ReadD(6);
BotCoordZ:=ReadD(10);
//ext
BotCoordXext:=ReadD(2);
BotCoordYext:=ReadD(6);
BotCoordZext:=ReadD(10);
end;
//если от сервака принят пакет с UserInfoif FromServer and(ConnectName=Name)and(pck[1]=#$32)thenbegin//Запоминаем собственный ИД
CharID:=ReadD(18);
if scrready thenexitelsebegin
Say('Бот готов. ID лидера записаны.');
scrready:=true;
end;
end;
if FromClient and(ConnectName=Name)and(pck[1]=#$60)and(wh)thenbegin wh:=false; say('ID банки записаны!'); HealID:=ReadD(2); pck:=''; end;
if FromServer and(ConnectName=Name)and(pck[1]=#$18)and(CharID=ReadD(2))then StatusUpdate;
if FromServer and(ConnectName=Name)and(pck[1]=#$62)and(ReadD(2)=612)then Spoiled:=true;
if FromClient and(ConnectName=Name)and(pck[1]=#$34)thenbegin
SocialID:=ReadD(2);
case SocialID of//социальное действие Yes для начала6: begin
Say('Команда Старт!!!');
timer1.enabled:=true;
stoped:=false;
UnderAttack:=false;
pck:='';
exit;
end;
//социальное действие No для окончания5: begin//if CharID=0 then exit;
timer1.enabled:=false;
timerA.enabled:=False;
underattack:=false;
BotCoordX:=0;
BotCoordY:=0;
BotCoordZ:=0;
Say('Команда Стоп!!!');
stoped:=true;
pck:='';
exit;
end;
2: begin wh:=true; say('Ожидаем удаления банки'); pck:=''; end;
3: begin wh:=false; say('Отменено удаление банки'); pck:=''; end;
4: begin pck:=''; UnderAttack:=false; TimerA.enabled:=false; Attacker:=0; end;
end;
end;
end.
Для игроков fanage.ru, которым недавно подсунули тривиального антибота(при входе в игру диалог, в котором просят ввести код с картинок, минуту не вводишь - дисконнект):
delphi Код:
// тупо включи и наслаждайся жизнью.var
ids:array[0..9] ofinteger;
s:string;
html:string;
tmp:TStrings;
i:integer;
procedure Init;
begin
ids[1]:=1;
ids[2]:=6;
ids[3]:=3;
ids[4]:=9;
ids[5]:=5;
ids[6]:=2;
ids[7]:=8;
ids[8]:=0;
ids[9]:=4;
ids[0]:=7;
end;
function MiniSR(Sourse,Old,New:string):string;
var
i:integer;
e,s:string;
begin
i:=Pos(Old,Sourse);
s:=Copy(Sourse,0,i-1);
e:=Copy(Sourse,i+length(Old),length(Sourse)-i);
Result:=s+New+e;
end;
function SR(Sourse,Old,New:string):string;
beginwhilePos(Old,Sourse)<>0do Sourse:=MiniSR(Sourse,Old,New);
Result:=Sourse;
end;
beginif pck[1]=#$19thenbegin
s:='';
html:=ReadS(6);
ifCopy(html,Pos('<title>',html)+7,13)='Антибот(тест)'thenbegin
HTML:=Copy(Html,Pos('<table>',html)+7,length(html)-Pos('<table>',html));
HTML:=Copy(html,0,Pos('</table>',html)-1);
HTML:=SR(html,'<tr><td>','');
HTML:=SR(HTML,'</td></tr>','');
HTML:=SR(html,'</td><td>',#13);
tmp:=TStringList.Create;
tmp.Text:=html;
i:=0;
while i<>tmp.Countdobegin
tmp[i]:=Copy(tmp[i],Pos('00',tmp[i])+2,1);
s:=s+IntToStr(ids[StrToInt(tmp[i])]);;
i:=i+1;
end;
buf:=#$23;
WriteS('capcha '+s);
SendToServer;
pck:='';
end;
end;
end.
Ещё есть скрипт которым очень удобно слать месаги в чат с предметами. другими словами вы можете подменять предметы и шокировать ваших друзей чужой маджой или Ы пухой с рынка. Ах да, этот скрип НЕ для установки галочки, его надо запускать через вкладку дополнительно.
delphi Код:
var
e:string;
begin
buf:=#$49;
e:=chr(8);
e:=e+'Type=1 ID=269991058 Color=0 Underline=0 Title=';
e:=e+#$1B;
e:=e+'Анальные шарики';
e:=e+#$1B+chr(8);
e:=e+'. Доставь себе удовольствие за 50кк!!))';
WriteS(e);
WriteD(4);
SendToServer;
end.
Ну и гвоздь программы - мой скрипт на рыбалку. Интелект на уровне ИИ. Тыкаем - не попали, тыкаем другое, пока сново не промажем. как ни странно но помогает) умеет кушать соски. для его работы вы обязаны создать файл IDs.txt в папке пнх и записать в 6 строчек нули. потом работаем с сошиал экшенами и указываем ID сосок, удочки, пушки и тп..