PDA

Просмотр полной версии : Пытаюсь разобраться


Pat
15.04.2009, 05:35
Пробовал подключить два скрипта, но активация действий обоих происходит при нажатии socialHello,таким образом работает только один из скриптов .В приведенном ниже скрипте меняю ID socialHello (1B 02) на ID socialYes (06 00)-неработает:o

var
Bot1X,Bot1Y,Bot1Z:string; //координаты варки
IDAssistTarget:string; //таргет командира
rnd:integer; // вспомогательная для случайного события

bafWC: array [1..100] of string; //список бафов WС

NameKom,NameBot1:string; //имена чаров учавствующих в процессе

MaxHPKom,MaxHPBot1:integer; //максимальные уровни ХП (лимиты)
CurHPKom,CurHPBot1:integer; //текущие значения ХП

IDKomandos,IDbot1:string; // идешники командира и варки

timer4,timer3:TTimer; //таймеры бафа

i,x:integer;
tempS:String;
///////////////////////////////////////// buff's//////////////////////////////////////////////

procedure OnTimer4 (Sender: TObject);
begin
case x of
1: begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);

buf:=bafWC[6];
SendToServerEx(NameBot1);
x:=x+1;
end;
2: begin
buf:=bafWC[1];
SendToServerEx(NameBot1);
x:=x+1;
end;
3: begin
buf:=bafWC[2];
SendToServerEx(NameBot1);
x:=x+1;
end;
4: begin
buf:=bafWC[3];
SendToServerEx(NameBot1);
x:=x+1;
end;
5: begin
buf:=bafWC[4];
SendToServerEx(NameBot1);
x:=x+1;
end;
6: begin
buf:=bafWC[5];
SendToServerEx(NameBot1);
x:=x+1;
end;
7: begin
buf:=bafWC[7];
SendToServerEx(NameBot1);
x:=0;
timer4.enabled:=false;
end;
end;
end;

/////////////////////////
// buff 20min
procedure OnTimer3 (Sender: TObject); //баффы через 20 мин
begin
timer3.interval:=1150000; //каждые 20 мин (за вычетом времени самих бафов)
timer4.enabled:=true;//вкл. бафы
end;
//*************************БЕЖИМ ЗА ЛИДЕРОМ*******************************************
//процедура заставляет бежать ботов за лидером
procedure BotBeg;
begin
//проверяем условие чтоб координаты ботов небыли равными '' и ИД был перехвачен
if IDKomandos <> '' then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
if IDBot1<>'' then SendToServerEX(NameBot1);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
if IDBot1<>'' then SendToServerEX(NameBot1);
end;
end;


procedure Init; //Вызывается при включении скрипта
begin
NameKom:='XXX'; //командир
NameBot1:='XXX'; //варка

//список бафов:
//само собой вы его можете расширить новыми бафами которых тут нет..
//это те бафы кторые я использую от ПП
bafWC[1]:=hstr('2F EF 03 00 00 00 00 00 00 00'); //chant of battle
bafWC[2]:=hstr('2F E5 04 00 00 00 00 00 00 00'); //chant of rage
bafWC[3]:=hstr('2F F1 03 00 00 00 00 00 00 00'); //chant of sheilding
bafWC[4]:=hstr('2F E4 04 00 00 00 00 00 00 00'); //chant of evansion
bafWC[5]:=hstr('2F EE 03 00 00 00 00 00 00 00'); //chant of fire ( m def )
bafWC[6]:=hstr('2F EA 03 00 00 00 00 00 00 00'); //flame chant ( acum )
bafWC[7]:=hstr('2F 1E 05 00 00 00 00 00 00 00'); // vampiric
//при старте скрипта значения переменных =0
//поетому скрипт подумает что у всех 0 ХП и начнется хаос.. все начнут друг друга хилить без остановки
//чтоб избежать етого выставим начальные значения.. то что ХП у нас- дожопы.. много.. 15к.. т.е. хилить ненадо.
//а потом скрипт сам захватит текущее знасение.. и всё коректно будет...
CurHPKom:=15000;
CurHPBot1:=15000;


//дело в том что скрипт расчитывает хилить или нет в зависимости от % от шкалы.. если вся шкала =0 (по дефолту)
//то ето както некоректно там будет хотя вроде пофиг..
//но для коректности понимания процесса мы пишем что максимальная шкала ХП у нас оч маленькая а текущие значения- оч большие..
//поетому никакие хилы небудут происходить при старте скрипта..
MaxHPKom:=10;
MaxHPBot1:=10;


//новый баф кастовать через 4 секунды
timer4:=TTimer.Create(nil);
timer4.OnTimer:=@OnTimer4; //
timer4.enabled:=false; //
timer4.interval:=5300; //5300 для варки
// добавляем функцию что бы бафал сам каждые 20 мин ( NLobP )
//баффы
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3; //
timer3.enabled:=true; // таймер по умолчанию выключен
timer3.interval:=60000; // первый баф через 60 сек


// ЗАПРОС НА ОТКРЫТИЕ ИНВЕНТОРЯ!!!! ДЛЯ ЗАХВАТА ИДЕШНИКА!
// чтобы принудительно вызвать от сервера пакет ЮЗЕР ИНФО в котором ИД указан
//а также для того чтобы захвватить ИД банок для питья
buf:=hstr('0F');
SendToServerEX(NameKom);
SendToServerEX(NameBot1);

end;

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

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


//*******************ЗАХВАТ КООРДИНАТ***************************************** **********
//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot1 then
if pck[1]=#$48 then
begin
//запоминаем координаты
Bot1X:= pck[2] + pck[3] + pck[4] + pck[5];
Bot1Y:= pck[6] + pck[7] + pck[8] + pck[9];
Bot1Z:= pck[10] + pck[11] + pck[12] + pck[13];
end;

//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ******************************************* *************
//если кто то умер то приходит пакет DIE.. то хилить его ненадо...
//нефиг трупы хилить...
//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к
if FromServer then
if ConnectName=NameKom then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos then
CurHPKom:=15000;

if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot1 then
CurHPBot1:=15000;



//*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************
//из пакета UserInfo который приходит во время бафа и не только
//как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ
//вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем максимальные значения ХП и МП
//а так жэ ИД чара (бота- бафера)

//КОМАНДИР
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$04 then
begin
IDKomandos:=pck[18]+pck[19]+pck[20]+pck[21]; //тут выдергиваем ИД чара
i:=22;
tempS:=readS(i); // ето используем для удобства.. имя типа пропускаем.. потому как каждый раз оно из разного кол-ва букв состоит.. в скобках переменная автоматом увеличивается на кол-во букв (ну там по формуле.. в юникоде 1 буква=2 байта, и символ окончания строки еще 00 00)
i:=i+48; // через 48 байтофъ после имени указывается лимиты и текущие значения для ХП и МП
//запоминаем их.. тут нам не особо важны текущие значения.. хотя лишний раз не помешают
//но важно- максимальное значение- ЛИМИТЫ
MaxHPKom:=readD(i);
CurHPKOM:=readD(i);
end;

//1-й бот
if FromServer then
if ConnectName = NameBot1 then
if pck[1]=#$04 then
begin
IDBot1:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot1:=readD(i);
CurHPBot1:=readD(i);
end;



//*************************СЛЕДИМ ЗА ХП и МП******************************************

if FromServer then
if ConnectName = NameKom then
if pck[1]=#$0e then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$04) then
begin
//считываем текущее состояние ХП!!-)
CurHPKom:=ReadD(14);
//ну собственно ето уже можно править под желания каждого:
//если жизни текущие меньше 0,5 от шкалы (50%) то..
if (CurHPKom < round(MaxHPKom*0.5)) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F CD 04 00 00 00 00 00 00 00'); // chant of life
SendToServerEX(NameBot1);
end;
end;
//socialHELLO буф Война не по ассисту а по ИДкомандира т.е самого его
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 02') then // 02 - socialHELLO
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';

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

Подскажите, что еще надо править чтобы заработал скрипт по нажатию socialYes?

NLObP
15.04.2009, 11:23
В приведенном ниже скрипте меняю ID socialHello (1B 02) на ID socialYes (06 00)-неработает

Надо было менять на ID socialYes (1B 06)


//socialYES буф Война не по ассисту а по ИДкомандира т.е самого его
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 06') then // 06 - socialYES
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
// бафы
timer4.enabled:=true;
x:=1;
exit;
end;


Пробовал подключить два скрипта, но активация действий обоих происходит при нажатии socialHello,таким образом работает только один из скриптов
Чтобы одновременно перехватывать, надо здесь

procedure Init; //Вызывается при включении скрипта
begin
NameKom:='XXX'; //командир
...

вписывать правльно имена командиров, тогда будет правильно перехватывать здесь


//socialHELLO буф Война не по ассисту а по ИДкомандира т.е самого его
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 02') then // 02 - socialHELLO
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
// бафы
timer4.enabled:=true;
x:=1;
exit;
end;

для того, от кого сообщение шло

Pat
15.04.2009, 12:50
Спасибо огромное!!!
Имена писал правильно иначе бы по отдельности скрипты не работали...

NLObP
15.04.2009, 13:21
Социал YES надо нажимать в клиентах командиров по отдельности для запуска скриптов. Да и скриптов надо два, на каждого командира отдельный.

Pat
16.04.2009, 10:08
Проблема как раз и была в том, что командир один, а скрипта два и каждый из них активировался командой socialHello, в итоге запускался один скрипт, у которого был приоритет(стоял выше). Но сейчас все работает. Еще раз спасибо:)

NLObP
16.04.2009, 15:27
Если очень надо, то можно вот эту строчку удалить и пакет будет в другие скрипты попадать, то есть одной командой активируются и другие скрипты.
//убиваем этот пакет, чтоб сервер его не получил
pck:='';