Скриптинг Форум посвещенный созданию скриптов для 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
29.06.2010, 23:55
#101
Местный
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
Цитата:
Сообщение от
supernewbie
то что он пишет тип не может бросить так далеко это окей?)
блин, полный отстой, на нашем серваке исчезает все через 10 минут(
Там есть проверка на расстояние чара к точке выброса, надо уменьшить это расстояние.
А то что исчезают не проблема
Заблокируйте пакет (к сожалению не помню id) на удаление итема с земли (всего одна строчка if FromServer and pck[1]=#$ID then pck:=''; ) и исчезновение не будет мешать рисовать, правда картинку только вы сможете видеть, но скрин выйдет как надо
__________________
В любом из нас спит гений. И с каждым днем все крепче.
Переходим на протокол нового поколения jabber
30.06.2010, 02:18
#102
Местный
Регистрация: 05.11.2008
Сообщений: 168
Сказал Спасибо: 35
Имеет 139 спасибок в 66 сообщенях
supernewbie , MaxDistance поставь меньше...
J-Fobos , если уж на то пошло, то можно вместо RequestDropItem сделать SpawnItem для клиента. Тогда уже и на счет расстояния не надо париться, и таймер интервал можно поставить хоть 1 мсек.
30.06.2010, 02:45
#103
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
Цитата:
Сообщение от
J-Fobos
Там есть проверка на расстояние чара к точке выброса, надо уменьшить это расстояние.
А то что исчезают не проблема
Заблокируйте пакет (к сожалению не помню id) на удаление итема с земли (всего одна строчка if FromServer and pck[1]=#$ID then pck:=''; ) и исчезновение не будет мешать рисовать, правда картинку только вы сможете видеть, но скрин выйдет как надо
спасибо блин кэп) но как бы эт самое главное( чтобы все видели(
переделал под пакеты на клиент, лаги жуть)
Последний раз редактировалось supernewbie, 30.06.2010 в 03:04 .
30.06.2010, 14:09
#104
Местный
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
...начали появляться индивидуумы, рисующие чегонть прям на тп, наподобие "вары - казлы", что приводит к увеличению времени прогрузки после тп того же вара, и спокойно сливают, даже танки отлетают, невзирая на кучу удов...просто не могут прогрузиться успеть...Оно, конечно, и просто так можно накидать кучу хлама, но когда хлам сложен в ровные и аккуратные буковки - вдвойне приятно (неприятно)
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
10.11.2010, 16:27
#105
Новичок
Регистрация: 10.11.2010
Сообщений: 1
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Попробовал запустить на Gracia Final. Тот скрипт что в начале - ругается. Выкидывать не хочет. В игре в чат пишет что не может так часто что то там...
Скачал скрипт от supernewbie - ItemPainter по идее QaK.rar
Начал рисовать но в чате в игре пишет что "Невозможно так часто повторить" или как то так.
Вопрос - в какой строке скрипта надо заменить число, чтобы время между выбросами итемов увеличить?!
P.S.Заранее спс!
11.11.2010, 01:08
#106
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Цитата:
Сообщение от
AdioS
Вопрос - в какой строке скрипта надо заменить число, чтобы время между выбросами итемов увеличить?!
Найди такую строку и исправь её
delphi Код:
timer.interval :=700 ; //время задержки
09.05.2011, 05:44
#107
Новичок
Регистрация: 09.05.2011
Сообщений: 1
Сказал Спасибо: 0
Имеет 2 спасибок в 1 сообщении
За это сообщение Seque1 нажился 2 спасибками от:
09.05.2011, 16:15
#108
Местный
Регистрация: 04.11.2009
Адрес: Где-то в жопе европы
Сообщений: 316
Сказал Спасибо: 32
Имеет 42 спасибок в 39 сообщенях
Seque1 , Супер хД
05.03.2012, 07:48
#109
Новичок
Регистрация: 05.03.2012
Сообщений: 1
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
Добрый день\вечер,хотелось бы узнать возможно этот скрипт подогнать под high five?
p.s. поиск юзал,и эта единственная тема по "рисункам аденой"
прошу ответить мне и не удалять мой пост
.Простите что поднял тему 2х летний давности,но это очень важно для меня
05.03.2012, 10:06
#110
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
Zooey , канеш возможно, только инфа 97% что всем пох и нет времени на это, так что флаг тебе в руки
__________________
Н а ч а л о .
За это сообщение supernewbie нажился 3 спасибками от:
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 03:34 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!