Files
bd2/go/internal/server/player/immortal_design_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

42 lines
1.5 KiB
Go

package player
import (
"bd2server/internal/server/gamedata"
"bd2server/internal/server/stateio"
"bd2server/internal/server/wire"
"bytes"
"testing"
)
func TestImmortalRequiresDesignedDeadTalentAndReplaysSameSequence(t *testing.T) {
store := stateio.NewMemory()
inv, err := OpenInventory(store, &Starter{Version: "2.35.10"})
if err != nil {
t.Fatal(err)
}
s, err := OpenCharacterStore(store, []Character{{InvenIndex: 77, ID: 999, HP: 0, Level: 1, TalentLevel: 3}}, inv, "", "")
if err != nil {
t.Fatal(err)
}
s.maxHealth = func(Character) (uint64, error) { return 700, nil }
s.AttachImmortalDesign(&gamedata.ImmortalDesign{Characters: map[uint64]uint64{999: 88}, FullRestore: map[[2]uint64]bool{{88, 3}: true}})
s.BeginSession("a")
req := wire.AppendVarint(wire.AppendVarint(nil, 1, 12), 2, 77)
_, body, _, err := s.Handle("/CharImmortal", req)
if err != nil {
t.Fatal(err)
}
_, again, _, err := s.Handle("/CharImmortal", req)
if err != nil || !bytes.Equal(body, again) {
t.Fatalf("replay err=%v", err)
}
if _, _, _, err := s.Handle("/CharImmortal", wire.AppendVarint(wire.AppendVarint(nil, 1, 13), 2, 77)); err == nil {
t.Fatal("alive new request restored")
}
s.SetCurrentHealth(77, 0)
s.AttachImmortalDesign(&gamedata.ImmortalDesign{Characters: map[uint64]uint64{999: 88}, FullRestore: map[[2]uint64]bool{{88, 2}: true}})
if _, _, _, err := s.Handle("/CharImmortal", wire.AppendVarint(wire.AppendVarint(nil, 1, 14), 2, 77)); err == nil {
t.Fatal("wrong talent level revived")
}
}