feat: 增加能量珠效果持久化逻辑
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed

This commit is contained in:
xinian
2026-04-28 06:03:05 +08:00
parent d2b3130414
commit 4b0a17e035
2 changed files with 92 additions and 0 deletions

View File

@@ -46,6 +46,50 @@ func TestUsePetItemOutOfFightAppliesToBackupPetInMemory(t *testing.T) {
}
}
func TestUsePetItemOutOfFightPersistsEnergyOrbEffectInfo(t *testing.T) {
petID := firstPetIDForControllerTest(t)
petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 50, nil, 0)
if petInfo == nil {
t.Fatal("failed to generate test pet")
}
testPlayer := player.NewPlayer(nil)
testPlayer.Info = &playermodel.PlayerInfo{
UserID: 10001,
PetList: []playermodel.PetInfo{*petInfo},
}
testPlayer.Service = blservice.NewUserService(testPlayer.Info.UserID)
itemID, effectCfg := firstEnergyOrbItemForControllerTest(t)
if err := testPlayer.Service.Item.UPDATE(itemID, 1); err != nil {
t.Fatalf("failed to seed energy orb item %d: %v", itemID, err)
}
_, err := (Controller{}).UsePetItemOutOfFight(&C2S_USE_PET_ITEM_OUT_OF_FIGHT{
CatchTime: petInfo.CatchTime,
ItemID: int32(itemID),
}, testPlayer)
if err != 0 {
t.Fatalf("expected energy orb use to succeed, got err=%d", err)
}
storedPet := testPlayer.Info.PetList[0]
if len(storedPet.EffectInfo) == 0 {
t.Fatalf("expected pet effect info to persist after using item %d", itemID)
}
last := storedPet.EffectInfo[len(storedPet.EffectInfo)-1]
if last.ItemID != itemID {
t.Fatalf("expected stored item id %d, got %d", itemID, last.ItemID)
}
if last.Status != 2 {
t.Fatalf("expected energy orb status 2, got %d", last.Status)
}
if last.EID != uint16(atoiOrZero(effectCfg.Eid)) {
t.Fatalf("expected effect id %s, got %d", effectCfg.Eid, last.EID)
}
}
func firstRecoverHPItemForControllerTest(t *testing.T) (uint32, int) {
t.Helper()
@@ -58,3 +102,36 @@ func firstRecoverHPItemForControllerTest(t *testing.T) (uint32, int) {
t.Fatal("xmlres.ItemsMAP has no HP recovery item")
return 0, 0
}
func firstEnergyOrbItemForControllerTest(t *testing.T) (uint32, xmlres.NewSeIdx) {
t.Helper()
for id, itemCfg := range xmlres.ItemsMAP {
if itemCfg.NewSeIdx == 0 {
continue
}
effectCfg, ok := xmlres.EffectMAP[itemCfg.NewSeIdx]
if !ok {
continue
}
if effectCfg.Stat == "2" && effectCfg.ItemId != nil {
return uint32(id), effectCfg
}
}
t.Fatal("xmlres.ItemsMAP has no energy orb item")
return 0, xmlres.NewSeIdx{}
}
func atoiOrZero(value string) int {
result := 0
for _, ch := range value {
if ch < '0' || ch > '9' {
return result
}
result = result*10 + int(ch-'0')
}
return result
}