Когда в коде игры происходит какое-то условие, то нельзя просто так взять и взывать CE Lua функцию, т.к. код игры ничего не знает о CE. Здесь нужно немного пошаманить на ассемблере и вот два примера. [ENABLE] {$lua} function testFunc(param) print("Hello world!") print("Calling LUA from ASM!!!:)") print(param) end {$asm} ///#region untouched - Call CE lua function loadlibrary(luaclient-i386.dll) luacall(openLuaServer('CELUASERVER')) globalalloc(luainit, 128) globalalloc(LuaFunctionCall, 128) label(luainit_exit) globalalloc(luaserverinitialized, 4) globalalloc(luaservername, 12) luaservername: db 'CELUASERVER',0 luainit: cmp [luaserverinitialized],0 jne luainit_exit push luaservername call CELUA_Initialize //this function is defined in the luaclient dll mov [luaserverinitialized],eax luainit_exit: ret LuaFunctionCall: push ebp mov ebp,esp call luainit push [ebp+c] push [ebp+8] call CELUA_ExecuteFunction pop ebp ret 8 //luacall call example: //push integervariableyouwishtopasstolua //push addresstostringwithfunction //(The lua function will have access to the variable passed by name "parameter") //call LuaFunctionCall //When done EAX will contain the result of the lua function ///#endregion globalalloc(myVar,4) myVar: dd 0 alloc(luaCallExample, $200) label(funcName) createThread(luaCallExample) luaCallExample: push 1 push funcName call LuaFunctionCall mov [myVar],eax inc [myVar] ret funcName: db 'testFunc',0 [DISABLE]callers={} function store(parameter) if (callers[parameter]==nil) then callers[parameter]=1 else callers[parameter]=callers[parameter]+1 end end function getCallers() for caller,count in pairs(callers) do print(string.format("%x : %d", caller, count)) end end autoAssemble([[ loadlibrary(luaclient-i386.dll) luacall(openLuaServer('CELUASERVER')) globalalloc(luainit, 128) globalalloc(LuaFunctionCall, 128) label(luainit_exit) globalalloc(luaserverinitialized, 4) globalalloc(luaservername, 12) luaservername: db 'CELUASERVER',0 luainit: cmp [luaserverinitialized],0 jne luainit_exit push luaservername call CELUA_Initialize //this function is defined in the luaclient dll mov [luaserverinitialized],eax luainit_exit: ret LuaFunctionCall: push ebp mov ebp,esp call luainit push [ebp+c] push [ebp+8] call CELUA_ExecuteFunction pop ebp ret 8 alloc(newmem,2048) alloc(storecaller, 2048) label(returnhere) label(originalcode) label(exit) storecaller: db 'store(parameter)',0 //------------Modify this part:-------------------- newmem: mov eax,[esp] push eax push storecaller call LuaFunctionCall originalcode: mov edi,edi push ebp mov ebp,esp exit: jmp returnhere "USER32.dll"+205BA: //peekMessageW jmp newmem returnhere: ]])