Files
bd2/go/internal/server/world/mission_unlock_test.go
T
Flechazo 5b5a219dc2 feat(server): add special loot and data-driven gameplay rules
Generate equipment loot atomically, grant random boxes and prevent repeat claims.
Read gacha pools, pity, products, tickets, missions, presets, chapter rewards
and inventory costs from GameData; extend both collaboration UR ticket pools.
Sync owned recipes, configure startup state and calendars in versioned seeds,
and validate unlock tickets and revival talents.
2026-10-04 19:15:59 +08:00

59 lines
1.9 KiB
Go

package world
import (
"bd2server/internal/server/gamedata"
"bd2server/internal/server/player"
"bd2server/internal/server/stateio"
"testing"
)
func TestMissionPackOnlyUnlockUsesTicketAndLevelAuthorization(t *testing.T) {
s := testService()
s.squadLevel = func() (uint64, error) { return 3, nil }
s.storyCatalog.Packs[709] = gamedata.StoryPack{ID: 709, Open: &gamedata.ContentOpenRule{SquadLevel: 4}}
if s.MissionsUnlocked(709, 0) || s.MissionsUnlocked(999, 0) || s.MissionsUnlocked(0, 1) {
t.Fatal("locked pack/invalid condition opened")
}
s.squadLevel = func() (uint64, error) { return 4, nil }
if !s.MissionsUnlocked(709, 0) || !s.MissionsUnlocked(0, 0) {
t.Fatal("authorized pack not opened")
}
s.storyCatalog.Packs[710] = gamedata.StoryPack{ID: 710, Open: &gamedata.ContentOpenRule{TicketID: 901}}
var err error
s.inventory, err = player.OpenInventory(stateio.NewMemory(), &player.Starter{Version: "2.35.10"})
if err != nil {
t.Fatal(err)
}
if s.MissionsUnlocked(710, 0) {
t.Fatal("missing ticket opened")
}
if _, err := s.inventory.GrantOnce("ticket", []gamedata.BattleReward{{Type: 19, ID: 901, Count: 1}}); err != nil {
t.Fatal(err)
}
if !s.MissionsUnlocked(710, 0) {
t.Fatal("ticket authorization ignored")
}
}
func TestCollectionRewardsGrantChangedQuestAndPackOnlyOnNormal(t *testing.T) {
s := testService()
s.storyCatalog.Packs[709] = gamedata.StoryPack{ID: 709, Quests: map[int]gamedata.QuestDesign{49: {ID: 49, CollectionRewards: []gamedata.Reward{{Type: 17, ID: 9901, Count: 1}}}}}
storage := stateio.NewMemory()
var err error
s.inventory, err = player.OpenInventory(storage, &player.Starter{Version: "2.35.10"})
if err != nil {
t.Fatal(err)
}
s.wallet, err = player.OpenWallet(storage, player.Currency{})
if err != nil {
t.Fatal(err)
}
items, _, err := s.grantQuestRewards(709, 49, nil)
if err != nil {
t.Fatal(err)
}
if len(items) != 1 || items[0].ID != 9901 || items[0].Type != 17 {
t.Fatalf("items=%+v", items)
}
}