From c4d128ec182c7bd64447f84ebc6cb3f578447da5 Mon Sep 17 00:00:00 2001 From: wish Date: Fri, 19 Aug 2022 14:00:59 +1000 Subject: [PATCH] correctly handle yearly sub exchanges --- network/mhfpacket/msg_mhf_exchange_weekly_stamp.go | 4 ++-- server/channelserver/handlers.go | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go b/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go index 758925936..918a870ac 100644 --- a/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go +++ b/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go @@ -12,7 +12,7 @@ import ( type MsgMhfExchangeWeeklyStamp struct { AckHandle uint32 StampType string - Unk1 bool + Unk1 uint8 Unk2 uint16 } @@ -31,7 +31,7 @@ func (m *MsgMhfExchangeWeeklyStamp) Parse(bf *byteframe.ByteFrame, ctx *clientct case 2: m.StampType = "ex" } - m.Unk1 = bf.ReadBool() + m.Unk1 = bf.ReadUint8() m.Unk2 = bf.ReadUint16() return nil } diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 28164b103..b5d6d0d38 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -697,7 +697,11 @@ func handleMsgMhfCheckWeeklyStamp(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfExchangeWeeklyStamp(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfExchangeWeeklyStamp) var total, redeemed uint16 - s.server.db.QueryRow(fmt.Sprintf("UPDATE stamps SET %s_redeemed=%s_redeemed+8 WHERE character_id=$1 RETURNING %s_total, %s_redeemed", pkt.StampType, pkt.StampType, pkt.StampType, pkt.StampType), s.charID).Scan(&total, &redeemed) + if pkt.Unk1 == 0xA { // Yearly Sub Ex + s.server.db.QueryRow("UPDATE stamps SET hl_total=hl_total-48, hl_redeemed=hl_redeemed-48 WHERE character_id=$1 RETURNING hl_total, hl_redeemed", s.charID).Scan(&total, &redeemed) + } else { + s.server.db.QueryRow(fmt.Sprintf("UPDATE stamps SET %s_redeemed=%s_redeemed+8 WHERE character_id=$1 RETURNING %s_total, %s_redeemed", pkt.StampType, pkt.StampType, pkt.StampType, pkt.StampType), s.charID).Scan(&total, &redeemed) + } bf := byteframe.NewByteFrame() bf.WriteUint16(total) bf.WriteUint16(redeemed)