Files
GaCy-GO/internal/gameserver/currency_wars_reference_monster_test.go
T

78 lines
2.3 KiB
Go

package gameserver
import (
"testing"
"gac-hkrpg-go/internal/common"
pb "gac-hkrpg-go/protocol/proto"
)
func TestCurrencyWarsGeneratedMonsterUsesOneStableCapturedCamp(t *testing.T) {
c, err := common.LoadCurrencyWarsCatalog()
if err != nil {
t.Fatal(err)
}
refs, err := common.LoadCurrencyWarsReferenceNodes(c)
if err != nil {
t.Fatal(err)
}
policy, err := cwLoadReferenceEnemies(c)
if err != nil {
t.Fatal(err)
}
var row common.CurrencyWarsRouteNode
var tmpl common.CurrencyWarsReferenceNodeTemplate
for _, candidate := range c.StageRoutes {
node, e := refs.Template(candidate.NodeTemplateID)
if e == nil && node.NodeType == "Monster" {
row, tmpl = candidate, node
break
}
}
if row.RouteID == 0 {
t.Fatal("captured route has no Monster node")
}
run := &pb.MPIMAEMCEFH{UniqueId: 42, LJNGPCKPJLF: c.ActiveSeasonID}
stage := &pb.BEEFLEJAOCN{EMOHLJHPOPC: row.RouteID, DCAHJELNJNP: row.ChapterID, SectionId: row.SectionID}
first, err := cwGenerateReferenceMonsterLayer(c, run, stage, tmpl, policy)
if err != nil {
t.Fatal(err)
}
again, err := cwGenerateReferenceMonsterLayer(c, run, stage, tmpl, policy)
if err != nil {
t.Fatal(err)
}
layer, other := first.GetMPOBBIPMNNJ(), again.GetMPOBBIPMNNJ()
if layer == nil || other == nil || layer.LNDKCPBJDKH != other.LNDKCPBJDKH || layer.MOADBALHMFD != 1 || len(layer.BPDABHGFBFO) != 1 {
t.Fatal("monster camp or branch state differs")
}
camp, err := c.MonsterCamp(run.LJNGPCKPJLF, layer.LNDKCPBJDKH)
if err != nil {
t.Fatal(err)
}
allowed := map[uint32]bool{}
for _, id := range camp.Season.MonsterList {
allowed[id] = true
}
branch := layer.BPDABHGFBFO[0]
if branch.IFIIOIIKJHO != tmpl.PenaltyBonusRuleID || len(branch.MonsterWaveList) != 1 {
t.Fatal("monster wave or penalty differs")
}
previous, err := cwReferenceEarlierCount(c, stage, "Monster", false)
if err != nil {
t.Fatal(err)
}
want := policy.Policy.LaterMonsterCount
if previous == 0 {
want = policy.Policy.FirstMonsterCount
}
if len(branch.MonsterWaveList[0].PBLBBDBDLEK) != int(want) {
t.Fatal("monster count differs from policy")
}
for _, m := range branch.MonsterWaveList[0].PBLBBDBDLEK {
if !allowed[m.MonsterId] || policy.MonsterTiers[m.MonsterId] == 0 || policy.MonsterTiers[m.MonsterId] > policy.Policy.MonsterMaxTier || m.RoleStar == 0 {
t.Fatal("monster is outside captured eligible camp")
}
}
}