create transactGacha function

This commit is contained in:
wish
2023-02-15 00:22:28 +11:00
parent 403b5f1c7f
commit e1986cb58b

View File

@@ -264,21 +264,15 @@ func spendGachaCoin(s *Session, quantity uint16) {
} }
} }
func handleMsgMhfPlayNormalGacha(s *Session, p mhfpacket.MHFPacket) { func transactGacha(s *Session, gachaID uint32, rollID uint8) (error, int) {
pkt := p.(*mhfpacket.MsgMhfPlayNormalGacha) var itemType uint8
bf := byteframe.NewByteFrame() var itemNumber uint16
var gachaEntries []GachaEntry var rolls int
var entry GachaEntry err := s.server.db.QueryRowx(`SELECT item_type, item_number, rolls FROM gacha_entries WHERE gacha_id = $1 AND entry_type = $2`, gachaID, rollID).Scan(&itemType, &itemNumber, &rolls)
var rewards []GachaItem
var reward GachaItem
var totalWeight float64
err := s.server.db.QueryRowx(`SELECT item_type, item_number, rolls FROM gacha_entries WHERE gacha_id = $1 AND entry_type = $2`, pkt.GachaID, pkt.RollType).StructScan(&entry)
if err != nil { if err != nil {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) return err, 0
return
} }
switch entry.ItemType { switch itemType {
/* /*
valid types that need manual savedata manipulation: valid types that need manual savedata manipulation:
- Ryoudan Points - Ryoudan Points
@@ -289,16 +283,30 @@ func handleMsgMhfPlayNormalGacha(s *Session, p mhfpacket.MHFPacket) {
- Festa Points - Festa Points
*/ */
case 17: case 17:
_ = addPointNetcafe(s, int(entry.ItemNumber)*-1) _ = addPointNetcafe(s, int(itemNumber)*-1)
case 19: case 19:
fallthrough fallthrough
case 20: case 20:
spendGachaCoin(s, entry.ItemNumber) spendGachaCoin(s, itemNumber)
case 21: case 21:
s.server.db.Exec("UPDATE users u SET frontier_points=frontier_points-$1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2)", entry.ItemNumber, s.charID) s.server.db.Exec("UPDATE users u SET frontier_points=frontier_points-$1 WHERE u.id=(SELECT c.user_id FROM characters c WHERE c.id=$2)", itemNumber, s.charID)
} }
rolls := int(entry.Rolls) return nil, rolls
}
func handleMsgMhfPlayNormalGacha(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfPlayNormalGacha)
bf := byteframe.NewByteFrame()
var gachaEntries []GachaEntry
var entry GachaEntry
var rewards []GachaItem
var reward GachaItem
var totalWeight float64
err, rolls := transactGacha(s, pkt.GachaID, pkt.RollType)
if err != nil {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 1))
return
}
entries, err := s.server.db.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID) entries, err := s.server.db.Queryx(`SELECT id, weight, rarity FROM gacha_entries WHERE gacha_id = $1 AND entry_type = 100 ORDER BY weight DESC`, pkt.GachaID)
if err != nil { if err != nil {
doAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) doAckBufSucceed(s, pkt.AckHandle, make([]byte, 1))