This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user