-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.js
More file actions
200 lines (168 loc) · 6.67 KB
/
Copy pathconfig.js
File metadata and controls
200 lines (168 loc) · 6.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
// 狼人杀游戏配置文件
export const GAME_CONFIG = {
// 玩家总数
totalPlayers: 12,
// 角色配置(标准12人局)
roles: {
WEREWOLF: { name: '狼人', team: 'wolf', count: 4, emoji: '🐺' },
VILLAGER: { name: '平民', team: 'village', count: 4, emoji: '👤' },
SEER: { name: '预言家', team: 'village', count: 1, emoji: '🔮' },
WITCH: { name: '女巫', team: 'village', count: 1, emoji: '🧙♀️' },
HUNTER: { name: '猎人', team: 'village', count: 1, emoji: '🏹' },
GUARD: { name: '守卫', team: 'village', count: 1, emoji: '🛡️' }
},
// 游戏阶段
phases: {
NIGHT: 'night',
DAY_DISCUSS: 'day_discuss',
DAY_VOTE: 'day_vote',
GAME_OVER: 'game_over'
},
// 夜晚行动顺序
nightActions: ['GUARD', 'WEREWOLF', 'WITCH', 'SEER'],
// 游戏时长设置(毫秒)
timings: {
discussionPhase: 300000, // 5分钟讨论
votePhase: 60000, // 1分钟投票
nightPhase: 120000 // 2分钟夜晚
}
};
// AI玩家性格模板(用于GLM生成发言)
export const AI_PERSONALITIES = [
{
name: '激进型',
traits: ['主动带节奏', '强势发言', '敢于指认'],
speakingStyle: '直接、强硬、有攻击性'
},
{
name: '谨慎型',
traits: ['观察为主', '逻辑推理', '少发言多分析'],
speakingStyle: '冷静、理性、条理清晰'
},
{
name: '煽动型',
traits: ['善于引导舆论', '制造矛盾', '转移注意力'],
speakingStyle: '煽动性强、善于挑拨'
},
{
name: '沉默型',
traits: ['低调发言', '避免被关注', '关键时候表态'],
speakingStyle: '简洁、不引人注意'
},
{
name: '表演型',
traits: ['情感丰富', '容易激动', '善于表演'],
speakingStyle: '情绪化、富有感染力'
}
];
// GLM API配置
export const GLM_CONFIG = {
// API端点(需要替换为实际的GLM API地址)
endpoint: 'https://open.bigmodel.cn/api/paas/v4/chat/completions',
// 模型选择
model: 'glm-4',
// 生成参数
temperature: 0.8,
maxTokens: 500,
// Prompt模板
prompts: {
// 身份认知提示
identityPrompt: (player, role, game) => `
你现在是狼人杀游戏中的玩家【${player.name}】,座位号${player.seat}号。
你的身份是【${role.name}】,属于${role.team === 'wolf' ? '狼人阵营' : '好人阵营'}。
${role.team === 'wolf' ? `你的狼队友是:${game.players.filter(p => p.role === 'WEREWOLF' && p.id !== player.id).map(p => p.seat + '号').join('、')}` : ''}
游戏当前状态:
- 第${game.round}轮
- 存活玩家:${game.players.filter(p => p.alive).map(p => p.seat + '号').join('、')}
- 已死亡玩家:${game.players.filter(p => !p.alive).map(p => `${p.seat}号(${game.config.roles[p.role].name})`).join('、')}
你的性格是【${player.personality.name}】,特点:${player.personality.traits.join('、')}。
发言风格:${player.personality.speakingStyle}
请根据你的身份和性格,用中文发表一段50-100字的发言。
要求:
1. 符合你的角色身份和阵营利益
2. 体现你的性格特点
3. 有策略性和逻辑性
4. 语言自然,像真人玩家
直接输出发言内容,不要有其他说明。
`,
// 投票决策提示
votePrompt: (player, role, game, candidates) => `
你现在是狼人杀游戏中的玩家【${player.name}】,座位号${player.seat}号。
你的身份是【${role.name}】,属于${role.team === 'wolf' ? '狼人阵营' : '好人阵营'}。
游戏当前状态:
- 第${game.round}轮投票阶段
- 存活玩家:${game.players.filter(p => p.alive).map(p => p.seat + '号').join('、')}
- 可投票对象:${candidates.map(c => c.seat + '号').join('、')}
你的性格是【${player.personality.name}】。
请决定你要投票给谁,并给出理由(30字以内)。
输出格式:
投票:X号
理由:...
直接输出,不要有其他说明。
`,
// 夜晚行动提示(狼人)
werewolfActionPrompt: (player, game) => `
你是${player.seat}号狼人。
当前存活玩家:${game.players.filter(p => p.alive && p.role !== 'WEREWOLF').map(p => p.seat + '号').join('、')}
你的狼队友是:${game.players.filter(p => p.role === 'WEREWOLF' && p.id !== player.id).map(p => p.seat + '号').join('、') || '无'}
请选择今晚要击杀的目标。
输出格式:
击杀:X号
理由:...
直接输出,不要有其他说明。
`,
// 夜晚行动提示(预言家)
seerActionPrompt: (player, game) => `
你是${player.seat}号预言家。
当前存活玩家:${game.players.filter(p => p.alive && p.id !== player.id).map(p => p.seat + '号').join('、')}
已查验过的玩家:${player.checkedPlayers ? player.checkedPlayers.map(p => `${p.seat}号(${p.result})`).join('、') : '无'}
请选择今晚要查验的目标。
输出格式:
查验:X号
理由:...
直接输出,不要有其他说明。
`,
// 夜晚行动提示(女巫)
witchActionPrompt: (player, game, killedPlayer) => `
你是${player.seat}号女巫。
今晚被狼人杀害的是:${killedPlayer ? killedPlayer.seat + '号' : '无人'}
你的毒药:${player.hasPoison ? '有' : '已用'}
你的解药:${player.hasAntidote ? '有' : '已用'}
请决定是否使用药水。
输出格式:
解药:使用/不使用
毒药:使用(X号)/不使用
理由:...
直接输出,不要有其他说明。
`,
// 夜晚行动提示(守卫)
guardActionPrompt: (player, game) => {
const lastGuarded = player.lastGuarded ? player.lastGuarded.seat + '号' : '无';
return `
你是${player.seat}号守卫。
当前存活玩家:${game.players.filter(p => p.alive).map(p => p.seat + '号').join('、')}
上次守护的玩家:${lastGuarded}(不能连续守护同一人)
请选择今晚要守护的目标。
输出格式:
守护:X号
理由:...
直接输出,不要有其他说明。
`;
}
}
};
// 游戏日志模板
export const LOG_TEMPLATES = {
gameStart: '🎮 游戏开始!12位玩家已就座,天黑请闭眼...',
nightStart: '🌙 夜晚降临,请闭眼...',
dayStart: '☀️ 天亮了,昨晚的死者是:',
voteStart: '🗳️ 投票阶段开始',
voteResult: '📊 投票结果:',
playerDeath: '💀 {player}号玩家死亡,身份是【{role}】',
gameEnd: '🎉 游戏结束!{winner}阵营获胜!',
hunterShoot: '🏹 猎人发动技能,带走了{target}号玩家!',
witchSave: '🧙♀️ 女巫使用解药救活了{player}号玩家',
witchPoison: '🧙♀️ 女巫使用毒药毒死了{player}号玩家',
guardProtect: '🛡️ 守卫守护了{player}号玩家',
seerCheck: '🔮 预言家查验了{player}号玩家,结果是:{result}'
};