Akumu 1117 Опубликовано 25 ноября, 2018 Просмотр файла Lineage 2 SDK: Interlude v746 Lineage 2 SDK это набор файлов описывающих типы данных, структуры, прототипы функций и перечислимые типы доступные в клиенте Lineage 2. Использование SDK позволяет очень тесно взаимодействовать с игровым клиентом из вашего C++ кода, создавать достаточно сложные дополнения для игры всего в несколько десятков строк кода. Простой пример использования: Вывод информации о активном акторе auto Viewport = FCore::UObject::FindObject<FWinDrv::UWindowsViewport>("WindowsViewport Transient.WindowsClient0.WindowsViewport0"); if (Viewport) { auto Controller = Viewport->Actor; if (Controller) { auto Actor = Controller->ViewTarget; if (Actor) { auto& Location = Actor->Location; auto Name = Actor->GetHumanReadableName(); Utils::PrintDebug("Name='%s' Pos=(%.02f, %.02f, %.02f)", Name.c_str(), Location.X, Location.Y, Location.Z); } } } Добавляем сообщение в системный чат: auto ChatWnd = FCore::UObject::FindObject<FInterface::UChatWnd>("ChatWnd Transient.ChatWnd0"); if (ChatWnd) { ChatWnd->ShowAnnounceMessgage(L"Hello world"); } Добавил Akumu Добавлено 11/25/18 Категория Клиентские дополнения Автор Akumu Хроники Interlude 4 4 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MemoDeveloper 0 Опубликовано 2 декабря, 2018 Очень интересная тема, хотел попробовать вывести в лог предложенный пример но что-то не получается этого сделать. Вот бы кто помог или как-то разъяснил как это чудо прикрутить. Наверно я один такой безрукий... В общем загвоздка в чем: Создал чистый проект, консольное приложение win32 В хейдере указал #include "SDK.hpp" добавил using namespace L2v746; Далее так понимаю нужно как-то подключить dll файлы core.dll и engine.dll чтоб для теста просто скомпилить. иначе вылазит такая вот ошибка: Ошибка LNK2001 неразрешенный внешний символ ""public: static struct L2v746::TArray<class L2v746::FCore::UObject *> & __cdecl L2v746::FCore::UObject::GetGlobalObjects(void)" (?GetGlobalObjects@UObject@FCore@L2v746@@SAAAU?$TArray@PAVUObject@FCore@L2v746@@@3@XZ)" gs C:\gs\gs\gs\gs.obj 1 Ошибка LNK2001 неразрешенный внешний символ ""public: struct L2v746::FString __thiscall L2v746::FEngine::AActor::GetHumanReadableName(void)" (?GetHumanReadableName@AActor@FEngine@L2v746@@QAE?AUFString@3@XZ)" gs C:\gs\gs\gs\gs.obj 1 Ошибка LNK1120 неразрешенных внешних элементов: 3 gs C:\gs\gs\Release\gs.exe 1 Ошибка LNK2001 неразрешенный внешний символ ""public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall L2v746::FCore::UObject::GetFullName(void)const " (?GetFullName@UObject@FCore@L2v746@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)" gs C:\gs\gs\gs\gs.obj 1 Может я где-то не прав, не судите строго... Так как только начал изучать c++ и в многом ещё чайник даже скажу "Чайнище!" Будьте добры помогите кто чем сможет =) Как подключить сие чудо и вывести в консоль хотя бы имя игрока? Хочу это сделать таким вот образом. Поймать HWND клиента через: HWND hwnd = FindWindowA(NULL, "Lineage II"); if (!hwnd) return false; Запустить консоль и вывести имя активного актора. Буду очень признателен всем откликнувшимся рукастым ребятам в помощи обычным смертным! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 2 декабря, 2018 Привет. SDK, в том виде который сейчас есть, нужно использовать исключительно находять в адресном пространстве процесса игры. Простыми словами: из длл загруженной в игру. По ошибкам компиляции: убедитесь что включили все файлы сдк в проект, просто добавить инклуд недостаточно. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MemoDeveloper 0 Опубликовано 2 декабря, 2018 Я видел что dsetup.dll можно подменить но пока не могу понять как подключить именно этот sdk. Как гуру данного кодинга если не сложно показать хотя бы 1 пример халопу, буду ну очень благодарен вам и думаю не только я. За ранее Спасибо) Да, забыл уточнить. Я не просто указал инклуд, а добавить сам СДК через свойства проекта "Свойства конфигурации -> Каталоги VC++ -> Каталоги включения" чтоб оно видело его. А вот как правильно подключить и сделать с адресного пространства это все, вообще не понятно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MemoDeveloper 0 Опубликовано 6 декабря, 2018 В 02.12.2018 в 15:12, Akumu сказал: По ошибкам компиляции: убедитесь что включили все файлы сдк в проект, просто добавить инклуд недостаточно. Привет, помоги разобраться пожалуйста. Что ещё нужно по мимо добавления инклуда и добавления каталогов в свойства проекта? Уже сколько дней ломаю голову... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MemoDeveloper 0 Опубликовано 6 декабря, 2018 Я был прав, у вас в sdk не хватает lib файлов. По данному примеру это engine.lib для FEngine и core.lib для FCore Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KanistraYoda 0 Опубликовано 17 июня, 2019 Сдк в том виде что есть - зависим от файлов интерфейса, к примеру от хдат (т.к. на основе лишь этого сдк в дллке не создать самостоятельное окно), от interface.u (опять же на основе сдк нельзя принимать критически важные ивенты и обрабатывать их действия (OnClickButton, OnClickCheckBox ... и т.д.)), так в чем тогда смысл, господа, или я ошибаюсь? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Po6oKon 177 Опубликовано 16 августа, 2020 Utils::PrintDebug("Name='%s' Pos=(%.02f, %.02f, %.02f)", Name.c_str(), Location.X, Location.Y, Location.Z); Есть ещё не большой косяк с Name.c_str() не выводит как следует... Да и при повторном использовании этой функции, выдает координаты с маленькой погрешностью. PS: Кто будет этим заниматься, скомпилируйте в библиотеку .lib. Потом подключайте в любые проекты... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты