recurse quest enum into dirs

This commit is contained in:
wish
2022-08-06 19:59:45 +10:00
parent e84bdd5adf
commit 40f5744a7b

View File

@@ -64,27 +64,32 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) {
var totalCount, returnedCount uint16 var totalCount, returnedCount uint16
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint16(0) bf.WriteUint16(0)
files, err := ioutil.ReadDir(fmt.Sprintf("%s/events/", s.server.erupeConfig.BinPath)) err := filepath.Walk(fmt.Sprintf("%s/events/", s.server.erupeConfig.BinPath), func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
stubEnumerateNoResults(s, pkt.AckHandle) return err
return } else if info.IsDir() {
} else { return nil
for _, file := range files { }
data, err := ioutil.ReadFile(fmt.Sprintf("%s/events/%s", s.server.erupeConfig.BinPath, file.Name())) data, err := ioutil.ReadFile(path)
if err != nil { if err != nil {
continue return err
} else { } else {
if len(data) > 850 || len(data) < 400 { if len(data) > 850 || len(data) < 400 {
continue // Could be more or less strict with size limits return nil // Could be more or less strict with size limits
} else { } else {
totalCount++ totalCount++
if totalCount > pkt.Offset && len(bf.Data()) < 64000 { if totalCount > pkt.Offset && len(bf.Data()) < 64000 {
returnedCount++ returnedCount++
bf.WriteBytes(data) bf.WriteBytes(data)
return nil
} }
} }
} }
} return nil
})
if err != nil || totalCount == 0 {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 18))
return
} }
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk