@@ -37,6 +37,8 @@ void CLuaEngineDefs::LoadFunctions()
3737 {" engineGetModelIDFromName" , EngineGetModelIDFromName},
3838 {" engineGetModelTextureNames" , EngineGetModelTextureNames},
3939 {" engineGetVisibleTextureNames" , EngineGetVisibleTextureNames},
40+ {" engineSetModelVisibleTime" , EngineSetModelVisibleTime},
41+ {" engineGetModelVisibleTime" , EngineGetModelVisibleTime},
4042 {" engineGetModelTextures" , EngineGetModelTextures},
4143 {" engineGetSurfaceProperties" , EngineGetSurfaceProperties},
4244 {" engineSetSurfaceProperties" , EngineSetSurfaceProperties},
@@ -72,13 +74,15 @@ void CLuaEngineDefs::AddClass(lua_State* luaVM)
7274 lua_classfunction (luaVM, " setAsynchronousLoading" , " engineSetAsynchronousLoading" );
7375 lua_classfunction (luaVM, " setModelLODDistance" , " engineSetModelLODDistance" );
7476 lua_classfunction (luaVM, " resetModelLODDistance" , " engineResetModelLODDistance" );
77+ lua_classfunction (luaVM, " setModelVisibleTime" , " engineSetModelVisibleTime" );
7578
7679 lua_classfunction (luaVM, " getVisibleTextureNames" , " engineGetVisibleTextureNames" );
7780 lua_classfunction (luaVM, " getModelLODDistance" , " engineGetModelLODDistance" );
7881 lua_classfunction (luaVM, " getModelTextureNames" , " engineGetModelTextureNames" );
7982 lua_classfunction (luaVM, " getModelTextures" , " engineGetModelTextures" );
8083 lua_classfunction (luaVM, " getModelIDFromName" , " engineGetModelIDFromName" );
8184 lua_classfunction (luaVM, " getModelNameFromID" , " engineGetModelNameFromID" );
85+ lua_classfunction (luaVM, " getModelVisibleTime" , " engineGetModelVisibleTime" );
8286 lua_classfunction (luaVM, " getModelPhysicalPropertiesGroup" , " engineGetModelPhysicalPropertiesGroup" );
8387 lua_classfunction (luaVM, " setModelPhysicalPropertiesGroup" , " engineSetModelPhysicalPropertiesGroup" );
8488 lua_classfunction (luaVM, " restoreModelPhysicalPropertiesGroup" , " engineRestoreModelPhysicalPropertiesGroup" );
@@ -231,7 +235,7 @@ int CLuaEngineDefs::EngineLoadDFF(lua_State* luaVM)
231235 }
232236
233237 SString filePath;
234-
238+
235239 if (bIsRawData || CResourceManager::ParseResourcePathInput (input, pResource, &filePath))
236240 {
237241 // Grab the resource root entity
@@ -1100,6 +1104,77 @@ int CLuaEngineDefs::EngineGetVisibleTextureNames(lua_State* luaVM)
11001104 return 1 ;
11011105}
11021106
1107+ int CLuaEngineDefs::EngineSetModelVisibleTime (lua_State* luaVM)
1108+ {
1109+ // bool engineSetModelVisibleTime ( int/string modelID, int hourOn, int hourOff )
1110+ SString strModelId;
1111+ char cHourOn,cHourOff;
1112+ CScriptArgReader argStream (luaVM);
1113+ argStream.ReadString (strModelId);
1114+ argStream.ReadNumber (cHourOn);
1115+ argStream.ReadNumber (cHourOff);
1116+
1117+ if (!argStream.HasErrors ())
1118+ {
1119+ ushort usModelID = CModelNames::ResolveModelID (strModelId);
1120+ CModelInfo* pModelInfo = g_pGame->GetModelInfo (usModelID);
1121+ if (pModelInfo)
1122+ {
1123+ if (cHourOn > cHourOff)
1124+ std::swap (cHourOn, cHourOff);
1125+
1126+ if (cHourOn >= 0 && cHourOn <= 24 && cHourOff >= 0 && cHourOff <= 24 )
1127+ {
1128+ lua_pushboolean (luaVM, pModelInfo->SetTime (cHourOn, cHourOff));
1129+ return 1 ;
1130+ }
1131+ }
1132+ }
1133+ else
1134+ luaL_error (luaVM, argStream.GetFullErrorMessage ());
1135+
1136+ // Failed
1137+ lua_pushboolean (luaVM, false );
1138+ return 1 ;
1139+ }
1140+
1141+ int CLuaEngineDefs::EngineGetModelVisibleTime (lua_State* luaVM)
1142+ {
1143+ // int, int engineGetModelVisibleTime ( int/string modelID )
1144+ SString strModelId;
1145+
1146+ CScriptArgReader argStream (luaVM);
1147+ argStream.ReadString (strModelId);
1148+
1149+ if (!argStream.HasErrors ())
1150+ {
1151+ ushort usModelID = CModelNames::ResolveModelID (strModelId);
1152+ CModelInfo* pModelInfo = g_pGame->GetModelInfo (usModelID);
1153+ if (pModelInfo)
1154+ {
1155+ char cHourOn, cHourOff;
1156+ if (pModelInfo->GetTime (cHourOn, cHourOff))
1157+ {
1158+ lua_pushnumber (luaVM, cHourOn);
1159+ lua_pushnumber (luaVM, cHourOff);
1160+ return 2 ;
1161+ }
1162+ else // Model is incompatible, don't let confuse user.
1163+ {
1164+ lua_pushnumber (luaVM, 0 );
1165+ lua_pushnumber (luaVM, 24 );
1166+ return 2 ;
1167+ }
1168+ }
1169+ }
1170+ else
1171+ luaL_error (luaVM, argStream.GetFullErrorMessage ());
1172+
1173+ // Failed
1174+ lua_pushboolean (luaVM, false );
1175+ return 1 ;
1176+ }
1177+
11031178int CLuaEngineDefs::EngineGetModelTextures (lua_State* luaVM)
11041179{
11051180 // table engineGetModelTextures ( string/int modelName/modelID, string/table textureNames )
@@ -1568,7 +1643,7 @@ int CLuaEngineDefs::EngineGetModelPhysicalPropertiesGroup(lua_State* luaVM)
15681643 }
15691644 argStream.SetCustomError (" Expected valid model ID at argument 1" );
15701645 }
1571-
1646+
15721647 return luaL_error (luaVM, argStream.GetFullErrorMessage ());
15731648}
15741649
@@ -1605,7 +1680,7 @@ int CLuaEngineDefs::EngineSetModelPhysicalPropertiesGroup(lua_State* luaVM)
16051680 }
16061681 argStream.SetCustomError (" Expected valid model ID at argument 1" );
16071682 }
1608-
1683+
16091684 return luaL_error (luaVM, argStream.GetFullErrorMessage ());
16101685}
16111686
@@ -1634,7 +1709,7 @@ int CLuaEngineDefs::EngineRestoreModelPhysicalPropertiesGroup(lua_State* luaVM)
16341709 }
16351710 argStream.SetCustomError (" Expected valid model ID at argument 1" );
16361711 }
1637-
1712+
16381713 return luaL_error (luaVM, argStream.GetFullErrorMessage ());
16391714}
16401715
@@ -1818,7 +1893,7 @@ int CLuaEngineDefs::EngineSetObjectGroupPhysicalProperty(lua_State* luaVM)
18181893 }
18191894 }
18201895 }
1821-
1896+
18221897 return luaL_error (luaVM, argStream.GetFullErrorMessage ());
18231898}
18241899
0 commit comments