закупаемся книжками, выставляем уровень заточки и ник
точим на +1, скрипт продолжает пока не точнет до указанного уровня
ЗЫ точить надо с нуля, иначе счетчик не правильно считать начнет
delphi Код:
const
nik='xxxxx';
Enchant=13;
var
SubID, SkillID, SkillLvl, CurrEnch: integer;
procedure Init; //Вызывается при включении скриптаbeginend;
procedure OnTimer01(Sender: TObject);
beginend;
procedure Free; //Вызывается при выключении скриптаbegin
CurrEnch:=0;
end;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединенияbeginend;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединенияbeginend;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginif FromServer and(pck[1]=#$62)thencase pck[2] of
#$A0: //точнулсяif CurrEnch<Enchant thenbegin
CurrEnch:=CurrEnch+1;
Buf:=#$D0;
WriteH(SubID);
WriteD(SkillID);
WriteD(SkillLvl+CurrEnch);
SendToServerEx(nik);
end;
#$A1: //не точнулсяbegin
CurrEnch:=1;
Buf:=#$D0;
WriteH(SubID);
WriteD(SkillID);
WriteD(SkillLvl+CurrEnch);
SendToServerEx(nik);
end;
end;
if FromClient and(pck[1]=#$D0)thenbegin
SubID:=ReadH(2);
SkillID:=ReadD(4);
SkillLvl:=ReadD(8)-1;
CurrEnch:=1;
end;
end.
В тему выложу свою версию такого скрипта. Сделано на скорую руку, есть лишние моменты, легко переделать, чтоб работало для всех подключенных персонажей, и не надо было указывать ник. Основное отличие от предыдущего скрипта - не важен начальный уровень заточки, остальное почти все также:
delphi Код:
// @ LexaYar v.1.0 от 2009.03.18// Скрипт на точку скилов под hellbound// Настраиваем параметры скрипта: Имя персонажа и Максимальный уровень заточки// Включаем скрипт, подходим к НПЦ, у которого точим скилы, выбираем точить нужный скил,// после чего скрипт автоматически продолжает его точить до тех пор пока не будет// достигнут нужный уровень заточки, либо пока не кончатся книги, либо exp.// Остановить работу скрипта можно только сняв галку с его имени в Пакетхаке.Const// ============= НАСТРОЙКИ ===============
NickName = 'Ваш ник';
MaxEnchantLevel = 7;
// =======================================// задержка между точками в сек.
interval = 0;
// отладочные сообщения
MainDebug = false;
var
CurLevel: integer;
tick: integer;
SKillID: integer;
procedure Init; //Вызывается при включении скриптаbegin
CurLevel := -1;
end;
procedure Free; //Вызывается при выключении скриптаbeginend;
// пауза в секундахfunction Wait(var tick: integer; Timewait: Integer): Boolean; // сквозная проверка без остановки скриптаvar
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait)thenbeginif tick>0then result:=true;
tick:=t;
end;
end;
//###################### Сообщения #############################################// послать сообщение в чат себеprocedure SendMsg_to_Chat(ChatType: integer; msg:string); // отправка системных сообщений клиентуbegin
buf:=#$4A;
WriteD(0);
WriteD(ChatType);
WriteS(NickName);
WriteS(msg);
SendToClientEx(NickName);
end;
// послать отладочное сообщение себеprocedure DebugMsg(msg:string);
beginif MainDebug then
SendMsg_to_Private(msg);
end;
// послать сообщение себе в приватprocedure SendMsg_to_Private(msg:string);
begin
SendMsg_to_Chat(2,msg);
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginif pck = ''thenexit;
// Т.к. использоваться будет только для одного чара, остальных сразу отсеиваемif ConnectName<>NickName thenExit;
// пакет - сообщение со статусом заточкиif FromServer and(pck[1]=#$62)and(pck[3]+pck[4]+pck[5] = HStr('05 00 00'))thenbeginif(pck[2] = #$A0)or(pck[2] = #$A1)thenbegin
SKillID := ReadD(14);
CurLevel := ReadD(18);
// заточка была не удачной, обнуляем текущий уровень заточкиif pck[2] = #$A1 then
CurLevel := (CurLevel div100)*100; // округляем
DebugMsg('SKillID='+inttostr(SKillID)+'; CurLevel='+inttostr(CurLevel));
if(CurLevel mod100) >= MaxEnchantLevel then
CurLevel := -1;
tick := 0;
Wait(tick, interval);
end;
end;
// Можно закомментировать "and Wait(tick, interval)", точиться будет намного быстрее,// только ощущение такое, что шанс точки меньше, хотя может и показалосьif(CurLevel >= 0)and Wait(tick, interval)thenbegin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.
Последний раз редактировалось lexayar, 01.04.2009 в 13:31.
В тему выложу свою версию такого скрипта. Сделано на скорую руку, есть лишние моменты, легко переделать, чтоб работало для всех подключенных персонажей, и не надо было указывать ник. Основное отличие от предыдущего скрипта - не важен начальный уровень заточки, остальное почти все также:
delphi Код:
// @ LexaYar v.1.0 от 2009.03.18// Скрипт на точку скилов под hellbound// Настраиваем параметры скрипта: Имя персонажа и Максимальный уровень заточки// Включаем скрипт, подходим к НПЦ, у которого точим скилы, выбираем точить нужный скил,// после чего скрипт автоматически продолжает его точить до тех пор пока не будет// достигнут нужный уровень заточки, либо пока не кончатся книги, либо exp.// Остановить работу скрипта можно только сняв галку с его имени в Пакетхаке.Const// ============= НАСТРОЙКИ ===============
NickName = 'Ваш ник';
MaxEnchantLevel = 7;
// =======================================// задержка между точками в сек.
interval = 0;
// отладочные сообщения
MainDebug = false;
var
CurLevel: integer;
tick: integer;
SKillID: integer;
procedure Init; //Вызывается при включении скриптаbegin
CurLevel := -1;
end;
procedure Free; //Вызывается при выключении скриптаbeginend;
// пауза в секундахfunction Wait(var tick: integer; Timewait: Integer): Boolean; // сквозная проверка без остановки скриптаvar
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait)thenbeginif tick>0then result:=true;
tick:=t;
end;
end;
//###################### Сообщения #############################################// послать сообщение в чат себеprocedure SendMsg_to_Chat(ChatType: integer; msg:string); // отправка системных сообщений клиентуbegin
buf:=#$4A;
WriteD(0);
WriteD(ChatType);
WriteS(NickName);
WriteS(msg);
SendToClientEx(NickName);
end;
// послать отладочное сообщение себеprocedure DebugMsg(msg:string);
beginif MainDebug then
SendMsg_to_Private(msg);
end;
// послать сообщение себе в приватprocedure SendMsg_to_Private(msg:string);
begin
SendMsg_to_Chat(2,msg);
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginif pck = ''thenexit;
// Т.к. использоваться будет только для одного чара, остальных сразу отсеиваемif ConnectName<>NickName thenExit;
// пакет - сообщение со статусом заточкиif FromServer and(pck[1]=#$62)and(pck[3]+pck[4]+pck[5] = HStr('05 00 00'))thenbeginif(pck[2] = #$A0)or(pck[2] = #$A1)thenbegin
SKillID := ReadD(14);
CurLevel := ReadD(18);
// заточка была не удачной, обнуляем текущий уровень заточкиif pck[2] = #$A1 then
CurLevel := (CurLevel div100)*100; // округляем
DebugMsg('SKillID='+inttostr(SKillID)+'; CurLevel='+inttostr(CurLevel));
if(CurLevel mod100) >= MaxEnchantLevel then
CurLevel := -1;
tick := 0;
Wait(tick, interval);
end;
end;
// Можно закомментировать "and Wait(tick, interval)", точиться будет намного быстрее,// только ощущение такое, что шанс точки меньше, хотя может и показалосьif(CurLevel >= 0)and Wait(tick, interval)thenbegin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.
Скрипт в принцепе работает только когда скил стачивает дисконектит, сервер la2world.ru