Цитата Сообщение от DreamlØlz Посмотреть сообщение
PHP код:
    inline auto GetLocalPlayerGuid() 
    { 
        return ((
uint64_t(__cdecl*)())(0x004D3790))(); 
    }

    
inline auto GetLocalPlayer() 
    {
        
uint64_t lpguid GetLocalPlayerGuid();
        return 
lpguid ? ((int(__cdecl*)(long longint))0x004D4DB0)(lpguid0x0010) : 0;
    }

    
inline auto IsString(int stateint n_param)                 
    { 
        return ((
bool(__cdecl*)(intint))0x00817FD0)(staten_param); 
    }
    
    
inline auto ToString(int stateint n_paramint zero 0)     
    { 
        return ((
char*(__cdecl*)(intintint))0x0084E0E0)(staten_paramzero); 
    }
    
    
inline auto IsNumber(int stateint n_param)    
    { 
        return ((
bool(__cdecl*)(intint))0x0084DF20)(staten_param); 
    }
    
    
inline auto DisplayError(int statecharerr, ...)
    { 
        return ((
int(__cdecl*)(intchar*, ...))0x0084F280)(stateerr); 
    }
    
    
inline auto GetObjectByGuidTypeCheck(uint64_t guidint typemask = -1
    { 
        return  
guid ? ((int(__cdecl*)(uint64_tint))0x004D4DB0)(guidtypemask) : 0
    }
    
    
inline auto StringToGuid(charguid_string)                
    { 
        return ((
uint64_t(__cdecl*)(char*))0x0074D120)(guid_string); 
    }
    
    
inline auto GetPtrFromUnitId(charunit_id)        
    { 
        return ((
int(__cdecl*)(char*))0x0060C1F0)(unit_id); 
    }
    
    
inline auto UnitIdOrGuidToAddr(LPCSTR pstr
    {
        if (*
pstr == '0' && (pstr[1] == 'X' || pstr[1] == 'x'))
            return 
GetObjectByGuidTypeCheck(StringToGuid(pstr));
        else
            return 
GetPtrFromUnitId(pstr);
    }
    
    
inline auto PushNumber(int statedouble number)
    { 
        return ((
int(__cdecl*)(intdouble))0x0084E2A0)(statenumber); 
    }
    
    
inline auto PushNil(int state)                    
    { 
        return ((
int(__cdecl*)(int))0x0084E280)(state); 
    }
    
    
inline auto GetUnitFromLuaState(int stateint argcharerr, ...) 
    {
        if (!
GetLocalPlayer())
            return 
0;

        if ((
IsString(statearg))) 
        {
            
charunit ToString(statearg0);
            if (!
unit
            {
                
DisplayError(stateerr);
                return 
0;
            }
            return 
UnitIdOrGuidToAddr(unit);
        }
        else if (
IsNumber(statearg)) 
            return 
GetObjectByGuidTypeCheck((UINT64)ToNumber(statearg));

        return 
0;
    }
    
    
inline auto GetCoord(int state)
    {
        
auto addr GetUnitFromLuaState(state1"Usage: GetCoord(\"unit\" or [\"guid\"])");
        if (
addr)
        {
            
PushNumber(state, *(float*)(addr 0x79C));
            
PushNumber(state, *(float*)(addr 0x798));
            
PushNumber(state, *(float*)(addr 0x7A0));
            return 
3;
        }
        else
            
PushNil(state);
        return 
1;
    }
    
    
inline auto RegisterLuaFunc(charfuncName, const int func_pointer
    { 
        return ((
bool(__cdecl*)(char*, int))0x00817F90)(commandfunc_pointer); 
    }
    
    
int LoadScriptFuncDetour()
    {
        
RegisterLuaFunc("GetCoord", (int)GetCoord);
        
        
// тут нужно вернуть оригинальную функцию
        
return ((void(__cdecl*)())0x005120E0)(); 
    }
    
    
void MainThreadControl()
    {
        
// тут нужен детур функции по адресу 0x005120E0, реализацию думай сам
        // вариантов море , от хуков виртуальных функций ака VFTableHook до записи джампа на твой указатель в первые 5 байт
        //Detour(0x005120E0, (int)LoadScriptFuncDetour);
    
}
    
    
int __cdecl DllMain(voidinstDLLlong long reasonvoid*)
    {
        if (
reason == DLL_PROCESS_ATTACH)
        {
            
DisableThreadLibraryCalls(instDLL);
            
CreateThread(NULL0, (LPTHREAD_START_ROUTINE)&MainThreadControlNULL0NULL);
        }
        return 
1;
    } 
А можно для овощей (это я про себя), в виде аддона или программы, чтобы поставить, и оно мне показывало, спасибо