PDA

Просмотр полной версии : Помогите сделать скрипт


NEOXP
16.12.2007, 14:23
Доброго времени суток, решил попробовать делать скрипты, но, начать не получается)

Хочу сделать чтото вроде бесплатного баф НПС из своего чара
Впринципе я примерно себе представляю как это можно сделать, но чтото никак, помогите пожалуста!
Например чтобы еслиб мне кинули пати, скрипт принял пати, использовал 4 скилла, вышел из пати.
В дальнейшем попробую усовершенствовать если например мп<20% сел использовать баночку,на все приёмы в пати отклонял и говорил в пм/в чат что мало МП, при наборе 100%мп встал и снова делал своё дело. Ну или впринципе если вы сможете такое сделать, не откажусь от помощи)

VORON
16.12.2007, 15:47
для автоприёма пати я использую такой кусочек:
//******************************АВТОСОГЛАШЕНИЕ НА ВСТУПЛЕНИЕ В ПАТИ************************
//******************************ПРИ УСЛОВИИ ЧТО ПАТИ ДАЕТ- КОМАНДИР************************
if FromServer and (ConnectName=NameBot1) and (pck[1]=#$39) then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot1);
end;

ну а для отправки пати я использую такой:

buf:=hstr('29');
writeS(namebot1);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);

а для разрыва пати я имспользую такой:

buf:=hstr('2B');
SendToServerEX(NameKom);

NEOXP
16.12.2007, 16:07
Вот я пока сделал вот так

if FromServer and (pck[1]=#$39) then
begin
buf:=Hstr('2A 01 00 00 00 ');
sendtoserver;
buf:=Hstr(b1);
sendtoserver;
buf:=Hstr(b2);
sendtoserver;
buf:=Hstr(b3);
sendtoserver;
buf:=Hstr(b4);
sendtoserver;
buf:=Hstr('2B');
SendToServer;
end;
end.

но он чтото очень быстро всё пробегает пару песен споётсам для себя и всё... надо задержки сделать только не пойму куда и сколько)

Добавлено спустя 2 минуты 11 секунд:
задержку бы секунды 2 после того как примет пати, начнёт первую песню пока поёт чобы была задержка секунды 2 начинает песть вторую опять задержка 2 сек

VORON
16.12.2007, 16:15
ну когда люди начнут грамотно вопросы задавать?
париш моск а тебе всеголиш надо 10 бафов наложить? поочереди? с задержкой?
есть 2 варианта если бафов 2 штуки то используй то что ты написал...

2 пкета посланые на баф подряд- норм ощитываются серваком..
если 3 бафа то меду вторым и 3-м используй delay(6000) 6 секунд...
если бафов больше чем 3.. то используется таймер.. типа такого:

//*********************??? ??************************************************ ******************
procedure OnTimer1(Sender: TObject);
begin
bafSE[1]:=hstr('2F 2C 04 00 00 00 00 00 00 00'); //??
bafSE[2]:=hstr('2F 10 04 00 00 00 00 00 00 00'); //??
bafSE[3]:=hstr('2F 35 04 00 00 00 00 00 00 00'); //?????
bafSE[4]:=hstr('2F B4 04 00 00 00 00 00 00 00'); //??
bafSE[5]:=hstr('2F 0B 04 00 00 00 00 00 00 00'); //??????
bafSE[6]:=hstr('2F A5 04 00 00 00 00 00 00 00'); //?????? ? ?????
bafSE[7]:=hstr('2F D8 04 00 00 00 00 00 00 00'); //???????-???????
bafSE[8]:=hstr('2F DA 04 00 00 00 00 00 00 00'); //??? ??????- ???? ?????
bafSE[9]:=hstr('2F 36 04 00 00 00 00 00 00 00'); //???
bafSE[10]:=hstr('2F 23 04 00 00 00 00 00 00 00'); //???????
bafSE[11]:=hstr('2F F4 04 00 00 00 00 00 00 00'); //????
bafSE[12]:=hstr('2F 70 05 00 00 00 00 00 00 00'); //?????? ???? ???????

BafSEApplyChar[1]:=IDKomandos;
BafSEApplyBaf[1]:=bafSE[1];
BafSEApplyChar[2]:=IDKomandos;
BafSEApplyBaf[2]:=bafSE[2];
BafSEApplyChar[3]:=IDKomandos;
BafSEApplyBaf[3]:=bafSE[3];
BafSEApplyChar[4]:=IDKomandos;
BafSEApplyBaf[4]:=bafSE[8];
BafSEApplyChar[5]:=IDKomandos;
BafSEApplyBaf[5]:=bafSE[4];
BafSEApplyChar[6]:=IDKomandos;
BafSEApplyBaf[6]:=bafSE[7];
BafSEApplyChar[7]:=IDKomandos;
BafSEApplyBaf[7]:=bafSE[5];
BafSEApplyChar[8]:=IDKomandos;
BafSEApplyBaf[8]:=bafSE[6];

BafSEApplyChar[9]:=IDBot1;
BafSEApplyBaf[9]:=bafSE[2];
BafSEApplyChar[10]:=IDBot1;
BafSEApplyBaf[10]:=bafSE[9];
BafSEApplyChar[11]:=IDBot1;
BafSEApplyBaf[11]:=bafSE[4];
BafSEApplyChar[12]:=IDBot1;
BafSEApplyBaf[12]:=bafSE[5];
BafSEApplyChar[13]:=IDBot1;
BafSEApplyBaf[13]:=bafSE[6];
BafSEApplyChar[14]:=IDBot1;
BafSEApplyBaf[14]:=bafSE[10];
BafSEApplyChar[15]:=IDBot1;
BafSEApplyBaf[15]:=bafSE[12];

BafSEApplyChar[16]:=IDBot2;
BafSEApplyBaf[16]:=bafSE[10];

buf:=hstr('04') + BafSEApplyChar[tick1] + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);

buf:=BafSEApplyBaf[tick1];
SendToServerEX(NameBot1);


tick1:=tick1+1;

if tick1=17 then
begin
tick1:=1;
timer1.enabled:=false;
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
end;

NEOXP
16.12.2007, 19:38
Ругается на последний end

Добавлено спустя 2 минуты 55 секунд:
Вроде это не на то чтобы в пати бафал.

Добавлено спустя 1 час 53 минуты 15 секунд:
Пытаюсь использовать этот скрипт


//исходник by mks | переработан boyan
//Prophet бафае

const //баффы профета
b1='2F 30 01 00 00 00 00 00 00 00 '; //shield
b2='2F 0E 01 00 00 00 00 00 00 00 '; //mental shield
b3='2F 0D 01 00 00 00 00 00 00 00 '; //acumen
b4='2F 0C 01 00 00 00 00 00 00 00 '; //blessHP
b5='2F B4 04 00 00 00 00 00 00 00 '; //ww
b6='2F 0C 04 00 00 00 00 00 00 00 '; //magic barier
b7='2F 30 01 00 00 00 00 00 00 00 '; //bers


var
Target1: string;
Target: string;
prof,x: integer;
timer1: TTimer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=2000;
end;

procedure OnTimer(Sender: TObject);

begin
case x of
1: begin
buf:=hstr(b1);
sendtoserver;
x:=x+1;
end;
2: begin
buf:=hstr(b2);
sendtoserver;
x:=x+1;
end;
3: begin
buf:=hstr(b3);
sendtoserver;
x:=x+1;
end;
4: begin
buf:=hstr(b4);
sendtoserver;
x:=x+1;
end;
5: begin
buf:=hstr(b5);
sendtoserver;
x:=x+1;
end;
6: begin
buf:=hstr(b6);
sendtoserver;
x:=0;
buf:=#$38;
WriteS('text');
WriteD(0);
SendToServer;
end;
end;


end;

procedure Free;
begin
timer1.Free;
end;
///////////////////////////////////////////////////////////////////
begin

if FromServer and (pck[1]=#$5E) and (x=0) then //подкорректил немного, что б бот не принимал трэйд когда кого-то уже баффает 06.08.07
begin
Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5];
buf:=hstr('44 01 00 00 00');
sendtoserver; //если кидают трэйд, то принимать
end;
if fromclient and (pck[1]=#$44) then
begin
pck:=''; {клиент почему-то иногда автоматом отылает кэнсл трэйд, поэтому убиватю этот пакет}
sendtoserver;
end;
if fromserver and (pck[1]=#$21) then
begin
if pck[14]+pck[15]+pck[16]=#$E8#$03#$00 then {если в трэйд положили 1000}
begin
buf:=hstr('17 01 00 00 00');//подтвердить трэйд
prof:=1;
end;
if prof=0 then buf:=hstr('17 00 00 00 00');//отмена трэйда
sendtoserver;
end;

if FromServer and (pck[1]+pck[2]=#$22#$01) then
begin
buf:=hstr('29');
sendtoserver;

if FromServer and (pck[1]+pck[2]=#$3A#$01) then
buf:=target;
sendtoserver;

if prof=1 then
begin
x:=1;
prof:=0;
end;

end;


if FromServer and (pck[1]=#$39) then //если кидают пати - берет ее, бафает берс, и выходит из пати
begin
buf:=Hstr('2A 01 00 00 00 ');
sendtoserver;
buf:=Hstr(b1);
sendtoserver;
delay(1000);
buf:=Hstr(b2);
sendtoserver;
delay(1000);
buf:=Hstr(b3);
sendtoserver;
delay(1000);
buf:=Hstr(b4);
sendtoserver;
delay(2000);
buf:=Hstr('2B');
SendToServer;
end;
end.

Посе получения денег не знаю как сделать так тчобы выделил цель и послал предложение пати, после входа в пати продолжил скрипт по оригиналу, тоесть надо просто вставить чтобы после получения денег предлогал пати.

Добавлено спустя 1 час 5 минут 1 секунду:
Сделал вот так

//???????? by mks | ??????????? boyan
//Prophet ?????

const //????? ???????
b1='2F 30 01 00 00 00 00 00 00 00 '; //shield
b2='2F 0E 01 00 00 00 00 00 00 00 '; //mental shield
b3='2F 0D 01 00 00 00 00 00 00 00 '; //acumen
b4='2F 0C 01 00 00 00 00 00 00 00 '; //blessHP
b5='2F B4 04 00 00 00 00 00 00 00 '; //ww
b6='2F 0C 04 00 00 00 00 00 00 00 '; //magic barier
b7='2F 30 01 00 00 00 00 00 00 00 '; //bers


var
Target: string;
prof,x: integer;
timer1: TTimer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=2000;
end;

procedure OnTimer(Sender: TObject);

begin
case x of
1: begin
buf:=hstr('29');
sendtoserver;
x:=x+1;
end;
2: begin
buf:=hstr(b1);
sendtoserver;
x:=x+1;
end;
3: begin
buf:=hstr(b2);
sendtoserver;
x:=x+1;
end;
4: begin
buf:=hstr(b3);
sendtoserver;
x:=x+1;
end;
5: begin
buf:=hstr(b4);
sendtoserver;
x:=x+1;
end;
6: begin
buf:=hstr(b5);
sendtoserver;
x:=x+1;
end;
7: begin
buf:=hstr(b6);
sendtoserver;
x:=0;
buf:=#$38;
WriteS('Spasibo i udachi! Nuzhen bers? invite to party');
WriteD(0);
SendToServer;
end;
end;


end;

procedure Free;
begin
timer1.Free;
end;
///////////////////////////////////////////////////////////////////
begin

if FromServer and (pck[1]=#$5E) and (x=0) then //???????????? ???????, ??? ? ??? ?? ???????? ????? ????? ????-?? ??? ??????? 06.08.07
begin
Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5];
buf:=hstr('44 01 00 00 00');
sendtoserver; //???? ?????? ?????, ?? ?????????
end;
if fromclient and (pck[1]=#$44) then
begin
pck:=''; {?????? ??????-?? ?????? ????????? ??????? ????? ?????, ??????? ??????? ???? ?????}
sendtoserver;
end;
if fromserver and (pck[1]=#$21) then
begin
if pck[14]+pck[15]+pck[16]=#$E8#$03#$00 then {???? ? ????? ???????? 2000000}
begin
buf:=hstr('17 01 00 00 00');//??????????? ?????
prof:=1;
end;
if prof=0 then buf:=hstr('17 00 00 00 00');//?????? ??????
sendtoserver;
end;

if FromServer and (pck[1]+pck[2]=#$22#$01) then
begin
buf:=target;
sendtoserver;

if prof=1 then
begin
x:=1;
prof:=0;
end;

end;


if FromServer and (pck[1]=#$39) then //???? ?????? ???? - ????? ??, ?????? ????, ? ??????? ?? ????
begin
buf:=Hstr('2A 01 00 00 00 ');
sendtoserver;
buf:=Hstr(b1);
sendtoserver;;
buf:=Hstr(b2);
sendtoserver;
buf:=Hstr(b3);
sendtoserver;
buf:=Hstr(b4);
sendtoserver;
buf:=Hstr('2B');
SendToServer;
end;
end.




Но пати не кидает, пишет неправельная цель...

Добавлено спустя 8 минут 55 секунд:
Вобщем не понимаю как сделать так чтобы скрипт послал покет запроса пати тому кто дал деньги

case x of
1: begin
buf:=hstr('29');
sendtoserver;
x:=x+1;
end;

здесь кажется точно не просто 29, надо тчото ещё вписать, но что...

VORON
16.12.2007, 23:56
м я не знаю в чем у тебя проблем- но проблемы пока я неуслыхал..
хотя я щас пьян извени уж тут.. что поделать голова плохо варит но.. думаю..
bnfr
итак для отправки пати нужно:
buf:=hstr('29');
writeS(namebot1);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);

используется имя а не ИД

для того чтобы пати порвать:

buf:=hstr('2B');
SendToServerEX(NameKom);

для автоприёма пати нужно:

//******************************АВТОСОГЛАШЕНИЕ НА ВСТУПЛЕНИЕ В ПАТИ************************
//******************************ПРИ УСЛОВИИ ЧТО ПАТИ ДАЕТ- КОМАНДИР************************
if FromServer and (ConnectName=NameBot1) and (pck[1]=#$39) then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot1);
end;

Добавлено спустя 2 минуты 5 секунд:
так как нажно имя- то его нужно знать... узнать имя можно из массива который мы сохраним в памяти- из пакета ЧАР ИНФО.. соответствие ИД- живым чарам...

NEOXP
17.12.2007, 01:17
//???????? by mks | ??????????? boyan
//Prophet ?????

const //????? ???????
b1='2F 30 01 00 00 00 00 00 00 00 '; //shield
b2='2F 0E 01 00 00 00 00 00 00 00 '; //mental shield
b3='2F 0D 01 00 00 00 00 00 00 00 '; //acumen
b4='2F 0C 01 00 00 00 00 00 00 00 '; //blessHP
b5='2F B4 04 00 00 00 00 00 00 00 '; //ww
b6='2F 0C 04 00 00 00 00 00 00 00 '; //magic barier
b7='2F 30 01 00 00 00 00 00 00 00 '; //bers


var
Target: string;
prof,x: integer;
timer1: TTimer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=2000;
end;

procedure OnTimer(Sender: TObject);

begin
case x of
1: begin
buf:=hstr('29');
sendtoserver;
x:=x+1;
end;
2: begin
buf:=hstr(b1);
sendtoserver;
x:=x+1;
end;
3: begin
buf:=hstr(b2);
sendtoserver;
x:=x+1;
end;
4: begin
buf:=hstr(b3);
sendtoserver;
x:=x+1;
end;
5: begin
buf:=hstr(b4);
sendtoserver;
x:=x+1;
end;
6: begin
buf:=hstr(b5);
sendtoserver;
x:=x+1;
end;
7: begin
buf:=hstr(b6);
sendtoserver;
x:=0;
buf:=#$38;
WriteS('Spasibo i udachi! Nuzhen bers? invite to party');
WriteD(0);
SendToServer;
end;
end;


end;

procedure Free;
begin
timer1.Free;
end;
///////////////////////////////////////////////////////////////////
begin

if FromServer and (pck[1]=#$5E) and (x=0) then //???????????? ???????, ??? ? ??? ?? ???????? ????? ????? ????-?? ??? ??????? 06.08.07
begin
Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5]; Вот тут я так понимаю выделяется в тагет тот кто дал деньги, pck[2]+pck[3]+pck[4]+pck[5]; это его имя кажется, так вот надо вот это вот надо подставить както вот сюда (сюда это то где отмечено синим, повыше)
buf:=hstr('44 01 00 00 00');
sendtoserver; //???? ?????? ?????, ?? ?????????
end;
if fromclient and (pck[1]=#$44) then
begin
pck:=''; {?????? ??????-?? ?????? ????????? ??????? ????? ?????, ??????? ??????? ???? ?????}
sendtoserver;
end;
if fromserver and (pck[1]=#$21) then
begin
if pck[14]+pck[15]+pck[16]=#$E8#$03#$00 then {???? ? ????? ???????? 2000000}
begin
buf:=hstr('17 01 00 00 00');//??????????? ?????
prof:=1;
end;
if prof=0 then buf:=hstr('17 00 00 00 00');//?????? ??????
sendtoserver;
end;

if FromServer and (pck[1]+pck[2]=#$22#$01) then
begin
buf:=target;
sendtoserver;

if prof=1 then
begin
x:=1;
prof:=0;
end;

end;


if FromServer and (pck[1]=#$39) then //???? ?????? ???? - ????? ??, ?????? ????, ? ??????? ?? ????
begin
buf:=Hstr('2A 01 00 00 00 ');
sendtoserver;
buf:=Hstr(b1);
sendtoserver;;
buf:=Hstr(b2);
sendtoserver;
buf:=Hstr(b3);
sendtoserver;
buf:=Hstr(b4);
sendtoserver;
buf:=Hstr('2B');
SendToServer;
end;
end.








ВОбщем проще говоря, как сделать так, чтобы чар брал в пати любого кто скажет hello например, или дай пати.

Mithras
17.12.2007, 08:51
// Если изменилась строка бафов то бафать следующий
if FromServer and (ConnectName=CharName) and (i>0) and (Ready=true) and (pck[1]=#$76) and (ReadD(2)=ObjectID) then
begin
if(i=N) then
begin
Timer.enabled:=true;
i:=0;
exit;
end;
if(i<N) then
begin
buf:=Skills[i];
SendToServerEx(CharName);
say('Юзаем скилл N'+inttostr(i+1));
Inc(i);
end;
end;
Поясню, этот кусок позволяет делать задержку между бафами НЕ статической, т.е. когда боту(баферу) приходит пакет об окончании каста, ложить следующий баф. if(i=N) - а это потому что пакет о конце каста приходит немного рановато, скилы при этом все равно срабатывают как надо, а из пати выходит ДО наклабывания последнего бафа. Поэтому выход из пати делаю по таймеру с задержкой 1 секунду. Как и где это испольховать додумывайте сами.

Иеще, если уж бот принимает пати, то надо убивать пакет от клиента на отказ пати(который шлется автоматом через секунд 10 примерно), чтоб лишний раз не палиться...

VORON
17.12.2007, 09:12
сила....

boyan
17.12.2007, 12:28
NEOXP, у тебя бот сам кидает пати, и начинает бафать.. сделай так, чтобы ему кидали пати, и как только кидают пати он начинает бафать.. в моей перетедлке скрипта mks, это сделано.. если ему заплатили за баф, и если тот кто заплатил кинет пати, бот ее возьмет и бафнет берс

NEOXP
17.12.2007, 16:40
NEOXP, у тебя бот сам кидает пати, и начинает бафать.. сделай так, чтобы ему кидали пати, и как только кидают пати он начинает бафать.. в моей перетедлке скрипта mks, это сделано.. если ему заплатили за баф, и если тот кто заплатил кинет пати, бот ее возьмет и бафнет берс

но ведь если не заплатят а просто предложат пати то тоже возьмёт и бафнет)

05.01.2008, 18:26
Продолжая тему, на серваке на котором я играю(onpulse.ru) за гоблинов дают больше експы и золота, и при этом есть несколько НО:
1. гоблины есть только в первоначальных локациях(Шилиен темпл, Шадов оф мозер три и .т.п)
2. и второе то, что если ты выше 77 лвл(или 77) то тебя телепортирует в Гиран.
Так вот я хотел попросить вас помочь мне в написании скрипта, который позволит качатся на этих гоблинах после 77лвл

ChiterEPT
06.01.2008, 03:22
Продолжая тему, на серваке на котором я играю(onpulse.ru) за гоблинов дают больше експы и золота, и при этом есть несколько НО:
1. гоблины есть только в первоначальных локациях(Шилиен темпл, Шадов оф мозер три и .т.п)
2. и второе то, что если ты выше 77 лвл(или 77) то тебя телепортирует в Гиран.
Так вот я хотел попросить вас помочь мне в написании скрипта, который позволит качатся на этих гоблинах после 77лвл

Какой то бред :)) тебе нужен бот который прибежит из гирана добивать гоблина :)))))

06.01.2008, 21:37
нет, гоблина добить я успеваю,даже штуки 3(там тип скилла гигант файрбол) :twisted: но опыт, и соответственно адена мне не достаются :cry: -я тут же оказываюсь в Гиране. %)

dmitry501
07.01.2008, 10:11
убей кого-нибудь в пк, сделай квест на импа и приходи бить гоблинов с импом. Не забудь ему еды купить.

07.01.2008, 23:31
спс но, не получилось, ботом давал пати, но опыта 0.
А тогда вопросец, можете написать скрипт, блокирующий прием опыта?

QaK
09.01.2008, 10:55
А тогда вопросец, можете написать скрипт, блокирующий прием опыта?
"Прием опыта" просчитывается со стороны сервера, его блокировать низя :no: только сервак ломануть или ГМский аккаунт :)

08.03.2008, 19:20
Помогите пожалуйста с синтаксисом или пример скрипта который должен отсылать определённый пакет каждые 9 секунд допустим

QaK
12.03.2008, 09:09
Помогите пожалуйста с синтаксисом или пример скрипта который должен отсылать определённый пакет каждые 9 секунд допустим
Было уже неоднократно, юзай поиск.

Nt3rzZ
19.08.2008, 13:50
Есть у каво нить в наличии скрипт для валкера чтоб бд и свс кидали пати, денс(сонг) и выходили, ну или хотябы кидали чтоб самому выходить нуно было?????

QaK
19.08.2008, 14:17
Есть у каво нить в наличии скрипт для валкера чтоб бд и свс кидали пати, денс(сонг) и выходили, ну или хотябы кидали чтоб самому выходить нуно было?????Во-первых,темой ошибся, парниша, во-вторых если тебе под пнх надо - туева хуча скриптов написана.