PDA

Просмотр полной версии : Автозаточка скиллов


mks
01.04.2009, 02:01
закупаемся книжками, выставляем уровень заточки и ник
точим на +1, скрипт продолжает пока не точнет до указанного уровня
ЗЫ точить надо с нуля, иначе счетчик не правильно считать начнет


const
nik='xxxxx';
Enchant=13;

var
SubID, SkillID, SkillLvl, CurrEnch: integer;

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

end;

procedure OnTimer01(Sender: TObject);
begin

end;

procedure Free; //Вызывается при выключении скрипта
begin
CurrEnch:=0;
end;

procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin

end;

procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin

end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (pck[1]=#$62) then case pck[2] of
#$A0: //точнулся
if CurrEnch<Enchant then
begin
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) then
begin
SubID:=ReadH(2);
SkillID:=ReadD(4);
SkillLvl:=ReadD(8)-1;
CurrEnch:=1;
end;
end.

lexayar
01.04.2009, 13:16
В тему выложу свою версию такого скрипта. Сделано на скорую руку, есть лишние моменты, легко переделать, чтоб работало для всех подключенных персонажей, и не надо было указывать ник. Основное отличие от предыдущего скрипта - не важен начальный уровень заточки, остальное почти все также:
// @ 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; //Вызывается при выключении скрипта
begin

end;

// пауза в секундах
function Wait(var tick: integer; Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then 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);
begin
if MainDebug then
SendMsg_to_Private(msg);
end;
// послать сообщение себе в приват
procedure SendMsg_to_Private(msg:string);
begin
SendMsg_to_Chat(2,msg);
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck = '' then exit;
// Т.к. использоваться будет только для одного чара, остальных сразу отсеиваем
if ConnectName<>NickName then Exit;

// пакет - сообщение со статусом заточки
if FromServer and (pck[1]=#$62) and (pck[3]+pck[4]+pck[5] = HStr('05 00 00')) then begin
if (pck[2] = #$A0)or(pck[2] = #$A1)then begin
SKillID := ReadD(14);
CurLevel := ReadD(18);
// заточка была не удачной, обнуляем текущий уровень заточки
if pck[2] = #$A1 then
CurLevel := (CurLevel div 100)*100; // округляем
DebugMsg('SKillID='+inttostr(SKillID)+'; CurLevel='+inttostr(CurLevel));
if (CurLevel mod 100) >= MaxEnchantLevel then
CurLevel := -1;
tick := 0;
Wait(tick, interval);
end;
end;

// Можно закомментировать "and Wait(tick, interval)", точиться будет намного быстрее,
// только ощущение такое, что шанс точки меньше, хотя может и показалось
if (CurLevel >= 0) and Wait(tick, interval) then begin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.

Vklu4atel^^
10.04.2009, 14:19
первий скрипт под кие хроны??

mks
15.04.2009, 02:16
первий скрипт под кие хроны??

грация 2

korp
25.04.2009, 23:23
А под Интерлюде есть?

mks
25.04.2009, 23:57
А под Интерлюде есть?
под интерлюд не писал, может у кого и есть....

Auromy
27.04.2009, 01:02
У меня скрипт под грацию не заработал :(

Добавлено через 23 часа 47 минут
А как сделать в скрипте в первом задержку? А то он точит без остановки и сбивается

mks
27.04.2009, 01:31
А как сделать в скрипте в первом задержку? А то он точит без остановки и сбивается
тоесть сбивается? по подробней....

Auromy
27.04.2009, 11:47
Скрип работает быстро очень, и останавливается на 9 на 3 на 5 и т.п.
Добавить маленькую задержку нужно, чтобы он не останавливался, а точил до того значения что было указано

Добавлено через 40 минут
begin
if FromServer and (pck[1]=#$62) then case pck[2] of
#$A0: //òî÷íóëñÿ
if CurrEnch<Enchant then
begin

CurrEnch:=CurrEnch+1;
Buf:=#$43;
WriteH(SubID);
WriteD(SkillID);
WriteD(SkillLvl+CurrEnch);
SendToServerEx(nik);
delay(100)
end;

Делэй прописал, просто в скриптах не бум бум, но вставил, хотя и 50 хватит

mks
27.04.2009, 13:18
вообще странное дело, этот скрипт определяет заточился скилл или нет по системному сообщению в чат, и соответственно только после прихода этого пакета он точит или не точит дальше....
Приходят в голову только две возможные причины: - на том серве где ты играешь пакет изменения в скилах приходит после системного сообщения(в этом случаи Delay бы тебе не помог), либо на серве спецом выставлена задержка между заточкой скилов

shred
27.04.2009, 18:01
пожалуйста, напишите скрипт под интерлюд:sorry::(

mks
28.04.2009, 12:36
пожалуйста, напишите скрипт под интерлюд:sorry::(
у меня даже клиента такого не осталось....

Ambrelower
11.05.2009, 12:40
mks, Блин люди еапишите после того как втавил скрипт как его отправить?!:D
//alexteam: скрипт ? отправить ? - никак.

GoogleMoogle
01.07.2009, 02:48
помогите плизик, не знаю как правельно вставить етот скрипт (под хелбаунд) у меня просто не рабоает..... залейте плиз куда нить л2ПНх с уже всавленым скриптом....

//nlobp: если сам не научишься пользоваться скриптами к пакетхаку, то никто не поможет.

nneett
28.10.2009, 20:32
Под интерлюд не у кого не завалялось?

Artem
30.10.2009, 08:50
Каким образом его можно переписать под ил? или проще новый делать?((

hackbozb
30.11.2009, 19:26
Мда, мне бы тоже под ИЛ пригодился бы)))

TAMBIK
30.11.2009, 19:49
http://coderx.ru/forumdisplay.php?f=16#

hackbozb
01.12.2009, 01:08
Эмммммммм.........Или у мну что то с глазами........Это же главная страница по пакетхаку???? Я не смог поиск осилить, так и не нашел ответа под ИЛ.....

HaxaJl
23.01.2010, 06:13
В тему выложу свою версию такого скрипта. Сделано на скорую руку, есть лишние моменты, легко переделать, чтоб работало для всех подключенных персонажей, и не надо было указывать ник. Основное отличие от предыдущего скрипта - не важен начальный уровень заточки, остальное почти все также:
// @ 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; //Вызывается при выключении скрипта
begin

end;

// пауза в секундах
function Wait(var tick: integer; Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then 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);
begin
if MainDebug then
SendMsg_to_Private(msg);
end;
// послать сообщение себе в приват
procedure SendMsg_to_Private(msg:string);
begin
SendMsg_to_Chat(2,msg);
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck = '' then exit;
// Т.к. использоваться будет только для одного чара, остальных сразу отсеиваем
if ConnectName<>NickName then Exit;

// пакет - сообщение со статусом заточки
if FromServer and (pck[1]=#$62) and (pck[3]+pck[4]+pck[5] = HStr('05 00 00')) then begin
if (pck[2] = #$A0)or(pck[2] = #$A1)then begin
SKillID := ReadD(14);
CurLevel := ReadD(18);
// заточка была не удачной, обнуляем текущий уровень заточки
if pck[2] = #$A1 then
CurLevel := (CurLevel div 100)*100; // округляем
DebugMsg('SKillID='+inttostr(SKillID)+'; CurLevel='+inttostr(CurLevel));
if (CurLevel mod 100) >= MaxEnchantLevel then
CurLevel := -1;
tick := 0;
Wait(tick, interval);
end;
end;

// Можно закомментировать "and Wait(tick, interval)", точиться будет намного быстрее,
// только ощущение такое, что шанс точки меньше, хотя может и показалось
if (CurLevel >= 0) and Wait(tick, interval) then begin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.

Скрипт в принцепе работает только когда скил стачивает дисконектит, сервер la2world.ru

zomgz
16.02.2010, 23:11
Скрипт в принцепе работает только когда скил стачивает дисконектит, сервер la2world.ru

такаяже проблема, сделайте так чтоб не критавало(((

Skagerrak
10.03.2010, 17:41
было бы интересно взглянуть на рабочий скрипт для эпилога, я пробовал вручную пакеты отправлять на заточку, но почему-то ничего не происходит.