mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 07:55:33 +01:00
create transactGacha function
This commit is contained in:
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user