package channelserver import ( "erupe-ce/common/mhfmon" "erupe-ce/common/stringsupport" _config "erupe-ce/config" "fmt" "io" "os" "path/filepath" "time" "erupe-ce/common/byteframe" "erupe-ce/network/mhfpacket" "erupe-ce/server/channelserver/compression/deltacomp" "erupe-ce/server/channelserver/compression/nullcomp" "go.uber.org/zap" ) func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfSavedata) characterSaveData, err := GetCharacterSaveData(s, s.charID) if err != nil { s.logger.Error("failed to retrieve character save data from db", zap.Error(err), zap.Uint32("charID", s.charID)) return } // Var to hold the decompressed savedata for updating the launcher response fields. if pkt.SaveType == 1 { // Diff-based update. // diffs themselves are also potentially compressed diff, err := nullcomp.Decompress(pkt.RawDataPayload) if err != nil { s.logger.Error("Failed to decompress diff", zap.Error(err)) doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) return } // Perform diff. s.logger.Info("Diffing...") characterSaveData.decompSave = deltacomp.ApplyDataDiff(diff, characterSaveData.decompSave) } else { dumpSaveData(s, pkt.RawDataPayload, "savedata") // Regular blob update. saveData, err := nullcomp.Decompress(pkt.RawDataPayload) if err != nil { s.logger.Error("Failed to decompress savedata from packet", zap.Error(err)) doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) return } if s.server.erupeConfig.SaveDumps.RawEnabled { dumpSaveData(s, saveData, "raw-savedata") } s.logger.Info("Updating save with blob") characterSaveData.decompSave = saveData } characterSaveData.updateStructWithSaveData() s.playtime = characterSaveData.Playtime s.playtimeTime = time.Now() // Bypass name-checker if new if characterSaveData.IsNewCharacter == true { s.Name = characterSaveData.Name } if characterSaveData.Name == s.Name || _config.ErupeConfig.RealClientMode <= _config.S10 { characterSaveData.Save(s) s.logger.Info("Wrote recompressed savedata back to DB.") } else { s.rawConn.Close() s.logger.Warn("Save cancelled due to corruption.") if s.server.erupeConfig.DeleteOnSaveCorruption { s.server.db.Exec("UPDATE characters SET deleted=true WHERE id=$1", s.charID) } return } _, err = s.server.db.Exec("UPDATE characters SET name=$1 WHERE id=$2", characterSaveData.Name, s.charID) if err != nil { s.logger.Error("Failed to update character name in db", zap.Error(err)) } doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } func grpToGR(n int) uint16 { var gr int a := []int{208750, 593400, 993400, 1400900, 2315900, 3340900, 4505900, 5850900, 7415900, 9230900, 11345900, 100000000} b := []int{7850, 8000, 8150, 9150, 10250, 11650, 13450, 15650, 18150, 21150, 23950} c := []int{51, 100, 150, 200, 300, 400, 500, 600, 700, 800, 900} for i := 0; i < len(a); i++ { if n < a[i] { if i == 0 { for { n -= 500 if n <= 500 { if n < 0 { i-- } break } else { i++ for j := 0; j < i; j++ { n -= 150 } } } gr = i + 2 } else { n -= a[i-1] gr = c[i-1] gr += n / b[i-1] } break } } return uint16(gr) } func dumpSaveData(s *Session, data []byte, suffix string) { if !s.server.erupeConfig.SaveDumps.Enabled { return } else { dir := filepath.Join(s.server.erupeConfig.SaveDumps.OutputDir, fmt.Sprintf("%d", s.charID)) path := filepath.Join(s.server.erupeConfig.SaveDumps.OutputDir, fmt.Sprintf("%d", s.charID), fmt.Sprintf("%d_%s.bin", s.charID, suffix)) _, err := os.Stat(dir) if err != nil { if os.IsNotExist(err) { err = os.MkdirAll(dir, os.ModePerm) if err != nil { s.logger.Error("Error dumping savedata, could not create folder") return } } else { s.logger.Error("Error dumping savedata") return } } err = os.WriteFile(path, data, 0644) if err != nil { s.logger.Error("Error dumping savedata, could not write file", zap.Error(err)) } } } func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfLoaddata) if _, err := os.Stat(filepath.Join(s.server.erupeConfig.BinPath, "save_override.bin")); err == nil { data, _ := os.ReadFile(filepath.Join(s.server.erupeConfig.BinPath, "save_override.bin")) doAckBufSucceed(s, pkt.AckHandle, data) return } var data []byte err := s.server.db.QueryRow("SELECT savedata FROM characters WHERE id = $1", s.charID).Scan(&data) if err != nil || len(data) == 0 { s.logger.Warn(fmt.Sprintf("Failed to load savedata (CID: %d)", s.charID), zap.Error(err)) s.rawConn.Close() // Terminate the connection return } doAckBufSucceed(s, pkt.AckHandle, data) decompSaveData, err := nullcomp.Decompress(data) if err != nil { s.logger.Error("Failed to decompress savedata", zap.Error(err)) } bf := byteframe.NewByteFrameFromBytes(decompSaveData) bf.Seek(88, io.SeekStart) name := bf.ReadNullTerminatedBytes() s.server.userBinaryPartsLock.Lock() s.server.userBinaryParts[userBinaryPartID{charID: s.charID, index: 1}] = append(name, []byte{0x00}...) s.server.userBinaryPartsLock.Unlock() s.Name = stringsupport.SJISToUTF8(name) } func handleMsgMhfSaveScenarioData(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfSaveScenarioData) dumpSaveData(s, pkt.RawDataPayload, "scenario") _, err := s.server.db.Exec("UPDATE characters SET scenariodata = $1 WHERE id = $2", pkt.RawDataPayload, s.charID) if err != nil { s.logger.Error("Failed to update scenario data in db", zap.Error(err)) } doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } func handleMsgMhfLoadScenarioData(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfLoadScenarioData) var scenarioData []byte bf := byteframe.NewByteFrame() err := s.server.db.QueryRow("SELECT scenariodata FROM characters WHERE id = $1", s.charID).Scan(&scenarioData) if err != nil || len(scenarioData) < 10 { s.logger.Error("Failed to load scenariodata", zap.Error(err)) bf.WriteBytes(make([]byte, 10)) } else { bf.WriteBytes(scenarioData) } doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } var paperGiftData = map[uint32][]PaperGift{ 6001: { {11159, 1, 1, 5000}, {11160, 1, 1, 3350}, {11161, 1, 1, 1500}, {11162, 1, 1, 100}, {11163, 1, 1, 50}, }, 6002: { {11159, 2, 1, 1800}, {11160, 2, 1, 1200}, {11161, 2, 1, 500}, {11162, 1, 1, 50}, {11037, 1, 1, 150}, {11038, 1, 1, 150}, {11044, 1, 1, 150}, {11057, 1, 1, 150}, {11059, 1, 1, 150}, {11079, 1, 1, 150}, {11098, 1, 1, 150}, {11104, 1, 1, 150}, {11117, 1, 1, 150}, {11128, 1, 1, 150}, {11133, 1, 1, 150}, {11137, 1, 1, 150}, {11143, 1, 1, 150}, {11132, 1, 1, 150}, {11039, 1, 1, 150}, {11040, 1, 1, 150}, {11049, 1, 1, 150}, {11061, 1, 1, 150}, {11063, 1, 1, 150}, {11077, 1, 1, 150}, {11099, 1, 1, 150}, {11105, 1, 1, 150}, {11129, 1, 1, 150}, {11130, 1, 1, 150}, {11131, 1, 1, 150}, {11139, 1, 1, 150}, {11145, 1, 1, 150}, {11096, 1, 1, 150}, {11041, 1, 1, 150}, {11047, 1, 1, 150}, {11054, 1, 1, 150}, {11065, 1, 1, 150}, {11068, 1, 1, 150}, {11075, 1, 1, 150}, {11100, 1, 1, 150}, {11106, 1, 1, 150}, {11119, 1, 1, 150}, {11135, 1, 1, 150}, {11136, 1, 1, 150}, {11138, 1, 1, 150}, {11088, 1, 1, 150}, {10370, 1, 1, 150}, {10368, 1, 1, 150}, }, 6010: { {11159, 1, 1, 3700}, {11160, 1, 1, 2900}, {11161, 1, 1, 1300}, {11453, 1, 1, 250}, {11454, 1, 1, 250}, {12055, 1, 1, 250}, {12065, 1, 1, 250}, {12058, 1, 1, 250}, {12068, 1, 1, 250}, {11774, 1, 1, 200}, {11773, 1, 1, 400}, }, 6011: { {11159, 1, 1, 3700}, {11160, 1, 1, 2900}, {11161, 1, 1, 1300}, {11453, 1, 1, 250}, {11454, 1, 1, 250}, {12055, 1, 1, 250}, {12065, 1, 1, 250}, {12058, 1, 1, 250}, {12068, 1, 1, 250}, {11774, 1, 1, 200}, {11773, 1, 1, 400}, }, 6012: { {11159, 2, 1, 3500}, {11160, 2, 1, 2900}, {11161, 2, 1, 1300}, {12508, 1, 1, 400}, {11453, 1, 1, 200}, {11454, 1, 1, 200}, {12055, 1, 1, 200}, {12065, 1, 1, 200}, {12058, 1, 1, 200}, {12068, 1, 1, 200}, {11775, 1, 1, 400}, {11776, 1, 1, 200}, {11777, 1, 1, 100}, }, 7001: { {11037, 1, 1, 290}, {11038, 1, 1, 270}, {11044, 1, 1, 270}, {11057, 1, 1, 290}, {11059, 1, 1, 290}, {11079, 1, 1, 290}, {11098, 1, 1, 280}, {11104, 1, 1, 300}, {11117, 1, 1, 280}, {11128, 1, 1, 290}, {11133, 1, 1, 290}, {11137, 1, 1, 300}, {11143, 1, 1, 290}, {11132, 1, 1, 270}, {11042, 1, 1, 47}, {11045, 1, 1, 47}, {11064, 1, 1, 47}, {11062, 1, 1, 47}, {11070, 1, 1, 48}, {11101, 1, 1, 47}, {11108, 1, 1, 47}, {11109, 1, 1, 47}, {11120, 1, 1, 47}, {11122, 1, 1, 47}, {11134, 1, 1, 47}, {11141, 1, 1, 47}, {11084, 1, 1, 47}, {11087, 1, 1, 47}, {11094, 1, 1, 47}, {10374, 1, 1, 47}, {10375, 1, 1, 47}, {11051, 1, 1, 17}, {11071, 1, 1, 16}, {11076, 1, 1, 16}, {11102, 1, 1, 17}, {11124, 1, 1, 17}, {11090, 1, 1, 17}, {11159, 1, 1, 1200}, {11159, 2, 1, 650}, {11160, 1, 1, 800}, {11160, 2, 1, 300}, {11161, 1, 1, 100}, {11161, 2, 1, 50}, {11164, 1, 1, 100}, {11162, 1, 1, 100}, {11163, 1, 1, 100}, {11158, 1, 1, 300}, {11463, 1, 1, 300}, {11356, 1, 1, 300}, {11464, 1, 1, 300}, {11357, 1, 1, 500}, {11039, 1, 2, 300}, {11040, 1, 2, 270}, {11049, 1, 2, 300}, {11061, 1, 2, 290}, {11063, 1, 2, 290}, {11077, 1, 2, 290}, {11099, 1, 2, 280}, {11105, 1, 2, 300}, {11129, 1, 2, 250}, {11130, 1, 2, 300}, {11131, 1, 2, 280}, {11139, 1, 2, 290}, {11145, 1, 2, 260}, {11096, 1, 2, 300}, {11046, 1, 2, 47}, {11066, 1, 2, 47}, {11067, 1, 2, 47}, {11072, 1, 2, 47}, {11082, 1, 2, 47}, {11103, 1, 2, 47}, {11110, 1, 2, 47}, {11112, 1, 2, 47}, {11114, 1, 2, 47}, {11115, 1, 2, 47}, {11121, 1, 2, 47}, {11144, 1, 2, 48}, {11085, 1, 2, 47}, {11089, 1, 2, 47}, {11091, 1, 2, 47}, {10376, 1, 2, 47}, {10377, 1, 2, 47}, {11127, 1, 2, 17}, {11069, 1, 2, 17}, {11142, 1, 2, 17}, {11078, 1, 2, 17}, {11056, 1, 2, 16}, {11092, 1, 2, 16}, {11159, 1, 2, 1200}, {11159, 2, 2, 650}, {11160, 1, 2, 800}, {11160, 2, 2, 300}, {11161, 1, 2, 100}, {11161, 2, 2, 50}, {11164, 1, 2, 100}, {11162, 1, 2, 100}, {11163, 1, 2, 100}, {11158, 1, 2, 300}, {11463, 1, 2, 300}, {11356, 1, 2, 300}, {11464, 1, 2, 300}, {11357, 1, 2, 500}, {11041, 1, 3, 266}, {11047, 1, 3, 266}, {11054, 1, 3, 266}, {11065, 1, 3, 266}, {11068, 1, 3, 266}, {11075, 1, 3, 266}, {11100, 1, 3, 266}, {11106, 1, 3, 266}, {11119, 1, 3, 266}, {11135, 1, 3, 268}, {11136, 1, 3, 268}, {11138, 1, 3, 268}, {11088, 1, 3, 268}, {10370, 1, 3, 266}, {10368, 1, 3, 268}, {11043, 1, 3, 50}, {11048, 1, 3, 50}, {11050, 1, 3, 50}, {11058, 1, 3, 50}, {11060, 1, 3, 50}, {11074, 1, 3, 50}, {11107, 1, 3, 50}, {11111, 1, 3, 50}, {11113, 1, 3, 50}, {11118, 1, 3, 50}, {11126, 1, 3, 50}, {11140, 1, 3, 50}, {11086, 1, 3, 50}, {11095, 1, 3, 50}, {11055, 1, 3, 50}, {10378, 1, 3, 50}, {11052, 1, 3, 15}, {11073, 1, 3, 15}, {11146, 1, 3, 15}, {11116, 1, 3, 15}, {11123, 1, 3, 15}, {11097, 1, 3, 15}, {10367, 1, 3, 15}, {10371, 1, 3, 15}, {10373, 1, 3, 15}, {10778, 1, 3, 375}, {11209, 1, 3, 375}, {10813, 1, 3, 375}, {11389, 1, 3, 375}, {11159, 1, 3, 1000}, {11159, 2, 3, 250}, {11160, 1, 3, 700}, {11160, 2, 3, 175}, {11161, 1, 3, 300}, {11161, 2, 3, 75}, {11465, 1, 3, 53}, {11466, 1, 3, 27}, {11467, 1, 3, 266}, {11468, 1, 3, 533}, {11469, 1, 3, 186}, }, 7002: { {11037, 1, 1, 100}, {11038, 1, 1, 100}, {11044, 1, 1, 100}, {11057, 1, 1, 100}, {11059, 1, 1, 100}, {11079, 1, 1, 100}, {11098, 1, 1, 100}, {11104, 1, 1, 100}, {11117, 1, 1, 100}, {11128, 1, 1, 100}, {11133, 1, 1, 100}, {11137, 1, 1, 100}, {11143, 1, 1, 100}, {11132, 1, 1, 100}, {11042, 1, 1, 60}, {11045, 1, 1, 60}, {11064, 1, 1, 60}, {11062, 1, 1, 60}, {11070, 1, 1, 60}, {11101, 1, 1, 60}, {11108, 1, 1, 60}, {11109, 1, 1, 60}, {11120, 1, 1, 60}, {11122, 1, 1, 60}, {11134, 1, 1, 60}, {11141, 1, 1, 60}, {11084, 1, 1, 60}, {11087, 1, 1, 60}, {11094, 1, 1, 60}, {10374, 1, 1, 60}, {10375, 1, 1, 60}, {11051, 1, 1, 20}, {11071, 1, 1, 20}, {11076, 1, 1, 20}, {11102, 1, 1, 20}, {11124, 1, 1, 20}, {11090, 1, 1, 20}, {11164, 1, 1, 400}, {11162, 1, 1, 200}, {11163, 1, 1, 200}, {11463, 1, 1, 100}, {11464, 1, 1, 150}, {10355, 1, 1, 150}, {12506, 1, 1, 200}, {12507, 1, 1, 300}, {12508, 1, 1, 900}, {13629, 1, 1, 350}, {13628, 1, 1, 200}, {11356, 1, 1, 100}, {11357, 1, 1, 150}, {12014, 1, 1, 250}, {12016, 1, 1, 400}, {12015, 1, 1, 410}, {11159, 2, 1, 500}, {11159, 4, 1, 500}, {11159, 6, 1, 500}, {11160, 2, 1, 400}, {11160, 4, 1, 400}, {11160, 6, 1, 400}, {11161, 2, 1, 100}, {11161, 4, 1, 100}, {11161, 6, 1, 100}, {11039, 1, 2, 100}, {11040, 1, 2, 100}, {11049, 1, 2, 100}, {11061, 1, 2, 100}, {11063, 1, 2, 100}, {11077, 1, 2, 100}, {11099, 1, 2, 100}, {11105, 1, 2, 100}, {11129, 1, 2, 100}, {11130, 1, 2, 100}, {11131, 1, 2, 100}, {11139, 1, 2, 100}, {11145, 1, 2, 100}, {11096, 1, 2, 100}, {11046, 1, 2, 60}, {11066, 1, 2, 60}, {11067, 1, 2, 60}, {11072, 1, 2, 60}, {11082, 1, 2, 60}, {11103, 1, 2, 60}, {11110, 1, 2, 60}, {11112, 1, 2, 60}, {11114, 1, 2, 60}, {11115, 1, 2, 60}, {11121, 1, 2, 60}, {11144, 1, 2, 60}, {11085, 1, 2, 60}, {11089, 1, 2, 60}, {11091, 1, 2, 60}, {10376, 1, 2, 60}, {10377, 1, 2, 60}, {11127, 1, 2, 20}, {11069, 1, 2, 20}, {11142, 1, 2, 20}, {11078, 1, 2, 20}, {11056, 1, 2, 20}, {11092, 1, 2, 20}, {11164, 1, 2, 400}, {11162, 1, 2, 200}, {11163, 1, 2, 200}, {11463, 1, 2, 250}, {11464, 1, 2, 350}, {12506, 1, 2, 150}, {12507, 1, 2, 200}, {12508, 1, 2, 350}, {13629, 1, 2, 250}, {13628, 1, 2, 200}, {10355, 1, 2, 400}, {11158, 1, 2, 100}, {11356, 1, 2, 100}, {11357, 1, 2, 100}, {12014, 1, 2, 300}, {12016, 1, 2, 450}, {12015, 1, 2, 460}, {11159, 2, 2, 500}, {11159, 4, 2, 500}, {11159, 6, 2, 500}, {11160, 2, 2, 400}, {11160, 4, 2, 400}, {11160, 6, 2, 400}, {11161, 2, 2, 100}, {11161, 4, 2, 100}, {11161, 6, 2, 100}, {11041, 1, 3, 120}, {11047, 1, 3, 120}, {11054, 1, 3, 120}, {11065, 1, 3, 120}, {11068, 1, 3, 120}, {11075, 1, 3, 120}, {11100, 1, 3, 120}, {11106, 1, 3, 120}, {11119, 1, 3, 120}, {11135, 1, 3, 120}, {11136, 1, 3, 120}, {11138, 1, 3, 120}, {11088, 1, 3, 120}, {10370, 1, 3, 120}, {10368, 1, 3, 120}, {11043, 1, 3, 65}, {11048, 1, 3, 65}, {11050, 1, 3, 65}, {11058, 1, 3, 65}, {11060, 1, 3, 65}, {11074, 1, 3, 65}, {11107, 1, 3, 65}, {11111, 1, 3, 65}, {11113, 1, 3, 65}, {11118, 1, 3, 65}, {11126, 1, 3, 65}, {11140, 1, 3, 65}, {11086, 1, 3, 65}, {11095, 1, 3, 65}, {11055, 1, 3, 65}, {10378, 1, 3, 65}, {11052, 1, 3, 15}, {11073, 1, 3, 15}, {11146, 1, 3, 15}, {11116, 1, 3, 15}, {11123, 1, 3, 15}, {11097, 1, 3, 15}, {10367, 1, 3, 15}, {10371, 1, 3, 15}, {10373, 1, 3, 15}, {10778, 3, 3, 490}, {11209, 3, 3, 490}, {10813, 3, 3, 490}, {11389, 3, 3, 490}, {12046, 3, 3, 500}, {12503, 3, 3, 500}, {11159, 2, 3, 500}, {11159, 4, 3, 500}, {11159, 6, 3, 500}, {11160, 2, 3, 400}, {11160, 4, 3, 400}, {11160, 6, 3, 400}, {11161, 2, 3, 100}, {11161, 4, 3, 100}, {11161, 6, 3, 100}, {11465, 1, 3, 53}, {11466, 1, 3, 27}, {11467, 1, 3, 266}, {11468, 1, 3, 533}, {11469, 1, 3, 186}, }, 7011: { {11037, 1, 1, 290}, {11038, 1, 1, 270}, {11044, 1, 1, 270}, {11057, 1, 1, 290}, {11059, 1, 1, 290}, {11079, 1, 1, 290}, {11098, 1, 1, 280}, {11104, 1, 1, 300}, {11117, 1, 1, 280}, {11128, 1, 1, 290}, {11133, 1, 1, 290}, {11137, 1, 1, 300}, {11143, 1, 1, 290}, {11132, 1, 1, 270}, {11042, 1, 1, 47}, {11045, 1, 1, 47}, {11064, 1, 1, 47}, {11062, 1, 1, 47}, {11070, 1, 1, 48}, {11101, 1, 1, 47}, {11108, 1, 1, 47}, {11109, 1, 1, 47}, {11120, 1, 1, 47}, {11122, 1, 1, 47}, {11134, 1, 1, 47}, {11141, 1, 1, 47}, {11084, 1, 1, 47}, {11087, 1, 1, 47}, {11094, 1, 1, 47}, {10374, 1, 1, 47}, {10375, 1, 1, 47}, {11051, 1, 1, 17}, {11071, 1, 1, 16}, {11076, 1, 1, 16}, {11102, 1, 1, 17}, {11124, 1, 1, 17}, {11090, 1, 1, 17}, {11159, 1, 1, 1200}, {11159, 2, 1, 650}, {11160, 1, 1, 800}, {11160, 2, 1, 300}, {11161, 1, 1, 100}, {11161, 2, 1, 50}, {11164, 1, 1, 100}, {11162, 1, 1, 100}, {11163, 1, 1, 100}, {11158, 1, 1, 300}, {11463, 1, 1, 300}, {11356, 1, 1, 300}, {11464, 1, 1, 300}, {11357, 1, 1, 500}, {11039, 1, 2, 300}, {11040, 1, 2, 270}, {11049, 1, 2, 300}, {11061, 1, 2, 290}, {11063, 1, 2, 290}, {11077, 1, 2, 290}, {11099, 1, 2, 280}, {11105, 1, 2, 300}, {11129, 1, 2, 250}, {11130, 1, 2, 300}, {11131, 1, 2, 280}, {11139, 1, 2, 290}, {11145, 1, 2, 260}, {11096, 1, 2, 300}, {11046, 1, 2, 47}, {11066, 1, 2, 47}, {11067, 1, 2, 47}, {11072, 1, 2, 47}, {11082, 1, 2, 47}, {11103, 1, 2, 47}, {11110, 1, 2, 47}, {11112, 1, 2, 47}, {11114, 1, 2, 47}, {11115, 1, 2, 47}, {11121, 1, 2, 47}, {11144, 1, 2, 48}, {11085, 1, 2, 47}, {11089, 1, 2, 47}, {11091, 1, 2, 47}, {10376, 1, 2, 47}, {10377, 1, 2, 47}, {11127, 1, 2, 17}, {11069, 1, 2, 17}, {11142, 1, 2, 17}, {11078, 1, 2, 17}, {11056, 1, 2, 16}, {11092, 1, 2, 16}, {11159, 1, 2, 1200}, {11159, 2, 2, 650}, {11160, 1, 2, 800}, {11160, 2, 2, 300}, {11161, 1, 2, 100}, {11161, 2, 2, 50}, {11164, 1, 2, 100}, {11162, 1, 2, 100}, {11163, 1, 2, 100}, {11158, 1, 2, 300}, {11463, 1, 2, 300}, {11356, 1, 2, 300}, {11464, 1, 2, 300}, {11357, 1, 2, 500}, {11041, 1, 3, 266}, {11047, 1, 3, 266}, {11054, 1, 3, 266}, {11065, 1, 3, 266}, {11068, 1, 3, 266}, {11075, 1, 3, 266}, {11100, 1, 3, 266}, {11106, 1, 3, 266}, {11119, 1, 3, 266}, {11135, 1, 3, 268}, {11136, 1, 3, 268}, {11138, 1, 3, 268}, {11088, 1, 3, 268}, {10370, 1, 3, 266}, {10368, 1, 3, 268}, {11043, 1, 3, 50}, {11048, 1, 3, 50}, {11050, 1, 3, 50}, {11058, 1, 3, 50}, {11060, 1, 3, 50}, {11074, 1, 3, 50}, {11107, 1, 3, 50}, {11111, 1, 3, 50}, {11113, 1, 3, 50}, {11118, 1, 3, 50}, {11126, 1, 3, 50}, {11140, 1, 3, 50}, {11086, 1, 3, 50}, {11095, 1, 3, 50}, {11055, 1, 3, 50}, {10378, 1, 3, 50}, {11052, 1, 3, 15}, {11073, 1, 3, 15}, {11146, 1, 3, 15}, {11116, 1, 3, 15}, {11123, 1, 3, 15}, {11097, 1, 3, 15}, {10367, 1, 3, 15}, {10371, 1, 3, 15}, {10373, 1, 3, 15}, {10778, 1, 3, 375}, {11209, 1, 3, 375}, {10813, 1, 3, 375}, {11389, 1, 3, 375}, {11159, 1, 3, 1000}, {11159, 2, 3, 250}, {11160, 1, 3, 700}, {11160, 2, 3, 175}, {11161, 1, 3, 300}, {11161, 2, 3, 75}, {11465, 1, 3, 53}, {11466, 1, 3, 27}, {11467, 1, 3, 266}, {11468, 1, 3, 533}, {11469, 1, 3, 186}, }, 7012: { {11037, 1, 1, 290}, {11038, 1, 1, 270}, {11044, 1, 1, 270}, {11057, 1, 1, 290}, {11059, 1, 1, 290}, {11079, 1, 1, 290}, {11098, 1, 1, 280}, {11104, 1, 1, 300}, {11117, 1, 1, 280}, {11128, 1, 1, 290}, {11133, 1, 1, 290}, {11137, 1, 1, 300}, {11143, 1, 1, 290}, {11132, 1, 1, 270}, {11042, 1, 1, 47}, {11045, 1, 1, 47}, {11064, 1, 1, 47}, {11062, 1, 1, 47}, {11070, 1, 1, 48}, {11101, 1, 1, 47}, {11108, 1, 1, 47}, {11109, 1, 1, 47}, {11120, 1, 1, 47}, {11122, 1, 1, 47}, {11134, 1, 1, 47}, {11141, 1, 1, 47}, {11084, 1, 1, 47}, {11087, 1, 1, 47}, {11094, 1, 1, 47}, {10374, 1, 1, 47}, {10375, 1, 1, 47}, {11051, 1, 1, 17}, {11071, 1, 1, 16}, {11076, 1, 1, 16}, {11102, 1, 1, 17}, {11124, 1, 1, 17}, {11090, 1, 1, 17}, {11159, 1, 1, 1200}, {11159, 2, 1, 650}, {11160, 1, 1, 800}, {11160, 2, 1, 300}, {11161, 1, 1, 100}, {11161, 2, 1, 50}, {11164, 1, 1, 100}, {11162, 1, 1, 100}, {11163, 1, 1, 100}, {11158, 1, 1, 300}, {11463, 1, 1, 300}, {11356, 1, 1, 300}, {11464, 1, 1, 300}, {11357, 1, 1, 500}, {11039, 1, 2, 300}, {11040, 1, 2, 270}, {11049, 1, 2, 300}, {11061, 1, 2, 290}, {11063, 1, 2, 290}, {11077, 1, 2, 290}, {11099, 1, 2, 280}, {11105, 1, 2, 300}, {11129, 1, 2, 250}, {11130, 1, 2, 300}, {11131, 1, 2, 280}, {11139, 1, 2, 290}, {11145, 1, 2, 260}, {11096, 1, 2, 300}, {11046, 1, 2, 47}, {11066, 1, 2, 47}, {11067, 1, 2, 47}, {11072, 1, 2, 47}, {11082, 1, 2, 47}, {11103, 1, 2, 47}, {11110, 1, 2, 47}, {11112, 1, 2, 47}, {11114, 1, 2, 47}, {11115, 1, 2, 47}, {11121, 1, 2, 47}, {11144, 1, 2, 48}, {11085, 1, 2, 47}, {11089, 1, 2, 47}, {11091, 1, 2, 47}, {10376, 1, 2, 47}, {10377, 1, 2, 47}, {11127, 1, 2, 17}, {11069, 1, 2, 17}, {11142, 1, 2, 17}, {11078, 1, 2, 17}, {11056, 1, 2, 16}, {11092, 1, 2, 16}, {11159, 1, 2, 1200}, {11159, 2, 2, 650}, {11160, 1, 2, 800}, {11160, 2, 2, 300}, {11161, 1, 2, 100}, {11161, 2, 2, 50}, {11164, 1, 2, 100}, {11162, 1, 2, 100}, {11163, 1, 2, 100}, {11158, 1, 2, 300}, {11463, 1, 2, 300}, {11356, 1, 2, 300}, {11464, 1, 2, 300}, {11357, 1, 2, 500}, {11041, 1, 3, 266}, {11047, 1, 3, 266}, {11054, 1, 3, 266}, {11065, 1, 3, 266}, {11068, 1, 3, 266}, {11075, 1, 3, 266}, {11100, 1, 3, 266}, {11106, 1, 3, 266}, {11119, 1, 3, 266}, {11135, 1, 3, 268}, {11136, 1, 3, 268}, {11138, 1, 3, 268}, {11088, 1, 3, 268}, {10370, 1, 3, 266}, {10368, 1, 3, 268}, {11043, 1, 3, 50}, {11048, 1, 3, 50}, {11050, 1, 3, 50}, {11058, 1, 3, 50}, {11060, 1, 3, 50}, {11074, 1, 3, 50}, {11107, 1, 3, 50}, {11111, 1, 3, 50}, {11113, 1, 3, 50}, {11118, 1, 3, 50}, {11126, 1, 3, 50}, {11140, 1, 3, 50}, {11086, 1, 3, 50}, {11095, 1, 3, 50}, {11055, 1, 3, 50}, {10378, 1, 3, 50}, {11052, 1, 3, 15}, {11073, 1, 3, 15}, {11146, 1, 3, 15}, {11116, 1, 3, 15}, {11123, 1, 3, 15}, {11097, 1, 3, 15}, {10367, 1, 3, 15}, {10371, 1, 3, 15}, {10373, 1, 3, 15}, {10778, 1, 3, 375}, {11209, 1, 3, 375}, {10813, 1, 3, 375}, {11389, 1, 3, 375}, {11159, 1, 3, 1000}, {11159, 2, 3, 250}, {11160, 1, 3, 700}, {11160, 2, 3, 175}, {11161, 1, 3, 300}, {11161, 2, 3, 75}, {11465, 1, 3, 53}, {11466, 1, 3, 27}, {11467, 1, 3, 266}, {11468, 1, 3, 533}, {11469, 1, 3, 186}, }, } type PaperMissionTimetable struct { Start time.Time End time.Time } type PaperMissionData struct { Unk0 uint8 Unk1 uint8 Unk2 int16 Reward1ID uint16 Reward1Quantity uint8 Reward2ID uint16 Reward2Quantity uint8 } type PaperMission struct { Timetables []PaperMissionTimetable Data []PaperMissionData } type PaperData struct { Unk0 uint16 Unk1 int16 Unk2 int16 Unk3 int16 Unk4 int16 Unk5 int16 Unk6 int16 } type PaperGift struct { Unk0 uint16 Unk1 uint8 Unk2 uint8 Unk3 uint16 } func handleMsgMhfGetPaperData(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfGetPaperData) var data []*byteframe.ByteFrame var paperData []PaperData var paperMissions PaperMission var paperGift []PaperGift switch pkt.Unk2 { case 0: paperMissions = PaperMission{ []PaperMissionTimetable{{TimeMidnight(), TimeMidnight().Add(24 * time.Hour)}}, []PaperMissionData{}, } case 5: paperData = []PaperData{ // getTowerQuestTowerLevel {1001, 1, 0, 0, 0, 0, 0}, {1001, 2, 0, 0, 0, 0, 0}, // iniTQT {1003, 1, 100, 100, 200, 100, 0}, {1003, 2, 150, 100, 240, 100, 0}, {1004, 10, 9999, 40, 0, 0, 0}, {1005, 10, 500, 0, 0, 0, 0}, // getPaperDataSetFromProp {1007, 1, 0, 0, 0, 0, 0}, {1008, 200, 400, 3000, 400, 3000, 0}, // getPaperDataSetParam1 / Dure Goal {1010, 1, 4000, 0, 0, 0, 0}, {1010, 2, 4000, 0, 0, 0, 0}, // update_disp_flag / getPaperDataSetParam1 {1011, 1, 6000, 15000, 20000, 25000, 30000}, {1011, 2, 6000, 15000, 20000, 25000, 30000}, {1012, 1, 8000, 17500, 22500, 27500, 31000}, {1012, 2, 8000, 17500, 22500, 27500, 31000}, // setServerZako {1015, 1, 16, 16, 16, 0, 0}, {1015, 2, 16, 16, 16, 0, 0}, // createTowerFloorRandomNumberArray {1101, 1, 2016, 500, 0, 0, 0}, {1101, 2, 2016, 500, 0, 0, 0}, // HRP/SRP/GRP/GSRP/TRP reward {1103, 1, 0, 0, 3000, 0, 3000}, {1103, 2, 0, 0, 3000, 0, 3000}, // getTowerNextVenomLevel {1104, 1, 10, 9999, 40, 0, 0}, {1104, 2, 10, 9999, 40, 0, 0}, {1105, 1, 10, 500, 0, 0, 0}, {1105, 2, 10, 500, 0, 0, 0}, // setServerBoss {2001, 1, mhfmon.Gravios, 58, 0, 6, 700}, {2001, 1, mhfmon.Gypceros, 58, 0, 3, 200}, {2001, 1, mhfmon.Basarios, 58, 0, 7, 250}, {2001, 1, mhfmon.Velocidrome, 58, 0, 1, 100}, {2001, 1, mhfmon.Rajang, 58, 0, 8, 1000}, {2001, 1, mhfmon.ShogunCeanataur, 58, 0, 9, 500}, {2001, 1, mhfmon.Bulldrome, 58, 0, 2, 150}, {2001, 1, mhfmon.Hypnocatrice, 58, 0, 4, 200}, {2001, 1, mhfmon.Lavasioth, 58, 0, 5, 500}, {2001, 1, mhfmon.Tigrex, 58, 0, 10, 800}, {2001, 1, mhfmon.Espinas, 58, 0, 11, 900}, {2001, 1, mhfmon.Pariapuria, 58, 0, 12, 600}, {2001, 2, mhfmon.Gravios, 60, 0, 6, 700}, {2001, 2, mhfmon.Gypceros, 60, 0, 3, 200}, {2001, 2, mhfmon.Basarios, 60, 0, 7, 350}, {2001, 2, mhfmon.Velocidrome, 60, 0, 1, 100}, {2001, 2, mhfmon.PurpleGypceros, 60, 0, 13, 200}, {2001, 2, mhfmon.YianGaruga, 60, 0, 15, 600}, {2001, 2, mhfmon.Rajang, 60, 0, 8, 1000}, {2001, 2, mhfmon.ShogunCeanataur, 60, 0, 2, 500}, {2001, 2, mhfmon.Bulldrome, 60, 0, 9, 150}, {2001, 2, mhfmon.Hypnocatrice, 60, 0, 4, 200}, {2001, 2, mhfmon.Lavasioth, 60, 0, 5, 500}, {2001, 2, mhfmon.Tigrex, 60, 0, 10, 800}, {2001, 2, mhfmon.Espinas, 60, 0, 11, 900}, {2001, 2, mhfmon.BurningEspinas, 60, 0, 14, 900}, {2001, 2, mhfmon.Pariapuria, 60, 0, 12, 600}, {2001, 2, mhfmon.Dyuragaua, 60, 0, 16, 1000}, } case 6: paperData = []PaperData{ // updateClearTowerFloor {1002, 100, 0, 0, 0, 0, 0}, // give_gem_func {1006, 1, 10000, 10000, 0, 0, 0}, {1006, 2, 10000, 20000, 0, 0, 0}, {1009, 20, 0, 0, 0, 0, 0}, // ttcStageInitDRP {1013, 1, 1, 1, 100, 200, 300}, {1013, 1, 1, 2, 100, 200, 300}, {1013, 1, 2, 1, 300, 100, 200}, {1013, 1, 2, 2, 300, 100, 200}, {1013, 1, 3, 1, 200, 300, 100}, {1013, 1, 3, 2, 200, 300, 100}, {1013, 2, 1, 1, 300, 100, 200}, {1013, 2, 1, 2, 300, 100, 200}, {1013, 2, 2, 1, 200, 300, 100}, {1013, 2, 2, 2, 200, 300, 100}, {1013, 2, 3, 1, 100, 200, 300}, {1013, 2, 3, 2, 100, 200, 300}, {1013, 3, 1, 1, 200, 300, 100}, {1013, 3, 1, 2, 200, 300, 100}, {1013, 3, 2, 1, 100, 200, 300}, {1013, 3, 2, 2, 100, 200, 300}, {1013, 3, 3, 1, 300, 100, 200}, {1013, 3, 3, 2, 300, 100, 200}, {1016, 1, 1, 80, 0, 0, 0}, {1016, 1, 2, 80, 0, 0, 0}, {1016, 1, 3, 80, 0, 0, 0}, {1016, 2, 1, 80, 0, 0, 0}, {1016, 2, 2, 80, 0, 0, 0}, {1016, 2, 3, 80, 0, 0, 0}, {1201, 1, 60, 50, 0, 0, 0}, {1201, 2, 60, 50, 0, 0, 0}, // Gimmick Damage {ID, Block, StartFloor, EndFloor, Multiplier*100, Unk, Unk} {1202, 1, 0, 5, 50, 0, 0}, {1202, 1, 6, 20, 60, 0, 0}, {1202, 1, 21, 40, 70, 0, 0}, {1202, 1, 41, 120, 80, 0, 0}, {1202, 1, 121, 160, 90, 0, 0}, {1202, 1, 161, 250, 100, 0, 0}, {1202, 1, 251, 500, 100, 0, 0}, {1202, 1, 501, 9999, 100, 0, 0}, {1202, 2, 0, 100, 100, 0, 0}, {1202, 2, 101, 200, 100, 0, 0}, {1202, 2, 201, 500, 150, 0, 0}, {1202, 2, 501, 9999, 150, 0, 0}, // Mon Damage {ID, Block, StartFloor, EndFloor, Multiplier*100, Unk, Unk} {1203, 1, 0, 5, 10, 0, 0}, {1203, 1, 6, 10, 20, 0, 0}, {1203, 1, 11, 30, 30, 0, 0}, {1203, 1, 31, 60, 40, 0, 0}, {1203, 1, 61, 120, 50, 0, 0}, {1203, 1, 121, 130, 60, 0, 0}, {1203, 1, 131, 140, 70, 0, 0}, {1203, 1, 141, 150, 80, 0, 0}, {1203, 1, 151, 160, 85, 0, 0}, {1203, 1, 161, 200, 100, 0, 0}, {1203, 1, 201, 500, 100, 0, 0}, {1203, 1, 501, 9999, 100, 0, 0}, {1203, 2, 0, 120, 70, 0, 0}, {1203, 2, 121, 500, 120, 0, 0}, {1203, 2, 501, 9999, 120, 0, 0}, // Mon HP {ID, Block, StartFloor, EndFloor, Multiplier*100, Unk, Unk} {1204, 1, 0, 5, 15, 0, 0}, {1204, 1, 6, 10, 20, 0, 0}, {1204, 1, 11, 15, 25, 0, 0}, {1204, 1, 16, 20, 27, 0, 0}, {1204, 1, 21, 25, 30, 0, 0}, {1204, 1, 26, 30, 32, 0, 0}, {1204, 1, 31, 40, 35, 0, 0}, {1204, 1, 41, 50, 37, 0, 0}, {1204, 1, 51, 60, 40, 0, 0}, {1204, 1, 61, 70, 43, 0, 0}, {1204, 1, 71, 80, 45, 0, 0}, {1204, 1, 81, 90, 47, 0, 0}, {1204, 1, 91, 100, 50, 0, 0}, {1204, 1, 101, 110, 60, 0, 0}, {1204, 1, 111, 120, 70, 0, 0}, {1204, 1, 121, 130, 75, 0, 0}, {1204, 1, 131, 140, 82, 0, 0}, {1204, 1, 141, 160, 85, 0, 0}, {1204, 1, 161, 200, 100, 0, 0}, {1204, 1, 201, 500, 100, 0, 0}, {1204, 1, 501, 9999, 100, 0, 0}, {1204, 2, 0, 120, 70, 0, 0}, {1204, 2, 121, 500, 120, 0, 0}, {1204, 2, 501, 9999, 120, 0, 0}, // Supply Items {ID, Block, Unk, ItemID, Quantity, Unk, Unk} {4001, 1, 0, 0, 0, 0, 0}, {4001, 2, 0, 10667, 5, 0, 1}, {4001, 2, 0, 10667, 5, 0, 1}, {4001, 2, 0, 10667, 5, 0, 1}, {4001, 2, 0, 10667, 5, 0, 1}, {4001, 2, 0, 10668, 2, 0, 1}, {4001, 2, 0, 10668, 2, 0, 1}, {4001, 2, 0, 10668, 2, 0, 1}, {4001, 2, 0, 10668, 2, 0, 1}, {4001, 2, 0, 10669, 1, 0, 1}, {4001, 2, 0, 10669, 1, 0, 1}, {4001, 2, 0, 10669, 1, 0, 1}, {4001, 2, 0, 10669, 1, 0, 1}, {4001, 2, 0, 10671, 3, 0, 1}, {4001, 2, 0, 10671, 3, 0, 1}, {4001, 2, 0, 10671, 3, 0, 1}, {4001, 2, 0, 10671, 3, 0, 1}, {4001, 2, 0, 10384, 1, 0, 1}, {4001, 2, 0, 10384, 1, 0, 1}, {4001, 2, 0, 10670, 2, 0, 1}, {4001, 2, 0, 10670, 2, 0, 1}, {4001, 2, 0, 10682, 2, 0, 1}, {4001, 2, 0, 10683, 2, 0, 1}, {4001, 2, 0, 10678, 1, 0, 1}, {4001, 2, 0, 10678, 1, 0, 1}, // Item Rewards {ID, Block, Unk, ItemID, Quantity?, Chance*100, Unk} {4005, 1, 0, 11159, 1, 5000, 1}, {4005, 1, 0, 11160, 1, 3350, 1}, {4005, 1, 0, 11161, 1, 1500, 1}, {4005, 1, 0, 11162, 1, 100, 1}, {4005, 1, 0, 11163, 1, 50, 1}, {4005, 2, 0, 11159, 2, 1800, 1}, {4005, 2, 0, 11160, 2, 1200, 1}, {4005, 2, 0, 11161, 2, 500, 1}, {4005, 2, 0, 11162, 1, 50, 1}, {4005, 2, 0, 11037, 1, 150, 1}, {4005, 2, 0, 11038, 1, 150, 1}, {4005, 2, 0, 11044, 1, 150, 1}, {4005, 2, 0, 11057, 1, 150, 1}, {4005, 2, 0, 11059, 1, 150, 1}, {4005, 2, 0, 11079, 1, 150, 1}, {4005, 2, 0, 11098, 1, 150, 1}, {4005, 2, 0, 11104, 1, 150, 1}, {4005, 2, 0, 11117, 1, 150, 1}, {4005, 2, 0, 11128, 1, 150, 1}, {4005, 2, 0, 11133, 1, 150, 1}, {4005, 2, 0, 11137, 1, 150, 1}, {4005, 2, 0, 11143, 1, 150, 1}, {4005, 2, 0, 11132, 1, 150, 1}, {4005, 2, 0, 11039, 1, 150, 1}, {4005, 2, 0, 11040, 1, 150, 1}, {4005, 2, 0, 11049, 1, 150, 1}, {4005, 2, 0, 11061, 1, 150, 1}, {4005, 2, 0, 11063, 1, 150, 1}, {4005, 2, 0, 11077, 1, 150, 1}, {4005, 2, 0, 11099, 1, 150, 1}, {4005, 2, 0, 11105, 1, 150, 1}, {4005, 2, 0, 11129, 1, 150, 1}, {4005, 2, 0, 11130, 1, 150, 1}, {4005, 2, 0, 11131, 1, 150, 1}, {4005, 2, 0, 11139, 1, 150, 1}, {4005, 2, 0, 11145, 1, 150, 1}, {4005, 2, 0, 11096, 1, 150, 1}, {4005, 2, 0, 11041, 1, 150, 1}, {4005, 2, 0, 11047, 1, 150, 1}, {4005, 2, 0, 11054, 1, 150, 1}, {4005, 2, 0, 11065, 1, 150, 1}, {4005, 2, 0, 11068, 1, 150, 1}, {4005, 2, 0, 11075, 1, 150, 1}, {4005, 2, 0, 11100, 1, 150, 1}, {4005, 2, 0, 11106, 1, 150, 1}, {4005, 2, 0, 11119, 1, 150, 1}, {4005, 2, 0, 11135, 1, 150, 1}, {4005, 2, 0, 11136, 1, 150, 1}, {4005, 2, 0, 11138, 1, 150, 1}, {4005, 2, 0, 11088, 1, 150, 1}, {4005, 2, 0, 10370, 1, 150, 1}, {4005, 2, 0, 10368, 1, 150, 1}, {4006, 1, 0, 11159, 1, 5000, 1}, {4006, 1, 0, 11160, 1, 3350, 1}, {4006, 1, 0, 11161, 1, 1500, 1}, {4006, 1, 0, 11162, 1, 100, 1}, {4006, 1, 0, 11163, 1, 50, 1}, {4006, 2, 0, 11159, 2, 1800, 1}, {4006, 2, 0, 11160, 2, 1200, 1}, {4006, 2, 0, 11161, 2, 500, 1}, {4006, 2, 0, 11162, 1, 50, 1}, {4006, 2, 0, 11037, 1, 150, 1}, {4006, 2, 0, 11038, 1, 150, 1}, {4006, 2, 0, 11044, 1, 150, 1}, {4006, 2, 0, 11057, 1, 150, 1}, {4006, 2, 0, 11059, 1, 150, 1}, {4006, 2, 0, 11079, 1, 150, 1}, {4006, 2, 0, 11098, 1, 150, 1}, {4006, 2, 0, 11104, 1, 150, 1}, {4006, 2, 0, 11117, 1, 150, 1}, {4006, 2, 0, 11128, 1, 150, 1}, {4006, 2, 0, 11133, 1, 150, 1}, {4006, 2, 0, 11137, 1, 150, 1}, {4006, 2, 0, 11143, 1, 150, 1}, {4006, 2, 0, 11132, 1, 150, 1}, {4006, 2, 0, 11039, 1, 150, 1}, {4006, 2, 0, 11040, 1, 150, 1}, {4006, 2, 0, 11049, 1, 150, 1}, {4006, 2, 0, 11061, 1, 150, 1}, {4006, 2, 0, 11063, 1, 150, 1}, {4006, 2, 0, 11077, 1, 150, 1}, {4006, 2, 0, 11099, 1, 150, 1}, {4006, 2, 0, 11105, 1, 150, 1}, {4006, 2, 0, 11129, 1, 150, 1}, {4006, 2, 0, 11130, 1, 150, 1}, {4006, 2, 0, 11131, 1, 150, 1}, {4006, 2, 0, 11139, 1, 150, 1}, {4006, 2, 0, 11145, 1, 150, 1}, {4006, 2, 0, 11096, 1, 150, 1}, {4006, 2, 0, 11041, 1, 150, 1}, {4006, 2, 0, 11047, 1, 150, 1}, {4006, 2, 0, 11054, 1, 150, 1}, {4006, 2, 0, 11065, 1, 150, 1}, {4006, 2, 0, 11068, 1, 150, 1}, {4006, 2, 0, 11075, 1, 150, 1}, {4006, 2, 0, 11100, 1, 150, 1}, {4006, 2, 0, 11106, 1, 150, 1}, {4006, 2, 0, 11119, 1, 150, 1}, {4006, 2, 0, 11135, 1, 150, 1}, {4006, 2, 0, 11136, 1, 150, 1}, {4006, 2, 0, 11138, 1, 150, 1}, {4006, 2, 0, 11088, 1, 150, 1}, {4006, 2, 0, 10370, 1, 150, 1}, {4006, 2, 0, 10368, 1, 150, 1}, {4007, 1, 0, 11058, 1, 70, 1}, {4007, 1, 0, 11060, 1, 70, 1}, {4007, 1, 0, 11062, 1, 70, 1}, {4007, 1, 0, 11064, 1, 70, 1}, {4007, 1, 0, 11066, 1, 70, 1}, {4007, 1, 0, 11118, 1, 70, 1}, {4007, 1, 0, 11120, 1, 70, 1}, {4007, 1, 0, 11110, 1, 70, 1}, {4007, 1, 0, 11112, 1, 70, 1}, {4007, 1, 0, 11114, 1, 70, 1}, {4007, 1, 0, 11042, 1, 70, 1}, {4007, 1, 0, 11043, 1, 70, 1}, {4007, 1, 0, 11074, 1, 70, 1}, {4007, 1, 0, 11140, 1, 70, 1}, {4007, 1, 0, 11067, 1, 70, 1}, {4007, 1, 0, 11048, 1, 70, 1}, {4007, 1, 0, 11046, 1, 70, 1}, {4007, 1, 0, 11103, 1, 70, 1}, {4007, 1, 0, 11107, 1, 70, 1}, {4007, 1, 0, 11108, 1, 70, 1}, {4007, 1, 0, 11121, 1, 70, 1}, {4007, 1, 0, 11134, 1, 70, 1}, {4007, 1, 0, 11084, 1, 70, 1}, {4007, 1, 0, 11085, 1, 70, 1}, {4007, 1, 0, 11086, 1, 70, 1}, {4007, 1, 0, 11087, 1, 70, 1}, {4007, 1, 0, 11094, 1, 70, 1}, {4007, 1, 0, 11095, 1, 70, 1}, {4007, 1, 0, 10374, 1, 70, 1}, {4007, 1, 0, 10375, 1, 70, 1}, {4007, 1, 0, 10376, 1, 70, 1}, {4007, 1, 0, 10377, 1, 70, 1}, {4007, 1, 0, 10378, 1, 70, 1}, {4007, 1, 0, 11069, 1, 45, 1}, {4007, 1, 0, 11071, 1, 45, 1}, {4007, 1, 0, 11073, 1, 45, 1}, {4007, 1, 0, 11076, 1, 45, 1}, {4007, 1, 0, 11078, 1, 45, 1}, {4007, 1, 0, 11116, 1, 45, 1}, {4007, 1, 0, 11123, 1, 45, 1}, {4007, 1, 0, 11127, 1, 45, 1}, {4007, 1, 0, 11142, 1, 45, 1}, {4007, 1, 0, 11056, 1, 45, 1}, {4007, 1, 0, 11090, 1, 45, 1}, {4007, 1, 0, 11097, 1, 45, 1}, {4007, 1, 0, 10367, 1, 45, 1}, {4007, 1, 0, 10371, 1, 45, 1}, {4007, 1, 0, 10373, 1, 45, 1}, {4007, 1, 0, 11080, 1, 15, 1}, {4007, 1, 0, 11081, 1, 15, 1}, {4007, 1, 0, 11083, 1, 15, 1}, {4007, 1, 0, 11125, 1, 15, 1}, {4007, 1, 0, 11093, 1, 14, 1}, {4007, 1, 0, 11053, 1, 10, 1}, {4007, 1, 0, 11147, 1, 10, 1}, {4007, 1, 0, 10372, 1, 5, 1}, {4007, 1, 0, 10369, 1, 1, 1}, {4007, 1, 0, 11163, 1, 150, 1}, {4007, 1, 0, 11465, 1, 50, 1}, {4007, 1, 0, 11466, 1, 25, 1}, {4007, 1, 0, 11467, 1, 200, 1}, {4007, 1, 0, 11468, 1, 400, 1}, {4007, 1, 0, 11469, 1, 150, 1}, {4007, 1, 0, 11037, 1, 92, 1}, {4007, 1, 0, 11038, 1, 92, 1}, {4007, 1, 0, 11044, 1, 92, 1}, {4007, 1, 0, 11057, 1, 92, 1}, {4007, 1, 0, 11059, 1, 92, 1}, {4007, 1, 0, 11079, 1, 92, 1}, {4007, 1, 0, 11098, 1, 92, 1}, {4007, 1, 0, 11104, 1, 92, 1}, {4007, 1, 0, 11117, 1, 92, 1}, {4007, 1, 0, 11133, 1, 92, 1}, {4007, 1, 0, 11137, 1, 92, 1}, {4007, 1, 0, 11143, 1, 92, 1}, {4007, 1, 0, 11132, 1, 92, 1}, {4007, 1, 0, 11039, 1, 92, 1}, {4007, 1, 0, 11040, 1, 92, 1}, {4007, 1, 0, 11049, 1, 92, 1}, {4007, 1, 0, 11061, 1, 92, 1}, {4007, 1, 0, 11063, 1, 92, 1}, {4007, 1, 0, 11077, 1, 92, 1}, {4007, 1, 0, 11099, 1, 92, 1}, {4007, 1, 0, 11105, 1, 92, 1}, {4007, 1, 0, 11129, 1, 92, 1}, {4007, 1, 0, 11130, 1, 92, 1}, {4007, 1, 0, 11131, 1, 92, 1}, {4007, 1, 0, 11139, 1, 92, 1}, {4007, 1, 0, 11145, 1, 91, 1}, {4007, 1, 0, 11096, 1, 91, 1}, {4007, 1, 0, 11041, 1, 91, 1}, {4007, 1, 0, 11047, 1, 91, 1}, {4007, 1, 0, 11054, 1, 91, 1}, {4007, 1, 0, 11065, 1, 91, 1}, {4007, 1, 0, 11068, 1, 91, 1}, {4007, 1, 0, 11075, 1, 91, 1}, {4007, 1, 0, 11100, 1, 91, 1}, {4007, 1, 0, 11106, 1, 91, 1}, {4007, 1, 0, 11119, 1, 91, 1}, {4007, 1, 0, 11135, 1, 91, 1}, {4007, 1, 0, 11136, 1, 91, 1}, {4007, 1, 0, 11138, 1, 91, 1}, {4007, 1, 0, 11088, 1, 91, 1}, {4007, 1, 0, 10370, 1, 91, 1}, {4007, 1, 0, 10368, 1, 91, 1}, {4007, 1, 0, 11045, 1, 91, 1}, {4007, 1, 0, 11070, 1, 91, 1}, {4007, 1, 0, 11101, 1, 91, 1}, {4007, 1, 0, 11109, 1, 91, 1}, {4007, 1, 0, 11122, 1, 91, 1}, {4007, 1, 0, 11141, 1, 91, 1}, {4007, 1, 0, 11051, 1, 91, 1}, {4007, 1, 0, 11102, 1, 91, 1}, {4007, 1, 0, 11124, 1, 91, 1}, {4007, 1, 0, 11072, 1, 91, 1}, {4007, 1, 0, 11082, 1, 91, 1}, {4007, 1, 0, 11115, 1, 91, 1}, {4007, 1, 0, 11144, 1, 91, 1}, {4007, 1, 0, 11089, 1, 91, 1}, {4007, 1, 0, 11091, 1, 91, 1}, {4007, 1, 0, 11092, 1, 91, 1}, {4007, 1, 0, 11050, 1, 91, 1}, {4007, 1, 0, 11111, 1, 91, 1}, {4007, 1, 0, 11113, 1, 91, 1}, {4007, 1, 0, 11126, 1, 91, 1}, {4007, 1, 0, 11055, 1, 91, 1}, {4007, 1, 0, 11052, 1, 91, 1}, {4007, 1, 0, 11146, 1, 91, 1}, {4007, 2, 0, 11058, 1, 90, 1}, {4007, 2, 0, 11060, 1, 90, 1}, {4007, 2, 0, 11062, 1, 90, 1}, {4007, 2, 0, 11064, 1, 90, 1}, {4007, 2, 0, 11066, 1, 90, 1}, {4007, 2, 0, 11118, 1, 90, 1}, {4007, 2, 0, 11120, 1, 90, 1}, {4007, 2, 0, 11110, 1, 90, 1}, {4007, 2, 0, 11112, 1, 90, 1}, {4007, 2, 0, 11114, 1, 90, 1}, {4007, 2, 0, 11042, 1, 90, 1}, {4007, 2, 0, 11043, 1, 90, 1}, {4007, 2, 0, 11074, 1, 90, 1}, {4007, 2, 0, 11140, 1, 90, 1}, {4007, 2, 0, 11067, 1, 90, 1}, {4007, 2, 0, 11048, 1, 90, 1}, {4007, 2, 0, 11046, 1, 90, 1}, {4007, 2, 0, 11103, 1, 90, 1}, {4007, 2, 0, 11107, 1, 90, 1}, {4007, 2, 0, 11108, 1, 90, 1}, {4007, 2, 0, 11121, 1, 90, 1}, {4007, 2, 0, 11134, 1, 90, 1}, {4007, 2, 0, 11084, 1, 90, 1}, {4007, 2, 0, 11085, 1, 90, 1}, {4007, 2, 0, 11086, 1, 90, 1}, {4007, 2, 0, 11087, 1, 90, 1}, {4007, 2, 0, 11094, 1, 90, 1}, {4007, 2, 0, 11095, 1, 90, 1}, {4007, 2, 0, 10374, 1, 90, 1}, {4007, 2, 0, 10375, 1, 90, 1}, {4007, 2, 0, 10376, 1, 90, 1}, {4007, 2, 0, 10377, 1, 90, 1}, {4007, 2, 0, 10378, 1, 90, 1}, {4007, 2, 0, 11069, 1, 80, 1}, {4007, 2, 0, 11071, 1, 80, 1}, {4007, 2, 0, 11073, 1, 80, 1}, {4007, 2, 0, 11076, 1, 80, 1}, {4007, 2, 0, 11078, 1, 80, 1}, {4007, 2, 0, 11116, 1, 80, 1}, {4007, 2, 0, 11123, 1, 80, 1}, {4007, 2, 0, 11127, 1, 80, 1}, {4007, 2, 0, 11142, 1, 80, 1}, {4007, 2, 0, 11056, 1, 80, 1}, {4007, 2, 0, 11090, 1, 80, 1}, {4007, 2, 0, 11097, 1, 80, 1}, {4007, 2, 0, 10367, 1, 80, 1}, {4007, 2, 0, 10371, 1, 80, 1}, {4007, 2, 0, 10373, 1, 80, 1}, {4007, 2, 0, 11080, 1, 22, 1}, {4007, 2, 0, 11081, 1, 22, 1}, {4007, 2, 0, 11083, 1, 22, 1}, {4007, 2, 0, 11125, 1, 22, 1}, {4007, 2, 0, 11093, 1, 22, 1}, {4007, 2, 0, 11053, 1, 15, 1}, {4007, 2, 0, 11147, 1, 15, 1}, {4007, 2, 0, 10372, 1, 8, 1}, {4007, 2, 0, 10369, 1, 2, 1}, {4007, 2, 0, 11159, 3, 1220, 1}, {4007, 2, 0, 11160, 3, 650, 1}, {4007, 2, 0, 11161, 3, 160, 1}, {4007, 2, 0, 11661, 1, 800, 1}, {4007, 2, 0, 11662, 1, 800, 1}, {4007, 2, 0, 11163, 1, 500, 1}, {4007, 2, 0, 11162, 1, 550, 1}, {4007, 2, 0, 11465, 1, 50, 1}, {4007, 2, 0, 11466, 1, 25, 1}, {4007, 2, 0, 11467, 1, 250, 1}, {4007, 2, 0, 11468, 1, 500, 1}, {4007, 2, 0, 11469, 1, 175, 1}, // Probably treasure chest rewards {4202, 1, 0, 11163, 1, 6000, 1}, {4202, 1, 0, 11465, 1, 200, 1}, {4202, 1, 0, 11466, 1, 100, 1}, {4202, 1, 0, 11467, 1, 1000, 1}, {4202, 1, 0, 11468, 1, 2000, 1}, {4202, 1, 0, 11469, 1, 700, 1}, {4202, 2, 0, 11661, 1, 800, 1}, {4202, 2, 0, 11662, 1, 800, 1}, {4202, 2, 0, 11163, 1, 400, 1}, {4202, 2, 0, 11465, 1, 400, 1}, {4202, 2, 0, 11466, 1, 200, 1}, {4202, 2, 0, 11467, 1, 2000, 1}, {4202, 2, 0, 11468, 1, 4000, 1}, {4202, 2, 0, 11469, 1, 1400, 1}, } default: if pkt.Unk2 < 1000 { s.logger.Info("PaperData request for unknown type", zap.Uint32("Unk2", pkt.Unk2)) } } if pkt.Unk2 > 1000 { _, ok := paperGiftData[pkt.Unk2] if ok { paperGift = paperGiftData[pkt.Unk2] } else { s.logger.Info("PaperGift request for unknown type", zap.Uint32("Unk2", pkt.Unk2)) } for _, gift := range paperGift { bf := byteframe.NewByteFrame() bf.WriteUint16(gift.Unk0) bf.WriteUint8(gift.Unk1) bf.WriteUint8(gift.Unk2) bf.WriteUint16(gift.Unk3) data = append(data, bf) } doAckEarthSucceed(s, pkt.AckHandle, data) } else if pkt.Unk2 == 0 { bf := byteframe.NewByteFrame() bf.WriteUint16(uint16(len(paperMissions.Timetables))) bf.WriteUint16(uint16(len(paperMissions.Data))) for _, timetable := range paperMissions.Timetables { bf.WriteUint32(uint32(timetable.Start.Unix())) bf.WriteUint32(uint32(timetable.End.Unix())) } for _, mdata := range paperMissions.Data { bf.WriteUint8(mdata.Unk0) bf.WriteUint8(mdata.Unk1) bf.WriteInt16(mdata.Unk2) bf.WriteUint16(mdata.Reward1ID) bf.WriteUint8(mdata.Reward1Quantity) bf.WriteUint16(mdata.Reward2ID) bf.WriteUint8(mdata.Reward2Quantity) } doAckBufSucceed(s, pkt.AckHandle, bf.Data()) } else { for _, pdata := range paperData { bf := byteframe.NewByteFrame() bf.WriteUint16(pdata.Unk0) bf.WriteInt16(pdata.Unk1) bf.WriteInt16(pdata.Unk2) bf.WriteInt16(pdata.Unk3) bf.WriteInt16(pdata.Unk4) bf.WriteInt16(pdata.Unk5) bf.WriteInt16(pdata.Unk6) data = append(data, bf) } doAckEarthSucceed(s, pkt.AckHandle, data) } } func handleMsgSysAuthData(s *Session, p mhfpacket.MHFPacket) {}