bool CLuaHandleSynced::SetupSynced(const string& code, const string& filename) { if ((L == NULL) || code.empty()) { return false; } lua_pushvalue(L, LUA_GLOBALSINDEX); AddBasicCalls(); // into Global lua_pushstring(L, "Script"); lua_rawget(L, -2); LuaPushNamedCFunc(L, "AddActionFallback", AddSyncedActionFallback); LuaPushNamedCFunc(L, "RemoveActionFallback", RemoveSyncedActionFallback); LuaPushNamedCFunc(L, "UpdateCallIn", CallOutSyncedUpdateCallIn); LuaPushNamedCFunc(L, "GetWatchWeapon", GetWatchWeapon); LuaPushNamedCFunc(L, "SetWatchWeapon", SetWatchWeapon); lua_pop(L, 1); // add the custom file loader LuaPushNamedCFunc(L, "SendToUnsynced", SendToUnsynced); LuaPushNamedCFunc(L, "loadstring", LoadStringData); LuaPushNamedCFunc(L, "CallAsTeam", CallAsTeam); LuaPushNamedCFunc(L, "AllowUnsafeChanges", AllowUnsafeChanges); LuaPushNamedNumber(L, "COBSCALE", COBSCALE); // load our libraries (LuaSyncedCtrl overrides some LuaUnsyncedCtrl entries) if (!AddEntriesToTable(L, "VFS", LuaVFS::PushSynced) || !AddEntriesToTable(L, "UnitDefs", LuaUnitDefs::PushEntries) || !AddEntriesToTable(L, "WeaponDefs", LuaWeaponDefs::PushEntries) || !AddEntriesToTable(L, "FeatureDefs", LuaFeatureDefs::PushEntries) || !AddEntriesToTable(L, "Script", LuaSyncedCall::PushEntries) || !AddEntriesToTable(L, "Spring", LuaUnsyncedCtrl::PushEntries) || !AddEntriesToTable(L, "Spring", LuaSyncedCtrl::PushEntries) || !AddEntriesToTable(L, "Spring", LuaSyncedRead::PushEntries) || !AddEntriesToTable(L, "Game", LuaConstGame::PushEntries) || !AddEntriesToTable(L, "CMD", LuaConstCMD::PushEntries) || !AddEntriesToTable(L, "CMDTYPE", LuaConstCMDTYPE::PushEntries)) { KillLua(); return false; } // add code from the sub-class if (!AddSyncedCode()) { KillLua(); return false; } lua_settop(L, 0); if (!LoadCode(code, filename)) { KillLua(); return false; } return true; }
bool CLuaHandleSynced::SetupSynced(lua_State *L, const string& code, const string& filename) { if (!IsValid() || code.empty()) { return false; } lua_pushvalue(L, LUA_GLOBALSINDEX); HSTR_PUSH(L, "EXPORT"); lua_newtable(L); lua_rawset(L, -3); AddBasicCalls(L); // into Global lua_pushliteral(L, "Script"); lua_rawget(L, -2); LuaPushNamedCFunc(L, "AddActionFallback", AddSyncedActionFallback); LuaPushNamedCFunc(L, "RemoveActionFallback", RemoveSyncedActionFallback); LuaPushNamedCFunc(L, "UpdateCallIn", CallOutSyncedUpdateCallIn); LuaPushNamedCFunc(L, "GetWatchUnit", GetWatchUnitDef); LuaPushNamedCFunc(L, "SetWatchUnit", SetWatchUnitDef); LuaPushNamedCFunc(L, "GetWatchFeature", GetWatchFeatureDef); LuaPushNamedCFunc(L, "SetWatchFeature", SetWatchFeatureDef); LuaPushNamedCFunc(L, "GetWatchWeapon", GetWatchWeaponDef); LuaPushNamedCFunc(L, "SetWatchWeapon", SetWatchWeaponDef); lua_pop(L, 1); // add the custom file loader LuaPushNamedCFunc(L, "SendToUnsynced", SendToUnsynced); LuaPushNamedCFunc(L, "loadstring", LoadStringData); LuaPushNamedCFunc(L, "CallAsTeam", CallAsTeam); LuaPushNamedNumber(L, "COBSCALE", COBSCALE); // load our libraries (LuaSyncedCtrl overrides some LuaUnsyncedCtrl entries) if (!AddEntriesToTable(L, "VFS", LuaVFS::PushSynced) || !AddEntriesToTable(L, "VFS", LuaZipFileReader::PushSynced) || !AddEntriesToTable(L, "VFS", LuaZipFileWriter::PushSynced) || !AddEntriesToTable(L, "UnitDefs", LuaUnitDefs::PushEntries) || !AddEntriesToTable(L, "WeaponDefs", LuaWeaponDefs::PushEntries) || !AddEntriesToTable(L, "FeatureDefs", LuaFeatureDefs::PushEntries) || !AddEntriesToTable(L, "Script", LuaSyncedCall::PushEntries) || !AddEntriesToTable(L, "Spring", LuaUnsyncedCtrl::PushEntries) || !AddEntriesToTable(L, "Spring", LuaSyncedCtrl::PushEntries) || !AddEntriesToTable(L, "Spring", LuaSyncedRead::PushEntries) || !AddEntriesToTable(L, "Game", LuaConstGame::PushEntries) || !AddEntriesToTable(L, "CMD", LuaConstCMD::PushEntries) || !AddEntriesToTable(L, "CMDTYPE", LuaConstCMDTYPE::PushEntries) || !AddEntriesToTable(L, "COB", LuaConstCOB::PushEntries) || !AddEntriesToTable(L, "SFX", LuaConstSFX::PushEntries) || !AddEntriesToTable(L, "LOG", LuaUtils::PushLogEntries) ) { KillLua(); return false; } // add code from the sub-class if (!AddSyncedCode(L)) { KillLua(); return false; } lua_settop(L, 0); if (!LoadCode(L, code, filename)) { KillLua(); return false; } return true; }