pi-jinyong-xia 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +378 -0
- package/dist/assets/portrait-ascii/portrait-data.json +1 -0
- package/dist/extensions/characters.d.ts +19 -0
- package/dist/extensions/characters.js +52 -0
- package/dist/extensions/characters.js.map +1 -0
- package/dist/extensions/index.d.ts +1 -0
- package/dist/extensions/index.js +20 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/missions-mbti.d.ts +39 -0
- package/dist/extensions/missions-mbti.js +101 -0
- package/dist/extensions/missions-mbti.js.map +1 -0
- package/dist/extensions/missions-templates-danger.d.ts +5 -0
- package/dist/extensions/missions-templates-danger.js +432 -0
- package/dist/extensions/missions-templates-danger.js.map +1 -0
- package/dist/extensions/missions-templates-safe.d.ts +34 -0
- package/dist/extensions/missions-templates-safe.js +307 -0
- package/dist/extensions/missions-templates-safe.js.map +1 -0
- package/dist/extensions/missions-templates.d.ts +12 -0
- package/dist/extensions/missions-templates.js +26 -0
- package/dist/extensions/missions-templates.js.map +1 -0
- package/dist/extensions/missions.d.ts +27 -0
- package/dist/extensions/missions.js +81 -0
- package/dist/extensions/missions.js.map +1 -0
- package/dist/extensions/state.d.ts +89 -0
- package/dist/extensions/state.js +205 -0
- package/dist/extensions/state.js.map +1 -0
- package/dist/extensions/telemetry.d.ts +179 -0
- package/dist/extensions/telemetry.js +241 -0
- package/dist/extensions/telemetry.js.map +1 -0
- package/dist/extensions/wuxue-achievements.d.ts +27 -0
- package/dist/extensions/wuxue-achievements.js +92 -0
- package/dist/extensions/wuxue-achievements.js.map +1 -0
- package/dist/extensions/wuxue-boss.d.ts +15 -0
- package/dist/extensions/wuxue-boss.js +405 -0
- package/dist/extensions/wuxue-boss.js.map +1 -0
- package/dist/extensions/wuxue-data.d.ts +35 -0
- package/dist/extensions/wuxue-data.js +409 -0
- package/dist/extensions/wuxue-data.js.map +1 -0
- package/dist/extensions/wuxue-encounter.d.ts +23 -0
- package/dist/extensions/wuxue-encounter.js +368 -0
- package/dist/extensions/wuxue-encounter.js.map +1 -0
- package/dist/extensions/wuxue-faction.d.ts +43 -0
- package/dist/extensions/wuxue-faction.js +182 -0
- package/dist/extensions/wuxue-faction.js.map +1 -0
- package/dist/extensions/wuxue-profession.d.ts +33 -0
- package/dist/extensions/wuxue-profession.js +117 -0
- package/dist/extensions/wuxue-profession.js.map +1 -0
- package/dist/extensions/wuxue-talent.d.ts +41 -0
- package/dist/extensions/wuxue-talent.js +209 -0
- package/dist/extensions/wuxue-talent.js.map +1 -0
- package/dist/extensions/wuxue-types.d.ts +155 -0
- package/dist/extensions/wuxue-types.js +28 -0
- package/dist/extensions/wuxue-types.js.map +1 -0
- package/dist/extensions/wuxue.d.ts +89 -0
- package/dist/extensions/wuxue.js +441 -0
- package/dist/extensions/wuxue.js.map +1 -0
- package/dist/extensions/xia-boss.d.ts +14 -0
- package/dist/extensions/xia-boss.js +337 -0
- package/dist/extensions/xia-boss.js.map +1 -0
- package/dist/extensions/xia-cmd-faction.d.ts +4 -0
- package/dist/extensions/xia-cmd-faction.js +313 -0
- package/dist/extensions/xia-cmd-faction.js.map +1 -0
- package/dist/extensions/xia-cmd-missions.d.ts +4 -0
- package/dist/extensions/xia-cmd-missions.js +232 -0
- package/dist/extensions/xia-cmd-missions.js.map +1 -0
- package/dist/extensions/xia-cmd-shop-rank.d.ts +4 -0
- package/dist/extensions/xia-cmd-shop-rank.js +155 -0
- package/dist/extensions/xia-cmd-shop-rank.js.map +1 -0
- package/dist/extensions/xia-cmd-stats.d.ts +4 -0
- package/dist/extensions/xia-cmd-stats.js +290 -0
- package/dist/extensions/xia-cmd-stats.js.map +1 -0
- package/dist/extensions/xia-commands.d.ts +19 -0
- package/dist/extensions/xia-commands.js +138 -0
- package/dist/extensions/xia-commands.js.map +1 -0
- package/dist/extensions/xia-events.d.ts +58 -0
- package/dist/extensions/xia-events.js +615 -0
- package/dist/extensions/xia-events.js.map +1 -0
- package/dist/extensions/xia-render.d.ts +65 -0
- package/dist/extensions/xia-render.js +490 -0
- package/dist/extensions/xia-render.js.map +1 -0
- package/dist/extensions/xia-select.d.ts +24 -0
- package/dist/extensions/xia-select.js +413 -0
- package/dist/extensions/xia-select.js.map +1 -0
- package/dist/extensions/xia.d.ts +14 -0
- package/dist/extensions/xia.js +145 -0
- package/dist/extensions/xia.js.map +1 -0
- package/entry.js +18 -0
- package/package.json +61 -0
- package/skills/SKILL.md +83 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 武功系统 - 类型定义与五行系统
|
|
3
|
+
*/
|
|
4
|
+
export type Element = "金" | "木" | "水" | "火" | "土";
|
|
5
|
+
export declare const OVERCOMES: Record<Element, Element>;
|
|
6
|
+
export declare const GENERATES: Record<Element, Element>;
|
|
7
|
+
export declare const ELEMENT_SYMBOL: Record<Element, string>;
|
|
8
|
+
export declare function getElementMultiplier(atk: Element, def: Element): number;
|
|
9
|
+
/** 返回元素加成标签:"克制" | "被克" | "" */
|
|
10
|
+
export declare function getElementBonusLabel(atk: Element, def: Element): string;
|
|
11
|
+
export interface WuxueState {
|
|
12
|
+
level: number;
|
|
13
|
+
xp: number;
|
|
14
|
+
xpToNext: number;
|
|
15
|
+
totalXp: number;
|
|
16
|
+
hp: number;
|
|
17
|
+
maxHp: number;
|
|
18
|
+
attack: number;
|
|
19
|
+
defense: number;
|
|
20
|
+
gold: number;
|
|
21
|
+
skills: Skill[];
|
|
22
|
+
achievements: string[];
|
|
23
|
+
totalTrainings: number;
|
|
24
|
+
totalFeeds: number;
|
|
25
|
+
totalCommands: number;
|
|
26
|
+
totalEdits: number;
|
|
27
|
+
totalErrors: number;
|
|
28
|
+
items: Record<string, number>;
|
|
29
|
+
attackBuff: number;
|
|
30
|
+
defenseBuff: number;
|
|
31
|
+
xpBonus: number;
|
|
32
|
+
}
|
|
33
|
+
export interface Skill {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
level: number;
|
|
37
|
+
xp: number;
|
|
38
|
+
description: string;
|
|
39
|
+
unlocked: boolean;
|
|
40
|
+
element: Element;
|
|
41
|
+
}
|
|
42
|
+
export interface SkillDef {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
element: Element;
|
|
47
|
+
}
|
|
48
|
+
export interface WeaponDef {
|
|
49
|
+
id: string;
|
|
50
|
+
name: string;
|
|
51
|
+
type: string;
|
|
52
|
+
attack: number;
|
|
53
|
+
rarity: "凡品" | "良品" | "精品" | "极品" | "神器";
|
|
54
|
+
description: string;
|
|
55
|
+
element: Element;
|
|
56
|
+
}
|
|
57
|
+
export interface ItemDef {
|
|
58
|
+
id: string;
|
|
59
|
+
name: string;
|
|
60
|
+
type: "恢复" | "增益" | "武功";
|
|
61
|
+
description: string;
|
|
62
|
+
effect: {
|
|
63
|
+
hp?: number;
|
|
64
|
+
attackBuff?: number;
|
|
65
|
+
defenseBuff?: number;
|
|
66
|
+
xpBonus?: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface BossDef {
|
|
70
|
+
id: string;
|
|
71
|
+
name: string;
|
|
72
|
+
title: string;
|
|
73
|
+
element: Element;
|
|
74
|
+
baseHp: number;
|
|
75
|
+
baseAttack: number;
|
|
76
|
+
baseDefense: number;
|
|
77
|
+
description: string;
|
|
78
|
+
}
|
|
79
|
+
export interface DropResult {
|
|
80
|
+
type: "encounter" | "battle" | "event" | "weapon" | "item" | "gold" | "skill_scroll" | "none";
|
|
81
|
+
location?: string;
|
|
82
|
+
name: string;
|
|
83
|
+
description: string;
|
|
84
|
+
weaponId?: string;
|
|
85
|
+
itemId?: string;
|
|
86
|
+
goldAmount?: number;
|
|
87
|
+
xpAmount?: number;
|
|
88
|
+
skillScrollId?: string;
|
|
89
|
+
battleResult?: "win" | "lose" | "flee";
|
|
90
|
+
hpChange?: number;
|
|
91
|
+
encounterChar?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface BattleLog {
|
|
94
|
+
turn: number;
|
|
95
|
+
attacker: string;
|
|
96
|
+
damage: number;
|
|
97
|
+
elementBonus: string;
|
|
98
|
+
isSkillHit?: boolean;
|
|
99
|
+
selfDamage?: number;
|
|
100
|
+
}
|
|
101
|
+
export interface BattleResult {
|
|
102
|
+
won: boolean;
|
|
103
|
+
playerHp: number;
|
|
104
|
+
bossHpLeft: number;
|
|
105
|
+
bossName: string;
|
|
106
|
+
bossElement: Element;
|
|
107
|
+
logs: BattleLog[];
|
|
108
|
+
goldReward: number;
|
|
109
|
+
xpReward: number;
|
|
110
|
+
skillXpReward: number;
|
|
111
|
+
}
|
|
112
|
+
/** 手动战斗状态 */
|
|
113
|
+
export type TurnAction = "attack" | "skill" | "defend" | "item" | "flee";
|
|
114
|
+
export interface BattleState {
|
|
115
|
+
playerHp: number;
|
|
116
|
+
playerMaxHp: number;
|
|
117
|
+
bossHp: number;
|
|
118
|
+
bossMaxHp: number;
|
|
119
|
+
bossName: string;
|
|
120
|
+
bossElement: Element;
|
|
121
|
+
turn: number;
|
|
122
|
+
playerAtk: number;
|
|
123
|
+
playerDef: number;
|
|
124
|
+
bossAtk: number;
|
|
125
|
+
bossDef: number;
|
|
126
|
+
weaponElement: Element;
|
|
127
|
+
skillElement?: Element;
|
|
128
|
+
skillLevel: number;
|
|
129
|
+
skillDmgBase: number;
|
|
130
|
+
skillTriggerInterval: number;
|
|
131
|
+
weaponAttack: number;
|
|
132
|
+
logs: BattleLog[];
|
|
133
|
+
}
|
|
134
|
+
export interface TurnResult {
|
|
135
|
+
logs: BattleLog[];
|
|
136
|
+
over: boolean;
|
|
137
|
+
won?: boolean;
|
|
138
|
+
fled?: boolean;
|
|
139
|
+
dice?: DiceEvent;
|
|
140
|
+
}
|
|
141
|
+
/** 🎲 骰子随机事件 */
|
|
142
|
+
export type DiceEventType = "暴击" | "闪避" | "元素共鸣" | "破防" | "回春" | "虚弱" | "普通";
|
|
143
|
+
export interface DiceEvent {
|
|
144
|
+
roll: number;
|
|
145
|
+
event: DiceEventType;
|
|
146
|
+
target: "player" | "boss" | "both";
|
|
147
|
+
desc: string;
|
|
148
|
+
}
|
|
149
|
+
export interface BattleAction {
|
|
150
|
+
id: string;
|
|
151
|
+
label: string;
|
|
152
|
+
type: TurnAction;
|
|
153
|
+
desc: string;
|
|
154
|
+
emoji: string;
|
|
155
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 武功系统 - 类型定义与五行系统
|
|
3
|
+
*/
|
|
4
|
+
export const OVERCOMES = {
|
|
5
|
+
"金": "木", "木": "土", "土": "水", "水": "火", "火": "金",
|
|
6
|
+
};
|
|
7
|
+
export const GENERATES = {
|
|
8
|
+
"木": "火", "火": "土", "土": "金", "金": "水", "水": "木",
|
|
9
|
+
};
|
|
10
|
+
export const ELEMENT_SYMBOL = {
|
|
11
|
+
"金": "🤍", "木": "💚", "水": "💙", "火": "❤️", "土": "🟤",
|
|
12
|
+
};
|
|
13
|
+
export function getElementMultiplier(atk, def) {
|
|
14
|
+
if (OVERCOMES[atk] === def)
|
|
15
|
+
return 1.5;
|
|
16
|
+
if (OVERCOMES[def] === atk)
|
|
17
|
+
return 0.7;
|
|
18
|
+
return 1.0;
|
|
19
|
+
}
|
|
20
|
+
/** 返回元素加成标签:"克制" | "被克" | "" */
|
|
21
|
+
export function getElementBonusLabel(atk, def) {
|
|
22
|
+
if (OVERCOMES[atk] === def)
|
|
23
|
+
return "克制";
|
|
24
|
+
if (OVERCOMES[def] === atk)
|
|
25
|
+
return "被克";
|
|
26
|
+
return "";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=wuxue-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wuxue-types.js","sourceRoot":"","sources":["../../extensions/wuxue-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,CAAC,MAAM,SAAS,GAA6B;IAClD,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAChD,CAAC;AACF,MAAM,CAAC,MAAM,SAAS,GAA6B;IAClD,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAChD,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAA4B;IACtD,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;CACrD,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,GAAY,EAAE,GAAY;IAC9D,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IACvC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IACvC,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,oBAAoB,CAAC,GAAY,EAAE,GAAY;IAC9D,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 武功系统 - 等级、经验、状态管理、成就、校验
|
|
3
|
+
*
|
|
4
|
+
* 等级体系(参考武侠世界):
|
|
5
|
+
* 1-10: 江湖小虾米
|
|
6
|
+
* 11-20: 初窥门径
|
|
7
|
+
* 21-30: 小有所成
|
|
8
|
+
* 31-40: 身手不凡
|
|
9
|
+
* 41-50: 名动一方
|
|
10
|
+
* 51-60: 威震武林
|
|
11
|
+
* 61-70: 一代宗师
|
|
12
|
+
* 71-80: 登峰造极
|
|
13
|
+
* 81-90: 返璞归真
|
|
14
|
+
* 91-99: 天下无敌
|
|
15
|
+
* 100: 武林至尊
|
|
16
|
+
*/
|
|
17
|
+
export type { Element } from "./wuxue-types.js";
|
|
18
|
+
export { ELEMENT_SYMBOL, getElementMultiplier, getElementBonusLabel, OVERCOMES, GENERATES } from "./wuxue-types.js";
|
|
19
|
+
export type { WuxueState, Skill, SkillDef, WeaponDef, ItemDef, BossDef, DropResult, BattleLog, BattleResult } from "./wuxue-types.js";
|
|
20
|
+
export { SKILL_POOL, MAX_SKILLS, EXCLUSIVE_SKILL_IDS, WEAPON_DEFS, ITEM_DEFS, getRandomSkill, getShopSkills, getRandomUnownedSkill, getSkill, getSkillXpToNext, addSkillXp, getSkillPrice, getWeaponDef, getRaritySymbol, getItemDef, useItem } from "./wuxue-data.js";
|
|
21
|
+
export { getLocation, getEvent, generateEncounter } from "./wuxue-encounter.js";
|
|
22
|
+
export { BOSS_DEFS, getBossForLevel, fightBoss, initBattleState, executeBattleTurn, finalizeBattle, rollDice } from "./wuxue-boss.js";
|
|
23
|
+
export { FACTIONS, getFaction, getAllFactions, getFactionBonus, getFactionRankTitle, getFactionRankIndex, addContribution } from "./wuxue-faction.js";
|
|
24
|
+
export type { FactionDef } from "./wuxue-faction.js";
|
|
25
|
+
export { PROFESSIONS, getProfession, getAllProfessions, getProfessionBonus } from "./wuxue-profession.js";
|
|
26
|
+
export type { ProfessionDef } from "./wuxue-profession.js";
|
|
27
|
+
export { TALENTS, getTalent, getAllTalents, getTalentsByBranch, calculateTalentBonuses, canLearnTalent, getTalentPointsPerLevel, getBranchName, getBranchEmoji } from "./wuxue-talent.js";
|
|
28
|
+
export type { TalentDef } from "./wuxue-talent.js";
|
|
29
|
+
export { ACHIEVEMENT_DEFS, ACHIEVEMENT_CATEGORIES, getAchievementDef, getAllAchievementDefs, getAchievementsByCategory, getRarityLabel, getRarityColor, getRarityEmoji } from "./wuxue-achievements.js";
|
|
30
|
+
export type { AchievementDef, AchievementCategory } from "./wuxue-achievements.js";
|
|
31
|
+
import type { Element, WuxueState, Skill } from "./wuxue-types.js";
|
|
32
|
+
export declare function getLevelTitle(level: number): string;
|
|
33
|
+
export declare function xpForLevel(level: number): number;
|
|
34
|
+
export declare function getWuli(state: WuxueState, weaponAttack: number): number;
|
|
35
|
+
export declare function updateCombatStats(state: WuxueState, weaponAttack: number): void;
|
|
36
|
+
export declare function createInitialState(): WuxueState;
|
|
37
|
+
/** 补齐老存档中 skills 缺失的 element 等字段 */
|
|
38
|
+
export declare function migrateSkills(skills: Skill[]): void;
|
|
39
|
+
export declare function addXp(state: WuxueState, amount: number): {
|
|
40
|
+
leveledUp: boolean;
|
|
41
|
+
newLevel: number;
|
|
42
|
+
};
|
|
43
|
+
export declare function feed(state: WuxueState): {
|
|
44
|
+
xpGain: number;
|
|
45
|
+
goldGain: number;
|
|
46
|
+
leveledUp: boolean;
|
|
47
|
+
};
|
|
48
|
+
/** 获取最大血量(随等级增长) */
|
|
49
|
+
export declare function getMaxHp(level: number): number;
|
|
50
|
+
/** 恢复血量到满(用于tick自然回复或复活) */
|
|
51
|
+
export declare function recoverHp(state: WuxueState): void;
|
|
52
|
+
export declare function train(state: WuxueState, skillId?: string): {
|
|
53
|
+
success: boolean;
|
|
54
|
+
xpGain: number;
|
|
55
|
+
goldGain: number;
|
|
56
|
+
leveledUp: boolean;
|
|
57
|
+
skillUp: boolean;
|
|
58
|
+
msg: string;
|
|
59
|
+
};
|
|
60
|
+
export declare function tick(state: WuxueState): void;
|
|
61
|
+
export declare function recordEvent(state: WuxueState, type: "command" | "edit" | "error" | "tool"): {
|
|
62
|
+
xpGain: number;
|
|
63
|
+
goldGain: number;
|
|
64
|
+
leveledUp: boolean;
|
|
65
|
+
} | null;
|
|
66
|
+
interface AchievementDef {
|
|
67
|
+
id: string;
|
|
68
|
+
name: string;
|
|
69
|
+
description: string;
|
|
70
|
+
check: (state: WuxueState) => boolean;
|
|
71
|
+
}
|
|
72
|
+
export declare function checkAchievements(state: WuxueState): string[];
|
|
73
|
+
export declare function getAchievementDefs(): AchievementDef[];
|
|
74
|
+
export declare class ValidationError extends Error {
|
|
75
|
+
readonly field: string;
|
|
76
|
+
constructor(field: string, message: string);
|
|
77
|
+
}
|
|
78
|
+
/** 校验 WuxueState 的完整性 */
|
|
79
|
+
export declare function validateWuxueState(state: unknown): asserts state is WuxueState;
|
|
80
|
+
/** 校验 Element 类型 */
|
|
81
|
+
export declare function validateElement(el: string): asserts el is Element;
|
|
82
|
+
/** 校验武器 ID 有效性 */
|
|
83
|
+
export declare function validateWeaponId(id: string): void;
|
|
84
|
+
/** 校验武功 ID 有效性 */
|
|
85
|
+
export declare function validateSkillId(id: string): void;
|
|
86
|
+
/** 校验 Boss ID 有效性 */
|
|
87
|
+
export declare function validateBossId(id: string): void;
|
|
88
|
+
/** 校验道具 ID 有效性 */
|
|
89
|
+
export declare function validateItemId(id: string): void;
|