Implement alreadyseen and writingtofileTM

This commit is contained in:
2025-05-21 12:41:39 +02:00
parent 3f659d351d
commit d3efd378f2

62
main.go
View File

@@ -74,7 +74,7 @@ func main() {
wg.Add(1)
// We can save the achievements to the database while doing something else unrelated
go saveAchievementsToDB(&db, achievements)
saveAchievementsToSourceFiles(luaStates, achievements)
wg.Wait()
// --- Pass 1: Extract all data ---
@@ -147,6 +147,66 @@ func main() {
// logger.Info("All NSQ workers finished. Program complete.")
}
func saveAchievementsToSourceFiles(luaStates *sync.Map, achievements *sync.Map) {
wg := sync.WaitGroup{}
luaStates.Range(func(k, v any) bool {
path := k.(string)
state := v.(*lua.LState)
log := logger.Default.WithPrefix(path)
log.Info("Clearing existing achievements")
achievementTable := state.GetGlobal("Heimdall_Achievements")
if achievementTable.Type() != lua.LTTable {
achievementTable = &lua.LTable{}
state.SetGlobal("Heimdall_Achievements", achievementTable)
}
log.Info("Clearing existing players table")
emptyTable := &lua.LTable{}
state.SetField(achievementTable, "players", emptyTable)
log.Info("Updating seen table")
seenTable := state.GetField(achievementTable, "alreadySeen")
if seenTable.Type() != lua.LTTable {
seenTable = &lua.LTable{}
state.SetField(achievementTable, "alreadySeen", seenTable)
}
wg.Add(1)
go func() {
defer wg.Done()
updateSeenTable(state, seenTable, achievements, log)
// State itself should now be updated
}()
writeToSource(path, state)
return true
})
wg.Wait()
}
func writeToSource(path string, state *lua.LState) {
}
func updateSeenTable(state *lua.LState, seenTable lua.LValue, achievements *sync.Map, log *logger.Logger) {
achievements.Range(func(k, v any) bool {
playerName := k.(string)
state.SetField(seenTable, playerName, lua.LBool(true))
return true
})
// Debug confirmation
// seenTableLua, ok := seenTable.(*lua.LTable)
// if !ok {
// log.Error("seenTable is not a table")
// return
// }
// state.ForEach(seenTableLua, func(k, v lua.LValue) {
// log.Info("Seen: %s", k)
// })
}
func saveAchievementsToDB(db *DB, achievements *sync.Map) {
achievements.Range(func(k, v any) bool {
playerName := k.(string)