PDA

Просмотр полной версии : ИЩУ СКРИПТ САМЫЙ ПРОСТОЙ


gh0sst
21.07.2015, 17:21
Здравствуйте, программисты. Я ищу очень простой скрипт. Так как сам не могу ни в чем разобраться, попрошу помощи, т.к. чувствую, что этот скрипт очень простой, и наверняка все его делали под себя.
Прошу вашей помощи, если у кого-то завалялся этот скрипт, или что-то подобное, поделитесь.
Итак, это скрипт - чтобы чуваки (пп, ше, бд) ходили за моим дестром, и кидали ему баф каждые 20 минут. На хилера я скрипт нашел, только еще бы привязать к нему функцию кидать баф ВАМП.
В общем, нужен скрипт, который тупо бафает каждые 20 минут орка, и бежит за ним.
Заранее благодарю.

Скрипт на ХИЛЕРА (не пробовал, нашел в интернете)
const
FirstUser = 'voin'; //
SecondUser = 'lekar'; //
maxRad = 200; //
minRad = 70;
ugol = 40; //
var
CharObjID1,CharObjID2,ax,ay,az,bx,by,bz,i: integer;
dx,dy,dz,dr: integer;
da: extended;
Sel, initOk: boolean;

procedure Init;
begin
Sel:=False;
initOk:=False;
CharObjID1:=0;
CharObjID2:=0;
bx:=0;
by:=0;
bz:=0;
buf:=HStr('4A 00 00 00 00 0A 00 00 00 00 00');
WriteS(начало инициализации скрипта);
SendToClientEx(FirstUser);
end;

procedure pre;
begin
if (dx=0) then dx:=1;
dr:=round(random*(maxRad-minRad))+minRad;
da:=ArcTan(dy/dx)+(random-0.5)*pi/180*ugol;
if dx>0 then da:=da+pi;
dx:=round(dr*cos(da))+ax;
dy:=round(dr*sin(da))+ay;
dz:=az;
buf:=#$01;
WriteD(dx);
WriteD(dy);
WriteD(dz);
WriteD(bx);
WriteD(by);
WriteD(bz-$20);
WriteD(1);
SendToServer;
end;

procedure Go;
begin
if (CharObjID1<>0)and(CharObjID2<>0)and(not initOk)
{and((ax<>0)or(ay<>0)or(az<>0))}
and((bx<>0)or(by<>0)or(bz<>0)) then begin
buf:=HStr('4A 00 00 00 00 0A 00 00 00 00 00');
WriteS(инициализации скрипта окончена);
SendToClientEx(FirstUser);
initOk:=True;
end;
end;

begin
if FromServer then case pck[1] of
#$04: if (ConnectName=FirstUser) then begin
CharObjID1:=ReadD(18);
Go;
end else if (ConnectName=SecondUser) then begin
CharObjID2:=ReadD(18);
Go;
end;
#$01: if (ConnectName=SecondUser) then if (ReadD(2)=CharObjID1)and(initOk) then begin
i:=6;
ax:=ReadD(i);
ay:=ReadD(i);
az:=ReadD(i);
dx:=ax-bx;
dy:=ay-by;
if sqrt(dx*dx+dy*dy)>maxRad then pre;
end else if (ReadD(2)=CharObjID2) then begin
i:=6;
bx:=ReadD(i);
by:=ReadD(i);
bz:=ReadD(i);
Go;
end;
#$2A: if (ConnectName=SecondUser)and(ReadD(2)=CharObjID2)an d(initOk) then begin
Sel:=False;
end;
end;
if FromClient and (ConnectName=FirstUser) and (pck=HStr('1b04000000'))and(initOk) then begin
if (not Sel) then begin
buf:=#$04;
WriteD(CharObjID1);
WriteD(ax);
WriteD(ay);
WriteD(az);
WriteC(0);
SendToServerEx(SecondUser);
Sel:=True;
end;
pck:='';
buf:=#$2f;
WriteD(1217); // id скила Greater Heal
WriteD(0);
WriteC(0);
SendToServerEx(SecondUser);
end;
end.

SeregaZ
21.07.2015, 17:40
не не не... не пойдет. что значит "нашел"? нашел это не наш метод! давай чуток пошевелим мозгами, посидим и разберемся. там ничего сложного :)

итак задание первое:
на том персонаже - бафере или кто он там - зайди и потыркай кнопки бафа и посмотри какому бафу какой пакет соответствует. и составь список по очереди.
1. название
пакет
2. название
пакет
....

gh0sst
21.07.2015, 18:46
В общем, тот скрипт не работает, оказывается, ошибки в скрипте.

Хорошо, я посмотрел , и вот что нашел :

ШЕ ВАМПА

2F F4 04 00 00 00 00 00 00 00
ID 1268

Далее ПП

2F 0B 04 00 00 00 00 00 00 00 1035 МЕНТАЛКА
2F 0C 04 00 00 00 00 00 00 00 1036 МАГ ЩИТ
2F 10 04 00 00 00 00 00 00 00 1040 ФИЗ ЩИТ
2F 14 04 00 00 00 00 00 00 00 1044 РЕГЕНЕРАЦИЯ
2F 15 04 00 00 00 00 00 00 00 1045 БЛЕСС ХП
2F 2C 04 00 00 00 00 00 00 00 1068 МАЙТ
2F 26 04 00 00 00 00 00 00 00 1062 БЕРС
2F 35 04 00 00 00 00 00 00 00 1077 ФОКУС
2F 3E 04 00 00 00 00 00 00 00 1086 ХАСТ
2F D8 04 00 00 00 00 00 00 00 1240 ГАЙДЕНС
2F DA 04 00 00 00 00 00 00 00 1242 ДЕС ВИСПЕР


2F 10 01 00 00 00 00 00 00 00 272 ДЕНС НА МЕТКОСТЬ

2F 12 01 00 00 00 00 00 00 00 274 ДЕНС НА СИЛУ КРИТА

Вот мне нужно всего-лишь отправить эти пакеты раз в 20 минут, а у бд раз в 1.5 минуты, и чтобы постоянно все бежали за орком.

SeregaZ
22.07.2015, 10:37
надеюсь ты не торопишься? а то мы тут надоооооооооооолго :)

так. хорошо. задание второе :) ты знаешь как таймеры устроены в л2пх? как объявлять, как использовать и как задавать им длительность? ща где-то мы таймер разбирали... первое же сообщение:
http://coderx.ru/showthread.php?t=9181

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

gh0sst
22.07.2015, 13:43
В общем, не понятно что значит
Timer01.OnTimer:=@OnTimer01;

А так, лучше делать по отсутсвию бафов, если это возможно вообще.
а так врое все понятно, попробую сделать, потом если получится выложу

ScythLab
22.07.2015, 15:36
Это значит, что метод OnTimer01 будет вызываться через заданный Interval времени (в Timer01)

gh0sst
22.07.2015, 17:12
Scythlab, привет, я как раз бегаю твоим ботом, и хочу привязать трех баферов к нему, чтобы бафали через пакетхак :D

SeregaZ
22.07.2015, 18:55
теперь давай создадим общий план работы. по пунктам. например:
1. ботинок ожидает, пока рядом стоящий персонаж не нажмет социальное действия "в перед". этот персонаж принимается как пати лидер
2. делается двойной таргет на персонажа, тем самым ботинок начинает следовать за пати лидером.
3. по соц команде "победа", ботинок включает программу бафа и включает второй 20 минутный таймер, в котором, в свою очередь, каждые 20 минут наша переменная шаг таймера "а" будет переключатся на программу бафа. то есть получается нам надо два таймера :)
4. по окончании программы бафа включать опять двойной таргет на пати лидера, чтобы ботинок бежал за плом.

вся закавыка - а нужен ли баф самому ботинку? ведь если это ппшка, то думаю лучше включить в начало программы бафа кидание акумена и берсеркера самому себе. как ты считаешь?

gh0sst
30.07.2015, 13:27
В общем, решил не заморачиваться, нашел готовый скрипт, переделал под ПП, ШЕ отдельно. но не работает (

//by vimin
//Скрипт для SE, чтобы бегал, лечил и бафал по команде от командира.

const //баффы
b1='2F 10 04 00 00 00 00 00 00 00'; // Shield
b2='2F 0B 04 00 00 00 00 00 00 00'; // Mental Shield
b3='2F 23 04 00 00 00 00 00 00 00'; // Empower
b4='2F B4 04 00 00 00 00 00 00 00'; // Wind Walk
b5='2F 36 04 00 00 00 00 00 00 00'; // Concentration

var
IDPartyMember, IDAssistTarget: String; //ИД командира и ИД его таргета и Собственный ИД
CoordBufX, CoordBufY, CoordBufZ :String; //координаты бота
NameBuffer, NameKomandos : String; // Имена
x: integer;
timer1: TTimer;

procedure OnTimer(Sender: TObject);
begin
case x of
1: begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);

buf:=hstr(b1);
SendToServerEx(NameBuffer);
x:=x+1;
end;
2: begin
buf:=hstr(b2);
SendToServerEx(NameBuffer);
x:=x+1;
end;
3: begin
buf:=hstr(b3);
SendToServerEx(NameBuffer);
x:=x+1;
end;
4: begin
buf:=hstr(b4);
SendToServerEx(NameBuffer);
x:=x+1;
end;
5: begin
buf:=hstr(b5);
SendToServerEx(NameBuffer);
x:=0;
timer1.enabled:=false;
end;
end;
end;

procedure bRun;
begin
if (CoordBufX <> '') and (IDPartyMember <> '') then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);
end;
end;

procedure bHeal;
begin
if (CoordBufX <> '') and (IDPartyMember <> '') then
//if (IDPartyMember <> '') then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEx(NameBuffer);

// хил
buf:=hstr('2F C1 04 00 00 00 00 00 00 00'); // Greater Heal

//отправляем пакет серваку
SendToServerEx(NameBuffer);
end;
end;

procedure bRecharge;
begin
// таргет командира
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEx(NameBuffer);

// речарж
buf:=hstr('2F F5 03 00 00 00 00 00 00 00'); // Recharge

//отправляем пакет серваку
SendToServerEx(NameBuffer);
//Say('Make recharge');
end;

procedure Init; //Вызывается при включении скрипта
begin
NameBuffer:='Buffer';
NameKomandos:='Komandos';
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=5000;
x:=0;
end;

procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck='' then exit;

//если от сервака принят пакет с ИД и Координатами членов пати то
if FromServer and (pck[1]=#$a7) then
begin
//запоминаем ИД командира
IDPartyMember:=pck[6] + pck[7] + pck[8] + pck[9];
end;

//если принят пакет от клиента с кординатами бафера то
if FromClient and (ConnectName=NameBuffer) and (pck[1]=#$48) then
begin
//запоминаем координаты
CoordBufX:= pck[6] + pck[7] + pck[8] + pck[9];
CoordBufY:= pck[10] + pck[11] + pck[12] + pck[13];
CoordBufZ:= pck[14] + pck[15] + pck[16] + pck[17];
end;

//далее идут управляющие команды

//если КОМАНДИР пишет в любой чат цифру "1" (код "#$31 #$00" в юникоде (в юникоде под 1 символ используются 2 байта) я так понял) то
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$31) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
//Бафер БЕЖИТ за КОМАНДИРОМ
bRun;

//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинны
exit;
end;

// если КОМАНДИР пишет в любой чат цифру "2"
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$32) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
bHeal;
exit;
end;

// если КОМАНДИР пишет в любой чат цифру "3" (речардж)
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$33) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
bRecharge;
exit;
end;

// если КОМАНДИР пишет в любой чат цифру "4" (ребаф)
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$34) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';

// бафы
timer1.enabled:=true;
x:=1;
exit;
end;

end.



Сообщения в чат идут, не перехватываются, там где ники - все изменения на свои. пакеты соответствуют, в чем может быть проблема?

В общем, как я понял, в данном скрипте стоит уже таймер.. 5000 - сколько по времени это хз. если я ошибаюсь, на крайняк, поставлю автокликер на основное окно, чтобы отправлял в чат клавишу 2 (т.е. Баф) каждые 20 минут.
Осталось понять, почему скрипт не пашет. может, этот скрипт только набросок?

SeregaZ
30.07.2015, 14:09
меня всегда радовали заявления: я нашел хороший скрипт, только он не работает.

ну раз ты решил не парится - тогда и я не буду тоже парится :) удачи :)

gh0sst
30.07.2015, 18:31
Ясно, если кто может разъяснить этот скрипт - там таймер стоит реально или это интервал между бафами?

ScythLab
30.07.2015, 18:34
Scythlab, привет, я как раз бегаю твоим ботом, и хочу привязать трех баферов к нему, чтобы бафали через пакетхак :DУдачи :)
Вообще в планах на следующую версию было добавление бафов, но не уверен, что это войдет в следующий релиз, а вот работа с несколькими окнами скорей всего появится.

gh0sst
01.08.2015, 19:08
в общем, все сделал как хотел
изменения лишь в том, что бафер принимает пакет от лидера вместо того чтобы ловить лидерский пакет

if FromServer and (ConnectName=NameBuffer)and (pck[1]..... // пакеты писания в чат команды от лидера изменяется при каждой сессии

then
begin

// бафы
timer1.enabled:=true;
x:=1;


В общем на командире стоит таймер чтобы писал каждые 20 минут, так все окна могут ловить команду и бафать.
При желании, ставим на все окна бег за командиром каждые 5 сеукнд (2 пакета выделить командира), чтобы не отцеплялись