Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 14.08.2007, 11:18   #1
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
Злость что нужно знать для написания скриптов

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

В этой теме я лиш приведу описания внутренних функций и переменных программы.

Описание FastScript: (это скриптовой движек использованный в программе)
http://forum.coderx.ru/uploads/fs.rtf

Доступные переменные:
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+)

Пример:
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) вызывается каждый раз при получении пакета от сервера или клиента если скрипт отмечен галочкой.

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

Последний раз редактировалось Dr.XoR, 14.04.2008 в 23:41.
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 28 спасибками от:
Старый 20.04.2008, 04:36   #2
Новичок
 
Регистрация: 20.04.2008
Сообщений: 8
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
h82w8 пока неопределено
По умолчанию

если часть пакета постоянно меняется, то как написать скрипт чтоб он видел этот пакет всегда?
h82w8 вне форума   Ответить с цитированием
Старый 20.04.2008, 04:40   #3
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от h82w8 Посмотреть сообщение
если часть пакета постоянно меняется, то как написать скрипт чтоб он видел этот пакет всегда?
У пакета есть идентификатор (первый байт). По нему и определяй.
NLObP вне форума   Ответить с цитированием
Старый 20.04.2008, 04:43   #4
Новичок
 
Регистрация: 20.04.2008
Сообщений: 8
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
h82w8 пока неопределено
По умолчанию

ну вот пример скрипта
begin
if FromClient and (ConnectName='name')
and (pck=HStr('15 55 B0 F1)) then begin //B0 F1 постоянно меняются
buf:=HStr('51 55 B0 F1'); // но мне надо чтобы пакет изменялся всегда на этот
SendToServerEx('name);
pck:='';
end;
end.
что надо изменить чтобы всегда работало? не писать целый пакет а токо ту часть которая не меняется или как?
h82w8 вне форума   Ответить с цитированием
Старый 20.04.2008, 13:10   #5
Пользователь
 
Аватар для Emocean
 
Регистрация: 04.02.2008
Сообщений: 63
Сказал Спасибо: 44
Имеет 25 спасибок в 15 сообщенях
Emocean
По умолчанию

Цитата:
Сообщение от h82w8 Посмотреть сообщение
что надо изменить чтобы всегда работало?
По идее надо так:
Код:
begin
if FromClient and (ConnectName='name')
and pck[1]=#$15 then begin
buf:=HStr('51 55 B0 F1');
SendToServerEx('name);
pck:='';
end;
end.
Но ты уверен, что тебе нужны именно эти пакеты?
Цитата:
15=TradeRequest:h(ObjectID)
51=RequestSurrenderPledgeWar:s(PledgeName)
Короче что-то здесь не так)

Последний раз редактировалось Emocean, 20.04.2008 в 13:14.
Emocean вне форума   Ответить с цитированием
Старый 28.06.2008, 18:05   #6
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию

Цитата:
Сообщение от h82w8 Посмотреть сообщение
ну вот пример скрипта
begin
if FromClient and (ConnectName='name')
and (pck=HStr('15 55 B0 F1)) then begin //B0 F1 постоянно меняются
buf:=HStr('51 55 B0 F1'); // но мне надо чтобы пакет изменялся всегда на этот
SendToServerEx('name);
pck:='';
end;
end.
что надо изменить чтобы всегда работало? не писать целый пакет а токо ту часть которая не меняется или как?
прочитал- вдумался ответ: сервак не шифрован?
че за куйня ак могут 3-4 байты меняться? таково не должно быть...
если сервак шифрован то ждем тебя в теме "ДЕШИРИРУЕМ ТРАФИК"
хотя гонево какоето вапще выходит с твоим случаем.. явно кто то ковото не понимает- (наверно я)
когда перехвачен пакет- ты его насильно переправляеш на другой...
в скрипте
я етого не понима. ваще какие причины тябя заставили делать так?
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами

Последний раз редактировалось VORON, 28.06.2008 в 18:08.
VORON вне форума   Ответить с цитированием
Старый 20.04.2008, 16:32   #7
Новичок
 
Регистрация: 20.04.2008
Сообщений: 8
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
h82w8 пока неопределено
По умолчанию

нет я от балды пакеты написал
как вычислить pck[1]=#$15 из обычного пакета?
h82w8 вне форума   Ответить с цитированием
Старый 20.04.2008, 23:40   #8
Новичок
 
Регистрация: 20.04.2008
Сообщений: 8
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
h82w8 пока неопределено
По умолчанию

короче всё разобрался, мультибафф овнед
h82w8 вне форума   Ответить с цитированием
Старый 19.10.2008, 19:51   #9
Новичок
 
Регистрация: 19.10.2008
Сообщений: 1
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
nechaevrus пока неопределено
По умолчанию

Код:
const
ww=('23 51 00 75 00 65 00 73 00 74 00 20 00 39 00 39 00 39 00 39 00 5F 00 4E 00 50 00 43 00 42 00 75 00 66 00 66 00 65 00 72 00 20 00 37 00 00 00');
shield=('23 51 00 75 00 65 00 73 00 74 00 20 00 39 00 39 00 39 00 39 00 5F 00 4E 00 50 00 43 00 42 00 75 00 66 00 66 00 65 00 72 00 20 00 39 00 00 00');
begin
  if FromClient and (ConnectName='lMixeRl')
  and (pck=HStr('49 4B 04 47 04 00 00 00 00 00 00')) then begin
    buf:=HStr('23 51 00 75 00 65 00 73 00 74 00 20 00 39 00 39 00 39 00 39 00 5F 00 4E 00 50 00 43 00 42 00 75 00 66 00 66 00 65 00 72 00 20 00 37 00 00 00');
    SendToServerEx('lMixeRl');
    pck:='';
  end;
  begin
    buf:=HStr('shield');
    SendToServerEx('lMixeRl');
    pck:='';
  end;
end.
Моя цель - создать быстрый ребаф(канцелюги достали). То есть я подхожу к баферу, открываю окно с бафами, печатаю в чат "ыч" и бафер быстро меня бафает. В данном скрипте реализовано бафание только двух бафов(вв и шилд). Однако когда я включаю клиент, запускаю скрипт и ввожу "ыч" меня просто выкидывает с сервера. Ткните носом плз).
nechaevrus вне форума   Ответить с цитированием
Старый 19.10.2008, 22:50   #10
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

Цитата:
Сообщение от nechaevrus Посмотреть сообщение
Моя цель - создать быстрый ребаф(канцелюги достали). То есть я подхожу к баферу, открываю окно с бафами, печатаю в чат "ыч" и бафер быстро меня бафает. В данном скрипте реализовано бафание только двух бафов(вв и шилд). Однако когда я включаю клиент, запускаю скрипт и ввожу "ыч" меня просто выкидывает с сервера. Ткните носом плз).
юзай поиск http://coderx.ru/showpost.php?p=3397&postcount=258 тока не помню последний это вариант или нет
Grinch вне форума   Ответить с цитированием
За это сообщение Grinch нажился спасибкой от:
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг


Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:21.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!