Ага, но при юнит ивентах придется получать каким то образом айди для получения иконки спела, это значит, что все спелы придется заполнять руками в массив локализированное название спела = айди , проще через комбатлог, потом при каждом событии сравниваеть гуид унита с гуидом кастер, а гуид юнита забивать в массив при появлении юнита, например пати через PARTY_MEMBER_CHANGED
Ну или писать инжектор + длл , а после расширять луа стэк своими апи, си функция для получения айди из имени есть
PHP код:
inline int SpellIdByName(const char* name)
{
int rank;
return ((int(__cdecl*)(const char*, int*))0x00540200)(name, &rank);
}
Это вернет айди по имени спела
После чего расширяем луа стэк
PHP код:
static lua_State* (lua_State*)(*(void **)0x00D3F78C);
typedef void (*Lua_Pushcclosure)(lua_State *L, lua_CFunction fn, int n);
typedef void (*Lua_Setfield)(lua_State *L, int idx, const char* k);
void (*Pushcclosure)(lua_State *L, lua_CFunction fn, int n) = reinterpret_cast<Lua_Pushcclosure>(0x0084E400);
void (*Setfield)(lua_State *L, int idx, const char* k) = reinterpret_cast<Lua_Setfield>(0x0084E900);
void RegisterFunc(int callback, const char* command) {
unsigned char * pCodeCave = (unsigned char *)0x00817F90;
DWORD old;
VirtualProtect((LPVOID)pCodeCave, 5, PAGE_EXECUTE_READWRITE, &old);
*(byte *)pCodeCave = 0xe9;
*(int *)(pCodeCave + 1) = callback - (int)pCodeCave - 5;
VirtualProtect((LPVOID)pCodeCave, 5, old, NULL);
Pushcclosure(state, (lua_CFunction)(pCodeCave), 0);
Setfield(state, LUA_GLOBALSINDEX, command);
};