Перейти к содержанию
Авторизация  
Akumu

Lineage 2 SDK: Interlude v746

Рекомендуемые сообщения

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");
}

 


 

  • Like 4
  • Upvote 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень интересная тема, хотел попробовать вывести в лог предложенный пример но что-то не получается этого сделать.
Вот бы кто помог или как-то разъяснил как это чудо прикрутить.
Наверно я один такой безрукий...
В общем загвоздка в чем:

Создал чистый проект, консольное приложение 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;

Запустить консоль и вывести имя активного актора.
Буду очень признателен всем откликнувшимся рукастым ребятам в помощи обычным смертным!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. SDK, в том виде который сейчас есть, нужно использовать исключительно находять в адресном пространстве процесса игры. Простыми словами: из длл загруженной в игру.

По ошибкам компиляции: убедитесь что включили все файлы сдк в проект, просто добавить инклуд недостаточно.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я видел что dsetup.dll можно подменить но пока не могу понять как подключить именно этот sdk.
Как гуру данного кодинга если не сложно показать хотя бы 1 пример халопу, буду ну очень благодарен вам и думаю не только я.
За ранее Спасибо)

 

Да, забыл уточнить.
Я не просто указал инклуд, а добавить сам СДК через свойства проекта "Свойства конфигурации -> Каталоги VC++ -> Каталоги включения" чтоб оно видело его.
А вот как правильно подключить и сделать с адресного пространства это все, вообще не понятно.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 02.12.2018 в 15:12, Akumu сказал:

По ошибкам компиляции: убедитесь что включили все файлы сдк в проект, просто добавить инклуд недостаточно.

Привет, помоги разобраться пожалуйста. Что ещё нужно по мимо добавления инклуда и добавления каталогов в свойства проекта?
Уже сколько дней ломаю голову...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я был прав, у вас в sdk не хватает lib файлов.
По данному примеру это engine.lib для FEngine и core.lib для FCore

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сдк в том виде что есть -  зависим от файлов интерфейса, к примеру от хдат (т.к. на основе лишь этого сдк в дллке не создать самостоятельное окно), от interface.u (опять же на основе сдк нельзя принимать критически важные ивенты и обрабатывать их действия (OnClickButton, OnClickCheckBox ... и т.д.)), так в чем тогда смысл, господа, или я ошибаюсь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Utils::PrintDebug("Name='%s' Pos=(%.02f, %.02f, %.02f)", Name.c_str(), Location.X, Location.Y, Location.Z);

Есть ещё не большой косяк с Name.c_str() не выводит как следует... Да и при повторном использовании этой функции, выдает координаты с маленькой погрешностью.

PS: Кто будет этим заниматься, скомпилируйте в библиотеку .lib. Потом подключайте в любые проекты...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...