158 lines
4.2 KiB
Go
158 lines
4.2 KiB
Go
package player
|
|
|
|
import (
|
|
"blazing/common/data/xmlres"
|
|
playermodel "blazing/modules/player/model"
|
|
"testing"
|
|
)
|
|
|
|
func firstPetIDForTest(t *testing.T) int {
|
|
t.Helper()
|
|
|
|
for id := range xmlres.PetMAP {
|
|
return id
|
|
}
|
|
|
|
t.Fatal("xmlres.PetMAP is empty")
|
|
return 0
|
|
}
|
|
|
|
func TestAddPetExpAllowsLevelBeyond100WhilePanelStaysCapped(t *testing.T) {
|
|
petID := firstPetIDForTest(t)
|
|
petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 100, nil, 0)
|
|
expectedPanel := playermodel.GenPetInfo(petID, 31, 0, 0, 100, nil, 0)
|
|
if petInfo == nil {
|
|
t.Fatalf("failed to generate test pet")
|
|
}
|
|
if expectedPanel == nil {
|
|
t.Fatalf("failed to generate expected test pet")
|
|
}
|
|
|
|
player := &Player{
|
|
baseplayer: baseplayer{
|
|
Info: &playermodel.PlayerInfo{
|
|
ExpPool: 1_000_000,
|
|
},
|
|
},
|
|
}
|
|
|
|
player.AddPetExp(petInfo, petInfo.NextLvExp+10_000)
|
|
|
|
if petInfo.Level <= 100 {
|
|
t.Fatalf("expected pet level to continue beyond 100, got %d", petInfo.Level)
|
|
}
|
|
if petInfo.MaxHp != expectedPanel.MaxHp {
|
|
t.Fatalf("expected max hp to stay capped at 100-level panel, got %d want %d", petInfo.MaxHp, expectedPanel.MaxHp)
|
|
}
|
|
if petInfo.Prop != expectedPanel.Prop {
|
|
t.Fatalf("expected props to stay capped at 100-level panel, got %+v want %+v", petInfo.Prop, expectedPanel.Prop)
|
|
}
|
|
}
|
|
|
|
func TestAddPetExpRecalculatesPanelForLevelAbove100(t *testing.T) {
|
|
petID := firstPetIDForTest(t)
|
|
petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 100, nil, 0)
|
|
expectedPanel := playermodel.GenPetInfo(petID, 31, 0, 0, 100, nil, 0)
|
|
if petInfo == nil {
|
|
t.Fatalf("failed to generate test pet")
|
|
}
|
|
if expectedPanel == nil {
|
|
t.Fatalf("failed to generate expected test pet")
|
|
}
|
|
petInfo.Level = 101
|
|
petInfo.Exp = 7
|
|
petInfo.MaxHp = 1
|
|
petInfo.Hp = 999999
|
|
|
|
player := &Player{
|
|
baseplayer: baseplayer{
|
|
Info: &playermodel.PlayerInfo{
|
|
ExpPool: 50_000,
|
|
},
|
|
},
|
|
}
|
|
|
|
player.AddPetExp(petInfo, 12_345)
|
|
|
|
if petInfo.Level < 101 {
|
|
t.Fatalf("expected level above 100 to be preserved, got %d", petInfo.Level)
|
|
}
|
|
if petInfo.MaxHp != expectedPanel.MaxHp {
|
|
t.Fatalf("expected max hp to be recalculated using level 100 cap, got %d want %d", petInfo.MaxHp, expectedPanel.MaxHp)
|
|
}
|
|
if petInfo.Hp != petInfo.MaxHp {
|
|
t.Fatalf("expected hp to be clamped to recalculated max hp, got hp=%d maxHp=%d", petInfo.Hp, petInfo.MaxHp)
|
|
}
|
|
if player.Info.ExpPool != 50_000-12_345 {
|
|
t.Fatalf("expected exp pool to be consumed normally, got %d", player.Info.ExpPool)
|
|
}
|
|
}
|
|
|
|
func TestAddPetExpSmallRewardDoesNotJumpToMaxLevel(t *testing.T) {
|
|
petID := firstPetIDForTest(t)
|
|
petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 20, nil, 0)
|
|
if petInfo == nil {
|
|
t.Fatalf("failed to generate test pet")
|
|
}
|
|
|
|
player := &Player{
|
|
baseplayer: baseplayer{
|
|
Info: &playermodel.PlayerInfo{
|
|
ExpPool: 1_000_000,
|
|
},
|
|
},
|
|
}
|
|
|
|
addExp := int64(100)
|
|
originalLevel := petInfo.Level
|
|
nextLevelNeed := petInfo.NextLvExp - petInfo.Exp
|
|
if addExp >= nextLevelNeed {
|
|
t.Fatalf("test setup invalid: addExp=%d should be smaller than next level need=%d", addExp, nextLevelNeed)
|
|
}
|
|
|
|
player.AddPetExp(petInfo, addExp)
|
|
|
|
if petInfo.Level != originalLevel {
|
|
t.Fatalf("expected level to stay at %d, got %d", originalLevel, petInfo.Level)
|
|
}
|
|
if petInfo.Exp != addExp {
|
|
t.Fatalf("expected current exp to increase by %d, got %d", addExp, petInfo.Exp)
|
|
}
|
|
if player.Info.ExpPool != 1_000_000-addExp {
|
|
t.Fatalf("expected exp pool to decrease by %d, got %d", addExp, player.Info.ExpPool)
|
|
}
|
|
}
|
|
|
|
func TestAddPetExpUsesDynamicPerLevelRequirement(t *testing.T) {
|
|
petID := firstPetIDForTest(t)
|
|
petInfo := playermodel.GenPetInfo(petID, 31, 0, 0, 20, nil, 0)
|
|
if petInfo == nil {
|
|
t.Fatalf("failed to generate test pet")
|
|
}
|
|
|
|
initialNeed := petInfo.NextLvExp
|
|
if initialNeed <= 0 {
|
|
t.Fatalf("expected positive exp requirement, got %d", initialNeed)
|
|
}
|
|
|
|
player := &Player{
|
|
baseplayer: baseplayer{
|
|
Info: &playermodel.PlayerInfo{
|
|
ExpPool: 1_000_000,
|
|
},
|
|
},
|
|
}
|
|
|
|
player.AddPetExp(petInfo, initialNeed)
|
|
|
|
if petInfo.Level != 21 {
|
|
t.Fatalf("expected pet level to become 21, got %d", petInfo.Level)
|
|
}
|
|
if petInfo.Exp != 0 {
|
|
t.Fatalf("expected level-up to reset current level exp, got %d", petInfo.Exp)
|
|
}
|
|
if petInfo.NextLvExp == initialNeed {
|
|
t.Fatalf("expected next level exp to change after leveling, still %d", petInfo.NextLvExp)
|
|
}
|
|
}
|