Merge pull request #126 from ZeruLight/fix/quest-stamps

fix/quest-stamps
This commit is contained in:
wish
2024-07-24 23:46:13 +10:00
committed by GitHub
2 changed files with 24 additions and 20 deletions

View File

@@ -37,13 +37,16 @@ func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
} }
m.Stamps = bf.ReadUint16() m.Stamps = bf.ReadUint16()
bf.ReadUint16() // Zeroed bf.ReadUint16() // Zeroed
if _config.ErupeConfig.RealClientMode > _config.Z1 { if _config.ErupeConfig.RealClientMode >= _config.Z2 {
m.Reward1 = uint16(bf.ReadUint32()) m.Reward1 = uint16(bf.ReadUint32())
m.Reward2 = uint16(bf.ReadUint32()) m.Reward2 = uint16(bf.ReadUint32())
m.Item1 = uint16(bf.ReadUint32()) m.Item1 = uint16(bf.ReadUint32())
m.Item2 = uint16(bf.ReadUint32()) m.Item2 = uint16(bf.ReadUint32())
m.Quantity1 = uint16(bf.ReadUint32()) m.Quantity1 = uint16(bf.ReadUint32())
m.Quantity2 = uint16(bf.ReadUint32()) m.Quantity2 = uint16(bf.ReadUint32())
} else {
m.Reward1 = 10
m.Reward2 = 10
} }
return nil return nil
} }

View File

@@ -1078,30 +1078,31 @@ func handleMsgMhfStampcardStamp(s *Session, p mhfpacket.MHFPacket) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.WriteUint16(pkt.HR) bf.WriteUint16(pkt.HR)
var stamps uint16
_ = s.server.db.QueryRow(`SELECT stampcard FROM characters WHERE id = $1`, s.charID).Scan(&stamps)
if _config.ErupeConfig.RealClientMode >= _config.G1 { if _config.ErupeConfig.RealClientMode >= _config.G1 {
bf.WriteUint16(pkt.GR) bf.WriteUint16(pkt.GR)
} }
var stamps, rewardTier, rewardUnk uint16
reward := mhfitem.MHFItemStack{Item: mhfitem.MHFItem{}}
s.server.db.QueryRow(`UPDATE characters SET stampcard = stampcard + $1 WHERE id = $2 RETURNING stampcard`, pkt.Stamps, s.charID).Scan(&stamps)
bf.WriteUint16(stamps - pkt.Stamps)
bf.WriteUint16(stamps) bf.WriteUint16(stamps)
stamps += pkt.Stamps
bf.WriteUint16(stamps) if stamps/30 > (stamps-pkt.Stamps)/30 {
s.server.db.Exec(`UPDATE characters SET stampcard = $1 WHERE id = $2`, stamps, s.charID) rewardTier = 2
if stamps%30 == 0 { rewardUnk = pkt.Reward2
bf.WriteUint16(2) reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2}
bf.WriteUint16(pkt.Reward2) addWarehouseItem(s, reward)
bf.WriteUint16(pkt.Item2) } else if stamps/15 > (stamps-pkt.Stamps)/15 {
bf.WriteUint16(pkt.Quantity2) rewardTier = 1
addWarehouseItem(s, mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item2}, Quantity: pkt.Quantity2}) rewardUnk = pkt.Reward1
} else if stamps%15 == 0 { reward = mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1}
bf.WriteUint16(1) addWarehouseItem(s, reward)
bf.WriteUint16(pkt.Reward1)
bf.WriteUint16(pkt.Item1)
bf.WriteUint16(pkt.Quantity1)
addWarehouseItem(s, mhfitem.MHFItemStack{Item: mhfitem.MHFItem{ItemID: pkt.Item1}, Quantity: pkt.Quantity1})
} else {
bf.WriteBytes(make([]byte, 8))
} }
bf.WriteUint16(rewardTier)
bf.WriteUint16(rewardUnk)
bf.WriteUint16(reward.Item.ItemID)
bf.WriteUint16(reward.Quantity)
doAckBufSucceed(s, pkt.AckHandle, bf.Data()) doAckBufSucceed(s, pkt.AckHandle, bf.Data())
} }