39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
|  | local DataTableUtils = {} | |||
|  | local BusyGamePlayLibrary = import("BusyGamePlayLibrary") | |||
|  | 
 | |||
|  | 
 | |||
|  | function DataTableUtils.GetDataTable(table_name) | |||
|  |     return BusyGamePlayLibrary.GetGameDataTable(table_name) | |||
|  | end | |||
|  | 
 | |||
|  | function DataTableUtils.GetDataTableRow(table_name, row_name) | |||
|  |     local data_table = DataTableUtils.GetDataTable(table_name) | |||
|  |     if not data_table then | |||
|  |         return nil | |||
|  |     end | |||
|  |     return data_table:FindRow(row_name) | |||
|  | end | |||
|  | 
 | |||
|  | 
 | |||
|  | --[[ | |||
|  | LuaExtensionMethod.cpp:22-28 | |||
|  | 
 | |||
|  | 
 | |||
|  | // 封装函数示例   | |||
|  | static int FindRowWrapper(lua_State* L) {   | |||
|  |     UDataTable* dataTable = LuaObject::checkUD<UDataTable>(L, 1);   | |||
|  |     FName rowName = LuaObject::checkValue<FName>(L, 2);   | |||
|  |     UScriptStruct* rowStruct = LuaObject::checkUD<UScriptStruct>(L, 3);   | |||
|  |     // 使用反射调用 FindRow   | |||
|  |     uint8* rowData = dataTable->FindRowUnchecked(rowName);   | |||
|  |     if (rowData && rowStruct) {   | |||
|  |         // 将结果推送到 Lua   | |||
|  |         return LuaObject::pushStruct(L, rowStruct, rowData);   | |||
|  |     }   | |||
|  |     return LuaObject::pushNil(L);   | |||
|  | } | |||
|  | 这段代码中,pushStruct只接受两个参数,如何改 | |||
|  | 
 | |||
|  | ]] | |||
|  | 
 | |||
|  | return DataTableUtils |