Скриптинг Форум посвещенный созданию скриптов для L2PacketHack
01.03.2009, 14:36
#1
Местный
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
ItemPainter по идее QaK
Скрипт для рисования аденой и другими предметами.
Вобщем увидел в теме Рисую аденой:
Цитата:
никому не надо пока готовое, хотябы 60% рабочее, кто-нить не выложит.
А вообще лучше сделать так: рисуешь в любом графическом редакторе черным по белому. Сохраняешь как матрицу нулей и единиц 0 - белый, 1 - черный, потом читаешь матрицу и, соответственно выкидываешь адену по всему массиву.
З.Ы. идея интересная, реализовывать - тупо лень =)
(Это коммент QaK так что идея его)
История версий
Оффтоп
Код:
ver 0,1
-Графический интерфейс
-Возможность выбора предмета для каждого из 5 цветов
-Загрузка картинки с помощью диалога
-Масштаб от 1:1 до 10:1
ver 0,2
-Выбор направления (теперь не рисует только на север)
-Мелкие исправления и доработки
delphi Код:
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 .
Все работает как часы, единственное что он стопориться если ему мешает препятствие или большая разница в координатах Z так что рисовать лучше на более-менее ровной поверхности.
Скрипт для Gracia
ЗДЕСЬ
Вот для примера эту картинку
скрипт нарисовал так:
Еще одна картинка нарисованная этим скриптом:
Последний раз редактировалось Fer123, 17.05.2009 в 19:18 .
Причина: обновление версии скрипта
За это сообщение Fer123 нажился 24 спасибками от:
AD! ,
Anton5 ,
bistriy ,
bot-psih ,
Breadfan ,
catchy ,
dmitry501 ,
dyh9l ,
Grinch ,
He3eMHou ,
HellFire ,
Insane* ,
Johnson ,
mavi ,
MyGarant.net ,
NLObP ,
NoFear ,
QaK ,
RazdoR ,
safalkon ,
TAMBIK ,
Tekymse ,
TrueLegitPlayer ,
xkor
01.03.2009, 16:17
#2
Новичок
Регистрация: 27.12.2008
Сообщений: 12
Сказал Спасибо: 6
Имеет 1 спасибку в 1 сообщении
Чё-то у мну не пашет(( Вводит команду /loc и всё.
01.03.2009, 16:21
#3
Рыцарь
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
грац но имхо запалят забанят ручками так ровно нельзя
01.03.2009, 16:52
#4
Местный
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
Цитата:
Сообщение от
safalkon
Чё-то у мну не пашет(( Вводит команду /loc и всё.
Возможно изза того что ты используешь не С4 (интерлюд)
Цитата:
Сообщение от
Grinch
грац но имхо запалят забанят ручками так ровно нельзя
Спасибо приятно
Кстате все зависит от того как криво нарисуешь картинку, так что если захотеть не забанят и таймер интервал можно увеличить...
Последний раз редактировалось Fer123, 01.03.2009 в 22:07 .
01.03.2009, 17:43
#5
Новичок
Регистрация: 27.12.2008
Сообщений: 12
Сказал Спасибо: 6
Имеет 1 спасибку в 1 сообщении
Ну я вообщет на ШОКе гамаю.
01.03.2009, 20:24
#6
Местный
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
Цитата:
Сообщение от
safalkon
Ну я вообщет на ШОКе гамаю.
Попробуй словить пакет 64 (System Message) после /loc и прочитай в нем
64 XX XX XX XX - эти 4 байта и в этой строке замени на свое значение вместо 910
#$64: if ReadD(2)=910 then
Если не сработает отпишись, посмотрим в чем проблема...
01.03.2009, 22:21
#7
Рыцарь
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
Fer123 , однозначно респект за реализацию, маладца =)
Добавлено через 13 минут
З.Ы. Кстати еще идея - расширение данного скрипта - добавь другие предметы - будут другие цвета, например: антидот - зеленый, ну и т.д. - однозначно красивее будет =)
Последний раз редактировалось QaK, 01.03.2009 в 22:21 .
Причина: Добавлено сообщение
01.03.2009, 23:46
#8
Новичок
Регистрация: 15.01.2009
Сообщений: 7
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
ковырял етот скрипт и так и не понял как он считывает чёрные пиксели и кидает адену если она у меня первая в списке. Обьясни по понятнее что к чему. Я буду переписывать етот скрипт для клиента Gracia Part 2.
02.03.2009, 03:20
#9
Местный
Регистрация: 19.08.2008
Сообщений: 111
Сказал Спасибо: 43
Имеет 25 спасибок в 14 сообщенях
Супер! Автору такая же огромная пятерка как там слово!
И QaK молодец, что дал такую идею и вот уже кто-то её реализовал. И, кстати, с разными цвета тоже будет мега зачетно.
От такой работы появляется желание освоить пакет хак, чтобы суметь редактировать этот скрипт и рисовать такие идеально четкие буковки)
02.03.2009, 09:11
#10
Местный
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
QaK
Спасибо
Уже реализовано, в комбобоксе color нужно выбрать цвет а за тем предмет к нему в боксе item. Всего 5 цветов черный красный зеленый голубой желтый. К каждому цвету можно отдельный предмет привязать.
bistriy
Загружается бмп файл в виде матрицы пикселей и потом слева на право считывается как обычная матрица, проверяется цвет каждого пикселя. Если находит 1 из пяти цветов и для них установлен какойто предмет то выкидывает его на землю с стартовыми координатами + координатами пикселя в матрице
Опции темы
Опции просмотра
Линейный вид
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 06:18 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!