From f70fd5e6e72504c7fd0505575ccc99b54333ad20 Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 31 Jul 2024 22:00:44 +1000 Subject: [PATCH] basic BeatLevel progress storage --- schemas/patch-schema/conquest-data.sql | 5 +++++ server/channelserver/handlers.go | 3 ++- server/channelserver/handlers_seibattle.go | 15 ++++++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 schemas/patch-schema/conquest-data.sql diff --git a/schemas/patch-schema/conquest-data.sql b/schemas/patch-schema/conquest-data.sql new file mode 100644 index 000000000..3d322b5d1 --- /dev/null +++ b/schemas/patch-schema/conquest-data.sql @@ -0,0 +1,5 @@ +BEGIN; + +ALTER TABLE public.characters ADD COLUMN IF NOT EXISTS conquest_data BYTEA; + +END; \ No newline at end of file diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index ab707b670..2a6ea31bc 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1091,7 +1091,8 @@ func handleMsgMhfUnreserveSrg(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfKickExportForce(s *Session, p mhfpacket.MHFPacket) {} func cleanupEarthStatus(s *Session) { - s.server.db.Exec("DELETE FROM events WHERE event_type='earth'") + s.server.db.Exec(`DELETE FROM events WHERE event_type='earth'`) + s.server.db.Exec(`UPDATE characters SET conquest_data=NULL`) } func generateEarthStatusTimestamps(s *Session, start uint32, debug bool) []uint32 { diff --git a/server/channelserver/handlers_seibattle.go b/server/channelserver/handlers_seibattle.go index 49ef3520a..204e6fad9 100644 --- a/server/channelserver/handlers_seibattle.go +++ b/server/channelserver/handlers_seibattle.go @@ -697,12 +697,16 @@ func handleMsgMhfGetFixedSeibatuRankingTable(s *Session, p mhfpacket.MHFPacket) func handleMsgMhfReadBeatLevel(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfReadBeatLevel) - // This response is fixed and will never change on JP, - // but I've left it dynamic for possible other client differences. + var data []byte + err := s.server.db.QueryRow(`SELECT conquest_data FROM characters WHERE id = $1`, s.charID).Scan(&data) + if err != nil || len(data) == 0 { + data = []byte{0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1} + } + bf := byteframe.NewByteFrameFromBytes(data) resp := byteframe.NewByteFrame() for i := 0; i < int(pkt.ValidIDCount); i++ { resp.WriteUint32(pkt.IDs[i]) - resp.WriteUint32(0) + resp.WriteUint32(bf.ReadUint32()) resp.WriteUint32(0) resp.WriteUint32(0) } @@ -724,6 +728,11 @@ func handleMsgMhfReadLastWeekBeatRanking(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfUpdateBeatLevel(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfUpdateBeatLevel) + bf := byteframe.NewByteFrame() + for i := 0; i < 4; i++ { + bf.WriteInt32(pkt.Data2[i]) + } + s.server.db.Exec(`UPDATE characters SET conquest_data = $1 WHERE id = $2`, bf.Data(), s.charID) doAckBufSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) }