fix(server): honor cash mail delivery for native shop purchases

This commit is contained in:
2026-10-05 18:09:04 +08:00
parent acbe3b7545
commit deea9360ee
3 changed files with 23 additions and 2 deletions
+7 -1
View File
@@ -88,6 +88,8 @@ func cashList(t *testing.T, m *mail.Service, start, count uint64) ([]uint64, []b
}
func TestCashPurchaseMailSQLiteRollbackRestartBatchAndReplay(t *testing.T) {
fixture, _, _ := serviceFixture(t, 0)
nativeKey := gamedata.CashProductKey{GroupID: 44, ProductID: 1}
fixture.catalog.designs[nativeKey] = gamedata.CashProductDesign{Key: nativeKey, PriceType: 2, PriceCount: 1000, RandomBoxID: 20}
path := filepath.Join(t.TempDir(), "state.db")
graph := &deliveryGraph{}
open := func() (*accountstate.Repository, *Service, *mail.Service, *player.Wallet, *player.Inventory) {
@@ -165,7 +167,11 @@ func TestCashPurchaseMailSQLiteRollbackRestartBatchAndReplay(t *testing.T) {
if err = mailbox.BeforeDispatch("/CashShopBuy", nil); err != nil {
t.Fatal(err)
}
_, response, _, err := shop.HandleSession("/CashShopBuy", buyRequest(seq, 2, 1, 0, ""), "s")
request := buyRequest(seq, 2, 1, 0, "")
if seq == 2 {
request = nativeBuyRequest(seq, 44, [3]uint64{1, 0, 1})
}
_, response, _, err := shop.HandleSession("/CashShopBuy", request, "s")
if err != nil {
t.Fatal(err)
}
@@ -13,6 +13,7 @@ import (
"bd2server/internal/server/events"
"bd2server/internal/server/gamedata"
"bd2server/internal/server/hunting"
"bd2server/internal/server/mail"
"bd2server/internal/server/player"
"bd2server/internal/server/stateio"
)
@@ -140,6 +141,20 @@ func TestInstalledAllNativeProductRewardAndPriceDomains(t *testing.T) {
if err != nil {
t.Fatal(err)
}
mailbox, err := mail.OpenService(store, &mail.Starter{Version: "2.35.10", MailCount: 1}, items, wallet)
if err != nil {
t.Fatal(err)
}
templates, err := gamedata.LoadCashMailTemplates(root, version)
if err != nil {
t.Fatal(err)
}
if err = mailbox.AttachCashRewards(entitlement, templates); err != nil {
t.Fatal(err)
}
if err = entitlement.AttachCashMail(mailbox); err != nil {
t.Fatal(err)
}
policy, err := NewCatalog("2.35.10", catalog, gameconfig.Default().Purchases)
if err != nil {
t.Fatal(err)
+1 -1
View File
@@ -560,7 +560,7 @@ func (s *Service) buy(session string, request []byte) (int, []byte, bool, error)
var err error
if delivery, ok := s.economy.(interface {
ApplyPurchase(string, []gamedata.Reward, []gamedata.Reward) ([]byte, error)
}); ok && d.PriceType == 1 {
}); ok {
b, err = delivery.ApplyPurchase(operation, costs, rewards)
} else {
b, err = s.economy.Apply(operation, costs, rewards)