-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoccupation_data.py
More file actions
709 lines (662 loc) · 29.9 KB
/
Copy pathoccupation_data.py
File metadata and controls
709 lines (662 loc) · 29.9 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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
"""
CoC 7版 职业数据库
包含30+职业的完整信息,用于角色创建系统
"""
from typing import List, Tuple, Dict, Optional
from pydantic import BaseModel, Field
class Occupation(BaseModel):
"""职业模型"""
id: str = Field(..., description="职业唯一标识")
name: str = Field(..., description="职业名称(中文)")
name_en: str = Field(..., description="职业名称(英文)")
description: str = Field(..., description="职业描述")
credit_rating: Tuple[int, int] = Field(..., description="信用评级范围 [最小值, 最大值]")
occupation_skills: List[str] = Field(..., description="职业技能列表")
occupation_skill_points: str = Field(default="EDU×4", description="职业技能点计算公式")
personal_skill_points: str = Field(default="INT×2", description="兴趣技能点计算公式")
suggested_contacts: List[str] = Field(default_factory=list, description="建议联系人")
era: str = Field(default="1920s", description="时代背景")
icon: Optional[str] = Field(default=None, description="图标emoji或URL")
# ============================================================================
# 职业数据库 - 30+ 职业
# ============================================================================
OCCUPATIONS: Dict[str, Occupation] = {
# 1. 私家侦探
"private_investigator": Occupation(
id="private_investigator",
name="私家侦探",
name_en="Private Investigator",
description="你靠调查他人的秘密谋生。无论是追踪失踪人口、调查婚外情,还是收集商业情报,你都游刃有余。你的工作需要敏锐的观察力、出色的交际能力,以及必要时的威慑力。",
credit_rating=(9, 30),
occupation_skills=[
"Art/Craft (Photography)", # 艺术/手艺(摄影)
"Disguise", # 伪装
"Law", # 法律
"Library Use", # 图书馆使用
"Psychology", # 心理学
"Spot Hidden", # 侦察
"任选两项:Charm, Fast Talk, Intimidate, Persuade", # 魅惑、话术、威慑、说服
"任选一项:Locksmith, Firearms (Handgun), Fighting (Brawl)" # 开锁、射击、斗殴
],
suggested_contacts=["警察局线人", "报社记者", "律师", "当地黑帮"],
icon="🔍"
),
# 2. 大学教授
"professor": Occupation(
id="professor",
name="大学教授",
name_en="Professor",
description="你在高等学府传道授业,是某个学术领域的权威。多年的研究让你积累了丰富的知识,图书馆就像你的第二个家。你的学生和同事敬重你,但有时你会因过于专注学术而忽视现实危险。",
credit_rating=(20, 70),
occupation_skills=[
"Library Use", # 图书馆使用
"Other Language", # 其他语言
"Own Language", # 母语
"Psychology", # 心理学
"任选四项学术技能:Anthropology, Archaeology, History, Natural World, Occult, Science"
],
suggested_contacts=["学术界同行", "图书馆馆长", "博物馆馆长", "出版商"],
icon="🎓"
),
# 3. 调查记者
"journalist": Occupation(
id="journalist",
name="调查记者",
name_en="Journalist (Investigative)",
description="你追求真相,揭露黑幕。无论是政府腐败还是企业丑闻,你都会穷追不舍。你的笔比剑更锋利,你的报道能改变公众舆论,甚至扳倒权贵。",
credit_rating=(9, 30),
occupation_skills=[
"Art/Craft (Photography)", # 艺术/手艺(摄影)
"History", # 历史
"Library Use", # 图书馆使用
"Own Language", # 母语
"Psychology", # 心理学
"任选两项:Charm, Fast Talk, Intimidate, Persuade",
"任选一项:Art (any), Science (any)"
],
suggested_contacts=["编辑", "政界人士", "警察", "犯罪界线人"],
icon="📰"
),
# 4. 医生 (内科/精神科)
"doctor": Occupation(
id="doctor",
name="医生",
name_en="Doctor of Medicine",
description="你拯救生命,治愈伤痛。无论是内科、外科还是精神科,你都接受过严格的医学训练。你见过太多生死,了解人体的脆弱,也懂得心灵的创伤。",
credit_rating=(30, 80),
occupation_skills=[
"First Aid", # 急救
"Medicine", # 医学
"Other Language (Latin)", # 其他语言(拉丁语)
"Psychology", # 心理学
"Science (Biology)", # 科学(生物学)
"Science (Pharmacy)", # 科学(药学)
"任选两项:Charm, Fast Talk, Persuade, Science (any)"
],
suggested_contacts=["医院同事", "药剂师", "心理医生", "验尸官"],
icon="⚕️"
),
# 5. 警察侦探
"police_detective": Occupation(
id="police_detective",
name="警察侦探",
name_en="Police Detective",
description="你是执法部门的精英,专门调查复杂案件。从谋杀到绑架,你见过人性最黑暗的一面。你有权力、有资源,但也受制于官僚体系和法律约束。",
credit_rating=(20, 50),
occupation_skills=[
"Firearms", # 射击
"Fighting (Brawl)", # 斗殴
"Law", # 法律
"Listen", # 聆听
"Psychology", # 心理学
"Spot Hidden", # 侦察
"任选两项:Charm, Fast Talk, Intimidate, Persuade, Stealth"
],
suggested_contacts=["警局同事", "法医", "线人", "检察官"],
icon="👮"
),
# 6. 律师
"lawyer": Occupation(
id="lawyer",
name="律师",
name_en="Lawyer",
description="你精通法律,善于辩论。无论是为富商辩护,还是为弱者伸张正义,你都能运用法律武器。法庭是你的战场,证据和逻辑是你的利剑。",
credit_rating=(30, 80),
occupation_skills=[
"Accounting", # 会计
"Law", # 法律
"Library Use", # 图书馆使用
"Listen", # 聆听
"Own Language", # 母语
"Psychology", # 心理学
"任选两项:Charm, Fast Talk, Intimidate, Persuade"
],
suggested_contacts=["法官", "警察", "犯罪分子", "政界人士"],
icon="⚖️"
),
# 7. 作家/文学家
"author": Occupation(
id="author",
name="作家",
name_en="Author",
description="你用文字编织故事,创造世界。你的作品可能是小说、诗歌或学术著作。敏锐的观察力和丰富的想象力是你的财富,但写作的孤独有时会让你与现实脱节。",
credit_rating=(9, 30),
occupation_skills=[
"Art (Literature)", # 艺术(文学)
"History", # 历史
"Library Use", # 图书馆使用
"Natural World or Occult", # 自然学 或 神秘学
"Other Language", # 其他语言
"Own Language", # 母语
"Psychology", # 心理学
"任选一项:Charm, Fast Talk, Persuade"
],
suggested_contacts=["出版商", "编辑", "评论家", "其他作家"],
icon="✍️"
),
# 8. 古董商/收藏家
"antiquarian": Occupation(
id="antiquarian",
name="古董商",
name_en="Antiquarian",
description="你对古老物品有着深厚的鉴赏力。无论是古籍、艺术品还是神秘文物,你都能辨别真伪、追溯来历。你的收藏室里藏着许多不为人知的秘密。",
credit_rating=(30, 70),
occupation_skills=[
"Appraise", # 估价
"Art/Craft (any)", # 艺术/手艺
"History", # 历史
"Library Use", # 图书馆使用
"Other Language", # 其他语言
"Spot Hidden", # 侦察
"任选一项:Charm, Fast Talk, Persuade, Navigate, Science (any)"
],
suggested_contacts=["博物馆馆长", "富有的收藏家", "拍卖行", "学者"],
icon="🏺"
),
# 9. 考古学家
"archaeologist": Occupation(
id="archaeologist",
name="考古学家",
name_en="Archaeologist",
description="你挖掘古代文明的遗迹,揭示被遗忘的历史。从埃及金字塔到玛雅神庙,你的足迹遍布世界。你知道,有些东西被埋葬是有原因的...",
credit_rating=(10, 40),
occupation_skills=[
"Anthropology", # 人类学
"Appraise", # 估价
"Archaeology", # 考古学
"History", # 历史
"Other Language", # 其他语言
"Library Use or Spot Hidden", # 图书馆使用 或 侦察
"Mechanical Repair or Navigate", # 机械维修 或 导航
"Natural World or Science (any)" # 自然学 或 科学
],
suggested_contacts=["博物馆", "大学", "富有的赞助人", "书商"],
icon="⛏️"
),
# 10. 神职人员
"clergy": Occupation(
id="clergy",
name="神职人员",
name_en="Clergy Member (Priest/Minister/Rabbi)",
description="你是信仰的使者,灵魂的牧者。你倾听忏悔,给予安慰,对抗邪恶。你相信上帝的力量,但面对未知的恐怖时,信仰是否足够?",
credit_rating=(9, 60),
occupation_skills=[
"Accounting", # 会计
"History", # 历史
"Library Use", # 图书馆使用
"Listen", # 聆听
"Other Language", # 其他语言
"Psychology", # 心理学
"任选两项:Charm, Fast Talk, Persuade"
],
suggested_contacts=["教区信徒", "慈善机构", "社区领袖"],
icon="⛪"
),
# 11. 刑事调查员
"detective": Occupation(
id="detective",
name="刑事调查员",
name_en="Detective (Private or Police)",
description="与警察侦探类似,但可能是私人侦探。你专注于案件调查,运用逻辑和直觉破解谜团。",
credit_rating=(20, 45),
occupation_skills=[
"Art/Craft (Photography or Disguise)",
"Fighting or Firearms",
"Law or Psychology",
"Library Use",
"Spot Hidden",
"Stealth or Locksmith",
"任选两项:Charm, Fast Talk, Intimidate, Persuade"
],
suggested_contacts=["警方", "法律界", "街头消息来源"],
icon="🕵️"
),
# 12. 工程师
"engineer": Occupation(
id="engineer",
name="工程师",
name_en="Engineer (Civil/Mechanical/Electrical)",
description="你设计桥梁、建筑、机器或电气系统。你的技术知识让你能理解和修复复杂设备,也能识别异常的机械构造。",
credit_rating=(30, 60),
occupation_skills=[
"Art/Craft (Technical Drawing)", # 艺术/手艺(技术制图)
"Electrical Repair or Mechanical Repair", # 电气维修 或 机械维修
"Library Use", # 图书馆使用
"Operate Heavy Machinery", # 操作重型机械
"Science (Physics or Chemistry)", # 科学(物理或化学)
"Science (Mathematics)", # 科学(数学)
"任选两项:Accounting, Computer Use, Drive Auto, Persuade"
],
suggested_contacts=["建筑师", "承包商", "学术界", "政府部门"],
icon="🔧"
),
# 13. 演员/表演者
"entertainer": Occupation(
id="entertainer",
name="演员",
name_en="Entertainer (Actor/Musician)",
description="你在舞台或银幕上表演,用才艺吸引观众。你擅长伪装情感、模仿他人,也懂得如何魅惑人心。",
credit_rating=(9, 70),
occupation_skills=[
"Art/Craft (Acting or Singing or Dance)", # 表演、唱歌或舞蹈
"Disguise", # 伪装
"Listen", # 聆听
"Psychology", # 心理学
"任选两项:Charm, Fast Talk, Persuade",
"任选两项:Appraise, Art/Craft (any), Climb, Drive Auto, Firearms, History, Jump, Other Language, Ride, Sleight of Hand, Swim, Throw"
],
suggested_contacts=["制片人", "媒体", "粉丝", "评论家"],
icon="🎭"
),
# 14. 农民/渔夫
"farmer": Occupation(
id="farmer",
name="农民",
name_en="Farmer/Fisherman",
description="你与土地或海洋打交道,依靠自然为生。你了解动植物,懂得天气变化,有着朴实的智慧和强健的体魄。",
credit_rating=(9, 30),
occupation_skills=[
"Appraise (livestock, crops)", # 估价(牲畜、作物)
"Drive Auto or Ride", # 驾驶汽车 或 骑术
"First Aid", # 急救
"Listen or Spot Hidden", # 聆听 或 侦察
"Mechanical Repair or Natural World", # 机械维修 或 自然学
"Natural World", # 自然学
"Navigate or Track", # 导航 或 追踪
"Operate Heavy Machinery or Swim" # 操作重型机械 或 游泳
],
suggested_contacts=["当地社区", "商人", "兽医"],
icon="🚜"
),
# 15. 黑帮成员/罪犯
"gangster": Occupation(
id="gangster",
name="黑帮成员",
name_en="Gangster/Criminal",
description="你在法律的边缘行走,或许是黑帮打手、走私犯或职业窃贼。你懂得街头规则,知道如何在危险中生存。",
credit_rating=(9, 60),
occupation_skills=[
"Fighting or Firearms", # 斗殴 或 射击
"Intimidate or Persuade", # 威慑 或 说服
"Locksmith or Mechanical Repair", # 开锁 或 机械维修
"Psychology", # 心理学
"Sleight of Hand or Stealth", # 巧手 或 潜行
"Spot Hidden", # 侦察
"任选两项:Appraise, Charm, Disguise, Drive Auto, Fast Talk, Law, Listen, Operate Heavy Machinery"
],
suggested_contacts=["黑道兄弟", "律师", "警察线人", "贪腐官员"],
icon="🔫"
),
# 16. 调查员(超自然专家)
"parapsychologist": Occupation(
id="parapsychologist",
name="超自然调查员",
name_en="Parapsychologist",
description="你研究超自然现象,从鬼魂到灵能。你可能是大学研究员,也可能是独立的灵异调查者。你试图用科学方法解释无法解释的事物。",
credit_rating=(9, 30),
occupation_skills=[
"Anthropology or History", # 人类学 或 历史
"Art/Craft (Photography)", # 艺术/手艺(摄影)
"Library Use", # 图书馆使用
"Occult", # 神秘学
"Other Language", # 其他语言
"Psychology", # 心理学
"Science (any)", # 科学
"任选一项:Charm, Fast Talk, Persuade"
],
suggested_contacts=["大学", "出版商", "灵媒", "古董商"],
icon="🔮"
),
# 17. 飞行员
"pilot": Occupation(
id="pilot",
name="飞行员",
name_en="Pilot",
description="你驾驶飞机,翱翔天际。无论是民用客机、军用战机还是私人飞机,你都有着精湛的驾驶技术和冷静的判断力。",
credit_rating=(20, 70),
occupation_skills=[
"Electrical Repair or Mechanical Repair", # 电气维修 或 机械维修
"Listen", # 聆听
"Navigate", # 导航
"Operate Heavy Machinery", # 操作重型机械
"Pilot (Aircraft)", # 驾驶(飞机)
"Science (Astronomy)", # 科学(天文学)
"Spot Hidden", # 侦察
"任选一项:Charm, Fast Talk, Persuade, Survival"
],
suggested_contacts=["航空公司", "军方", "走私者", "富有的客户"],
icon="✈️"
),
# 18. 海员/水手
"sailor": Occupation(
id="sailor",
name="海员",
name_en="Sailor/Seaman",
description="你在海上工作,可能是商船船员、海军士兵或捕鲸人。你了解海洋的危险,也见识过风暴的恐怖。",
credit_rating=(9, 40),
occupation_skills=[
"Climb", # 攀爬
"Fighting or Firearms", # 斗殴 或 射击
"First Aid", # 急救
"Mechanical Repair or Electrical Repair", # 机械维修 或 电气维修
"Navigate", # 导航
"Pilot (Boat)", # 驾驶(船)
"Spot Hidden", # 侦察
"Swim" # 游泳
],
suggested_contacts=["海岸警卫队", "其他海员", "码头工人", "走私者"],
icon="⚓"
),
# 19. 科学家
"scientist": Occupation(
id="scientist",
name="科学家",
name_en="Scientist (Biologist/Chemist/Physicist)",
description="你在实验室工作,探索自然法则。你的专业可能是生物学、化学、物理学或其他领域。你相信科学方法,但有些现象会挑战你的认知。",
credit_rating=(20, 70),
occupation_skills=[
"Library Use", # 图书馆使用
"Other Language", # 其他语言
"Own Language", # 母语
"Science (Chemistry, Biology, Physics, etc.)", # 科学(主专业)
"Science (any)", # 科学(第二专业)
"Science (any)", # 科学(第三专业)
"Spot Hidden", # 侦察
"任选一项:Computer Use, Electrical Repair, Mechanical Repair, Photography"
],
suggested_contacts=["学术界", "研究机构", "政府部门", "工业界"],
icon="🔬"
),
# 20. 士兵/军人
"soldier": Occupation(
id="soldier",
name="士兵",
name_en="Soldier/Military Officer",
description="你接受过军事训练,可能参加过战争。你懂得战术、武器,也见识过战场的残酷。退役后,你将这些技能用于新的挑战。",
credit_rating=(9, 70),
occupation_skills=[
"Climb or Swim", # 攀爬 或 游泳
"Dodge", # 闪避
"Fighting", # 斗殴
"Firearms", # 射击
"Stealth or Survival", # 潜行 或 生存
"任选两项:First Aid, Listen, Mechanical Repair, Navigate, Spot Hidden, Throw",
"任选一项:Charm, Fast Talk, Intimidate, Persuade, Psychology"
],
suggested_contacts=["军方", "政府", "军火商", "退伍军人"],
icon="🎖️"
),
# 21. 运动员
"athlete": Occupation(
id="athlete",
name="运动员",
name_en="Athlete (Professional)",
description="你在某项体育运动中达到职业水准。强健的体魄和竞技精神是你的标志,你习惯于在压力下表现。",
credit_rating=(9, 70),
occupation_skills=[
"Climb or Swim", # 攀爬 或 游泳
"Dodge", # 闪避
"Fighting or Firearms", # 斗殴 或 射击
"Jump", # 跳跃
"Ride or Drive Auto", # 骑术 或 驾驶汽车
"Throw", # 投掷
"任选两项:Charm, Fast Talk, Persuade, Listen, Psychology, Spot Hidden"
],
suggested_contacts=["体育界", "媒体", "赞助商", "粉丝"],
icon="🏅"
),
# 22. 银行家/商人
"banker": Occupation(
id="banker",
name="银行家",
name_en="Banker/Businessman",
description="你掌管金钱,理解经济运作。你可能经营银行、投资公司或大型企业。你的社会地位高,人脉广,但也可能树敌众多。",
credit_rating=(20, 90),
occupation_skills=[
"Accounting", # 会计
"Charm or Persuade", # 魅惑 或 说服
"Law", # 法律
"Library Use", # 图书馆使用
"Listen", # 聆听
"Other Language", # 其他语言
"Psychology", # 心理学
"任选一项:Drive Auto, Fast Talk, Intimidate, Ride"
],
suggested_contacts=["商界精英", "政界人士", "法律界", "犯罪组织"],
icon="💼"
),
# 23. 侍者/服务员
"butler": Occupation(
id="butler",
name="管家/侍者",
name_en="Butler/Servant",
description="你服侍富人或贵族,负责管理家务。你见多识广,懂得社交礼仪,也了解雇主的秘密。你的地位虽低,但往往能接触到重要信息。",
credit_rating=(9, 40),
occupation_skills=[
"Accounting", # 会计
"Appraise", # 估价
"Art/Craft (Cooking or Tailoring)", # 艺术/手艺(烹饪或裁缝)
"First Aid", # 急救
"Listen", # 聆听
"Other Language", # 其他语言
"Psychology", # 心理学
"Spot Hidden" # 侦察
],
suggested_contacts=["富人圈", "其他仆人", "商人"],
icon="🤵"
),
# 24. 司机/司机
"chauffeur": Occupation(
id="chauffeur",
name="司机",
name_en="Chauffeur/Driver",
description="你驾驶汽车为生,可能是出租车司机、私人司机或运输司机。你熟悉城市的每条街道,也听说过许多故事。",
credit_rating=(9, 20),
occupation_skills=[
"Drive Auto", # 驾驶汽车
"Listen", # 聆听
"Mechanical Repair", # 机械维修
"Navigate", # 导航
"Spot Hidden", # 侦察
"任选三项:Accounting, Charm, Fast Talk, Intimidate, Persuade, Fighting, Firearms, Stealth"
],
suggested_contacts=["雇主", "其他司机", "机械师", "警察"],
icon="🚗"
),
# 25. 密教徒/神秘学家
"occultist": Occupation(
id="occultist",
name="神秘学家",
name_en="Occultist/Mystic",
description="你研究禁忌知识,探索神秘力量。你可能是占星师、炼金术士或秘密结社成员。你知道世界远比表面复杂,而知识的代价往往是理智。",
credit_rating=(9, 65),
occupation_skills=[
"Anthropology or History", # 人类学 或 历史
"Charm or Persuade", # 魅惑 或 说服
"Library Use", # 图书馆使用
"Occult", # 神秘学
"Other Language", # 其他语言
"Psychology", # 心理学
"Science (Astronomy or Pharmacy)", # 科学(天文学或药学)
"任选一项:Art/Craft (any), Sleight of Hand, Spot Hidden"
],
suggested_contacts=["秘密结社", "古董商", "学者", "收藏家"],
icon="📿"
),
# 26. 摄影师
"photographer": Occupation(
id="photographer",
name="摄影师",
name_en="Photographer",
description="你用镜头记录世界。你可能是新闻摄影师、艺术摄影师或商业摄影师。你的照片能揭示真相,但有时也会拍到不该拍的东西...",
credit_rating=(9, 30),
occupation_skills=[
"Art/Craft (Photography)", # 艺术/手艺(摄影)
"Charm or Persuade", # 魅惑 或 说服
"Psychology", # 心理学
"Spot Hidden", # 侦察
"Stealth", # 潜行
"任选三项:Appraise, Art (any), Climb, Drive Auto, Fast Talk, Listen, Science (Chemistry)"
],
suggested_contacts=["媒体", "画廊", "客户", "暗房技师"],
icon="📷"
),
# 27. 赌徒/骗子
"gambler": Occupation(
id="gambler",
name="赌徒",
name_en="Gambler/Grifter",
description="你靠运气和技巧谋生,在赌桌上赢取财富。你懂得读人心理,擅长欺诈和话术。你的生活充满风险,但你享受刺激。",
credit_rating=(9, 65),
occupation_skills=[
"Accounting", # 会计
"Charm or Sleight of Hand", # 魅惑 或 巧手
"Fast Talk", # 话术
"Listen", # 聆听
"Psychology", # 心理学
"Spot Hidden", # 侦察
"任选两项:Appraise, Art/Craft (any), Disguise, Drive Auto, Fighting, Firearms, Intimidate, Law, Persuade, Stealth"
],
suggested_contacts=["赌场老板", "债主", "黑帮", "其他赌徒"],
icon="🎲"
),
# 28. 流浪汉/漂泊者
"hobo": Occupation(
id="hobo",
name="流浪汉",
name_en="Hobo/Drifter",
description="你四处漂泊,靠打零工和善心人士的施舍为生。你熟悉街头生存之道,了解社会底层的秘密,也见识过常人看不到的黑暗。",
credit_rating=(0, 5),
occupation_skills=[
"Climb", # 攀爬
"Jump", # 跳跃
"Listen", # 聆听
"Navigate", # 导航
"Sleight of Hand or Stealth", # 巧手 或 潜行
"Spot Hidden", # 侦察
"任选两项:Art/Craft (any), Charm, Disguise, Fast Talk, Intimidate, Natural World, Persuade"
],
suggested_contacts=["其他流浪汉", "慈善组织", "黑市商人"],
icon="🎒"
),
# 29. 护士
"nurse": Occupation(
id="nurse",
name="护士",
name_en="Nurse",
description="你在医院或诊所工作,照顾病患。你接受过医护训练,懂得急救和基础医疗。你见过生老病死,也听过许多秘密。",
credit_rating=(9, 30),
occupation_skills=[
"First Aid", # 急救
"Listen", # 聆听
"Medicine", # 医学
"Psychology", # 心理学
"Science (Biology or Pharmacy)", # 科学(生物学或药学)
"Spot Hidden", # 侦察
"任选两项:Charm, Fast Talk, Persuade, Stealth"
],
suggested_contacts=["医生", "患者", "医院行政", "药剂师"],
icon="💉"
),
# 30. 秘书
"secretary": Occupation(
id="secretary",
name="秘书",
name_en="Secretary",
description="你为高层人士处理文书和日常事务。你组织能力强,了解办公室政治,也经常接触机密文件。你是幕后的关键人物。",
credit_rating=(9, 30),
occupation_skills=[
"Accounting", # 会计
"Art/Craft (Typing)", # 艺术/手艺(打字)
"Charm or Persuade", # 魅惑 或 说服
"Library Use", # 图书馆使用
"Listen", # 聆听
"Own Language", # 母语
"Psychology", # 心理学
"任选一项:Computer Use, Drive Auto, Fast Talk, Other Language, Spot Hidden"
],
suggested_contacts=["雇主", "商业圈", "政府部门"],
icon="📋"
),
# 31. 间谍/特工
"spy": Occupation(
id="spy",
name="间谍",
name_en="Spy/Secret Agent",
description="你为政府或组织收集情报。你精通伪装、潜入和情报分析。你的身份是秘密,你的工作充满危险,信任是最稀缺的资源。",
credit_rating=(20, 60),
occupation_skills=[
"Art/Craft (Photography or Disguise)", # 艺术/手艺(摄影或伪装)
"Firearms or Fighting", # 射击 或 斗殴
"Listen", # 聆听
"Other Language", # 其他语言
"Psychology", # 心理学
"Sleight of Hand or Stealth", # 巧手 或 潜行
"Spot Hidden", # 侦察
"任选一项:Charm, Fast Talk, Intimidate, Persuade, Locksmith, Science (any)"
],
suggested_contacts=["情报机构", "外交官", "军方", "线人网络"],
icon="🕴️"
),
# 32. 侦探助理
"dilettante": Occupation(
id="dilettante",
name="业余侦探",
name_en="Dilettante/Amateur Sleuth",
description="你是富有的业余爱好者,出于兴趣调查神秘事件。你不为金钱工作,而是为了刺激和好奇心。你的财富给你自由,但也可能让你小看危险。",
credit_rating=(50, 99),
occupation_skills=[
"Art/Craft (any)", # 艺术/手艺
"Charm or Persuade", # 魅惑 或 说服
"Firearms or Fighting", # 射击 或 斗殴
"Other Language", # 其他语言
"Ride or Drive Auto", # 骑术 或 驾驶汽车
"任选三项:Appraise, History, Library Use, Listen, Natural World, Navigate, Pilot, Psychology, Spot Hidden, Stealth"
],
suggested_contacts=["上流社会", "俱乐部成员", "家族律师", "仆人"],
icon="🧐"
),
}
def get_all_occupations() -> List[Occupation]:
"""获取所有职业列表"""
return list(OCCUPATIONS.values())
def get_occupation_by_id(occupation_id: str) -> Optional[Occupation]:
"""根据ID获取职业"""
return OCCUPATIONS.get(occupation_id)
def search_occupations(query: str) -> List[Occupation]:
"""搜索职业(支持中英文名称和描述搜索)"""
query_lower = query.lower()
results = []
for occ in OCCUPATIONS.values():
if (query_lower in occ.name.lower() or
query_lower in occ.name_en.lower() or
query_lower in occ.description.lower()):
results.append(occ)
return results
def get_occupations_by_credit_rating(min_cr: int, max_cr: int) -> List[Occupation]:
"""根据信用评级范围筛选职业"""
results = []
for occ in OCCUPATIONS.values():
if occ.credit_rating[0] >= min_cr and occ.credit_rating[1] <= max_cr:
results.append(occ)
return results