mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-21 23:22:34 +01:00
The handleMsgMhfGetPaperData function was 565 lines, but most of it was inline data table literals. Extract tower config (case 5) and tower scaling (case 6) slices into package-level vars in handlers_data_paper_tables.go, reducing the handler to 73 lines while co-locating all paper data tables in one file.
127 lines
3.0 KiB
Go
127 lines
3.0 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"time"
|
|
|
|
"erupe-ce/common/byteframe"
|
|
"erupe-ce/network/mhfpacket"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// PaperMissionTimetable represents a daily mission schedule entry.
|
|
type PaperMissionTimetable struct {
|
|
Start time.Time
|
|
End time.Time
|
|
}
|
|
|
|
// PaperMissionData represents daily mission details.
|
|
type PaperMissionData struct {
|
|
Unk0 uint8
|
|
Unk1 uint8
|
|
Unk2 int16
|
|
Reward1ID uint16
|
|
Reward1Quantity uint8
|
|
Reward2ID uint16
|
|
Reward2Quantity uint8
|
|
}
|
|
|
|
// PaperMission represents a daily mission wrapper.
|
|
type PaperMission struct {
|
|
Timetables []PaperMissionTimetable
|
|
Data []PaperMissionData
|
|
}
|
|
|
|
// PaperData represents complete daily paper data.
|
|
type PaperData struct {
|
|
Unk0 uint16
|
|
Unk1 int16
|
|
Unk2 int16
|
|
Unk3 int16
|
|
Unk4 int16
|
|
Unk5 int16
|
|
Unk6 int16
|
|
}
|
|
|
|
// PaperGift represents a paper gift reward entry.
|
|
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.DataType {
|
|
case 0:
|
|
paperMissions = PaperMission{
|
|
[]PaperMissionTimetable{{TimeMidnight(), TimeMidnight().Add(24 * time.Hour)}},
|
|
[]PaperMissionData{},
|
|
}
|
|
case 5:
|
|
paperData = paperDataTower
|
|
case 6:
|
|
paperData = paperDataTowerScaling
|
|
default:
|
|
if pkt.DataType < 1000 {
|
|
s.logger.Info("PaperData request for unknown type", zap.Uint32("DataType", pkt.DataType))
|
|
}
|
|
}
|
|
|
|
if pkt.DataType > 1000 {
|
|
_, ok := paperGiftData[pkt.DataType]
|
|
if ok {
|
|
paperGift = paperGiftData[pkt.DataType]
|
|
} else {
|
|
s.logger.Info("PaperGift request for unknown type", zap.Uint32("DataType", pkt.DataType))
|
|
}
|
|
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.DataType == 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)
|
|
}
|
|
}
|