handle stampcard progression

This commit is contained in:
wish
2023-01-22 22:43:34 +11:00
parent 19897e76aa
commit 6be1e0c927
3 changed files with 53 additions and 28 deletions

View File

@@ -3,25 +3,23 @@ package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfStampcardStamp represents the MSG_MHF_STAMPCARD_STAMP // MsgMhfStampcardStamp represents the MSG_MHF_STAMPCARD_STAMP
type MsgMhfStampcardStamp struct { type MsgMhfStampcardStamp struct {
// Field-size accurate.
AckHandle uint32 AckHandle uint32
Unk0 uint16 HR uint16
Unk1 uint16 GR uint16
Unk2 uint16 Stamps uint16
Unk3 uint16 // Hardcoded 0 in binary Reward1 uint16
Unk4 uint32 Reward2 uint16
Unk5 uint32 Item1 uint16
Unk6 uint32 Item2 uint16
Unk7 uint32 Quantity1 uint16
Unk8 uint32 Quantity2 uint16
Unk9 uint32
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -32,16 +30,16 @@ func (m *MsgMhfStampcardStamp) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16() m.HR = bf.ReadUint16()
m.Unk1 = bf.ReadUint16() m.GR = bf.ReadUint16()
m.Unk2 = bf.ReadUint16() m.Stamps = bf.ReadUint16()
m.Unk3 = bf.ReadUint16() _ = bf.ReadUint16()
m.Unk4 = bf.ReadUint32() m.Reward1 = uint16(bf.ReadUint32())
m.Unk5 = bf.ReadUint32() m.Reward2 = uint16(bf.ReadUint32())
m.Unk6 = bf.ReadUint32() m.Item1 = uint16(bf.ReadUint32())
m.Unk7 = bf.ReadUint32() m.Item2 = uint16(bf.ReadUint32())
m.Unk8 = bf.ReadUint32() m.Quantity1 = uint16(bf.ReadUint32())
m.Unk9 = bf.ReadUint32() m.Quantity2 = uint16(bf.ReadUint32())
return nil return nil
} }

View File

@@ -0,0 +1,5 @@
BEGIN;
ALTER TABLE characters ADD stampcard INT NOT NULL DEFAULT 0;
END;

View File

@@ -1545,9 +1545,31 @@ func handleMsgMhfUpdateEtcPoint(s *Session, p mhfpacket.MHFPacket) {
func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfStampcardStamp) pkt := p.(*mhfpacket.MsgMhfStampcardStamp)
// TODO: Work out where it gets existing stamp count from, its format and then bf := byteframe.NewByteFrame()
// update the actual sent values to be correct bf.WriteUint16(pkt.HR)
doAckBufSucceed(s, pkt.AckHandle, []byte{0x03, 0xe7, 0x03, 0xe7, 0x02, 0x99, 0x02, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x14, 0xf8, 0x69, 0x54}) bf.WriteUint16(pkt.GR)
var stamps uint16
_ = s.server.db.QueryRow(`SELECT stampcard FROM characters WHERE id = $1`, s.charID).Scan(&stamps)
bf.WriteUint16(stamps)
stamps += pkt.Stamps
bf.WriteUint16(stamps)
s.server.db.Exec(`UPDATE characters SET stampcard = $1 WHERE id = $2`, stamps, s.charID)
if stamps%30 == 0 {
bf.WriteUint16(2)
bf.WriteUint16(pkt.Reward2)
bf.WriteUint16(pkt.Item2)
bf.WriteUint16(pkt.Quantity2)
addWarehouseGift(s, "item", mhfpacket.WarehouseStack{ItemID: pkt.Item2, Quantity: pkt.Quantity2})
} else if stamps%15 == 0 {
bf.WriteUint16(1)
bf.WriteUint16(pkt.Reward1)
bf.WriteUint16(pkt.Item1)
bf.WriteUint16(pkt.Quantity1)
addWarehouseGift(s, "item", mhfpacket.WarehouseStack{ItemID: pkt.Item1, Quantity: pkt.Quantity1})
} else {
bf.WriteBytes(make([]byte, 8))
}
doAckBufSucceed(s, pkt.AckHandle, bf.Data())
} }
func handleMsgMhfStampcardPrize(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfStampcardPrize(s *Session, p mhfpacket.MHFPacket) {}