78 lines
2.3 KiB
Go
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")
|
|
}
|
|
}
|
|
}
|