PDA

Просмотр полной версии : Вопрос по скрипту


anDy35
30.11.2007, 12:36
как работает этот(скрипт ниже) скрипт после запуска в l2phx? постоянно спамит СР и ХП?
просто проверок на количество CP и ХП невижу.
как я понимаю его нужно запускать во время пвп в самом l2phx (потому как биндов на кнопки вроде тож нет)?

//by mks
//помошник в PvP и PK.
//пьет CP и HP пробирки в нужное время(можно добавить и MP для пвп серваков), и освобождает вас от небоходимости зажатия клавиши Ctrl, которая так меня раздражает!(думаю это раздражает и не только меня)
///////////////////////////////////////////////////////
///////////////Master PvP by MKS v.1.0/////////////////
///////////////////////////////////////////////////////

//после активации скрипта необходимо выпить сначала банку CP, потом HP для получения их ID
const
Name='xxxxxxx'; //ник перса
var
CurHP,MaxHP,CurCP,MaxCP: integer;
CPuse,HPuse: string;

TimerCP,TimerHP: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
TimerCP:=TTimer.Create(nil);
TimerCP.OnTimer:=@OnTimerCP;
TimerCP.enabled:=false;
TimerCP.interval:=1000; //интервал 1сек, т.к. чаще пить CP всеравно не будет, дабы не засорять трафик

TimerHP:=TTimer.Create(nil);
TimerHP.OnTimer:=@OnTimerHP;
TimerHP.enabled:=false;
TimerHP.interval:=15000; //интервал 15сек, т.к. действие одной бутылки = 15сек
end;

procedure OnTimerCP(Sender: TObject);
begin
buf:=CPuse;
SendToServerEx(Name);
end;
procedure OnTimerHP(Sender: TObject);
begin
buf:=HPuse;
SendToServerEx(Name);
end;

procedure Free; //Вызывается при выключении скрипта
begin
TimerCP.free;
TimerHP.free;
HPuse:='';
CPuse:='';
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//пьем сначала CP, потом HP банку что б запомнить их ID(я решил взять эти пакеты целиком, дабы не усложнять)
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse='') then CPuse:=pck;
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse<>pck) and (HPuse='') then HPuse:=pck;

//считываем текущие и максимальные значения CP и HP
if FromServer and (pck[1]+pck[6]=#$0E#$04) then
begin
CurHP:=ReadD(14);
MaxHP:=ReadD(22);
CurCP:=ReadD(30);
MaxCP:=ReadD(38);
end;

//если вы используете не грэйтер CP то вместо 200 подставьте кол-во CP сколько восстанавливает 1 банка
if (CurCP<MaxCP-200) and (CPuse<>'') then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurHP<MaxHP) and (HPuse<>'') then TimerHP.enabled:=true else TimerHP.enabled:=false;

//если используем скилы или заклинания добавляем флаг Ctrl, что б не надо было удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$2F) then pck[6]:=#$01;

//если наводим таргет, повторное нажатие по нему подменивается на атаку, опять же что б не удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then pck[1]:=#$0A;

end.

NLObP
30.11.2007, 12:52
как работает этот(скрипт ниже) скрипт после запуска в l2phx? постоянно спамит СР и ХП?
просто проверок на количество CP и ХП невижу.
как я понимаю его нужно запускать во время пвп в самом l2phx (потому как биндов на кнопки вроде тож нет)?

//считываем текущие и максимальные значения CP и HP
if FromServer and (pck[1]+pck[6]=#$0E#$04) then
begin
CurHP:=ReadD(14);
MaxHP:=ReadD(22);
CurCP:=ReadD(30);
MaxCP:=ReadD(38);
end;


Вот выше кусок кода с проверкой HP и CP. Проверки осуществляются по приходу пакета "изменение характеристик" от сервера
0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID) d(AttrValue)
Как пользоваться: Запускаешь пакетхак. Заходишь чаром. Один раз вписать в скрипт ник перса. Включаешь скрипт. Все. Теперь не надо контрол жать при атаке персов. Чар автоматом пьет бутылки восстановления HP и CP. Лепота! :Yahoo!:

Denis63RUS
28.05.2008, 13:41
А у меня этот скрипт как то странно работает, при уменьшение ЦП бутыли пьёт, но когда ЦП востановилось, начинает иногда глотать бутыльки просто так, с интервалом 1-5 сек, когда выпьет штук 5-7 то останавливается, я никак не пойму из-за чего это может быть, т.к в самом скрипте всё верно сделанно:(

alxabay
03.06.2008, 16:39
0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID) d(AttrValue)
пакет приходит и от других чаров вроде h(ObjectID) надо свой вроде как вписывать?
чтобы не пить когда другой обнавляется у мня так было на сервере.

ну если что вот:

if FromServer and (pck[1]=#$A6) and (MyID=0) then begin //berem svoi ID (выделить себя)
MyID:=readd(2);
//Say(inttostr(MyID));
end;
и при приходе 0E проверяем кто атрибуты меняет:
if FromServer and (pck[1]=#$0E) then begin //pit' ili ne pit'...
if (MyID=readd(2)) then begin
....
тут пьем по скрипту
....//Drink(ReadD(30)); //cp
end;

Denis63RUS
03.06.2008, 16:59
Разобрался в чем причина! Вобщем если ты в пати, и у кого то из сопартийцев отнялос ХП или ЦП то от сервера приходит тот же пакет StatusUpdate (pck[1]+pck[6]=#$0E#$04) но с IdOb твоего сопартийца, а он в скрипте никак не учитывается, поэтому в скрипт нужно добавить проверку ID своего! Тогда всё работает на ура!

Добавлено через 1 минуту
Упс, прогнал, предыдущего сообщения не увидел:eek:

mks
03.06.2008, 17:24
да там на самом деле мой косяк, надо переделать слегка считывание CP,HP,MP таким образом:

procedure StatusUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
#$21: CurCP:=ReadD(i*8+14);
#$22: MaxCP:=ReadD(i*8+14);
end;
end;
end;

begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0E: if (MyID=ReadD(2)) then StatusUpdate;
end;
end;
end.

Gos
20.06.2010, 21:35
а можете как то скрипт переделать чтобы он вызывался на какуюнибудь кнопку плиз а то нпс выделить нельзя а сворачивать окно муторно

root2
12.08.2011, 10:34
Подскажите так будет правильно ? а если не так поправьте СПС.

//////////////////////\\\\\\\\\\\\\\\\\\\\\\\\
// http://coderx.ru/showthread.php?t=119 \\
/////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\
//by mks
//помошник в PvP и PK.
//пьет CP и HP пробирки в нужное время(можно добавить и MP для пвп серваков), и освобождает вас от небоходимости зажатия клавиши //Ctrl, которая так меня раздражает!(думаю это раздражает и не только меня)
///////////////////////////////////////////////////////
///////////////Master PvP by MKS v.1.0/////////////////
///////////////////////////////////////////////////////

//после активации скрипта необходимо выпить сначала банку CP, потом HP для получения их ID
const
Name='xxxxxxx'; //ник перса
var
CurHP,MaxHP,CurCP,MaxCP: integer;
CPuse,HPuse: string;

TimerCP,TimerHP: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
TimerCP:=TTimer.Create(nil);
TimerCP.OnTimer:=@OnTimerCP;
TimerCP.enabled:=false;
TimerCP.interval:=1000; //интервал 1сек, т.к. чаще пить CP всеравно не будет, дабы не засорять трафик

TimerHP:=TTimer.Create(nil);
TimerHP.OnTimer:=@OnTimerHP;
TimerHP.enabled:=false;
TimerHP.interval:=15000; //интервал 15сек, т.к. действие одной бутылки = 15сек
end;

procedure OnTimerCP(Sender: TObject);
begin
buf:=CPuse;
SendToServerEx(Name);
end;
procedure OnTimerHP(Sender: TObject);
begin
buf:=HPuse;
SendToServerEx(Name);
end;

procedure Free; //Вызывается при выключении скрипта
begin
TimerCP.free;
TimerHP.free;
HPuse:='';
CPuse:='';
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//пьем сначала CP, потом HP банку что б запомнить их ID(я решил взять эти пакеты целиком, дабы не усложнять)
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse='') then CPuse:=pck;
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse<>pck) and (HPuse='') then HPuse:=pck;

//считываем текущие и максимальные значения CP и HP
procedure StatusUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$21: CurCP:=ReadD(i*8+14);
#$22: MaxCP:=ReadD(i*8+14);
end;
end;
end;

begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$0E: if (MyID=ReadD(2)) then StatusUpdate;
end;
end;
end.

//если вы используете не грэйтер CP то вместо 200 подставьте кол-во CP сколько восстанавливает 1 банка
if (CurCP<MaxCP-200) and (CPuse<>'') then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurHP<MaxHP) and (HPuse<>'') then TimerHP.enabled:=true else TimerHP.enabled:=false;

//если используем скилы или заклинания добавляем флаг Ctrl, что б не надо было удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$2F) then pck[6]:=#$01;

//если наводим таргет, повторное нажатие по нему подменивается на атаку, опять же что б не удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then pck[1]:=#$0A;

end.


спс