Исходники здесь
Вот такие скомпилированные версии есть у меня.
Ниже данные устарели.
Репозиторий находится тут (открывать через SVN клиент)
Удобный просмотр репозитория через браузер тут
Скомпилированные версии тут Пароль к архиву: coderx.ru
Есть ли предложения по модернизации существующего кода с описанием как должно и что хотелось бы заменить/добавить?
Дополнительные компоненты брать тут. (<-- TPerlRegEx есть только там)
/upd:
для компиляции последних ревизий понадобятся JCL, JVCL (ссылки выше) а так же:
jwapi2.2a, SyntEdit, TRichView.v11.0+ScaleRichView.v2.0, TsiLang (letitbit / upload.com.ua)
Немного подправленный FastScript искать в файловом архиве.
Последний раз редактировалось NLObP, 17.10.2016 в 00:02.
# Откатился до Delphi 7.
Указал пути к units. Не могу понять как работает линковщик. При сборке uData, ругается на Editor (не найдено определение класса). Хотя он описан в uScriptEditor. В настройках указал путь на units l2ph. Но он по прежнему отказывается компилить.
Последний раз редактировалось VitaminPSG, 08.09.2015 в 11:54.
# Откатился до Delphi 7.
Указал пути к units. Не могу понять как работает линковщик. При сборке uData, ругается на Editor (не найдено определение класса). Хотя он описан в uScriptEditor. В настройках указал путь на units l2ph. Но он по прежнему отказывается компилить.
3. Создал переменную в которую буду записывать адрес на функцию DLL
Код:
SetCFStruct: TSetCFStruct;
4. При загрузке DLL. Нахожу адрес и записываю в переменную. А также передаю указатель на функцию.
Код:
@SetCFStruct:=GetProcAddress(hLib, 'SetFunctionStruct');
if(Assigned(SetCFStruct)) then
begin
ScriptStruct.pSendPacketStr:=@TPluginStructClass.SendPacketStr;
ScriptStruct.pGetConnectionName:=@TPluginStructClass.getConnectionName;
ScriptStruct.pGetConnectioIdByName:=@TPluginStructClass.getConnectioidByName;
SetCFStruct(@ScriptStruct);
end;
5. Описываю структуру функций из Delphi и функцию в которой буду передавать указатель.
Код:
// Структура скриптов
struct ScriptStruct
{
void(*sendPacketStr)(unsigned char* pck, const int tid, bool toServer);
char*(*getConnectionName)(int);
int(*getConnectioIdByName)(char* name);
};
/// Функция передачи указателя на ScriptStruct
DLL_API bool SetFunctionStruct(ScriptStruct * scriptStruct);
6. Далее в сpp пишу описание функци
Код:
// Вызывается при включении плагина
DLL_API bool SetFunctionStruct(ScriptStruct * scriptStruct)
{
OutputDebugStringA("SetFunctionStruct\n");
_scriptStruct->getConnectionName(123); // <- Здесь я пытаюсь вызвать функцию из Delphi
return true;
}
7. Запускаю проект L2Ph через дебагер, подключаю плагин.
Мы приходим в точку останова функции
Код:
function TPluginStructClass.getConnectionName(id: integer): string; stdcall;
begin
result := dmData.ConnectNameById(id); /// <- вызывается
end;
string - это чисто делфийский тип, аналог которому есть только в C++ Builder, кажется AnsiString называется. Причем желательно использовать шестую версию, если сам пакетхак скомпилирован в семерке. Плюс возможно еще с менеджером памяти нужно будет пошаманить, ShareMem подключить.
Проверялось на Америке/Европе (клиент: только х32).
При посылке пакета 'сесть' чар садится.
PacketsAion49.ini - не готов, для правильной расшифровки нужно допиливать. ID пакетов взял из рекомпила java сервера aion4.9 emu (GER 4.9). Имена клиентских пакетов обфусцированы.
Пробуйте новую версию пакетхака для Aion NA 4.9
Попробуйте альтернативный разбор пакетов. Описание есть здесь
Исходники пакетов лежат в папке: