Расчитано на пвп серваки и изобилие блес точек...
Использование: включаем скрипт, c помощью приветствия(1-е социальное действие), забиваем ник и уровень точки, точим нужную шмотку на +1(не важно со скольки), скрипт запоминает необходимые данные, 1е соц действие включает и выключает автозаточку.Скорость заточки выставлена 700мс(+2 в секунду), можно ускорять или замедлять в зависимости от сервака...
Сам скрипт:
Код:
const
nik='Ваш ник';
Enchant=6; ///до скольки нужно точить
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=700; /// здесь можно выставить интервал
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=500; /// здесь можно выставить интервал
end;
procedure OnTimer01(Sender: TObject);
begin
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;
begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: CurrentEnch:=0;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
________________ Если тебе трудно грызть гранит науки, - попробуй пососать его... Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Юзал поиск, слава богу скрипт не попал в шару, поскольку он есть только у некоторых друзей, но все-таки я его выложу
НЕЗАБЫВАЕМ ТЫКАТЬ СПАСИБКУ
Работает на Interlude
+Админ не может вас забанить(только через базу)
-Вас можно бить массовыми скиллами
-После ТП через ГК надо включать скрипт наново
-Нельзя юзать алхимию(цп, мп, хп) соски можно
Да , мобы вас бьют
Гид по нему очень прост, включили сам скрипт выделили себя и написали в чат .on
тестилось на:
La2Woa, Lineagetwo, last-pvp, и еще много всякого ГФ
Цитата:
Автор Ga3uPoBKa
special for zhyk.ru
Const
Name='Вводим свой ник';
var
// переменная
ValidatePosition:string;
a:integer; b:boolean;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.
Последний раз редактировалось Dominian; 10.09.2010 в 14:14.
Скрипт для флуда После набора сообщения, текст остаётся, скрипт не мой, на интерлюдии работает, тестил на [Ссылки могут видеть только зарегистрированные пользователи. ]
Код:
var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
i: Integer;
Message, Name: String;
procedure SendMs(Sender: TButton);
var
Msg, Nm: String;
dd: integer;
begin
if etext.text<>'' then begin
buf:=#$38;
case etext.text[1] of
'!': begin
Msg:=Copy(etext.text,2,1000);
dd:=1;
nm:='';
end;
'$': begin
Msg:=Copy(etext.text,2,1000);
dd:=9;
nm:='';
end;
'+': begin
Msg:=Copy(etext.text,2,1000);
dd:=8;
nm:='';
end;
'"': begin
dd:=pos(' ', etext.text);
Msg:=Copy(etext.text,dd+1,1000);
nm:=Copy(etext.text,2,dd-3);
dd:=2;
end;
'#': begin
Msg:=Copy(etext.text,2,1000);
dd:=3;
nm:='';
end;
'@': begin
Msg:=Copy(etext.text,2,1000);
dd:=4;
nm:='';
end;
else begin
Msg:=etext.text;
dd:=0;
nm:='';
end;
end;
WriteS(Msg);
WriteD(dd);
if nm<>'' then WriteS(Nm);
SendToServer;
end;
end;
procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=400;
frm.Height:=600;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
penel:=TPanel.Create(frm);
penel.parent:=frm;
penel.align:=alBottom;
penel.height:=24;
button:=tbutton.Create(penel);
button.parent:=penel;
button.align:=alRight;
button.caption:='Послать';
button.onClick:=@SendMs;
etext:=tedit.Create(penel);
etext.parent:=penel;
etext.align:=alClient;
frm.Show;
end;
procedure Free;
begin
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;
begin
if FromServer and (pck[1]=#$4a) then
begin
i:=10;
name:=ReadS(i);
message:=ReadS(i);
if name='' then name:='Обьявление';
m.Lines.Add(Name+': '+message);
end;
end.
Добавлено через 2 минуты // Скрипт для вывода информации об игроках на сервере
// в User Tab: ник, раса, пол, класс.
// Автор: Furious
// Версия: 0.3
Авто аугментация до получения нужного скила by Vilson
Работает на Грации Финал/+ на моем ГФШ, если на вашем не работает - смотрите пакеты или инвентарь, сейчас на каждом ГФШ админы лепят свои "защиты".
Оба скрипта положить в папку со скриптами, почитать инструкцию вначале скрипта, поменять параметры на свои. Без PacketsT2.script в принципе можно обойтись если вы перенесете вызываемые из него функции в основной скрипт Augment_2.script. Я использую два файла только потому что мне так удобно, этот PacketsT2.script использую во всех своих скриптах что бы не переписывать по сто раз один и тот же код, кроме того при выходе новой версии линейки не надо будет переписывать все скрипты, достаточно будет переписать только PacketsT2.script.
Последний раз редактировалось MаNiаК; 01.12.2010 в 19:02.
Скрипт для развода или типо того xD
Садимся на продажу любой стопки, когда у вас ктото купит хоть 1 итем он автоматически купит всё остальное
Для работы скрипта достаточно просто нажать галочку
Код:
var
Data0, Data1, Data2, Data3, Data4: Integer;
begin
if FromServer and (pck[1]=#$9B) then
begin
Data0 := ReadD(30);
end
else
if FromClient and (pck[1]=#$79) then
begin
buf:=pck;
Data1 := ReadD(2);
Data2 := ReadD(6);
Data3 := ReadD(10);
Data4 := ReadD(14);
Data0 := Data0 - Data4;
SendToServer;
buf:=#$79;
WriteD(Data1);
WriteD(3);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
SendToServer;
end;
end.
Суть скрипта как с анимированным титулом, только здесь анимируется значек клана)
Код:
//Crests are captured from RequestSetPledgeCrest and copied verbatim (minus the spaces)
//Set your char nick in 'name'
//Crest change delay should be set to at least 3000 (3s) to work
//Script is enabled/disabled (toggle) with /socialvictory in game
const
name='YOURNICK';
crestnr=2;
d = 3000;
crest1='0900010000444453207C000000071008001000000010000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000040000004458543100000000000000000000000000000000000000000000000000000000000000000000000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF00000000000000D9F0DE005040400099F0DE00050404E0A3000855E74DC7E0BC0000555E5654E0AE00991595959500D9E0A6045F0C7C00B9E0DE101510550081E0FF01010101008300003515255500510083040406000099E0DE1010500000D9E0DE01010500';
crest2='0900010000444453207C000000071008001000000010000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000040000004458543100000000000000000000000000000000000000000000000000000000000000000000000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF0000000000000000F7BD00004040DDFF0000555558600000FFFF00000824BCF7000055555B5CDEFF000095151535FFFF0842CF2737A7DDFF2000890509B37EEF000056555556BDF7000025255555DDFF0000C0DE5555F7BD000058565555F7BD000054575555';
var
y:integer;
c,t,stop: integer;
n:integer;
procedure Init; //will be called on script initialization
begin
c:=0;
t:=0;
stop:=1;
n:=0;
end;
function GetTickCount(): integer;
var
lib,res: integer;
begin
lib := LoadLibrary('kernel32.dll');
res := CallFunction(lib, 'GetTickCount', 0, [nil]);
FreeLibrary(lib);
result := res;
end;
//Primary part of dcript
//calls alltime when l2ph got new packet
begin
if (FromClient) and (pck[1] = #$34) then
begin
y := ReadD(2);
if (y = 3) then
begin
if (stop=0) then
begin
stop:=1;
end
else
begin
stop:=0;
end;
pck := '';
end;
end;
c := GetTickCount()-t;
if (stop = 0) and (c > d) then
begin
t := GetTickCount();
if (n=0) then
begin
buf:= Hstr(Crest1);
n:=1;
end
else if (n=1) then
begin
buf:= Hstr(Crest2);
n:=2;
end;
if (n=crestnr) then n:=0;
SendToServerEx(name);
end;
end.
Скрипт на заточку от Fer123
Скрипт сделан для хроник: Грация финал, Эпилог и Фрея.
Код:
const
characterName='fer123';
//protocol='freya';
protocol='final/epilogue';
Max=80;
AltOption=false;
var
ItemBase : array[1..4,1..max] of int64;
ScrollMSListEntry : array[1..2,0..29] of integer;
invindex : array[1..5] of integer;
ScrollMSBypass : array[0..29] of string;
arEnchantMax,arEnchantTo,arItemOID,arItemID,arScrollID: array of Integer;
values : array[0..16] of variant;
ItemsName, Inventory, Scrolls, MultisellList : TStringList;
TempItemOID,TempScrollID,arLength,arPos,CurEnchLvl,ScrollOID,ScrollMSIndex,colID,colMSListID,colMSEntryID,ColExchangeCondition,Step,ScrollAmount,timerint11,timerint12,timerint13,timerint2,timerrandom,stries,itries:integer;
invmask,TempItemName,TempScrollName,TempMultisellBypass,colMSBypass:string;
timer,timer2:TTimer;
started,error,scrollbuying,adenabuying,itembuying,debugmsg,pass2,blockpck:boolean;
Procedure Init;
begin
SetLineage2Version(protocol);
UseForConnectName := characterName;
ItemsName:=TStringList.Create;
Inventory:=TStringList.Create;
Scrolls:=TStringList.Create;
MultisellList:=TStringList.Create;
LoadScrolls;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=2000;
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timerint11:=2100;
timerint12:=2200;
timerint13:=2300;
timerint2:=10000;
timer2.interval:=timerint2;
ScrollAmount:=10;
ColExchangeCondition:=25000000;
TempItemName:='Нажми для выбора предмета';
TempScrollName:='Нажми для выбора заточки';
buf:=#$14;
SendToServer;
try
ItemsName.LoadFromFile('settings/ItemsID.ini');
except
exit;
end;
end;
Procedure Free;
var i:integer;
begin
timer.Free; timer2.Free;
ItemsName.Free; Inventory.Free; Scrolls.Free; MultisellList.Free;
started:=false; error:=false; scrollbuying:=false; adenabuying:=false; itembuying:=false;
debugmsg:=false; pass2:=false; blockpck:=false;
invmask:=''; TempItemName:=''; TempScrollName:=''; TempMultisellBypass:=''; colMSBypass:='';
TempItemOID:=0; TempScrollID:=0; arLength:=0; arPos:=0; CurEnchLvl:=0; ScrollOID:=0;
ScrollMSIndex:=0; colID:=0; colMSListID:=0; colMSEntryID:=0; ColExchangeCondition:=0;
Step:=0; ScrollAmount:=0; timerint11:=0; timerint12:=0; timerint13:=0; timerint2:=0;
timerrandom:=0; stries:=0; itries:=0;
SetLength(arItemOID,1);
SetLength(arItemID,1);
SetLength(arScrollID,1);
SetLength(arEnchantTo,1);
SetLength(arEnchantMax,1);
arItemOID[0]:=0;
arItemID[0]:=0;
arScrollID[0]:=0;
arEnchantTo[0]:=0;
arEnchantMax[0]:=0;
for i:=0 to 29 do begin
ScrollMSListEntry[1,i]:=0;
ScrollMSListEntry[2,i]:=0;
ScrollMSBypass[i]:='';
end;
for i:=1 to Max do begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
Procedure LoadScrolls;
begin
Scrolls.Add('956=Scroll: Enchant Armor D');
Scrolls.Add('952=Scroll: Enchant Armor C');
Scrolls.Add('948=Scroll: Enchant Armor B');
Scrolls.Add('730=Scroll: Enchant Armor A');
Scrolls.Add('960=Scroll: Enchant Armor S');
Scrolls.Add('955=Scroll: Enchant Weapon D');
Scrolls.Add('951=Scroll: Enchant Weapon C');
Scrolls.Add('947=Scroll: Enchant Weapon B');
Scrolls.Add('729=Scroll: Enchant Weapon A');
Scrolls.Add('959=Scroll: Enchant Weapon S');
Scrolls.Add('6576=Blessed Scroll: Enchant Armor D');
Scrolls.Add('6574=Blessed Scroll: Enchant Armor C');
Scrolls.Add('6572=Blessed Scroll: Enchant Armor B');
Scrolls.Add('6570=Blessed Scroll: Enchant Armor A');
Scrolls.Add('6578=Blessed Scroll: Enchant Armor S');
Scrolls.Add('6575=Blessed Scroll: Enchant Weapon D');
Scrolls.Add('6573=Blessed Scroll: Enchant Weapon C');
Scrolls.Add('6571=Blessed Scroll: Enchant Weapon B');
Scrolls.Add('6569=Blessed Scroll: Enchant Weapon A');
Scrolls.Add('6577=Blessed Scroll: Enchant Weapon S');
Scrolls.Add('958=Crystal Scroll: Enchant Armor D');
Scrolls.Add('954=Crystal Scroll: Enchant Armor C');
Scrolls.Add('950=Crystal Scroll: Enchant Armor B');
Scrolls.Add('732=Crystal Scroll: Enchant Armor A');
Scrolls.Add('962=Crystal Scroll: Enchant Armor S');
Scrolls.Add('957=Crystal Scroll: Enchant Weapon D');
Scrolls.Add('953=Crystal Scroll: Enchant Weapon C');
Scrolls.Add('949=Crystal Scroll: Enchant Weapon B');
Scrolls.Add('731=Crystal Scroll: Enchant Weapon A');
Scrolls.Add('961=Crystal Scroll: Enchant Weapon S');
end;
Procedure SetLineage2Version(ver:string);
begin
case ver of
'final/epilogue':
begin
invmask:='hdddqhhhdh';
invindex[1]:=1;
invindex[2]:=2;
invindex[3]:=4;
invindex[4]:=9;
invindex[5]:=8;
end;
'freya':
begin
invmask:='dddqhhhdh';
invindex[1]:=0;
invindex[2]:=1;
invindex[3]:=3;
invindex[4]:=8;
invindex[5]:=7;
end;
end;
end;
Procedure CreateItemBase; //создание базы предметов
var i,j,count:integer;
begin
DebugSay('Пришел пакет инвентаря');
Inventory.Clear;
count:=round((length(pck)-5)/ReadH(4));
for j:=1 to 4 do for i:=1 to Max do ItemBase[j,i]:=0;
for i:=0 to ReadH(4)-1 do
begin
readmask(invmask,6+i*count,values);
ItemBase[1,i+1]:=values[invindex[1]];
ItemBase[2,i+1]:=values[invindex[2]];
ItemBase[3,i+1]:=values[invindex[3]];
ItemBase[4,i+1]:=values[invindex[4]];
if values[invindex[5]]>0 then Inventory.Add(Format('%d=+%d*%s',[ItemBase[1,i+1],ItemBase[4,i+1],ItemsName.Values[IntToStr(ItemBase[2,i+1])]]));
end;
end;
Procedure UpdateItemBase;
var i,j,obj,count:integer;
begin
DebugSay('Пришел пакет обновления инвентаря');
count:=round((length(pck)-3)/ReadH(2));
for i:=0 to ReadH(2)-1 do
begin
readmask('h'+invmask,4+i*count,values);
case values[0] of
1: obj:=0;
2: obj:=values[invindex[1]+1];
3: begin
for i:=1 to Max do
if ItemBase[1,i]=values[invindex[1]+1] then
begin
for j:=1 to 4 do ItemBase[j,i]:=0;
if values[invindex[5]+1]>0 then Inventory.Delete(Inventory.IndexOfName(inttostr(values[invindex[1]+1])));
break;
end;
continue;
end;
end;
for i:=1 to Max do
if ItemBase[1,i]=obj then
begin
ItemBase[1,i]:=values[invindex[1]+1];
ItemBase[2,i]:=values[invindex[2]+1];
ItemBase[3,i]:=values[invindex[3]+1];
ItemBase[4,i]:=values[invindex[4]+1];
if values[invindex[5]+1]>0 then if obj=0 then Inventory.Add(Format('%d=+%d*%s',[ItemBase[1,i],ItemBase[4,i],ItemsName.Values[IntToStr(ItemBase[2,i])]])) else Inventory[Inventory.IndexOfName(inttostr(ItemBase[1,i]))]:=Format('%d=+%d*%s',[ItemBase[1,i],ItemBase[4,i],ItemsName.Values[IntToStr(ItemBase[2,i])]]);
break;
end;
end;
end;
function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i];
exit;
end;
result:=-1;
end;
Procedure MultiSellListCreate;
var count,i,ListID,ScrollsIndex:integer;
begin
ListID:=ReadD(2);
count:=0;
if ScrollMSListEntry[1,ScrollMSIndex]=ListID then exit;
for i:=1 to ReadD(18) do
begin
readmask('dchddhhhhhhhhhhdd',22+count,values);
count:=count+35+values[13]*44+values[14]*40;
if values[13]>1 then continue;
if (colid<>0) and (colid=values[15]) then
begin
colMSListID:=ListID;
colMSEntryID:=values[0];
colMSBypass:=TempMultisellBypass;
continue;
end;
if (values[16]>0) and (MultisellList.IndexOfName(inttostr(values[15]))=-1) then
begin
MultisellList.Add(Format('%d=%d,%d,%s',[values[15],ListID,values[0],TempMultisellBypass]));
continue;
end;
ScrollsIndex:=Scrolls.IndexOfName(inttostr(values[15]));
if ScrollsIndex<>-1 then
begin
ScrollMSListEntry[1,ScrollsIndex]:=ListID;
ScrollMSListEntry[2,ScrollsIndex]:=values[0];
ScrollMSBypass[ScrollsIndex]:=TempMultisellBypass;
end;
end;
end;
Procedure ShowMenu(index:integer);
var HTML,tempstr:string;
i:integer;
begin
case index of
0: begin
HTML:='<html><head><title>Автозаточка Fer123 - Заточка</title></head><body>';
HTML:=HTML+'<center><table cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" back="L2UI_CT1.Tab_DF_Tab_Selected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'<td><button value="Покупка" action="bypass script showmenu 1" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Настройки" action="bypass script showmenu 2" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Помощь" action="bypass script showmenu 3" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'</tr></table></center><br>';
if started then tempstr:='back="L2UI.SquareGray" fore="L2UI.SquareGray"' else tempstr:='back="L2UI.SquareBlack" fore="L2UI.SquareGray"';
HTML:=HTML+'<br1><table><tr><td width=80><button value="Старт" action="bypass script start" width="130" height="18" '+tempstr+'></td><td width=6></td>';
if started then tempstr:='back="L2UI.SquareBlack" fore="L2UI.SquareGray"' else tempstr:='back="L2UI.SquareGray" fore="L2UI.SquareGray"';
HTML:=HTML+'<td width=80><button value="Стоп" action="bypass script stop" width="130" height="18" '+tempstr+'></td></tr></table><br>';
HTML:=HTML+'<table><tr><td width=60>Предмет:</td><td width=215><a action="bypass script showmenu 4">'+TempItemName+'</a></td></tr>';
HTML:=HTML+'<tr><td width=60>Заточка:</td><td width=215><a action="bypass script showmenu 5">'+TempScrollName+'</a></td></tr></table>';
HTML:=HTML+'<table><tr><td width=105>Уровень заточки:</td><td align=left><edit var=editField width="50" height="10"></td><td width=107></td></tr></table>';
HTML:=HTML+'<table><tr><td><button value="Добавить в очередь" action="bypass script add $editField" width="270" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br><center>Очередь</center>';
HTML:=HTML+'<table bgcolor="696969"><tr><td width=150>Предмет</td><td width=40 align=center>Т</td><td width=40 align=center>Ж</td><td width=40 align=center>Д</td></tr></table>';
for i:=0 to arLength-1 do if arItemOID[i]<>0 then
begin
if i=arPos then tempstr:='BEBEBE' else tempstr:='D3D3D3';
HTML:=HTML+Format('<table bgcolor="%s"><tr><td width=150>%s</td><td width=40 align=center>%d</td><td width=40 align=center>%d</td><td width=40 align=center>%d</td></tr></table>',[tempstr,ItemsName.Values[IntToStr(arItemID[i])],GetItem(arItemOID[i],1,4),arEnchantTo[i],arEnchantMax[i]]);
end;
if arLength>0 then HTML:=HTML+'<br1><table><tr><td><button value="Очистить очередь" action="bypass script clear" width="270" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'</body></html>';
end;
1: begin
HTML:='<html><head><title>Автозаточка Fer123 - Покупка</title></head><body>';
HTML:=HTML+'<center><table border=0 cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" action="bypass script showmenu 0" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Покупка" back="L2UI_CT1.Tab_DF_Tab_Selected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'<td><button value="Настройки" action="bypass script showmenu 2" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Помощь" action="bypass script showmenu 3" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'</tr></table></center><br>';
HTML:=HTML+'<table width=270><tr><td>';
if scrollbuying=true then HTML:=HTML+'<button value="" action="bypass script scrollbuying off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script scrollbuying on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Покупка заточек (MultiSell)</td></tr></table>';
HTML:=HTML+'<table><tr><td width=15></td><td width=180>Кол-во, покупаемых заточек:</td>';
HTML:=HTML+'<td><edit var=Amount width="25" height="10"></td><td width=2></td><td><button value="ОК" action="bypass script maxscrolls $Amount" width="25" height="16" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br1><table width=270><tr><td>';
if itembuying=true then HTML:=HTML+'<button value="" action="bypass script itembuying off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script itembuying on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Покупка предметов (MultiSell)</td></tr></table>';
HTML:=HTML+'<br1><table width=270><tr><td>';
if adenabuying=true then HTML:=HTML+'<button value="" action="bypass script adenabuying off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script adenabuying on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Обмен адены</td></tr></table>';
HTML:=HTML+'<table><tr><td width=18></td><td width=252>Введите ID предмета, который обменивается на адену:</td></tr></table>';
HTML:=HTML+'<table><tr><td width=16></td><td><edit var=ColID width="50" height="10"></td><td width=10></td><td><button value="ОК" action="bypass script col $ColID" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<table><tr><td width=16></td><td width=252>Обменивать при условии: Адена меньше </td></tr></table>';
HTML:=HTML+'<table><tr><td width=16></td><td><edit var=ColCond width="50" height="10"></td><td width=10></td><td><button value="ОК" action="bypass script colcondition $ColCond" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br>В настоящее время скрипт запомнил MultiSell IDs для: ';
for i:=0 to 29 do if ScrollMSListEntry[2,i]<>0 then HTML:=HTML+Scrolls.Values[Scrolls.Names[i]]+', ';
for i:=0 to arLength-1 do if MultisellList.IndexOfName(inttostr(arItemID[i]))<>-1 then HTML:=HTML+ItemsName.Values[inttostr(arItemID[i])]+', ';
if colMSEntryID<>0 then HTML:=HTML+ItemsName.Values[inttostr(colid)]+', ';
if HTML[length(HTML)-1]=',' then HTML[length(HTML)-1]:='.';
HTML:=HTML+'</body></html>';
end;
2: begin
HTML:='<html><head><title>Автозаточка Fer123 - Настройки</title></head><body>';
HTML:=HTML+'<center><table border=0 cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" action="bypass script showmenu 0" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Покупка" action="bypass script showmenu 1" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Настройки" back="L2UI_CT1.Tab_DF_Tab_Selected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'<td><button value="Помощь" action="bypass script showmenu 3" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'</tr></table></center><br>';
HTML:=HTML+'<table width=270><tr><td>';
if debugmsg=true then HTML:=HTML+'<button value="" action="bypass script debugmsg off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script debugmsg on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Вывод дебаг сообщений (Party Chat)</td></tr></table><br>';
HTML:=HTML+'<center>Тайминги</center><br1>';
HTML:=HTML+'<table width=270><tr><td>Интервалы таймера заточки (мсек): </td></tr></table>';
HTML:=HTML+'<table><tr><td>Шаг 1:</td><td><edit var=timer11 width="50" height="10"></td><td><button value="ОК" action="bypass script timer11 $timer11" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr>';
HTML:=HTML+'<tr><td>Шаг 2:</td><td><edit var=timer12 width="50" height="10"></td><td><button value="ОК" action="bypass script timer12 $timer12" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr>';
HTML:=HTML+'<tr><td>Шаг 3:</td><td><edit var=timer13 width="50" height="10"></td><td><button value="ОК" action="bypass script timer13 $timer13" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<table><tr><td width=170>Интервал таймера покупки: </td><td><edit var=timer2 width="50" height="10"></td><td><button value="ОК" action="bypass script timer2 $timer2" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr>';
HTML:=HTML+'<tr><td width=160>Случайное значение: </td><td><edit var=random width="50" height="10"></td><td><button value="ОК" action="bypass script setrandom $random" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br><center>Остальное</center><br1>';
HTML:=HTML+'<table width=270><tr><td>';
if pass2=true then HTML:=HTML+'<button value="" action="bypass script pass2 off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script pass2 on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Пропускать Шаг 2 (RequestTryToPutEnchantTargetItem)</td></tr>';
HTML:=HTML+'<tr><td>';
if blockpck=true then HTML:=HTML+'<button value="" action="bypass script blockpck off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script blockpck on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Блокировать пакеты ChooseInventory и MultiSellList</td></tr></table>';
HTML:=HTML+'</body></html>';
end;
3: begin
HTML:='<html><head><title>Автозаточка Fer123 - Помощь</title></head><body>';
HTML:=HTML+'<center><table border=0 cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" action="bypass script showmenu 0" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Покупка" action="bypass script showmenu 1" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Настройки" action="bypass script showmenu 2" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Помощь" back="L2UI_CT1.Tab_DF_Tab_Selected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'</tr></table></center><br>';
HTML:=HTML+'В вкладке "Заточка" выбирите предмет и заточку, затем введите желаемый уровень заточки и нажмите кнопку "Добавить в очередь".<br1>Если все введено верно то, имя предмета появится в таблице ниже.<br1>';
HTML:=HTML+'Сокращения в таблице: Т - Текущий, Ж - Желаемый, Д - Достигнутый.<br1>Текущий предмет в таблице выделен серым цветом, остальные светло-серым.<br1>';
HTML:=HTML+'При добавлении первого предмета появляется кнопка "Очистить очередь", которая очищает таблицу.<br1>Кнопки "Старт" и "Стоп" запускают и останавливают процесс заточки.<br>';
HTML:=HTML+'В вкладке "Покупка" настраивается покупка заточек, предметов (при поломке), и обмен адены<br>';
HTML:=HTML+'В вкладке "Настройка" настраиваются тайминги и прочее';
HTML:=HTML+'</body></html>';
end;
4: begin
HTML:='<html><head><title>Автозаточка Fer123 - Выбор предмета</title></head><body>';
for i:=0 to Inventory.Count-1 do HTML:=HTML+'<a action="bypass script chooseitem '+Inventory.Names[i]+'">'+Inventory.Values[Inventory.Names[i]]+'</a><br1>';
HTML:=HTML+'</body></html>';
end;
5: begin
HTML:='<html><head><title>Автозаточка Fer123 - Выбор заточки</title></head><body>';
for i:=0 to Scrolls.Count-1 do HTML:=HTML+'<a action="bypass script choosescroll '+Scrolls.Names[i]+'">'+Scrolls.Values[Scrolls.Names[i]]+'</a><br1>';
HTML:=HTML+'</body></html>';
end;
end;
WriteMask('cdsd',[$19,5,HTML,0]);
SendToClient;
end;
Procedure ExecuteCMD(CMD:string);
var argument:string;
begin
if Copy(CMD,1,6)='script' then
begin
Delete(CMD,1,7);
if pos(' ',CMD)<>0 then begin
argument:=CMD;
CMD:=Copy(CMD,1,pos(' ',CMD)-1);
Delete(argument,1,pos(' ',argument));
end else argument:='';
case CMD of
'start': if not started then
begin
Step:=1;
error:=false;
itries:=0;
stries:=0;
if arLength>0 then begin
started:=true;
timer.enabled:=true;
end;
if scrollbuying then timer2.enabled:=true;
ShowMenu(0);
end;
'stop': if started then
begin
Step:=1;
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
ShowMenu(0);
end;
'add':
begin
if (argument<>'') and (TempItemOID<>0) and (TempScrollID<>0) then begin
inc(arLength);
SetLength(arItemOID,arLength);
SetLength(arItemID,arLength);
SetLength(arScrollID,arLength);
SetLength(arEnchantTo,arLength);
SetLength(arEnchantMax,arLength);
arItemOID[arLength-1]:=TempItemOID;
arItemID[arLength-1]:=GetItem(TempItemOID,1,2);
arScrollID[arLength-1]:=TempScrollID;
arEnchantTo[arLength-1]:=strtoint(argument);
if arLength=1 then begin
if AltOption=true then AltSearch else CurEnchLvl:=GetItem(arItemOID[0],1,4);
ScrollMSIndex:=Scrolls.IndexOfName(inttostr(arScrollID[arPos]));
end;
TempItemName:='Нажми для выбора предмета';
TempScrollName:='Нажми для выбора заточки';
TempItemOID:=0;
TempScrollID:=0;
ShowMenu(0);
end;
end;
'col':
begin
if argument<>'' then colid:=strtoint(argument);
ShowMenu(1);
end;
'colcondition':
begin
if argument<>'' then ColExchangeCondition:=strtoint(argument);
ShowMenu(1);
end;
'chooseitem':
begin
if GetItem(strtoint(argument),1,3)<>-1 then begin
TempItemName:=Inventory.Values[argument];
TempItemOID:=strtoint(argument);
end;
ShowMenu(0);
end;
'clear':
begin
arLength:=0;
arPos:=0;
SetLength(arItemOID,1);
SetLength(arItemID,1);
SetLength(arScrollID,1);
SetLength(arEnchantTo,1);
SetLength(arEnchantMax,1);
arItemOID[0]:=0;
arItemID[0]:=0;
arScrollID[0]:=0;
arEnchantTo[0]:=0;
arEnchantMax[0]:=0;
if started then begin
Step:=1;
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
end;
ShowMenu(0);
end;
'choosescroll':
begin
TempScrollName:=Scrolls.Values[argument];
TempScrollID:=strtoint(argument);
ShowMenu(0);
end;
'maxscrolls':
begin
if argument<>'' then ScrollAmount:=strtoint(argument);
ShowMenu(1);
end;
'timer11':
begin
if argument<>'' then timerint11:=strtoint(argument);
ShowMenu(2);
end;
'timer12':
begin
if argument<>'' then timerint12:=strtoint(argument);
ShowMenu(2);
end;
'timer13':
begin
if argument<>'' then timerint13:=strtoint(argument);
ShowMenu(2);
end;
'timer2':
begin
if argument<>'' then timerint2:=strtoint(argument);
ShowMenu(2);
end;
'setrandom':
begin
if argument<>'' then timerrandom:=strtoint(argument);
ShowMenu(2);
end;
'showmenu': ShowMenu(strtoint(argument));
'scrollbuying':
begin
if argument='on' then begin
scrollbuying:=true;
if started then timer2.enabled:=true;
end;
if argument='off' then scrollbuying:=false;
ShowMenu(1);
end;
'itembuying':
begin
if argument='on' then itembuying:=true;
if argument='off' then itembuying:=false;
ShowMenu(1);
end;
'adenabuying':
begin
if argument='on' then adenabuying:=true;
if argument='off' then adenabuying:=false;
ShowMenu(1);
end;
'debugmsg':
begin
if argument='on' then debugmsg:=true;
if argument='off' then debugmsg:=false;
ShowMenu(2);
end;
'pass2':
begin
if argument='on' then pass2:=true;
if argument='off' then pass2:=false;
ShowMenu(2);
end;
'blockpck':
begin
if argument='on' then blockpck:=true;
if argument='off' then blockpck:=false;
ShowMenu(2);
end;
end;
pck:='';
end else TempMultisellBypass:=CMD;
end;
Procedure DebugSay(text:string);
begin
if debugmsg then begin
buf:=#$4A;
Writemask('ddss',[0,3,'Script',text]);
SendToClient;
end;
end;
procedure UseItem(ObjectID: integer);
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;
Procedure RequestPutEnchantTargetItem(ObjectID: integer);
begin
buf:=#$D0;
WriteH(76);
WriteD(ObjectID);
SendToServer;
end;
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$5F;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;
Procedure RequestExCancelEnchantItem;
begin
buf:=HStr('D0 4E 00');
SendToServer;
end;
Procedure MultisellChoose(ListID,EntryID,Amount:integer);
begin
buf:=#$B0;
WriteMask('ddqhddhhhhhhhh',[ListID,EntryID,Amount,0,0,0,65534,0,0,0,0,0,0,0]);
SendToServer;
end;
function AltGetItem(ID,lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if (ItemBase[2,i]=ID) and (Itembase[4,i]=lvl) then begin
result:=ItemBase[1,i]; // itemOID
exit;
end;
result:=0;
end;
procedure AltSearch;
begin
CurEnchLvl:=0;
if GetItem(arItemID[arPos],2,1)=-1 then exit;
repeat
arItemOID[arPos]:=AltGetItem(arItemID[arPos],CurEnchLvl);
if arItemOID[arPos]=0 then inc(CurEnchLvl);
until arItemOID[arPos]<>0;
end;
//............................................
//******************************************************************************
procedure OnTimer(Sender: TObject);
var ListId,EntryID:integer;
MSstr:string;
begin
case Step of
1: begin
if AltOption=true then AltSearch else CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
if arEnchantMax[arPos]<CurEnchLvl then arEnchantMax[arPos]:=CurEnchLvl;
if (CurEnchLvl>=arEnchantTo[arPos]) or error then begin
if error then DebugSay('Ошибка! Невозможно найти/купить предмет/заточку. Переходим к следующему в очереди...');
error:=false;
repeat
if (arPos+1)>=arLength then
begin
DebugSay('Прервано! Очередь выполнена!');
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
exit;
end;
inc(arPos);
DebugSay('Затачивается предмет №'+inttostr(arPos+1));
if AltOption=true then AltSearch else CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
until CurEnchLvl<arEnchantTo[arPos];
ScrollMSIndex:=Scrolls.IndexOfName(inttostr(arScrollID[arPos]));
stries:=0;
itries:=0;
end;
if adenabuying and (GetItem(57,2,3)<ColExchangeCondition) then
if GetItem(colid,2,1)=-1 then
begin
timer2.enabled:=false;
if GetItem(arScrollID[arPos],2,1)=-1 then begin
DebugSay('Прервано! Закончились предметы для обмена адены.');
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
exit;
end;
end else
begin
DebugSay('Обмениваем адену...');
RequestBypassToServer(colMSBypass);
MultisellChoose(colMSListID,colMSEntryID,1);
timer.interval:=2000;
exit;
end;
if GetItem(arItemOID[arPos],1,3)=-1 then
begin
if AltOption then DebugSay('Сломаны все предметы.') else DebugSay('Предмет OID='+inttostr(arItemOID[arPos])+' сломан, ищем новый предмет...');
if GetItem(arItemID[arPos],2,1)<>-1 then
begin
arItemOID[arPos]:=GetItem(arItemID[arPos],2,1);
CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
if not AltOption then DebugSay('Новый предмет найден. OID='+inttostr(arItemOID[arPos]));
Step:=3;
end else if itembuying then Step:=2 else error:=true;
end else Step:=3;
timer.interval:=10;
end;
2: begin
if GetItem(arItemID[arPos],2,1)=-1 then begin
if (MultisellList.IndexOfName(inttostr(arItemID[arPos]))=-1) or (itries=5) then begin
error:=true;
Step:=1;
exit;
end;
DebugSay('Пытаемся купить новый предмет.');
timer.interval:=2000;
MSstr:=MultisellList.Values[inttostr(arItemID[arPos])];
ListID:=strtoint(Copy(MSstr,1,pos(',',MSstr)-1));
Delete(MSstr,1,pos(',',MSstr));
EntryID:=strtoint(Copy(MSstr,1,pos(',',MSstr)-1));
Delete(MSstr,1,pos(',',MSstr));
RequestBypassToServer(MSstr);
MultisellChoose(ListID,EntryID,1);
inc(itries);
end else
begin
itries:=0;
arItemOID[arPos]:=GetItem(arItemID[arPos],2,1);
CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
DebugSay('Новый предмет куплен. OID='+inttostr(arItemOID[arPos]));
Step:=3;
timer.interval:=10;
end;
end;
3: begin
ScrollOID:=GetItem(arScrollID[arPos],2,1);
if ScrollOID<>-1 then
begin
timer.interval:=timerint11+round(random()*timerrandom);
if pass2 then Step:=5 else Step:=4;
timer.enabled:=false;
UseItem(ScrollOID);
DebugSay('Активирована заточка '+Scrolls.Values[inttostr(arScrollID[arPos])]);
end else
begin
if (scrollbuying=false) or (ScrollMSListEntry[2,ScrollMSIndex]=0) or (stries=5) then error:=true;
Step:=1;
end;
end;
4: begin
timer.interval:=timerint12+round(random()*timerrandom);
RequestPutEnchantTargetItem(arItemOID[arPos]);
DebugSay('Ложим предмет OID='+inttostr(arItemOID[arPos])+' в окно заточки');
Step:=5;
timer.enabled:=false;
end;
5: begin
timer.interval:=timerint13+round(random()*timerrandom);
RequestEnchantItem(arItemOID[arPos]);
Step:=1;
DebugSay('Посылаем запрос на заточку предмета. OID='+inttostr(arItemOID[arPos]));
timer.enabled:=false;
end;
end;
end;
procedure RequestBypassToServer(cmd : string);
begin
buf:=#$23;
WriteS(cmd);
SendToServer;
end;
procedure OnTimer2(Sender: TObject);
begin
if (scrollbuying=true) and (GetItem(arScrollID[arPos],2,3)<25) and (ScrollMSListEntry[2,ScrollMSIndex]<>0) then
begin
DebugSay('Пытаемся купить заточки.');
RequestBypassToServer(ScrollMSBypass[ScrollMSIndex]);
MultisellChoose(ScrollMSListEntry[1,ScrollMSIndex],ScrollMSListEntry[2,ScrollMSIndex],ScrollAmount);
end;
if GetItem(arScrollID[arPos],2,3)<=0 then inc(stries) else stries:=0;
timer2.interval:=timerint2+round(random()*timerrandom);
end;
begin
if FromServer then
case pck[1] of
#$11 : CreateItemBase;
#$21 : UpdateItemBase;
#$D0 : begin
MultiSellListCreate;
if started and blockpck then pck:='';
end;
#$7C : if started then
begin
if Step=4 then timer.enabled:=true;
if pass2 and (Step=5) then timer.enabled:=true;
if blockpck then pck:='';
end;
#$FE : if started and (ReadH(2)=129) and (Step=5) then if ReadD(4)=0 then
begin
RequestExCancelEnchantItem;
DebugSay('Не совпадает сила действий свитка');
Step:=1;
timer.enabled:=true;
end else timer.enabled:=true;
#$87 : if started then
begin
if Step=1 then timer.enabled:=true;
case ReadD(2) of
0:DebugSay('Успешно заточено до +'+inttostr(CurEnchLvl+1));
1:DebugSay('Неудачная заточка. Предмет разбит на кристаллы');
2:DebugSay('Заточка отменена');
3:DebugSay('Неудачная заточка. Уровень заточки = 0');
4:DebugSay('Неудачная заточка');
5:DebugSay('Неудачная безопасная заточка. Уровень заточки = '+inttostr(CurEnchLvl+1));
end;
end;
end;
if FromClient and (pck[1]=#$56) and (ReadD(2)=12) then
begin
ShowMenu(0);
pck:='';
end;
if FromClient and (pck[1]=#$23) then ExecuteCMD(ReadS(2));
end.
//спасибо за идею mira
// by Breadfan, Gr_Final chronics
// Работа с чаринфо - Fer123
//принцип работы с масками - mira
// пауза - соц. advance - требуется если при включенном скрипте надо пообщатся с нпс -
// иначе при появлении\удалении рядом игрока текущее диалоговое окно будет сбито обновлением списка целей.
// при старте скрипт - по умолчанию запущен.
//
// после запуска - 1) пройти персом - считать координаты - на всякий случай - хотя по идее при старте
// перс сам должен сесть-встать для получения координат 2) сделать релог - при необходимости
// считать окружение и немедленно его показать, если после запуска кудато
// телепортируешся - то релог не нужен.
//
// список выводитса по команде в чат //list - с двумя слешами! можно закрыть,
// при появлении\удалении очередного перса,
// или нажатии\отжатии паузы, или повторно //list в чат - появитса вновь.
//
// автоматически очищает списки при телепортах, удаляет телепортировавшихся игроков, просто умерших - скрывает,
// после их воскрешения - отобразит повторно.
//
// во время паузы - считывание окружения продолжается, приостановлен лишь вывод записей, так что после возобновления
// работы - будет выведен обновленный список
//
// при первом запуске - уточнить путь к classid.ini !!! Для отображения профессий.
//
// Работает - только с клиентом!!! работа с режимом - NoCloseServerAfterClientDisconnect - даже не тестилась.
//
// КланЛидеры выделены в списке цветом
// Сортировки - нет, фильтр - примитивен - только для отсева торговцев.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const
name='Aola';
////////////////<<<<<<<<<<----Mask---->>>>///////////////////////////////////////////
RELATION_CLAN_MEMBER = $40; // персонаж состоящий в каком-либо клане
RELATION_LEADER = $80; // клан лидер
RELATION_CLAN_MATE = $100; // хз
RELATION_INSIEGE = $200; // осаждаемые
RELATION_ATTACKER = $400; // осаждающие
RELATION_ALLY = $800; // альянс
RELATION_ENEMY = $1000; // хз
RELATION_MUTUAL_WAR = $4000; // двусторонний вар
RELATION_1SIDED_WAR = $8000; // односторонка
RELATION_ALLY_MEMBER = $10000; // альянс
RELATION_TERRITORY_WAR = $80000; // ТВ
//////////////////////////////////////////////////////////////////////////////////////////
//------->>> Создаем маску с которой и будем работать впоследствии -
// перечислением нужных флагов через OR
//////////////////////////////////////////////////////////////////////////////////////////
//// в данном случае будут обрабатыватся двусторонки, атакующие замок, односторонние вары:
//// (отдельно клан лидера в маску добавлять не требуется)
Mask = RELATION_MUTUAL_WAR or RELATION_ATTACKER or RELATION_1SIDED_WAR;
var
html_, charstr, cmd, OID : String;
CharData, CharInfo, CharClass, CharWars, CharDead : TStringList;
CharDataIndex, CharWarsIndex : Integer;
i, MyX, MyY, MyZ : Integer;
pause : Boolean;
procedure Init; //Вызывается при включении скрипта
begin
html_ := '';
CharData := TStringList.Create;
CharInfo := TStringList.Create;
CharClass := TStringList.Create;
CharWars := TStringList.Create;
CharDead := TStringList.Create;
pause := false;
try
CharClass.LoadFromFile('settings\classid.ini');
except
Sendmsg('classid.ini не найден!');
exit;
end;
MyX:=0;MyY:=0;MyZ:=0;
buf:=#$56;WriteD(0);WriteD(0);WriteC(0);
SendtoserverEx(name);
delay(250);
SendtoserverEx(name);
ShowBoard;
end;
procedure Free; //Вызывается при выключении скрипта
begin
CharData.free; CharInfo.free; CharWars.free; CharDead.free;
end;
procedure ShowBoard; //формирование окна вывода
begin
if Not pause then begin
html_:='<html><body><font color="LEVEL"><center>List of Targets:</center></font>';
buf:=#$19;WriteD(0);
if chardata.count=0 then html_:='<html><body><font color="LEVEL"><center>List of Targets: Null</center></font>';
for i:=0 to CharData.Count-1 do begin
charstr:=CharData;
if ((CharWars.Values[copy(charstr,1,9)])<>'') and Not((CharDead.Values[copy(charstr,1,9)])<>'') then begin
//уточняем бит - клан лидер или не
if (strtoint((CharWars.Values[copy(charstr,1,9)]))and RELATION_LEADER)=0 then begin
html_:=html_+'<br><a action="bypass -h target_on_'+inttostr(i)+'">'+copy(charstr,Pos('=',charstr)+1,length(charstr)-Pos('=',charstr))+'</a>';//Pos('=',charstr);
end else begin
//и если - лидер - то выделяем цветом
html_:=html_+'<br><a action="bypass -h target_on_'+inttostr(i)+'">'+'<font color="LEVEL">'+copy(charstr,Pos('=',charstr)+1,length(charstr)-Pos('=',charstr))+'</font>'+'</a>';//' <<-- Leader of war clan !'+'</a>';//Pos('=',charstr);
end;
end;
end;
end;
// пишем сформированый пакет и шлем его
WriteS(html_);WriteD(0);SendtoclientEx(name);
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if fromserver and (connectname=name) then begin
case (pck[1]) of
#$00:begin //скрыть игрока из списка если он умер - добавляется в список мертвых
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(2)));
if CharDataIndex=-1 then exit else CharDead.Values[inttostr(ReadD(2))]:='is dead';
ShowBoard;
end;
#$01:begin //вернуть в список если его реснули - вычеркнуть из списка мертвых
CharDataIndex:=CharDead.IndexOfName(inttostr(ReadD(2)));
if CharDataIndex=-1 then exit else CharDead.Delete(CharDataIndex);
ShowBoard;
end;
#$08:begin //одиночное удаление - удалить и из списка и (если он был) из списка мертвых
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(2)));
if CharDataIndex=-1 then exit else begin CharData.Delete(CharDataIndex);CharDead.Delete(CharDataIndex);end;
ShowBoard;
end;
#$31:begin // инфа об окружающих в формате оид=ник+', '+профа
// если ктото сидит на торге - его не учитываем, если его ранее не
// было в списках, или же удалим - если был.
if (ReadC(length(pck)-99)<>1) then begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(18)));
if CharDataIndex=-1 then
CharData.Add(Format('%d=%s, %s',[ReadD(18),ReadS(22),CharClass.Values[inttostr(ReadH(length(pck)-84))]])) //dobovlenie v bazu
else CharData[CharDataIndex]:=Format('%d=%s, %s',[ReadD(18),ReadS(22),CharClass.Values[inttostr(ReadH(length(pck)-84))]]); //obnovlenie
ShowBoard;
end else begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD(18)));
if CharDataIndex=-1 then exit else begin CharData.Delete(CharDataIndex);CharDead.Delete(CharDataIndex);end;
ShowBoard;
end;
end;
#$CE:begin //!!!!!!!!<<<< --- Обработка 0xCE (RelationChanged)--- >>>>>
if ((ReadD(6)and mask)<>0) then begin
CharWars.Values[inttostr(ReadD(2))]:=inttostr(ReadD(6));
ShowBoard;
end;
end;
end;
end;
if fromclient and (connectname=name) then begin
case (pck[1]) of
#$0f:begin //координаты
MyX:=ReadD(2);MyY:=ReadD(6);MyZ:=ReadD(10);
end;
#$23:begin
if (copy((ReadS(2)),1,10)='target_on_')then begin
OID:=copy(CharData[strtoint(copy(ReadS(2),11,1))],1,9);
buf:=#$1F; WriteMask('ddddc',[oid,MyX,MyY,MyZ,0]);
if (MyX<>0)or(MyY<>0)or(MyZ<>0) then pck:=buf;//замена команды на пакет экшн
ShowBoard;
end;
end;
#$3a:begin //полная очистка при телепорте
CharData.clear;
CharWars.clear;
ShowBoard;
end;
#$56:begin //вкл\выкл паузы
if ReadD(2)=14 then pause:=Not pause;
ShowBoard;
if pause then begin
buf:=#$19;WriteD(0);
html_:='<html><body><font color="LEVEL"><center>List of Targets: Pause</center></font>';
WriteS(html_);WriteD(0);SendtoclientEx(name);
end;
end;
#$59:begin //координаты
MyX:=ReadD(2);MyY:=ReadD(6);MyZ:=ReadD(10);
end;
#$74:begin //прячем управление через чат от сервера
if (ReadS(2)='list') then begin
buf:=#$48;WriteH(0); pck:=buf; ShowBoard;
end;
end;
end;
end;
end.
Пробуйте
НО - скорее всего надо будет допиливать под себя, данный скрипт писалса согласно данных от l2mir.org
на кодерах выложил Breadfan
Добавлено через 3 минуты
Авто Augument to Freya
Код:
//Made By Avrelio
//Скрипт на аргументацию в 1 нажатия
//Вставить ЛС соцальное действие ДА /social yes
//Удалить ЛС соцальное действие НЕТ /socila no
const
name='AvrelioCX'; //ник чара
puhaid=15893; //ид пухи куда ЛС встовлять Не забываем если 2 оденаковые пухи 1 ложым в вх
lifestoneid=10484; // ИД лайф стона
gamestoneid=2132; // ИД гем стоуна 2132 б грейд
gemcount=36; //скока гемов надо на вставку 36 для топ пухи дальше сам в игре смотриш
var
Invertory:array[0..999,1..2] of integer;
i:word;
ObjId,ObjId1,ObjId2:integer;
procedure Init;
begin
buf:=#$14;
SendToServerEx(name);
end;
procedure ItemList; //obj id puhi
begin
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=puhaid then ObjId:=Invertory[i,1];
end;
end;
procedure ItemList1; //obj id lsa
begin
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=lifestoneid then ObjId1:=Invertory[i,1];
end;
end;
procedure ItemList2; //obj id gema
begin
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=gamestoneid then ObjId2:=Invertory[i,1];
end;
end;
procedure vstavkalsa;
begin
buf := HStr('D0 41 00');
WriteD(ObjId);
WriteD(ObjId1);
WriteD(ObjId2);
WriteD(gemcount);
WriteD(0);
SendToServerEx(name);
end;
procedure deletels;
begin
buf := HStr('D0 43 00');
WriteD(ObjId);
SendToServerEx(name);
end;
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
end;
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList1;
end;
end;
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList2;
end;
end;
begin
if fromclient and (ConnectName=name) and (pck=HStr('56 18 00 00 00 00 00 00 00 00')) then
begin
vstavkalsa;
end;
end;
begin
if fromclient and (ConnectName=name) and (pck=HStr('56 19 00 00 00 00 00 00 00 00')) then
begin
deletels;
end;
end;
end.
Добавлено через 6 минут
точка скилов под фрею
Код:
Const
// ============= НАСТРОЙКИ ===============
NickName = ''; //ник
MaxEnchantLevel = 20; //до какого уровоня точить
// =======================================
// задержка между точками в сек.
interval = 0;
// отладочные сообщения
MainDebug = false;
var
CurLevel: integer;
tick: integer;
SKillID: integer;
procedure Init; //Вызывается при включении скрипта
begin
CurLevel := -1;
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(10);
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) then begin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.
Последний раз редактировалось lSiml; 24.04.2011 в 22:44.
Причина: Добавлено сообщение
2 вариант антитаргета.
- мы не можем пить банки , бафатся.
+антитаргет
+можно делать во время оли и не терять очки!
Код:
const
//======================================
Name='HARD*****'; //**<-----Ник Персонажа-=
//======================================
var
a:integer; b:boolean;
procedure Init;
begin
SendMsc('Возьмя себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
begin
begin
if FromClient and (ConnectName=Name) and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
begin
If Fromclient and (ConnectName=Name) and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 05 4D 06 10 05 00 00 00');
SendToServerEX(Name);
end;
end;
end.
Вписуем свой ник,вкл. скрипт,кидаем пати жертве и просим что б она кинула что-то в трейд,скрипт автоматически мутит то что в трейде.
Код:
var
i:integer;
begin
if (FromServer) and (pck[1]=#$21) then
begin
buf:=HStr('04')+pck[6]+pck[7]+pck[8]+pck[9]+HStr('A8 41 02 00 B8 27 FF FF 53 F5 FF FF 00');
for i:=1 to 1 do
SendToServerEx('HighStyle'); <<--------- Вписуем сюда свой НИК
end;
end.
Таргет радар,выделяем цель или прописуем таргет и над нами появляеться стрелка которая указует куда нам бежать. Чтобы включить скрипт используйте в игре социальное действие - Yes
Чтобы выключить скрипт используйте в игре социальное действие - No
Код:
// Установка стрелки (радара) над чаром к цели, при использовании таргета
// Чтобы включить скрипт используйте в игре социальное действие - Yes
// Чтобы выключить скрипт используйте в игре социальное действие - No
// Автор: Furious
// Версия: 0.2
var
Attacker, SocialID, CorX, CorY, CorZ, Status: Integer;
procedure TargetRadar(CorX, CorY, CorZ: Integer);
begin
buf:=#$EB;
WriteD(0);
WriteD(1);
WriteD(CorX);
WriteD(CorY);
WriteD(CorZ);
SendToClient;
end;
procedure TargetRadarDrop;
begin
buf:=#$EB;
WriteD(2);
WriteD(1);
WriteD(0);
WriteD(0);
WriteD(0);
SendToClient;
end;
begin
if FromClient and (pck[1]=#$1B) then
begin
SocialID:=ReadD(2);
case SocialID of
6:Status:=1;
5:Status:=0 and TargetRadarDrop;
end;
end;
if Status=1 then
begin
if FromServer and (pck[1]=#$61) then
begin
CorX:=ReadD(6);
CorY:=ReadD(10);
CorZ:=ReadD(14);
TargetRadar(CorX, CorY, CorZ);
end;
end;
end.
Оба скрипта тестились на Interlud хрониках.
Последний раз редактировалось HotShot; 26.07.2011 в 08:11.
Выкладываю скрипты сотканные из чужих кусков и скриптов, которые пригодятся кому-нибудь. На спасибо надеяться не приходится.
Все они Interlude узкоспециальные скрипты, сотканы на станке версии 3.1.8 на нем же и тестились. (Еще 3.4 тестил друг)
Первым идет самый идиотский скрипт всех времен:
Код:
Const
Name='Zhyk';
Max=250;
ItemToUse=268484030; //После убийства РБ Жрет Итем с данным OID (Хилка)
You=268510034;
Skill1st=1340; //ID Скилла, юзается 1й (Вортекс)
Heal=268701436; //OID Хиллки
SkillToAttack=1235; //ID Скилла, которым будим убивать...
AttackDelay=200; //Задержка между атаками (Зависит от каста)
RBID=1025319; //ID Рб
var
ItemBase,RBBase : array[1..5,1..max] of integer; //Итемы с пола и Список РБ
timer,timer1,timer2:TTimer; IDindex:boolean;
i,f,ID,D,X,Y,Z,ID1,X1,Y1,Z1:integer; picked,g,M,g1,g2,D1,start,S:byte;
procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=AttackDelay;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer01;
timer1.enabled:=false;
timer1.interval:=1500; //время задержки
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer02;
timer2.enabled:=false;
timer2.interval:=2000;
Picked:=1; M:=0; g:=1;
g1:=1; start:=0; D1:=0;
end;
procedure Free;
begin
timer.Free;
timer1.Free;
timer2.Free;
end;
procedure SendMsc(msc:string); //Шаблон отправки системных сообщений
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit;
end;
result:=0;
end;
procedure OnTimer(Sender: TObject);
begin
buf:=#$2F;
WriteD(SkillToAttack);
WriteD(0);
WriteC(0);
SendToServer;
end;
procedure OnTimer01(Sender: TObject);
begin
if g>0 then
begin
buf:=#$04;
WriteD(ItemBase[1,g1]);
WriteD(ItemBase[2,g1]);
WriteD(ItemBase[3,g1]);
WriteD(ItemBase[4,g1]);
WriteC(0);
SendToServer;
inc(g1);
end;
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=#$04;
WriteD(ID1);
WriteD(X1);
WriteD(Y1);
WriteD(Z1);
WriteC(0);
SendToServer;
end;
begin
if FromServer and (pck[1]=#$0D) and (D1=0) and (ReadD(2)=268510034) then
begin
for i:=1 to g1 do
ItemBase[1,(GetItem(ReadD(6),1,5)+i-1)]:=0;
end;
if g2>8 then
begin
timer2.enabled:=false;
buf:=#$14;
WriteD(ItemToUse);
WriteD(0);
SendToServer;
g2:=1;
end;
if (g1>g) or (g=0) then
begin
timer1.enabled:=false;
g1:=1;
g:=1;
g2:=1;
D1:=1;
picked:=1;
if start=1 then
begin
start:=0;
buf:=#$04;
WriteD(ID);
WriteD(X);
WriteD(Y);
WriteD(Z);
WriteC(0);
SendToServer;
buf:=#$2F;
WriteD(Skill1st);
WriteD(0);
WriteC(0);
SendToServer;
timer.enabled:=false;
end;
end;
if FromServer and (pck[1]=#$06) and (ReadD(2)=D) then //Die
begin
timer1.enabled:=true;
if g=1 then g:=0;
end;
if FromServer and (pck[1]=#$0C) then //DropItem
begin
timer.enabled:=false;
if (ReadD(10)=6578) then //6578(Bless Arm S)
begin
ItemBase[1,g]:=ReadD(6);
ItemBase[2,g]:=ReadD(14);
ItemBase[3,g]:=ReadD(18);
ItemBase[4,g]:=ReadD(22);
ItemBase[5,g]:=g;
inc(g);
end;
end;
if FromServer and (pck[1]=#$16) and (ReadD(6)=RBID) then
begin
if (timer.enabled=false) and (Picked=1) then
begin
Picked:=0;
D:=ReadD(2);
start:=0;
buf:=#$04;
WriteD(ReadD(2));
WriteD(ReadD(14));
WriteD(ReadD(18));
WriteD(ReadD(22));
WriteC(0);
SendToServer;
buf:=#$2F;
WriteD(Skill1st);
WriteD(0);
WriteC(0);
SendToServer;
timer.enabled:=true;
end;
if ((timer.enabled=true) and (ReadD(2)<>D)) or ((Picked=0) and (ReadD(2)<>D)) then
begin
D:=ReadD(2);
ID:=ReadD(2);
X:=ReadD(14);
Y:=ReadD(18);
Z:=ReadD(22);
start:=1;
end;
end;
end.
Написанный на коленке скрипт был создан за 5 минут для сервера razor-revival.ru(Вроде как плагиат другого разора.), где фарм идет на РБшечках. (Он недавно переоткрылся, вроде)
Писался для друга и себя, для фарма магом. Друга Arsonist звать, а себя позорить не буду.
Благодаря тонкой настройке он умеет убивать РБ, подбирать весь дроп и (Внимание) юзать хилочку. О да. Еще этот скрипт побил рекорд по кол-ву переменных.
2й Скрипт:
Код:
Const
Name='Zhyk'; //Имя
interval1=384; //Интервал
Max=280; // Кол-во ячеек в инвентаре
Ench=90; //На скок точить
//---------------------------------------------
Var
ItemBase : array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ICurOID, SCurOID, min1: integer;
i, j, u, y, d, n, num1: Word;
min, min2: Byte;
z, lol, L: boolean;
Timer01: TTimer;
s, num: string;
//=============================================================//
procedure Init; //Вызывается при включении скрипта
//----------------------------------------------------------
begin
n:=0; i:=0; min:=0; min2:=0;
z:=true; lol:=true; L:=true;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=interval1;
buf:=#$0F;
SendToServerEx(Name);
end;
//=============================================================//
procedure Free; //Вызывается при выключении скрипта
begin
Timer01.free;
end;
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);// ID Чата
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
procedure OnTimer01(Sender: TObject);
begin //Проверка Энчант лвл'а
if GetItem(ICurOID, 1, 4)>=Ench then ICurOID:=EnchantDone;
z:=false; lol:=true;
if L then begin
L:=false;
buf:=#$14;
writeD(SCurOID);
WriteD(0);
SendToServerEx(Name);
end
else
begin
L:=true;
buf:=#$58;
WriteD(ICurOID);
SendToServerEx(Name);
end;
if GetItem(ICurOID, 1, 4)>min then min:=GetItem(ICurOID, 1, 4);
end;
function EnchantDone : integer;
begin
for u:=1 to max do
if (ItemBase[2,u]=num1) and (ItemBase[4,u]<Ench) then begin
result:=ItemBase[1,u]; // itemOID
exit;
end;
result:=0;
end;
procedure CreateItemBase;
var
i, j, ListCount: Word;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvl
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
inc(j,12);
end;
end;
//......................................
//******************************************************************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
OID, Count, UpdType: integer;
lvl, ListCount, ID, i, ii, j: Word;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false; //Ели додумался изза чего не добавляет сразу несколько предметов в базу
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(j); //кол-во
inc(j,10);
lvl:=ReadH(j);
case UpdType of
1: begin
for i:=1 to max do begin
if (ItemBase[1,i]=0) and (add=false) then begin
ItemBase[1,i]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
inc(j,10);
end;
end;
function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
y : Word;
begin
for y:=1 to max do
if ItemBase[FieldIn,y]=ID then begin
result:=ItemBase[FieldOut,y]; // itemOID
exit;
end;
result:=0;
end;
begin
if FromClient and (pck[1]=#$14) and z then
begin
SCurOID:=ReadD(2);
end;
if FromClient and (pck[1]=#$58) and z then
Begin
ICurOID:=ReadD(2);
num1:=Getitem(ICurOID, 1, 2);
Timer01.enabled:=true;
end;
if fromserver and (pck[1]=#$0F) and (ReadD(2)=0) and lol then
begin
lol:=false;
Timer01.enabled:=false;
s:=ReadS(6);
for d:=1 to Length(s) do
begin
if (s[d]='9') and (s[d+1]='9') and (s[d+2]='9') then
begin
num:=Copy(s, d, 5);
break;
end;
end;
SendMsg2('Capcha ID: '+num);
buf:=#$21;
writeS('ench_click '+num);
writeS(num);
WriteC(0);
SendToServerEx(Name);
Timer01.enabled:=true;
end;
if FromServer and (pck[1]=#$64) and (ReadD(2)=1517) and (min2<>min) then
begin
min2:=min;
SendMsg2('Лучшая попытка на '+IntToStr(ICurOID)+' пока: +'+IntToStr(min));
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
end; //end от case!!!
end.
2й скрипт связан с другим более эпичным сервером, где были дешевые точки, которые ложились в 1у ячейку и суперинфернальная капча-кнопка, которую надо было нажимать, а то не точит.
Суть такова: Находит пакет ХТМЛ окошка, находит нужный ИД окошка с рандомным кол-ом <br тега> Он прогоняется по нему в поисках опеределенных цифорок, которые были всегда одни (Надо было делать под любые цифры, но делал для себя и на 1 серв, так что влом было)
Еще не прикрутил покупку, ведь там были дешевые скроллы, а я такой ленивый xD
До сих пор используется на серваках, где скроллы в 1й ячейке, даже если без капчи.
А последний попросили не выкладывать, ибо он хоть и нубский, но немного актуален.
Скрипт на аугментацию. Работает на фрее.
Запускаем скрипт. Первый раз аугментируем/снимаем аугмент руками, дальше автоматически. Активируется соц.действиием "Нет".
Важно - скрипт удаляет и вставляет ЛС за один раз (мне лично так удобнее).
Код:
const
nik='яяя';
var
WeaponID, LsID, GemID, GemCount, zero: integer;
procedure Init; //Вызывается при включении скрипта
begin
end;
procedure OnTimer01(Sender: TObject);
begin
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
end;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient and (pck[1]=#$D0) then
begin
WeaponID:=ReadD(4);
LsID:=ReadD(8);
GemID:=ReadD(12);
GemCount:=ReadD(16);
end;
//Cancel Augment
if FromClient and (pck = HStr('56 19 00 00 00 00 00 00 00 00')) then //62 AB 07 00 00 00 00 00 00 (Social No)
begin
buf:=hstr('FE 52 00 ');//окно удаления арГ
SendToClient;
delay(400);
pck:='';
Buf:=#$D0#$42#$00;
WriteD(WeaponID);
SendToServerEx(nik);
Buf:=#$D0#$43#$00;
WriteD(WeaponID);
SendToServerEx(nik);
buf:=hstr('FE 51 00 ');//окно Арг
SendToClient;
delay(400);
pck:='';
Buf:=#$D0#$26#$00;
WriteD(WeaponID);
SendToServerEx(nik);
delay(350);
Buf:=#$D0#$27#$00;
WriteD(WeaponID);
WriteD(LsID);
SendToServerEx(nik);
delay(400);
Buf:=#$D0#$28#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
WriteD(zero);
SendToServerEx(nik);
delay(400);
Buf:=#$D0#$41#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
WriteD(zero);
SendToServerEx(nik);
end;
end.