L2-Community.com - Bce o Lineage II  
Главная Регистрация Справка Пользователи Поиск Сообщения за день Все разделы прочитаны
 
 
Старый 01.03.2009, 01:41   #1
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию Скрипты для L2PacketHack

Что нужно знать для написания скриптов?
Прежде всего вам понадобится умение программирования на Object Pascal (или Delphi, что примерно тоже самое) и для манипуляций с пакетами естественно понадобится знать что они из себя представляют, о пакетах подробнее можно почитать в соответствующей теме. Литературы по Object Pascal куча, так что не будем на нем останавливатся, перейдем сразу к скриптовому движку программы.



Программа использует скриптовый движок FastScript.

Реализованные особенности:
- Стандартный языковой набор: переменные, константы, процедуры, функции (с возможностью вложенности) с переменными/постоянными/умалчиваемыми параметрами, все стандартные операторы и объявления (включая case, try/finally/except, with), типы (целый, дробный, логический, символьный, строковый, многомерные массивы, множество, variant), классы (с методами, событиями, свойствами, индексами и свойствами по умолчанию).
- Проверка совместимости типов.

Нереализованные особенности:
- Отсутствуют объявления типов (records, classes) в скрипте; нет записей (records), указателей (pointers), множеств (sets) (однако возможно использование оператора 'IN' - "a in ['a'..'c','d']"), нет типа shortstrings, нет безусловного перехода (GOTO).


Описание языка

Синтаксис PascalScript:

Код:
Program -> [PROGRAM Ident ';']
           [UsesClause]        
           Block '.'           

UsesClause -> USES (String/,)... ';' 

Block -> [DeclSection]...   
         CompoundStmt       

DeclSection -> ConstSection         
            -> VarSection           
            -> ProcedureDeclSection 

ConstSection -> CONST (ConstantDecl)... 

ConstantDecl -> Ident '=' Expression ';' 

VarSection -> VAR (VarList ';')...

VarList -> Ident/','... ':' TypeIdent [InitValue] 

TypeIdent -> Ident  
          -> Array  

Array -> ARRAY '[' ArrayDim/','... ']' OF Ident  

ArrayDim -> Expression..Expression  
         -> Expression              

InitValue -> '=' Expression  

Expression -> SimpleExpression [RelOp SimpleExpression]...

SimpleExpression -> ['-'] Term [AddOp Term]... 

Term -> Factor [MulOp Factor]...

Factor -> Designator                     
       -> UnsignedNumber                 
       -> String                         
       -> '(' Expression ')'             
       -> NOT Factor                     
       -> '[' SetConstructor ']'         

SetConstructor -> SetNode/','...  

SetNode -> Expression ['..' Expression]  

RelOp -> '>'   
      -> '<'   
      -> '<='  
      -> '>='  
      -> '<>'  
      -> '='   
      -> IN    
      -> IS    

AddOp -> '+'  
      -> '-'  
      -> OR   
      -> XOR  

MulOp -> '*'
      -> '/'    
      -> DIV    
      -> MOD    
      -> AND
      -> SHL    
      -> SHR    

Designator -> ['@'] Ident ['.' Ident | '[' ExprList ']' | '(' ExprList ')']...  

ExprList -> Expression/','...  

Statement -> [SimpleStatement | StructStmt]  

StmtList -> Statement/';'...  

SimpleStatement -> Designator                     
                -> Designator ':=' Expression     
                -> BREAK | CONTINUE | EXIT        

StructStmt -> CompoundStmt        
           -> ConditionalStmt     
           -> LoopStmt            
           -> TryStmt             
           -> WithStmt            

CompoundStmt -> BEGIN StmtList END   

ConditionalStmt -> IfStmt     
                -> CaseStmt   

IfStmt -> IF Expression THEN Statement [ELSE Statement]

CaseStmt -> CASE Expression OF CaseSelector/';'... [ELSE Statement] [';'] END  

CaseSelector -> SetConstructor ':' Statement

LoopStmt -> RepeatStmt  
         -> WhileStmt   
         -> ForStmt     

RepeatStmt -> REPEAT StmtList UNTIL Expression  

WhileStmt -> WHILE Expression DO Statement  

ForStmt -> FOR Ident ':=' Expression ToDownto Expression DO Statement  

ToDownto -> (TO | DOWNTO)  

TryStmt -> TRY StmtList (FINALLY | EXCEPT) StmtList END  

WithStmt -> WITH (Designator/,..) DO Statement  

ProcedureDeclSection -> ProcedureDecl  
                     -> FunctionDecl   

ProcedureDecl -> ProcedureHeading ';'  
                 Block ';'             

ProcedureHeading -> PROCEDURE Ident [FormalParameters]  

FunctionDecl -> FunctionHeading ';'  
                Block ';'

FunctionHeading -> FUNCTION Ident [FormalParameters] ':' Ident

FormalParameters -> '(' FormalParam/';'... ')'

FormalParm -> [VAR | CONST] VarList
Структура скрипта:
Структура PascalScript почти такая же, как и у Object Pascal:
Код:
program MyProgram;     // опционально

uses 'unit1.pas', 'unit2.pas'; 
// раздел uses должен быть перед любыми другими разделами
// Таким образом, они могут иметь секции 'program', 'uses' и должны иметь секцию 'main procedure'.

var                    // раздел var 
  i, j: Integer;

const                  // раздел const 
  pi = 3.14159;

procedure p1;          // процедуры и функции
var
  i: Integer;

  procedure p2;        // вложенная процедура
  begin
  end;

begin
end;

begin                  // главный исполняемый модуль.
end.
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Sponsored Links
Старый 01.03.2009, 01:45   #2
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию

Типы данных:
FastScript работает с типом Variant и основан на нём. Тем не менее, вы можете использовать следующие предопределённые типы в ваших скриптах:
Код:
Byte      | целочисленные
Word      |
Integer   |
Longint   |
Cardinal  |
TColor    |

Boolean   | логический

Real      | расширенный (с плавающей запятой)
Single    |
Double    |
Extended  |
Currency  |
TDate     |
TTime     |
TDateTime |

Char      | символьный

String    | строковый

Variant   | Variant (вариантный тип)
Pointer   |

Array     | массив
Классы:
Вы не можете объявить класс в скрипте, но вы можете использовать внешние классы, объявленные в вашем приложении или в дополнительных модулях. Вот демонстрационный пример:
Код:
var
  f: TForm;
  b: TButton;

procedure ButtonClick(Sender: TButton);
begin
  ShowMessage(Sender.Name);
  f.ModalResult := mrOk;
end;

// нет никакой необходимости использовать все параметры в обработчиках событий,
// потому что здесь не производится никакого контроля соответствия типов

procedure ButtonMouseMove(Sender: TButton);
begin
  b.Caption := 'moved over';
end;

begin
  f := TForm.Create(nil);
  f.Caption := 'Test it!';
  f.BorderStyle := bsDialog;
  f.Position := poScreenCenter;

  b := TButton.Create(f);
  b.Name := 'Button1';
  b.Parent := f;
  b.SetBounds(10, 10, 75, 25);
  b.Caption := 'Test';

  b.OnClick := @ButtonClick; { same as b.OnClick := 'ButtonClick' }
  b.OnMouseMove := @ButtonMouseMove;

  f.ShowModal;
  f.Free;
end.
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 01.03.2009, 01:49   #3
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию

Функции:
В скрипте можно использовать богатейший набор стандартных функций.
Преобразование типов
Код:
function IntToStr(i: Integer): String 
Перевод целого в строку

function FloatToStr(e: Extended): String  
Перевод числа с плавающей запятой в строку

function DateToStr(e: Extended): String 
Перевод даты в строку

function TimeToStr(e: Extended): String 
Перевод времени в строку

function DateTimeToStr(e: Extended): String 
Перевод даты и времени в строку
  
function VarToStr(v: Variant): String
Перевод variant в строку

function StrToInt(s: String): Integer 
Перевод строки в целое

function StrToFloat(s: String): Extended  
Перевод строки в число с плавающей запятой

function StrToDate(s: String): Extended 
Перевод строки в дату

function StrToTime(s: String): Extended 
Перевод строки во время

function StrToDateTime(s: String): Extended 
Перевод строки в дату и время
Форматирование:
Код:
function Format(Fmt: String; Args: array): String 
Форматирование

function FormatFloat(Fmt: String; Value: Extended): String  
Форматирование числа с плавающей запятой

function FormatDateTime(Fmt: String; DateTime: TDateTime): String 
Форматирование даты и времени

function FormatMaskText(EditMask: string; Value: string): string  
Форматирование строки по маске
Дата/время:
Код:
function EncodeDate(Year, Month, Day: Word): TDateTime  
перевод года, месяца и дня в формат даты

procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word) 
Перевод даты в года, месяц и день

function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime  
Перевод часов, минут и секунд в формат времени

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) 
Перевод времени в часы, минуты и секунды

function Date: TDateTime  
Текущая дата

function Time: TDateTime  
Текущее время

function Now: TDateTime 
Текущие дата и время

function DayOfWeek(aDate: DateTime): Integer  
День недели

function IsLeapYear(Year: Word): Boolean  
Високосный год

function DaysInMonth(nYear, nMonth: Integer): Integer 
Дней в месяце
Строковые функции
Код:
function Length(s: String): Integer 
Длина строки

function Copy(s: String; from, count: Integer): String  
Возвращает подстроку из строки с заданной позиции заданной длины

function Pos(substr, s: String): Integer  
Позиция подстроки в строке

procedure Delete(var s: String; from, count: Integer) 
Удаляет подстроку из строки с заданной позиции заданной длины

procedure Insert(s: String; var s2: String; pos: Integer) 
Добавляет первую строку ко второй строке

function Uppercase(s: String): String 
Перевод строки в верхний регистр

function Lowercase(s: String): String 
Перевод строки в нижний регистр

function Trim(s: String): String  
Удаляет окружающие пробелы из строки

function NameCase(s: String): String  
Перевод первого символа в верхний регистр

function CompareText(s, s1: String): Integer  
Сравнение строк

function Chr(i: Integer): Char  
Возвращает символ с заданным номером

function Ord(ch: Char): Integer 
Возвращает номер заданного символа

procedure SetLength(var S: String; L: Integer)  
Устанавливает длину строки
Математические функции
Код:
function Round(e: Extended): Integer  
Округление до ближайшего

function Trunc(e: Extended): Integer  
Округление до меньшего

function Int(e: Extended): Integer  
Возвращает целую часть

function Frac(X: Extended): Extended  
Возвращает дробную часть

function Sqrt(e: Extended): Extended  
Возвращает квадратный корень

function Abs(e: Extended): Extended 
Возвращает модуль числа

function Sin(e: Extended): Extended 
Синус

function Cos(e: Extended): Extended 
Косинус

function ArcTan(X: Extended): Extended  
Арктангенс

function Tan(X: Extended): Extended 
Тангенс

function Exp(X: Extended): Extended 
Экспонента

function Ln(X: Extended): Extended  
Натуральный логарифм

function Pi: Extended 
Число Пи
Другие
Код:
procedure Inc(var i: Integer; incr: Integer = 1)  
Инкремент

procedure Dec(var i: Integer; decr: Integer = 1)  
Декремент

procedure RaiseException(Param: String) 
Генерация исключения

procedure ShowMessage(Msg: Variant) 
Вывод сообщения

procedure Randomize 
Инициализация генератора псевдослучайных чисел

function Random: Extended 
Генерация псевдослучайного числа

function ValidInt(cInt: String): Boolean  
Проверка валидности целого в строке

function ValidFloat(cFlt: String): Boolean  
Проверка валидности цисла с плавающей запятой в строке

function ValidDate(cDate: String): Boolean  
Проверка валидности даты в строке

function CreateOleObject(ClassName: String): Variant
Создание OLE-объекта

function VarArrayCreate(Bounds: Array; Typ: Integer): Variant
Создание динамического массива
Как видите, некоторые функции и процедуры содержат параметры по умолчанию. Вы можете вызывать их так же, как и в Delphi:
Inc(a);
Inc(b, 2);
Также вы можете подключить свои собственные процедуры и функции к скрипту.
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 01.03.2009, 01:54   #4
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию

События
Вы можете использовать обработчики событий в скрипте. В отличие от обработчиков событий в Delphi, обработчики событий в скрипте не являются методами объекта. Следующий пример показывает, как подключить обработчик события к событию
Код:
TButton.OnClick:


var
  b: TButton;
  Form1: TForm;

procedure ButtonClick(Sender: TButton);
begin
  ShowMessage(Sender.Name);
end;

begin
  b := TButton.Create(Form1);
  b.Parent := Form1;
  b.OnClick := @ButtonClick; { тоже что и b.OnClick := 'ButtonClick' }
  b.OnClick := nil; // сброс обработчика
end.
Вот некоторые предопределенные события, доступные в модуле FS_iEvents:
Код:
  TfsNotifyEvent
  TfsMouseEvent
  TfsMouseMoveEvent
  TfsKeyEvent
  TfsKeyPressEvent
  TfsCloseEvent
  TfsCloseQueryEvent
  TfsCanResizeEvent
Смотрите главы "Компонент TfsFormsRTTTI ", "Компонент TfsExtCtrlsRTTI " и "Компонент TfsDBCtrlsRTTI " для получения списка доступных событий.



Перечисления и множества
FastScript поддерживает перечисления. Вы можете написать в скрипте:
Код:
Form1.BorderStyle := bsDialog;
Множества не поддерживаются. Тем не менее, вы можете оперировать элементами множества:
Код:
Font.Style := fsBold;            // Font.Style := [fsBold] в Delphi
Font.Style := fsBold + fsItalic; // Font.Style := [fsBold, fsItalic]
Font.Style := 0;                 // Font.Style := []

Массивы
FastScript поддерживает все типы массивов: статические (одномерные, многомерные), динамические, вариантные. Вот пример скрипта, использующего три массива целых чисел, объявленных разным способом:
Код:
var 
  ar1: array[0..2] of Integer;
  ar2: array of Integer;
  ar3: Variant;

SetLength(ar2, 3);
ar3 := VarArrayCreate([0, 2], varInteger);
ar1[0] := 1;
ar2[0] := 1;
ar3[0] := 1;
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 01.03.2009, 01:57   #5
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию

Доступные классы
Из модуля Classes:
Код:
TObject
constructor TObject.Create
procedure TObject.Free

TPersistent
procedure TPersistent.Assign(Source: TPersistent)

TList
function TList.Add(Item: TObject): Integer
procedure TList.Clear
procedure TList.Delete(Index: Integer)
function TList.IndexOf(Item: TObject): Integer
procedure TList.Insert(Index: Integer; Item: TObject)
function TList.Remove(Item: TObject): Integer
property TList.Count
property TList.Items

TStrings
function TStrings.Add(const S: string): Integer
function TStrings.AddObject(const S: string; AObject: TObject): Integer
procedure TStrings.Clear
procedure TStrings.Delete(Index: Integer)
function TStrings.IndexOf(const S: string): Integer
function TStrings.IndexOfName(const Name: string): Integer
function TStrings.IndexOfObject(AObject: TObject): Integer
procedure TStrings.Insert(Index: Integer; const S: string)
procedure TStrings.InsertObject(Index: Integer; const S: string; AObject: TObject)
procedure TStrings.LoadFromFile(const FileName: string)
procedure TStrings.LoadFromStream(Stream: TStream)
procedure TStrings.SaveToFile(const FileName: string)
procedure TStrings.SaveToStream(Stream: TStream)
property TStrings.CommaText
property TStrings.Count
property TStrings.Names
property TStrings.Objects
property TStrings.Values
property TStrings.Strings
property TStrings.Text

TStringList
function TStringList.Find(s: String; var Index: Integer): Boolean
procedure TStringList.Sort
property TStringList.Duplicates
property TStringList.Sorted

TStream
function TStream.Read(Buffer: string; Count: Longint): Longint
function TStream.Write(Buffer: string; Count: Longint): Longint
function TStream.Seek(Offset: Longint; Origin: Word): Longint
function TStream.CopyFrom(Source: TStream; Count: Longint): Longint
property TStream.Position
property TStream.Size

TFileStream
constructor TFileStream.Create(Filename: String; Mode: Word)

TMemoryStream
procedure TMemoryStream.Clear
procedure TMemoryStream.LoadFromStream(Stream: TStream)
procedure TMemoryStream.LoadFromFile(Filename: String)
procedure TMemoryStream.SaveToStream(Stream: TStream)
procedure TMemoryStream.SaveToFile(Filename: String)

TComponent
constructor TComponent.Create(AOwner: TComponent)
property TComponent.Owner

TfsXMLItem
constructor TfsXMLItem.Create
procedure TfsXMLItem.AddItem(Item: TfsXMLItem)
procedure TfsXMLItem.Clear
procedure TfsXMLItem.InsertItem(Index: Integer; Item: TfsXMLItem)
function TfsXMLItem.Add: TfsXMLItem
function TfsXMLItem.Find(const Name: String): Integer
function TfsXMLItem.FindItem(const Name: String): TfsXMLItem
function TfsXMLItem.Prop(const Name: String): String
function TfsXMLItem.Root: TfsXMLItem
property TfsXMLItem.Data
property TfsXMLItem.Count
property TfsXMLItem.Items
property TfsXMLItem.Name
property TfsXMLItem.Parent
property TfsXMLItem.Text

TfsXMLDocument
constructor TfsXMLDocument.Create
procedure TfsXMLDocument.SaveToStream(Stream: TStream)
procedure TfsXMLDocument.LoadFromStream(Stream: TStream)
procedure TfsXMLDocument.SaveToFile(const FileName: String)
procedure TfsXMLDocument.LoadFromFile(const FileName: String)
property TfsXMLDocument.Root

const fmCreate
const fmOpenRead
const fmOpenWrite
const fmOpenReadWrite
const fmShareExclusive
const fmShareDenyWrite
const fmShareDenyNone
const soFromBeginning
const soFromCurrent
const soFromEnd
type TDuplicates
Из модуля Graphics:
Код:
TFont
TPen
TBrush
TCanvas
procedure TCanvas.Draw(X, Y: Integer; Graphic: TGraphic)
procedure TCanvas.Ellipse(X1, Y1, X2, Y2: Integer)
procedure TCanvas.LineTo(X, Y: Integer)
procedure TCanvas.MoveTo(X, Y: Integer)
procedure TCanvas.Rectangle(X1, Y1, X2, Y2: Integer)
procedure TCanvas.RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer)
procedure TCanvas.StretchDraw(X1, Y1, X2, Y2: Integer; Graphic: TGraphic)
function TCanvas.TextHeight(const Text: string): Integer
procedure TCanvas.TextOut(X, Y: Integer; const Text: string)
function TCanvas.TextWidth(const Text: string): Integer
property TCanvas.Pixels

TGraphic
procedure TGraphic.LoadFromFile(const Filename: string)
procedure TGraphic.SaveToFile(const Filename: string)
property TGraphic.Height
property TGraphic.Width

TMetafile
TMetafileCanvas
TBitmap
property TBitmap.Canvas

type TFontStyles
type TFontPitch
type TPenStyle
type TPenMode
type TBrushStyle
Из модулей StdCtrls и Forms:
Код:
TControl
property TControl.Parent
procedure TControl.Hide
procedure TControl.Show
procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer)
event TControl.OnCanResize
event TControl.OnClick
event TControl.OnDblClick
event TControl.OnMouseDown
event TControl.OnMouseMove
event TControl.OnMouseUp
event TControl.OnResize

TWinControl
procedure TWinControl.SetFocus
event TWinControl.OnEnter
event TWinControl.OnExit
event TWinControl.OnKeyDown
event TWinControl.OnKeyPress
event TWinControl.OnKeyUp

TCustomControl
TGraphicControl
TGroupBox
TLabel
TEdit
TMemo

TCustomComboBox
property TCustomComboBox.DroppedDown
property TCustomComboBox.ItemIndex

TComboBox
TButton
TCheckBox
TRadioButton

TCustomListBox
property TCustomListBox.ItemIndex
property TCustomListBox.SelCount
property TCustomListBox.Selected

TListBox
TControlScrollBar
TScrollingWinControl
TScrollBox

TCustomForm
procedure TCustomForm.Close
procedure TCustomForm.Hide
procedure TCustomForm.Show
function TCustomForm.ShowModal: Integer
event TCustomForm.OnActivate
event TCustomForm.OnClose
event TCustomForm.OnCloseQuery
event TCustomForm.OnCreate
event TCustomForm.OnDestroy
event TCustomForm.OnDeactivate
event TCustomForm.OnHide
event TCustomForm.OnPaint
event TCustomForm.OnShow
property TCustomForm.ModalResult

TForm

type TModalResult
type TCursor
type TShiftState
type TAlignment
type TAlign
type TMouseButton
type TAnchors
type TBevelCut
type TTextLayout
type TEditCharCase
type TScrollStyle
type TComboBoxStyle
type TCheckBoxState
type TListBoxStyle
type TFormBorderStyle
type TWindowState
type TFormStyle
type TBorderIcons
type TPosition
type TCloseAction
Из модуля ExtCtrls:
Код:
TShape

TPaintBox
event TPaintBox.OnPaint

TImage
TBevel

TTimer
event TTimer.OnTimer

TPanel
TSplitter
TBitBtn
TSpeedButton

TCheckListBox
property TCheckListBox.Checked

TTabControl
TTabSheet

TPageControl
procedure TPageControl.SelectNextPage(GoForward: Boolean)
property TPageControl.PageCount
property TPageControl.Pages

TStatusPanel

TStatusPanels
function TStatusPanels.Add: TStatusPanel
property TStatusPanels.Items

TStatusBar

TTreeNode
procedure TTreeNode.Delete
function TTreeNode.EditText: Boolean
property TTreeNode.Count
property TTreeNode.Data
property TTreeNode.ImageIndex
property TTreeNode.SelectedIndex
property TTreeNode.StateIndex
property TTreeNode.Text

TTreeNodes
function TTreeNodes.Add(Node: TTreeNode; const S: string): TTreeNode
function TTreeNodes.AddChild(Node: TTreeNode; const S: string): TTreeNode
procedure TTreeNodes.BeginUpdate
procedure TTreeNodes.Clear
procedure TTreeNodes.Delete(Node: TTreeNode)
procedure TTreeNodes.EndUpdate
property TTreeNodes.Count
property TTreeNodes.Item

TTreeView
procedure TTreeView.FullCollapse
procedure TTreeView.FullExpand
property TTreeView.Selected
property TTreeView.TopItem

TTrackBar
TProgressBar
TListColumn

TListColumns
function TListColumns.Add: TListColumn
property TListColumns.Items

TListItem
procedure TListItem.Delete
function TListItem.EditCaption: Boolean
property TListItem.Caption
property TListItem.Checked
property TListItem.Data
property TListItem.ImageIndex
property TListItem.Selected
property TListItem.StateIndex
property TListItem.SubItems

TListItems
function TListItems.Add: TListItem
procedure TListItems.BeginUpdate
procedure TListItems.Clear
procedure TListItems.Delete(Index: Integer)
procedure TListItems.EndUpdate
property TListItems.Count
property TListItems.Item

TIconOptions
TListView
TToolButton
TToolBar
TMonthCalColors
TDateTimePicker
TMonthCalendar

type TShapeType
type TBevelStyle
type TBevelShape
type TResizeStyle
type TButtonLayout
type TButtonState
type TButtonStyle
type TBitBtnKind
type TNumGlyphs
type TTabPosition
type TTabStyle
type TStatusPanelStyle
type TStatusPanelBevel
type TSortType
type TTrackBarOrientation
type TTickMark
type TTickStyle
type TProgressBarOrientation
type TIconArrangement
type TListArrangement
type TViewStyle
type TToolButtonStyle
type TDateTimeKind
type TDTDateMode
type TDTDateFormat
type TDTCalAlignment
type TCalDayOfWeek
Из модуля Dialogs:
Код:
TCommonDialog
function TCommonDialog.Execute: Boolean
TOpenDialog
TSaveDialog
TColorDialog
TFontDialog
TPrintDialog
TPrinterSetupDialog

type TOpenOptions
type TFileEditStyle
type TColorDialogOptions
type TFontDialogOptions
type TFontDialogDevice
type TPrintRange
type TPrintDialogOptions
Скриптер имеет доступ ко всем published свойствам этих классов + доступ к некоторым public свойствам и методам.
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 01.03.2009, 02:01   #6
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию

Это все были общие свединия движка FS, теперь расмотрим его реализацию в пакет хак. Это довольно важная часть и ее обьзан знать каждый кто собирается писать скрипты.

Доступные переменные:
pck (string) - текущий обрабатываемый пакет (без первых двух байт с размером)
FromClient (boolean) - пакет (pck) пришел от клиента (всёравно что not FromServer)
FromServer (boolean) - пакет (pck) пришел от сервера (всёравно что not FromClient)
buf (string) - буфер, используемый некоторыми функциями
ConnectName (string) - имя чара от или к которому идёт пакет (v. 3.1.3+)
ConnectID (integer) - номер соединения для которого выполняется скрипт

Доступные функции:
ShowTab и HideTab - для отображения/скрытия панели (UserTab), управлять которой можно из скрипта
Для рисования на ней контролов надо указывать UserTab в качестве родителя
SendToClient - отправляет клиенту содержимое переменной buf
SendToServer - отправляет серверу содержимое переменной buf
SendToClientEx(CharName: string) - отправляет клиенту с именем CharName содержимое переменной buf (v. 3.1.3+)
SendToServerEx(CharName: string) - отправляет серверу с именем CharName содержимое переменной buf (v. 3.1.3+)
(к пакету buf автоматически добавляются 2 байта длины)

NoFreeOnClientDisconnect - запрещает закрытие соединения при дисконекте клиента (v. 3.1.9+)
NoFreeOnServerDisconnect - запрещает закрытие соединения при дисконекте сервера (v. 3.1.9+)
YesFreeOnClientDisconnect - разрешает закрытие соединения при дисконекте клиента (v. 3.1.9+)
YesFreeOnServerDisconnect - разрешает закрытие соединения при дисконекте сервера (v. 3.1.9+)
(по умолчанию закрытия разрешены)
DisconnectServer - закрывает соединение с сервером (v. 3.2.0+)
DisconnectClient - закрывает соединение с клиентом (v. 3.2.0+)

ConnectNameByID(id:integer):string - возвращает имя соединения по его ID (v. 3.2.0+)
ConnectIDByName(name:string):integer - возвращает ID соединения по его имени (v. 3.2.0+)
SetName(Name:string) - устанавливает имя соединения (v. 3.2.0+)

ReadC(var index:integer):byte - читает из переменной pck байт
ReadH(var index:integer):word - читает из переменной pck число (2 байта) (v. 3.1.8+)
ReadD(var index:integer):integer - читает из переменной pck число (4 байта)
ReadF(var index:integer):double - читает из переменной pck число c плавающей запятой(8 байт) (v. 3.1.8+)
ReadS(var index:integer):string - читает из переменной pck строку (в пакете строка unicode нультерминированная, а результирующая строка обычная паскалевская)
Index - начальная позиция чтения, которая модифицируется функцией (сдвигается на число считанных байт)

HStr(h:string):string - преобразует строку в HEX-последовательность
К примеру, HStr('AA 00 BB 00 CC 00') вернёт цепочку байт #$AA#$00#$BB#$00#$CC#$00. Можно передавать строку как с пробелами, так и без них; регистр символов не имеет значения.

WriteC(v:byte; ind:integer=0) - пишет в переменную buf один байт
WriteH(v:word; ind:integer=0) - пишет в переменную buf число (2 байта) (v. 3.1.8+)
WriteD(v:integer; ind:integer=0) - пишет в переменную buf число (4 байта)
WriteF(v:double; ind:integer=0) - пишет в переменную buf число c плавающей запятой(8 байт) (v. 3.1.8+)
WriteS(v:string) - пишет в переменную buf строку (автоматический перевод в unicode)
В первых четырёх процедурах присутствует необязательный параметр ind. Если параметр не указан, то переменная buf дополняется байтом/числом, иначе модифицируется часть буфера.

LoadLibrary(LibName:String):Integer - подгружает к программе библиотеку LibName и возвращает указатель на неё (v. 3.1.8+)
FreeLibrary(LibHandle:Integer):Boolean - выгружает из памяти программы библиотеку (v. 3.1.8+)
CallFunction(LibHandle:integer;FunctionName:String ;Count:Integ er;Params:array of variant):variant - вызывает функцию FunctionName из зарание подгруженной библиотеки с указателем LibHandle и параметрами перечисленными в Params (v. 3.1.8+)
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 01.03.2009, 02:06   #7
J-Fobos
Member of L2 Community
 
Аватар для J-Fobos
 
Регистрация: 30.05.2008
Адрес: город темных эльфов
Сообщений: 1,311
Вы сказали Спасибо: 82
Поблагодарили: 407 раз(а) в 243 сообщениях
По умолчанию

Ну и на последок несколкьо примеров:

buf=HStr('AA BB CC DD EE');
Если вызвать функцию WriteD(10,1), то получим buf=[0A 00 00 00 EE].
А если просто WriteD(10), то [AA BB CC DD EE 0A 00 00 00].

Например скрипт:
Код:
begin
  if FromClient and (ConnectName='SokolA') 
  and (pck=HStr('1b 04 00 00 00')) then begin
    buf:=HStr('45 00 00 00 00 00 00 00 00 00');
    SendToServerEx('SokolB');
    pck:='';
  end;
end.
При получении от клиента играющего за чара с ником SokolA пакета 1b 04 00 00 00 (социальное действие "Victory") непропустит этот пакет и отправит пакет 45 00 00 00 00 00 00 00 00 00 (команда сесть) от имени клиента играющего за чара с ником SokolB, тоесть играете вы в два окна, в одном SokolA, в другом SokolB, нажимаете в первом Victory, и SokolB садится.

Пример вызова функций из системных библиотек:
Код:
var
  lib,Lib1:Integer;
  Res:variant;
  ar:array of variant;
begin
  lib := loadLibrary('User32.dll');
  lib1 := loadLibrary('GDI32.dll');
  Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
  Res := CallFunction(lib,'GetDC',1,[0]);
  CallFunction(lib1,'LineTo',3,[Res,100,100]);
  CallFunction(lib,'ReleaseDC',2,[0,Res]);
  FreeLibrary(lib);
  FreeLibrary(lib1);
end.
На вкладке Скрипты:
Процедура OnConnect(WithClient: Boolean) вызывается при установке соединения, флаг WithClient указывает с клиентом ли произошло соединение (v. 3.1.9+)
Процедура OnDisconnect(WithClient: Boolean) вызывается при потере соединения (v. 3.1.9+)
Процедура Init вызывается когда вы устанавливаете рядом со скриптом галочку.
Процедура Free вызывается когда вы убираете рядом со скриптом галочку.
Основное тело скрипта (между begin и end) вызывается каждый раз при получении пакета от сервера или клиента если скрипт отмечен галочкой.

На вкладке Скрипты:
Процедура OnConnect(WithClient: Boolean) вызывается при установке соединения, флаг WithClient указывает с клиентом ли произошло соединение (v. 3.1.9+)
Процедура OnDisconnect(WithClient: Boolean) вызывается при потере соединения (v. 3.1.9+)
Процедура Init вызывается когда вы устанавливаете рядом со скриптом галочку.
Процедура Free вызывается когда вы убираете рядом со скриптом галочку.
Основное тело скрипта (между begin и end) вызывается каждый раз при получении пакета от сервера или клиента если скрипт отмечен галочкой.

На вкладке Дополнительно:
Основное тело скрипта (между begin и end) вызывается по нажатию кнопки Выполнить, и прекращается либо по нажатию Стоп, либо по окончанию работы скрипта.
Основное тело скрипта (между begin и end) вызывается по нажатию кнопки Выполнить, и прекращается либо по нажатию Стоп, либо по окончанию работы скрипта.

The End
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 28.07.2009, 17:41   #8
maloi777
No Active
 
Регистрация: 28.07.2009
Сообщений: 3
Вы сказали Спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
По умолчанию

А готовые скрипты выложить можете?
maloi777 вне форума   Ответить с цитированием
Старый 28.07.2009, 18:12   #9
midav
Модератор
 
Аватар для midav
 
Регистрация: 24.01.2009
Адрес: Планета TheМля
Сообщений: 321
Вы сказали Спасибо: 89
Поблагодарили: 161 раз(а) в 78 сообщениях
По умолчанию

Цитата:
Сообщение от maloi777 Посмотреть сообщение
А готовые скрипты выложить можете?
Как вариант можете посетить форум официального сайта программы тут и что проверите на работоспособность и полезность выложить тут
__________________


:
Не спрашивайте, работает или нет - ПРОВЕРЯЙТЕ !
Не спрашивайте, спалят или нет - ДУМАЙТЕ !
Не пишите "спасибо" - ТЫКАЙТЕ или НИЧЕГО НЕ ПИШИТЕ !
За сообщения типа "asddfdfdfdf" - сразу ПЕРМАНЕНТ !

НИКОГДА не читайте - ЭТО!!!
А ЗДЕСЬ тебе вообще делать нечего!!!
midav вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход




Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By   Branden
L2-Community ©2008-2015


Еще можно прочесть: