mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 16:04:38 +01:00
handle stampcard progression
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
patch-schema/stampcard.sql
Normal file
5
patch-schema/stampcard.sql
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
BEGIN;
|
||||||
|
|
||||||
|
ALTER TABLE characters ADD stampcard INT NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
|
END;
|
||||||
@@ -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) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user