Извените за нескромный вопрос, на мага ботика есть здесь скрипты есть? ато нашол одного и тот глюканутый был.
Постоянно выбирает середину в центре МИРА!
delphi Код:
//Бот_маг with 'Hachling of Star' by NLObP{
Социальное действие YES включить
Социальное действие NO выключить
Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.
}//******************************************************************************Const
Name='ozzzzzz'; //имя чара
Pet=''; //имя Петаmax=500; //max количество контролируемых мобов
Radius=1500; //радиус участка для поиска мобов
DeltaZ=250; //глубина/высота до мобов
Distance=600; //дистанция до моба
icebolt=1184; //ice bolt
windstrike=1177; //Wind Strike//******************************************************************************VAR
NameChar: string;
CharID, PetID, Attacker, ObjectID: integer;
CentrKachX,CentrKachY,CentrKachZ,RadiusKachX,RadiusKachY: integer;
CentrKachXex,CentrKachYex,RadiusKachXex,RadiusKachYex: extended;
tempX,tempY, tempLenght: extended;
tempZ, ColvoMobs: integer;
xe,ye: extended;
x,y,z,ox,oy,oz,n: integer;
MobCurHP, MobMaxHP, CurHP, MaxHP, CurMP, MaxMP: integer;
BotCoordX,BotCoordY,BotCoordZ: integer; //координаты бота
BotCoordXext,BotCoordYext,BotCoordZext:extended;
MinPutID: integer; //указывает индекс моба в базе путь до которого самый короткий
MinPutLenght: extended; //расстояния до ближайшего моба
timer1: TTimer; //основной таймер
timer2: TTimer; //вспомогательный
timerA: TTimer; //вспомогательный
i, itm, SocialID: integer; // вспомогательная
time1, time2: integer;
AddMob, UnderAttack, scrready, NeedBackup, fire: boolean;
ItemBase: array[1..4,1..max] ofinteger; // описатель предметов
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
UnderAttack:=false;
itm:=0;
NeedBackup:=false;
scrready:=false;
colvomobs:=0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=False;
timer1.interval:=1500; //каждые 2 сек ищем ближайшего моба для атаки
timerA:=TTimer.Create(nil);
timerA.OnTimer:=@OnTimerA;
timerA.enabled:=False;
timerA.interval:=1500; //каждые 2 сек магическая атака
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=5000;
//RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
//******************************************************************************procedure Free; //Вызывается при выключении скриптаbegin
timer1.Free;
timer2.Free;
timerA.Free;
end;
//******************************************************************************//сообщения в приват, на сервер не отправляютсяprocedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//*******************************************************************function Wait(var tick: integer;Timewait: Integer): Boolean;
// сквозная проверка без остановки скрипта (c)dmitry501// modifed by Sh00rGovar
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait)thenbeginif tick>0then result:=true;
tick:=t;
end;
end;
//******************************************************************************procedure ReqGetItem;
beginif itm=0thenbegin
timer1.enabled:=true; //включаем отсчет времени
needbackup:=false;
exit;
end;
timer1.enabled:=false; //выключаем отсчет времени//перебираем базуfor i:=1tomaxdobegin//если нашли, то обнуляемif(ItemBase[1,i]<>0)thenbegin//ObjectID
say('ReqGetItem');
//даем команду подобрать вещь
buf:=#$04;
WriteD(ItemBase[1,i]);
WriteD(ItemBase[2,i]);
WriteD(ItemBase[3,i]);
WriteD(ItemBase[4,i]);
WriteH(00);
SendToServerEx(Name);
end;
end;
end;
//******************************************************************************procedure OnTimer2(Sender: TObject);
begin
UnderAttack:=false; //отцепимся от атакуемогоif itm>0then needbackup:=true;
end;
//******************************************************************************//0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID)d(AttrValue)procedure StatusUpdate;
var
i: integer;
beginfor i:=0to ReadD(6)-1dobegincase pck[i*8+10] of
#$09: MobCurHP:=ReadD(i*8+14);
#$0A: MobMaxHP:=ReadD(i*8+14);
end;
end;
if(MobCurHP<=0)thenbegin
underattack:=false;
say('Убили!');
end;
end;
//******************************************************************************procedure OnTimer1(Sender: TObject);
begin//не вычисляем, если уже атакуемif UnderAttack thenexit;
MinPutID:=0;
MinPutLenght:=99999999;
///ищем самого близкого к нам мобаfor i:=1tomaxdobeginif(MobBaseExt[1,i]<>0)thenbegin
tempX:=MobBaseExt[2,i];
tempY:=MobBaseExt[3,i];
//расстояние по теореме Пифагора: c^2=a^2+b^2
tempLenght:=int(sqrt((BotCoordXext-tempx)*(BotCoordXext-tempx)+(BotCoordYext-tempy)*(BotCoordYext-tempy)));
if(tempLenght<MinPutLenght)and(PetID<>MobBase[1,i])and(CharID<>MobBase[1,i])thenbegin
MinPutLenght:=tempLenght;
MinPutID:=i;
end;
end;
end;
if(minputid<>0)thenbegin
Attacker:=MobBase[1,MinPutID];
TargetAttacker(Attacker);
say('Атакуем моба!');
endelse MoveCenter;
end;
//******************************************************************************//01=MoveBackwardToLocation:d(targetX)d(targetY)d(targetZ)d(originX)d(originY)d(originZ)d(moveByMouse)procedure MoveDistance;
begin
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:=#$01;
WriteD(x);
WriteD(y);
WriteD(z);
WriteD(BotCoordx);
WriteD(BotCoordy);
WriteD(BotCoordz);
WriteD(01);
SendToServerEx(Name);
say('держим дистанцию');
end;
procedure MoveCenter;
begin
buf:=#$01;
WriteD(CentrKachx);
WriteD(CentrKachy);
WriteD(CentrKachz);
WriteD(BotCoordx);
WriteD(BotCoordy);
WriteD(BotCoordz);
WriteD(01);
SendToServerEx(Name);
say('бежим в центр');
end;
//******************************************************************************procedure TargetAtt;
begin
buf:=#$04;
WriteD(Attacker);
WriteD(BotCoordX);
WriteD(BotCoordY);
WriteD(BotCoordZ);
WriteC(00);
SendToServerEx(Name);
end;
//***************************************************************//2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b(ShiftPressed)procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//******************************************************************************procedure OnTimerA(Sender: TObject);
begin
MagicSkillUse(windstrike);
MoveDistance;
say('magic attack');
end;
//******************************************************************************procedure TargetAttacker(Attacker: Integer);
begin
TargetAtt;
timerA.enabled:=true;
UnderAttack:=true; //зацепимся за атакуемого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]=#$16)thenbegin
AddMob:=true;
//проверка, входит моб в радиус действия?
tempX:=ReadD(14); //x
tempY:=ReadD(18); //y
tempLenght:=sqrt((CentrKachXex-tempX)*(CentrKachXex-tempX)+(CentrKachYex-tempY)*(CentrKachYex-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))and(PetID<>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))and(PetID<>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('Запоминаем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));
break;
end;
end;
end;
end;
end;
//****************************************************************************//CharInfo, запоминаем игроковif FromServer and(ConnectName=Name)and(pck[1]=#$03)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('Нашли Чара в базе Мобов, удаляем его'+' ColvoMobs='+inttostr(colvomobs));
end;
end;
end;
//****************************************************************************//MoveToLocation, коректируем координаты мобов в базеif FromServer and(ConnectName=Name)and(pck[1]=#$01)thenbegin
AddMob:=true;
//проверка, входит моб в радиус действия?
tempX:=ReadD(6); //x
tempY:=ReadD(10); //y
tempLenght:=sqrt((CentrKachXex-tempX)*(CentrKachXex-tempX)+(CentrKachYex-tempY)*(CentrKachYex-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(PetID<>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))and(PetID<>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]=#$05))thenbeginif UnderAttack thenexit; //сначало убъем одного
Attacker:=ReadD(2);
ObjectID:=ReadD(6);
if(Attacker<>ObjectID)and(CharID=ObjectID)thenbegin
UnderAttack:=true; //нас атакуют
needbackup:=false;
Say('Нас атакуют!');
TargetAttacker(Attacker);
end;
end;
//****************************************************************************//если принят пакет Dieif FromServer and(ConnectName=Name)and(pck[1]=#$06)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;
end;
//****************************************************************************//если принят пакет DeleteObjectif FromServer and(ConnectName=Name)and(pck[1]=#$12)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]=#$48)thenbegin//запоминаем мои координаты
BotCoordX:=ReadD(2);
BotCoordY:=ReadD(6);
BotCoordZ:=ReadD(10);
//ext
BotCoordXext:=ReadD(2);
BotCoordYext:=ReadD(6);
BotCoordZext:=ReadD(10);
end;
//****************************************************************************//если от сервака принят пакет с ИД и Координатами членов пати тоif FromServer and(ConnectName=Name)and(pck[1]=#$a7)thenbegin//запоминаем ИД командира
CharID:=ReadD(6);
if scrready thenexitelsebegin
Say('Скрипт готов к работе. Запомнил ИД лидера');
scrready:=true;
end;
end;
//****************************************************************************//если от сервака принят пакет с UserInfoif FromServer and(ConnectName=Name)and(pck[1]=#$04)thenbegin//Запоминаем собственный ИД
CharID:=ReadD(18);
if scrready thenexitelsebegin
Say('Скрипт готов к работе. Запомнил ИД лидера');
scrready:=true;
end;
end;
//****************************************************************************//если от сервака принят пакет с PetInfoif FromServer and(PetID=0)and(ConnectName=Name)and(pck[1]=#$b1)then PetID:=ReadD(6);
//****************************************************************************//DropItem - выпала вещьif FromServer and(ConnectName=Name)and(pck[1]=#$0C)thenbegin//чужие вещи не беремif(Attacker=ReadD(2))thenbegin
timer1.enabled:=false; //выключаем бота
AddMob:=true;
//перебираем базуfor i:=1tomaxdobegin//если нашли, то корректируем его координаты на новыеif(ItemBase[1,i]=ReadD(6))thenbegin//ObjectID
ItemBase[2,i]:=ReadD(14); //x
ItemBase[3,i]:=ReadD(18); //y
ItemBase[4,i]:=ReadD(22); //z
AddMob:=false;
inc(itm);
NeedBackup:=true;
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляемfor i:=1tomaxdobeginif(ItemBase[1,i]=0)thenbegin//запоминаем в свободную ячейку
ItemBase[1,i]:=ReadD(6); //ObjectID
ItemBase[2,i]:=ReadD(14); //x
ItemBase[3,i]:=ReadD(18); //y
ItemBase[4,i]:=ReadD(22); //zinc(itm);
NeedBackup:=true;
break;
end;
end;
end;
say('ColvoItm='+inttostr(itm));
end;
//****************************************************************************//каждые две сек подбираем предметif Wait(time1,2)and NeedBackup and(underAttack=false)then ReqGetItem;
//****************************************************************************//определяем реальность поднятия вещи//GetItemif FromServer and(ConnectName=Name)and(pck[1]=#$0D)thenbegin//перебираем базуfor i:=1tomaxdobegin//если нашли, то обнуляемif(ItemBase[1,i]=ReadD(6))thenbegin//ObjectID
ItemBase[1,i]:=0; //x
ItemBase[2,i]:=0; //x
ItemBase[3,i]:=0; //y
ItemBase[4,i]:=0; //zdec(itm);
//say('Удаляем данные по предмету');end;
end;
if itm=0thenbegin
needbackup:=false;
timer1.enabled:=true;
end;
say('ColvoItm='+inttostr(itm));
end;
//******************************************************************************//StatusUpdateif FromServer and(ConnectName=Name)and(pck[1]=#$0E)and(Attacker=ReadD(2))then StatusUpdate;
//****************************************************************************if FromClient and(ConnectName=Name)and(pck[1]=#$1B)thenbegin
SocialID:=ReadD(2);
pck:='';
case SocialID of//социальное действие Yes для начала6: begin//if CharID=0 then exit;
CentrKachX:=BotCoordX;
CentrKachY:=BotCoordY;
CentrKachZ:=BotCoordZ;
CentrKachXex:=BotCoordXext;
CentrKachYex:=BotCoordYext;
Say('Команда Старт!!!');
say('Получили координаты центра');
say('X='+inttostr(BotCoordX)+' Y='+inttostr(BotCoordY));
timer1.enabled:=true;
exit;
end;
//социальное действие No для окончания5: begin//if CharID=0 then exit;
timer1.enabled:=false;
timer2.enabled:=false;
timerA.enabled:=False;
underattack:=false;
Say('Команда Стоп!!!');
exit;
end;
end;
end;
end.
Добавлено через 15 часов 13 минут
типа тут нет маг бота нормального?
Последний раз редактировалось QaK, 18.08.2008 в 17:51.
Причина: Добавлено сообщение