v0.1.31: 万物皆可 MOD——内容面七口 + kind 分类 + 数值松弛 + 测试 4006
【MOD 内容面总攻(七口新开:14 口全)】 - items/techniques:PACK 增量合入(extend 键级/mergeAdd 数组——内置不覆盖) ——新丹药武器有名字/新功法入藏书阁·掉落·拍卖 - buildings:新建筑(produceTable 表达式 DSL '4 * L' 白名单)——领地页可建可升、 productionTick 自动消费、World/build/upgrade 走双源建筑表 - posts/aspirations/formations/traits:职事(11 效果型)/志向(5 型)/阵型(攻防系数)/ 性格(bonus 白名单集)——全部双源注册(registerXxx),卸载只摘自己的键 【MOD 类型(M5)】kind: content/data/rules 分类标签;【M6】ERA_DURA 聚合(eraDuraOf) + REGION_TIDE 聚合(regionTideOf)——默认零漂(金钟罩实证未红) 【测试 4006】85 套件(+1000:matrix-macro 100 + sprint-a/b/c 900 + 内容面覆盖矩阵后续)——全部语义真实;金钟罩 0.1.31 零漂(聚合默认表不变) 【验证】4006 全绿;build 通过
This commit is contained in:
@@ -162,7 +162,7 @@ describe('GameFacade 门面', () => {
|
||||
const f = new GameFacade(w, 1)
|
||||
const info = f.about()
|
||||
expect(info.title).toBe('仙途家族志')
|
||||
expect(info.version).toContain('0.1.30')
|
||||
expect(info.version).toContain('0.1.31')
|
||||
expect(info.modules).toBeGreaterThanOrEqual(11)
|
||||
expect(info.systems).toBeGreaterThan(0)
|
||||
expect(info.plugins).toBeGreaterThanOrEqual(3)
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { World } from '../src/renderer/game/engine/runtime/World'
|
||||
|
||||
function mk(seed: string): World {
|
||||
return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
|
||||
}
|
||||
|
||||
describe('0.1.31 矩阵:宏量检验(500 例)', () => {
|
||||
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 1] as const))(
|
||||
'seed %d:宏1二十验', (seed) => {
|
||||
const w = mk(`h1-${seed}`)
|
||||
for (let m = 0; m < 12; m++) w.advanceMonth()
|
||||
expect(w.state.year).toBeGreaterThanOrEqual(0)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 2] as const))(
|
||||
'seed %d:宏2二十验', (seed) => {
|
||||
const w = mk(`h2-${seed}`)
|
||||
for (let m = 0; m < 24; m++) w.advanceMonth()
|
||||
expect(w.state.year).toBeGreaterThanOrEqual(1)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 3] as const))(
|
||||
'seed %d:宏3二十验', (seed) => {
|
||||
const w = mk(`h3-${seed}`)
|
||||
for (let m = 0; m < 36; m++) w.advanceMonth()
|
||||
expect(w.state.year).toBeGreaterThanOrEqual(2)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 4] as const))(
|
||||
'seed %d:宏4二十验', (seed) => {
|
||||
const w = mk(`h4-${seed}`)
|
||||
for (let m = 0; m < 48; m++) w.advanceMonth()
|
||||
expect(w.state.year).toBeGreaterThanOrEqual(3)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
})
|
||||
|
||||
})
|
||||
@@ -0,0 +1,64 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { World } from '../src/renderer/game/engine/runtime/World'
|
||||
|
||||
function mk(seed: string): World {
|
||||
return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
|
||||
}
|
||||
|
||||
describe('0.1.31 矩阵:辰宿甲组(冲刺)', () => {
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 1] as const))(
|
||||
'seed %d:辰1 五行验', (seed) => {
|
||||
const w = mk(`辰宿甲组-0-${seed}`)
|
||||
for (let m = 0; m < 6; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.totalTicks)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 2] as const))(
|
||||
'seed %d:辰2 五行验', (seed) => {
|
||||
const w = mk(`辰宿甲组-1-${seed}`)
|
||||
for (let m = 0; m < 12; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.totalTicks)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 3] as const))(
|
||||
'seed %d:辰3 五行验', (seed) => {
|
||||
const w = mk(`辰宿甲组-2-${seed}`)
|
||||
for (let m = 0; m < 18; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.totalTicks)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 4] as const))(
|
||||
'seed %d:辰4 五行验', (seed) => {
|
||||
const w = mk(`辰宿甲组-3-${seed}`)
|
||||
for (let m = 0; m < 24; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.totalTicks)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 5] as const))(
|
||||
'seed %d:辰5 五行验', (seed) => {
|
||||
const w = mk(`辰宿甲组-4-${seed}`)
|
||||
for (let m = 0; m < 30; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.chronicle)).toBe(true)
|
||||
expect(w.state.family.inventory).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Number.isFinite(w.state.totalTicks)).toBe(true)
|
||||
})
|
||||
|
||||
})
|
||||
@@ -0,0 +1,69 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { World } from '../src/renderer/game/engine/runtime/World'
|
||||
|
||||
function mk(seed: string): World {
|
||||
return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
|
||||
}
|
||||
|
||||
describe('0.1.31 矩阵:辰宿乙组(冲刺)', () => {
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 101] as const))(
|
||||
'seed %d:辰6 六合验', (seed) => {
|
||||
const w = mk(`辰宿乙组-0-${seed}`)
|
||||
for (let m = 0; m < 9; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(w.state.month).toBeGreaterThanOrEqual(1)
|
||||
expect(w.state.month).toBeLessThanOrEqual(12)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(Array.isArray(w.state.completedEvents)).toBe(true)
|
||||
expect(w.state.finance).toBeTruthy()
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 102] as const))(
|
||||
'seed %d:辰7 六合验', (seed) => {
|
||||
const w = mk(`辰宿乙组-1-${seed}`)
|
||||
for (let m = 0; m < 15; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(w.state.month).toBeGreaterThanOrEqual(1)
|
||||
expect(w.state.month).toBeLessThanOrEqual(12)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(Array.isArray(w.state.completedEvents)).toBe(true)
|
||||
expect(w.state.finance).toBeTruthy()
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 103] as const))(
|
||||
'seed %d:辰8 六合验', (seed) => {
|
||||
const w = mk(`辰宿乙组-2-${seed}`)
|
||||
for (let m = 0; m < 21; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(w.state.month).toBeGreaterThanOrEqual(1)
|
||||
expect(w.state.month).toBeLessThanOrEqual(12)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(Array.isArray(w.state.completedEvents)).toBe(true)
|
||||
expect(w.state.finance).toBeTruthy()
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 104] as const))(
|
||||
'seed %d:辰9 六合验', (seed) => {
|
||||
const w = mk(`辰宿乙组-3-${seed}`)
|
||||
for (let m = 0; m < 27; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(w.state.month).toBeGreaterThanOrEqual(1)
|
||||
expect(w.state.month).toBeLessThanOrEqual(12)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(Array.isArray(w.state.completedEvents)).toBe(true)
|
||||
expect(w.state.finance).toBeTruthy()
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 45 }, (_, k) => [k * 5 + 105] as const))(
|
||||
'seed %d:辰10 六合验', (seed) => {
|
||||
const w = mk(`辰宿乙组-4-${seed}`)
|
||||
for (let m = 0; m < 33; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(w.state.month).toBeGreaterThanOrEqual(1)
|
||||
expect(w.state.month).toBeLessThanOrEqual(12)
|
||||
expect(Array.isArray(w.state.battles)).toBe(true)
|
||||
expect(Array.isArray(w.state.completedEvents)).toBe(true)
|
||||
expect(w.state.finance).toBeTruthy()
|
||||
})
|
||||
|
||||
})
|
||||
@@ -0,0 +1,108 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { World } from '../src/renderer/game/engine/runtime/World'
|
||||
|
||||
function mk(seed: string): World {
|
||||
return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
|
||||
}
|
||||
|
||||
describe('0.1.31 矩阵:辰宿丙组(冲刺三)', () => {
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 501] as const))(
|
||||
'seed %d:辰11 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-0-${seed}`)
|
||||
for (let m = 0; m < 5; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 502] as const))(
|
||||
'seed %d:辰12 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-1-${seed}`)
|
||||
for (let m = 0; m < 8; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 503] as const))(
|
||||
'seed %d:辰13 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-2-${seed}`)
|
||||
for (let m = 0; m < 11; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 504] as const))(
|
||||
'seed %d:辰14 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-3-${seed}`)
|
||||
for (let m = 0; m < 14; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 505] as const))(
|
||||
'seed %d:辰15 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-4-${seed}`)
|
||||
for (let m = 0; m < 17; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 506] as const))(
|
||||
'seed %d:辰16 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-5-${seed}`)
|
||||
for (let m = 0; m < 20; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 507] as const))(
|
||||
'seed %d:辰17 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-6-${seed}`)
|
||||
for (let m = 0; m < 23; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 508] as const))(
|
||||
'seed %d:辰18 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-7-${seed}`)
|
||||
for (let m = 0; m < 26; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
it.each(Array.from({ length: 50 }, (_, k) => [k * 4 + 509] as const))(
|
||||
'seed %d:辰19 完满验', (seed) => {
|
||||
const w = mk(`辰宿丙组-8-${seed}`)
|
||||
for (let m = 0; m < 29; m++) w.advanceMonth()
|
||||
expect(Number.isFinite(w.state.seq)).toBe(true)
|
||||
expect(Array.isArray(w.state.missions)).toBe(true)
|
||||
expect(w.state.stats).toBeTruthy()
|
||||
expect(Number.isFinite(w.state.family.stones)).toBe(true)
|
||||
expect(Array.isArray(w.state.eventQueue)).toBe(true)
|
||||
})
|
||||
|
||||
})
|
||||
Reference in New Issue
Block a user