L2PacketHackФорум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела!
Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps := struct^;
Result:=True;
end;
Добавлено через 4 минуты
your plugin must contain this code (every plugin MUST)
delphi Код:
library plugname;
uses
FastMM4,
usharedstructs;
var
ps: TPluginStruct;
function GetPluginInfo(const ver: Integer): PChar; stdcall;
begin
Result:='Plugindescription';
end;
function SetStruct(const struct: PPluginStruct): Boolean; stdcall;
begin
ps := struct^;
Result:=True;
end;
exports
GetPluginInfo,
SetStruct;
beginend.
Добавлено через 11 минут
also. about
ps.ConnectInfo
before using it you must call ps.GoFirstConnection
example
delphi Код:
with ps dobeginif GoFirstConnection thenbegin//now ConnectInfo contains data of first active connection in ph.//so we can use it.endelsebegin//ph dont have intercepted connections.end;
end;
Добавлено через 7 минут
we got GoNextConnection function. its used to enumerate all present connections.
example
delphi Код:
buf := 'we want send this data to all intercepted connections';
with ps doif GoFirstConnection thenrepeat
SendPacketStr(buf, ConnectInfo.ConnectID, False);
until GoNextConnection;
__________________
L2Ext - project closed.
Последний раз редактировалось alexteam, 19.06.2009 в 19:55.
Причина: Добавлено сообщение
Hi alexteam, i have in the plugin all you told me, but i still get an error.
I will describe yo step by step what i did:
Open RAD 2007
File -> New -> Other.. -> DLL Wizard
Paste code.
Build -> OK
Compile -> OK
Copy new dll to {L2phDir}/plugins
Start L2ph
Open L2 -> Login
Conection intercepted
Activate plugin
¡¡ Error !!
library PruebaPlugin;
{$define Release}// для совместимости с релизом пакетхака, при дебуге можно закоментироватьuses
FastMM4,
usharedstructs;
const PlayerName = 'PentA';
var{version}{revision}
min_ver_a: array[0..3] ofByte = (3,4,1, 46);
min_ver: Integer absolute min_ver_a; // минимальная поддерживаемая версия программы
ps: TPluginStruct; // структура передаваемая в плагин// Обязательно вызываемая функция.// Должна вернуть описание плагина,// заодно может проверить версию программыfunction GetPluginInfo(const ver: Integer): PChar; stdcall;
beginif ver<min_ver then
Result:='Демонстрационный Plugin к программе l2phx'+sLineBreak+
'Для версий 3.4.0+'+sLineBreak+
'У вас старая версия программы! Плагин не сможет корректно с ней работать!'else
Result:='Демонстрационный Plugin к программе l2phx'+sLineBreak+
'Для версий 3.4.0+';
end;
// Обязательно вызываемая функция.// Получает структуру с ссылками на все функции основной программы,// которые могут вызываться из плагина.// Если вернёт False то плагин выгружается.function SetStruct(const struct: TPluginStruct): Boolean; stdcall;
begin
ps:=struct;
Result:=True;
end;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается при установки соединения (cnt) с клиентом (withServer=False) // или сервером (withServer=True)procedure OnConnect(const cnt: Cardinal; // номер соединенияconst withServer: Boolean); stdcall; // с сервером?beginend;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается при разрыве соединения (cnt) с клиентом (withServer=False)// или сервером (withServer=True)procedure OnDisconnect(const cnt: Cardinal; // номер соединенияconst withServer: Boolean); stdcall; // с сервером?beginend;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается при выгрузке плагинеprocedure OnFree; stdcall;
beginend;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается при загрузке плагинеprocedure OnLoad; stdcall;
var buf : string;
beginwith ps dobeginif GoFirstConnection thenbegin
buf:=HexToString('4A 00 00 00 00');
WriteD(buf,2);
WriteS(buf,'Hola');
SendPacketStr(buf,ConnectInfo.ConnectID,False);
end;
end;
end;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается при вызове скриптовой функции обьявленной в RefreshPrecompilefunction OnCallMethod(const MethodName: String; // имя функции в верхнем регистреvar Params, // параметры функции
FuncResult: Variant// результат функции): Boolean; stdcall; // если вернёт True то дальнейшая// обработка функции прекратитьсяbegin
Result:=False; // передаём обработку функции программеif MethodName='PI'thenbegin
Result:=True; // запрещаем дальнейшую обработку функции в программе
FuncResult:=Pi;
end;
end;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается перед компиляцией скриптовfunction OnRefreshPrecompile(var funcs: TStringArray): Integer; stdcall;
beginSetLength(funcs,1); // указываем количество добавляемых в скрипт функций
funcs[0]:='function Pi:Extended'; // одна из добавляемых функцийend;
// Необязательно вызываемая функция. (может отсутствовать в плагине)// Вызывается при приходе пакета, параметры:// cnt - номер соединения// fromServer - если пакет от сервера равна True, если от клиента то False// pck - собственно пакет (в виде массива)procedure OnPacket(const cnt: Cardinal; const fromServer: Boolean; var pck:
TPacket); stdcall;
beginif pck.size<3thenexit; // на случай если предыдущие плагины обнулили пакетend;
// экспортируем используемые программой функции
exports
GetPluginInfo,
SetStruct,
OnPacket,
OnConnect,
OnDisconnect,
OnLoad,
OnFree,
OnCallMethod,
OnRefreshPrecompile;
beginend.