Как реализовать вызов из unreal script

  • Автор темы Автор темы Maksim
  • Дата начала Дата начала

Maksim

Легендарный
Проверенный
Знаток Lineage2
Любитель реакций
Неукротимое пламя
Старожил I степени
Сообщения
990
Розыгрыши
0
Решения
6
Репутация
600
Реакции
865
Баллы
1 708
Всем доброго утра, дня, вечера, ночи.
Задался вопросом как реализовать из unreal script передачу параметра в кастомную dll которую прикрепляешь через cff explorer к fire.dll например.
Банально передать текст из unreal script и чтобы эта DLL вывела сообщение в окне.

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


 
Решение

ну с таким подходом не выйдет сделать ибо нейросеть не даст нормальный код без кучи уточнении.


*** Скрытый текст не может быть процитирован. ***
Спасибо, на самом деле подход всегда такой. Часть в гпт, остальное подправить. Так если делать, то действительно рано еще полагаться на аи. Вот выпустят gpt 7, тогда можно еще "наверное". ? :pandaredlol:
 
@Maksim, Правила. Видимо пора вносить в правила вообще в целом, как и код сгенерированный, так и продажи, как было недавно в теме
 
Всем доброго утра, дня, вечера, ночи.
Задался вопросом как реализовать из unreal script передачу параметра в кастомную dll которую прикрепляешь через cff explorer к fire.dll например.
Банально передать текст из unreal script и чтобы эта DLL вывела сообщение в окне.

Просто пытаюсь сделать минимальное, если кто может помогите разобраться с этим вопросом.
Это поможет не только мне, но и всем. ??
C++:
    // OnEvent интерфейса
    typedef void(_fastcall* _OnEvent) (unsigned int This, unsigned int EDX, int Event_ID, FString* param);
    _OnEvent true_OnEvent;

    
    if ((addr = GetProcAddress(hNWindow, "?eventOnEvent@UUIScript@@QAEXHABVFString@@@Z")) == 0)
    {
        //return false;
    }else
    {
        true_OnEvent = (_OnEvent)splice((unsigned char*)addr, new_OnEvent);
    }
    

    
// OnEvent интерфейса
void _fastcall new_OnEvent(unsigned int This, unsigned int EDX, int Event_ID, FString *param)
{   
    if (param->IsValid())
    {
        std::string str = param->ToString();
        printf("Event_ID=%d ", Event_ID);
        cout << str;
        printn();
    }
    else
    {
        printf("Event_ID=%d param=inValid\n", Event_ID);
        printn();
    }
    //*/
}
FString (Lineage 2 SDK: High Five v273) на просторах интернета. сам сорц dll какой то защиты для HF4. то что на скрине артея.
 

Вложения

  • 2024-11-04_13-40-46.webp
    2024-11-04_13-40-46.webp
    12 КБ · Просмотры: 62
параметры ее должны быть обязательно такие

C++:
#define RESULT_DECL void*const Result
typedef void (UUIScript::*Native)(struct FFrame& TheStack, RESULT_DECL)

void ptrUUIScript::PRIVATE_OnCalled_execDebug(struct FFrame & Stack, RESULT_DECL)
{
    P_GET_STR(type);
    P_FINISH

    if (SETTINGS->isUiDebugLog)
        LOGGER->Log(L"ui: %s", *type);
}

структуру FFrame нужно будет взять с движка ue как и макросы P_GET_STR/P_FINISH и тд.

Макросы из какого-то старого UE (1997-1999)

Код:
#define P_GET_STR(var)                FString var;                         Stack.Step( Stack.Object, &var    );
#define P_FINISH                    Stack.SkipByte();

Структура FFrame тоже из старого UE
C++:
//
// Information about script execution at one stack level.
//
struct CORE_API FFrame : public FOutputDevice
{
    // Variables.
    UStruct*        Node;
    UObject*        Object;
    BYTE*            Code;
    BYTE*            Locals;
    FConstRefParm*    ConstRefs;

    // Constructors.
    FFrame( UObject* InObject );
    FFrame( UObject* InObject, UStruct* InNode, INT CodeOffset, void* InLocals );
    ~FFrame();

    // Functions.
    void Step( UObject* Context, RESULT_DECL );
    void Serialize( const TCHAR* V, enum EName Event );
    INT ReadInt();
    INT ReadIntInPlace(); // ReadInt but don't advance code pointer.
    UObject* ReadObject();
    UObject* ReadObjectInPlace(); // ReadObject but don't advance code pointer.
    FLOAT ReadFloat();
    INT ReadWord();
    FName ReadName();
    BYTE* GetLocalValue(class UProperty* P);
    BYTE* GetLocalValueIndex(class UProperty* P, INT Index);
    BYTE ReadByte();
    void SkipBytes(const INT Count);
    void SkipByte();
    void VerifyByte(EExprToken Expr);
    void Jump(const INT CodeOffset);

    // Const refs that can be stacked onto this frame.
    void ClearConstRefs();
    BYTE* AllocConstRef(UProperty* P);

    // Dump full UScript call stack to Log.
    static void DumpUScriptStack();
};


 
Назад
Сверху Снизу