Jump to content

Saltfire

Resident
  • Content Count

    569
  • Joined

  • Last visited

  • Days Won

    24
  • Feedback

    N/A

Saltfire last won the day on December 2 2024

Saltfire had the most liked content!

Community Reputation

92

3 Followers

About Saltfire

  • Rank
    Построил домик

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Да ты шо! Ну нишосе! Не качайте линейку, она один сплошной вирус
  2. Ну очевидно-же, знаний не хватает у ТС, и кто сказал, что он св использует? Речь же за хенфу.
  3. Так делать не рекомендуется. Лишний открытый источник для запросов. Лучше сразу получать махом все кто онлайн и если нужно кешировать в памяти или файле. А еще лучше, это делать когда происходит вход или выход из игры, а в базе, хранить лишь значение общего онлайн, тогда никаких не будет COUNT или громоздких вычислений как делают другие в циклах еще и с выборкой, правда такие требования нужно делать в исходниках игрового сервера В таблице `gameservers` нужно добавить поле `online` , в EnterWorld и LeaveWorld изменять значение онлайн соответствующим образом + или -. Код на Java писать? Или нужно статус онлайн сервер что сервер онлайн? fsockopen($host, $port, $error, $errno, 0.0) ? 'online' : 'offline';
  4. Дожились. Просто берешь смотришь в таблице characters кто онлайн Все банально и просто: SELECT COUNT(0) AS `count` FROM `characters` WHERE accesslevel = 0 AND `online` > 0 Или нужно, какой-то другой онлайн?
  5. Что назад в прошлое какое-то? Что такое все деревянное?
  6. В интерлюдии, есть не допиленный PCCafeEventWnd, который работает не на всех сборках и клиентах, пакет на лыжах называется ExPCCafePointInfo (зачастую просто заглушка) Если есть исходники интерфейса, можешь воссоздать, что тебе необходимо через interface.u и interface.xdat.
  7. Для поиска матриц можно использовать CheatEngine, а чтобы точно знать, что ты делаешь, ты можешь скинуть предмет на землю и найти его, а там и все остальное. Потерял, ты хотел просто пример. Vector2 WorldToScreen(const Vector3& worldPosition, const D3DXMATRIX& viewMatrix, const D3DXMATRIX& projectionMatrix, int screenWidth, int screenHeight) { // Преобразуем мировые координаты в координаты клипа с использованием матрицы вида D3DXVECTOR4 clipSpace; clipSpace.x = worldPosition.x * viewMatrix._11 + worldPosition.y * viewMatrix._21 + worldPosition.z * viewMatrix._31 + viewMatrix._41; clipSpace.y = worldPosition.x * viewMatrix._12 + worldPosition.y * viewMatrix._22 + worldPosition.z * viewMatrix._32 + viewMatrix._42; clipSpace.z = worldPosition.x * viewMatrix._13 + worldPosition.y * viewMatrix._23 + worldPosition.z * viewMatrix._33 + viewMatrix._43; clipSpace.w = worldPosition.x * viewMatrix._14 + worldPosition.y * viewMatrix._24 + worldPosition.z * viewMatrix._34 + viewMatrix._44; // Применяем матрицу проекции D3DXVECTOR4 projectedSpace; projectedSpace.x = clipSpace.x * projectionMatrix._11 + clipSpace.y * projectionMatrix._21 + clipSpace.z * projectionMatrix._31 + clipSpace.w * projectionMatrix._41; projectedSpace.y = clipSpace.x * projectionMatrix._12 + clipSpace.y * projectionMatrix._22 + clipSpace.z * projectionMatrix._32 + clipSpace.w * projectionMatrix._42; projectedSpace.z = clipSpace.x * projectionMatrix._13 + clipSpace.y * projectionMatrix._23 + clipSpace.z * projectionMatrix._33 + clipSpace.w * projectionMatrix._43; projectedSpace.w = clipSpace.x * projectionMatrix._14 + clipSpace.y * projectionMatrix._24 + clipSpace.z * projectionMatrix._34 + clipSpace.w * projectionMatrix._44; // Преобразуем координаты клипа в нормализованные координаты устройства if (projectedSpace.w != 0.0f) { projectedSpace.x /= projectedSpace.w; projectedSpace.y /= projectedSpace.w; projectedSpace.z /= projectedSpace.w; } // Преобразуем нормализованные координаты устройства в экранные координаты Vector2 screenPosition; screenPosition.x = (projectedSpace.x + 1.0f) * 0.5f * screenWidth; screenPosition.y = (1.0f - (projectedSpace.y + 1.0f) * 0.5f) * screenHeight; return screenPosition; } Если ты хочешь это делать на уровне ладвы "без как ты хочешь хуков и адских калбеков", то пример для UE2.5 будет выглядеть так: FVector2D WorldToScreen(const FVector& WorldPosition, APlayerController* PlayerController) { FVector2D ScreenPosition; // Проверяем, что PlayerController не равен nullptr if (PlayerController) { // Получаем размер окна int32 ScreenWidth = GEngine->GameViewport->Viewport->GetSizeXY().X; int32 ScreenHeight = GEngine->GameViewport->Viewport->GetSizeXY().Y; // Преобразуем мировую позицию в экранные координаты PlayerController->ProjectWorldLocationToScreen(WorldPosition, ScreenPosition); // Теперь ScreenPosition содержит координаты в диапазоне от (0, 0) до (ScreenWidth, ScreenHeight) } return ScreenPosition; } С учетом, что ты понимаешь как устроен UE2.5. Но тебе еще придется очень сильно постараться, чтобы сие чудо запустить. Шары сурсов для l2 не было, все приватное. Но если ты хочешь это делать на D3 - то без хуков ты не справишься.
  8. Определение World, View и Projection матриц: World Matrix: Определяет положение и ориентацию объектов в игровом мире. View Matrix: Определяет, как сцена будет отображаться из точки зрения камеры. Projection Matrix: Определяет, как 3D-координаты будут проецироваться на 2D-экран. Для d3dx9.h #include <d3dx9.h> struct Vector3 { float x, y, z; }; struct Vector2 { float x, y; }; Vector2 WorldToScreen(const Vector3& worldPosition, const D3DXMATRIX& viewMatrix, const D3DXMATRIX& projectionMatrix, int screenWidth, int screenHeight) { // Преобразуем мировые координаты в координаты клипа D3DXVECTOR4 clipSpace; clipSpace.x = worldPosition.x * viewMatrix._11 + worldPosition.y * viewMatrix._21 + worldPosition.z * viewMatrix._31 + viewMatrix._41; clipSpace.y = worldPosition.x * viewMatrix._12 + worldPosition.y * viewMatrix._22 + worldPosition.z * viewMatrix._32 + viewMatrix._42; clipSpace.z = worldPosition.x * viewMatrix._13 + worldPosition.y * viewMatrix._23 + worldPosition.z * viewMatrix._33 + viewMatrix._43; clipSpace.w = worldPosition.x * viewMatrix._14 + worldPosition.y * viewMatrix._24 + worldPosition.z * viewMatrix._34 + viewMatrix._44; // Преобразуем координаты клипа в нормализованные координаты устройства if (clipSpace.w != 0.0f) { clipSpace.x /= clipSpace.w; clipSpace.y /= clipSpace.w; clipSpace.z /= clipSpace.w; } // Преобразуем нормализованные координаты устройства в экранные координаты Vector2 screenPosition; screenPosition.x = (clipSpace.x + 1.0f) * 0.5f * screenWidth; screenPosition.y = (1.0f - (clipSpace.y + 1.0f) * 0.5f) * screenHeight; return screenPosition; } Для современных версией есть DirectXMath.h: #include <DirectXMath.h> #include <iostream> using namespace DirectX; struct Vector3 { float x, y, z; }; struct Vector2 { float x, y; }; Vector2 WorldToScreen(const Vector3& worldPosition, const XMMATRIX& viewMatrix, const XMMATRIX& projectionMatrix, int screenWidth, int screenHeight) { // Преобразуем мировые координаты в координаты клипа XMVECTOR worldPos = XMLoadFloat3(reinterpret_cast<const XMFLOAT3*>(&worldPosition)); XMVECTOR clipSpace = XMVector3Transform(worldPos, XMMatrixMultiply(viewMatrix, projectionMatrix)); // Преобразуем координаты клипа в нормализованные координаты устройства XMFLOAT4 clipSpaceFloat; XMStoreFloat4(&clipSpaceFloat, clipSpace); if (clipSpaceFloat.w != 0.0f) { clipSpaceFloat.x /= clipSpaceFloat.w; clipSpaceFloat.y /= clipSpaceFloat.w; clipSpaceFloat.z /= clipSpaceFloat.w; } // Преобразуем нормализованные координаты устройства в экранные координаты Vector2 screenPosition; screenPosition.x = (clipSpaceFloat.x + 1.0f) * 0.5f * screenWidth; screenPosition.y = (1.0f - (clipSpaceFloat.y + 1.0f) * 0.5f) * screenHeight; return screenPosition; } Для поиска матриц, лучше использовать готовые мощные инструменты, либо пытаться писать и анализировать самому, чего-то такого: #include <iostream> #include <fstream> #include <iomanip> void ReadMemory(HANDLE hProcess, uintptr_t address) { std::ofstream logFile("l2memory.log", std::ios::app); if (!logFile.is_open()) { std::cerr << "Failed to open the file for writing" << std::endl; return; } int value; SIZE_T bytesRead; if (ReadProcessMemory(hProcess, (LPCVOID)address, &value, sizeof(value), &bytesRead) && bytesRead == sizeof(value)) { std::cout << "Address: " << std::hex << address << " Value (int): " << value << std::dec << std::endl; logFile << "Адрес: " << std::hex << address << " Значения (int): " << value << std::dec << std::endl; if (value > 0 && value < 256) { char buffer[2] = { static_cast<char>(value), '\0' }; std::cout << "Interpreted as char: " << buffer << std::endl; logFile << "Интерпретировано как символ: " << buffer << std::endl; } } else { std::cerr << "Failed to read memory at the address: " << std::hex << address << std::dec << std::endl; logFile << "Не удалось прочитать память по адресу: " << std::hex << address << std::dec << std::endl; logFile.close(); return; } char buffer[256]; if (ReadProcessMemory(hProcess, (LPCVOID)(address + sizeof(value)), buffer, sizeof(buffer) - 1, &bytesRead) && bytesRead > 0) { buffer[bytesRead] = '\0'; std::cout << "Address: " << std::hex << (address + sizeof(value)) << " Value (string): " << buffer << std::dec << std::endl; logFile << "Адрес: " << std::hex << (address + sizeof(value)) << " Значение (string): " << buffer << std::dec << std::endl; } else { std::cerr << "Failed to read the string at the address: " << std::hex << (address + sizeof(value)) << std::dec << std::endl; logFile << "Не удалось прочитать строку по адресу: " << std::hex << (address + sizeof(value)) << std::dec << std::endl; } std::cout << "Bytes in hex: "; logFile << "Вывод байтов в шестнадцатеричном формате: "; for (SIZE_T i = 0; i < sizeof(value); ++i) { std::cout << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(reinterpret_cast<unsigned char*>(&value)[i]) << " "; logFile << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(reinterpret_cast<unsigned char*>(&value)[i]) << " "; } for (SIZE_T i = 0; i < bytesRead; ++i) { std::cout << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(reinterpret_cast<unsigned char*>(buffer)[i]) << " "; logFile << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(reinterpret_cast<unsigned char*>(buffer)[i]) << " "; } std::cout << std::dec << std::endl; logFile << std::dec << std::endl; std::cout << "Filtered bytes: "; logFile << "Фильтрация нулевых байтов: "; for (SIZE_T i = 0; i < sizeof(value) + bytesRead; ++i) { unsigned char byte = (i < sizeof(value)) ? reinterpret_cast<unsigned char*>(&value)[i] : reinterpret_cast<unsigned char*>(buffer)[i - sizeof(value)]; if (byte != 0) { std::cout << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(byte) << " "; logFile << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(byte) << " "; } } std::cout << std::dec << std::endl; logFile << std::dec << std::endl; logFile.close(); }
  9. Для интерлюда и интерфейс с исходниками и компилятор есть в шаре, да и обсуждалось много раз, что да как. Бесплатное, самому нужно дописывать и приводить к нужному тебе состоянию. Либо купить или нанять кто разбирается в C++ и UnrealScript, в целом UE (старых версий), чтобы сделал тебе то, что ты хочешь на чистых исходниках интерфейса. А вообще, лучше себе свой сам начинай делать, тебе понравится, затянет. Зачем нужно то, что ты не сможешь поддерживать в будущем. Это касается и сервера и патча для клиента. Лучше брать то, где есть исходники и по логики собрать и дописать, что нужно и не нужно.
  10. Похоже на AACC. Я тебя огорчу, после успешного возвращения в дампе ты увидишь буковки и цифорки от обфускаций кода. И что-то там сделать и собрать назад будет ой какая проблема, для незнающих вообще даже азов этой всей свистопляски. Короче такая себе затея, когда можно взять чистый интерфейс и сделать необходимые вещи самому, а не пытаться ломать платные. Дебажить и попытаться понять, что отправляется когда нажимаешь на замок, об этом уже выше упомянули и пытаться реализовать этот механизм на стороне сервера. Или купить готовое решение со всеми рабочими функциями и обновлениями в iPerfect .
  11. @trololo1234 так суда скинь interface.u и interface.xdat, глядишь, кто-то и поможет.
  12. Это кто такую чушь сказал? rusacis - по прежнему работает, как и сам acis И я бы рекомендовал писать именно на их форуме, а не пытаться найти помощь тут.
  13. Ты наверно хотел сказать, не лезь, л2 съест твой мозг.
×
×
  • Create New...