Здравствуйте, программисты. Я ищу очень простой скрипт. Так как сам не могу ни в чем разобраться, попрошу помощи, т.к. чувствую, что этот скрипт очень простой, и наверняка все его делали под себя.
Прошу вашей помощи, если у кого-то завалялся этот скрипт, или что-то подобное, поделитесь.
Итак, это скрипт - чтобы чуваки (пп, ше, бд) ходили за моим дестром, и кидали ему баф каждые 20 минут. На хилера я скрипт нашел, только еще бы привязать к нему функцию кидать баф ВАМП.
В общем, нужен скрипт, который тупо бафает каждые 20 минут орка, и бежит за ним.
Заранее благодарю.
Скрипт на ХИЛЕРА (не пробовал, нашел в интернете)
Код HTML:
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.
Последний раз редактировалось gh0sst, 21.07.2015 в 17:23.
не не не... не пойдет. что значит "нашел"? нашел это не наш метод! давай чуток пошевелим мозгами, посидим и разберемся. там ничего сложного
итак задание первое:
на том персонаже - бафере или кто он там - зайди и потыркай кнопки бафа и посмотри какому бафу какой пакет соответствует. и составь список по очереди.
1. название
пакет
2. название
пакет
....
надеюсь ты не торопишься? а то мы тут надоооооооооооолго
так. хорошо. задание второе ты знаешь как таймеры устроены в л2пх? как объявлять, как использовать и как задавать им длительность? ща где-то мы таймер разбирали... первое же сообщение: http://coderx.ru/showthread.php?t=9181
прочитай пункт про таймер и скажи что не понятно я там вроде бы каждый момент как мог прокомментировал. как разберешься перейдем к следующему заданию.
теперь давай создадим общий план работы. по пунктам. например:
1. ботинок ожидает, пока рядом стоящий персонаж не нажмет социальное действия "в перед". этот персонаж принимается как пати лидер
2. делается двойной таргет на персонажа, тем самым ботинок начинает следовать за пати лидером.
3. по соц команде "победа", ботинок включает программу бафа и включает второй 20 минутный таймер, в котором, в свою очередь, каждые 20 минут наша переменная шаг таймера "а" будет переключатся на программу бафа. то есть получается нам надо два таймера
4. по окончании программы бафа включать опять двойной таргет на пати лидера, чтобы ботинок бежал за плом.
вся закавыка - а нужен ли баф самому ботинку? ведь если это ппшка, то думаю лучше включить в начало программы бафа кидание акумена и берсеркера самому себе. как ты считаешь?
В общем, решил не заморачиваться, нашел готовый скрипт, переделал под ПП, ШЕ отдельно. но не работает (
Код HTML:
//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 минут.
Осталось понять, почему скрипт не пашет. может, этот скрипт только набросок?