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*GemsAmount)+')</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)+'.'+TimeToStr(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 соски С воин на любой другой предмета который будете продавать.
Автоматизация старого дюпа ц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#$00#$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.
________________
Чем тоньше лёд, тем больше всем хочется убедиться, выдержит ли он.(с) Помог -> Спасибку!
Последний раз редактировалось Catchy; 19.07.2009 в 19:15.
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,ComboBoxDirection: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*(ComboBoxScale.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*(ComboBoxScale.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,ComboBoxDirection: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*(ComboBoxScale.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*(ComboBoxScale.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.
Инструкция:
[HTML]//В Name ввдите ник
Нарисуйте картинку в любом графическом редакторе.
В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
scale - масштаб отступа между предметами от 1:1 до 10:1
Самый оптимальный масштаб 5:1
Направление - согласно компасу в игре[/HTML]
Пример [Ссылки могут видеть только зарегистрированные пользователи. ]
PHP код:
Копирайт Coderx.ru отедльное спасибо Fer123 и QaK за идею и исполнение=)
Скрипт для поиска сундуков по 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
//проверялось на ХБ
//не забудьте вписать имя своего чара
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.
Цитата:
Сообщение от devils0n
Скрипт на заточку лежал до недавнего времени в подполье, но им особо там некто не пользуется (да и сам скрипт в шару был отправлен давно) - перезалейти этот скрипт пожалуйста...
Цитата:
Сообщение от gashich
перезалейте плиз
Цитата:
Сообщение от tokmakow
Перезалейте на депозит плииииз
Перезалил Автоматизация заточки предметов до необходимого уровня by NLObP
Применение: Вставте в l2phx во вкладку скрипты не забудьте поменять ник(NLObP) в скрипте на свой.
Автор скрипта: NLObP
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
Автоматизация изготовления ключей
Автор: 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.
Последний раз редактировалось Benjamin; 15.08.2009 в 18:53.
Причина: Добавлено сообщение
Скрипт на тп , то место которое запомнили(для серверов с тупой гео) Тестил на 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.
Удобно Использовать вместе с скриптом на тп.Например ходить на твт(Сохранил точку где появился, тп в город за бафом и потом обратно на арену) .
Последний раз редактировалось MarkoPolo; 08.09.2009 в 21:38.
Простенький скрипт для "глухих", перенаправляет сообщения приходящие из выбранного вами чата в чат 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.
Скрипт на перевод текста .
Например заходишь в игру и пишешь 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.
//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор 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.
Последний раз редактировалось HellFire; 10.10.2009 в 20:55.
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.
Последний раз редактировалось Mest; 29.10.2009 в 13:26.
Причина: Добавлено сообщение