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") } } }