Просмотр полной версии : Скрипты для l2phx
1. Публикуем сюда скрипты для l2phx, указываем на какой версии l2phx тестировался скрипт.
2. Все кроме скрипта и описания к нему будет удалятся, автор получать горчичник (для "спасибо" есть кнопка).
3. Скрипт обязательно должен быть в теге "кода" ([ CODE ][ /CODE ] без пробелов)
4. Скрипт должен быть с описанием (инструкцией если таковая имеется) и с указанием автора скрипта.
Скрипт копируем в l2phx в кладку "Скрипты", нажимаем "новый скрипт" и вставляем.
Скрипты не соответствующие данным правилам - будут удалятся без предупреждений.
---
Все вопросы по программе и работоспособности скриптов задаем на официальном форуме L2pbx - [Ссылки могут видеть только зарегистрированные и активированные пользователи]
1. Скрипт для Аугментация в одно нажатие, работает на любых версиях.
const
Name='Mamy'; // ник
ItemID=6608; // пуха
LifeID=8762; // лайфстон
GemsID=2131; // гемстон
GemsAmount=25; //кол-во гемов
max=100; // инвентарь
var
LifeBase:array[1..max] of integer;
ColvoLife,ColvoGems,Life,Item,Gems,SocialID,augid: integer;
procedure Init;
var i:integer;
begin
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure Free;
var i:integer;
begin
for i:=1 to max do
LifeBase[i]:=0;
end;
function StrToHex(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
begin
if b<10 then result:=chr(b+$30)
else result:=chr(b+$37);
end;
begin
result:='';
for i:=1 to length(packet) do begin
tmp:=ord(packet[i]) div 16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
function inttohex(n:integer):string;
var i:integer;
t:string;
a:array[0..15] of char;
begin
a[0]:='0';
a[1]:='1';
a[2]:='2';
a[3]:='3';
a[4]:='4';
a[5]:='5';
a[6]:='6';
a[7]:='7';
a[8]:='8';
a[9]:='9';
a[10]:='A';
a[11]:='B';
a[12]:='C';
a[13]:='D';
a[14]:='E';
a[15]:='F';
result:='';
t:='';
i:=0;
while n<>0 do begin
if (i mod 2=0)and(i>0) then begin
result:=result+t+' ';
t:='';
end;
t:=a[n mod 16]+t;
n:=n div 16;
inc(i);
end;
result:=result+t;
end;
procedure Say;
var i:integer;
s:string;
begin
s:='<tr><td>LS='+inttostr(ColvoLife)+' (*'+inttostr(GemsAmount)+'='+inttostr(ColvoLife*Ge msAmount)+')</td></tr>';
s:=s+'<tr><td>Gems='+inttostr(ColvoGems)+' (/'+inttostr(GemsAmount)+'='+inttostr(ColvoGems div GemsAmount)+')</td></tr>';
s:=s+'<tr><td>---</td></tr>';
if Item=0 then
s:=s+'<tr><td>No Weapon</td></tr>'
else if augid>0 then
s:=s+'<tr><td>Augmented ('+inttohex(augid)+')</td></tr>'
else
s:=s+'<tr><td>Not augmented</td></tr>';
buf:=hstr('0F 01 00 00 00');
WriteS('<html><body><br><table width=100%>'+s+'</table><br><br><br><br><br><br>'+
'"Social Yes" - Cancel Augment(if augmented) and Augment(if you have enough gems and LSs)<br>'+
'"Social No" - Show this help<br><br>'+
'Sometimes client dont get packet InventoryUpdate and you see "Not augment" when weapon is augmented.'+
' Simply press [Tab] twice or wear weapon.<br><br>'+
'(c) raid aka Mamy</body></html>');
// '(c) raid aka Mamy<br>'+strtohex(pck)+'</body></html>');
WriteD(0);
SendToClientEx(Name);
end;
procedure CreateItemBase;
var i,ss,j,ObjID,ItmID,ListCount,count,aug:integer;
begin
Item:=0;
ss:=1;
j:=4;
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8;
for i:=1 to ListCount do begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case ItmID of
LifeID: begin
LifeBase[ss]:=ObjID;
inc(ss);
end;
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
j:=j+6;
end;
ColvoLife:=ss-1;
Say;
end;
procedure UpdateItemBase;
var i,ii,j,ObjID,ItmID,ListCount,Count,UpdType,aug: integer;
begin
ListCount:=ReadH(2);
j:=4;
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case UpdType of
1:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=0 then begin
LifeBase[ii]:=ObjID;
ColvoLife:=ColvoLife+1;
break;
end;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
2:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
3:case ItmID of
ItemID:
Item:=0;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=ObjID then begin
LifeBase[ii]:=0;
ColvoLife:=ColvoLife-1;
end;
end;
end;
end;
j:=j+6;
end;
Say;
end;
function GetNextLife: integer;
var i:integer;
begin
Result:=-1;
for i:=1 to max do begin
if (LifeBase[i]<>0) then begin
Result:=LifeBase[i];
exit;
end;
end;
end;
procedure Augment;
begin
buf:=hstr('D0 29 00');
WriteD(Item);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2A 00');
WriteD(Item);
WriteD(Life);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2B 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2C 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
end;
procedure DisAugment;
begin
buf:=hstr('D0 2D 00');
WriteD(Item);
SendToServerEx(Name);
buf:=hstr('D0 2E 00');
WriteD(Item);
SendToServerEx(Name);
end;
begin
if pck='' then exit;
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
pck:='';
case SocialID of
7: begin
buf:=hstr('A7 2A A0 00 00 80 84 1E 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
buf:=hstr('A7 29 A0 00 00 40 0D 03 00 FA 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
exit;
end;
6: begin
if augid>0 then begin
DisAugment;
delay(300);
end;
Life:=GetNextLife;
if (Life=-1)or(ColvoGems<GemsAmount)or(ColvoLife<1) then
exit;
Augment;
exit;
end;
5: begin
Say;
exit;
end;
end;
end;
if FromServer then
case pck[1] of
#$1B: CreateItemBase;
#$27: UpdateItemBase;
end;
end.
Описание: Активируем скрипт, в клиенте должно появиться окошко чата.
"Соц. Да" - снятие аугмента и аугментирование.
В инвентаре должна быть только одна пуха с данным ID.
Автор - Mamyka
==+==
1. Скрипт на Авто-таргет ПК, тестилось на L2J и L2F серверах
// Авторы: Furious, metalFan
// Отдельное спасибо PanAm за помощь в написании
// Версия: Gracia 1.5 PreFinal
Const UserName=('онатоле');
var
ObjectID, KarmaPK, TargetPK, MessagePK, ClassPK, i, x, y, z, TempPK: Integer;
NamePK, CvarPK : String;
ClassName: TStringList;
procedure Init;
begin
MessagePK:=1;
TargetPK:=0;
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS('PK Scanner for Gracia 1.5 by Furious, metalFan');
SendToClientEx(UserName);
ClassName :=TStringList.Create;
ClassName.LoadFromFile('ClassName.ini');
end;
procedure Free;
begin
ClassName.free;
end;
procedure OnConnect(WithClient: Boolean);
begin
end;
procedure OnDisonnect(WithClient: Boolean);
begin
end;
procedure MessageSend(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(UserName);
end;
procedure TargetingPK(ObjectID: Integer);
begin
if TargetPK=1 then begin
buf:=#$1F;
WriteD(ObjectID); WriteD(0); Writed(0); Writed(0); WriteC(0);
SendToServerEx(UserName); end;
end;
procedure KillRadar;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(0);
WriteD(0);
WriteD(0);
SendToClientEx(UserName);
end;
function GetClassName(CID : integer) : string;
begin
result:=ClassName.Strings[CID];
end;
begin
if (FromServer) and (ConnectName=UserName) and (pck[1]=#$31) then
begin
x:=ReadD(2);
y:=ReadD(6);
z:=ReadD(10);
i:=22;
NamePK:=ReadS(i);
ClassPK:=ReadD(i+8);
KarmaPK:=ReadD(i+176);
if (KarmaPK>0) then
begin
ObjectID:=ReadD(18);
TargetingPK(ObjectID);
if MessagePK=1 then begin MessageSend(''+NamePK+' | '+GetClassName(ClassPK)+' | '+IntToStr(KarmaPK)+) end;
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(X);
WriteD(Y);
WriteD(Z);
SendToClientEx(UserName);
end;
end;
if (FromServer) and (ConnectName=UserName) and (pck[1]=#$08) then begin
TempPK:=ReadD(2);
case TempPK of ObjectID:
KillRadar;
end;
end;
if (FromClient) and (ConnectName=UserName) and (pck[1]=#$49) then
begin
CvarPK:=ReadS(2);
case CvarPK of
'\start':
begin
TargetPK:=1;
MessageSend('Search On!');
pck:='';
end;
'\stop':
begin
TargetPK:=0;
MessageSend('Stopped all services!');
pck:='';
end;
'\radar':
begin
MessageSend('Radar Killed');
KillRadar;
pck:='';
end;
end;
end;
end.
Описание: Киньте файл classname.ini в папку пакетхака
==+==
1. Скрипт для работы с чатом
const
MaxMessages = 1000;
var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
box : TCheckBox;
every : TEdit;
_Name : TEdit;
i: Integer;
tm:TTimer;
Message, Name: String;
procedure SendMs(Sender: TObject);
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);
SendToServerEx(_Name.Text);
end;
end;
procedure onNewCommand(obj:TObject;key:string);
var i:integer;
var symbol:Variant;
var after:string;
begin
if (key[1]=#$0D) then begin
SendMs(obj);
symbol := etext.Text[1];
after := '';
if symbol = '#' then after := '#';
if symbol = '!' then after := '!';
if symbol = '@' then after := '@';
if symbol = '$' then after := '$';
if symbol = '%' then after := '%';
etext.Text := after;
end;
end;
procedure onTimer(Sender:TObject);
begin
tm.Interval := StrToInt(every.Text);
if box.checked = true then SendMs(Sender);
end;
procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poDesigned ;
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:=48;
etext:=tedit.Create(penel);
etext.parent:=penel;
etext.align:=alTop;
button:=tbutton.Create(penel);
button.parent:=penel;
button.top := etext.height;
button.caption:='Send';
button.onClick:=@SendMs;
box := TCheckBox.Create(penel);
box.parent := penel;
box.Top := etext.height + 2;
box.Left := button.width + button.left +2;
box.Caption := 'Шторм через: ';
every:=tedit.Create(penel);
every.parent:=penel;
every.Left := box.Left + box.Width;
every.Top := button.top;
every.Text := IntToStr(3000);
tm := TTimer.Create(frm);
tm.Interval := 1000;
tm.Enabled := true;
tm.OnTimer := @OnTimer;
etext.OnKeyPress := @onNewCommand;
_Name:=tedit.Create(frm);
_Name.parent:=frm;
_Name.align := alTop;
_Name.Text := '';
frm.Show;
end;
procedure SaveToFile(prefix:string);
var name:string;
begin
name := prefix+'.'+ConnectName+'.'+DateToStr(Date)+'.'+Tim eToStr(Time)+'.txt';
while Pos(':',name) <> 0 do begin
name[Pos(':',name)] := '-';
end;
m.Lines.SaveToFile(name);
end;
procedure Free;
begin
SaveToFile('ChatLog');
box.Free;
every.Free;
tm.Free;
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;
var tp:integer;
var ct:string;
var MessageCounter:integer;
begin
if _Name.Text = '' then _Name.Text := ConnectName;
if FromServer and (ConnectName = _Name.Text) and (pck[1]=#$4a) then
begin
i:=10;
name:=ReadS(i);
message:=ReadS(i);
tp := ReadD(6);
ct := '???';
if tp = 0 then ct := 'GNR';
if tp = 8 then ct := 'TRD';
if tp = 3 then ct := 'PRT';
if tp = 4 then ct := 'CLN';
if tp = 9 then ct := 'ALY';
ct := DateToStr(Date) + ' '+ TimeToStr(Time) + ', '+ ct;
if name='' then name:='Объявление: ';
m.Lines.Add('['+ct+'] '+Name+': '+message);
if MessageCounter > MaxMessages then begin
SaveToFile('Backup');
//m.Lines.Add('BACKUPED');
MessageCounter := 0;
end;
MessageCounter := MessageCounter+1;
end;
end.
Возможности:
1. Отдельное окно чата.
2. "Автоспам": одна строчка раз в Х секунд
3. Длинный текст: отправка многострочного сообщения
4. Лог чата.
1. Скрипт позволяющий открывать любые двери в мире Lineage 2
begin
if fromserver and (pck[1]=#$9F) then pck[22]:=#$00;
end.
1. Скрипт для отображения CP/HP вместо титула, работает на серверах где приходит статусапдейт перса
Var
CurHP,MaxHP,CurCP,MaxCP,CurMP,MaxMP,objID: integer;
procedure Init;
begin
end;
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;
procedure Free;
begin
end;
procedure OnConnect(WithClient: Boolean);
begin
end;
procedure OnDisonnect(WithClient: Boolean);
begin
end;
begin
if fromserver and (pck[1]=#$18) then
begin
StatusUpdate;
objID:=ReadD(2);
buf:=#$CC;
WriteD(objID);
WriteS('CP:'+inttostr(CurCP)+' HP:'+inttostr(CurHP));
SendToClient;
end;
end.
==+==
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.
Инструкция: Закупаемся книжками, выставляем уровень заточки и ник
точим на +1, скрипт продолжает пока не точнет до указанного уровня.
Точить надо с нуля, иначе счетчик не правильно считать начнет.
==+==
1. Скрипт юзает баночки HP если ваше HP < MaxHP
var
timer: TTimer;
Name: String;
OID, OIDName: Integer;
MaxHP: Integer;
w: Integer;
procedure Init; //It is called at script turn on
begin
Name:='bobrul';
OID:= 0;
OIDName:= 0;
w:= 0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnHTimer;
timer.enabled:=false;
timer.interval:=10100; //время задержки
end;
procedure Free; //It is called at script turn off
begin
timer.enabled:=false;
end;
procedure OnHTimer(Sender: TObject);
begin
If OID <> 0 then
begin
buf :=HStr('19');
WriteD(OID);
buf := buf + HStr('00 00 00 00');
SendToServer;
end
else timer.enabled:=false;
end;
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$21: begin
if ReadD(12) = 1061 then OID:=ReadD(8); //OID HealingPotion.
end;
#$32: begin
If ReadS(22) = Name then
begin
MaxHP:=ReadD(84); //MaxHP перса Name
OIDName:=ReadD(18); //OID перса Name
end;
end;
#$18: begin
//Используем банки если HP<MaxHP.
If (ReadD (2) = OIDName) and (ReadD(14) < MaxHP) and (w = 0) then
begin
timer.enabled:=TRUE;
w:= 1;
end;
If (ReadD(2) = OIDName) and (ReadD(14) = MaxHP) then
begin
timer.enabled:=false;
w:= 0;
end;
end;
end;
end.
Описание: Скрипт тест проходил на Lineage 2 Gracia Part 1.
В строке Name:='bobrul'; имя поменять на своё. Если помог жми спасибку не жадничай !
==+==
1. Скрипт юзанья скила UsedSkilFokucedForce для орка у которого есть скил FokucedForce.
Name:='bobrul'; поменять имя .
var
timer: TTimer;
Name: String;
procedure Init; //It is called at script turn on
begin
Name:='bobrul';
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=880; //время задержки
timer.enabled:=true;
end;
procedure Free; //It is called at script turn off
begin
timer.enabled:=false;
end;
procedure OnTimer(Sender: TObject);
begin
buf :=HStr('39 32 00 00 00 00 00 00 00 00');
SendToServer;
end;
//Script main body
//It is called at arrival of each package if the script is included
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$F9: begin
if (ReadD(2) < 2) then //Здесь можно указать при скольки зарядах включиться скил.
begin
timer.enabled:=true;
end;
if (ReadD(2) = 5) then //Здесь указано при скольки зарядах отключиться скил.
begin
timer.enabled:=false;
end;
end;
#$62: begin
if (ReadD(2) = 31) and (ReadD(6) = 0) then
begin
pck:='';
timer.enabled:=false;
end;
if (ReadD(2) = 324) and (ReadD(6) = 0) then pck:='';
end;
end;
end.
==+==
1. Бот рассказывающий анекдоты если у него кто то купил 1 соску .
const
jokes_max = 100;
var
TITLE_DATA2: array [0..16] of string;
IDs: array [1..2000] of cardinal;
Names: array [1..2000] of String;
jokes: array [1..jokes_max] of string;
InTimer: Boolean;
curpos: byte;
f: TStringList;
t: TTimer;
m: TMemo;
MyName: String;
count: Integer;
MyID: Cardinal;
jokes_real: integer;
procedure OnTimerProc;
begin
InTimer := true;
buf := #$0B;
WriteS(MyName);
WriteS(TITLE_DATA2[curpos]);
SendToServer;
curpos := curpos + 1;
if curpos > 16 then curpos := 0;
InTimer := false;
end;
procedure Init;
var
i: byte;
begin
MyName:='bobrul';
curpos := 0;
randomize;
count := 0;
f := TStringList.Create;
jokes_real := 0;
for i := 1 to jokes_max do
begin
try
f.LoadFromFile('C:\l2jokes\' + IntToStr(i) + '.txt');
jokes_real := jokes_real + 1;
except
end;
jokes[jokes_real] := f.Text;
end;
f.free;
//Создаю таймер
t := TTimer.Create(nil);
t.Enabled := false;
t.Interval := 700;
t.OnTimer := @OnTimerProc;
TITLE_DATA2[0] := '@(o_O)@';
TITLE_DATA2[1] := '@(O_o)@';
TITLE_DATA2[2] := '@(o_O)@';
TITLE_DATA2[3] := '@(O_o)@';
TITLE_DATA2[4] := '';
TITLE_DATA2[5] := 'ANEKDOTI';
TITLE_DATA2[6] := '';
TITLE_DATA2[7] := 'ANEKDOTI';
TITLE_DATA2[8] := '';
TITLE_DATA2[9] := 'ANEKDOTI';
TITLE_DATA2[10] := '';
TITLE_DATA2[11] := '@(o_O)@';
TITLE_DATA2[12] := '@(O_o)@';
TITLE_DATA2[13] := '@(o_O)@';
TITLE_DATA2[14] := '@(O_o)@';
TITLE_DATA2[15] := '@(o_O)@';
TITLE_DATA2[16] := '@(O_o)@';
ShowTab;
//Создаю TMemo
m:=TMemo.Create(UserTab);
m.parent:=UserTab;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real));
end;
procedure Free;
begin
t.OnTimer := nil;
t.Enabled := false;
t.Interval := 0;
t.Free;
m.Free;
HideTab;
end;
function FindPlayer(ObjID: cardinal): integer; //Ищет ObjID в массиве IDs
var k: cardinal;
begin
result := -1;
if Count > 0 then
for k := 1 to Count do
if IDs[k] = ObjID then
begin
result := k;
break
end;
end;
var
i: integer;
objid: cardinal;
name: string;
begin
if FromServer then
case pck[1] of
#$31: // CharInfo
begin
i := 18; //В етой позиции находиться ObjectID в пакете CharInfo
objid := ReadD(i);
i := FindPlayer(ObjID);
if i = -1 then
begin
i := 22; //В етой позиции находиться Name в пакете CharInfo
name := ReadS(i);
// Добавление имени в массив ников IDs это ObjectID и Names это Name
if (name = '') then
begin
// (none)
end
else begin
count := count + 1;
IDs[count] := ObjID;
Names[count] := name;
m.Lines.Add(IntToStr(count) + ' - ' + Format('%x', [ObjId])+' = '+ Names[count]);
end;
end;
end;
#$32: //UserInfo Ищет мой ObjectID
begin
i := 18;
MyID := ReadD(i);
i := 22;
MyName := ReadS(i);
//Включает таймер бегущей строки в том случае если мой ObjectID найден
//Тогда начинает работать бегущая строка
t.Enabled := true;
end;
#$23: //TargetSeleted
begin
i := 2;
objid := ReadD(i);
if ReadD(i) <> MyID then exit;
i := FindPlayer(objid);
if i <> -1 then
begin
buf := #$49;
WriteS('Привет, '+names[i]+'! Я бот! Купи у меня сосок и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)');
WriteD(2);
WriteS(names[i]);
SendToServer;
// в лог
m.Lines.Add(TimeToStr(now)+': '+names[i]+'Взял вас в таргет.');
end;
end;
#$08: // ObjectDelete
begin
i := 2;
objid := ReadD(i);
i := FindPlayer(objid);
if i <> -1 then
begin
IDs[i] := IDs[count];
Names[i] := Names[count];
count := count - 1;
end;
end;
#$62:
begin
i := 2;
if ReadD(i) = 1152 then {S1_PURCHASED_S3_S2_s}
begin
i := i + 4*2;
name := ReadS(i);
buf := #$49;
i := int(random * jokes_real) + 1;
WriteS(jokes[i]);
WriteD(2);
WriteS(name);
SendToServer;
if (Length(m.Lines.Text) > 1000) then m.Lines.Text := '<cleared>';
// внесем в лог
m.Lines.Add(TimeToStr(now)+': '+name+' purchased');
m.Lines.Add('> ' + jokes[i]);
end;
end;
end;
end.
Инструкция: Создайте папку C:\l2jokes запишите анекдоты в файлы 1.txt, 2.txt и тд.
jokes_max = 100; здесь поставьте количество анекдотов помните что длинна анекдота не должна превышать 255 символов.
MyName:='bobrul'; Поменяйте на своё имя.
if ReadD(i) = 1152 then {S1_PURCHASED_S3_S2_s} поменяйте ID соски С воин на любой другой предмета который будете продавать.
©mks
Скрипт на заточку лежал до недавнего времени в подполье, но им особо там некто не пользуется (да и сам скрипт в шару был отправлен давно)
Скрипт для грации:
//Автоматизация заточки предметов до необходимого уровня by NLObP для Грации
//version 0.8 от 26.01.2009г.
program Enchant_gracia;
{************************************************* *******************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;
================================================== ==================
Работа скрипта проверялась на локальном Грация сервере
================================================== ==================
1) Необходимо затариться оружием, заточками и валерьянкой.
2) Вписать в константу Name имя своего чара.
3) Поставить количество слотов в инвентаре чара в константу maxitems.
4) Сохранить и запустить скрипт установив напротив него галочку.
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей,
степень заточки значения не имеет.
Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.
MyICQ 402988808
************************************************** ******************************}
//............................................
//Список констант
const
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
//-------------------------
maxitems=250; //количество слотов в инвентаре чара
debug=false; //если не хотим видеть отладочной информации
//............................................
//Список переменных
var
Item, scrl: integer;
ScrollID, ScrollOID: integer; //ScrollID скролла заточки
ItemID, ItemOID, ItemEnch: integer; //ItemID затачиваемого предмета
MaxEnchLvl: integer; //уровень заточки который требуется достичь
//ITEMs
BaseItems: array[1..maxitems, 1..12] of integer; //все предметы в инвентаре
StartTime, EndTime: TDateTime;
good, broken: integer;
ready: boolean;
timer, showinf : TTimer;
ItemCount, CurEnchLvl: integer;
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1, Splitter2 : TSplitter;
Stats, Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label1, Label2, Label3, Label4, Label12, Label13 : TLabel;
ComboBoxItem, ComboBoxScroll : TComboBox;
CheckBoxItem, CheckBoxScroll : TCheckBox;
ButtonStartEnchant, ButtonStopEnchant : TButton;
EditItemVal, EditScrollVal, EditScrollOID, EditItemOID, Edit1, Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);
ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);
TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.8';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень улучшения';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка улучшаемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали свиток улучшения';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Свиток';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка свиток улучшения';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP для Грации!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=500; //время задержки
ShowInf:=TTimer.Create(nil);
ShowInf.OnTimer:=@OnShowInfo;
ShowInf.enabled:=true;
ShowInf.interval:=1000; //время задержки
StartTime:=time;
good:=0;
broken:=0;
ready:=false;
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//.................................................. ............................
procedure Free; //Вызывается при выключении скрипта
begin
BaseItems:=nil; //нельзя так делать с массивом
ShowInf.Enabled:=false; ShowInf.Interval:=0; ShowInf.Free; ShowInf.OnTimer:=nil;
timer.Enabled:=false; timer.Interval:=0; timer.Free; timer.OnTimer:=nil;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//.................................................. ............................
procedure ShowInfo;
var
i: integer;
begin
stats.Lines.Clear;
stats.Lines.Add('Имя чара :'+Name);
stats.Lines.Add('Время старта :'+TimeToStr(starttime));
stats.Lines.Add('Время ловли :'+TimeToStr(time-starttime));
stats.Lines.Add('Улучшили: '+IntToStr(good));
stats.Lines.Add('Сломали: '+IntToStr(broken));
end;
//......................................
//************************************************** *************
procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
ShowInfo;
end;
//.................................................. ............................
//послать сообщение в чат
//use: SendMessage(msg);
procedure SendMessage(msg:string); //отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;
//.................................................. ............................
procedure debugMsg(msg: string);
begin
if debug then begin
sendMSG(msg);
SendMessage(msg);
end;
end;
//.................................................. ............................
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h (ItemType1)d(ObjectID)
// d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemT ype2)h(CustomType1)
// h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2 )d(AugmentationID)
// d(Mana)d(AttackAttrElement)d(AttackAttrElementVal) d(DefAttrFire)
// d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefA ttrHoly)d(DefAttrUnholy)
var
i, j, k: integer;
ListCount: integer;
begin
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
for i:=1 to maxitems do
if (i<=ListCount) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); //Count
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); //CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
BaseItems[i,11]:=ReadH(j); //CustType2
BaseItems[i,12]:=ReadD(j); //AugmentationID
//debugmsg('OID='+inttostr(BaseItems[i,2])+' ID='+inttostr(BaseItems[i,3]));
inc(j,40);
end else for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(BaseItems[i,3])]); //записываем название вещей из инвентаря
except;
//msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(BaseItems[i,3])+' в itemsid.ini');
end
end;
except;
//msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
//msg.Lines.Add(inttostr(BaseItems[i,3]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//.................................................. ............................
procedure InventoryUpdate; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, k, ListCount, UpdType : integer;
ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1,
isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer;
additem : boolean;
begin
additem:=true;
ListCount:=ReadH(2); //количество итемов
// debugmsg('ListCount='+inttostr(ListCount));
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
ItemType1:=ReadH(j);
ObjectID:=ReadD(j);
ItemID:=ReadD(j);
LocationSlot:=ReadD(j);
Count:=ReadD(j);
ItemType2:=ReadH(j);
CustomType1:=ReadH(j);
isEquipped:=ReadH(j);
BodyPart:=ReadD(j);
EnchantLevel:=ReadH(j);
CustType2:=ReadH(j);
AugmentationID:=ReadD(j);
case UpdType of
1: k:=0; //добавлен новый предмет
2: k:=ObjectID; //изменен предмет в инвентаре
3: begin //удален
for ii:=1 to maxitems do
if (BaseItems[ii,2]=ObjectID) then begin
//debugmsg('удаляем OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
for k:=1 to 12 do BaseItems[ii,k]:=0;
break;
end;
end;
end;
for ii:=1 to maxitems do begin
if (BaseItems[ii,2]=k) then begin
BaseItems[ii,1]:=ItemType1;
//BaseItems[ii,2]:=ObjectID;
BaseItems[ii,3]:=ItemID;
BaseItems[ii,4]:=LocationSlot;
BaseItems[ii,5]:=Count;
BaseItems[ii,6]:=ItemType2;
BaseItems[ii,7]:=CustomType1;
BaseItems[ii,8]:=isEquipped;
BaseItems[ii,9]:=BodyPart;
BaseItems[ii,10]:=EnchantLevel;
BaseItems[ii,11]:=CustType2;
BaseItems[ii,12]:=AugmentationID;
//debugmsg('доб/изм OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
break;
end;
end;
inc(j,38);
end;
end;
//.................................................. ............................
function GetItem(ID, FieldIn, FieldOut : integer): integer;
{GetInv(по чему будем искать, номер того по чему будем искать, номер того что надо найти)
где:
ID - искомый код;
FieldIn - по какому полю ищем;
FieldOut - какое поле возвращаем;
1=ItemType1; 2=ObjectID;3=ItemID;4=LocationSlot;5=Count;6=ItemT ype2;7=CustomType1;
8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustTyp e2;12=AugmentationID;
ex1: GetInv(6408,2,1) - вернет ObjectID свадебного платья, если онное лежит в
инвентаре, иначе вернет -1
ex2: GetInv(6408,2,8) - вернет уровень заточки первого попавшегося в инвентаре
свадебного платья, если свадебного платья нет, то вернет -1
}
var
i: integer;
begin
for i:=1 to maxitems do
if (BaseItems[i,FieldIn]=ID) then begin
Result:=BaseItems[i,FieldOut];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
Result:=-1;
end;
//.................................................. ............................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItemEnchant(item,lvl:integer) : integer;
var
i : integer;
begin
//ничего не нашли
result:=0;
for i:=1 to maxitems do
if (BaseItems[i,3]=item) and (BaseItems[i,10]=lvl) then begin
ItemEnch:=BaseItems[i,10];
Result:=BaseItems[i,2];
//debugmsg('Нашли='+inttostr(result));
exit;
end;
// Result:=-1;
end;
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to maxitems do begin
if (BaseItems[i,3]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+BaseItems[i,5]; //count
//inc(result);
end;
end;
end;
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$5F;
WriteD(ObjectID);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (strtoint(Edit2.text)>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Предметов для улучшения должно быть больше двух! Прервано!');
timer.enabled:=false;
exit;
end;
if ready then exit;
ScrollOID:=GetItem(ScrollID,3,2);//найдем OID скролла
if ScrollOID=-1 then begin
msg.Lines.Add('Кончились свитки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали свиток ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
#$11: begin
//debugmsg('S>C Пакет ItemListPacket #$11');
ItemList;
end;
//......................................
#$21: begin
//debugmsg('S>C Пакет InventoryUpdate #$21');
InventoryUpdate;
end;
//......................................
//Пакет ChooseInventory
#$7C: begin
if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
msg.Lines.Add('Достигли MaxEnchLvl!');
timer.enabled:=false;
ready:=false;
delay(500);
RequestEnchantItem(-1);
exit;
end else begin
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true;
end;
end;
end;
#$87: begin
if readd(2)=0 then begin
msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(good);
end else begin
msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
inc(broken);
end;
// CurEnchLvl:=0; //начнем с начала. Расскоментировать для блессет скроллов
end;
end;
end.
Для Интерлюд и С4:
[Ссылки могут видеть только зарегистрированные и активированные пользователи] [Пасс: Zhyk.ru]
Применение: Вставте в l2phx во вкладку скрипты не забудьте поменять ник(NLObP) в скрипте на свой.
Автор скриптов: NLObP
Автор я mks помог
для ХБ проверен
// подмена титула игрока на Class игрока
var
ClassID, i: Integer;
Name, Class,part1,part2,Title: String;
procedure Init;
begin
end;
procedure Free;
begin
end;
procedure OnConnect(WithClient: Boolean);
begin
end;
procedure OnDisonnect(WithClient: Boolean);
begin
end;
begin
if FromServer and (pck[1]=#$31) then
begin
i:=22;
Name:=ReadS(i);
i:=i+8;
ClassID:=ReadD(i);
i:=i+260;
part1:= copy(pck,1,i-1); //копируем пакет до титла в буфеr
Title:=ReadS(i);
case ClassID of
0:class:='H_Fighter';
1:class:='H_Warrior';
2:class:='H_Gladiator';
88:class:='H_Duelist';
3:class:='H_Warlord';
89:class:='H_Dreadnought';
4:class:='H_Knight';
5:class:='H_Paladin';
90:class:='H_PhoenixKnight';
6:class:='H_DarkAvenger';
91:class:='H_HellKnight';
7:class:='H_Rogue';
8:class:='H_TreasureHunter';
93:class:='H_Adventurer';
9:class:='H_Hawkeye';
92:class:='H_Sagittarius';
10:class:='H_Mage';
11:class:='H_Wizard';
12:class:='H_Sorceror';
94:class:='H_Archmage';
13:class:='H_Necromancer';
95:class:='H_Soultaker';
14:class:='H_Warlock';
96:class:='H_ArcanaLord';
15:class:='H_Cleric';
16:class:='H_Bishop';
97:class:='H_Cardinal';
17:class:='H_Prophet';
98:class:='H_Hierophant';
18:class:='E_Fighter';
19:class:='E_Knight';
20:class:='E_TempleKnight';
99:class:='E_EvaTemplar';
21:class:='E_SwordSinger';
22:class:='E_Scout';
23:class:='E_PlainsWalker';
101:class:='E_WindRider';
24:class:='E_SilverRanger';
102:class:='E_MoonlightSentinel';
25:class:='E_Mage';
26:class:='E_Wizard';
27:class:='E_SpellSinger';
103:class:='E_MysticMuse';
28:class:='E_ElementalSummoner';
104:class:='E_ElementalMaster';
29:class:='E_Oracle';
30:class:='E_Elder';
105:class:='E_EvaSaint';
31:class:='DE_Fighter';
32:class:='DE_PaulusKnight';
33:class:='DE_ShillienKnight';
106:class:='DE_ShillienTemplar';
34:class:='DE_BladeDancer';
107:class:='DE_SpectralDancer';
35:class:='DE_Assassin';
36:class:='DE_AbyssWalker';
108:class:='DE_GhostHunter';
37:class:='DE_PhantomRanger';
109:class:='DE_GhostSentinel';
38:class:='DE_Mage';
39:class:='DE_DarkWizard';
40:class:='DE_Spellhowler';
110:class:='DE_StormScreamer';
41:class:='DE_PhantomSummoner';
111:class:='DE_SpectralMaster';
42:class:='DE_ShillienOracle';
43:class:='DE_ShillienElder';
112:class:='DE_ShillienSaint';
44:class:='O_Fighter';
45:class:='O_Raider';
46:class:='O_Destroyer';
113:class:='O_Titan';
47:class:='O_Monk';
48:class:='O_Tyrant';
114:class:='O_GrandKhauatari';
49:class:='O_Mage';
50:class:='O_Shaman';
51:class:='O_Overlord';
115:class:='O_Dominator';
52:class:='O_Warcryer';
116:class:='O_Doomcryer';
53:class:='D_Fighter';
54:class:='D_Scavenger';
55:class:='D_BountyHunter';
117:class:='D_FortuneSeeker';
56:class:='D_Artisan';
57:class:='D_Warsmith';
118:class:='D_Maestro';
123:class:='Kamael Soldier M';
124:class:='Kamael Soldier F';
125:class:='Trooper';
126:class:='Warder';
127:class:='Berserker';
128:class:='Male Soulbreaker';
129:class:='Female Souldbreaker';
130:class:='Arbalester';
131:class:='Doombringer';
132:class:='Male Soulhound';
133:class:='Female Soulhound';
134:class:='Trickster';
135:class:='Inspector';
136:class:='Judicator';
end;
part2:=Copy(pck,i,length(pck)-i);
buf:=part1;
WriteS(''+class+'');
buf:=buf+part2;
pck:=buf;
end;
end.
Автоматизация старого дюпа ц4 [Ссылки могут видеть только зарегистрированные и активированные пользователи] видео не моё
1.поставить чара на продажу стопковых итомов,по 1 адене и включить скрипт на этого чара
2.покупить 1 итом,удалить
3.грац вы дюпнули
4.когда 3 раза дюпнули,делаем рестарт чаром,которым покупаем
*Lagam.net работало 2-3 месеца назад
//копирование запрещено 4it-master ^^
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.
Скрипт на телепортацию 1.Выделяем себя 2.пишем .XXX где XXX город или место(подробней в скрипте) 3.после тп юзаем любой скилл (Dush, Shield...)
Данный скрипт для интерлюда! (там где кривая геодата)
Пробовал скрипт только на l2phx.3.5.13.122. ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
//Включить скрипт
//Взять себя в таргет
//ну и тп куда хочешь
//После того как тпшнулся нужна сделать какойто скилл..потому что ты для сервера еще на старом месте.
{Команды скрипта}
//******************===Квест на Валакаса===********************************
//.klein-телепорт к klein
//.hilda-телепорт к hilda
//.kgb-телепорт на поле для Vaculite Ore
//******************===Квест на Антараса===********************************
//.gabrielle-телепорт к Gabrielle
//.kaiena-телепорт к Kaiena
//.marsh-Поляна для дропа (Marsh Drake,Marsh Gargoyle)
//.chakiris-телепорт к Chakiris
//.hamrut-телепорт к Hamrut и Kranrot
//.orven-телпорт к Orven
//.bloody-телепорт к Blood Queen(Seal of Shilen)
//.kendra-телепорт к Kendra
//.harit-телепорт к Harit Lizardman (Matriarch & Shaman)
//.helton-телепорт к Helton
//.jewel2-телепорт к Abyss Jewel 2
//.moke-телепорт к Moke
//.jewel1-телепорт к Abyss Jewel 1
//.gilmore-телепорт к Gilmore
//.theodric-телепорт к Theodric тамже Cave Maiden и Cave Keeper
//******************===Квест на Баюма===********************************
//.hanellin-телепорт к Hanellin
//.lesser giant-телепорт к lesser giant
//.claudia-телепорт к Claudia Athebalt
//.martien-телепорт к Martien
//.harne-телепорт к Harne
//.sunduk1-телепорт к Holy Ark of Secrecy2 (Cemetry)
//.sunduk2-телепорт к Holy Ark of Secrecy3 (Tanor Canyon)
//.ark guard-телепорт к Ark Guard's Corspe (Сначало с ним говорим потом с сундуком)
//.sunduk3-телепорт к Holy Ark of Secrecy1 (Dark Forest)
//.healing-телепорт к Grocery Продавца (Healing Potion & Antidote)
//.treapka-телепорт к мобам (Platinum Tribe Shaman & Overlord)
//******************===ГОРОДА===******************** ************
//.gludio - телепорт в глудио
//.goddard - телепорт в годдард
//.aden - телепорт в аден
//.giran - телепорт в гиран
//.rune - телепорт в Руну
//.oren - телепорт в орен
//.heine - телепорт в Хейн
//.dion - телепорт в дион
//.schuttgart - телепорт в шутгарт
//.gludin - телепорт в глудин
//******************===ЗАМКИ===********************* ************
//.adencastle - Aden Замок (ТРОН)
//.runecastle - Rune Замок (ТРОН)
//.goddardcastle - Goddard Замок (ТРОН)
//.girancastle - Giran Замок (ТРОН)
//.orencastle - Oren Замок (ТРОН)
//.gludiocastle - Gludio Замок (ТРОН)
//.dioncastle - Dion Замок (ТРОН)
//.schuttgartcastle - Шутгарт Замок (ТРОН)
//.innadrilcastle - Innadril Замок (ТРОН)
//******************===ЛОКАЦИИ===******************* ************
//.dino - телепорт на дино остров
//.vos - телепорт в Valey OF Saints
//.varka - телепорт в Varka
//.mos - телепорт в Monastery Of Silence
//.ketra - телепорт в Ketra Ork
//*****************===РЭЙД БОССЫ===*****************************
//.aq - телепорт к Ант Квин
//.zaken - телепорт к Закену
//.baium - телепорт к Баюму
//.antharas - телепорт к Антарасу
//.valakas - телепорт к Валакасу
//.frintezza - телепорт к Фринтеза
//*****************===ДРУГИЕ МЕСТА===*****************************
//.olympiad - телепорт на арену
//.jail - телепорт в тюрьму
//.adencrest - телепорт на верхушку креста адена
//.vodopad - телепорт на водопад
//.coliseum - телепорт в колизей
//.farm-телепорт в Фарм Зону(Lineage2.gh-nt.ru)
//*****************===Noblesse Quest===*****************************
//.talien - Телепорт к Talien
//.gabrielle - Телепорт к Gabrielle
//.gilmore - Телепорт к Gilmore
//.baraham - Телепорт к Baraham
//.melodymaestro - Телепорт к MelodyMaestro
//.marluk - Телепорт в локацию (Marluk Succubus)
//.stedmiel - Телепорт к Stedmiel
//.virgil - Телепорт к Virgil ( Kasandra прямо рядом с ним)
//.rahorakti - Телепорт к Rahorakti
//.splinterstakato - Телепорт в локацию Crimson Moss
//.caradine - Телепорт к Caradine
//.noel - Телепорт к Noel
//.mdk - Телепорт к Mysterious Dark Knight
//.kalis - Телепорт к Kalis
//.matild - Телепорт к Matild
//.unicorn - Телепорт к Unicorn
//.jp Телепорт в локацию Judge & Pilgrim (ring and neklasse)
//.noblrb - телепорт к Ноблесс Рэйд Боссу
//.ladd - телепорт в Ivory Tower(К магистру Ladd)
const
//======================================
Name='UniSoul'; //**<-----Ник Персонажа-=
//======================================
var
// переменная
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
Begin
If fromclient and (pck=#$38#$2E#$00#$6F#$00#$6C#$00#$79#$00#$6D#$00# $70#$00#$69#$00#$61#$00#$64#$00#$00#$00#$00#$00#$0 0#$00) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ #$F0#$29#$FE#$FF#$C9#$90#$FC#$FF#$02#$F3#$FF#$FF;
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ #$8E#$CE#$FF#$FF#$99#$DF#$01#$00#$D9#$F3#$FF#$FF;
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('CE 41 02 00 0E 28 FF FF 57 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3B 02 00 B0 64 00 00 23 F8 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 43 01 00 9E 44 02 00 74 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('2A AB 00 00 7E 45 FF FF E7 FC FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('11 28 00 00 12 40 FF FF ED FE FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 3F 02 00 2C 12 00 00 B1 FE FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('04 40 02 00 6E 43 FF FF 21 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1B C7 01 00 C7 36 02 00 02 F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 42 01 00 45 91 00 00 13 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('40 B9 FF FF 65 AB 01 00 45 F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A 56 00 00 60 72 02 00 83 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E0 2E 01 00 31 A9 FD FF 80 FE FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('39 C5 01 00 09 CD 03 00 F2 FC FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 61 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E2 40 FE FF ED 30 FC FF 5B F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('91 41 01 00 63 D7 00 00 0C FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0B B2 01 00 89 57 03 00 2A F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3C 49 00 00 1D 38 02 00 C9 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3E 55 01 00 62 D5 FD FF C8 FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 BB FE FF 07 4D 02 00 C8 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6E 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E4 28 00 00 07 A0 FF FF C3 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 72 00 65 00 73 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FF 41 02 00 A5 0F 00 00 FC 11 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 64 00 6F 00 70 00 61 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('12 A9 02 00 93 62 01 00 33 07 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D6 18 01 00 39 96 FE FF 74 FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('59 EA 01 00 18 60 FF FF 79 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9D 9F 01 00 0E A9 FE FF 9D F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 3E 02 00 C4 F8 FE FF B9 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6F 00 6C 00 69 00 73 00 65 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('46 4A 02 00 8D B6 00 00 B1 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 71 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('96 AB FF FF 5A C5 02 00 9F E9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('10 D8 00 00 20 58 03 00 6E F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 69 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0D C2 01 00 EF 40 00 00 65 27 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6E 00 74 00 68 00 61 00 72 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C D5 02 00 7A BE 01 00 E8 DF FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 61 00 6B 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('88 43 03 00 14 3D FE FF 99 F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 72 00 69 00 6E 00 74 00 65 00 7A 00 7A 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9E A8 02 00 44 A2 FE FF BD EB FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 61 00 6C 00 69 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 41 02 00 FA 66 00 00 A4 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 61 00 62 00 72 00 69 00 65 00 6C 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3D 01 00 CF 48 02 00 74 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 6C 00 6D 00 6F 00 72 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 1D 01 00 DD CE 01 00 92 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 72 00 61 00 68 00 61 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 53 00 00 70 D0 02 00 F5 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 65 00 6C 00 6F 00 64 00 79 00 6D 00 61 00 65 00 73 00 74 00 72 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DC A1 01 00 8D 4F 03 00 F5 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 6C 00 75 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F5 D1 01 00 DD C7 01 00 63 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 74 00 65 00 64 00 6D 00 69 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('44 D4 01 00 D4 2D 01 00 3D F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 69 00 72 00 67 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 80 00 00 9D 43 FF FF F5 06 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 61 00 68 00 6F 00 72 00 61 00 6B 00 74 00 69 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B6 95 00 00 91 3F FF FF 98 FB FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 70 00 6C 00 69 00 6E 00 74 00 65 00 72 00 73 00 74 00 61 00 6B 00 61 00 74 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('BD 24 01 00 AD 4A FF FF 63 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 61 00 72 00 61 00 64 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7F 4A 02 00 D6 1D FF FF 5C F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('20 3C 02 00 45 1A FF FF 64 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 64 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('03 7B 01 00 F1 14 FF FF 5C F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 61 00 6C 00 69 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('63 74 01 00 AE 56 00 00 C0 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 74 00 69 00 6C 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D4 10 01 00 AF 46 00 00 B4 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 75 00 6E 00 69 00 63 00 6F 00 72 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7D 4F 01 00 0E D5 FE FF 6E F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 70 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B0 47 01 00 10 C7 FE FF 4A F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 62 00 6C 00 72 00 62 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('62 65 01 00 52 AF FE FF 66 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 61 00 64 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1D 4C 01 00 89 3E 00 00 0E F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 61 00 72 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('8B 45 01 00 C2 EB 03 00 9C D3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 6C 00 65 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('5F CD 02 00 10 3F FE FF F6 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 69 00 6C 00 64 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E8 3B 02 00 AD 1A FF FF 62 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 62 00 67 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('65 4C 02 00 B3 0C FF FF C5 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 6E 00 65 00 6C 00 6C 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D3 32 02 00 17 5C 00 00 B7 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 65 00 73 00 73 00 65 00 72 00 20 00 67 00 69 00 61 00 6E 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('75 E0 02 00 48 F5 00 00 D2 E3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6C 00 61 00 75 00 64 00 69 00 61 00 00 00 00 00 00 00 ')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E3 44 02 00 D1 41 00 00 E6 F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 75 00 6E 00 64 00 75 00 6B 00 31 00 00 00 00 00 00 00 ')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C8 C4 02 00 E3 1B 00 00 58 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 74 00 69 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0B 49 01 00 82 31 02 00 B2 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 75 00 6E 00 64 00 75 00 6B 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F3 C5 00 00 DC 6B 02 00 72 01 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 72 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6B 28 00 00 5D 38 00 00 6D EF FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 72 00 6B 00 20 00 67 00 75 00 61 00 72 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('77 0B 00 00 4C AC 00 00 5C F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 75 00 6E 00 64 00 75 00 6B 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7F FE FF FF 9F AC 00 00 26 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 61 00 6C 00 69 00 6E 00 67 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('8E 3A 02 00 6C 6D 00 00 30 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 72 00 65 00 61 00 70 00 6B 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('8E 3A 02 00 6C 6D 00 00 30 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 61 00 69 00 65 00 6E 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('62 4D 01 00 D6 40 00 00 0D F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 73 00 68 00 00 00 00 00 00 00 ')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6A 9C 02 00 B0 A6 00 00 E1 EC FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 68 00 61 00 6B 00 69 00 72 00 69 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F5 D4 01 00 5F 24 01 00 B9 F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 6D 00 72 00 75 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('78 C4 02 00 F1 E2 00 00 73 F0 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FF 3F 02 00 4B 58 00 00 37 F8 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 6F 00 6F 00 64 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('17 D7 02 00 67 4B 00 00 DF F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 6E 00 64 00 72 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E6 46 02 00 0F 64 00 00 B4 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 72 00 69 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B7 60 02 00 71 2F 01 00 82 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 6C 00 74 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DF 46 01 00 3C D9 00 00 17 FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 65 00 77 00 65 00 6C 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('72 F8 00 00 65 79 00 00 5D F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 6B 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('07 C0 FE FF 9F 57 02 00 99 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 65 00 77 00 65 00 6C 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A3 C2 FE FF 4C 27 01 00 D6 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 68 00 65 00 6F 00 64 00 72 00 69 00 63 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6E 00 02 00 CF BF 01 00 72 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
end;
end.
Program ItemPainter C4, C6:z:
Program ItemPainter;
//------------------------------------------------------------------
//Скрипт для рисования предметами пока только для с4 и интерлюдии
//В Name ввдите ник
//Нарисуйте картинку в любом графическом редакторе.
//В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
//Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
//Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
//scale - масштаб отступа между предметами от 1:1 до 10:1
//Самый оптимальный масштаб 5:1
//Направление - согласно компасу в игре
const
Name='Perforator';
interlude=true;
max=80;
MaxDistance=240; //Максимальное расстояние на которое можно выбросить предмет
var
bmp:TBitMap; //Картинка
ItemBase: array[1..3,1..max] of integer; //Массив предметов заполняется процедурой CreateItemBase
SelectedItems: array[1..3,1..5] of integer; //Массив Object ID предметов [i,j] i=1 - OID,2-ID,3 - Count; j - # цвета
currentx,currenty,StartX,StartY,StartZ,MyX,MyY,MyZ ,NextX,NextY,ItemOID:integer;
//Теущие координаты x и y;координаты начала отчета x,y,z; Мои координаты x y обнавляются при Validate Position
ready:boolean;
timer : TTimer;
FormMain:TForm;
Stats : TMemo;
Panel1 : TPanel;
GroupBox1,GroupBox2 : TGroupBox;
ComboBoxColor,ComboBoxScale,ComboboxItem,ComboBoxD irection:TComboBox;
Label1,Label2,Label3,Label4:TLabel;
Path:TEdit;
LoadedImage:TImage;
LoadButton,StartButton,StopButton:TButton;
ItemsName,StringList:TStringList;
//......................................
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
var i,count,index:integer;
begin
count:=0;
if SelectedItems[2,ComboBoxColor.ItemIndex+1]=ItemBase[2,ComboBoxItem.ItemIndex+1] then exit;
for i:=1 to 5 do if SelectedItems[2,i]=ItemBase[2,ComboBoxItem.ItemIndex+1] then inc(count);
if Count>0 then begin
stats.lines.add('Ошибка! Нельзя добавлять одинаковые предметы в разные цвета.');
exit;
end;
SelectedItems[1,ComboBoxColor.ItemIndex+1]:=ItemBase[1,ComboBoxItem.ItemIndex+1];
SelectedItems[2,ComboBoxColor.ItemIndex+1]:=ItemBase[2,ComboBoxItem.ItemIndex+1];
SelectedItems[3,ComboBoxColor.ItemIndex+1]:=ItemBase[3,ComboBoxItem.ItemIndex+1];
index:=ComboBoxItem.ItemIndex;
for i:=0 to StringList.Count-1 do if Pos(' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex],ComboBoxItem.Items.Strings[i])>0 then
ComboBoxItem.Items.Strings[i]:=StringList.Strings[i];
ComboBoxItem.Items.Strings[index]:=ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]+' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex];
ComboBoxItem.ItemIndex:=index;
end;
//----------------------------------------
procedure StartButton_Click(Sender: TButton);
//Event : OnClick
begin
if bmp=NIL then stats.lines.add('Картинка не загружена!') else
begin
stats.lines.add('Старт!');
StartButton.enabled:=false;
currentx:=-1;
currenty:=0;
buf:=#$AA;
WriteD(0);
SendToServerEx(Name);
end;
end;
//......................................
//ButtonStopEnchant
procedure StopButton_Click(Sender: TButton);
//Event : OnClick
begin
StartButton.enabled:=true;
stats.lines.add('Стоп!');
timer.enabled:=false;
ready:=false;
end;
procedure bmpload;
begin
bmpfree;
bmp:=TBitMap.Create;
try
bmp.LoadFromFile(path.text);
except
bmp.Free;
stats.lines.add('Ошибка загрузки файла!');
exit;
end;
stats.lines.add('Картинка успешно загружена!');
LoadedImage.Picture.assign(bmp);
end;
procedure LoadButton_Click(Sender: TButton);
var openDialog : TOpenDialog;
begin
openDialog := TOpenDialog.Create(NIL);
openDialog.Filter := 'Bitmap files|*.bmp';
openDialog.FilterIndex := 1;
openDialog.DefaultExt:='bmp';
openDialog.Options:=ofNoChangeDir+ofFileMustExist+ ofPathMustExist;
if openDialog.Execute then path.text:=openDialog.FileName else begin
openDialog.Free;
exit;
end;
openDialog.Free;
bmpload;
end;
procedure Path_key(Sender: TEdit; Key: Char);
begin
if ord(key)=13 then begin
bmpload;
end;
end;
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);
TRY
//------------------------
//Свойства формы
Result.Caption := 'Item Painter v 0.2 by ArchDevil';
Result.Left := 397;
Result.Top := 233;
Result.Width := 350;
Result.Height := 230;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 0;
Stats.Top := 160;
Stats.Width := 350;
Stats.Height := 70;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alBottom;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 350;
Panel1.Height := 160;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 1;
GroupBox1.Width := 160;
GroupBox1.Height := 160;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Рисунок';
GroupBox1.Align := alLeft;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 180;
GroupBox2.Height := 160;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alLeft;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//ComboBoxColor
ComboBoxColor := TComboBox.Create(Result);
ComboBoxColor.Parent := GroupBox2;
ComboBoxColor.Left := 38;
ComboBoxColor.Top := 19;
ComboBoxColor.Width := 70;
ComboBoxColor.Height := 21;
ComboBoxColor.Visible := TRUE;
ComboBoxColor.Tag := 0;
ComboBoxColor.Enabled := TRUE;
ComboBoxColor.Hint := 'Выбери из списка цвет соответствующий предмету ниже';
ComboBoxColor.ShowHint := TRUE;
ComboBoxColor.Text := 'ComboBoxColor';
ComboBoxColor.Font.Name := 'Tahoma';
ComboBoxColor.Font.Size := 8;
ComboBoxColor.Font.Color := clWindowText;
ComboBoxColor.Color := clWindow;
ComboBoxColor.TabOrder := 1;
ComboBoxColor.TabStop := TRUE;
ComboBoxColor.Sorted := FALSE;
ComboBoxColor.ItemHeight := 13;
ComboBoxColor.Items.ADD('Черный');
ComboBoxColor.Items.ADD('Красный');
ComboBoxColor.Items.ADD('Зеленый');
ComboBoxColor.Items.ADD('Синий');
ComboBoxColor.Items.ADD('Желтый');
ComboBoxColor.ItemIndex := 0;
//......................................
//......................................
//ComboBoxScale
ComboBoxScale := TComboBox.Create(Result);
ComboBoxScale.Parent := GroupBox2;
ComboBoxScale.Left := 128;
ComboBoxScale.Top := 19;
ComboBoxScale.Width := 45;
ComboBoxScale.Height := 21;
ComboBoxScale.Visible := TRUE;
ComboBoxScale.Tag := 0;
ComboBoxScale.Enabled := TRUE;
ComboBoxScale.Hint := 'Выбери из списка масштаб';
ComboBoxScale.ShowHint := TRUE;
ComboBoxScale.Text := 'ComboBoxScale';
ComboBoxScale.Font.Name := 'Tahoma';
ComboBoxScale.Font.Size := 8;
ComboBoxScale.Font.Color := clWindowText;
ComboBoxScale.Color := clWindow;
ComboBoxScale.TabOrder := 1;
ComboBoxScale.TabStop := TRUE;
ComboBoxScale.Sorted := FALSE;
ComboBoxScale.ItemHeight := 13;
ComboBoxScale.Items.ADD('1:1');
ComboBoxScale.Items.ADD('2:1');
ComboBoxScale.Items.ADD('3:1');
ComboBoxScale.Items.ADD('4:1');
ComboBoxScale.Items.ADD('5:1');
ComboBoxScale.Items.ADD('6:1');
ComboBoxScale.Items.ADD('7:1');
ComboBoxScale.Items.ADD('8:1');
ComboBoxScale.Items.ADD('9:1');
ComboBoxScale.Items.ADD('10:1');
ComboBoxScale.ItemIndex := 4;
//......................................
//......................................
//ComboBoxDirection
ComboBoxDirection := TComboBox.Create(Result);
ComboBoxDirection.Parent := GroupBox2;
ComboBoxDirection.Left := 38;
ComboBoxDirection.Top := 67;
ComboBoxDirection.Width := 135;
ComboBoxDirection.Height := 21;
ComboBoxDirection.Visible := TRUE;
ComboBoxDirection.Tag := 0;
ComboBoxDirection.Enabled := TRUE;
ComboBoxDirection.Text := 'ComboBoxDirection';
ComboBoxDirection.Font.Name := 'Tahoma';
ComboBoxDirection.Font.Size := 8;
ComboBoxDirection.Font.Color := clWindowText;
ComboBoxDirection.Color := clWindow;
ComboBoxDirection.TabOrder := 1;
ComboBoxDirection.TabStop := TRUE;
ComboBoxDirection.Sorted := FALSE;
ComboBoxDirection.ItemHeight := 13;
ComboBoxDirection.Items.ADD('Север');
ComboBoxDirection.Items.ADD('Северо-Восток');
ComboBoxDirection.Items.ADD('Восток');
ComboBoxDirection.Items.ADD('Юго-Восток');
ComboBoxDirection.Items.ADD('Юг');
ComboBoxDirection.Items.ADD('Юго-Запад');
ComboBoxDirection.Items.ADD('Запад');
ComboBoxDirection.Items.ADD('Северо-Запад');
ComboBoxDirection.ItemIndex := 0;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 38;
ComboBoxItem.Top := 43;
ComboBoxItem.Width := 135;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 6;
Label1.Top := 23;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Цвет:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 6;
Label2.Top := 47;
Label2.Width := 58;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'Итем:';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 114;
Label3.Top := 23;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'М:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 6;
Label4.Top := 71;
Label4.Width := 58;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'Напр.:';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Path
Path := TEdit.Create(Result);
Path.Parent := GroupBox1;
Path.Left := 5;
Path.Top := 103;
Path.Width := 117;
Path.Height := 20;
Path.Visible := TRUE;
Path.Tag := 0;
Path.Enabled := TRUE;
Path.Hint := 'Введи путь к файлу BMP';
Path.ShowHint := TRUE;
Path.Text := '';
Path.Font.Name := 'Tahoma';
Path.Font.Size := 7;
Path.Font.Color := clWindowText;
Path.Color := clWindow;
Path.TabOrder := 5;
Path.TabStop := TRUE;
Path.ReadOnly := FALSE;
Path.MaxLength := 0;
Path.AutoSize := TRUE;
Path.OnKeyPress := @Path_Key;
//......................................
//......................................
//LoadImage
LoadedImage:= TImage.Create(Result);
LoadedImage.Parent:=GroupBox1;
LoadedImage.Left :=5;
LoadedImage.Top := 16;
LoadedImage.Width := 150;
LoadedImage.Height := 90;
LoadedImage.Visible := TRUE;
LoadedImage.Tag := 0;
LoadedImage.Enabled := TRUE;
LoadedImage.Hint := '';
LoadedImage.ShowHint := FALSE;
LoadedImage.Center := TRUE;
LoadedImage.Proportional := TRUE;
//......................................
//......................................
//LoadButton
LoadButton := TButton.Create(Result);
LoadButton.Parent := GroupBox1;
LoadButton.Left := 124;
LoadButton.Top := 102;
LoadButton.Width := 32;
LoadButton.Height := 21;
LoadButton.Visible := TRUE;
LoadButton.Tag := 0;
LoadButton.Enabled := TRUE;
LoadButton.Hint := '';
LoadButton.ShowHint := FALSE;
LoadButton.Caption := '...';
LoadButton.Font.Name := 'Tahoma';
LoadButton.Font.Size := 8;
LoadButton.Font.Color := clWindowText;
LoadButton.Font.CharSet := 1;
LoadButton.TabOrder := 2;
LoadButton.TabStop := TRUE;
LoadButton.Cancel := FALSE;
LoadButton.ModalResult := 0;
LoadButton.OnClick := @LoadButton_Click;
//......................................
//......................................
//StartButton
StartButton := TButton.Create(Result);
StartButton.Parent := GroupBox2;
StartButton.Left := 6;
StartButton.Top := 102;
StartButton.Width := 80;
StartButton.Height := 21;
StartButton.Visible := TRUE;
StartButton.Tag := 0;
StartButton.Enabled := TRUE;
StartButton.Hint := '';
StartButton.ShowHint := FALSE;
StartButton.Caption := 'Старт';
StartButton.Font.Name := 'Tahoma';
StartButton.Font.Size := 8;
StartButton.Font.Color := clWindowText;
StartButton.Font.CharSet := 1;
StartButton.TabOrder := 2;
StartButton.TabStop := TRUE;
StartButton.Cancel := FALSE;
StartButton.ModalResult := 0;
StartButton.OnClick := @StartButton_Click;
//......................................
//......................................
//StopButton
StopButton := TButton.Create(Result);
StopButton.Parent := GroupBox2;
StopButton.Left := 96;
StopButton.Top := 102;
StopButton.Width := 80;
StopButton.Height := 21;
StopButton.Visible := TRUE;
StopButton.Tag := 0;
StopButton.Enabled := TRUE;
StopButton.Hint := '';
StopButton.ShowHint := FALSE;
StopButton.Caption := 'Стоп';
StopButton.Font.Name := 'Tahoma';
StopButton.Font.Size := 8;
StopButton.Font.Color := clWindowText;
StopButton.Font.CharSet := 1;
StopButton.TabOrder := 3;
StopButton.TabStop := TRUE;
StopButton.Cancel := FALSE;
StopButton.ModalResult := 0;
StopButton.OnClick := @StopButton_Click;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
procedure Init; //Вызывается при включении скрипта
begin
FormMain:=Create_FormMain;
stats.Lines.Add('Скрипт: Рисование предметами by ArchDevil!');
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=700; //время задержки
ready:=false;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
stats.Lines.Add('itemsid.ini не найден!');
exit;
end;
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure bmpfree;
begin
try
if bmp<>NIL then
begin
bmp.Free;
bmp:=NIL;
end;
finally
end;
end;
procedure Free;
var i:integer;
begin
Free_FormMain; bmpfree;
StringList.Clear; ItemsName.Clear;
timer.Free;
if LoadedImage<>NIL then LoadedImage:=NIL;
currentx:=0; currenty:=0; StartX:=0; StartY:=0;
StartZ:=0; MyX:=0; MyY:=0; ItemOID:=0;
ready:=false;
for i:=1 to 5 do begin
SelectedItems[1,i]:=0;
SelectedItems[2,i]:=0;
SelectedItems[3,i]:=0;
end;
end;
//CreateItemBase и InventoryUpdate Взял со скрипта NLObP на заточку
//---------------------------------------------
procedure CreateItemBase;
var
i, j, ListCount : integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
ItemBase[1,i]:=ReadD(j);
ItemBase[2,i]:=ReadD(j);
ItemBase[3,i]:=ReadD(j);
if interlude then inc(j,24) else inc(j,16);
end;
StringList.Clear;
try
for i:=1 to ListCount do begin
try
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
end
end;
except;
exit;
end;
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType: integer;
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); //кол-во
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;
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;
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;
end;
end;
end;
end;
if interlude then inc(j,22) else inc(j,14);
end;
end;
//------------------------------------
function GetCount(OID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
result:=ItemBase[3,i]; // count
exit;
end;
end;
result:=0;
end;
//--------------------------------------------
function delta(x1, y1, x2, y2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
dx:=x2-x1;
dy:=y2-y1;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
end;
//--------------------------------------------
procedure OnTimer(Sender: TObject);
//====================
procedure GetNextCoords;
begin
case ComboBoxDirection.ItemIndex of
0: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) ;
end;
1: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) +currentx*(ComboBoxScale.ItemIndex+1);
end;
2: begin
NextX:=StartX-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currentx*(ComboBoxScale.ItemIndex+1) ;
end;
3: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)+currentx*(Com boBoxScale.ItemIndex+1);
end;
4: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1);
end;
5: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)+currenty*(Com boBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
6: begin
NextX:=StartX+currenty*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY-currentx*(ComboBoxScale.ItemIndex+1);
end;
7: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) +currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
end;
end;
//====================
begin
ItemOID:=0;
repeat
if currentx=bmp.width-1 then
begin
inc(currenty);
currentx:=0;
end else inc(currentx);
if currenty=bmp.height then
begin
timer.enabled:=false;
stats.lines.add('Остановлено! Рисунок нарисован!');
StartButton.enabled:=true;
exit;
end;
case bmp.Canvas.pixels[currentx,currenty] of //матрица пикселей
clBlack: if (SelectedItems[1,1]>0) and (GetCount(SelectedItems[1,1])>0) then ItemOID:=SelectedItems[1,1];
clRed: if (SelectedItems[1,2]>0) and (GetCount(SelectedItems[1,2])>0) then ItemOID:=SelectedItems[1,2];
clGreen: if (SelectedItems[1,3]>0) and (GetCount(SelectedItems[1,3])>0) then ItemOID:=SelectedItems[1,3];
clBlue: if (SelectedItems[1,4]>0) and (GetCount(SelectedItems[1,4])>0) then ItemOID:=SelectedItems[1,4];
clYellow:if (SelectedItems[1,5]>0) and (GetCount(SelectedItems[1,5])>0) then ItemOID:=SelectedItems[1,5];
end;
until ItemOID<>0;
if ItemOID=0 then exit;
stats.lines.add('Текущий элемент матрицы: x='+inttostr(currentx)+', y='+inttostr(currenty)+'.');
GetNextCoords;
if delta(MyX,MyY,NextX,NextY)>MaxDistance then begin //расстояние между точками
buf:=#$01;
WriteD(NextX);
writeD(NextY);
WriteD(MyZ);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteD(1);
SendToServerEx(Name);
timer.enabled:=false; //Отключаем на время передвижения
ready:=true;
exit;
end;
buf:=#$12;
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
end;
//--------------------------------------------
begin
if FromClient and (ConnectName=Name) then
case pck[1] of
#$48: begin
MyX:=ReadD(2); // постоянно считываем координаты чара
MyY:=ReadD(6);
if ready and (delta(Myx,Myy,NextX,NextY)<MaxDistance/2) then begin //Меньше 100 можно включать таймер
buf:=#$12; //Выкидываем предмет который не выкинули когда дельта привышала 240
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
ready:=false;
timer.enabled:=true;
end;
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
#$64: if (StartButton.enabled=false) and (timer.enabled=false) and (ReadD(6)=3) then
begin
StartX:=ReadD(14); //Считываются только 1 раз
StartY:=ReadD(22);
StartZ:=ReadD(30);
MyX:=StartX;
MyY:=StartY;
MyZ:=StartZ;
timer.enabled:=true;//Вот теперь включаем таймер
end;
end;
end.
ItemPainter для Gracia Part2
Program ItemPainter;
//------------------------------------------------------------------
//Скрипт для рисования предметами для Gracia part 2
//В Name ввдите ник
//Нарисуйте картинку в любом графическом редакторе.
//В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
//Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
//Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
//scale - масштаб отступа между предметами от 1:1 до 10:1
//Самый оптимальный масштаб 5:1
//Направление - согласно компасу в игре
const
Name='Perforator';
MaxDistance=150; //Максимальное расстояние на которое можно бросить итем
max=80; //Вместимость инвентаря
var
bmp:TBitMap; //Картинка
ItemBase: array[1..3,1..max] of integer; //Массив предметов заполняется процедурой CreateItemBase
SelectedItems: array[1..3,1..5] of integer; //Массив Object ID предметов [i,j] i=1 - OID,2-ID,3 - Count; j - # цвета
currentx,currenty,StartX,StartY,StartZ,MyX,MyY,MyZ ,NextX,NextY,ItemOID:integer;
//Теущие координаты x и y;координаты начала отчета x,y,z; Мои координаты x y обнавляются при Validate Position
ready:boolean;
timer : TTimer;
FormMain:TForm;
Stats : TMemo;
Panel1 : TPanel;
GroupBox1,GroupBox2 : TGroupBox;
ComboBoxColor,ComboBoxScale,ComboboxItem,ComboBoxD irection:TComboBox;
Label1,Label2,Label3,Label4:TLabel;
Path:TEdit;
LoadedImage:TImage;
LoadButton,StartButton,StopButton:TButton;
ItemsName,StringList:TStringList;
//......................................
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
var i,count,index:integer;
begin
count:=0;
if SelectedItems[2,ComboBoxColor.ItemIndex+1]=ItemBase[2,ComboBoxItem.ItemIndex+1] then exit;
for i:=1 to 5 do if SelectedItems[2,i]=ItemBase[2,ComboBoxItem.ItemIndex+1] then inc(count);
if Count>0 then begin
stats.lines.add('Ошибка! Нельзя добавлять одинаковые предметы в разные цвета.');
exit;
end;
SelectedItems[1,ComboBoxColor.ItemIndex+1]:=ItemBase[1,ComboBoxItem.ItemIndex+1];
SelectedItems[2,ComboBoxColor.ItemIndex+1]:=ItemBase[2,ComboBoxItem.ItemIndex+1];
SelectedItems[3,ComboBoxColor.ItemIndex+1]:=ItemBase[3,ComboBoxItem.ItemIndex+1];
index:=ComboBoxItem.ItemIndex;
for i:=0 to StringList.Count-1 do if Pos(' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex],ComboBoxItem.Items.Strings[i])>0 then
ComboBoxItem.Items.Strings[i]:=StringList.Strings[i];
ComboBoxItem.Items.Strings[index]:=ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]+' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex];
ComboBoxItem.ItemIndex:=index;
end;
//----------------------------------------
procedure StartButton_Click(Sender: TButton);
//Event : OnClick
begin
if bmp=NIL then stats.lines.add('Картинка не загружена!') else
begin
stats.lines.add('Старт!');
StartButton.enabled:=false;
currentx:=-1;
currenty:=0;
buf:=#$B3;
WriteD(0);
SendToServerEx(Name);
end;
end;
//......................................
//ButtonStopEnchant
procedure StopButton_Click(Sender: TButton);
//Event : OnClick
begin
StartButton.enabled:=true;
stats.lines.add('Стоп!');
timer.enabled:=false;
ready:=false;
end;
procedure bmpload;
begin
bmpfree;
bmp:=TBitMap.Create;
try
bmp.LoadFromFile(path.text);
except
bmp.Free;
stats.lines.add('Ошибка загрузки файла!');
exit;
end;
stats.lines.add('Картинка успешно загружена!');
LoadedImage.Picture.assign(bmp);
end;
procedure LoadButton_Click(Sender: TButton);
var openDialog : TOpenDialog;
begin
openDialog := TOpenDialog.Create(NIL);
openDialog.Filter := 'Bitmap files|*.bmp';
openDialog.FilterIndex := 1;
openDialog.DefaultExt:='bmp';
openDialog.Options:=ofNoChangeDir+ofFileMustExist+ ofPathMustExist;
if openDialog.Execute then path.text:=openDialog.FileName else begin
openDialog.Free;
exit;
end;
openDialog.Free;
bmpload;
end;
procedure Path_key(Sender: TEdit; Key: Char);
begin
if ord(key)=13 then begin
bmpload;
end;
end;
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);
TRY
//------------------------
//Свойства формы
Result.Caption := 'Item Painter v 0.2 by ArchDevil';
Result.Left := 397;
Result.Top := 233;
Result.Width := 350;
Result.Height := 230;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 0;
Stats.Top := 160;
Stats.Width := 350;
Stats.Height := 70;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alBottom;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 350;
Panel1.Height := 160;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 1;
GroupBox1.Width := 160;
GroupBox1.Height := 160;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Рисунок';
GroupBox1.Align := alLeft;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 180;
GroupBox2.Height := 160;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alLeft;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//ComboBoxColor
ComboBoxColor := TComboBox.Create(Result);
ComboBoxColor.Parent := GroupBox2;
ComboBoxColor.Left := 38;
ComboBoxColor.Top := 19;
ComboBoxColor.Width := 70;
ComboBoxColor.Height := 21;
ComboBoxColor.Visible := TRUE;
ComboBoxColor.Tag := 0;
ComboBoxColor.Enabled := TRUE;
ComboBoxColor.Hint := 'Выбери из списка цвет соответствующий предмету ниже';
ComboBoxColor.ShowHint := TRUE;
ComboBoxColor.Text := 'ComboBoxColor';
ComboBoxColor.Font.Name := 'Tahoma';
ComboBoxColor.Font.Size := 8;
ComboBoxColor.Font.Color := clWindowText;
ComboBoxColor.Color := clWindow;
ComboBoxColor.TabOrder := 1;
ComboBoxColor.TabStop := TRUE;
ComboBoxColor.Sorted := FALSE;
ComboBoxColor.ItemHeight := 13;
ComboBoxColor.Items.ADD('Черный');
ComboBoxColor.Items.ADD('Красный');
ComboBoxColor.Items.ADD('Зеленый');
ComboBoxColor.Items.ADD('Синий');
ComboBoxColor.Items.ADD('Желтый');
ComboBoxColor.ItemIndex := 0;
//......................................
//......................................
//ComboBoxScale
ComboBoxScale := TComboBox.Create(Result);
ComboBoxScale.Parent := GroupBox2;
ComboBoxScale.Left := 128;
ComboBoxScale.Top := 19;
ComboBoxScale.Width := 45;
ComboBoxScale.Height := 21;
ComboBoxScale.Visible := TRUE;
ComboBoxScale.Tag := 0;
ComboBoxScale.Enabled := TRUE;
ComboBoxScale.Hint := 'Выбери из списка масштаб';
ComboBoxScale.ShowHint := TRUE;
ComboBoxScale.Text := 'ComboBoxScale';
ComboBoxScale.Font.Name := 'Tahoma';
ComboBoxScale.Font.Size := 8;
ComboBoxScale.Font.Color := clWindowText;
ComboBoxScale.Color := clWindow;
ComboBoxScale.TabOrder := 1;
ComboBoxScale.TabStop := TRUE;
ComboBoxScale.Sorted := FALSE;
ComboBoxScale.ItemHeight := 13;
ComboBoxScale.Items.ADD('1:1');
ComboBoxScale.Items.ADD('2:1');
ComboBoxScale.Items.ADD('3:1');
ComboBoxScale.Items.ADD('4:1');
ComboBoxScale.Items.ADD('5:1');
ComboBoxScale.Items.ADD('6:1');
ComboBoxScale.Items.ADD('7:1');
ComboBoxScale.Items.ADD('8:1');
ComboBoxScale.Items.ADD('9:1');
ComboBoxScale.Items.ADD('10:1');
ComboBoxScale.ItemIndex := 4;
//......................................
//......................................
//ComboBoxDirection
ComboBoxDirection := TComboBox.Create(Result);
ComboBoxDirection.Parent := GroupBox2;
ComboBoxDirection.Left := 38;
ComboBoxDirection.Top := 67;
ComboBoxDirection.Width := 135;
ComboBoxDirection.Height := 21;
ComboBoxDirection.Visible := TRUE;
ComboBoxDirection.Tag := 0;
ComboBoxDirection.Enabled := TRUE;
ComboBoxDirection.Text := 'ComboBoxDirection';
ComboBoxDirection.Font.Name := 'Tahoma';
ComboBoxDirection.Font.Size := 8;
ComboBoxDirection.Font.Color := clWindowText;
ComboBoxDirection.Color := clWindow;
ComboBoxDirection.TabOrder := 1;
ComboBoxDirection.TabStop := TRUE;
ComboBoxDirection.Sorted := FALSE;
ComboBoxDirection.ItemHeight := 13;
ComboBoxDirection.Items.ADD('Север');
ComboBoxDirection.Items.ADD('Северо-Восток');
ComboBoxDirection.Items.ADD('Восток');
ComboBoxDirection.Items.ADD('Юго-Восток');
ComboBoxDirection.Items.ADD('Юг');
ComboBoxDirection.Items.ADD('Юго-Запад');
ComboBoxDirection.Items.ADD('Запад');
ComboBoxDirection.Items.ADD('Северо-Запад');
ComboBoxDirection.ItemIndex := 0;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 38;
ComboBoxItem.Top := 43;
ComboBoxItem.Width := 135;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 6;
Label1.Top := 23;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Цвет:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 6;
Label2.Top := 47;
Label2.Width := 58;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'Итем:';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 114;
Label3.Top := 23;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'М:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 6;
Label4.Top := 71;
Label4.Width := 58;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'Напр.:';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Path
Path := TEdit.Create(Result);
Path.Parent := GroupBox1;
Path.Left := 5;
Path.Top := 103;
Path.Width := 117;
Path.Height := 20;
Path.Visible := TRUE;
Path.Tag := 0;
Path.Enabled := TRUE;
Path.Hint := 'Введи путь к файлу BMP';
Path.ShowHint := TRUE;
Path.Text := '';
Path.Font.Name := 'Tahoma';
Path.Font.Size := 7;
Path.Font.Color := clWindowText;
Path.Color := clWindow;
Path.TabOrder := 5;
Path.TabStop := TRUE;
Path.ReadOnly := FALSE;
Path.MaxLength := 0;
Path.AutoSize := TRUE;
Path.OnKeyPress := @Path_Key;
//......................................
//......................................
//LoadImage
LoadedImage:= TImage.Create(Result);
LoadedImage.Parent:=GroupBox1;
LoadedImage.Left :=5;
LoadedImage.Top := 16;
LoadedImage.Width := 150;
LoadedImage.Height := 90;
LoadedImage.Visible := TRUE;
LoadedImage.Tag := 0;
LoadedImage.Enabled := TRUE;
LoadedImage.Hint := '';
LoadedImage.ShowHint := FALSE;
LoadedImage.Center := TRUE;
LoadedImage.Proportional := TRUE;
//......................................
//......................................
//LoadButton
LoadButton := TButton.Create(Result);
LoadButton.Parent := GroupBox1;
LoadButton.Left := 124;
LoadButton.Top := 102;
LoadButton.Width := 32;
LoadButton.Height := 21;
LoadButton.Visible := TRUE;
LoadButton.Tag := 0;
LoadButton.Enabled := TRUE;
LoadButton.Hint := '';
LoadButton.ShowHint := FALSE;
LoadButton.Caption := '...';
LoadButton.Font.Name := 'Tahoma';
LoadButton.Font.Size := 8;
LoadButton.Font.Color := clWindowText;
LoadButton.Font.CharSet := 1;
LoadButton.TabOrder := 2;
LoadButton.TabStop := TRUE;
LoadButton.Cancel := FALSE;
LoadButton.ModalResult := 0;
LoadButton.OnClick := @LoadButton_Click;
//......................................
//......................................
//StartButton
StartButton := TButton.Create(Result);
StartButton.Parent := GroupBox2;
StartButton.Left := 6;
StartButton.Top := 102;
StartButton.Width := 80;
StartButton.Height := 21;
StartButton.Visible := TRUE;
StartButton.Tag := 0;
StartButton.Enabled := TRUE;
StartButton.Hint := '';
StartButton.ShowHint := FALSE;
StartButton.Caption := 'Старт';
StartButton.Font.Name := 'Tahoma';
StartButton.Font.Size := 8;
StartButton.Font.Color := clWindowText;
StartButton.Font.CharSet := 1;
StartButton.TabOrder := 2;
StartButton.TabStop := TRUE;
StartButton.Cancel := FALSE;
StartButton.ModalResult := 0;
StartButton.OnClick := @StartButton_Click;
//......................................
//......................................
//StopButton
StopButton := TButton.Create(Result);
StopButton.Parent := GroupBox2;
StopButton.Left := 96;
StopButton.Top := 102;
StopButton.Width := 80;
StopButton.Height := 21;
StopButton.Visible := TRUE;
StopButton.Tag := 0;
StopButton.Enabled := TRUE;
StopButton.Hint := '';
StopButton.ShowHint := FALSE;
StopButton.Caption := 'Стоп';
StopButton.Font.Name := 'Tahoma';
StopButton.Font.Size := 8;
StopButton.Font.Color := clWindowText;
StopButton.Font.CharSet := 1;
StopButton.TabOrder := 3;
StopButton.TabStop := TRUE;
StopButton.Cancel := FALSE;
StopButton.ModalResult := 0;
StopButton.OnClick := @StopButton_Click;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
procedure Init; //Вызывается при включении скрипта
begin
FormMain:=Create_FormMain;
stats.Lines.Add('Скрипт: Рисование предметами by ArchDevil!');
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=700; //время задержки
ready:=false;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
stats.Lines.Add('itemsid.ini не найден!');
exit;
end;
buf:=hstr('14');
SendToServerEx(Name);
end;
procedure bmpfree;
begin
try
if bmp<>NIL then
begin
bmp.Free;
bmp:=NIL;
end;
finally
end;
end;
procedure Free;
var i:integer;
begin
Free_FormMain; bmpfree;
StringList.Clear; ItemsName.Clear;
timer.Free;
if LoadedImage<>NIL then LoadedImage:=NIL;
currentx:=0; currenty:=0; StartX:=0; StartY:=0;
StartZ:=0; MyX:=0; MyY:=0; ItemOID:=0;
ready:=false;
for i:=1 to 5 do begin
SelectedItems[1,i]:=0;
SelectedItems[2,i]:=0;
SelectedItems[3,i]:=0;
end;
end;
//CreateItemBase и InventoryUpdate Взял со скрипта NLObP на заточку
//---------------------------------------------
procedure CreateItemBase;
var
i, j, ListCount : integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
ItemBase[1,i]:=ReadD(j);
ItemBase[2,i]:=ReadD(j);
inc(j,4);
ItemBase[3,i]:=ReadD(j);
inc(j,60);
end;
StringList.Clear;
try
for i:=1 to ListCount do begin
try
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
end
end;
except;
exit;
end;
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false;
UpdType:=ReadH(j);
inc(j,2); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
inc(j,4);
Count:=ReadD(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;
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;
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;
end;
end;
end;
end;
inc(j,58);
end;
end;
//------------------------------------
function GetCount(OID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
result:=ItemBase[3,i]; // count
exit;
end;
end;
result:=0;
end;
//--------------------------------------------
function delta(x1, y1, x2, y2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
dx:=x2-x1;
dy:=y2-y1;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
end;
//--------------------------------------------
procedure OnTimer(Sender: TObject);
//====================
procedure GetNextCoords;
begin
case ComboBoxDirection.ItemIndex of
0: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) ;
end;
1: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) +currentx*(ComboBoxScale.ItemIndex+1);
end;
2: begin
NextX:=StartX-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currentx*(ComboBoxScale.ItemIndex+1) ;
end;
3: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)+currentx*(Com boBoxScale.ItemIndex+1);
end;
4: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1);
end;
5: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)+currenty*(Com boBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
6: begin
NextX:=StartX+currenty*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY-currentx*(ComboBoxScale.ItemIndex+1);
end;
7: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) +currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
end;
end;
//====================
begin
ItemOID:=0;
repeat
if currentx=bmp.width-1 then
begin
inc(currenty);
currentx:=0;
end else inc(currentx);
if currenty=bmp.height then
begin
timer.enabled:=false;
stats.lines.add('Остановлено! Рисунок нарисован!');
StartButton.enabled:=true;
exit;
end;
case bmp.Canvas.pixels[currentx,currenty] of //матрица пикселей
clBlack: if (SelectedItems[1,1]>0) and (GetCount(SelectedItems[1,1])>0) then ItemOID:=SelectedItems[1,1];
clRed: if (SelectedItems[1,2]>0) and (GetCount(SelectedItems[1,2])>0) then ItemOID:=SelectedItems[1,2];
clGreen: if (SelectedItems[1,3]>0) and (GetCount(SelectedItems[1,3])>0) then ItemOID:=SelectedItems[1,3];
clBlue: if (SelectedItems[1,4]>0) and (GetCount(SelectedItems[1,4])>0) then ItemOID:=SelectedItems[1,4];
clYellow:if (SelectedItems[1,5]>0) and (GetCount(SelectedItems[1,5])>0) then ItemOID:=SelectedItems[1,5];
end;
until ItemOID<>0;
if ItemOID=0 then exit;
stats.lines.add('Текущий элемент матрицы: x='+inttostr(currentx)+', y='+inttostr(currenty)+'.');
GetNextCoords;
if delta(MyX,MyY,NextX,NextY)>MaxDistance then begin //расстояние между точками
buf:=#$0F;
WriteD(NextX);
writeD(NextY);
WriteD(MyZ);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteD(1);
SendToServerEx(Name);
timer.enabled:=false; //Отключаем на время передвижения
ready:=true;
exit;
end;
buf:=#$17;
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
end;
//--------------------------------------------
begin
if FromClient and (ConnectName=Name) then
case pck[1] of
#$59: begin
MyX:=ReadD(2); // постоянно считываем координаты чара
MyY:=ReadD(6);
MyZ:=ReadD(10);
if ready and (delta(Myx,Myy,NextX,NextY)<MaxDistance/2) then begin //Меньше половины MaxDistance можно включать таймер
buf:=#$17; //Выкидываем предмет который не выкинули когда дельта привышала MaxDistance
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
ready:=false;
timer.enabled:=true;
end;
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: CreateItemBase; //создание базы предметов
//......................................
#$21: InventoryUpdate; //Обновление базы
#$62: if (StartButton.enabled=false) and (timer.enabled=false) and (ReadD(6)=3) then
begin
StartX:=ReadD(14); //Считываются только 1 раз
StartY:=ReadD(22);
StartZ:=ReadD(30);
MyX:=StartX;
MyY:=StartY;
MyZ:=StartZ;
timer.enabled:=true;//Вот теперь включаем таймер
end;
end;
end.
Инструкция:
//В Name ввдите ник
Нарисуйте картинку в любом графическом редакторе.
В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
scale - масштаб отступа между предметами от 1:1 до 10:1
Самый оптимальный масштаб 5:1
Направление - согласно компасу в игре
Пример [Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
Копирайт Coderx.ru отедльное спасибо Fer123 и QaK за идею и исполнение=)
Benjamin
15.08.2009, 18:15
Скрипт для поиска сундуков по ID
Название скрипта: Т Х __ТУПОЙ
Автор: TAMBIK
Источник: coderx.ru
Описание:
// скрипт для поиска сундуков по ID
// ЗАДАТЬ МОЖНО ТОК до ДВУХ!!!!
// вкл скрипт в чате пойдет инфа о МОБАХ каких видим
// будет ID моба и его ЛВЛ
// пишем ID первого сундука в пати чат
// пишем ID второго сундука в торговый чат то есть какие буш открывать
// по ID сундука будет поиск если нашел то открывать ключем
// если напали на чара и он ненашел или нашел сундук то атакует того кто напал
// после убийства моба произойдет обновление инфы о мобах и сундук снова поиск
// авто использование бутылок на ХП.Атаку.Бег - ЛЮБЫЕ !!!
// после вкл скрипта выпить бутыли чтоб их запомнить
// встать где получше в центре расположения сундуков
// нажать соцдействие ДА для начала и запоминания места старта
// нажать соцдействие НЕТ отмена
// открыть ключем сундук чтоб запомнить ключ
// скрипт проверялся на хрониках ХБ
const
myName = 'ххххххх'; // Имя
var
catt:integer;
procedure SendMsg2(msg:string);
begin
if (catt=1) then begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx( myName);
end;
end;
//================================================== =============
var
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
Timer4: TTimer;
Timer5: TTimer;
Timer6: TTimer;
Position:integer;
attacka,gamestart,poiskNpc:integer;
NpcTId1,NpcTId2:integer;
mobID,mobX,mobY,mobZ:integer;
lvlMob,mytext, Name:string;
klucID,hpID,uskorID,atakID:integer;
TargetID, textlvl,textID, NpcTypeId:integer;
MaxHP,CurHP,nybID,i:integer;
myXpos,myYpos,myZpos:integer;
startX,startY,startZ:integer;
xpos, ypos,zpos: integer;
myX,myY,myZ:integer;
//================================================== ==
function rastoyanie(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращ rezu растояние
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
//================================================== ==
procedure OnTimer5(Sender: TObject);
begin
mestoStarta;
poiskNpc:=1;
upgredeInfoNPC;
timer5.enabled:=false;
end;
//================================================== =============
procedure pickupDrop;
begin
case ReadD(10) of
951,952,955,956,947,948,729,730:begin
poiskNpc:=0;
mobID:=ReadD(6);
mobX:=ReadD(14);
mobY:=ReadD(18);
mobZ:=ReadD(22);
Action;
SendMsg2('подобрал');
poiskNpc:=1;
end;
end;
end;
//================================================== =============
procedure OnTimer1(Sender: TObject);
begin
buf:=#$19;
WriteD(hpID);
WriteD(0);
SendToServerEx(myName);
end;
procedure OnTimer2(Sender: TObject);
begin
buf:=#$19;
WriteD(uskorID);
WriteD(0);
SendToServerEx(myName);
end;
procedure OnTimer3(Sender: TObject);
begin
buf:=#$19;
WriteD(atakID);
WriteD(0);
SendToServerEx(myName);
end;
//================================================== =============
procedure OnTimer6(Sender: TObject);
begin
ActionKluc;
ActionKluc;
timer6.enabled:=false;
end;
//================================================== =============
procedure Action;
begin
buf:=#$1F;
WriteD(mobID);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
SendToServerEx(myName);
end;
//================================================== =============
procedure ActionKluc;
begin
buf:=#$19;
WriteD(klucID);
WriteD(0);
SendToServerEx(myName);
end;
//================================================== =============
procedure startPoisk;
begin
NpcTypeId:=ReadD(6);
lvlMob:=ReadS(125);
if (NpcTId1+NpcTId2=0) then SendMsg2('вижу : '+lvlMob+'_ ID : '+inttostr(NpcTypeId)+' ');
if (poiskNpc=1) then
if (rastoyanie(MyXpos, MyYpos, ReadD(14), ReadD(18))<=600) then
CASE NpcTypeId OF
NpcTId1,NpcTId2:begin
mobID:=ReadD(2);
mobX:=ReadD(14);
mobY:=ReadD(18);
mobZ:=ReadD(22);
lvlMob:=ReadS(125);
Action;
RadarControl;
poiskNpc:=0;//
SendMsg2('нашел С_У_Н_Д_У_К_:'+lvlMob+'_ID: '+inttostr(NpcTypeId)+'');
if (gamestart=1) then
timer6.enabled:=true;
timer5.enabled:=true;
buf:=#$0F;
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
WriteD(0);
SendToServerEx(myName);
end;
end;
end;
//================================================== =============
procedure startAttacka;
begin
mobID:=ReadD(2);
mobX:=ReadD(15);
mobY:=ReadD(19);
mobZ:=ReadD(23);
attacka:=0;
poiskNpc:=0;
if (gamestart=1) then
Action;
RadarControl;
timer5.enabled:=false;
Timer4.enabled:=true;
end;
//================================================== =============
procedure stopPoisk;
begin
TargetID:=0;
attacka:=1;
poiskNpc:=1;
upgredeInfoNPC;
stopRadarControl;
Timer4.enabled:=false;
timer5.enabled:=false;
buf:=hstr('48 01 00 ');
SendToServerEx(myName);
end;
//================================================== =============
procedure stopAttacka;
begin
attacka:=1;
poiskNpc:=1;
stopRadarControl;
timer5.enabled:=false;
Timer4.enabled:=false;
end;
//================================================== =============
procedure OnTimer4(Sender: TObject);
begin
Action;
end;
//================================================== =============
procedure startGAME;
begin
catt:=0;
attacka:=1;
poiskNpc:=1;
gamestart:=1;
upgredeInfoNPC;
startX:=MyXpos;
startY:=MyYpos;
startZ:=MyZpos;
SendMsg2(' ........... startGAME..........');
end;
//================================================== =============
procedure stopGAME;
begin
catt:=1;
attacka:=0;
gamestart:=0;
poiskNpc:=0;
TargetID:=0;
MoveToLocation;
stopRadarControl;
Timer4.enabled:=false;
Timer4.enabled:=false;
buf:=hstr('48 01 00 ');
SendToServerEx(myName);
SendMsg2(' ........... stopGAME..........');
end;
//================================================== =============
procedure upgredeInfoNPC;
begin
if (0<NpcTId1+NpcTId2) then begin
buf:=#$6E;
SendToServerEx(myName);
poiskNpc:=1;
end;
end;
//================================================== =============
procedure addpoiskNPC;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
NpcTId1:=StrToInt(mytext);
SendMsg2( 'пати: Искать 1 моба с ID: '+IntToStr(NpcTId1)+'' );
pck:='';
exit;
end;
if (textID=8) then begin
NpcTId2:=StrToInt(mytext);
SendMsg2( 'торг: Искать 2 моба с ID: '+IntToStr(NpcTId2)+'' );
pck:='';
exit;
end;
end;
//================================================== =============
procedure ValidatePosition;
begin
myXpos:=ReadD(2);
myYpos:=ReadD(6);
myZpos:=ReadD(10);
MyX:=MyXpos;
MyY:=MyYpos;
MyZ:=MyZpos;
end;
//================================================== =============
procedure mestoStarta;
begin
buf:=#$0F;
WriteD(startX);
WriteD(startY);
WriteD(startZ);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
WriteD(0);
SendToServerEx(myName);
end;
//=======================
procedure MoveToLocation;
begin
buf:=#$0F;
WriteD(myx);
WriteD(myy);
WriteD(myz);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
WriteD(0);
SendToServerEx(myName);
end;
//================================================== =============
procedure RadarControl;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
SendToClientEx(myName);
end;
//================================================== =============
procedure stopRadarControl;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
SendToClientEx(myName);
end;
//================================================== =============
procedure RequestSocialAction;
begin
CASE ReadD(2) OF
5:begin stopGAME;
pck:='';
exit;
end;
6:begin startGAME;
pck:='';
exit;
end;
end;
end;
//================================================== =============
procedure Init;
begin
catt:=1;
NpcTId1:=0;
NpcTId2:=0;
poiskNpc:=0;
gamestart:=0;
TargetID:=0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=11000;
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=1120000;
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3;
timer3.enabled:=false;
timer3.interval:=1120000;
timer4:=TTimer.Create(nil);
timer4.OnTimer:=@OnTimer4;
timer4.enabled:=false;
timer4.interval:=1400;
timer5:=TTimer.Create(nil);
timer5.OnTimer:=@OnTimer5;
timer5.enabled:=false;
timer5.interval:=15000;
timer6:=TTimer.Create(nil);
timer6.OnTimer:=@OnTimer6;
timer6.enabled:=false;
timer6.interval:=4000;
buf:=#$6E;
SendToServerEx(myName);
SendMsg2('Открываем Сундук');
SendMsg2('привет от ТАМБИКА');
SendMsg2('выпей Бутылки и открой 1 сундук');
SendMsg2('в пати чат пишем ID первого сундук ');
SendMsg2('в торгов чат пишем ID второго сундук ');
SendMsg2(' нажимаем соцдейство ДА для начала ');
end;
procedure Free;
begin
timer1.free;
Timer2.free;
Timer3.free;
Timer4.free;
Timer5.free;
Timer6.free;
end;
//================================================== =============
procedure UserInfo;
begin
i:=18;
nybID:=ReadD(i);
Name:=ReadS(i);
i:=i+48;
MaxHP:=ReadD(i);
end;
//============================
procedure StatsUpdate;
begin
CurHP:=ReadD(14);
if (50<=MaxHP-CurHP) then
Timer1.enabled:=true
else
Timer1.enabled:=false;
if (CurHP=0) then Timer4.enabled:=false;
end;
//================================================== =============
procedure addtoItem;
begin
case ReadD(12) of
1061,1539:begin//Зелье Исцеления ID:1061
hpID:=ReadD(8);
SendMsg2('запомнил: З е л ь е Исцеления');
end;
734,1374: begin//Зелье Ускорения ID:734
uskorID:=ReadD(8);
Timer2.enabled:=true;
SendMsg2('запомнил: З е л ь е Ускорения');
end;
735,1375: begin//Зелье Быстрой Атаки ID:735
atakID:=ReadD(8);
Timer3.enabled:=true;
SendMsg2('запомнил: З е л ь е Атаки');
end;
6667..6672: begin//Ключ от Сундука Сокровищ - Ранг 3,4.5.6.7.8.
klucID:=ReadD(8);
SendMsg2('запомнил: _ К _ Л _ Ю _ Ч_ И _ К _');
end;
end;
end;
//================================================== =============
begin
//================================================== =============
if FromServer then
case pck[1] of
#$32:UserInfo;
#$18:if ReadD(2)=nybID then StatsUpdate;
#$0C:startPoisk;
#$62:if ReadD(2)=181 or 109 then mestoStarta;//MsgID: Неверная цель. ID:109
#$08:if ReadD(2)=TargetID then upgredeInfoNPC;
#$00:if ReadD(2)=TargetID then stopAttacka;
#$21:addtoItem;
#$23:if ReadD(2)=nybID then TargetID:= ReadD(6);
#$33:if ReadD(2)=nybID then timer5.enabled:=false;
#$16:if ReadD(2)=TargetID then pickupDrop;
end;
//================================================== =============
if FromClient then
CASE pck[1] OF
#$49:addpoiskNPC;//Tип: 0x49 (Say2)
#$34:RequestSocialAction;
#$59:ValidatePosition;
end;
//================================================== =============
// я атакую
if FromServer and(pck[1]=#$33)and(ReadD(2)=nybID) then begin
timer5.enabled:=false;
end;
//====================================
// не Атакуют ли мой Выбор
if FromServer and (gamestart=1) and(pck[1]=#$33)and(ReadD(2)=TargetID)
and(ReadD(6)<>nybID) then stopPoisk;
if FromServer and (gamestart=1) and(pck[1]=#$33)and(ReadD(2)<>nybID)
and(ReadD(6)=TargetID) then stopPoisk;
//====================================
// напали на мне
if FromServer and (pck[1]=#$48)and(ReadD(2)<>nybID)and(ReadD(6)=nybID)then startAttacka;
//===================================
if FromServer and(attacka=1) and (pck[1]=#$33)and (ReadD(6)=nybID) then startAttacka;
//================================================== =============
end.
Авто:Таргет.Радар.Атака
Автор: TAMBIK
Источник: coderx.ru
Описание:
При нападение на чара, чар автоматом берет нападающего в таргет и атакует
Радар стрелка над чаром показывает направление откуда чара атакуют
//автор TAMBIK
//проверялось на ХБ
//не забудьте вписать имя своего чара
const
myName = ' ххххххх '; // Имя
var
Timer1: TTimer;
myID:integer;
mobID,mobX,mobY,mobZ:integer;
myXpos,myYpos,myZpos:integer;
autoattacka,autoAction:boolean;
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(myName);
end;
procedure RequestSocialAction;
begin
CASE ReadD(2) OF
5:begin// стоп
autoattacka:=false;
autoAction:=false;
stopRadarControl;
SendMsg2('о т к л ю ч е н о');
pck:='';
exit;
end;
6:begin // старт
autoattacka:=true;
SendMsg2('в к л ю ч е н о');
pck:='';
exit;
end;
end;
end;
procedure OnTimer1(Sender: TObject);
begin
Action;
end;
procedure Action;
begin
buf:=#$1F;
WriteD(mobID);
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
WriteC(00);
SendToServerEx(myName);
end;
procedure startPoisk;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
SendToClientEx(myName);
end;
procedure startAttacka;
begin
mobID:=ReadD(2);
Action;
startPoisk;
autoAction:=false;
if autoattacka then
Timer1.enabled:=true;
end;
procedure stopRadarControl;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
SendToClientEx(myName);
end;
procedure ValidatePosition;
begin
myXpos:=ReadD(2);
myYpos:=ReadD(6);
myZpos:=ReadD(10);
end;
procedure Init;
begin
autoAction:=true;
autoattacka:=false;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=1000;
buf:=#$14;
SendToServerEx(myName);
SendMsg2('для ВКЛ соцдействие ДА');
SendMsg2('для ОТКЛ соцдействие НЕТ');
SendMsg2('автор TAMBIK');
end;
procedure Free;
begin
timer1.free;
end;
begin
if fromserver and (pck[1]=#$32) then begin//Tип: 0x32 (UserInfo)
myID:=ReadD(18);
end;
if FromClient and (pck[1]=#$34) then RequestSocialAction;
if FromServer and autoAction and (pck[1]=#$33) and (ReadD(6)=myID) then startAttacka;
if FromServer and autoAction and (pck[1]=#$48)and(ReadD(2)<>myID)and(ReadD(6)=myID)then startAttacka;
if FromServer and (pck[1]=#$00) and (ReadD(2)=mobID) then begin
autoAction:=true;
stopRadarControl;
timer1.enabled:=false;
if FromClient and (pck[1]=#$59) then ValidatePosition;
end;
end.
Скрипт на заточку лежал до недавнего времени в подполье, но им особо там некто не пользуется (да и сам скрипт в шару был отправлен давно) - перезалейти этот скрипт пожалуйста...
перезалейте плиз
Перезалейте на депозит плииииз
Перезалил
Автоматизация заточки предметов до необходимого уровня by NLObP
Применение: Вставте в l2phx во вкладку скрипты не забудьте поменять ник(NLObP) в скрипте на свой.
Автор скрипта: NLObP
letitbit.net ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
depositfiles.com ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
Автоматизация изготовления ключей
Автор: TAMBIK
Источник: coderx.ru
Описание:
Скрипт изготовляет ключики(скилл у тх)
Для Hellbound'a
Запуск скрипта соц. действие ДА
var
timer1: TTimer;
Bypass:string;
x,i:integer;
const
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">Cкрипт изготовление ключей</font><br>'+
'<font color="04fbfb"> Уровень Скила </font><br>'+
'<button value="= 1 =" action="bypass -h 1" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="= 2 =" action="bypass -h 2" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<button value="ПУСК" action="bypass -h pusk" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="СТОП" action="bypass -h stop" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">Автор ТАМБИК</font><br>'+
'</center></body></html>';
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClient;
end;
procedure OnTimer1(Sender: TObject);
begin
buf:=hstr('39 A3 01 00 00 00 00 00 00 00' );
SendToServer;
end;
procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=0;
x:=0;
end;
procedure Free;
begin
timer1.free;
end;
begin
if FromClient and (pck[1]=#$34) and (pck[2]=#$06) then begin
ShowHTML(HTML);
SendMsg2('Выберите Уровень скила');
pck:='';
exit;
end;
begin
if FromClient and (pck[1]=#$23) then
begin
Bypass:=ReadS(2);
case Bypass of
'1':
begin
x:=1;
timer1.interval:=1300000;//интервал
SendMsg2('Уровень скила=1');
ShowHTML(HTML);
end;
'2':
begin
x:=1;
timer1.interval:=1700000;//интервал
SendMsg2('Уровень скила=2');
ShowHTML(HTML);
end;
'pusk':
begin
if (x=0) then begin
SendMsg2('НЕ ВЫБРАН Уровень скила');
end;
if (x=1) then begin
buf:=hstr('39 A3 01 00 00 00 00 00 00 00' );
SendToServer;
timer1.enabled:=true;
SendMsg2('ПУСК');
ShowHTML(HTML);
end;
end;
'stop':
begin
x:=0;
timer1.enabled:=false;
SendMsg2('СТОП');
ShowHTML(HTML);
timer1.interval:=0;//интервал
end;
end;
end;
end;
end.
MarkoPolo
08.09.2009, 21:14
Скрипт на тп , то место которое запомнили(для серверов с тупой гео) Тестил на Interlude
Автор: pmen
Взято c сoderx.ru
var
// переменная
x:integer; y:integer;
a:integer; b:boolean; z:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); x:=ReadD(6);
y:=ReadD(10); z:=ReadD(14);
SendMsc('Запомнен ObjectID = '+inttostr(a));
SendMsc('Запомнен x = '+inttostr(x));
SendMsc('Запомнен y = '+inttostr(y));
SendMsc('Запомнен z = '+inttostr(z));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6F 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
Writed(x);
Writed(y);
Writed(z);
SendToClient;
end;
end;
end.
Удобно Использовать вместе с скриптом на тп.Например ходить на твт(Сохранил точку где появился, тп в город за бафом и потом обратно на арену) .
Простенький скрипт для "глухих", перенаправляет сообщения приходящие из выбранного вами чата в чат PartyChannel, в основном удобно для тех кто не пользуется TS, в замесах не всегда есть возможность читать мелкие буквы в чате, а со скриптом нужный вам чат будет выводиться большими буквами на экране.
Должен работать на всех хрониках начиная с Kamael и заканчивая Final.
Const
TextType=0; //меняем значение под нужный чат: 0=общий чат, 1=!,
//2=PM, 3=Party, 4=Clan, 8=Trade, 9=Alli, 17=Hero
begin
if FromServer and (pck[1]=#$4A) and (ReadD(6)=TextType) then
begin
buf:=pck;
WriteD(15,6);
pck:=buf;
end;
end.
Автор [mks] coderx.ru
MarkoPolo
09.09.2009, 10:12
Скрипт на перевод текста .
Например заходишь в игру и пишешь Ghbdtn cthd ,а она меняет его на Привет серв.Тестировал на интерлюде.
Автор и откуда взял - непомню.
Program EngToRus;
const
Name='KHoIIka';
var
temp:string;
i:integer;
function ConvertNeeded(tmpstr : string) : boolean;
var i,countru,counteng:integer;
begin
countru:=0;
counteng:=0;
for i:=1 to length(tmpstr) do
begin
if tmpstr[i] in ['à'..'ÿ','À'..'ß'] then inc(countru);
if tmpstr[i] in ['a'..'z','A'..'Z'] then inc(counteng);
end;
result:=true;
if (countru>0) and (counteng>=0) then result:=false;
end;
function ConvertStr(tmpstr : string) : string;
var i:integer;
function ConvertChar(tmpchar : char) : char;
const
alphabet=[' ','[',']','{','}','<','>',',','.',':','"','/','?','q','w','e','r','t','y','u','i','o','p','a', 's','d','f','g','h','j','k','l','z','x','c','v','b ','n','m','`','~'];
rualphabet=[' ','õ','ú','Õ','Ú','Á','Þ','á','þ','Æ','Ý','.',',', 'é','ö','ó','ê','å','í','ã','ø','ù','ç','ô','û','â ','à','ï','ð','î','ë','ä','ÿ','÷','ñ','ì','è','ò', 'ü','¸','¨'];
var i:integer;
begin
if tmpchar=chr(39) then begin
result:='ý';
exit;
end;
if tmpchar=';' then begin
result:='æ';
exit;
end;
if tmpchar='^' then begin
result:=':';
exit;
end;
if tmpchar='@' then begin
result:='"';
exit;
end;
if tmpchar in ['0'..'9'] then begin
result:=tmpchar;
exit;
end;
if tmpchar='$' then begin
result:=';';
exit;
end;
if tmpchar='&' then begin
result:='?';
exit;
end;
if tmpchar='|' then begin
result:='/';
exit;
end;
for i:=0 to (length(alphabet)-1) do
begin
if tmpchar=alphabet[i] then
begin
result:=rualphabet[i];
exit;
end;
if ord(tmpchar)=(ord(alphabet[i])-32) then
begin
result:=chr(ord(rualphabet[i])-32);
exit;
end;
end;
result:=tmpchar;
end;
begin
for i:=1 to length(tmpstr) do tmpstr[i]:=ConvertChar(tmpstr[i]);
result:=tmpstr;
end;
begin
if FromClient and (pck[1]=#$38) and (ConnectName=Name) then
begin
temp:=ReadS(2);
if ConvertNeeded(temp) then
begin
temp:=ConvertStr(temp);
if ReadD(length(temp)*2+4)=2 then
begin
buf:=#$38;
writes(temp);
writed(2);
writes(ReadS(length(temp)*2+8));
SendToServerEx(Name);
pck:='';
exit;
end;
buf:=#$38;
writes(temp);
buf:=buf+pck[length(pck)-3]+pck[length(pck)-2]+pck[length(pck)-1]+pck[length(pck)];
SendToServerEx(Name);
pck:='';
end;
end;
end.
Benjamin
20.09.2009, 14:38
//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор pmen ICQ - 479917081
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=
const
//======================================
Name='ник сюды'; //<-----Ник Персонажа
//======================================
var
a:integer;x:integer;MyID:string;
y:integer;z:integer;
b:boolean;ValidatePosition:string;
procedure Init; //Вызывается при включении скрпта
begin
SendMsc('Возьми себя в таргет'); //Системное сообщение
b:=false; //Условие b первоночально False
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
begin
//Нечитаем пустые пакеты
if pck='' then exit;
//Если Имя соединения Name
//И Пакет Action от клиента то
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then
begin
//Сохраняем мой Обжект Ид
MyID:= pck[2]+pck[3]+pck[4]+pck[5];
a:=ReadD(2); x:=ReadD(6); //Читаем и запоминаем данные
y:=ReadD(10); z:=ReadD(14);
SendMsc('Все данные сохранены!'); //Оповещаем о том что все прошло успешно
b:=true;
end;
begin
if pck='' then exit; //Не читаем пустые пакеты
//Если от Клиента пакет RequestRestartPoint
//Запоминаем ValidatePosition до revive
//Посылаем клиенту TeleportToLocation
if FromClient and (ConnectName=Name) and (pck=hstr('6D 00 00 00 00')) then
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then ValidatePosition:=pck;
if FromServer and (ConnectName=Name) and (pck[1]=#$28) and (MyID= pck[2]+pck[3]+pck[4]+pck[5]) then
begin
pck:=''; //Убиваем стандартный пакет
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
buf:=#$28;
WriteD(A); //Obj.ID
WriteD(X); //Coord.X
WriteD(Y); //Coord.Y
WriteD(Z); //Coord.Z
SendtoclientEX(Name);
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
end;
end;
end.
dager315
21.10.2009, 16:04
Вот он
положить в папку l2phx.... в папку setings или просто в папку с прогой
Антитаргет (пробывал на 3.1.9)
var act:integer; me1:char; me2:char; me3:char; me4:char; nm:integer; t1:char; t2:char; t3:char; t4:char; nt:integer; shade:integer; mz:integer; pz:integer; tz:integer; hz:integer;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
begin
//анализ ИД себя
if nm<>1 then
begin
if FromServer and (pck[1]=#$04) then
begin
me1:=pck[18];
me2:=pck[19];
me3:=pck[20];
me4:=pck[21];
nm:= 1;
end;
end;
//защитная часть
if FromClient and (pck[1]=#$1B) and (pck[2]=#$06) then
begin
act:=1;
SendMsg('AT system on');
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$05) then
begin
act:=0;
SendMsg('AT system off');
end;
if FromClient and (pck=#$38#$3C#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=1;
SendMsg('Advanced m.def on')
end;
if FromClient and (pck=#$38#$3C#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=0;
SendMsg('Advanced m.def off')
end;
if FromClient and (pck=#$38#$3F#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=1;
SendMsg('Advanced p.def on')
end;
if FromClient and (pck=#$38#$3F#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=0;
SendMsg('Advanced p.def off')
end;
if FromClient and (pck=#$38#$42#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=1;
SendMsg('Anti-target on')
end;
if FromClient and (pck=#$38#$42#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=0;
SendMsg('Anti-target off')
end;
if FromClient and (pck=#$38#$45#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=1;
SendMsg('Hit"n"Hide on')
end;
if FromClient and (pck=#$38#$45#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=0;
SendMsg('Hit"n"Hide off')
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$03) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
if act=1 then
begin
if tz=1 then
begin
if FromServer and (pck[1]=#$29) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
if mz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
if pz=1 then
begin
if FromServer and (pck[1]=#$05) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
if hz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
end;
//часть таргета
if FromClient and (pck[1]=#$04) then
begin
nt:=1;
t1:=pck[2];
t2:=pck[3];
t3:=pck[4];
t4:=pck[5];
end;
if FromClient and (pck[1]=#$37) then
begin
nt:=0;
end;
if nt=1 then
begin
if FromClient and (pck[1]=#$30) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$04) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
//shadowmelt
if FromClient and (pck[1]=#$1B) and (pck[2]=#$07) then
begin
shade:=1;
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
SendMsg('Skipped to Shadows');
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$08) then
begin
shade:=0;
buf:=#$30#$00#$00;
SendToServer;
SendMsg('Reveal from Darkness');
end;
if shade = 1 then
begin
if FromClient and (pck[1]=#$30) then pck:='';
end;
end.
И так управление - нажимает Social Yes, система запущена, но еще не подключены модули... Подключаем те которые нам нужны...
пишем в ПАТИ ЧАТ:
т+ / т- - Включение/Выелючение АВТО антитаргета - таргет сбрасывется когда вас БЕРУТ НА ТАРГЕТ, тоесть он пытается выделить, а вы сбрасываете!
м+ / м- , п+ / п- - дополнительная магическая и физическая защита, непомню уже сам как работает (да у меня и не работает, изза лагучести инета) но знакомый говорит, если включить их в паре, то сбивает каст когда пытаются кастануть на вас заклинание, и "ичезает" прямо во время физической атаки на вас...
х+ / х- - уход в хайд после каждой своей физической атаки
Там есть еще такая штукенция, что после хайда, предыдущий таргет выберется автоматом (этого не видно в клиенте но он выделится, протестите на мобах)
Social Bow / Social Unaware - исчезнуть и появится, ну это кусок скрипта ХИНТА на его антитаргет.}
Добавлено через 6 минут
Инвиз
(только при том вы не можите двигаться а просто исчезаете, сильной полезности нет , но может кому нить пригодиться)
И так управление - нажимает Social Yes,No
//Invisible Mode
var
pck48:string;
hidden:boolean;
i,x,y:integer;
procedure Init;
begin
hidden:=false;
pck48:='';
randomize;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(2);
WriteS('hLaPEx');
WriteS(msg);
SendToClient;
end;
begin
if FromServer then exit;
case ord(pck[1]) of
$1B:case ord(pck[2]) of
$05:begin
SendMsg('invisible_mode: Off');
pck:=#$30;
hidden:=false;
end;
$06:begin
if pck48='' then exit;
SendMsg('invisible_mode: On');
hidden:=true;
pck:=pck48;
i:=2;
x:=ReadD(i);
y:=ReadD(i);
x:=x+1000+round(random*200)-100;
y:=y+1000+round(random*200)-100;
buf:=pck;
WriteD(x,2);
WriteD(y,6);
pck:=buf;
end;
end;
$48:pck48:=pck;
$30:if hidden then pck:='';
end;
end.
Ну так я и говорил про статы...и не надо тут отмазываться...ссылки на серваки ты мне так и не дал!
Добавлено через 2 минуты
АвТОзаТоЧкА для gracia final
// хроники Грация ФИНАЛ
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один раз чтоб запомнить чем и что точить
// точить для запоминания по одному предмету
// если будите точить разные предметы
// предметы должны соответствовать применяемому skrol
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
// дальше скрипт сам точит до указаного уровня заточки
// все предметы одинаковые с первыми заточеными
// точит первый предмет до максима потом второй и т.д
// т.е если вы заточили несколько разных предметов
// одного класса армор или веапон они будут точиться
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
myname='TAMBIK'; //<<== пишем свой НИК
max=140;//<<== колличество ячеек в рюкзаке
var
BaseItems:array[1..max,1..11] of integer;
BaseID:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
flag,start,select,selectID,autoMsg:Boolean;
autostart:Boolean;
mytext:string;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID: integer;
sumskrol,sumitemID: integer;
key,x,y,ii:integer;
maxlvl: integer;
GetiD:integer;
skrolID,skrolObj:integer;
t,l,d:integer;
//-----------------------------------------
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
if FromClient and (pck[1]=#$49) then begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
count:=round((Length(pck)-5) / ListSize);// длина блока
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
if (0 < skrolObjectID) then begin
sumskrol:=Getitem(skrolID,3,5);
SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;
if (sumskrol=0) then begin
Timer01.enabled:=false;
stopselectskrol;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin
end;
//=============================
procedure InventoryUpdate;
var
Id,ObjId:integer;
begin
ObjId:=ReadD(8);
Id:=ReadD(12);
SendMsg2 ('удален предмет Id : '+IntToStr(Id)+' ObjectID: '+IntToStr(ObjId)+' ');
deleteBase;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=enchantID) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
end;
//===========================================
//
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=================================
//добавляем в базу ID предмета
procedure addIDtoarray(ItemOID:integer);
begin
SendMsg2( '------------------------------------- ' );
SendMsg2 (' добавить в базу для заточки ID : '+IntToStr(ItemOID)+' Предмета ');
SendMsg2(' .................' );
flag:=false;
for ii:=1 to max do
if (BaseID[ii]=ItemOID) then begin // текущий ID уже есть в массиве,
flag := true;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' предмет в базе есть с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
if (flag = false) then begin
for ii:=1 to max do
if (BaseID[ii]=0) then begin // добавим ID в массив,
BaseID[ii]:=ItemOID;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' Добавлен Предмет с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//=============================
procedure ChooseInventory;
begin
if (itemID>0) then begin
objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID=0) then begin
stopselectskrol;
SendMsg2 (' предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ! ');
for ii:=1 to max do
if (BaseID[ii]=itemID) then begin
BaseID[ii]:=0;
SendMsg2 (' ..... ПОИСК ______ ПРЕДМЕТА..... ');
GetItemID ;
Break; // прерываем дальнейший перебор массива.
end;
if (itemID=0) then begin
SendMsg2 ('___НЕТ ПРЕДМЕТОВ ДЛЯ ЗАТОЧКИ___ ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
stopselectskrol;
start:=false;
end;
end;
end;
end;
//=================================
// GetiD:=GetItemID(itemID);//находим в базе ItemID предмет для Заточки
//находим ItemID предмета для Заточки в базе ItemID
procedure GetItemID ;
begin
if start then begin
if (maxlvl=0) then begin
SendMsg2 (' неуказан уровень заточки ');
stopselectskrol;
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
if (maxlvl>0) then begin
itemID:=0;
for ii:=1 to max do
if (BaseID[ii]<>0) then begin
itemID:=BaseID[ii];
SendMsg2 (' НАШЛИ ПРЕДМЕТ для ЗАТОЧКИ с ID = '+IntToStr(itemID)+' ');
Timer01.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
end;
//=================================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
SendMsg2('------------------------------' );
if (itemID>0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3]= itemID) and (BaseItems[i,11]< maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... найден предмет для заточки ..... ');
SendMsg2(' ID : '+IntToStr( itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+' ');
SendMsg2('------------------------------' );
if (enchantID>0) then startselectEnch;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure startselectEnch;
begin
Timer02.enabled:=true
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+' ' );
SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
t:=0;l:=0;d:=0;
autostart:=false;
flag:=false;
selectID:=false;
autoMsg:=true;
GetiD:=0;
sumskrol:=0;
objectOID:=0;
maxlvl:=0;
itemID:=0;
enchantID:=0;
ItemEnch:=0;
start:=false;
select:=false;
skrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=400; //<<== время выбора предмета
Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=3000; //<<== время между заточкой
SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предметы один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
BaseID[ii]:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; pck:=''; exit; end;
13:begin autoMsg:=false; pck:=''; exit; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if autostart then begin
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
GetItemID ;
pck:='';
exit;
end;
end;
25:begin
start:=false;
enchantID:=0;
ItemEnch:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
pck:='';
exit;
end;
end;
end;
//=========
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$21) and (ReadH(4)=3)then InventoryUpdate;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then Resultmaxlvl;
if FromClient and (pck[1]=#$56) then RequestActionUse;
begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' заточен предмет c ID : '+IntToStr(ItemOID)+' ');
SendMsg2(' .................' );
addIDtoarray(ItemOID);//добавляем в базу ID предмета
stopselectskrol;
end;
end;
end;
end;
end.
by TAMBIK coderx.ru
АвТОзаТоЧкА--- авто-gracia_final +1.
автор я
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
l2phx.3.5.28.151
// авто-gracia_final +1.
// хроники Грация ФИНАЛ
// Соцдействие ДА открыть управление скриптом
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один предмет чтоб запомнить чем и что точить
// дальше скрипт сам точит до указаного уровня заточки
// все предметы ОДИНАКОВЫЕ с ПЕРВЫМ заточеным
// предметы точатся добавляя по +1 на предмет
// т.е если у вас предметы с одинаковым уровнем заточки например 0
// будет точится первый предмет до +1, потом второй до +1 и т.д
// если предмет при заточки блесс скрол слетел на 0 или на уровень как у вас на сервере
// то будет точиться он пока несравняется с остальными
// и т.д
// пока недостигнете заданого уровня заточки
// если предметов более 1 то один остается
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
//===========================================
myname='TAMBIK'; //<<== пишем свой НИК
max=80;//<<== колличество ячеек в рюкзаке
//===========================================
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<font color="04fbfb">Cкрипт автозаточка для gracia_final</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=1>'+
'<font color="04fbfb">системные сообщения</font><br>'+
'<button value="в к л" action="bypass -3" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<button value=" в ы к л " action="bypass -4" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=4>'+
'<font color="04fbfb">АВТОЗАТОЧКА</font><br>'+
'<font color="04fbfb"> </font><br>'+
'<button value="П У С К" action="bypass -pusk" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<button value="С Т О П" action="bypass -stop" width=100 height=20 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=4>'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL">Автор TAMBIK</font><br>'+
'</center></body></html>';
//==========================================
var
BaseItems:array[1..max,1..11] of integer;
Baselvl:array[0..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
mytext:string;
Bypass:string;
autostart,start,autoMsg:Boolean;
flag : Boolean;
t,l,d,x,y,ii,i:integer;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID:integer;
sumskrol,sumitemID,sumitem:integer;
maxlvl,minlvl,enchlvl,selectlvl:integer;
skrolID,skrolObj:integer;
minEnchitem:integer;
object,index : integer;
//==========================================
// ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClientEx(myname);
end;
//========================
procedure ActionUse;
begin
Bypass:=ReadS(2);
case Bypass of
'-3':begin autoMsg:=true; end;
'-4':begin autoMsg:=false; end;
'-pusk':begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if (maxlvl=0) then SendMsg2( ' Неуказан Уровень Заточки !' );
SendMsg2( '_______________________________' );
if autostart and (maxlvl>0) then begin
buf:=hstr('14');
SendToServerEx(myname);
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
Timer01.enabled:=true;// вкл таймер выбора свитка
end;
end;
'-stop':begin
deleteBase;
start:=false;
enchantID:=0;
ItemEnch:=0;
minlvl:=0;
sumitem:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
end;
end;
//===========================================
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
end;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
count:=round((Length(pck)-5) / ListSize);// длина блока
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
addenchantitemID;
if (skrolID>0) then begin
sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
if autoMsg then SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskrol=0) then begin
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
start:=false;
end;
end;
end;
//=============================
procedure EnchantResult;
begin
deleteBase;
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end;
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=============================
// добавляем в базу ЛВЛ заточки
procedure addenchantitemID;
begin
for i:=1 to max do
if (BaseItems[i,3] = ItemOID) then begin
enchlvl:=BaseItems[i,11];
flag:=false;
for ii:=1 to max do
if (Baselvl[ii] = enchlvl) then begin // текущий уже есть в массиве,
flag := true;
BREAK; { прекращаем цикл }
end;
if (flag = false) then begin
for ii:=1 to max do
if (Baselvl[ii]=-1) then begin // добавим в массив,
Baselvl[ii]:=enchlvl;
index :=ii;
BREAK; { прекращаем цикл }
end;
end;
end;
end;
//==========================
procedure ChooseInventory;
var
OID, lvl:integer;
begin
if (ItemOID>0) and start then begin
sumitemID:=0;
sumitemID:=Getsumitem(ItemOID,3,5); // считаем предметы для заточки
minlvl:=Baselvl[1];
for ii:=2 to index do
if Baselvl[ii] < minlvl then
minlvl:=Baselvl[ii];// мин заточка
objectOID:=0;
if (sumitemID > sumitem) then objectOID:=GetObjectID(ItemOID);//находим по ItemID предмет с ObjectID
if (objectOID = 0) then begin
start:=false;
SendMsg2('Больше предметов c ID : '+IntToStr(ItemOID)+' для заточки НЕТ ! ! ! ! ');
lvl:=0;
for i:=1 to max do
if (BaseItems[i,3] = ItemOID) then begin
OID:=BaseItems[i,2];
lvl:=BaseItems[i,11];
SendMsg2('Предмет c ID : '+IntToStr(ItemOID)+' с ObjectID : '+IntToStr(OID)+' заточен до : '+IntToStr(lvl)+' ');
end;
end;
end;
end;
//=========================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(ItemOID:integer) : integer;
var
ID,i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
if autoMsg then SendMsg2( '*******************************************' );
if (ItemOID>0) then begin
if autoMsg then SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(ItemOID)+' ');
if autoMsg then SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3] = ItemOID) and (BaseItems[i,11] = minlvl) and (BaseItems[i,11] < maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
if autoMsg then SendMsg2(' ..... найден предмет для заточки ..... ');
if autoMsg then SendMsg2(' ID : '+IntToStr(ItemOID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+'');
if autoMsg then SendMsg2('------------------------------' );
if (enchantID>0) then Timer02.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
if autoMsg then SendMsg2(' ..... Точим Предмет ..... ');
if autoMsg then SendMsg2( ' ID : '+IntToStr(ItemOID)+' и ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+'' );
if autoMsg then SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
minlvl:=0; maxlvl:=0; enchlvl:=0; ItemEnch:=0;
sumskrol:=0; sumitem:=0; sumitemID:=0;
objectOID:=0; object:=0; enchantObjectID:=0;
enchantID:=0; skrolObjectID:=0;
skrolID:=0; itemID:=0; ItemOID:=0;
t:=0;l:=0;d:=0;index :=0;
flag:=false;
autostart:=false;
start:=false;
autoMsg:=true;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=400; //<<== время выбора предмета
Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=4500; //<<== время между заточкой
SendMsg2( ' в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предмет ! !' );
SendMsg2( ' Соцдействие ДА - откр окно управления ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then begin Resultmaxlvl;pck:='';exit;end; //
if FromClient and (pck[1]=#$56) and (ReadD(2)=24) then begin
ShowHTML(HTML); pck:='';exit; end;
if FromClient and (pck[1]=#$23) then begin ActionUse; pck:='';exit;end; //
begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
stopselectskrol;
buf:=hstr('14');
SendToServerEx(myname);
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' ID предмета : '+IntToStr(ItemOID)+' для заточки');
sumitemID:=0;
sumitem:=0;
sumitemID:=Getsumitem(ItemOID,3,5); // считаем предметы для заточки
SendMsg2 (' Предметов для заточки с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
if (sumitemID > 1) then sumitem:=1;
stopselectskrol;
end;
end;
end;
end;
end.
Мб у каго то нету Скрипт на ФЛуд чата без бана..открывает отдельное окно чата.
const
MaxMessages = 1000;
var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
box : TCheckBox;
every : TEdit;
_Name : TEdit;
i: Integer;
tm:TTimer;
Message, Name: String;
procedure SendMs(Sender: TObject);
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);
SendToServerEx(_Name.Text);
end;
end;
procedure onNewCommand(obj:TObject;key:string);
var i:integer;
var symbol:Variant;
var after:string;
begin
if (key[1]=#$0D) then begin
SendMs(obj);
symbol := etext.Text[1];
after := '';
if symbol = '#' then after := '#';
if symbol = '!' then after := '!';
if symbol = '@' then after := '@';
if symbol = '$' then after := '$';
if symbol = '%' then after := '%';
etext.Text := after;
end;
end;
procedure onTimer(Sender:TObject);
begin
tm.Interval := StrToInt(every.Text);
if box.checked = true then SendMs(Sender);
end;
procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poDesigned ;
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:=48;
etext:=tedit.Create(penel);
etext.parent:=penel;
button:=tbutton.Create(penel);
button.parent:=penel;
button.top := etext.height;
button.caption:='Send';
button.onClick:=@SendMs;
box := TCheckBox.Create(penel);
box.parent := penel;
box.Top := etext.height + 2;
box.Left := button.width + button.left +2;
box.Caption := 'Шторм через: ';
every:=tedit.Create(penel);
every.parent:=penel;
every.Left := box.Left + box.Width;
every.Top := button.top;
every.Text := IntToStr(3000);
tm := TTimer.Create(frm);
tm.Interval := 1000;
tm.Enabled := true;
tm.OnTimer := @OnTimer;
etext.OnKeyPress := @onNewCommand;
_Name:=tedit.Create(frm);
_Name.parent:=frm;
_Name.Text := '';
frm.Show;
end;
procedure SaveToFile(prefix:string);
var name:string;
begin
name := prefix+'.'+ConnectName+'.'+DateToStr(Date)+'.'+Tim eToStr(Time)+'.txt';
while Pos(':',name) <> 0 do begin
name[Pos(':',name)] := '-';
end;
m.Lines.SaveToFile(name);
end;
procedure Free;
begin
SaveToFile('ChatLog');
box.Free;
every.Free;
tm.Free;
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;
var tp:integer;
var ct:string;
var MessageCounter:integer;
begin
if _Name.Text = '' then _Name.Text := ConnectName;
if FromServer and (ConnectName = _Name.Text) and (pck[1]=#$4a) then
begin
i:=10;
name:=ReadS(i);
message:=ReadS(i);
tp := ReadD(6);
ct := '???';
if tp = 0 then ct := 'GNR';
if tp = 8 then ct := 'TRD';
if tp = 3 then ct := 'PRT';
if tp = 4 then ct := 'CLN';
if tp = 9 then ct := 'ALY';
ct := DateToStr(Date) + ' '+ TimeToStr(Time) + ', '+ ct;
if name='' then name:='Объявление: ';
m.Lines.Add('['+ct+'] '+Name+': '+message);
if MessageCounter > MaxMessages then begin
SaveToFile('Backup');
//m.Lines.Add('BACKUPED');
MessageCounter := 0;
end;
MessageCounter := MessageCounter+1;
end;
end.
Скрипт называется MasterPvP может у каго нету=)
//by mks
//помошник в PvP и PK.
//пьет CP и HP пробирки в нужное время(можно добавить и MP для пвп серваков), и освобождает вас от небоходимости зажатия клавиши Ctrl, которая так меня раздражает!(думаю это раздражает и не только меня)
///////////////////////////////////////////////////////
///////////////Master PvP by MKS v.1.0/////////////////
///////////////////////////////////////////////////////
//после активации скрипта необходимо выпить сначала банку CP, потом HP для получения их ID
const
Name='Name'; //ник перса
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:=10000; //интервал 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;
if CurHP<>0 then
begin
//если вы используете не грэйтер 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
else
begin
TimerHP.enabled:=false;
TimerCP.enabled:=false;
end;
end.
H0oL1GaN
09.11.2009, 19:35
Все скрипты Роботают на Интерлюде, некоторые из них роботают и на С4, может и на камаеле, лично кроме интерлюда не тестил.
В самих скриптах написано где они роботают.
вот Пример: Скрипт слежки за РБ © NLObP , в самом скрипте есть строчка :
interlude=true; //Interlude - true, C4 - false
ето значит что роботает на ИТ\С4.
для ИТ стоит "True" , если вы играете на С4 в етой строчке нужно поменять "True на false" и сохранить.
Вот вроде нормально)
**********
раз так то выложу скипт на тп каторым пользуюсь я хД он круче чем скрипт NLObP'а
Автор скрипта © tiranous
• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
**********
А вот скрипт , слежка за РБ ставите твинка возле рб и когда он появится то твинк будет строчить тому кому надо в ПМ
Автор скрипта © NLObP
• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
**********
Скрипт, Бегущий титул
title := 'Admin postav norm inet lagaet ppc!!! '; - тут ставим текст каторый хотите что б двигался
titleoff := 'ea DRAKON nax #1'; - а ето ваш титул каторый будет стоять после выключения скрипта
Автор скрипта © Br1nk
• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
**********
Ах, вот еще скрипт на ловлю рыбы, описание всередине..
Автор © NLObP
• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
**********
Скрипт, ТП к сопартийцу
Автор © CrazyS
• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
**********
Такс, нашол еще скрипт, для быстрого захвата замка, походу ТПшыт в тронку , сам им непользовался т.к. нетребовался в нём, ето чтото наподобе простого ТП скрипта.
Автор © SeRk
• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
**********
Думаю отчёта с вирус тотала ненадо, т.к. ето простые .тхт файлы)
да еще и я не занимаюсь таким))
Пользуемся :D) на здоровье)
Не забываем жать ©П©)))
P.S. - Если гдето не та ссылка ну например 2 одинаковые ссылки, то пишыте я перезалью, просто я быстро писал может гдето чтото пропустил)
const
nik='NIK'; //сюда свой ник
Enchant=5;
var
UseItem, EnchantItem: string;
Count, CurrentEnch: integer;
Timer01: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=3200; //скорость точки
end;
procedure OnTimer01(Sender: TObject);
begin
buf:=UseItem;
SendToServerEx(nik);
buf:=EnchantItem;
SendToServerEx(nik);
end;
procedure Free;
begin
Timer01.free;
count:=0;
CurrentEnch:=0;
end;
begin
if FromServer and (pck[1]=#$87) then
begin
CurrentEnch:=ReadD(2);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
ВОТ НОРМ СКРИПТ НА АВТО ТОЧКУ.....здесь не надо нечего делать кроме как сперва врубить скрипт, 1 раз заточить и нажать соц. действие привецтвие..... токо есть одна проблема оно точитса без ограничения.....переделайте плз этот скрипт чтобы останавливалось до указанои точки очень прошу.....
Антитаргет (пробывал на 3.1.9)
var act:integer; me1:char; me2:char; me3:char; me4:char; nm:integer; t1:char; t2:char; t3:char; t4:char; nt:integer; shade:integer; mz:integer; pz:integer; tz:integer; hz:integer;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
begin
//анализ ИД себя
if nm<>1 then
begin
if FromServer and (pck[1]=#$04) then
begin
me1:=pck[18];
me2:=pck[19];
me3:=pck[20];
me4:=pck[21];
nm:= 1;
end;
end;
//защитная часть
if FromClient and (pck[1]=#$1B) and (pck[2]=#$06) then
begin
act:=1;
SendMsg('AT system on');
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$05) then
begin
act:=0;
SendMsg('AT system off');
end;
if FromClient and (pck=#$38#$3C#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=1;
SendMsg('Advanced m.def on')
end;
if FromClient and (pck=#$38#$3C#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=0;
SendMsg('Advanced m.def off')
end;
if FromClient and (pck=#$38#$3F#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=1;
SendMsg('Advanced p.def on')
end;
if FromClient and (pck=#$38#$3F#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=0;
SendMsg('Advanced p.def off')
end;
if FromClient and (pck=#$38#$42#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=1;
SendMsg('Anti-target on')
end;
if FromClient and (pck=#$38#$42#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=0;
SendMsg('Anti-target off')
end;
if FromClient and (pck=#$38#$45#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=1;
SendMsg('Hit"n"Hide on')
end;
if FromClient and (pck=#$38#$45#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=0;
SendMsg('Hit"n"Hide off')
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$03) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
if act=1 then
begin
if tz=1 then
begin
if FromServer and (pck[1]=#$29) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
if mz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
if pz=1 then
begin
if FromServer and (pck[1]=#$05) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
if hz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;
end;
//часть таргета
if FromClient and (pck[1]=#$04) then
begin
nt:=1;
t1:=pck[2];
t2:=pck[3];
t3:=pck[4];
t4:=pck[5];
end;
if FromClient and (pck[1]=#$37) then
begin
nt:=0;
end;
if nt=1 then
begin
if FromClient and (pck[1]=#$30) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$04) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
//shadowmelt
if FromClient and (pck[1]=#$1B) and (pck[2]=#$07) then
begin
shade:=1;
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
SendMsg('Skipped to Shadows');
end;
if FromClient and (pck[1]=#$1B) and (pck[2]=#$08) then
begin
shade:=0;
buf:=#$30#$00#$00;
SendToServer;
SendMsg('Reveal from Darkness');
end;
if shade = 1 then
begin
if FromClient and (pck[1]=#$30) then pck:='';
end;
end.
И так управление - нажимает Social Yes, система запущена, но еще не подключены модули... Подключаем те которые нам нужны...
пишем в ПАТИ ЧАТ:
т+ / т- - Включение/Выелючение АВТО антитаргета - таргет сбрасывется когда вас БЕРУТ НА ТАРГЕТ, тоесть он пытается выделить, а вы сбрасываете!
м+ / м- , п+ / п- - дополнительная магическая и физическая защита, непомню уже сам как работает (да у меня и не работает, изза лагучести инета) но знакомый говорит, если включить их в паре, то сбивает каст когда пытаются кастануть на вас заклинание, и "ичезает" прямо во время физической атаки на вас...
х+ / х- - уход в хайд после каждой своей физической атаки
Там есть еще такая штукенция, что после хайда, предыдущий таргет выберется автоматом (этого не видно в клиенте но он выделится, протестите на мобах)
Social Bow / Social Unaware - исчезнуть и появится, ну это кусок скрипта ХИНТА на его антитаргет.}
Добавлено через 6 минут
Инвиз
(только при том вы не можите двигаться а просто исчезаете, сильной полезности нет , но может кому нить пригодиться)
И так управление - нажимает Social Yes,No
//Invisible Mode
var
pck48:string;
hidden:boolean;
i,x,y:integer;
procedure Init;
begin
hidden:=false;
pck48:='';
randomize;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(2);
WriteS('hLaPEx');
WriteS(msg);
SendToClient;
end;
begin
if FromServer then exit;
case ord(pck[1]) of
$1B:case ord(pck[2]) of
$05:begin
SendMsg('invisible_mode: Off');
pck:=#$30;
hidden:=false;
end;
$06:begin
if pck48='' then exit;
SendMsg('invisible_mode: On');
hidden:=true;
pck:=pck48;
i:=2;
x:=ReadD(i);
y:=ReadD(i);
x:=x+1000+round(random*200)-100;
y:=y+1000+round(random*200)-100;
buf:=pck;
WriteD(x,2);
WriteD(y,6);
pck:=buf;
end;
end;
$48:pck48:=pck;
$30:if hidden then pck:='';
end;
end.
Ни одно ни другое что то нехочет работать :pandal: Пишет ошибка в этой строчке procedure SendMsg(msg:string);
H0oL1GaN
10.11.2009, 16:04
да не роботают ети скрипты, первый наполовину робочий.. когда нажываеш социалбов то ты как будто исчезаеш, стоиш на месте но бить тебя не могут, и ето только на некоторых серверах роботает..
что б первый зароботал , я делал текст инит ,в версии 3.4.1.81 и когда у меня выделяло то что плохо написано я просто удалял там какраз строчку ету:
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
и сохраняеш, и должно роботать , у меня впринцыпе роботало .. но говорю еще раз на малом количестве серверов, и зависит от сборки
надо добавить 2 к SendMsg везде
как пример :
SendMsg2(надо добавить 2 к SendMsg везде);
procedure SendMsg2(msg:string);
Вопрос не в тему конечно, но если кто умеет писать скрипты, скажите плиз какие тут используются языки программирования, а то понимаю отдельные строки но в целом не могу понять, а так как занимаюсь веб программированием смогу в легкую разобраться и писать сам скрипты и тут выкладывать, мб есть какая то литературка почитать? Можно все в ЛС писать
_[Ссылки могут видеть только зарегистрированные и активированные пользователи]
ВОТ НОРМ СКРИПТ НА АВТО ТОЧКУ.....здесь не надо нечего делать кроме как сперва врубить скрипт, 1 раз заточить и нажать соц. действие привецтвие..... токо есть одна проблема оно точитса без ограничения.....переделайте плз этот скрипт чтобы останавливалось до указанои точки очень прошу.....
ну, раз так хочется - лови:
const
nik='NIK'; //сюда свой ник
Enchant=5;
var
UseItem, EnchantItem: string;
Count, CurrentEnch: integer;
Timer01: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=3200; //скорость точки
end;
procedure OnTimer01(Sender: TObject);
begin
buf:=UseItem;
SendToServerEx(nik);
buf:=EnchantItem;
SendToServerEx(nik);
end;
procedure Free;
begin
Timer01.free;
count:=0;
CurrentEnch:=0;
end;
begin
if FromServer and (pck[1]=#$87) then
begin
if ReadD(2)=0 then inc(CurrentEnch);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
begin
if FromServer and (pck[1]=#$87) then
begin
if ReadD(2)=0 then inc(CurrentEnch);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
здесь пакет от сервера о заточки 87
на разных сервах по разному приходит инфа
есть : 0-заточили.2- отмена.3-сломали.
а есть приходит уровень на какой заточили предмет
Простенький скрипт для "глухих", перенаправляет сообщения
немного добавил
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
//===========================================
myname='TAMBIK'; //<<== пишем свой НИК
//===========================================
// открыть управление соцдействие ДА
// Автор mks . coderx.ru .добавил TAMBIK
//===========================================
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<font color="04fbfb">Cкрипт сообщения на экран</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=1>'+
'<font color="04fbfb">системные сообщения</font><br>'+
'<button value=" Trade " action="bypass Trade" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Party " action="bypass Party" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Clan " action="bypass Clan" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Alli " action="bypass Alli" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" P M " action="bypass PM" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Hero " action="bypass Hero" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL"> mks </font><br>'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" стоп" action="bypass stop" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL">TAMBIK</font><br>'+
'</center></body></html>';
//==========================================
var
Bypass:string;
autoText:Boolean;
TextType:integer;
//==========================================
// ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClientEx(myname);
end;
//========================
procedure ActionUse; //2=PM, 3=Party, 4=Clan, 8=Trade, 9=Alli, 17=Hero
begin
Bypass:=ReadS(2);
case Bypass of
'Trade':begin autoText:=true;TextType:=8; end;//Trade
'Party':begin autoText:=true;TextType:=3; end;//Party
'Clan':begin autoText:=true;TextType:=4; end;//Clan
'Alli':begin autoText:=true;TextType:=9; end;//Alli
'PM':begin autoText:=true;TextType:=0; end;//PM
'Hero':begin autoText:=true;TextType:=17;end;//Hero
'stop':begin autoText:=false;TextType:=0;end;
end;
end;
//-----------------------------------------
procedure Init;
begin
TextType:=0;
autoText:=false;
end;
procedure Free;
begin
end;
//Tип: 0x4A (CreatureSay)
//Pазмер: 83+2
//Время прихода: 12:35:56:375
//0002 d ObjectID: 268899150 (0x1007134E)
//0006 d TextType: 15 (0x0000000F)
//000A s CharName: MaFaca
//0018 s Text: ВТТ ВАШ СЕПОР С СА, ПРЕДЛЫ ПМ
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromClient and (pck[1]=#$34) and (ReadD(2)=06) then begin ShowHTML(HTML); pck:='';exit;end;
if FromClient and (pck[1]=#$23) then begin ActionUse; pck:='';exit;end; //
if FromServer and autoText and (pck[1]=#$4A) and (ReadD(6)=TextType) then begin
buf:=pck;
WriteD(15,6);
pck:=buf;
end;
end.
для Gracia Final
в скрипте находим
/===========================================
procedure CreateItemBase;
var
i, j, ListCount : integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
ItemBase[1,i]:=ReadD(j);
ItemBase[2,i]:=ReadD(j);
inc(j,4);
ItemBase[3,i]:=ReadD(j);
inc(j,48); // <<<< == ДОЛЖНО БЫТЬ ТАК
end;
StringList.Clear;
try
Скрипт реально работает, на всех сборках la2base и везде где у бафера есть кнопки heal,cp,mana,Лично проверял.//Скрипт на регенерацию Маны,Хп,Цп на сервере *****
//Для активации окна введите в парти чат '.window'
//Перед включением скрипта нужно стоять рядом с бафером!
//Для регенерации хп нужно просто посылать '.heal' в парти чат
//Работает на сервер где есть у бафера регенерация хп мп цп
//Версия 6.0 Final
//Автор Crazy$
var
// переменная
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми в таргет бафера и сделай шаг!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
begin
if FromClient and (pck[1]=#$48) then
begin
v:=ReadD(14); n:=ReadD(18);
end;
end;
//запоминание пакета ValidatePosition
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if fromclient and (pck=#$38#$2E#$00#$77#$00#$69#$00#$6E#$00#$64#$00# $6F#$00#$77#$00#$00#$00#$03#$00#$00#$00) then
begin
buf:=#$04;
WriteD(a);
WriteD(c);
WriteD(d);
WriteD(e);
WriteC(f);
SendToServer;
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
buf:=hstr('37 01 00');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
begin
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if FromClient and (pck=#$38#$2E#$00#$68#$00#$65#$00#$61#$00#$6C#$00# $00#$00#$03#$00#$00#$00) then
begin
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
end;
end.
мб надо галчки потавить?),сори за оф топ
для версии l2phx выше 100
прописать путь к файлу ItemsID.ini
в скрипте находим
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
пишем так :
ItemsName.LoadFromFile('settings\ItemsID.ini');
Еще работает кое где
// автор ТАМБИК
// Kamael-Hellbound
const
Name = 'TAMBIK'; // Имя
procedure Init;
begin
end;
procedure Free;
begin
end;
// пати сам с собой
// чара кто будит приглашать в пати и предлогать трейд .можно грузить без l2phx
// кидаешь чару TAMBIK пати - скрипт принимает пати - 1раз
// кидаешь чару TAMBIK трейд - скрипт принимает пати - не больше
// положеного колличества членов пати
// передаешь чару TAMBIK лидера пати
// выходишь из пати .итог = >> чар TAMBIK с собой в пати
//основная часть скрипта
//выполняется при приходе каждого пакета если скрипт включен
begin
if FromServer and (pck[1]=#$39) then begin // вам приглашение в пати
buf:=#$43;
WriteD(1); // принять пати
SendToServerEx(Name);
pck:='';
exit;
end;
begin
if FromServer and (pck[1]=#$70) then begin// вам трейд
buf:=#$55;
WriteD(1); // принять пати
SendToServerEx(Name);
pck:='';
exit;
end;
end;
end.
//FreedomEmulator v1.0beta
//скрипт скрывающий нпс и\или игроков
//помогает снять нагрузку с несчастного клиента
//при убивании пакетов активность можно посмотреть в отдельном окне
//тестировался на la2c6 abyss 10alpha
//(c)metalFan
const name=('metalFan');
var
frm,frm2: TForm;
Button1,Button2,Button3,Button4,Button5: TButton;
m:TMemo;
box:TGroupBox;
i,k,RaceID,SexID,ClassID: integer;
r1,r2,r3,s:boolean;
CharName,FName,VictimName,race,sex,class,message: string;
Inventory: array[0..79,0..9] of integer;
IdItem:real;
zu:Tlabel;
procedure Init; //Вызывается при включении скрипта
begin
//формочка
frm2 := TForm.Create(Application);
frm2.Caption := 'Activity (player\class\race\sex)';
frm2.BorderStyle := bsSizeable;
frm2.Position := poDesigned;
frm2.Width:=300;
frm2.Height:=200;
frm2.OnClose := @FormClose;
frm := TForm.Create(nil);
frm.Caption := 'FreedomEmulator by metalFan v1.0b';
frm.BorderStyle := bsDialog;
frm.Position := poScreenCenter;
frm.Width:=295;
frm.Height:=120;
frm.OnClose := @FormClose;
box:=TGroupBox.Create(nil);
box.parent:=frm;
box.Width:=273;
box.Height:=73;
box.Left := 8;
box.top := 8;
box.align:=alnone;
zu:=Tlabel.create(nil);
zu.parent:=frm;
zu.Width:=73;
zu.Height:=25;
zu.top:=52;
zu.left:=184;
zu.Caption:=('(c)metalFan');
zu.Transparent := False;
zu.Visible := True;
m:=TMemo.Create(frm2);
m.parent:=frm2;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
Button1 := TButton.Create(frm);
Button1.Parent := frm;
Button1.Caption := '>.<';
Button1.Left := 16;
Button1.Top := 16;
Button1.onClick := @Action1;
Button1.OnMouseMove := @Button1MouseMove;
Button2 := TButton.Create(frm);
Button2.Parent := frm;
Button2.Caption := '>.<';
Button2.Left := 96;
Button2.Top := 16;
Button2.onClick := @Action2;
Button2.OnMouseMove := @Button2MouseMove;
Button3 := TButton.Create(frm);
Button3.Parent := frm;
Button3.Caption := '>.<';
Button3.Left := 16;
Button3.Top := 48;
Button3.onClick := @Action3;
Button3.OnMouseMove := @Button3MouseMove;
Button4 := TButton.Create(frm);
Button4.Parent := frm;
Button4.Caption := '>.<';
Button4.Left := 96;
Button4.Top := 48;
Button4.onClick := @Action4;
Button4.OnMouseMove := @Button4MouseMove;
Button5 := TButton.Create(frm);
Button5.Parent := frm;
Button5.Caption := '>.<';
Button5.Left := 176;
Button5.Top := 16;
Button5.onClick := @Action5;
Button5.OnMouseMove := @Button5MouseMove;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 4B 00 69 00 6C 00 6C 00 20 00 50 00 6C 00 61 00 79 00 65 00 72 00 73 00 20 00 2D 00 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 35 04 42 04 20 00 32 04 41 04 35 04 45 04 20 00 3F 04 35 04 40 04 41 04 3E 04 3D 04 30 04 36 04 35 04 39 04 2C 00 20 00 4B 00 69 00 6C 00 6C 00 20 00 4E 00 70 00 63 00 20 00 2D 00 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 35 04 42 04 20 00 32 04 41 04 35 04 45 04 20 00 32 04 35 04 3D 04 34 04 3E 04 40 04 3E 04 32 04 20 00 3A 00 29 00 20 00 2C 00 20 00 43 00 75 00 72 00 65 00 20 00 2D 00 20 00 32 04 4B 04 3A 04 3B 04 4E 04 47 04 30 04 35 04 42 04 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 3B 04 3A 04 43 04 2C 00 20 00 34 04 3B 04 4F 04 20 00 3E 04 42 04 3E 04 31 04 40 04 30 04 36 04 35 04 3D 04 38 04 4F 04 20 00 32 04 41 04 35 04 45 04 20 00 32 04 3E 04 3A 04 40 04 43 04 33 04 20 00 32 04 3A 04 3B 04 4E 04 47 04 38 04 42 04 35 04 20 00 38 04 20 00 37 04 30 04 42 04 35 04 3C 04 20 00 32 04 4B 04 3A 04 3B 04 4E 04 47 04 38 04 42 04 35 04 20 00 32 04 38 04 34 04 35 04 3E 04 41 04 4A 04 35 04 3C 04 3A 04 43 04 20 00 40 04 3E 04 3B 04 38 04 3A 04 3E 04 32 04 20 00 28 00 41 04 29 00 6D 00 65 00 74 00 61 00 6C 00 46 00 61 00 6E 00 00 00');
SendToClientEx(name);
frm.show;
frm2.Show;
r1:=False;
r2:=False;
r3:=True;
s:=true;
end;
procedure Free; //Вызывается при выключении скрипта
begin
button1.free;
button2.free;
button3.free;
m.free;
frm2.free;
frm.free;
end;
//(c)NLObP скажи нет случайному закрытию формы
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end;
procedure OnDisconnect(WithClient: Boolean); //Вызывается при установке соединения
begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
end;
procedure Button1MouseMove(Sender: TButton);
begin
Button1.Caption := 'Kill players';
end;
procedure Button2MouseMove(Sender: TButton);
begin
Button2.Caption := 'Kill npc';
end;
procedure Button3MouseMove(Sender: TButton);
begin
Button3.Caption := 'Stop filter';
end;
procedure Button4MouseMove(Sender: TButton);
begin
Button4.Caption := 'Switch';
end;
procedure Button5MouseMove(Sender: TButton);
begin
if s=true then
begin
Button5.Caption := 'Hide Monitor'
end else
begin
Button5.Caption := 'Show Monitor';
end;
end;
procedure Action1(Sender: TButton);
begin
r1:=True;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 23 04 31 04 38 04 32 04 30 04 4E 04 20 00 38 04 33 04 40 04 3E 04 3A 04 3E 04 32 04 00 00');
SendToClientEx(name);
end;
procedure Action2 (Sender: TButton);
begin
r2:=True;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 23 04 31 04 38 04 32 04 30 04 4E 04 20 00 32 04 35 04 3D 04 34 04 3E 04 40 04 3E 04 32 04 00 00');
SendToClientEx(name);
end;
procedure Action3 (Sender: TButton);
begin
Button3.Caption := 'Load...';
r1:=False;
r2:=False;
buf:=Hstr('CF');
SendToServerEx(name);
delay(5000);
Button3.Caption := 'Done';
end;
procedure Action4 (Sender: TButton);
begin
if r3=true then
begin
r3:=False;
Button4.Caption := 'Stop...';
m.Lines.Add('Остановка монитора');
end
else
begin r3:=true;
Button4.Caption := 'Start...';
m.Lines.Add('Запуск монитора');
end;
delay(1000);
Button4.Caption := 'Done';
end;
procedure Action5 (Sender: TButton);
begin
if s=true then
begin
m.Lines.Add('Сворачиваю окошко с живностью');
s:=false;
m.Lines.Add('>.<');
delay(1000);
frm2.hide;
Button5.Caption := '>.<';
end else
begin
frm2.Show;
s:=True;
delay(1000);
m.Lines.Add('Разворачиваю окошко с живностью');
Button5.Caption := '>.<';
end;
end;
//(c)Shura1oplot инвентарь
procedure InventoryCreate;
var
i,k: integer;
begin
for i:=0 to 79 do
if (i<ReadH(4)) then begin
Inventory[i,0]:=ReadH(i*28+6); // itemType1
Inventory[i,1]:=ReadD(i*28+8); // ObjectId
Inventory[i,2]:=ReadD(i*28+12); // ItemID
end else
for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нулями
end;
function GetInv(obj,up,down:integer): integer;
var
i: integer;
begin
for i:=0 to 79 do
if (Inventory[i,up]=obj) then begin
Result:=Inventory[i,down];
exit;
end;
Result:=-1;
end;
begin
if (FromServer) and (ConnectName=name) then
case pck[1] of
#$03: begin
if r1=true then
begin
pck:='';
end;
end;
#$16: begin
if r2=true then
begin
pck:='';
end;
end;
end;
if FromServer and (pck[1]=#$03) and r3=true then
begin
k:=22;
FName:=ReadS(k);
RaceID:=ReadD(k);
SexID:=ReadD(k);
ClassID:=ReadD(k);
case RaceID of
0:race:='Human';
1:race:='Elf';
2:race:='Dark Elf';
3:race:='Оrc';
4:race:='Dwarf';
end;
case SexID of
0:sex:='Male';
1:sex:='Female';
end;
case ClassID of
0:class:='Fighter';
1:class:='Warrior';
2:class:='Gladiator';
88:class:='Duelist';
3:class:='Warlord';
89:class:='Dreadnought';
4:class:='Knight';
5:class:='Paladin';
90:class:='PhoenixKnight';
6:class:='DarkAvenger';
91:class:='HellKnight';
7:class:='Rogue';
8:class:='TreasureHunter';
93:class:='Adventurer';
9:class:='Hawkeye';
92:class:='Sagittarius';
10:class:='Mage';
11:class:='Wizard';
12:class:='Sorceror';
94:class:='Archmage';
13:class:='Necromancer';
95:class:='Soultaker';
14:class:='Warlock';
96:class:='ArcanaLord';
15:class:='Cleric';
16:class:='Bishop';
97:class:='Cardinal';
17:class:='Prophet';
98:class:='Hierophant';
18:class:='Fighter';
19:class:='Knight';
20:class:='TempleKnight';
99:class:='EvaTemplar';
21:class:='SwordSinger';
22:class:='Scout';
23:class:='PlainsWalker';
101:class:='WindRider';
24:class:='SilverRanger';
102:class:='MoonlightSentinel';
25:class:='Mage';
26:class:='Wizard';
27:class:='SpellSinger';
103:class:='MysticMuse';
28:class:='ElementalSummoner';
104:class:='ElementalMaster';
29:class:='Oracle';
30:class:='Elder';
105:class:='EvaSaint';
31:class:='Fighter';
32:class:='PaulusKnight';
33:class:='ShillienKnight';
106:class:='ShillienTemplar';
34:class:='BladeDancer';
107:class:='SpectralDancer';
35:class:='Assassin';
36:class:='AbyssWalker';
108:class:='GhostHunter';
37:class:='PhantomRanger';
109:class:='GhostSentinel';
38:class:='Mage';
39:class:='DarkWizard';
40:class:='Spellhowler';
110:class:='StormScreamer';
41:class:='PhantomSummoner';
111:class:='SpectralMaster';
42:class:='ShillienOracle';
43:class:='ShillienElder';
112:class:='ShillienSaint';
44:class:='Fighter';
45:class:='Raider';
46:class:='Destroyer';
113:class:='Titan';
47:class:='Monk';
48:class:='Tyrant';
114:class:='GrandKhauatari';
49:class:='Mage';
50:class:='Shaman';
51:class:='Overlord';
115:class:='Dominator';
52:class:='Warcryer';
116:class:='Doomcryer';
53:class:='Fighter';
54:class:='Scavenger';
55:class:='BountyHunter';
117:class:='FortuneSeeker';
56:class:='Artisan';
57:class:='Warsmith';
118:class:='Maestro';
end;
Message:=(class+ ' |' +race+ ' |' +sex+ ' |');
m.Lines.Add(FName+' | '+Message);
end;
end.
end.
end.
в общем идете вы в гиран мило купить бутылки у вендора на сервере где онлайн под пару тысяч закатил, а там...
лаги... всюду гномы трейдеры и ктото бегает в общем очень плохо ващему слабому компьютеру...
но этот скрипт если не полностью, (MoveToPawn, MoveToLocation ни как не убить =\ хотя...) то облягчит вам жизнь, он скроет всех ненужных игроков и\или вендоров
функции можно включать\отключать в общем методом тыка думаю разберетесь
(с)metalFan
// Бегущая строка в титуле, ©Br1nk v0.2
// пишем rt в пати чате для включения и выключения
var
title, temp, titleoff: string;
activated, mult, safemode: integer;
tmr: TTimer;
procedure Init; //Вызывается при включении скрипта
begin
title := 'ВСЕХ ЛЮБЛЮ НА СВЕТЕ Я ЭТО РОДИНА МОЯ!'; // текст титула
titleoff := '-=ШОН=-';
activated := 0; // Определяет, включается ли бегущая строка сразу при запуске скрипта или только после введения команды rt в патичат
safemode := 1; // безопасный режим, стандартная длина титула. Если вы играете на кривой яве, поставьте 0, это даст вам более длинный титул, соответственно выглядит пижже..)
tmr := TTimer.Create(nil);
tmr.Interval := 800; // Частота обновления (мс)
tmr.Enabled := False;
tmr.OnTimer := @Tick;
mult := 4; // Определяет на сколько букв сдвигается строка в титуле при обновлении
end;
procedure Free;
begin
tmr.Free;
SetTitle(titleoff);
end;
procedure Tick;
begin
temp := copy(title, 2 + mult, Length(title) - 1 - mult) + copy(title, 1, 1 + mult);
title := temp;
if safemode then
SetTitle(Copy(temp, 0, 16))
else
SetTitle(temp);
end;
procedure Announce(text:string); // for debug purposes
begin
buf := #$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(text);
SendToClient;
end;
procedure SetTitle(text: string);
begin
buf := HStr('55');
WriteS(ConnectName);
WriteS(text);
WriteD(0);
SendToServer;
end;
begin
if FromClient and (pck=HStr('38 72 00 74 00 00 00 03 00 00 00')) then
begin
if (activated = 1) then
begin
activated := 0;
SetTitle(titleoff);
Announce('Title script powered off.');
end
else
activated := 1;
pck := '';
end;
if (activated = 1) then
tmr.Enabled := True
else
tmr.Enabled := False;
end.
бегущий титул ))пишем все что угодно ,мож кому пригодится
ТЕСТИЛ НА ВЕРСИИ 4,3,0,13
включаем скрипт,пишем rt в пати чат
пригодится дайте спасибку)))
H0oL1GaN
02.02.2010, 16:32
[CODE]//Список констант
const
Name='siiion'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=100; //количество слотов в инвентаре чара
//............................................
//Список переменных
var
Item, scrl:integer;
ScrollID, ScrollOID:integer; //ScrollID скролла заточки
ItemID,ItemOID:integer; //ItemID затачиваемого предмета
MaxEnchLvl:integer; //уровень заточки который требуется достичь
ItemBase: array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ready, add : boolean;
timer : TTimer;
ItemCount, CurEnchLvl: integer;
SocialID : integer; // вспомогательная
ItemsName, StringList : TStringList; //названия предметов, имена продавцов
FormMain : TForm; //Создаваемая форма
Splitter1 : TSplitter;
Splitter2 : TSplitter;
Stats : TMemo;
Msg : TMemo;
Panel1 : TPanel;
GroupBox2 : TGroupBox;
Label2 : TLabel;
Label4 : TLabel;
Label12 : TLabel;
Label13 : TLabel;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxItem.Checked
then begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);
ComboBoxItem.Enabled:=false; //выключаем
end else begin
ItemID:=0; //отмена
ItemOID:=0;
ComboBoxItem.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];
// ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
EditItemOID.Text:=Inttostr(ItemID);
EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled:=false; //выключаем
end else begin
ScrollID:=0; //отмена
ScrollOID:=0;
ComboBoxScroll.Enabled:=true; //включаем
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];
// ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Str ings[ComboBoxScroll.ItemIndex]);
EditScrollOID.Text:=Inttostr(ScrollID);
EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
CurEnchLvl:=0;
Edit2.text:=inttostr(CurEnchLvl);
msg.Lines.Add('Команда Старт!!!');
timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
msg.Lines.Add('Команда Стоп!!!');
timer.enabled:=false;
ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
// MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Stri ngs[ComboBoxHPotion.ItemIndex]);
// EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
// EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);
TRY
//------------------------
//Свойства формы
Result.Caption := 'Enchant by NLObP v.0.7';
Result.Left := 397;
Result.Top := 233;
Result.Width := 581;
Result.Height := 205;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//------------------------
//......................................
//Splitter1
Splitter1 := TSplitter.Create(Result);
Splitter1.Parent := Result;
Splitter1.Align := alBottom;
Splitter1.Color := clBtnFace;
Splitter1.Left := 0;
Splitter1.Top := 103;
Splitter1.Width := 573;
Splitter1.Height := 3;
Splitter1.Visible := TRUE;
Splitter1.Tag := 0;
//......................................
//......................................
//Splitter2
Splitter2 := TSplitter.Create(Result);
Splitter2.Parent := Result;
Splitter2.Align := alRight;
Splitter2.Color := clBtnFace;
Splitter2.Left := 442;
Splitter2.Top := 0;
Splitter2.Width := 1;
Splitter2.Height := 103;
Splitter2.Visible := TRUE;
Splitter2.Tag := 0;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 443;
Stats.Top := 0;
Stats.Width := 130;
Stats.Height := 103;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alRight;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Msg
Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 106;
Msg.Width := 573;
Msg.Height := 65;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 1;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 442;
Panel1.Height := 103;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 440;
GroupBox2.Height := 101;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alClient;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 10;
Label1.Top := 70;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Уровень Макс.:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label1
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 170;
Label3.Top := 70;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Мин.:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Edit1
Edit1 := TEdit.Create(Result);
Edit1.Parent := GroupBox2;
Edit1.Left := 90;
Edit1.Top := 67;
Edit1.Width := 60;
Edit1.Height := 21;
Edit1.Visible := TRUE;
Edit1.Tag := 0;
Edit1.Enabled := TRUE;
Edit1.Hint := 'Введи желаемый уровень заточки';
Edit1.ShowHint := TRUE;
Edit1.Text := '65535';
Edit1.Font.Name := 'Tahoma';
Edit1.Font.Size := 8;
Edit1.Font.Color := clWindowText;
Edit1.Color := clWindow;
Edit1.TabOrder := 5;
Edit1.TabStop := TRUE;
Edit1.ReadOnly := FALSE;
Edit1.MaxLength := 0;
Edit1.AutoSize := TRUE;
Edit1.OnExit := @Edit1_Exit;
//......................................
//......................................
//Edit2
Edit2 := TEdit.Create(Result);
Edit2.Parent := GroupBox2;
Edit2.Left := 199;
Edit2.Top := 67;
Edit2.Width := 60;
Edit2.Height := 21;
Edit2.Visible := TRUE;
Edit2.Tag := 0;
Edit2.Enabled := TRUE;
Edit2.Hint := 'Какого уровня смогли достичь';
Edit2.ShowHint := TRUE;
Edit2.Text := '0';
Edit2.Font.Name := 'Tahoma';
Edit2.Font.Size := 8;
Edit2.Font.Color := clWindowText;
Edit2.Color := clWindow;
Edit2.TabOrder := 5;
Edit2.TabStop := FALSE;
Edit2.ReadOnly := TRUE;
Edit2.MaxLength := 0;
Edit2.AutoSize := TRUE;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 416;
Label2.Top := 19;
Label2.Width := 18;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'шт.';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 416;
Label4.Top := 43;
Label4.Width := 18;
Label4.Height := 13;
Label4.Visible := TRUE;
Label4.Tag := 0;
Label4.Enabled := TRUE;
Label4.Hint := '';
Label4.ShowHint := FALSE;
Label4.Caption := 'шт.';
Label4.Transparent := TRUE;
Label4.WordWrap := FALSE;
Label4.Alignment := taLeftJustify;
Label4.Layout := tlTop;
Label4.AutoSize := TRUE;
Label4.Align := alNone;
Label4.Font.Name := 'Tahoma';
Label4.Font.Size := 8;
Label4.Font.Color := clWindowText;
Label4.Color := clBtnFace;
//......................................
//......................................
//Label12
Label12 := TLabel.Create(Result);
Label12.Parent := GroupBox2;
Label12.Left := 273;
Label12.Top := 3;
Label12.Width := 33;
Label12.Height := 13;
Label12.Visible := TRUE;
Label12.Tag := 0;
Label12.Enabled := TRUE;
Label12.Hint := '';
Label12.ShowHint := FALSE;
Label12.Caption := 'ItemID';
Label12.Transparent := TRUE;
Label12.WordWrap := FALSE;
Label12.Alignment := taLeftJustify;
Label12.Layout := tlTop;
Label12.AutoSize := TRUE;
Label12.Align := alNone;
Label12.Font.Name := 'Tahoma';
Label12.Font.Size := 8;
Label12.Font.Color := clWindowText;
Label12.Color := clBtnFace;
//......................................
//......................................
//Label13
Label13 := TLabel.Create(Result);
Label13.Parent := GroupBox2;
Label13.Left := 349;
Label13.Top := 3;
Label13.Width := 35;
Label13.Height := 13;
Label13.Visible := TRUE;
Label13.Tag := 0;
Label13.Enabled := TRUE;
Label13.Hint := '';
Label13.ShowHint := FALSE;
Label13.Caption := 'Кол-во';
Label13.Transparent := TRUE;
Label13.WordWrap := FALSE;
Label13.Alignment := taLeftJustify;
Label13.Layout := tlTop;
Label13.AutoSize := TRUE;
Label13.Align := alNone;
Label13.Font.Name := 'Tahoma';
Label13.Font.Size := 8;
Label13.Font.Color := clWindowText;
Label13.Color := clBtnFace;
//......................................
//......................................
//CheckBoxItem
CheckBoxItem := TCheckBox.Create(Result);
CheckBoxItem.Parent := GroupBox2;
CheckBoxItem.Left := 18;
CheckBoxItem.Top := 18;
CheckBoxItem.Width := 66;
CheckBoxItem.Height := 17;
CheckBoxItem.Visible := TRUE;
CheckBoxItem.Tag := 0;
CheckBoxItem.Enabled := TRUE;
CheckBoxItem.Hint := 'Поставить галочку если выбрали предмет';
CheckBoxItem.ShowHint := TRUE;
CheckBoxItem.Caption := 'Предмет';
CheckBoxItem.Font.Name := 'Tahoma';
CheckBoxItem.Font.Size := 8;
CheckBoxItem.Font.Color := clWindowText;
CheckBoxItem.Color := clBtnFace;
CheckBoxItem.TabOrder := 0;
CheckBoxItem.TabStop := TRUE;
CheckBoxItem.Checked := FALSE;
CheckBoxItem.AllowGrayed := FALSE;
CheckBoxItem.State := cbUnchecked;
CheckBoxItem.OnClick := @CheckBoxItem_Click;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 90;
ComboBoxItem.Top := 16;
ComboBoxItem.Width := 169;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//ButtonStartEnchant
ButtonStartEnchant := TButton.Create(Result);
ButtonStartEnchant.Parent := GroupBox2;
ButtonStartEnchant.Left := 265;
ButtonStartEnchant.Top := 67;
ButtonStartEnchant.Width := 75;
ButtonStartEnchant.Height := 25;
ButtonStartEnchant.Visible := TRUE;
ButtonStartEnchant.Tag := 0;
ButtonStartEnchant.Enabled := TRUE;
ButtonStartEnchant.Hint := '';
ButtonStartEnchant.ShowHint := FALSE;
ButtonStartEnchant.Caption := 'Start';
ButtonStartEnchant.Font.Name := 'Tahoma';
ButtonStartEnchant.Font.Size := 8;
ButtonStartEnchant.Font.Color := clWindowText;
ButtonStartEnchant.Font.CharSet := 1;
ButtonStartEnchant.TabOrder := 2;
ButtonStartEnchant.TabStop := TRUE;
ButtonStartEnchant.Cancel := FALSE;
ButtonStartEnchant.ModalResult := 0;
ButtonStartEnchant.OnClick := @ButtonStartEnchant_Click;
//......................................
//......................................
//ButtonStopEnchant
ButtonStopEnchant := TButton.Create(Result);
ButtonStopEnchant.Parent := GroupBox2;
ButtonStopEnchant.Left := 341;
ButtonStopEnchant.Top := 67;
ButtonStopEnchant.Width := 75;
ButtonStopEnchant.Height := 25;
ButtonStopEnchant.Visible := TRUE;
ButtonStopEnchant.Tag := 0;
ButtonStopEnchant.Enabled := TRUE;
ButtonStopEnchant.Hint := '';
ButtonStopEnchant.ShowHint := FALSE;
ButtonStopEnchant.Caption := 'Stop';
ButtonStopEnchant.Font.Name := 'Tahoma';
ButtonStopEnchant.Font.Size := 8;
ButtonStopEnchant.Font.Color := clWindowText;
ButtonStopEnchant.Font.CharSet := 1;
ButtonStopEnchant.TabOrder := 3;
ButtonStopEnchant.TabStop := TRUE;
ButtonStopEnchant.Cancel := FALSE;
ButtonStopEnchant.ModalResult := 0;
ButtonStopEnchant.OnClick := @ButtonStopEnchant_Click;
//......................................
//......................................
//CheckBoxScroll
CheckBoxScroll := TCheckBox.Create(Result);
CheckBoxScroll.Parent := GroupBox2;
CheckBoxScroll.Left := 18;
CheckBoxScroll.Top := 41;
CheckBoxScroll.Width := 66;
CheckBoxScroll.Height := 23;
CheckBoxScroll.Visible := TRUE;
CheckBoxScroll.Tag := 0;
CheckBoxScroll.Enabled := TRUE;
CheckBoxScroll.Hint := 'Поставить галочку если выбрали скролл заточки';
CheckBoxScroll.ShowHint := TRUE;
CheckBoxScroll.Caption := 'Заточка';
CheckBoxScroll.Font.Name := 'Tahoma';
CheckBoxScroll.Font.Size := 8;
CheckBoxScroll.Font.Color := clWindowText;
CheckBoxScroll.Color := clBtnFace;
CheckBoxScroll.TabOrder := 4;
CheckBoxScroll.TabStop := TRUE;
CheckBoxScroll.Checked := FALSE;
CheckBoxScroll.AllowGrayed := FALSE;
CheckBoxScroll.State := cbUnchecked;
CheckBoxScroll.OnClick := @CheckBoxScroll_Click;
//......................................
//......................................
//ComboBoxScroll
ComboBoxScroll := TComboBox.Create(Result);
ComboBoxScroll.Parent := GroupBox2;
ComboBoxScroll.Left := 90;
ComboBoxScroll.Top := 40;
ComboBoxScroll.Width := 169;
ComboBoxScroll.Height := 21;
ComboBoxScroll.Visible := TRUE;
ComboBoxScroll.Tag := 0;
ComboBoxScroll.Enabled := TRUE;
ComboBoxScroll.Hint := 'Выбери из списка скролл заточки';
ComboBoxScroll.ShowHint := TRUE;
ComboBoxScroll.Text := 'ComboBoxScroll';
ComboBoxScroll.Font.Name := 'Tahoma';
ComboBoxScroll.Font.Size := 8;
ComboBoxScroll.Font.Color := clWindowText;
ComboBoxScroll.Color := clWindow;
ComboBoxScroll.TabOrder := 5;
ComboBoxScroll.TabStop := TRUE;
ComboBoxScroll.ItemIndex := -1;
ComboBoxScroll.Sorted := FALSE;
ComboBoxScroll.ItemHeight := 13;
ComboBoxScroll.OnClick := @ComboBoxScroll_Click;
//......................................
//......................................
//EditItemVal
EditItemVal := TEdit.Create(Result);
EditItemVal.Parent := GroupBox2;
EditItemVal.Left := 341;
EditItemVal.Top := 16;
EditItemVal.Width := 72;
EditItemVal.Height := 21;
EditItemVal.Visible := TRUE;
EditItemVal.Tag := 0;
EditItemVal.Enabled := TRUE;
EditItemVal.Hint := '';
EditItemVal.ShowHint := FALSE;
EditItemVal.Text := '0';
EditItemVal.Font.Name := 'Tahoma';
EditItemVal.Font.Size := 8;
EditItemVal.Font.Color := clWindowText;
EditItemVal.Color := clWindow;
EditItemVal.TabOrder := 6;
EditItemVal.TabStop := TRUE;
EditItemVal.ReadOnly := TRUE;
EditItemVal.MaxLength := 0;
EditItemVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollVal
EditScrollVal := TEdit.Create(Result);
EditScrollVal.Parent := GroupBox2;
EditScrollVal.Left := 341;
EditScrollVal.Top := 40;
EditScrollVal.Width := 72;
EditScrollVal.Height := 21;
EditScrollVal.Visible := TRUE;
EditScrollVal.Tag := 0;
EditScrollVal.Enabled := TRUE;
EditScrollVal.Hint := '';
EditScrollVal.ShowHint := FALSE;
EditScrollVal.Text := '0';
EditScrollVal.Font.Name := 'Tahoma';
EditScrollVal.Font.Size := 8;
EditScrollVal.Font.Color := clWindowText;
EditScrollVal.Color := clWindow;
EditScrollVal.TabOrder := 7;
EditScrollVal.TabStop := TRUE;
EditScrollVal.ReadOnly := TRUE;
EditScrollVal.MaxLength := 0;
EditScrollVal.AutoSize := TRUE;
//......................................
//......................................
//EditScrollOID
EditScrollOID := TEdit.Create(Result);
EditScrollOID.Parent := GroupBox2;
EditScrollOID.Left := 263;
EditScrollOID.Top := 40;
EditScrollOID.Width := 72;
EditScrollOID.Height := 21;
EditScrollOID.Visible := TRUE;
EditScrollOID.Tag := 0;
EditScrollOID.Enabled := TRUE;
EditScrollOID.Hint := '';
EditScrollOID.ShowHint := FALSE;
EditScrollOID.Text := '0';
EditScrollOID.Font.Name := 'Tahoma';
EditScrollOID.Font.Size := 8;
EditScrollOID.Font.Color := clWindowText;
EditScrollOID.Color := clWindow;
EditScrollOID.TabOrder := 8;
EditScrollOID.TabStop := TRUE;
EditScrollOID.ReadOnly := TRUE;
EditScrollOID.MaxLength := 0;
EditScrollOID.AutoSize := TRUE;
//......................................
//......................................
//EditItemOID
EditItemOID := TEdit.Create(Result);
EditItemOID.Parent := GroupBox2;
EditItemOID.Left := 264;
EditItemOID.Top := 16;
EditItemOID.Width := 72;
EditItemOID.Height := 21;
EditItemOID.Visible := TRUE;
EditItemOID.Tag := 0;
EditItemOID.Enabled := TRUE;
EditItemOID.Hint := '';
EditItemOID.ShowHint := FALSE;
EditItemOID.Text := '0';
EditItemOID.Font.Name := 'Tahoma';
EditItemOID.Font.Size := 8;
EditItemOID.Font.Color := clWindowText;
EditItemOID.Color := clWindow;
EditItemOID.TabOrder := 9;
EditItemOID.TabStop := TRUE;
EditItemOID.ReadOnly := TRUE;
EditItemOID.MaxLength := 0;
EditItemOID.AutoSize := TRUE;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
msg.Lines.Add('Автоматизация заточки by NLObP!');
Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
FormMain:=Create_FormMain;
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=1000; //время задержки
ready:=false;
add:=false;
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
end;
//......................................
//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
// ItemBase:=nil; //нельзя так делать с массивом
timer.Free;
StringList.Clear;
ItemsName.Clear;
//достаточно освободить форму
Free_FormMain;
end;
//......................................
//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//......................................
//************************************************** *************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1 )h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)d(Augment)d(--)
var
i, j, ListCount: integer;
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
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
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
// msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,12) else inc(j,4);
//msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
//......................................
//************************************************** ****************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(8)
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
for ii:=1 to ListCount do begin
UpdType:=ReadH(j);
//inc(j,2);
ReadH(j); //ItemType1
ItemOID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
itemCount:=ReadD(j); //кол-во
inc(j,10);
Itemlvl:=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]:=ItemOID;
ItemBase[2,i]:=ItemID;
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Добавили предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
add:=true;
end;
end;
end;
//изменен
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
ItemBase[3,i]:=ItemCount;
ItemBase[4,i]:=Itemlvl;
msg.Lines.Add('Изменяем параметры предмета!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
end;
end;
end;
//удален
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=ItemOID then begin
msg.Lines.Add('Удаляем предмет!');
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,10) else inc(j,2);
//msg.Lines.Add('j='+inttostr(j));
end;
end;
//......................................
//************************************************** ****************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItem(item:integer; lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
//находим подходящий предмет по ItemID
if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin
//если нашли, то возвращаем ObjectID предмета
result:=ItemBase[1,i]; // itemOID
ItemCount:=ItemBase[3,i];
//Itemlvl:=ItemBase[4,i];
//msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
exit;
end;
end;
//ничего не нашли
result:=0;
end;
//......................................
//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//......................................
//************************************************** ****************************
function SumItem(Item: integer):integer;
var
sum, i : integer;
begin
result:=0;
//находим подходящий предмет по ItemID
for i:=1 to max do begin
if (ItemBase[2,i]=item) then begin
// msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
// msg.Lines.Add('i='+inttostr(i));
result:=result+ItemBase[3,i];
//inc(result);
end;
end;
end;
//......................................
//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
//*********** использовать чит с петом ************************
{ buf:=#$8B;
WriteD(ObjectID);
writed(1);
SendToServerEx(Name);
} //***********
end;
//......................................
{//************************************************** *************
function ExtractIDValues(sData: string): integer;
var
s: string;
i,j: integer;
begin
i:=0;
s:=sData;
i:=pos('=',s);
if i>=0 then
s:=copy(s,1,i-1);
try
result:=strtoint(s);
except
result:=0;
end;
end;
//............................................}
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
begin
EditItemVal.text:=inttostr(sumitem(ItemID));
EditScrollVal.text:=inttostr(sumitem(ScrollID));
if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
msg.Lines.Add('Нечего точить! Прервано!');
timer.enabled:=false;
exit;
end;
if (sumitem(ItemID)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end;
//......................................
//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
{procedure OnTrade1(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//покупаем у Misc Trader из массива TradeBuyItem1
//-------------------------------------------------
100: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
//-------------------------------------------------
//покупаем у Armor Trader из массива TradeBuyItem2
//-------------------------------------------------
200: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
end;
end;
end;
}//......................................
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//покупка состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d( Count)
//************************************************** **************************
{ if ReadyToBuy and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getbuylist);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет
//s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemTyp e1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d( ItemBodyPart)
#$11: begin
msg.Lines.Add('S>Пакет BuyList #$11');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(C ount)
msg.Lines.Add('C>Пакет RequestBuyItem #$1F');
//продадим первый из списка
msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));
delay(1000);
RequestBuyItem(TradeBuyItem[Trd],NeedBuy);
ReadyToBuy:=false;
end;
end;
end;
end;
} //......................................
//************************************************** **************************
if FromServer then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: InventoryUpdate; //Обновление базы
//......................................
//Пакет ChooseInventory
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
//************************************************
msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));
RequestEnchantItem(ItemOID);
ready:=false;
timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)
end;
#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.
[CODE]
подскажите де в этом скрипте менять МИН ЗНАЧЕНИЕ ТОЧКИ?
просто на серваке точиш пуху приполомке она падает не на 0 а на +3,из за етого прога виснет
спс
Скриптика побольше не нашлось?
З.Ы. - пост редактируй что бы скрипт был в тегах [ CODE]Text[ /CODE] (пробельчики убери)
Lafisarrr
16.02.2010, 17:04
Антитаргет
Const
Name='Lafi';
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.
Работает сам использую
Антитаргет
Const
Name='Lafi';
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.
Работает сам использую
Пробовал переделать под ГФ, знающие люди скажите что я упустил:
Const
Name='xxxx';
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]=#$1F)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('49 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$A8;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.
люди пожалусто объясне что за скрипт название скрипта FakeGM
вот сам скрипт
//Set Builder
var
i:integer;
begin
if FromServer then if pck[2]=#$04 then begin
i:=22;
ReadS(i);
i:=i+328;
buf:=pck;
WriteD(1,i);
pck:=buf;
end;
end.
{ некоторые ГМ команды:
///l2debugwindow - консолька
///l2debug - показывает сообщения в открытой консоли
///geodata - не пробовал пока... для работы необходимо скопировать папку геодата в папку сустем клиента
///buildzone map=[map_name] такая же ****ь но на одну область
///showborderline - показывает границу обасти
///showsectors - разбивает мир по секторам
///camerawalking mode=on|off - позволяет двигать камеру на ограниченное расстояние без движения перса.
///c_rmode [1-7] - изменяет внешнее отображение мира... очень жестоко ) приминения пока не нашел )
///bighead size=[1-n] - увеличивает размер головы. Видно ессестно только тебе )
///open [map name] - не пробовал
///get [class_name] [attrib_name]
///set [class_name] [attrib_name]
///editdefault class=[class_name]
///stat l2 - общая инфа обо всем... постоянно меняется. полезна.
///stat fps - да здравствует анрил ))) показывает как вы думаете что? ))) конечно же количество кадров в секунду )
}
Аргументация в 2 кнопки
const
nik='GraNIT';
var
WeaponID, LsID, GemID, GemCount: 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=#$34#$03#$00#$00#$00) then
begin
pck:='';
Buf:=#$D0#$45#$00;
WriteD(WeaponID);
SendToServerEx(nik);
Buf:=#$D0#$46#$00;
WriteD(WeaponID);
SendToServerEx(nik);
end;
//Augment
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Buf:=#$D0#$44#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
SendToServerEx(nik);
end;
end.
Инструкция:
1. Включили скрипт
2. Вставили ЛС в игре.
3. Второе соц. действие вытаскиевает ЛС.
4. Первое соц. действие вставляет ЛС.
P.S. тестилось на Part 2 :Grace World, Megal2 .
ALexCrosby
24.04.2010, 19:52
Скрипт реально работает, на всех сборках la2base и везде где у бафера есть кнопки heal,cp,mana,Лично проверял.//Скрипт на регенерацию Маны,Хп,Цп на сервере *****
//Для активации окна введите в парти чат '.window'
//Перед включением скрипта нужно стоять рядом с бафером!
//Для регенерации хп нужно просто посылать '.heal' в парти чат
//Работает на сервер где есть у бафера регенерация хп мп цп
//Версия 6.0 Final
//Автор Crazy$
var
// переменная
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми в таргет бафера и сделай шаг!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
begin
if FromClient and (pck[1]=#$48) then
begin
v:=ReadD(14); n:=ReadD(18);
end;
end;
//запоминание пакета ValidatePosition
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if fromclient and (pck=#$38#$2E#$00#$77#$00#$69#$00#$6E#$00#$64#$00# $6F#$00#$77#$00#$00#$00#$03#$00#$00#$00) then
begin
buf:=#$04;
WriteD(a);
WriteD(c);
WriteD(d);
WriteD(e);
WriteC(f);
SendToServer;
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
buf:=hstr('37 01 00');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
begin
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if FromClient and (pck=#$38#$2E#$00#$68#$00#$65#$00#$61#$00#$6C#$00# $00#$00#$03#$00#$00#$00) then
begin
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
end;
end.
У меня на серве у нпц бафера есть функция вылечить и она ресает сразу фулл хп мп сп. Будет ли этот скрипт работать?
У меня на серве у нпц бафера есть функция вылечить и она ресает сразу фулл хп мп сп. Будет ли этот скрипт работать?
вощможно, тут не в бафере дело.
Бьём без флага и урона
begin
if FromClient and ((pck[1]=#$0A) or (pck[1]=#$04)) then //Если атакуем, то:
begin
buf:=pck;
SendToServer; //Отправил пакет дальше
delay(100);
buf:=#$73; //Открыть продажу
SendToServer;
buf:=#$76; //Закрыть продажу
SendToServer;
pck:='';
end;
if fromserver and (pck[1]=#$9a) then pck:='';
end.
l2phx 3.5.33.154 но работать должно на всех
скрипт мой. C4/IL дальше не проверял. Не работает-фикс
Просто ставим галочку
Augment до получения нужного скила by Vilson
Оба скрипта положить в папку со скриптами, почитать инструкцию вначале скрипта, поменять параметры на свои. Без PacketsT2.script в принципе можно обойтись если вы перенесете вызываемые из него функции в основной скрипт Augment_2.script. Я использую два файла только потому что мне так удобно, этот PacketsT2.script использую во всех своих скриптах что бы не переписывать по сто раз один и тот же код, кроме того при выходе новой версии линейки не надо будет переписывать все скрипты, достаточно будет переписать только PacketsT2.script.
2606
2607
Arsonist
04.05.2010, 09:08
Augment до получения нужного скила by Vilson
2606
2607
А можно этот скрипт переписать под Interlude ?
maamaster
11.05.2010, 21:12
У меня вот такой вопрос есть СВС и БД оф пати скрипт который работает на ХБ, после перехода на Эпилог при выборе дансов появляется скилы не бд и свс. Собственно это шоки как можна переделать скрипт или помогите с новым.
sekaskissa
13.05.2010, 18:43
сталкивался со скриптами вставки ЛС на интерлюде. увы но мой phx выдавал ошибки. код значительно не отличается от оригинального. немного поправлена ошибка с hex. Код правил самолично. ибо нигде не нашел рабочего скрипта.
скрипт лежит и у нас. но брал исходники с codex.ru
тестим и радуемся
const
Name='RMF'; // ник
ItemID=6608; // пуха
LifeID=8762; // лайфстон
GemsID=2131; // гемстон
GemsAmount=25; //кол-во гемов
max=80; // инвентарь
var
LifeBase:array[1..max] of integer;
ColvoLife,ColvoGems,Life,Item,Gems,SocialID,augid: integer;
procedure Init;
var i:integer;
begin
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure Free;
var i:integer;
begin
for i:=1 to max do
LifeBase[i]:=0;
end;
function StrToHex2(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
begin
if b<10 then result:=chr(b+$30)
else result:=chr(b+$37);
end;
begin
result:='';
for i:=1 to length(packet) do begin
tmp:=ord(packet[i]) div 16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
function inttohex(n:integer):string;
var i:integer;
t:string;
a:array[0..15] of char;
begin
a[0]:='0';
a[1]:='1';
a[2]:='2';
a[3]:='3';
a[4]:='4';
a[5]:='5';
a[6]:='6';
a[7]:='7';
a[8]:='8';
a[9]:='9';
a[10]:='A';
a[11]:='B';
a[12]:='C';
a[13]:='D';
a[14]:='E';
a[15]:='F';
result:='';
t:='';
i:=0;
while n<>0 do begin
if (i mod 2=0)and(i>0) then begin
result:=result+t+' ';
t:='';
end;
t:=a[n mod 16]+t;
n:=n div 16;
inc(i);
end;
result:=result+t;
end;
procedure Say;
var i:integer;
s:string;
begin
s:='<tr><td>LS='+inttostr(ColvoLife)+' (*'+inttostr(GemsAmount)+'='+inttostr(ColvoLife*Ge msAmount)+')</td></tr>';
s:=s+'<tr><td>Gems='+inttostr(ColvoGems)+' (/'+inttostr(GemsAmount)+'='+inttostr(ColvoGems div GemsAmount)+')</td></tr>';
s:=s+'<tr><td>---</td></tr>';
if Item=0 then
s:=s+'<tr><td>No Weapon</td></tr>'
else if augid>0 then
s:=s+'<tr><td>Augmented ('+inttohex(augid)+')</td></tr>'
else
s:=s+'<tr><td>Not augmented</td></tr>';
buf:=hstr('0F 01 00 00 00');
WriteS('<html><body><br><table width=100%>'+s+'</table><br><br><br><br><br><br>'+
'"Social Yes" - Cancel Augment(if augmented) and Augment(if you have enough gems and LSs)<br>'+
'"Social No" - Show this help<br><br>'+
'Sometimes client dont get packet InventoryUpdate and you see "Not augment" when weapon is augmented.'+
' Simply press [Tab] twice or wear weapon.<br><br>'+
'(c) raid aka Mamy</body></html>');
// '(c) raid aka Mamy<br>'+strtohex(pck)+'</body></html>');
WriteD(0);
SendToClientEx(Name);
end;
procedure CreateItemBase;
var i,ss,j,ObjID,ItmID,ListCount,count,aug:integer;
begin
Item:=0;
ss:=1;
j:=4;
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8;
for i:=1 to ListCount do begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case ItmID of
LifeID: begin
LifeBase[ss]:=ObjID;
inc(ss);
end;
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
j:=j+6;
end;
ColvoLife:=ss-1;
Say;
end;
procedure UpdateItemBase;
var i,ii,j,ObjID,ItmID,ListCount,Count,UpdType,aug: integer;
begin
ListCount:=ReadH(2);
j:=4;
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case UpdType of
1:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=0 then begin
LifeBase[ii]:=ObjID;
ColvoLife:=ColvoLife+1;
break;
end;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
2:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
3:case ItmID of
ItemID:
Item:=0;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=ObjID then begin
LifeBase[ii]:=0;
ColvoLife:=ColvoLife-1;
end;
end;
end;
end;
j:=j+6;
end;
Say;
end;
function GetNextLife: integer;
var i:integer;
begin
Result:=-1;
for i:=1 to max do begin
if (LifeBase[i]<>0) then begin
Result:=LifeBase[i];
exit;
end;
end;
end;
procedure Augment;
begin
buf:=hstr('D0 29 00');
WriteD(Item);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2A 00');
WriteD(Item);
WriteD(Life);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2B 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2C 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
end;
procedure DisAugment;
begin
buf:=hstr('D0 2D 00');
WriteD(Item);
SendToServerEx(Name);
buf:=hstr('D0 2E 00');
WriteD(Item);
SendToServerEx(Name);
end;
begin
if pck='' then exit;
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
pck:='';
case SocialID of
7: begin
buf:=hstr('A7 2A A0 00 00 80 84 1E 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
buf:=hstr('A7 29 A0 00 00 40 0D 03 00 FA 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
exit;
end;
6: begin
if augid>0 then begin
DisAugment;
delay(300);
end;
Life:=GetNextLife;
if (Life=-1)or(ColvoGems<GemsAmount)or(ColvoLife<1) then
exit;
Augment;
exit;
end;
5: begin
Say;
exit;
end;
end;
end;
if FromServer then
case pck[1] of
#$1B: CreateItemBase;
#$27: UpdateItemBase;
end;
end.
Управление:
1. социальное действие "да" - вытащить и вставить ЛС
2. социальное действие "нет" - вызов справки.
3. для работы скрипта впишите нужные данные в начале скрипта (читаем примечание после каждой строки)
Примечание. В вашем инвентаре должна быть только одна пушка с таким же ID в которій вы хотите вставить скилл.
не откажусь от благодарности.
З.Ы. скорость вставки ЛС поражает:bl:
Скрипт на тп , то место которое запомнили(для серверов с тупой гео) Тестил на Interlude
Автор: pmen
Взято c сoderx.ru
var
// переменная
x:integer; y:integer;
a:integer; b:boolean; z:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); x:=ReadD(6);
y:=ReadD(10); z:=ReadD(14);
SendMsc('Запомнен ObjectID = '+inttostr(a));
SendMsc('Запомнен x = '+inttostr(x));
SendMsc('Запомнен y = '+inttostr(y));
SendMsc('Запомнен z = '+inttostr(z));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6F 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
Writed(x);
Writed(y);
Writed(z);
SendToClient;
end;
end;
end.
Удобно Использовать вместе с скриптом на тп.Например ходить на твт(Сохранил точку где появился, тп в город за бафом и потом обратно на арену) .
как этим пользоваться пишет наведите на себя тарге я навожу пишет координаты а что дальше то?
necros555
13.06.2010, 04:10
как этим пользоваться пишет наведите на себя тарге я навожу пишет координаты а что дальше то?
попробуй этот тут себя в таргет береш и в чат пишеш город //.goddard с //этим или нет не помню попробуеш разберешся
//************************************************** ****************************
{version 0.2 By tiranous How to teleport self anywhere you want
1.check the script
2.target yourself
3.teleport to every location you want
4.use one active skill (common craft,heal,etc)
5.Tested in L2DeathWhisper,L2Core,L2Evo,l2gm,l2zer0
}
//************************************************** ****************************
//Towns
//
//.gludio
//.gludiowh
//.goddard
//.goddardwh
//.aden
//.adenwh
//.giran
//.giranwh
//.rune
//.oren
//.heine
//.dion
//.schuttgart
//.gludin
//.elventree
//.elvenwh
//.elven
//.darkelven
//.darkelvenwh
//.dwarven
//.dwarvenwh
//.orcvillage
//.orcvillagewh
//.talkingisle
//.floran
//.hunter
//.hunterwh
//
//Harbors
//
//.giranharbor
//.runeharbor
//
//Castles
//
//.adencastle
//.runecastle
//.goddardcastle
//.girancastle
//.orencastle
//.gludiocastle
//.dioncastle
//.schuttgartcastle
//.innadrilcastle
//
//Castle's Pray
//.giranpray
//.adenpray
//.runepray
//.orenpray
//.dionpray
//.gludiopray
//.innadrilpray
//.goddardpray1
//.goddardpray2
//.schuttgartpray1
//.schuttgartpray2
//
//Farm Places
//
//.dino
//.vos
//.varka
//.mos
//.ketra
//.hotsprings
//.imperialtomb
//.wallofargos
//.forgeofthegods
//.skarato
//.valleyofsaint
//.lostnest
//.blaizing
//.darkomens
//.aligaorisle
//.cruma
//
//Other Places
//
//.olympiad
//.olympiad2
//.dwarventower
//.dwarventower2
//.fieldofsilence
//.hideway
//.sea
//.mount
//.jail
//.adencrest
//.vodopad
//.coliseum
//.secretcastle
//.placetohide
//
//Raid Bosses
//Special Raid Bosses
//
//.qa
//.core
//.orfen
//.zaken
//.baium
//.benom
//.antharas
//.valakas
//.frintezza
//.tyrannosaurus1
//.tyrannosaurus2
//.tyrannosaurus3
//
//70-80 lvl rbs
//
//.varkarb1
//.varkarb2
//.varkarb3
//.ketrarb1
//.ketrarb2
//.ketrarb3
//.ember
//.galaxia
//.golkonda
//.giantglaki
//lowest lvl rbs
//
//.blaizingrb1
//.blaizingrb2
//.blaizingrb3
//.blaizingrb4
//.blaizingrb5
//.hallate
//.korim
//.kernon
//.rahha
//.gorgolos
//.verfa
//
//Noblesse Quest
//
//.talien
//.gabrielle
//.gilmore
//.baraham
//.melodymaestro
//.marluk
//.stedmiel
//.virgil
//.rahorakti
//.splinterstakato
//.caradine
//.noel
//.mdk
//.kalis
//.matild
//.unicorn
//.jp
//.noblrb
//.ladd
var
//
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;
procedure Init;
begin
SendMsc('Возьми себя в таргет!!!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('tiranous');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ID Обьекта = '+inttostr(a));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 71 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C8 AB FF FF 17 C4 02 00 A6 E9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6F 00 72 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('61 45 00 00 5E B5 01 00 48 E6 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 66 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('32 D3 00 00 A6 42 00 00 5E EA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('71 D6 00 00 DF 57 03 00 67 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 69 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0E C2 01 00 D6 40 00 00 5D 27 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 65 00 6E 00 6F 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B8 2F 00 00 A0 3E FF FF 3F F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6E 00 74 00 68 00 61 00 72 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C D5 02 00 7A BE 01 00 E4 DF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 61 00 6B 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0D 46 03 00 C8 3D FE FF 9C F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 72 00 69 00 6E 00 74 00 65 00 7A 00 7A 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A6 A8 02 00 8D A2 FE FF 0D EC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 79 00 72 00 61 00 6E 00 6E 00 6F 00 73 00 61 00 75 00 72 00 75 00 73 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('CF 4E 00 00 17 DD FF FF 2B F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 79 00 72 00 61 00 6E 00 6E 00 6F 00 73 00 61 00 75 00 72 00 75 00 73 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F3 59 00 00 B5 C5 FF FF 0D F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 79 00 72 00 61 00 6E 00 6E 00 6F 00 73 00 61 00 75 00 72 00 75 00 73 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7E 67 00 00 49 BD FF FF 51 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 72 00 62 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3F C4 01 00 23 67 FF FF 6A F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 72 00 62 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('56 A9 01 00 DA 73 FF FF 9B FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 72 00 62 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7C 9D 01 00 66 59 FF FF 31 F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 72 00 62 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('42 43 02 00 0A DD FE FF DB EC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 72 00 62 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FA 39 02 00 72 C0 FE FF 8D E8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 72 00 62 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C 37 02 00 F9 B3 FE FF AD E7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6D 00 62 00 65 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A2 D1 02 00 8A 61 FE FF 5A E7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 61 00 6C 00 61 00 78 00 69 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('EB BC 01 00 E1 3B 00 00 5D 25 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 6C 00 6B 00 6F 00 6E 00 64 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('04 C7 01 00 13 3E 00 00 55 1B 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('19 59 02 00 55 C7 FF FF 91 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('76 65 02 00 25 E8 FF FF BF EF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('69 3E 02 00 19 AF FF FF 93 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 34 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DC 19 02 00 20 B4 FF FF 0B F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 35 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('4E 35 02 00 BE 92 FF FF 74 F8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 6C 00 6C 00 61 00 74 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3E BB 01 00 9C 41 00 00 B1 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 6F 00 72 00 69 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('07 C7 01 00 F6 3E 00 00 9B 07 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 72 00 6E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9F BB 01 00 8B 41 00 00 7F 0F 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 61 00 6E 00 74 00 67 00 6C 00 61 00 6B 00 69 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 A0 02 00 0F D7 00 00 D6 E8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 61 00 68 00 68 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3F CB 01 00 1B DC FF FF 44 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 72 00 67 00 6F 00 6C 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 D6 02 00 11 F0 00 00 C5 EF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 65 00 72 00 66 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C5 EA 01 00 CD 69 00 00 D4 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('CE 41 02 00 0E 28 FF FF 57 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3B 02 00 B0 64 00 00 23 F8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 43 01 00 9E 44 02 00 74 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('2A AB 00 00 7E 45 FF FF E7 FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('11 28 00 00 12 40 FF FF ED FE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 3F 02 00 2C 12 00 00 B1 FE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('04 40 02 00 6E 43 FF FF 21 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1B C7 01 00 C7 36 02 00 02 F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 42 01 00 45 91 00 00 13 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('40 B9 FF FF 65 AB 01 00 45 F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A 56 00 00 60 72 02 00 83 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E0 2E 01 00 31 A9 FD FF 80 FE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('39 C5 01 00 09 CD 03 00 F2 FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 61 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E2 40 FE FF ED 30 FC FF 5B F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('91 41 01 00 63 D7 00 00 0C FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0B B2 01 00 89 57 03 00 2A F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3C 49 00 00 1D 38 02 00 C9 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3E 55 01 00 62 D5 FD FF C8 FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 BB FE FF 07 4D 02 00 C8 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6E 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E4 28 00 00 07 A0 FF FF C3 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 72 00 65 00 73 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FF 41 02 00 A5 0F 00 00 FC 11 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 64 00 6F 00 70 00 61 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('12 A9 02 00 93 62 01 00 33 07 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D6 18 01 00 39 96 FE FF 74 FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('59 EA 01 00 18 60 FF FF 79 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9D 9F 01 00 0E A9 FE FF 9D F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 3E 02 00 C4 F8 FE FF B9 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6F 00 6C 00 69 00 73 00 65 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('46 4A 02 00 8D B6 00 00 B1 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 71 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('96 AB FF FF 5A C5 02 00 9F E9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('10 D8 00 00 20 58 03 00 6E F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 69 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0D C2 01 00 EF 40 00 00 65 27 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6E 00 74 00 68 00 61 00 72 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C D5 02 00 7A BE 01 00 E8 DF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 61 00 6B 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('88 43 03 00 14 3D FE FF 99 F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 72 00 69 00 6E 00 74 00 65 00 7A 00 7A 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9E A8 02 00 44 A2 FE FF BD EB FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 61 00 6C 00 69 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 41 02 00 FA 66 00 00 A4 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 61 00 62 00 72 00 69 00 65 00 6C 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3D 01 00 CF 48 02 00 74 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 6C 00 6D 00 6F 00 72 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 1D 01 00 DD CE 01 00 92 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 72 00 61 00 68 00 61 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 53 00 00 70 D0 02 00 F5 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 65 00 6C 00 6F 00 64 00 79 00 6D 00 61 00 65 00 73 00 74 00 72 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DC A1 01 00 8D 4F 03 00 F5 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 6C 00 75 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F5 D1 01 00 DD C7 01 00 63 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 74 00 65 00 64 00 6D 00 69 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('44 D4 01 00 D4 2D 01 00 3D F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 69 00 72 00 67 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 80 00 00 9D 43 FF FF F5 06 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 61 00 68 00 6F 00 72 00 61 00 6B 00 74 00 69 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B6 95 00 00 91 3F FF FF 98 FB FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 70 00 6C 00 69 00 6E 00 74 00 65 00 72 00 73 00 74 00 61 00 6B 00 61 00 74 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('BD 24 01 00 AD 4A FF FF 63 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 61 00 72 00 61 00 64 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7F 4A 02 00 D6 1D FF FF 5C F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('20 3C 02 00 45 1A FF FF 64 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 64 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('03 7B 01 00 F1 14 FF FF 5C F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 61 00 6C 00 69 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('63 74 01 00 AE 56 00 00 C0 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 74 00 69 00 6C 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D4 10 01 00 AF 46 00 00 B4 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 75 00 6E 00 69 00 63 00 6F 00 72 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7D 4F 01 00 0E D5 FE FF 6E F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 70 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B0 47 01 00 10 C7 FE FF 4A F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 62 00 6C 00 72 00 62 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('62 65 01 00 52 AF FE FF 66 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 61 00 64 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1D 4C 01 00 89 3E 00 00 0E F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('26 CC 01 00 BE 36 02 00 2C F6 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 40 02 00 7E 06 00 00 AD FE FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('07 23 00 00 08 40 FF FF 27 04 00 00 ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A6 47 01 00 49 91 00 00 3D F7 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('42 56 00 00 6C 77 02 00 AD F5 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A B9 FF FF 45 A6 01 00 6F F6 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A C5 01 00 32 D2 03 00 1D FD FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 70 00 72 00 61 00 79 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FA 43 02 00 EB 3A FF FF 1C FA FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 70 00 72 00 61 00 79 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('2C 3C 02 00 FD 3A FF FF 1B FA FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 70 00 72 00 61 00 79 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DF 32 01 00 6C A4 FD FF E3 00 00 00 ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 70 00 72 00 61 00 79 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('42 2B 01 00 68 A4 FD FF E3 00 00 00 ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6C 00 76 00 65 00 6E 00 74 00 72 00 65 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('AC B4 00 00 06 A1 00 00 4B F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6C 00 76 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('12 BB 00 00 2C C3 00 00 57 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6C 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 B7 00 00 32 C9 00 00 5F F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 61 00 72 00 6B 00 65 00 6C 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FE 25 00 00 55 3D 00 00 21 EE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 61 00 72 00 6B 00 65 00 6C 00 76 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DF 34 00 00 96 44 00 00 42 EE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('98 44 01 00 E3 3C 02 00 77 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('60 43 02 00 8E 66 00 00 71 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B0 CC FF FF B0 E7 01 00 D2 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('99 3B 02 00 C2 1E FF FF 69 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('47 C7 01 00 23 37 FD FF 0F FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 63 00 76 00 69 00 6C 00 6C 00 61 00 67 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9B 53 FF FF 09 43 FE FF 10 FF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 63 00 76 00 69 00 6C 00 6C 00 61 00 67 00 65 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('18 57 FF FF 64 44 FE FF 21 FF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F0 C0 01 00 F8 40 FD FF 98 FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 6C 00 6F 00 72 00 61 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('21 43 00 00 84 98 02 00 55 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('21 43 00 00 84 98 02 00 55 F2 FF FF')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 B7 00 00 F8 DA 02 00 62 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 68 00 61 00 72 00 62 00 6F 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('84 94 00 00 4F 6B FF FF C6 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 61 00 6C 00 6B 00 69 00 6E 00 67 00 69 00 73 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('43 B7 FE FF 87 B6 03 00 6E F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 6F 00 74 00 73 00 70 00 72 00 69 00 6E 00 67 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('55 50 02 00 F2 65 FE FF D2 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6D 00 70 00 65 00 72 00 69 00 61 00 6C 00 74 00 6F 00 6D 00 62 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E3 D8 02 00 36 D8 FE FF F6 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 6C 00 79 00 6D 00 70 00 69 00 61 00 64 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('85 B2 FF FF D2 AD FF FF 2E F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 77 00 61 00 6C 00 6C 00 6F 00 66 00 61 00 72 00 67 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6B B2 02 00 99 39 FF FF BE F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 6F 00 72 00 67 00 65 00 6F 00 66 00 74 00 68 00 65 00 67 00 6F 00 64 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9F 97 02 00 D6 39 FE FF 72 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6B 00 61 00 72 00 61 00 74 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F1 5D 01 00 1A 51 FF FF A2 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 6C 00 65 00 79 00 6F 00 66 00 73 00 61 00 69 00 6E 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('98 09 01 00 B4 E6 FE FF 5C F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 6F 00 73 00 74 00 6E 00 65 00 73 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('09 66 00 00 A6 BC FF FF 40 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('99 6D 02 00 D3 CD FF FF A4 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 61 00 72 00 6B 00 6F 00 6D 00 65 00 6E 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('5B B4 FF FF A2 34 00 00 DD EC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 74 00 6F 00 77 00 65 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D8 9E 01 00 E1 58 FD FF 54 02 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 74 00 6F 00 77 00 65 00 72 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('19 9E 01 00 FA 53 FD FF B6 04 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 69 00 65 00 6C 00 64 00 6F 00 66 00 73 00 69 00 6C 00 65 00 6E 00 63 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('88 3E 01 00 F1 CA 02 00 C4 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 65 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('50 82 01 00 34 D2 03 00 B8 ED FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6C 00 69 00 67 00 61 00 74 00 6F 00 72 00 69 00 73 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3C C3 01 00 9A CD 02 00 A7 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 69 00 64 00 65 00 77 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 C1 00 00 67 C8 01 00 AC F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 61 00 6C 00 6C 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('68 22 00 00 2A D3 FF FF 50 F0 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 75 00 6E 00 74 00 65 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6D C7 01 00 EC 29 01 00 56 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 75 00 6E 00 74 00 65 00 72 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C7 C2 01 00 C7 2B 01 00 A4 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 65 00 63 00 72 00 65 00 74 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('24 2D 00 00 19 73 01 00 38 F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 72 00 75 00 6D 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6B 40 00 00 F1 BD 01 00 54 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 75 00 6E 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('94 B3 FF FF CE CA 02 00 0D F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 70 00 6C 00 61 00 63 00 65 00 74 00 6F 00 68 00 69 00 64 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1D 18 00 00 81 F4 FF FF 6B F4 FF FF');
SendToClient;
end;
end;
end.
DonKanreole
15.06.2010, 02:08
Новейший, но уже успевший быть фикс, пакет на краш сервера. Заставляет сервер упасть, в следствии чего происходит рестарт. Вообще ни что иное, как стандартный оверфлоу (переполнение). Отправлять можно в окне выбора персонажей. И ещё, очень быстро палится аминами по логам и так же быстро фиксится.
Не работает: l2server.ru, lineage2.su (вроде фикс ), abyss, lineageii
0B 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
Взято с ач
Ставим спасибку если еще где нибудь работает
как этим пользоваться пишет наведите на себя тарге я навожу пишет координаты а что дальше то?
1. Включаем скрипт.
2. Стаём в то место координаты которого нам нужно сохранить.
3. Бежим/тп куда угодно.
4. Как только нам надо тп в место которое мы сохранили пишем в чат .soh
5. Появляемся в том месте, юзаем любой скрипт, и вуоля...мы на сохраненном месте.
З.Ы. это за условия что на серере пашет тп скрипт.
Если же он работает, то работает и авторес. Да и любой другой скрипт на тп найденый в и-нете.
~TheLast~
27.06.2010, 14:58
Скрипт собирать Рекомендации.для ХБ
в башку стукнуло наверно над в туалет
СУТЬ переделать скрипты расказывающие анекдоты
на собирание РЕКов.
В титул пишу За РЕК скажу Анекдот
чел рекает и ему в пм анекдот.норм наверн будит
я туп могу ток поменять в скрипте чтото как писать незнаю неумею необучен
анекдоты два скрипта как основа для пример
procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=true; //
timer1.interval:=1000;
temp[1]:='" Водка в стиле IT: ';
temp[2]:='0.1л - demo ';
temp[3]:='0.25л - trial version ';
temp[4]:='0.5л - personal edition ';
temp[5]:='0.7л - professional edition ';
temp[6]:='1.0л - network edition ';
temp[7]:='1.75л - enterprise ';
temp[8]:='3л - for small business ';
temp[9]:='5л - corporate edition ';
temp[10]:='Бутыль самогона - home edition ';
temp[11]:='"На посошок" - Service pack ';
temp[12]:='Рассол с утра - Recovery tool ';
temp[13]:='Закуска - plugins ';
temp[14]:='Пиво - patch ';
temp[15]:='Coca-cola, Fanta, 7 UP - trojan viruses';
temp[16]:='';
x:=1;
end;
procedure OnTimer(Sender: TObject);
begin
///
if temp
* <> '' then
begin
buf:=hstr('38');
writes(temp
* );
buf:=buf + hstr('01 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex('ник');
end;
x:=x+1;
if x>= 19 then x:=19; //ЭТА СТРОКА ДЛЯ ТОГО ЧТОБ XELAT заценил глубину мысли! незнаю я синтаксиса-) и учиться лень-) там какойто АНТИЛ надо применять-) а зачем? и так все пашет.
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
end.
взато с А4
program autotarget;
// Автоматическое взятие в таргет атакующего вас игрока или моба
// Чтобы включить скрипт используйте в игре социальное действие - Yes
// Чтобы выключить скрипт используйте в игре социальное действие - No
// Автор: Furious
// Версия: 0.4
const
Name='NLObP'; //имя чара, с соблюдением регистра букв
var
Attacker, MyOID, ObjectID, MyX, MyY, MyZ, i: Integer;
Status: boolean;
procedure Init; //Вызывается при включении скрипта
begin
status:=false;
end;
procedure TargetAttacker(Attacker: Integer);
begin
//c1F=Action:d(ObjectID)d(OriginX)d(OriginY)d(Origin Z)c(ActionID)
buf:=#$1F;
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;
//************************************************** ****************************
//основная часть скрипта, вызывается при приходе каждого пакета, если скрипт включен
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if (ConnectName=Name) and FromServer then
begin
case pck[1] of
//32=UserInfo:d(X)d(Y)d(Z)d(isInAirShip)d(ObjectID). ..
#$32: begin
i:=2;
MyX:=ReadD(i);
MyY:=ReadD(i);
MyZ:=ReadD(i);
ReadD(i); //пропускаем isInAirShip
MyOID:=ReadD(i);
end;
//33=Attack:d(AttackerID)d(TargetID)...
//48=MagicSkillUse:d(CharID)d(TargetID)...
#$33,#$48: begin
if Status then
begin
Attacker:=ReadD(2);
ObjectID:=ReadD(6);
if (Attacker<>ObjectID) and (MyOID=ObjectID) then TargetAttacker(Attacker);
end;
end;
end; //case
end; //if
if (ConnectName=Name) and FromClient then
begin
case pck[1] of
//34=RequestSocialAction:d(Action:Get.Func09)
#$34: begin
case ReadD(2) of
5: Status:=false;
6: Status:=true;
end;
end;
//59=ValidatePosition:d(X)d(Y)d(Z)...
#$59: begin
MyX:=ReadD(2); //получаю координату х моего чара
MyY:=ReadD(6); //получаю координату у моего чара
MyZ:=ReadD(10); //получаю координату z моего чара
end;
end; //case
end; //if
end.
xxdoomxx
14.07.2010, 00:58
var
// ник
x:integer; y:integer;
a:integer; b:boolean; z:integer;
procedure Init; // gamehack.xz.lt
begin
SendMsc('Target Char nick (gamehack.xz.lt)');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); x:=ReadD(6);
y:=ReadD(10); z:=ReadD(14);
SendMsc('save ObjectID = '+inttostr(a));
SendMsc('Save x = '+inttostr(x));
SendMsc('Save y = '+inttostr(y));
SendMsc('Save z = '+inttostr(z));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6F 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
Writed(x);
Writed(y);
Writed(z);
SendToClient;
end;
end;
end.
xxdoomxx
14.07.2010, 14:03
const
myname='Ch1se'; //<<== пишем свой НИК
max=80; //<<== колличество ячеек в рюкзаке
enchantResult=16; //<<== на сколько точить
encSafe=3; //<<== на сколько безопасно точить
var
BaseItems:array[1..max,1..10] of integer;
EncItems:array[1..10] of integer;
Timer01,Timer02: TTimer;
mytext:string;
x,textID,vsego:integer;
enchantID,enchantObjectID:integer;
ItemOID,objectOID,selectObjectID,itemID:integer;
skrolObjectID,bskrolObjectID,skrolAmount,bskrolAmo unt,skrolID,bskrolID,skrolOID,bskrolOID:integer;
enchantLevel:word;
start,startenchant:Boolean;
//---
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
//...
procedure ItemList;
var
i, j, k: integer;
ListSize: integer;
begin
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // q Amount:
j:=j+4; // q Amount:
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); // CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped:
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
//SendMsg2( ' List; ItemID------- : '+IntToStr(BaseItems[i,3])+'' );
inc(j,30);// ФИНАЛ
end else for k:=1 to 10 do BaseItems[i,k]:=0; // забиваем нулями
if (0<ItemID) then objectOID:=GetObjectID(ItemID);//находим по ItemID предмет с ObjectID
end;
//===
//находим ItemID по ObjectID предмета
function GetItemID(enchantObjectID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=selectObjectID) then begin
itemID:=BaseItems[i,3];
SendMsg2 ('- ID предмета для Заточки:'+IntToStr(itemID)+' ');
start:=true;
exit;
end;
end;
//===
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i :integer;
begin
enchantLevel:=0;
vsego:=0;
for i:=1 to max do
if (BaseItems[i,3]=itemID) and (BaseItems[i,10]< enchantResult) then begin
vsego:=vsego+1;
EncItems[vsego]:=i;
if (vsego = 1) then begin
enchantLevel:=BaseItems[i,10];
enchantID:=BaseItems[i,2];
end;
if (vsego > 1) and (BaseItems[i,10] < enchantLevel) then begin
enchantLevel:=BaseItems[i,10];
enchantID:=BaseItems[i,2];
end;
end;
//SendMsg2( '- В Ы Б Р А Н предмет для Заточки');
//SendMsg2( '- ObjID предмета='+IntToStr(enchantID)+' ');
//SendMsg2( '- точим предмет до: '+IntToStr(enchantResult)+' ' );
SendMsg2( '- предметов для заточки: '+IntToStr(vsego)+' ' );
SendMsg2( '- минимально заточен на: '+IntToStr(enchantLevel)+' ' );
x:=1;
if startenchant then begin
Timer01.enabled:=true;
end else begin
SendMsg2( '- cоцдействие ДА для старта' );
end;
end;
//===
procedure OnTimer01(Sender: TObject);
begin
case x of
1:begin
buf:=#$19;
if enchantLevel < encSafe then begin
WriteD(skrolObjectID); //простая заточка
end else begin
WriteD(bskrolObjectID);//блессед заточка
end;
WriteD(0);
SendToServerEx(myname);
inc(x);
end;
2:begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=true;
x:=0;
Timer01.enabled:=false;
end;
end;
end;
//---
procedure OnTimer02(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer02.enabled:=false;
SendMsg2( '- Т О Ч И М предмет: '+IntToStr(enchantID)+' ' );
end;
//----------------------------------------------------------------------------------- start
procedure Init;
begin
itemID:=0;
enchantID:=0;
enchantLevel:=0;
start:=false;
startenchant:=false;
skrolObjectID:=0;
bskrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=500; //<<== время выбора свитка и предмета
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=2800; //<<== время между заточкой
SendMsg2( '- ***** скрипт включился *****' );
SendMsg2( '- ник: '+myname+', ячеек инвентаря: '+IntToStr(max)+' ' );
SendMsg2( '- будем точить до '+IntToStr(enchantResult)+' ' );
SendMsg2( '- выберите обычную заточку ' );
x:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
24:begin
startenchant:=true;
x:=1;
Timer01.enabled:=true;
SendMsg2( '- П О Е Х А Л И -' );
SendMsg2( '- соцдействие НЕТ для остановки' );
buf:=hstr('14');
SendToServerEx(myname);
pck:='';
exit;
end;
25:begin
start:=false;
startenchant:=false;
Timer01.enabled:=false;
Timer02.enabled:=false;
SendMsg2( '- С Т О П -' );
SendMsg2( '- cоцдействие ДА для старта' );
pck:='';
exit;
end;
end;
end;
//=========
begin
if FromServer and (pck[1]=#$11) then ItemList;
if FromClient then
case pck[1] of
#$56:RequestActionUse;
#$19:if skrolObjectID = 0 then begin
skrolObjectID:=ReadD(2);
SendMsg2( '- ObjID обычного свитка: '+IntToStr(skrolObjectID)+'' );
SendMsg2( '- выберите блессед заточку' );
buf:=hstr('14');
SendToServerEx(myname);
end else if bskrolObjectID = 0 then begin
bskrolObjectID:=ReadD(2);
SendMsg2( '- ObjID блессед свитка: '+IntToStr(bskrolObjectID)+'' );
SendMsg2( '- заточите нужный предмет' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
selectObjectID:=ReadD(4);
end;
#$5F:begin
enchantObjectID:=ReadD(2);
ItemOID:=GetItemID(enchantObjectID);//находим по ObjectID предмет с ItemID
end;
end;
end.
xxdoomxx
14.07.2010, 14:11
Program ItemPainter;
//------------------------------------------------------------------
//Скрипт для рисования предметами пока только для с4 и интерлюдии
//В Name ввдите ник
//Нарисуйте картинку в любом графическом редакторе.
//В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
//Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
//Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
//scale - масштаб отступа между предметами от 1:1 до 10:1
//Самый оптимальный масштаб 5:1
//-----------------------------------------------------------------
//Пока проблема в том что скрипт рисует картинку в неизвестном направлении
//Не знаю как сделать чтоб рисовало строго справа от себя
const
Name='Justxxxxx';
interlude=true;
max=80;
var
bmp:TBitMap; //Картинка
ItemBase: array[1..3,1..max] of integer; //Массив предметов заполняется процедурой CreateItemBase
SelectedItems: array[1..3,1..5] of integer; //Массив Object ID предметов [i,j] i=1 - OID,2-ID,3 - Count; j - # цвета
currentx,currenty,StartX,StartY,StartZ,MyX,MyY,Ite mOID:integer;
//Теущие координаты x и y;координаты начала отчета x,y,z; Мои координаты x y обнавляются при Validate Position
ready:boolean;
timer : TTimer;
FormMain:TForm;
Stats : TMemo;
Panel1 : TPanel;
GroupBox1,GroupBox2 : TGroupBox;
ComboBoxColor,ComboBoxScale,ComboboxItem:TComboBox ;
Label1,Label2,Label3:TLabel;
Path:TEdit;
LoadedImage:TImage;
LoadButton,StartButton,StopButton:TButton;
ItemsName,StringList:TStringList;
//......................................
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
var i,count,index:integer;
begin
count:=0;
if SelectedItems[2,ComboBoxColor.ItemIndex+1]=ItemBase[2,ComboBoxItem.ItemIndex+1] then exit;
for i:=1 to 5 do if SelectedItems[2,i]=ItemBase[2,ComboBoxItem.ItemIndex+1] then inc(count);
if Count>0 then begin
stats.lines.add('Ошибка! Нельзя добавлять одинаковые предметы в разные цвета.');
exit;
end;
SelectedItems[1,ComboBoxColor.ItemIndex+1]:=ItemBase[1,ComboBoxItem.ItemIndex+1];
SelectedItems[2,ComboBoxColor.ItemIndex+1]:=ItemBase[2,ComboBoxItem.ItemIndex+1];
SelectedItems[3,ComboBoxColor.ItemIndex+1]:=ItemBase[3,ComboBoxItem.ItemIndex+1];
index:=ComboBoxItem.ItemIndex;
for i:=0 to StringList.Count-1 do if Pos(' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex],ComboBoxItem.Items.Strings)>0 then
ComboBoxItem.Items.Strings:=StringList.Strings;
ComboBoxItem.Items.Strings[index]:=ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]+' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex];
ComboBoxItem.ItemIndex:=index;
end;
//----------------------------------------
procedure StartButton_Click(Sender: TButton);
//Event : OnClick
begin
if bmp=NIL then stats.lines.add('Картинка не загружена!') else
begin
stats.lines.add('Старт!');
StartButton.enabled:=false;
currentx:=-1;
currenty:=0;
buf:=#$AA;
WriteD(0);
SendToServerEx(Name);
end;
end;
//......................................
//ButtonStopEnchant
procedure StopButton_Click(Sender: TButton);
//Event : OnClick
begin
StartButton.enabled:=true;
stats.lines.add('Стоп!');
timer.enabled:=false;
ready:=false;
end;
procedure bmpload;
begin
bmpfree;
bmp:=TBitMap.Create;
try
bmp.LoadFromFile(path.text);
except
bmp.Free;
stats.lines.add('Ошибка загрузки файла!');
exit;
end;
stats.lines.add('Картинка успешно загружена!');
LoadedImage.Picture.assign(bmp);
end;
procedure LoadButton_Click(Sender: TButton);
var openDialog : TOpenDialog;
begin
openDialog := TOpenDialog.Create(NIL);
openDialog.Filter := 'Bitmap files|*.bmp';
openDialog.FilterIndex := 1;
openDialog.DefaultExt:='bmp';
openDialog.Options:=ofNoChangeDir+ofFileMustExist+ ofPathMustExist;
if openDialog.Execute then path.text:=openDialog.FileName else begin
openDialog.Free;
exit;
end;
openDialog.Free;
bmpload;
end;
procedure Path_key(Sender: TEdit; Key: Char);
begin
if ord(key)=13 then begin
bmpload;
end;
end;
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);
TRY
//------------------------
//Свойства формы
Result.Caption := 'Item Painter v 0.1 by ArchDevil';
Result.Left := 397;
Result.Top := 233;
Result.Width := 350;
Result.Height := 230;
Result.FormStyle := fsNormal;
Result.Position := poDesigned;
Result.BorderStyle := bsSizeable;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Color := clBtnFace;
Result.Font.Name := 'Tahoma';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 0;
Stats.Top := 160;
Stats.Width := 350;
Stats.Height := 70;
Stats.Visible := TRUE;
Stats.Tag := 0;
Stats.Enabled := TRUE;
Stats.Hint := '';
Stats.ShowHint := FALSE;
Stats.Font.Name := 'Tahoma';
Stats.Font.Size := 8;
Stats.Font.Color := clWindowText;
Stats.Color := clWindow;
Stats.TabOrder := 0;
Stats.TabStop := TRUE;
Stats.Align := alBottom;
Stats.WordWrap := TRUE;
Stats.Alignment := taLeftJustify;
Stats.WantTabs := FALSE;
Stats.WantReturns := TRUE;
Stats.HideSelection := TRUE;
Stats.MaxLength := 0;
Stats.OEMConvert := FALSE;
Stats.ReadOnly := FALSE;
Stats.ScrollBars := ssNone;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 350;
Panel1.Height := 160;
Panel1.Visible := TRUE;
Panel1.Tag := 0;
Panel1.Enabled := TRUE;
Panel1.Hint := '';
Panel1.ShowHint := FALSE;
Panel1.Caption := '';
Panel1.Align := alClient;
Panel1.Color := clBtnFace;
Panel1.Font.Name := 'Tahoma';
Panel1.Font.Size := 8;
Panel1.Font.Color := clWindowText;
Panel1.Font.CharSet := 1;
Panel1.BevelWidth := 1;
Panel1.BorderWidth := 0;
Panel1.BevelInner := bvNone;
Panel1.BevelOuter := bvRaised;
Panel1.TabOrder := 2;
Panel1.TabStop := FALSE;
Panel1.AutoSize := FALSE;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 1;
GroupBox1.Width := 160;
GroupBox1.Height := 160;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Рисунок';
GroupBox1.Align := alLeft;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 180;
GroupBox2.Height := 160;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alLeft;
GroupBox2.Color := clBtnFace;
GroupBox2.Font.Name := 'Tahoma';
GroupBox2.Font.Size := 8;
GroupBox2.Font.Color := clWindowText;
GroupBox2.Font.CharSet := 1;
GroupBox2.TabOrder := 0;
GroupBox2.TabStop := FALSE;
//......................................
//......................................
//ComboBoxColor
ComboBoxColor := TComboBox.Create(Result);
ComboBoxColor.Parent := GroupBox2;
ComboBoxColor.Left := 38;
ComboBoxColor.Top := 16;
ComboBoxColor.Width := 60;
ComboBoxColor.Height := 21;
ComboBoxColor.Visible := TRUE;
ComboBoxColor.Tag := 0;
ComboBoxColor.Enabled := TRUE;
ComboBoxColor.Hint := 'Выбери из списка цвет соответствующий предмету ниже';
ComboBoxColor.ShowHint := TRUE;
ComboBoxColor.Text := 'ComboBoxColor';
ComboBoxColor.Font.Name := 'Tahoma';
ComboBoxColor.Font.Size := 8;
ComboBoxColor.Font.Color := clWindowText;
ComboBoxColor.Color := clWindow;
ComboBoxColor.TabOrder := 1;
ComboBoxColor.TabStop := TRUE;
ComboBoxColor.Sorted := FALSE;
ComboBoxColor.ItemHeight := 13;
ComboBoxColor.Items.ADD('Black');
ComboBoxColor.Items.ADD('Red');
ComboBoxColor.Items.ADD('Green');
ComboBoxColor.Items.ADD('Blue');
ComboBoxColor.Items.ADD('Yellow');
ComboBoxColor.ItemIndex := 0;
//......................................
//......................................
//ComboBoxScale
ComboBoxScale := TComboBox.Create(Result);
ComboBoxScale.Parent := GroupBox2;
ComboBoxScale.Left := 134;
ComboBoxScale.Top := 16;
ComboBoxScale.Width := 39;
ComboBoxScale.Height := 21;
ComboBoxScale.Visible := TRUE;
ComboBoxScale.Tag := 0;
ComboBoxScale.Enabled := TRUE;
ComboBoxScale.Hint := 'Выбери из списка масштаб';
ComboBoxScale.ShowHint := TRUE;
ComboBoxScale.Text := 'ComboBoxScale';
ComboBoxScale.Font.Name := 'Tahoma';
ComboBoxScale.Font.Size := 8;
ComboBoxScale.Font.Color := clWindowText;
ComboBoxScale.Color := clWindow;
ComboBoxScale.TabOrder := 1;
ComboBoxScale.TabStop := TRUE;
ComboBoxScale.Sorted := FALSE;
ComboBoxScale.ItemHeight := 13;
ComboBoxScale.Items.ADD('1:1');
ComboBoxScale.Items.ADD('2:1');
ComboBoxScale.Items.ADD('3:1');
ComboBoxScale.Items.ADD('4:1');
ComboBoxScale.Items.ADD('5:1');
ComboBoxScale.Items.ADD('6:1');
ComboBoxScale.Items.ADD('7:1');
ComboBoxScale.Items.ADD('8:1');
ComboBoxScale.Items.ADD('9:1');
ComboBoxScale.Items.ADD('10:1');
ComboBoxScale.ItemIndex := 0;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 38;
ComboBoxItem.Top := 40;
ComboBoxItem.Width := 135;
ComboBoxItem.Height := 21;
ComboBoxItem.Visible := TRUE;
ComboBoxItem.Tag := 0;
ComboBoxItem.Enabled := TRUE;
ComboBoxItem.Hint := 'Выбери из списка затачиваемый предмет';
ComboBoxItem.ShowHint := TRUE;
ComboBoxItem.Text := 'ComboBoxItem';
ComboBoxItem.Font.Name := 'Tahoma';
ComboBoxItem.Font.Size := 8;
ComboBoxItem.Font.Color := clWindowText;
ComboBoxItem.Color := clWindow;
ComboBoxItem.TabOrder := 1;
ComboBoxItem.TabStop := TRUE;
ComboBoxItem.ItemIndex := -1;
ComboBoxItem.Sorted := FALSE;
ComboBoxItem.ItemHeight := 13;
ComboBoxItem.OnClick := @ComboBoxItem_Click;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 8;
Label1.Top := 20;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Color:';
Label1.Transparent := TRUE;
Label1.WordWrap := FALSE;
Label1.Alignment := taLeftJustify;
Label1.Layout := tlTop;
Label1.AutoSize := TRUE;
Label1.Align := alNone;
Label1.Font.Name := 'Tahoma';
Label1.Font.Size := 8;
Label1.Font.Color := clWindowText;
Label1.Color := clBtnFace;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 8;
Label2.Top := 44;
Label2.Width := 58;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'Item:';
Label2.Transparent := TRUE;
Label2.WordWrap := FALSE;
Label2.Alignment := taLeftJustify;
Label2.Layout := tlTop;
Label2.AutoSize := TRUE;
Label2.Align := alNone;
Label2.Font.Name := 'Tahoma';
Label2.Font.Size := 8;
Label2.Font.Color := clWindowText;
Label2.Color := clBtnFace;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 103;
Label3.Top := 20;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Scale:';
Label3.Transparent := TRUE;
Label3.WordWrap := FALSE;
Label3.Alignment := taLeftJustify;
Label3.Layout := tlTop;
Label3.AutoSize := TRUE;
Label3.Align := alNone;
Label3.Font.Name := 'Tahoma';
Label3.Font.Size := 8;
Label3.Font.Color := clWindowText;
Label3.Color := clBtnFace;
//......................................
//......................................
//Path
Path := TEdit.Create(Result);
Path.Parent := GroupBox1;
Path.Left := 5;
Path.Top := 107;
Path.Width := 117;
Path.Height := 20;
Path.Visible := TRUE;
Path.Tag := 0;
Path.Enabled := TRUE;
Path.Hint := 'Введи путь к файлу BMP';
Path.ShowHint := TRUE;
Path.Text := '';
Path.Font.Name := 'Tahoma';
Path.Font.Size := 7;
Path.Font.Color := clWindowText;
Path.Color := clWindow;
Path.TabOrder := 5;
Path.TabStop := TRUE;
Path.ReadOnly := FALSE;
Path.MaxLength := 0;
Path.AutoSize := TRUE;
Path.OnKeyPress := @Path_Key;
//......................................
//......................................
//LoadImage
LoadedImage:= TImage.Create(Result);
LoadedImage.Parent:=GroupBox1;
LoadedImage.Left :=5;
LoadedImage.Top := 16;
LoadedImage.Width := 150;
LoadedImage.Height := 90;
LoadedImage.Visible := TRUE;
LoadedImage.Tag := 0;
LoadedImage.Enabled := TRUE;
LoadedImage.Hint := '';
LoadedImage.ShowHint := FALSE;
LoadedImage.Center := TRUE;
LoadedImage.Proportional := TRUE;
//......................................
//......................................
//LoadButton
LoadButton := TButton.Create(Result);
LoadButton.Parent := GroupBox1;
LoadButton.Left := 124;
LoadButton.Top := 106;
LoadButton.Width := 32;
LoadButton.Height := 21;
LoadButton.Visible := TRUE;
LoadButton.Tag := 0;
LoadButton.Enabled := TRUE;
LoadButton.Hint := '';
LoadButton.ShowHint := FALSE;
LoadButton.Caption := 'Open';
LoadButton.Font.Name := 'Tahoma';
LoadButton.Font.Size := 8;
LoadButton.Font.Color := clWindowText;
LoadButton.Font.CharSet := 1;
LoadButton.TabOrder := 2;
LoadButton.TabStop := TRUE;
LoadButton.Cancel := FALSE;
LoadButton.ModalResult := 0;
LoadButton.OnClick := @LoadButton_Click;
//......................................
//......................................
//StartButton
StartButton := TButton.Create(Result);
StartButton.Parent := GroupBox2;
StartButton.Left := 6;
StartButton.Top := 106;
StartButton.Width := 80;
StartButton.Height := 21;
StartButton.Visible := TRUE;
StartButton.Tag := 0;
StartButton.Enabled := TRUE;
StartButton.Hint := '';
StartButton.ShowHint := FALSE;
StartButton.Caption := 'Start';
StartButton.Font.Name := 'Tahoma';
StartButton.Font.Size := 8;
StartButton.Font.Color := clWindowText;
StartButton.Font.CharSet := 1;
StartButton.TabOrder := 2;
StartButton.TabStop := TRUE;
StartButton.Cancel := FALSE;
StartButton.ModalResult := 0;
StartButton.OnClick := @StartButton_Click;
//......................................
//......................................
//StopButton
StopButton := TButton.Create(Result);
StopButton.Parent := GroupBox2;
StopButton.Left := 96;
StopButton.Top := 106;
StopButton.Width := 80;
StopButton.Height := 21;
StopButton.Visible := TRUE;
StopButton.Tag := 0;
StopButton.Enabled := TRUE;
StopButton.Hint := '';
StopButton.ShowHint := FALSE;
StopButton.Caption := 'Stop';
StopButton.Font.Name := 'Tahoma';
StopButton.Font.Size := 8;
StopButton.Font.Color := clWindowText;
StopButton.Font.CharSet := 1;
StopButton.TabOrder := 3;
StopButton.TabStop := TRUE;
StopButton.Cancel := FALSE;
StopButton.ModalResult := 0;
StopButton.OnClick := @StopButton_Click;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
procedure Init; //Вызывается при включении скрипта
begin
FormMain:=Create_FormMain;
stats.Lines.Add('Скрипт: Рисование предметами by ArchDevil!');
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=10; //время задержки
ready:=false;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
stats.Lines.Add('itemsid.ini не найден!');
exit;
end;
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure bmpfree;
begin
try
if bmp<>NIL then
begin
bmp.Free;
bmp:=NIL;
end;
finally
end;
end;
procedure Free;
var i:integer;
begin
Free_FormMain; bmpfree;
StringList.Clear; ItemsName.Clear;
timer.Free;
if LoadedImage<>NIL then LoadedImage:=NIL;
currentx:=0; currenty:=0; StartX:=0; StartY:=0;
StartZ:=0; MyX:=0; MyY:=0; ItemOID:=0;
ready:=false;
for i:=1 to 5 do begin
SelectedItems[1,i]:=0;
SelectedItems[2,i]:=0;
SelectedItems[3,i]:=0;
end;
end;
//CreateItemBase и InventoryUpdate Взял со скрипта NLObP на заточку
//---------------------------------------------
procedure CreateItemBase;
var
i, j, ListCount, oid,id,count: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
oid:=ReadD(j);
id:=ReadD(j);
count:=ReadD(j);
if count=1 then begin //считает только предметы с количеством > 1
ListCount:=ListCount-1;
i:=i-1;
end else
begin
ItemBase[1,i]:=oid;
ItemBase[2,i]:=id;
ItemBase[3,i]:=count;
end;
if interlude then inc(j,24) else inc(j,16);
end;
StringList.Clear;
try
for i:=1 to ListCount do begin
try
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
end
end;
except;
exit;
end;
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType: integer;
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); //кол-во
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;
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;
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;
end;
end;
end;
end;
if interlude then inc(j,22) else inc(j,14);
end;
end;
//------------------------------------
function GetCount(OID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
result:=ItemBase[3,i]; // count
exit;
end;
end;
result:=0;
end;
//--------------------------------------------
function delta(x1, y1, x2, y2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
dx:=x2-x1;
dy:=y2-y1;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
end;
//--------------------------------------------
procedure OnTimer(Sender: TObject);
begin
ItemOID:=0;
repeat
if currentx=bmp.width-1 then
begin
inc(currenty);
currentx:=0;
end else inc(currentx);
if currenty=bmp.height then
begin
timer.enabled:=false;
stats.lines.add('Остановлено! Рисунок нарисован!');
exit;
end;
case bmp.Canvas.pixels[currentx,currenty] of //матрица пикселей
clBlack: if (SelectedItems[1,1]>0) and (GetCount(SelectedItems[1,1])>0) then ItemOID:=SelectedItems[1,1];
clRed: if (SelectedItems[1,2]>0) and (GetCount(SelectedItems[1,2])>0) then ItemOID:=SelectedItems[1,2];
clGreen: if (SelectedItems[1,3]>0) and (GetCount(SelectedItems[1,3])>0) then ItemOID:=SelectedItems[1,3];
clBlue: if (SelectedItems[1,4]>0) and (GetCount(SelectedItems[1,4])>0) then ItemOID:=SelectedItems[1,4];
clYellow:if (SelectedItems[1,5]>0) and (GetCount(SelectedItems[1,5])>0) then ItemOID:=SelectedItems[1,5];
end;
until ItemOID<>0;
if ItemOID=0 then exit;
stats.lines.add('Текущий элемент матрицы: x='+inttostr(currentx)+', y='+inttostr(currenty)+'.');
if delta(MyX,MyY,StartX+currentx*(ComboBoxScale.ItemI ndex+1),StartY+currenty*(ComboBoxScale.ItemIndex+1 ))>240 then begin //расстояние между точками
buf:=#$01;
WriteD(StartX+currentx*(ComboBoxScale.ItemIndex+1) );
writeD(StartY+currenty*(ComboBoxScale.ItemIndex+1) );
WriteD(StartZ);
WriteD(MyX);
WriteD(MyY);
WriteD(StartZ);
WriteD(1);
SendToServerEx(Name);
timer.enabled:=false; //Отключаем на время передвижения
ready:=true;
exit;
end;
buf:=#$12;
WriteD(ItemOID);
WriteD(1);
WriteD(StartX+currentx*(ComboBoxScale.ItemIndex+1) );
WriteD(StartY+currenty*(ComboBoxScale.ItemIndex+1) );
WriteD(StartZ);
SendToServerEx(Name);
end;
//--------------------------------------------
begin
if FromClient and (ConnectName=Name) then
case pck[1] of
#$48: begin
MyX:=ReadD(2); // постоянно считываем координаты чара
MyY:=ReadD(6);
if ready and (delta(Myx,Myy,StartX+currentx*(ComboBoxScale.Item Index+1),StartY+currenty*(ComboBoxScale.ItemIndex+ 1))<100) then begin //Меньше 100 можно включать таймер
buf:=#$12; //Выкидываем предмет который не выкинули когда дельта привышала 240
WriteD(ItemOID);
WriteD(1);
WriteD(StartX+currentx*(ComboBoxScale.ItemIndex+1) );
WriteD(StartY+currenty*(ComboBoxScale.ItemIndex+1) );
WriteD(StartZ);
SendToServerEx(Name);
ready:=false;
timer.enabled:=true;
end;
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
#$64: if (StartButton.enabled=false) and (timer.enabled=false) and (ReadD(6)=3) then
begin
StartX:=ReadD(14); //Считываются только 1 раз
StartY:=ReadD(22);
StartZ:=ReadD(30);
MyX:=StartX;
MyY:=StartY;
timer.enabled:=true;//Вот теперь включаем таймер
end;
#$12: pck:=''; //Это для того чтоб не удалялись предметы, просто на сервере где я тестил автоудаление предметов
end;
end.
BlackWinG
23.07.2010, 23:35
Нашел на максе очень интересный скрипт. Сам я в этом не шарю, но мб кому то пригодиться:)
Суть скрипта в том, что когда тебя рекают - человеку в ПМ пишет какой-то анекдот, так можно ходить по городу и писать "Рек-Анекдот в ПМ"
Собственно сам скрипт:
//by VORON
//скрипт который рассказывает анекдоты без бана:
///////////////////////////////////////////////////////////////////////////
var
temp: array [1..20] of string;
timer1: TTimer;
x: integer;
procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=true; //
timer1.interval:=1000;
temp[1]:='" Водка в стиле IT: ';
temp[2]:='0.1л - demo ';
temp[3]:='0.25л - trial version ';
temp[4]:='0.5л - personal edition ';
temp[5]:='0.7л - professional edition ';
temp[6]:='1.0л - network edition ';
temp[7]:='1.75л - enterprise ';
temp[8]:='3л - for small business ';
temp[9]:='5л - corporate edition ';
temp[10]:='Бутыль самогона - home edition ';
temp[11]:='"На посошок" - Service pack ';
temp[12]:='Рассол с утра - Recovery tool ';
temp[13]:='Закуска - plugins ';
temp[14]:='Пиво - patch ';
temp[15]:='Coca-cola, Fanta, 7 UP - trojan viruses';
temp[16]:='';
x:=1;
end;
procedure OnTimer(Sender: TObject);
begin
///
if temp
<> '' then
begin
buf:=hstr('38');
writes(temp
);
buf:=buf + hstr('01 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex('ник');
end;
x:=x+1;
if x>= 19 then x:=19; //ЭТА СТРОКА ДЛЯ ТОГО ЧТОБ XELAT заценил глубину мысли! незнаю я синтаксиса-) и учиться лень-) там какойто АНТИЛ надо применять-) а зачем? и так все пашет.
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
end.
Добавлено через 33 минуты
Скрипт для 100% выигрыша в лотерею в квесте Seductive Whispers
Описание квеста
Название квеста: Seductive Whispers
Выполнять обязательно группой
Можно повторно взять квест
Расы: Все
Классы: Все
Требуемый левел: 50
Где брать квест: Town of Aden
У кого брать квест: Blacksmith Wilbert
Награда: Adena, или armor/weapon scrolls, или 60% B weapon receipes
Описание:
Кузнец Вилберт желает играть с вами в новую модную игру, но говорит, что для игры вам понадобятся бусинки. Вам нужно раздобыть их, чтобы начать играть.
1. Поговорите с Blacksmith Wilbert в кузнице Адена и возьмите задание.
2. Выбивайте итемы в Cemetry, Ancient Battleground, Fields of Massacre. Для одной игры нужно собрать 50 Spirit Beads.
3. Накопив минимум 50 бусин, вернитсь к Blacksmith Wilbert, чтобы играть.
Правила игры:
Когда вы скажете гному, что хотите играть с ним, просто кликайте по ссылке, чтобы тянуть карту, до тех пор, пока он не скажет вам, выиграли вы или проиграли. Если вы проиграли, то не получите ничего. Если выиграете, то можете или взять награду, или продолжить тянуть карты. Если вы отказывайтесь от предложенной награды и продолжите играть, то награда увеличивается. Вы можете попытать счастья получить более ценный приз, но, если в этом случае проиграете, то не получите ни его, ни то, что гном предлагал ранее.
Награда:
1 выигрышный раунд - 40,000а
2 выигрышных раунда - 80,000а
3 выигрышных раунда - 110,000а, EWD
4 выигрышных раунда - 199,000а, EWC
5 выигрышных раундов - 388,000а, 60% рецепт на B-grade weapon
6 выигрышных раундов - 675,000а, 1 кусок на B-grade weapon
7 выигрышных раундов - 1,284,000а, 2 EWB, 2 EAB
8 выигрышных раундов - 2,384,000а, 1 EWA, 2 EAA
Сам скрипт
# by minlexx
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
qn = "663_SeductiveWhispers"
# Npc
WILBERT = 30846
MOBS = [20674, 20678, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20974, 20975, 20976, 20996, 20997, 20998, 20999, 21001, 21002, 21006, 21007, 21008, 21009, 21010]
# Quest Item
SPIRIT_BEAD = 8766
# Drop chance, win chance need check for correct values
DROP_CHANCE = 80
WIN_ROUND_CHANCE = 66
# Reward items
ADENA = 57
EWA = 729 # Scroll: Enchant Weapon A
EAA = 730 # Scroll: Enchant Armor A
EWB = 947 # Scroll: Enchant Weapon B
EAB = 948 # Scroll: Enchant Armor B
EWC = 951 # Scroll: Enchant Weapon C
EWD = 955 # Scroll: Enchant Weapon D
# ====== Rewards - B grade 60% weapon recipes & keymats =========
# These are just most popular B weapons, need retail check here
# Blunts: Art of Battle Axe, Staff of Evil Spirits (2)
# Bows: Bow of Peril (1)
# Daggers: Demon Dagger, Kris (2)
# Fists: Bellion Cestus (1)
# Polearms: Lance (1)
# Swords: Great Sword, Keshanberk, Sword of Valhalla (3)
# ====== Total: 10; In that order they come in a set below: ======
B_RECIPES = [4963, 4966, 4967, 4968, 5001, 5003, 5004, 5005, 5006, 5007]
B_KEYMATS = [4101, 4107, 4108, 4109, 4115, 4117, 4118, 4119, 4120, 4121]
class Quest (JQuest) :
def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.questItemIds = []
def onEvent (self,event,st) :
htmltext = event
if event == "Wilbert_IWantToPlay.htm": # quest accepted
st.setState(State.STARTED)
st.playSound("ItemSound.quest_accept")
st.set("cond","1")
st.set("round","0")
elif event == "Wilbert_ExitQuest.htm": # quest finished
st.playSound("ItemSound.quest_finish")
st.exitQuest(1)
elif event == "Wilbert_IWantToPractice.htm": # practice start dialog
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<1:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
elif event == "Wilbert_Practice.htm": # "try luck" pressed (Practice)
beads=st.getQuestItemsCount(SPIRIT_BEAD) # get beads count, it must be > 1
if beads<1:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
st.takeItems(SPIRIT_BEAD,1) # take one bead as payment for luck test
random=st.getRandom(100)
if random<WIN_ROUND_CHANCE: # random value is in range [0..WIN_ROUND_CHANCE]
htmltext = "Wilbert_PracticeWon.htm"
else: # lose practice
htmltext = "Wilbert_PracticeLost.htm"
elif event == "Wilbert_LetsPlay.htm": # "Let's play" pressed
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<50:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
htmltext = "Wilbert_PlayRound1.htm"
st.set("round","0")
elif event == "Wilbert_PullCard.htm": # "Pull first or next card" pressed
round=st.getInt("round")
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<50 and round == 0: # check for 50 beads when game just starts only (round=0)
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
if round == 0: # take 50 beads when game just starts only (round=0)
st.takeItems(SPIRIT_BEAD,50)
random=st.getRandom(100)
if random>WIN_ROUND_CHANCE: # random value is in range [WIN_ROUND_CHANCE..100]
htmltext = "Wilbert_PlayLose.htm"
st.set("round","0") # restart game
else: # next round won
round = round + 1
htmltext = st.showHtmlFile("Wilbert_PlayWin.htm").replace("NROUND", str(round))
if round == 1:
htmltext = htmltext.replace("MYPRIZE","40,000 adena")
if round == 2:
htmltext = htmltext.replace("MYPRIZE","80,000 adena")
if round == 3:
htmltext = htmltext.replace("MYPRIZE","110,000 adena, D-grade Enchant Weapon Scroll")
if round == 4:
htmltext = htmltext.replace("MYPRIZE","199,000 adena, C-grade Enchant Weapon Scroll")
if round == 5:
htmltext = htmltext.replace("MYPRIZE","388,000 adena, 1 recipe for a B-grade weapon")
if round == 6:
htmltext = htmltext.replace("MYPRIZE","675,000 adena, 1 essential ingredient for a B-grade weapon")
if round == 7:
htmltext = htmltext.replace("MYPRIZE","1,284,000 adena, 2 B-grade Enchant Weapon Scrolls, 2 B-grade Enchat Armor Scrolls")
if round == 8: # reached round 8; give prizes and restart game
round = 0
st.giveItems(ADENA,2384000)
st.giveItems(EWA,1) # Scroll: Enchant Weapon A
st.giveItems(EAA,2) # Scroll: Enchant Armor A
htmltext = "Wilbert_PlayWonRound8.htm"
st.set("round",str(round))
elif event == "Wilbert_TakePrize.htm": # player won round and wants to stop game and take prize
round=st.getInt("round")
if round == 0: # player did not win any round but wants to take prize? O_o
htmltext = "<html><body>You did not win any round! No prizes.</body></html>"
return htmltext
if round > 8: # some bug or hack?
st.set("round","0")
htmltext = "<html><body>Round cannot be > 8 !!!</body></html>"
return htmltext
st.set("round","0") # first set round to 0 - game ended.
htmltext = "Wilbert_PrizeTaken.htm"
# give prize depending on current round won
if round == 1:
st.giveItems(ADENA,40000)
elif round == 2:
st.giveItems(ADENA,80000)
elif round == 3:
st.giveItems(ADENA,110000)
st.giveItems(EWD,1) # Scroll: Enchant Weapon D
elif round == 4:
st.giveItems(ADENA,199000)
st.giveItems(EWC,1) # Scroll: Enchant Weapon C
elif round == 5:
st.giveItems(ADENA,388000)
# 60% B-weap. rec number is random
st.giveItems(B_RECIPES[st.getRandom(len(B_RECIPES))], 1)
elif round == 6:
st.giveItems(ADENA,675000)
# B-weap. key number is random
st.giveItems(B_KEYMATS[st.getRandom(len(B_KEYMATS))], 1)
elif round == 7:
st.giveItems(ADENA,1284000)
st.giveItems(EWB,2) # Scroll: Enchant Weapon B
st.giveItems(EAB,2) # Scroll: Enchant Armor B
# for round 8 prize is automatically when player wins 8 round
return htmltext
def onTalk (self,npc,player):
st = player.getQuestState(qn)
htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
if not st : return htmltext
npcId = npc.getNpcId()
id = st.getState()
# first talk to Wilbert
if npcId == WILBERT and id == State.CREATED:
if player.getLevel() >= 50 : # check player level
htmltext = "Wilbert_start.htm"
else:
htmltext = "<html><body>This quest is for characters above level 50 only.</body></html>"
st.exitQuest(1)
# talk to Wilbert when quest already in progress
elif npcId == WILBERT and id == State.STARTED :
htmltext = "Wilbert_QuestInProgress.htm"
return htmltext
def onKill(self,npc,player,isPet):
st = player.getQuestState(qn)
if not st : return
if st.getState() != State.STARTED : return
npcId = npc.getNpcId()
if npcId in MOBS:
if st.getRandom(100) < DROP_CHANCE:
st.giveItems(SPIRIT_BEAD,1)
st.playSound("ItemSound.quest_itemget")
return
QUEST = Quest(663,qn,"Seductive Whispers")
QUEST.addStartNpc(WILBERT)
QUEST.addTalkId(WILBERT)
for mobId in MOBS:
QUEST.addKillId(mobId)
firefoxi
24.07.2010, 01:16
бегуший титул
тестил на интерлюде все норм пашет
(может было хз если что сори)
// Бегущая строка в титуле, ©Br1nk v0.2
// пишем rt в пати чате для включения и выключения
var
title, temp, titleoff: string;
activated, mult, safemode: integer;
tmr: TTimer;
procedure Init; //Вызывается при включении скрипта
begin
title := 'Padre JIoX A MHe IIoX '; // текст титула
titleoff := '~KPEBEDKO~';
activated := 0; // Определяет, включается ли бегущая строка сразу при запуске скрипта или только после введения команды rt в патичат
safemode := 1; // безопасный режим, стандартная длина титула. Если вы играете на кривой яве, поставьте 0, это даст вам более длинный титул, соответственно выглядит пижже..)
tmr := TTimer.Create(nil);
tmr.Interval := 350; // Частота обновления (мс)
tmr.Enabled := False;
tmr.OnTimer := @Tick;
mult := 1; // Определяет на сколько букв сдвигается строка в титуле при обновлении
end;
procedure Free;
begin
tmr.Free;
SetTitle(titleoff);
end;
procedure Tick;
begin
temp := copy(title, 2 + mult, Length(title) - 1 - mult) + copy(title, 1, 1 + mult);
title := temp;
if safemode then
SetTitle(Copy(temp, 0, 16))
else
SetTitle(temp);
end;
procedure Announce(text:string); // for debug purposes
begin
buf := #$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(text);
SendToClient;
end;
procedure SetTitle(text: string);
begin
buf := HStr('55');
WriteS(ConnectName);
WriteS(text);
WriteD(0);
SendToServer;
end;
begin
if FromClient and (pck=HStr('38 72 00 74 00 00 00 03 00 00 00')) then
begin
if (activated = 1) then
begin
activated := 0;
SetTitle(titleoff);
Announce('Title script powered off.');
end
else
activated := 1;
pck := '';
end;
if (activated = 1) then
tmr.Enabled := True
else
tmr.Enabled := False;
end.
'<button value=" Hero " action="bypass Hero" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL"> mks </font><br>'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" стоп" action="bypass stop" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL">TAMBIK</font><br>'+
'</center></body></html>';
//==========================================
var
Bypass:string;
autoText:Boolean;
TextType:integer;
//==========================================
// ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClientEx(myname);
end;
//========================
procedure ActionUse; //2=PM, 3=Party, 4=Clan, 8=Trade, 9=Alli, 17=Hero
begin
Bypass:=ReadS(2);
case Bypass of
'Trade':begin autoText:=true;TextType:=8; end;//Trade
'Party':begin autoText:=true;TextType:=3; end;//Party
'Clan':begin autoText:=true;TextType:=4; end;//Clan
'Alli':begin autoText:=true;TextType:=9; end;//Alli
'PM':begin autoText:=true;TextType:=0; end;//PM
'Hero':begin autoText:=true;TextType:=17;end;//Hero
'stop':begin autoText:=false;TextType:=0;end;
end;
end;
//-----------------------------------------
procedure Init;
begin
TextType:=0;
autoText:=false;
end;
procedure Free;
begin
end;
//Tип: 0x4A (CreatureSay)
//Pазмер: 83+2
//Время прихода: 12:35:56:375
//0002 d ObjectID: 268899150 (0x1007134E)
//0006 d TextType: 15 (0x0000000F)
//000A s CharName: MaFaca
//0018 s Text: ВТТ ВАШ СЕПОР С СА, ПРЕДЛЫ ПМ
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromClient and (pck[1]=#$34) and (ReadD(2)=06) then begin ShowHTML(HTML); pck:='';exit;end;
if FromClient and (pck[1]=#$23) then begin ActionUse; pck:='';exit;end; //
if FromServer and autoText and (pck[1]=#$4A) and (ReadD(6)=TextType) then begin
buf:=pck;
WriteD(15,6);
pck:=buf;
end;
Простенький скрипт для "глухих", перенаправляет сообщения))
немного добавил..
тестил на IT. Gracia Final
Добавлено через 5 минут
Авто заточка для любых хроник 100% рабочия
// для любых хроник
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один раз чтоб запомнить чем и что точить
// точить для запоминания по одному предмету
// если будите точить разные предметы
// предметы должны соответствовать применяемому skrol
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
// дальше скрипт сам точит до указаного уровня заточки
// все предметы одинаковые с первыми заточеными
// точит первый предмет до максима потом второй и т.д
// т.е если вы заточили несколько разных предметов
// одного класса армор или веапон они будут точиться
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
myname='TAMBIK'; //<<== пишем свой НИК
max=140;//<<== колличество ячеек в рюкзаке
var
BaseItems:array[1..max,1..11] of integer;
BaseID:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
flag,start,select,selectID,autoMsg:Boolean;
autostart:Boolean;
mytext:string;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID: integer;
sumskrol,sumitemID: integer;
key,x,y,ii:integer;
maxlvl: integer;
GetiD:integer;
skrolID,skrolObj:integer;
t,l,d:integer;
//-----------------------------------------
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
if FromClient and (pck[1]=#$49) then begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
count:=round((Length(pck)-5) / ListSize);// длина блока
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
if (0 < skrolObjectID) then begin
sumskrol:=Getitem(skrolID,3,5);
SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;
if (sumskrol=0) then begin
Timer01.enabled:=false;
stopselectskrol;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin
end;
//=============================
procedure InventoryUpdate;
var
Id,ObjId:integer;
begin
ObjId:=ReadD(8);
Id:=ReadD(12);
SendMsg2 ('удален предмет Id : '+IntToStr(Id)+' ObjectID: '+IntToStr(ObjId)+' ');
deleteBase;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=enchantID) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
end;
//===========================================
//
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=================================
//добавляем в базу ID предмета
procedure addIDtoarray(ItemOID:integer);
begin
SendMsg2( '------------------------------------- ' );
SendMsg2 (' добавить в базу для заточки ID : '+IntToStr(ItemOID)+' Предмета ');
SendMsg2(' .................' );
flag:=false;
for ii:=1 to max do
if (BaseID[ii]=ItemOID) then begin // текущий ID уже есть в массиве,
flag := true;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' предмет в базе есть с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
if (flag = false) then begin
for ii:=1 to max do
if (BaseID[ii]=0) then begin // добавим ID в массив,
BaseID[ii]:=ItemOID;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' Добавлен Предмет с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//=============================
procedure ChooseInventory;
begin
if (itemID>0) then begin
objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID=0) then begin
stopselectskrol;
SendMsg2 (' предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ! ');
for ii:=1 to max do
if (BaseID[ii]=itemID) then begin
BaseID[ii]:=0;
SendMsg2 (' ..... ПОИСК ______ ПРЕДМЕТА..... ');
GetItemID ;
Break; // прерываем дальнейший перебор массива.
end;
if (itemID=0) then begin
SendMsg2 ('___НЕТ ПРЕДМЕТОВ ДЛЯ ЗАТОЧКИ___ ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
stopselectskrol;
start:=false;
end;
end;
end;
end;
//=================================
// GetiD:=GetItemID(itemID);//находим в базе ItemID предмет для Заточки
//находим ItemID предмета для Заточки в базе ItemID
procedure GetItemID ;
begin
if start then begin
if (maxlvl=0) then begin
SendMsg2 (' неуказан уровень заточки ');
stopselectskrol;
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
if (maxlvl>0) then begin
itemID:=0;
for ii:=1 to max do
if (BaseID[ii]<>0) then begin
itemID:=BaseID[ii];
SendMsg2 (' НАШЛИ ПРЕДМЕТ для ЗАТОЧКИ с ID = '+IntToStr(itemID)+' ');
Timer01.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
end;
//=================================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
SendMsg2('------------------------------' );
if (itemID>0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3]= itemID) and (BaseItems[i,11]< maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... найден предмет для заточки ..... ');
SendMsg2(' ID : '+IntToStr( itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+' ');
SendMsg2('------------------------------' );
if (enchantID>0) then startselectEnch;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure startselectEnch;
begin
Timer02.enabled:=true
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+' ' );
SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
t:=0;l:=0;d:=0;
autostart:=false;
flag:=false;
selectID:=false;
autoMsg:=true;
GetiD:=0;
sumskrol:=0;
objectOID:=0;
maxlvl:=0;
itemID:=0;
enchantID:=0;
ItemEnch:=0;
start:=false;
select:=false;
skrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=400; //<<== время выбора предмета
Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=3000; //<<== время между заточкой
SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предметы один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
BaseID[ii]:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; pck:=''; exit; end;
13:begin autoMsg:=false; pck:=''; exit; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if autostart then begin
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
GetItemID ;
pck:='';
exit;
end;
end;
25:begin
start:=false;
enchantID:=0;
ItemEnch:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
pck:='';
exit;
end;
end;
end;
//=========
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$21) and (ReadH(4)=3)then InventoryUpdate;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then Resultmaxlvl;
if FromClient and (pck[1]=#$56) then RequestActionUse;
begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' заточен предмет c ID : '+IntToStr(ItemOID)+' ');
SendMsg2(' .................' );
addIDtoarray(ItemOID);//добавляем в базу ID предмета
stopselectskrol;
end;
end;
end;
end;
end.
Добавлено через 19 минут
для лоу рейтов
Скрипты для валкера
Первая профа Human Wizard
Надо немного денег, и сое штук 10.
Не предусмотрено погибель чара. Так же цены могут не много не совподать
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Trade with Ivory Tower
Скрипт на выполнение даркэльфийского грибного квеста.
Запускать скрипт на даркэльфийской территории или в городу (у нубигайда).
В скрипте нет проверок на перегрузку и продажи хлама.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Скрипт на прохождение первой профы на Scaveneger'а. Два скрипта. Сначало первый, потом второй.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Markulus
08.08.2010, 01:56
везде видел упоминание о скрипте на авто рес.. а может кто выложит?
MyHanD's
08.08.2010, 16:53
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.
Рабочийй скрипт на ИТ. Мало где фикс.
4yna4ynC
09.08.2010, 11:28
везде видел упоминание о скрипте на авто рес.. а может кто выложит?
//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор pmen ICQ - 479917081
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=
const
//======================================
Name='Krisa'; //<-----Ник Персонажа
//======================================
var
a:integer;x:integer;MyID:string;
y:integer;z:integer;
b:boolean;ValidatePosition:string;
procedure Init; //Вызывается при включении скрпта
begin
SendMsc('Возьми себя в таргет'); //Системное сообщение
b:=false; //Условие b первоночально False
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
begin
//Нечитаем пустые пакеты
if pck='' then exit;
//Если Имя соединения Name
//И Пакет Action от клиента то
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then
begin
//Сохраняем мой Обжект Ид
MyID:= pck[2]+pck[3]+pck[4]+pck[5];
a:=ReadD(2); x:=ReadD(6); //Читаем и запоминаем данные
y:=ReadD(10); z:=ReadD(14);
SendMsc('Все данные сохранены!'); //Оповещаем о том что все прошло успешно
b:=true;
end;
begin
if pck='' then exit; //Не читаем пустые пакеты
//Если от Клиента пакет RequestRestartPoint
//Запоминаем ValidatePosition до revive
//Посылаем клиенту TeleportToLocation
if FromClient and (ConnectName=Name) and (pck=hstr('6D 00 00 00 00')) then
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then ValidatePosition:=pck;
if FromServer and (ConnectName=Name) and (pck[1]=#$28) and (MyID= pck[2]+pck[3]+pck[4]+pck[5]) then
begin
pck:=''; //Убиваем стандартный пакет
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
buf:=#$28;
WriteD(A); //Obj.ID
WriteD(X); //Coord.X
WriteD(Y); //Coord.Y
WriteD(Z); //Coord.Z
SendtoclientEX(Name);
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
end;
end;
end.
IncubusX
10.08.2010, 20:21
Добрый вечер, решил сделать скрипт для l2phx для автоматической проверки мультиселлов, но столкнулся с такой проблемой, если лист большой то слишком долго менять скрипт надо. За пример взял скрипт с Coderx.ru
var
TimerCycle:integer;
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=1;
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
TimerCycle:=1;
end;
procedure OnTimer(Sender: TObject);
begin
case TimerCycle of
1:begin
buf:=HStr('A70487010040420F00010000000000000000000 000'); //1 пакет
sendtoserver;
Inc(TimerCycle);
timer.interval:=1;
end;
2:begin
buf:=HStr('A709030000200B2000010000000000000000000 000'); //2 пакет
sendtoserver;
Inc(TimerCycle);
timer.interval:=1;
end;
3:begin
buf:=HStr('A709030000801A0600E80300000000000000000 000'); //3 пакет
sendtoserver;
Inc(TimerCycle);
timer.interval:=1;
end;
4:begin
buf:=HStr('A711270000A0860100010000000000000000000 000'); //4 пакет
sendtoserver;
TimerCycle:=1;
timer.interval:=1;
end;
end;
end;
procedure Free;
begin
timer.free;
end;
begin
useforconnectid := ConnectID;
if FromClient and (pck=HStr('56 0D 00 00 00 00 00 00 00 00')) then timer.enabled:=true;
if FromClient and (pck=HStr('39 0F 02 00 00 00 00 00 00 00')) then timer.enabled:=false;
end.
Но при такой реализации необходимо каждый пакет добавлять в скрипт, самой лучшей реализацией было бы иметь в папке со скриптом файл например packet.pct в котором спосок мультиселлов а скрипт считывает построчно из этого файла эти пакеты пока они не кончатся. Прошу помочь реализовать данный скрипт, он будет полезен не только мне! :elefant:
ParaDie[Z]
26.08.2010, 19:42
Расчитано на пвп серваки и изобилие блес точек...
Использование: включаем скрипт, 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.
Powered by vBulletin
Copyright © 2010 vBulletin Solutions, Inc. Перевод:
zCarotG-gaMe! Team production