diff --git a/internal/hooks/RoomChange_LocationGMCPUpdates_Listener.go b/internal/hooks/RoomChange_LocationGMCPUpdates_Listener.go index a7923f49..8f5ec737 100644 --- a/internal/hooks/RoomChange_LocationGMCPUpdates_Listener.go +++ b/internal/hooks/RoomChange_LocationGMCPUpdates_Listener.go @@ -169,18 +169,5 @@ func LocationGMCPUpdates_Listener(e events.Event) bool { }) } - // If this zone has music, play it. - // Room music takes priority. - if newRoom.MusicFile != `` { - user.PlayMusic(newRoom.MusicFile) - } else { - zoneInfo := rooms.GetZoneConfig(newRoom.Zone) - if zoneInfo.MusicFile != `` { - user.PlayMusic(zoneInfo.MusicFile) - } else if oldRoom.MusicFile != `` { - user.PlayMusic(`Off`) - } - } - return true } diff --git a/internal/hooks/RoomChange_LocationMusicChange_Listener.go b/internal/hooks/RoomChange_LocationMusicChange_Listener.go new file mode 100644 index 00000000..9f9987d8 --- /dev/null +++ b/internal/hooks/RoomChange_LocationMusicChange_Listener.go @@ -0,0 +1,55 @@ +package hooks + +import ( + "github.com/volte6/gomud/internal/events" + "github.com/volte6/gomud/internal/rooms" + "github.com/volte6/gomud/internal/users" +) + +// +// RoomChangeHandler waits for RoomChange events +// It then sends out GMCP data updates +// Also sends music changes out +// + +func LocationMusicChange_Listener(e events.Event) bool { + evt := e.(events.RoomChange) + + // If this isn't a user changing rooms, just pass it along. + if evt.UserId == 0 { + return true + } + + // Get user... Make sure they still exist too. + user := users.GetByUserId(evt.UserId) + if user == nil { + return false + } + + // Get the new room data... abort if doesn't exist. + newRoom := rooms.LoadRoom(evt.ToRoomId) + if newRoom == nil { + return false + } + + // Get the old room data... abort if doesn't exist. + oldRoom := rooms.LoadRoom(evt.FromRoomId) + if oldRoom == nil { + return false + } + + // If this zone has music, play it. + // Room music takes priority. + if newRoom.MusicFile != `` { + user.PlayMusic(newRoom.MusicFile) + } else { + zoneInfo := rooms.GetZoneConfig(newRoom.Zone) + if zoneInfo.MusicFile != `` { + user.PlayMusic(zoneInfo.MusicFile) + } else if oldRoom.MusicFile != `` { + user.PlayMusic(`Off`) + } + } + + return true +} diff --git a/internal/hooks/hooks.go b/internal/hooks/hooks.go index 3cd0fd77..6bcee1d5 100644 --- a/internal/hooks/hooks.go +++ b/internal/hooks/hooks.go @@ -7,6 +7,7 @@ func RegisterListeners() { // RoomChange Listeners events.RegisterListener(events.RoomChange{}, LocationGMCPUpdates_Listener) + events.RegisterListener(events.RoomChange{}, LocationMusicChange_Listener) // NewRound Listeners events.RegisterListener(events.NewRound{}, PruneVMs_Listener)