handle receiving multiple items

This commit is contained in:
wish
2022-08-13 17:46:17 +10:00
parent ac90c2dd09
commit 0ba9adcc88
2 changed files with 27 additions and 18 deletions

View File

@@ -6,7 +6,7 @@ ALTER TABLE IF EXISTS public.characters
CREATE TABLE IF NOT EXISTS public.cafebonus CREATE TABLE IF NOT EXISTS public.cafebonus
( (
id integer NOT NULL PRIMARY KEY, id integer NOT NULL PRIMARY KEY,
seconds_req integer NOT NULL, time_req integer NOT NULL,
item_type integer NOT NULL, item_type integer NOT NULL,
item_id integer NOT NULL, item_id integer NOT NULL,
quantity integer NOT NULL quantity integer NOT NULL

View File

@@ -5,6 +5,7 @@ import (
ps "erupe-ce/common/pascalstring" ps "erupe-ce/common/pascalstring"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"go.uber.org/zap" "go.uber.org/zap"
"io"
"time" "time"
) )
@@ -85,7 +86,7 @@ func handleMsgMhfGetCafeDuration(s *Session, p mhfpacket.MHFPacket) {
type CafeBonus struct { type CafeBonus struct {
ID uint32 `db:"id"` ID uint32 `db:"id"`
Seconds uint32 `db:"time_req"` TimeReq uint32 `db:"time_req"`
ItemType uint32 `db:"item_type"` ItemType uint32 `db:"item_type"`
ItemID uint32 `db:"item_id"` ItemID uint32 `db:"item_id"`
Quantity uint32 `db:"quantity"` Quantity uint32 `db:"quantity"`
@@ -98,7 +99,7 @@ func handleMsgMhfGetCafeDurationBonusInfo(s *Session, p mhfpacket.MHFPacket) {
var count uint32 var count uint32
rows, err := s.server.db.Queryx(` rows, err := s.server.db.Queryx(`
SELECT cb.id, seconds_req, item_type, item_id, quantity, SELECT cb.id, time_req, item_type, item_id, quantity,
( (
SELECT count(*) SELECT count(*)
FROM cafe_accepted ca FROM cafe_accepted ca
@@ -116,7 +117,7 @@ func handleMsgMhfGetCafeDurationBonusInfo(s *Session, p mhfpacket.MHFPacket) {
if err != nil { if err != nil {
s.logger.Error("Error scanning cafebonus", zap.Error(err)) s.logger.Error("Error scanning cafebonus", zap.Error(err))
} }
bf.WriteUint32(cafeBonus.Seconds) bf.WriteUint32(cafeBonus.TimeReq)
bf.WriteUint32(0) // Unk bf.WriteUint32(0) // Unk
bf.WriteUint32(cafeBonus.ItemID) bf.WriteUint32(cafeBonus.ItemID)
bf.WriteUint32(cafeBonus.Quantity) bf.WriteUint32(cafeBonus.Quantity)
@@ -134,9 +135,10 @@ func handleMsgMhfGetCafeDurationBonusInfo(s *Session, p mhfpacket.MHFPacket) {
func handleMsgMhfReceiveCafeDurationBonus(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfReceiveCafeDurationBonus(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfReceiveCafeDurationBonus) pkt := p.(*mhfpacket.MsgMhfReceiveCafeDurationBonus)
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
var count uint32
row := s.server.db.QueryRowx(` bf.WriteUint32(0)
SELECT c.id, seconds_req, item_type, item_id, quantity rows, err := s.server.db.Queryx(`
SELECT c.id, time_req, item_type, item_id, quantity
FROM cafebonus c FROM cafebonus c
WHERE ( WHERE (
SELECT count(*) SELECT count(*)
@@ -146,20 +148,27 @@ func handleMsgMhfReceiveCafeDurationBonus(s *Session, p mhfpacket.MHFPacket) {
SELECT ch.cafe_time + $2 SELECT ch.cafe_time + $2
FROM characters ch FROM characters ch
WHERE ch.id = $1 WHERE ch.id = $1
) >= seconds_req LIMIT 1;`, s.charID, Time_Current_Adjusted().Unix()-s.sessionStart) ) >= time_req`, s.charID, Time_Current_Adjusted().Unix()-s.sessionStart)
cafeBonus := &CafeBonus{}
err := row.StructScan(cafeBonus)
if err != nil { if err != nil {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 8)) doAckBufSucceed(s, pkt.AckHandle, bf.Data())
return } else {
for rows.Next() {
cafeBonus := &CafeBonus{}
err = rows.StructScan(cafeBonus)
if err != nil {
continue
} }
bf.WriteUint32(1) count++
bf.WriteUint32(cafeBonus.ID) bf.WriteUint32(cafeBonus.ID)
bf.WriteUint32(cafeBonus.ItemType) bf.WriteUint32(cafeBonus.ItemType)
bf.WriteUint32(cafeBonus.ItemID) bf.WriteUint32(cafeBonus.ItemID)
bf.WriteUint32(cafeBonus.Quantity) bf.WriteUint32(cafeBonus.Quantity)
}
bf.Seek(0, io.SeekStart)
bf.WriteUint32(count)
doAckBufSucceed(s, pkt.AckHandle, bf.Data()) doAckBufSucceed(s, pkt.AckHandle, bf.Data())
} }
}
func handleMsgMhfPostCafeDurationBonusReceived(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfPostCafeDurationBonusReceived(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPostCafeDurationBonusReceived) pkt := p.(*mhfpacket.MsgMhfPostCafeDurationBonusReceived)