ScriptsHelp PDF
ScriptsHelp PDF
Оглавление
Иерархия классов......................................................................................................................................................................................................................................................... 2
Описание классов ........................................................................................................................................................................................................................................................ 3
TL2Control = class ...................................................................................................................................................................................................................................................... 3
TL2Object = class ....................................................................................................................................................................................................................................................... 6
TL2Spawn = class(TL2Object); ................................................................................................................................................................................................................................... 6
TL2Drop = class(TL2Spawn); ...................................................................................................................................................................................................................................... 6
TL2Npc = class(TL2Live); ............................................................................................................................................................................................................................................ 6
TL2Pet = class(TL2Npc); ............................................................................................................................................................................................................................................. 6
TL2Char = class(TL2Live); ........................................................................................................................................................................................................................................... 6
TL2User = class(TL2Char); .......................................................................................................................................................................................................................................... 7
TL2Effect = class(TL2Object); ..................................................................................................................................................................................................................................... 7
TL2Buff = class(TL2Effect); ......................................................................................................................................................................................................................................... 7
TL2Live = class(TL2Spawn); ........................................................................................................................................................................................................................................ 8
TL2Skill = class(TL2Effect); ......................................................................................................................................................................................................................................... 9
TL2Item = class(TL2Object); ....................................................................................................................................................................................................................................... 9
TL2AucItem = class(TL2Item) ..................................................................................................................................................................................................................................... 9
TL2List = class;............................................................................................................................................................................................................................................................ 9
TL2Auction = class(TL2List) ......................................................................................................................................................................................................................................10
TL2WareHouse = class(TL2List) ...............................................................................................................................................................................................................................10
TSpawnList = class(TL2List); .....................................................................................................................................................................................................................................10
TNpcList = class(TL2List); .........................................................................................................................................................................................................................................10
TPetList = class(TL2List); ..........................................................................................................................................................................................................................................10
TCharList = class(TL2List); ........................................................................................................................................................................................................................................10
TDropList = class(TL2List); ........................................................................................................................................................................................................................................10
TSkillList = class(TL2List); .........................................................................................................................................................................................................................................10
TBuffList = class(TL2List); .........................................................................................................................................................................................................................................10
TItemList = class(TL2List); ........................................................................................................................................................................................................................................10
TParty = class; ..........................................................................................................................................................................................................................................................11
TInventory = class; ...................................................................................................................................................................................................................................................11
TConfirmDlg = class..................................................................................................................................................................................................................................................11
ChatMessage ...........................................................................................................................................................................................................................................................11
TL2Script = class .......................................................................................................................................................................................................................................................11
Глобальные функции и переменные: ......................................................................................................................................................................................................................12
Функции API бота: ..................................................................................................................................................................................................................................................12
Глобальные переменные ......................................................................................................................................................................................................................................12
Функции преобразования данных .......................................................................................................................................................................................................................12
API для каптчи ........................................................................................................................................................................................................................................................13
Прочее.....................................................................................................................................................................................................................................................................13
Перечисляемые типы. ...............................................................................................................................................................................................................................................14
Классы в подключаемых модулях. ...........................................................................................................................................................................................................................16
TTCPBlockSocket = class ..........................................................................................................................................................................................................................................16
TICQ = class ..............................................................................................................................................................................................................................................................17
ПРИМЕРЫ....................................................................................................................................................................................................................................................................18
ChatMessage ...........................................................................................................................................................................................................................................................18
Function [Link]..................................................................................................................................................................................................................................18
function [Link] ..............................................................................................................................................................................................................................18
function TL2Control. GameWindow ........................................................................................................................................................................................................................19
[Link](Who, What : String; Color : Integer); ...........................................................................................................................................................................................19
[Link]... ...................................................................................................................................................................................................................................................19
Отключить интерфейс на 15 сек всех кто в пати и на одном боте, при телепорте ..........................................................................................................................................20
Простейший делевел .............................................................................................................................................................................................................................................20
Автоматически кидаем репорт игроку взявшему нас в таргет ..........................................................................................................................................................................21
Перехват нажатия клавиш, вместе с ctrl alt shift. ................................................................................................................................................................................................21
Иерархия классов
TL2Item TL2Auction
TL2Control
TL2Drop
TL2Spawn TL2Char TL2User
TL2Object
TL2Live
TL2Npc TL2Pet
TParty
TL2Skill
TL2Effect
TInventory
TL2Buff
TL2Auction
TL2Script
TSpawnList
TConfirmDlg
TNpcList
TPetList
TL2List TCharList
TDropList
TSkillList
TBuffList
TItemList
Описание классов
TL2Control = class
Основной класс управления ботом. В скриптах
TL2Control = class доступен по имени Engine. Можно получить для
другого окна GetControl(const Name: string):
TL2Control;
Assist(const Name: string): Boolean; Делает своей целью, цель указанного игрока или NPC
Attack(TimeOut: Cardinal = 2000; Ctrl: Атака. TimeOut - задержка (мс); Ctrl - принудительная
Boolean = false): Boolean; атака
AuctionBuyItem(Item: TL2AucItem): Boolean; купить с аукциона
AuctionCancelItem(Item: TL2AucItem): Boolean; снимет предмет с продажи
AuctionGetMySales: Boolean; получить список своих лотов продажи
BlinkWindow(GameWindow: Boolean): Boolean; Мигает окном на панели задач. Если GameWindow - true то
мигает окном игры, иначе окном бота
BotWindow: Cardinal; Получить HWND окна с ботом.
ByPassToServer(const S : String) : Boolean; Отправить на сервер ByPass
CancelTarget: Boolean; Сбрасывает таргет
ClearIgnore; Очищает список игнора
ClearMail: Boolean; Очистить почту.
ClearZone; Очистка всех зон на карте.
ConfirmDialog(Accept: Boolean): Boolean; Отвечает на запросы Да/Нет
ConfirmDlg : TConfirmDlg; Получить класс TConfirmDlg;
CreateRoom(Text: string; LevelStart,
LevelEnd: Integer): Boolean; Создать комнату группы.
CloseRoom: Boolean; Закрыть комнату группы.
CrystalItem(ID : Cardinal) : Boolean; Кристализовать итем.
Delay(const time : Cardinal) : Boolean; Паузы для выполнения, в отличии от delay глобального,
возвращает True по истечению паузы
DestroyItem(const Name: string; Count: Уничтожает предмет с названием Name в количесвте
Cardinal): Boolean; Count
DismissParty(const Name: string): Boolean; Исключает игрока с именем Name из группы
DismissPet: Boolean; Отозывает пета (если есть)
DismissSum: Boolean; Отозывает самона (если есть)
Dispel(const Name: string): Boolean; Снимает с вашего персонажа баф с названием Name
DlgOpen: Boolean; Начинает диалог с NPC
DlgSel(const Txt: string; const TimeOut :
Integer = 1000): Boolean; overload; Выбирает при диалоге строку Txt
DlgSel(Index: integer; const TimeOut : Выбирает при диалоге строку с порядковым номером
Integer = 1000): Boolean; overload; Index. TimeOut время в мс сколько ожидать диалога.
DlgText: string; Содержит полный текст текущего диалога
DMoveTo(x, y, z : Integer) : Boolean; Двигаться в указанную точку без ожидания завершения.
DUseSkill(id : Cardinal; ctrl, Shift : Использовать скил с указанным id без проверки на откат,
Boolean) : Boolean; количество мп.
EnterText(const Txt: string): Boolean; Нажать Enter, написать Txt, нажать Enter.
Вызов функции в скрипте другого аккаунта. Вызываемая
Entry(var Param): Boolean; ф-ция должна иметь вид - function OnEntry(var Param):
Boolean; Param - любой передаваемый параметр.
Equipped(const Name: string): Integer; Проверка экипировки
FaceControl(ID: Integer; Active: Boolean):
Boolean; Вкл/откл клавишу интерфеиса.
FindEnemy(var Enemy: TL2Live; Obj: TL2Live; Поиск "врага" для объекта Obj в указанном радиусе
Range: Cardinal = 2000; ZRange: Cardinal = (относительно объекта Obj). Если результат ф-ции - true,
300): Boolean; то найденный "враг" будет записан в переменную Enemy.
FindPath(StartX, StartY, EndX, EndY: Integer; Расчитывает путь из Startx,y До Endx,y и помещает точки
PathList: TList): Boolean; в PathList подряд.
GameClose: Boolean; Закрывает игру (клиент L2)
Заводит персонажа под номером CharIndex в игру
GameStart(CharIndex: Integer = -1): Boolean; (должны находится на панели выбора персонажей), без
параметров при -1, зайдет на последнего активного
персонажа
GameTime: Cardinal; Текущее игровое время
GameVersion : Cardinal; Game Protocol
GameWindow : Cardinal; Получить HWND окна с игрой.
GetCharList: TCharList;
GetDailyItems : Boolean; Получить все ежедневные предметы.
GetDropList: TDropList;
GetFaceState(ID: Integer): Boolean; Узнать статус кнопки интерфейса. (FaceControl)
GetInventory: TInventory;
GetMailItems(MaxLoad: Cardinal = 65; Получить все письма с ограничениями по максимальное
MaxCount: Cardinal = 1000): Boolean; загрузке, и максимальному количеству итемов
GetNpcList: TNpcList;
GetParty: TParty;
GetPetList: TPetList;
GetSkillList: TSkillList;
GetUser: TL2User; Получание объекта User (TL2User) из другого аккаунта.
GoHome(ResType: TRestartType = rtTown) :
Boolean; Возвращает персонажа в город после смерти
MSG(Who, What : String; Color : Integer); Написать системное сообщение в окне бота, различного
цвета.
NpcExchange(ID: Cardinal; Count: Cardinal): Обмен вещей у NPC. ID - id вещи которую хотим получить,
Boolean; Count - в каком количестве.
Торговать с Npc. Sell - покупка/продажа. Items - массив
NpcTrade(Sell: Boolean; items: array of
Cardinal): Boolean; предметов для покупки/продажи. Массив должен состоять
из пар ID, Count (кратен двум)
OpenQuestion: Boolean; Открывает "знак вопроса" (требуется для некоторых
квестов)
Pickup(Obj: TL2Drop; Pet: Boolean = false):
Boolean; overload; Подобирает объект Obj. Pet - Подбирает петом
SetPartyLeader(const Name: string): Boolean; Передает лидерство в группе игроку с именем Name (ваш
персонаж должен быть лидером группы)
SetTarget(const Name: string): Boolean;
overload; Взятие цели по имени.
TL2Spawn = class(TL2Object);
TL2Spawn = class(TL2Object); Все объяекты в не персонажа
DistTo(X: Integer; Y: Integer; Z: Integer):
Cardinal; overload; Возвращает дистанцию до заданной точки
TL2Drop = class(TL2Spawn);
TL2Drop = class(TL2Spawn); Дроп в игре
Count: int64; Количество
IsMy: Boolean; Дроп принадлежит нам или нет ("Нам" - если выбил наш
чар, пет или члены пати)
Stackable: Boolean; Стопковый предмет или не может стакаться
TL2Npc = class(TL2Live);
TL2Npc = class(TL2Live); Базовый класс для всех NPC
IsPet: Boolean; Пет или нет
PetType: Cardinal; Тип пета (самон или пет)
TL2Pet = class(TL2Npc);
TL2Pet = class(TL2Npc); Класс описывающий наших петов/самонов
Fed: Cardinal; Еда (проценты)
TL2Char = class(TL2Live);
TL2Char = class(TL2Live); Базовый класс для всех игроков
CP : Cardinal;
CurCP : Cardinal;
MaxCP : Cardinal;
Hero : Boolean;
Noble : Boolean;
ClassID : Cardinal;
MainClass: Cardinal;
MountType: Byte; Тип ездового животного
StoreType: Byte;
Sex : Cardinal; 0 мужик 1 женщина
Race : Cardinal;
CubicCount: Cardinal;
Recom: Cardinal;
Premium : Boolean;
TL2User = class(TL2Char);
TL2User = class(TL2Char); Класс описывающий нашего персонажа
CanCryst: Boolean; Может кристализовать предметы наш герой или нет?
Charges: Cardinal; для гладов зарядки
WeightPenalty: Cardinal;
WeapPenalty: Cardinal;
ArmorPenalty: Cardinal;
DeathPenalty: Cardinal;
Souls: Cardinal; для камаэелей души
TL2Effect = class(TL2Object);
TL2Effect = class(TL2Object); Базовый класс всех магических эффектов
Level: Cardinal; Уровень скила
EndTime: Cardinal; Время до окончания действия
TL2Buff = class(TL2Effect);
TL2Buff = class(TL2Effect); Класс описывающий бафы
TL2Live = class(TL2Spawn);
TL2Item = class(TL2Object);
TL2Item = class(TL2Object); Класс описывающий итемы в инвентаре
Count: Int64; Количество (если стопка)
Equipped: Boolean; Вещь надета или нет
EnchantLevel: Word; This is EnchantLevel, a member of class TL2Item.
ItemType : Cardinal; 0 оружие; 1 броня; 2 бижа; 5 ресурсы и все остальное
Grade: Cardinal;
GradeName: string; ('NG', 'D', 'C', 'B', 'A', 'S', 'S80', 'S84', 'R', 'R95', 'R99');
TL2AucItem = class(TL2Item)
TL2List = class;
Все листы объектов в боте наследуются от этого
TL2List = class; класса, списки: бафов, нпц, чаров, дропа,
предметов.
ByID(ID: Cardinal; var Obj): Boolean; Поиск объекта в списке по ID. Если объект найден, он
помещается в переменную Obj.
ByName(const Name: string; var Obj): Boolean; Поиск объекта в списке по имени. Если объект найден, он
помещается в переменную Obj.
Count: integer; Количество объектов в списке
Items(Index: integer): TL2Object; Позволяет обратиться к объекту в списке по индексу
TL2Auction = class(TL2List)
TL2WareHouse = class(TL2List)
TL2WareHouse = class(TL2List) Лист с TL2Item внутри вархауса
property WHType: Word Тип вархауса
property Adena: Int64
Items(Index: integer): TL2Item;
TSpawnList = class(TL2List);
TSpawnList = class(TL2List); Список объектов все что имеют координаты.
Items(Index: integer): TL2Spawn; Позволяет обратиться к объекту в списке по индексу
TNpcList = class(TL2List);
TPetList = class(TL2List);
TCharList = class(TL2List);
TDropList = class(TL2List);
TSkillList = class(TL2List);
TBuffList = class(TL2List);
TBuffList = class(TL2List); Список содержащий бафы объекта.
Items(Index: integer): TL2Buff; Позволяет обратиться к объекту в списке по индексу
TItemList = class(TL2List);
TItemList = class(TL2List); Список инвентаря.
Items(Index: integer): TL2Item; Позволяет обратиться к объекту в списке по индексу
TParty = class;
TInventory = class;
TConfirmDlg = class
TConfirmDlg = class Класс подробно описывающий диалоги
MsgID : Cardinal;
ReqID : Cardinal;
Sender: string;
EndTime: Cardinal;
Valid : Boolean;
ChatMessage
TL2Script = class
TL2Script = class; Класс доступный по имени Script
Вызов процедуры в основном потоке программы. Proc -
MainProc(Proc: Pointer); указатль на процедуру потока; Parameter - любой
передаваемый параметр (не обязательный)
Создает новый поток скрипта. Proc - указатль на
NewThread(Proc: TThreadFunc; Parameter: процедуру потока (procedure MyThread(Prm: Pointer))
Pointer = nil); Parameter - любой передаваемый параметр (не
обязательный)
Path: String; Полный путь к файлу скрипта.
PaxFile : String; Путь скрипта.
Replace(const FullPath : String); Заменить скрипт
Resume; Возобновляет работу скрипа
Suspend; Ставит скрипт на паузу
Глобальные функции и переменные:
Глобальные переменные
Глобальные переменные доступные без импорта модулей и из любього места
Engine : TL2Control; Контроллер текущего окна
User : TL2User; Персонаж для текущего Engine
Auction : TL2Auction; Лист с предметами на аукционе
SpawnList : TSpawnList;
NpcList : TNpcList;
PetList : TPetList;
CharList : TChatList;
DropList : TDropList;
SkillList : TSkillList;
ItemList : TItemList;
Party : TParty;
Inventory : TInventory; содержащий инвентари
Script : Tscript;
WareHouse: TL2WareHouse; Лист с итемами вархуса
ChatMessage : TChatMessage; буфер где хранится последняя информация о чате
Captcha API
Функция GetСaptcha - распознает картинку используя
function GetСaptcha(ImageData: TMemoryStream; сервис [Link]
APIKey: String; var CaptchaRes: String; Параметры функции:
MinLen: integer=0; MaxLen: integer=0; ImageData - стрим, содержащий картинку с каптчей
Numeric: integer=0; Phrase: integer=0; ImageFile - путь к файлу каптчи
RegSense: integer=0; Calc: integer=0; APIKey - ключ сервиса [Link] для
Russian: integer=0): Integer; overload;
распознавания
CaptchaRes - буффер, в который попадает текст каптчи,
либо сообщение об ошибке
MinLen - минимальная длина текста каптчи
MaxLen - максимальная длина каптчи
Phrase - если 1, помечает что каптча состоит из
нескольких слов
function GetСaptcha(ImageFile: string; Regsense - если 1, помечает что текст каптчи
APIKey: String; var CaptchaRes: String; чувствителен к регистру
MinLen: integer=0; MaxLen: integer=0; Numeric - если 1, помечает что текст каптчи состоит
Numeric: integer=0; Phrase: integer=0; только из цифр, 2 помечает что на каптче нет цифр
RegSense: integer=0; Calc: integer=0; Calc - если 1, помечает что цифры на каптче должны
Russian: integer=0): Integer; overload;
быть высчитаны
Russian - если 1, помечает что вводить нужно только
русский текст, 2 - русский или английский
Функция возвращает:
Номер каптчи CaptchaID, при ошибке 0
Прочее
Прочее Для опытных скриптеров.
Procedure OnFree; Вызывается при завершении скрипта. Тело процедуры
надо писать самому.
function OnEntry(var Param) Функция, тело которой должно быть написанно в вашем
коде. Для вызова с другого TL2Control, через Entry
Массив, который доступен из любого TL2Control (любого
ShMem: array[0..1000] of integer;
персонажа)
Перечисляемые типы.
Enum values
TL2Status = (
lsOff, Отключен
lsOnline, Онлайн
lsOffline Оффлайн
);
TL2Race = (
rtHuman,
rtElf,
rtDarkelf,
rtOrc,
rtDwarf,
rtKamael
);
TLootType = (
ldLooter Нашедшому
ldRandom Случайно
ldRandomSpoil Случайно + присвоить
ldOrder По очереди
ldOrderSpoil По очереди + присвоить
);
TTCPBlockSocket = class
ChatMessage
var
Obj: Tl2Live;
begin
while True do
begin
if [Link] and ([Link] < 3000) then
begin
if [Link]([Link], Obj) and not [Link] then
if [Link] then
begin
print([Link]);
print([Link]);
print([Link]);
print([Link]);
end;
end;
Delay(111);
end;
end.
Печатать в системном окне бота информацию о сообщении, которую написал игрок, находящийся в зоне и не ваш
сопартиец.
Function [Link]
//Цель в УД стоит?
begin
if isUD([Link]) then
print('Да в УД');
end.
Проверить находится цель в УД или нет. Значение $8000000 это один из битов переменной поля AbnormalID,
обозначающий есть ли эффект UD.
Некоторые другие эффекты:
bleeding = $1;
poison = $2;
redcircle = $4;
ice = $8;
function [Link]
Для текущего скрипта TL2Control доступен по имени Engine так же список скилов доступен по переменной SkillList.
С другого TL2Control можно получить список скиллов с помощью GetSkillList
begin
if Assigned(GetSkill('MoyaEEshka',1255)) then
GetControl('MoyaEEshka').UseSkill(1255) //Recall
Else
[Link](736); //Юзаем сое
end.
Если есть у нашей ЕЕ с ником 'MoyaEEshka' скилл Party Recall, то используем его на ней, если нету то
используем сое.
function TL2Control. GameWindow
begin
While [Link](5000) then
if [Link] then
SetForegroundWindow([Link]);
end.
clBlack = 0; //черный
clMaroon = 128; //Тёмно-красный
clGreen = 32768; //Зелёный
clOlive = 32896; //Оливковый
clNavy = 8388608; //Тёмно-синий
clPurple = 8388736; //Пурпурный
clTeal = 8421376; //Стальной
clGray = 8421504; //Серый
clSilver = 12632256; //Серебряный
clRed = 255; //Красный
clLime = 65280; //Ярко-зелёный
clYellow = 65535; //Жёлтый
clBlue = 16711680; //Синий
clFuchsia = 16711935; //Фиолетовый
clAqua = 16776960; //Бирюзовый
clWhite = 16777215; //Белый
[Link]...
Знать информацию о каждом объекте, когда телепортировался и насколько далеко. В том числе и о себе.
begin
While [Link](1000) do
if (GettickCount - [Link] < 5000) and ([Link] < 2000) and
([Link] > 10) then //5 сек назад был телепорт
begin
print('Teleported!');
PlaySound(exepath + '\sounds\' + 'dc' + '.wav', False);
end;
end.
Проиграть звук при телепорте из папки с ботом, в папке Sounds звук [Link].
Отключить интерфейс на 15 сек всех кто в пати и на одном боте, при телепорте
procedure MassOff;
var
P1, P2 : Pointer;
begin
While True do
begin
if ([Link]([laSysMsg], P1, P2, 500) = laTeleport) and
(TL2Char(P1).IsMember or
(TL2Char(P1) = User)) then
begin
FaceControlForAll(False);
Delay(15000);
FaceControlForAll(True);
end;
end;
end;
//****************************
begin
[Link](@MassOff);
Delay (-1);
end.
в методе FaceControlForAll пробегаемся циклом по всем никами игроков в пати, где случился телепорт, в случае если игрок запущен на этом
компьютере (боте) выключаем его.
Простейший делевел
var
I : INteger;
dist : Cardinal;
TrueGvard, CheckGvard : TL2Npc;
const
GvardsArray : array [1..8] of Cardinal =
(30039, 30040, 30041, 30042, 30043, 30044, 30045, 30046);
begin
print('Начинаем Делевел');
Если видим айди нпц который указан в массиве, GvardsArray (по умолчанию вписанны гварды с острова Людей),
находим самого ближнего.
бежим к нему в плотную, и начинаем через контрл атаковать.
Если померли встаем в город.
Автоматически кидаем репорт игроку взявшему нас в таргет
uses
SysUtils, Classes;
var
TargetLogSL : TStringList;
Procedure CheckTarget;
var
i : Integer;
begin
if [Link] > 5 then exit;
i := 0;
While i < [Link] do
begin
if (([Link](i).[Link] = [Link]) or [Link](i).[Link]) and not
[Link](i).IsMember then
if [Link]([Link](i).name) = -1 then
begin
[Link]([Link](i).name);
print('нас затаргетил: ' + [Link](i).name);
if [Link]([Link](i)) then
[Link](65);
break;
end;
inc(i);
end;
end;
Procedure OnFree;
begin
[Link];
end;
begin
TargetLogSL := [Link];
While [Link](100) do
CheckTarget;
[Link];
end.
1. uses
2. SysUtils;
3.
4. function GetKeyState(nVirtKey: integer): byte; stdcall;
5. external '[Link]' name 'GetKeyState' ;
6.
7. function KeyDown(K : byte) : Boolean;
8. begin
9. Result := (K = 128) or (K = 129)
10. end;
11.
12. function SHIFT : boolean;
13. begin
14. Result := KeyDown(GetKeyState($10));
15. end;
16.
17. function CTRL : boolean;
18. begin
19. Result := KeyDown(GetKeyState($11));
20. end;
21.
22. function ALT : boolean;
23. begin
24. Result := KeyDown(GetKeyState($12));
25. end;
26.
27. procedure ActionThread(p: pointer); //Поток для ожидания/обработки событий
28. var
29. KeyCode, i: integer;
30. begin
31. while [Link] = lsOnline do
32. begin //Цикл действует пока чар в игре (Online)
33. [Link]([laKey], KeyCode, i);
34.
35. if ctrl and shift and (KeyCode = $4F) then //ctrl + SHift + "O"
36. [Link](1398);
37.
38. if ctrl and alt and (KeyCode = $50) then //ctrl + alt + "P"
39. [Link](1398);
40. end;
41. end;
42.
43. begin
44. [Link](@ActionThread);
45. Delay(-1); //Бесконечная пауза
46. end.