diff --git a/server/channelserver/handlers_quest.go b/server/channelserver/handlers_quest.go index da3c8166a..5c5fb9613 100644 --- a/server/channelserver/handlers_quest.go +++ b/server/channelserver/handlers_quest.go @@ -47,6 +47,10 @@ func handleMsgSysGetFile(s *Session, p mhfpacket.MHFPacket) { ) } + if s.server.erupeConfig.GameplayOptions.SeasonOverride { + pkt.Filename = seasonConversion(s, pkt.Filename) + } + data, err := os.ReadFile(filepath.Join(s.server.erupeConfig.BinPath, fmt.Sprintf("quests/%s.bin", pkt.Filename))) if err != nil { s.logger.Error(fmt.Sprintf("Failed to open file: %s/quests/%s.bin", s.server.erupeConfig.BinPath, pkt.Filename)) @@ -58,6 +62,28 @@ func handleMsgSysGetFile(s *Session, p mhfpacket.MHFPacket) { } } +func questSuffix(s *Session) string { + // Determine the letter to append for day / night + var timeSet string + if TimeGameAbsolute() > 2880 { + timeSet = "d" + } else { + timeSet = "n" + } + return fmt.Sprintf("%s%d", timeSet, s.server.Season()) +} + +func seasonConversion(s *Session, questFile string) string { + filename := fmt.Sprintf("%s%s", questFile[:5], questSuffix(s)) + + // Return original file if file doesn't exist + if _, err := os.Stat(filename); err == nil { + return filename + } else { + return questFile + } +} + func handleMsgMhfLoadFavoriteQuest(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfLoadFavoriteQuest) var data []byte