From 4247e0efaaab9560afa5ce2ca8b3aec80141a6d9 Mon Sep 17 00:00:00 2001 From: raven Date: Fri, 20 Mar 2026 17:01:30 -0500 Subject: store world data in JSON --- server/server.go | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'server/server.go') diff --git a/server/server.go b/server/server.go index 13e06f6..8499301 100644 --- a/server/server.go +++ b/server/server.go @@ -6,7 +6,6 @@ import ( "log" "fmt" "time" - "binary" "os/signal" "git.citrons.xyz/metronode/classic" "git.citrons.xyz/metronode/phony" @@ -58,14 +57,12 @@ func NewServer(info ServerInfo) *Server { 128*blockSize, } } else { - f, err := os.Open("world/world.bin") - if err != nil { - log.Fatal(err) - } - err = binary.Read(f, binary.BigEndian, &s.worldState) - if err != nil { - log.Fatal("read world data: %s", err) - } + loaded := make(chan worldState, 1) + loadDataFile(s, "world", func(state worldState, ok bool) { + loaded <- state + }) + s.worldState = <-loaded + } return s } @@ -117,10 +114,13 @@ func (s *Server) stop() { ) checkSaved := func() { if savedLevels >= len(s.levels) && savedPlayers >= len(s.players) { - close(s.stopped) for client := range s.clients { client.Disconnect(s, "Shutting down...") } + saveDataFile(s, "world", s.worldState) + dataManager.Act(s, func() { + close(s.stopped) + }) } } for _, player := range s.players { @@ -143,6 +143,7 @@ func (s *Server) Stop(from phony.Actor) { func (s *Server) Save(from phony.Actor) { s.Act(from, func() { + saveDataFile(s, "world", s.worldState) for _, player := range s.players { player.Save(s, nil) } @@ -229,7 +230,7 @@ func (s *Server) NewPlayer( func (s *Server) getLevel(lvl levelId) *level { if s.levels[lvl] == nil { - s.levels[lvl] = loadLevel(s, lvl, lvl == s.spawnLevel) + s.levels[lvl] = loadLevel(s, lvl, lvl == s.SpawnLevel) } return s.levels[lvl] } @@ -247,7 +248,7 @@ func (s *Server) GetLevel( func (s *Server) SendToSpawn(from phony.Actor, pl *player) { s.Act(from, func() { - pl.ChangeLevel(s, s.spawnLevel, s.spawnPos) + pl.ChangeLevel(s, s.SpawnLevel, s.SpawnPos) }) } -- cgit v1.2.3