Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
canmoumou
追书人
提交
b7b7ea59
追
追书人
项目概览
canmoumou
/
追书人
与 Fork 源项目一致
Fork自
inscode / ChatGPT With Prompt
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
追
追书人
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b7b7ea59
编写于
11月 23, 2023
作者:
U
u013013023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Auto Commit
上级
a249e066
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
169 addition
and
22 deletion
+169
-22
src/App.vue
src/App.vue
+169
-22
未找到文件。
src/App.vue
浏览文件 @
b7b7ea59
...
...
@@ -14,7 +14,7 @@
<Button
type=
"primary"
size=
"large"
icon=
"md-send"
:loading=
"loading"
@
click=
"handleSend"
>
发送
</Button>
</Col>
<Col>
<Button
size=
"large"
class=
"ivu-ml"
icon=
"md-add"
:disabled=
"loading"
@
click=
"handleNewChat"
>
新
对话
</Button>
<Button
size=
"large"
class=
"ivu-ml"
icon=
"md-add"
:disabled=
"loading"
@
click=
"handleNewChat"
>
新
的一局
</Button>
</Col>
<Col>
<Button
size=
"large"
class=
"ivu-ml"
icon=
"md-settings"
:disabled=
"loading"
@
click=
"handleOpenPrompt"
v-if=
"showPersonalButton"
>
个人信息
</Button>
...
...
@@ -48,11 +48,11 @@ import { apiKey, apiUrl } from './api';
let
prompt
=
''
;
let
start_prompt
=
"
请扮演克苏鲁主题,COC模组的keeper,引导我做各种行动.
"
+
"
背景:1992年, 一位未解之谜探索协会(SEU)的调查员,来到密歇根市,调查托马斯·金博尔家的书籍失窃案.
"
"
背景:1992年, 一位未解之谜探索协会(SEU)的调查员,来到密歇根市,调查托马斯·金博尔家的书籍失窃案.
"
+
"
托马斯·金博尔居住在艾尔斯伯里大街 218 号的一栋小屋,热爱读书, 但最近他家里似乎遭了贼,被盗的是一些他叔叔最喜欢的书.
"
+
"
这个谜团有些不同寻常,这位叔叔在一年前就神秘失踪,没有留下任何踪迹.
"
+
"
因此,托马斯·金博尔请求调查员调查这起偷书案,同时查明他的叔叔道格拉斯失踪的原因,并承诺提供报酬.
"
;
//
"以下是我作为调查员的个人信息:";
"
因此,托马斯·金博尔请求调查员调查这起偷书案,同时查明他的叔叔道格拉斯失踪的原因,并承诺提供报酬.
"
+
"
以下是我作为调查员的个人信息:
"
;
let
checking_prompt
=
"
请你扮演coc模组的keeper,现在回复我信息,再回复我调查阶段可以做的事.
"
+
"
调查阶段可做的事:
"
;
// 1.询问附近居民;2.查看墓地周边;3.在图书馆调查本地消息;4.询问警方;5.查阅本地报纸《阿诺兹堡广告报》的旧刊6.查看金博尔家周边.7.结束调查.";
...
...
@@ -69,35 +69,41 @@ let checking_info = {
"
<br>检定成功信息:奥戴尔夫人会说起她在这里已经住了很久,而且她记得在道格拉斯·金博尔还住在墓地旁边的一栋屋子时见过他。
"
+
"
她回忆说,大多数日子里都能看见他胳膊下夹着本书走向墓地。“他总是在读书。” 奥戴尔夫人已经有好多年没见过老金博尔了。
"
+
"
“他是过世了吗?”说完她补充道,“我认为他侄子继承了这栋房子。”在这简短的对话之后,奥黛尔女士祝福调查员好运,并且走开了。
"
,
2
:
"
<br>调查信息:墓地周围的植被比较茂盛,但打理得还不错,墓穴与墓碑之间点缀着许多高大的灌木和古老的树木。这片
"
+
"
墓地显然已经存在好多年了。调查员探索此地时,会看见一名园艺工正在公墓的另一头清理杂草。听见调查员靠近,他会转过身并挥手示意。
"
+
"
<br>检定成功信息:梅洛迪亚斯·杰弗逊是这片墓地的守墓人,他已在这里工作了二十多年。如果调查员上前询问,那就让他进行一次魅惑或说服检定,看看杰弗逊是否愿意聊聊。
"
+
"
<br>检定失败信息:这位看守表现得兴致寥寥,并且会说他还有工作要忙,没空站着闲聊。
"
,
3
:
"
<br>调查信息:在本地图书馆,一次成功的图书馆使用检定会将调查员引向《阿诺兹堡广告报》。
"
+
"
<br>检定成功信息:一篇十多年前的报道中提及,有人声称看见一群明显未着寸缕的人在毗邻金博尔宅的墓地里狂欢嬉戏。
"
+
"
警察接报赶到并搜索了整片公墓,但他们始终未能找到这批怪人的踪迹。尽管如此,形状怪异的脚印无言地证明他们确实存在过;
"
+
"
<br>检定失败信息:调查员需要花费更多的时间,但他们在图书馆花费了太多时间,以至于错过了闭馆时间并且被锁在图书馆里。需要用机械维修或锁匠技能打开正门的锁,或者可以运用力量来撞破门窗。
"
,
"
<br>检定失败信息:调查员需要花费更多的时间,但他们在图书馆花费了太多时间,以至于错过了闭馆时间并且被锁在图书馆里。
"
+
"
需要用机械维修或锁匠技能打开正门的锁,或者可以运用力量来撞破门窗。
"
,
4
:
"
<br>调查信息:调查员前往警局,就可以询问是最近是否在这片居民区发生过入室盗窃,或者在附近区域是否有目击或者拘捕过可疑人员。
"
+
"
调查员的职位和警察关系好则直接告知信息,与警察关系不好则需要过法律、魅惑或说服检定。
"
+
"
<br>检定成功信息:随机给出以下内容, 1.关于附近地区的入室盗窃案,已经有一段时间没有入室盗窃案报案了;2.询问公墓的情况,公墓坐落在一个僻静的街区,约六七年以前,曾经有报告称这处墓地在深夜传出了奇怪的声响;
"
+
"
<br>检定成功信息:随机给出以下内容, 1.关于附近地区的入室盗窃案,已经有一段时间没有入室盗窃案报案了;2.询问公墓的情况,公墓坐落在一个僻静的街区,
"
+
"
约六七年以前,曾经有报告称这处墓地在深夜传出了奇怪的声响;
"
+
"
3.关于托马斯·金博尔失踪的叔叔道格拉斯,值班警官记得曾经道格拉斯·金博尔发过一份寻人启事,并且他的照片也广为传播,但始终没有找到这个人。
"
+
"
<br>检定失败信息:警官会因为太过繁忙而想要把调查员们打发走,告诉他们明天再来。
"
,
5
:
"
<br>调查信息:如果调查员是记者或作家,则无需检定。从事其他职业的人必须通过魅惑/说服/话术检定来说服对方允许自己进入报社资料室。如果他们获得了许可,让他们进行一次图书馆使用检定。
"
+
5
:
"
<br>调查信息:如果调查员是记者或作家,则无需检定。从事其他职业的人必须通过魅惑/说服/话术检定来说服对方允许自己进入报社资料室。如果他们获得了许可,
"
+
"
让他们进行一次图书馆使用检定。
"
+
"
<br>检定成功信息: 在1~3小时内,调查员找到了一位记者留下的笔记,其中有一段从未发表的与墓地相关的陈述,来自现年 64 岁,患有失眠症的邻居希尔达·沃德女士。
"
+
"
她声称在二十多年间她时常看见“魔鬼的子嗣”出没于墓地附近。尽管外观轮廓和人类相似,她声称它们有犬类的特征,足部呈蹄状,浑身沾满腐烂的泥土。
"
,
"
她声称在二十多年间她时常看见“魔鬼的子嗣”出没于墓地附近。尽管外观轮廓和人类相似,她声称它们有犬类的特征,足部呈蹄状,浑身沾满腐烂的泥土。
"
+
"
<br>检定失败信息:调查员没能在图书馆找到信息,你可以决定他们是否能在这里找到,因为报纸的旧刊上可能刊登了那个故事。
"
,
6
:
"
<br>调查信息:托马斯·金博尔已经搬进了房子里除了书房之外的所有房间。他叔叔的藏书塞满了整个书房,
"
+
"
这些书籍大小不一、形制各异,并且内容涵盖各个方面。这些书籍的唯一共同特征,就是它们的主人显然花了很多心思来保养它们。
"
+
"
搜索整个书房至少需要一天时间。调查员应做一次侦查检定,若成功,他会找到一本日记。
"
+
"
<br>检定成功信息:最后一条日记写于道格拉斯·金博尔失踪日的前一天。这条日记隐晦地提及他已经“做出决定”,要加入“我在地下的朋友们”。
"
+
"
除此以外,其他更早的日记条目似乎在暗示着公墓地下存在一个隧道网络,其中居住着道格拉斯在晚上看见的出没于墓地周边的神秘“生物”。
"
+
"
<br>检定失败信息:要是调查员没能找到日记,一次成功的孤注一掷意味着他们还是找到了这条信息, 但在此过程中,他们碰倒了一摞书籍,还摔碎了一个花瓶或是其他精致的物件,不得不赔钱。
"
,
7
:
"
假设调查员已经尝试过寻找上述段落中提及的(图书馆、报纸、邻居等)部分或者全部线索。不必前往上述所有地点,但应该获得的线索应当足够让我把注意力集中到金博尔家和墓地上。
"
7
:
"
假设调查员已经尝试过寻找上述段落中提及的(图书馆、报纸、邻居等)部分或者全部线索。不必前往上述所有地点,但应该获得的线索应当足够让我把注意力集中到金博尔家和墓地上。
"
,
};
let
action_info_1
=
[
"
检查道格拉斯·金博尔最喜欢的墓碑这块旧墓碑多年来饱经风雨洗礼,表面光滑,是适合高坐读书的绝佳地点。也因为墓碑风化严重的关系,无法辨认墓主的身份。
"
+
"
如果调查员查看四周的话,让其做一次侦查或追踪检定。如果检定成功,他会注意到墓碑周围有若干奇怪的足迹,看上去像是脚趾处呈偶蹄状的成年人赤足留下的。
"
,
"
如果调查员查看四周的话,让其做一次侦查或追踪检定。如果检定成功,他会注意到墓碑周围有若干奇怪的足迹,看上去像是脚趾处呈偶蹄状的成年人赤足留下的。
"
+
"
如果调查员想沿着这些足迹一路穿过墓地,他会被引到一座陵墓的门前。
"
,
"
如果调查员想要打开墓门,他需要成功进行一次力量检定;如果失败,他可以取铲子或者其他工具来撬门,以此再作尝试。陵墓的门打开时会释放出其中积蓄的一股可怕腐臭。
"
+
...
...
@@ -107,14 +113,15 @@ let action_info_1 = [
"
让调查员做一次导航检定,看看他是否会迷失方向。如果检定失败,他将在隧道中兜兜转转,直到他精疲力竭,必须停下来休息。
"
+
"
无论是哪种情况下,时间都已经流逝,而夜晚正要降临。在调查员试图找到离开隧道的路时,他会在返回地面的途中和道格拉斯·金博尔不期而遇。
"
+
"
无视隧道网:如果调查员找到了隧道但并没有下去,当晚道格拉斯会来到地面并进入金博尔家。如果调查员针对那名神秘飞贼设岗监视,则转到“监视屋子或墓地”部分(下个段落);
"
+
"
否则,如果调查员正在熟睡,道格拉斯会来到调查员的房间并唤醒他,因为他想和调查员交谈
——详见“如果调查员试图和人影交谈”部分。
"
+
"
与食尸鬼道格拉斯相见:食尸鬼道格拉斯对调查员说的话以及这次见面可能带来的理智损失
,详见“如果调查员试图和人影交谈”部分
"
+
"
否则,如果调查员正在熟睡,道格拉斯会来到调查员的房间并唤醒他,因为他想和调查员交谈
.
"
+
"
与食尸鬼道格拉斯相见:食尸鬼道格拉斯对调查员说的话以及这次见面可能带来的理智损失
.
"
+
"
如果调查员试图和人影交谈:食尸鬼道格拉斯对调查员说的话以及这次见面可能带来的理智损失.
"
,
];
let
action_info_2
=
[
"
监视屋子或墓地:若在金博尔家和(或)公墓外设岗监视,那么调查员每晚应进行一次幸运检定。
"
+
"
检定成功的那个夜晚,一条人影离开公墓,径直前往金博尔宅,并且通过书房的窗户进入屋内。
"
+
"
若在金博尔家和(或)公墓外设岗监视,那么调查员每晚应进行一次幸运检定。
"
+
"
若在金博尔家和(或)公墓外设岗监视,那么调查员每晚应进行一次幸运检定。
"
,
"
检定成功的那个夜晚,一条人影离开公墓,径直前往金博尔宅,并且通过书房的窗户进入屋内。
"
+
"
如果调查员尝试攻击这个人影(实际上是道格拉斯·金博尔,但先不要告诉玩家),
"
+
"
那就让他作格斗(斗殴)检定来看攻击是否命中。守秘人则需要为人影投掷闪避技能,以此决定他是否能躲开这次攻击。
"
+
"
道格拉斯的闪避技能是30% (15/6)。守秘人(代表道格拉斯)和玩家都应投掷百分骰,并要将道格拉斯的闪避结果和调查员的斗殴结果对比。
"
];
...
...
@@ -149,7 +156,7 @@ let results_info_2 = ["调查员成功杀死人影或让它失去行动能力"+
"
第二次理智检定是因为意识到这头食尸鬼正是失踪的道格拉斯·金博尔!
"
];
let
final
=
[
"
针对模组中的这个困局,玩家可能会提出全新的或是不同的解决方案。用水泥封闭坟墓并不会对食尸鬼群体有什么影响,它们本就要废弃这处墓地。
"
+
"
你告诉调查员,可以自行决定是将关于道格拉斯的真相告诉托马斯·金博尔,还是将其隐瞒下来,秘而不宣。
"
]
"
你告诉调查员,可以自行决定是将关于道格拉斯的真相告诉托马斯·金博尔,还是将其隐瞒下来,秘而不宣。
报酬是10美元。(大约相当于如今的240美金)故事结束,如果想要重新开始,可以选择下方的按钮发起新对话。
"
]
export
default
{
data
()
{
...
...
@@ -161,15 +168,140 @@ export default {
showPrompt
:
false
,
showPersonalButton
:
true
,
status_id
:
0
,
status_info
:
""
,
action_id
:
0
,
result_id
:
0
,
pre_action
:
0
,
checking_list
:{
1
:
"
1.询问附近居民;
"
,
2
:
"
2.查看墓地周边;
"
,
3
:
"
3.在图书馆调查本地消息;
"
,
4
:
"
4.询问警方;
"
,
5
:
"
5.查阅本地报纸《阿诺兹堡广告报》的旧刊
"
,
6
:
"
6.查看金博尔家周边;
"
,
7
:
"
7.结束调查.
"
},
action_list
:{
1
:
"
1.检查道格拉斯·金博尔最喜欢的墓碑;
"
,
2
:
"
2调查墓地中的隧道;
"
,
3
:
"
3.监视屋子或墓地.
"
},
status_list
:
status_prompt
,
action_info
:[
action_info_1
,
action_info_2
,
action_info_3
]
checking_info
:
checking_info
,
action_info
:{
1
:
action_info_1
,
2
:
action_info_2
},
result_info
:{
1
:
results_info_1
,
2
:
results_info_2
},
personal_info
:
""
,
last_sender
:
""
,
final
:
final
,
}
},
methods
:
{
handleKeeper
(){
console
.
log
(
this
.
status_id
);
switch
(
this
.
status_id
)
{
case
0
:
// start
return
this
.
getStart
();
case
1
:
// checking
return
this
.
getCheckingPrompt
();
case
2
:
// action
return
this
.
getActionPrompt
();
case
3
:
// result
return
this
.
getResultPrompt
();
default
:
return
this
.
getEnd
();
}
},
getStart
(){
this
.
status_id
=
1
;
return
this
.
status_prompt
[
0
]
+
this
.
personal_info
;
},
getCheckingPrompt
(){
let
sender
=
this
.
last_sender
;
let
context
=
""
;
let
remove_from_list
=
[]
if
(
sender
.
search
(
"
居民
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
1
];
remove_from_list
.
append
(
1
);
}
if
(
sender
.
search
(
"
墓地
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
2
];
remove_from_list
.
append
(
2
);
}
if
(
sender
.
search
(
"
图书馆
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
3
];
remove_from_list
.
append
(
3
);
}
if
(
sender
.
search
(
"
居民
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
4
];
remove_from_list
.
append
(
4
);
}
if
(
sender
.
search
(
"
报纸
"
)
!==
-
1
||
str
.
search
(
"
阿诺兹堡广告报
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
5
];
remove_from_list
.
append
(
5
);
}
if
(
sender
.
search
(
"
金博尔家
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
6
];
remove_from_list
.
append
(
6
);
}
if
(
sender
.
search
(
"
结束
"
)
!==
-
1
){
context
=
context
+
this
.
checking_info
[
7
];
remove_from_list
.
append
(
7
);
this
.
checking_list
=
{};
this
.
status_id
=
2
;
}
for
(
i
=
0
;
i
<
length
(
remove_from_list
);
i
++
){
let
ele_idx
=
remove_from_list
[
i
]
if
(
this
.
checking_list
.
hasKey
(
ele_idx
))
{
delete
this
.
checking_list
[
ele_idx
];
}
}
return
context
+
this
.
status_prompt
[
1
]
+
str
(
this
.
checking_list
)
+
"
<br>调查员信息:
"
+
this
.
personal_info
;
},
getActionPrompt
(){
let
sender
=
this
.
last_sender
;
let
context
=
""
;
if
(
self
.
action_id
==
0
){
context
=
str
(
this
.
action_list
);
self
.
action_id
=
self
.
action_id
+
1
;
return
context
+
this
.
status_prompt
[
2
]
+
"
<br>调查员信息:
"
+
this
.
personal_info
;
}
if
(
self
.
action_id
==
1
){
if
(
sender
.
search
(
"
监视
"
)
!=-
1
){
self
.
result_id
=
2
;
context
=
self
.
action_info
[
2
];
this
.
pre_action
=
2
;
}
else
{
self
.
result_id
=
1
;
context
=
self
.
action_info
[
1
];
this
.
pre_action
=
1
;
}
self
.
action_id
=
self
.
action_id
+
1
;
return
context
[
0
]
+
this
.
status_prompt
[
2
]
+
"
<br>调查员信息:
"
+
this
.
personal_info
;
}
if
(
self
.
action_id
==
2
){
if
(
sender
.
search
(
"
交谈
"
)
!=-
1
||
sender
.
search
(
"
对话
"
)
!=-
1
||
sender
.
search
(
"
对话
"
)
!=-
1
||
sender
.
search
(
"
相见
"
)
!=-
1
){
self
.
result_id
=
1
;
}
if
(
sender
.
search
(
"
战斗
"
)
!=-
1
||
sender
.
search
(
"
攻击
"
)
!=-
1
||
sender
.
search
(
"
格斗
"
)
!=-
1
||
sender
.
search
(
"
闪避
"
)
!=-
1
){
self
.
result_id
=
2
;
}
if
(
this
.
pre_action
==
1
){
context
=
self
.
action_info
[
1
];
}
else
{
context
=
self
.
action_info
[
2
];
}
self
.
action_id
=
self
.
action_id
+
1
;
self
.
status_id
=
3
;
return
context
[
1
]
+
this
.
status_prompt
[
2
]
+
"
<br>调查员信息:
"
+
this
.
personal_info
;
}
},
getResultPrompt
(){
let
context
=
""
;
if
(
self
.
result_id
==
2
){
context
=
str
(
self
.
result_info
[
2
]);
}
else
{
context
=
str
(
self
.
result_info
[
1
]);
}
return
context
+
this
.
status_prompt
[
3
]
+
"
<br>调查员信息:
"
+
this
.
personal_info
;
},
getEnd
(){
return
this
.
final
+
"
<br>调查员信息:
"
+
this
.
personal_info
;
},
handleInit
()
{
this
.
$Message
.
error
({
content
:
'
不要用沉默回复我
'
,
...
...
@@ -183,6 +315,7 @@ export default {
const
question
=
this
.
question
;
this
.
question
=
''
;
this
.
last_sender
=
this
.
question
;
this
.
dialogs
.
push
({
id
:
this
.
dialogs
.
length
+
1
,
...
...
@@ -206,6 +339,7 @@ export default {
* 发布到社区后,将消耗运行者的额度
* 注意:如果部署应用,任何人通过部署后的域名访问应用时,都将消耗部署者的额度
*/
prompt
=
this
.
handleKeeper
();
const
body
=
{
messages
:
[
{
...
...
@@ -248,8 +382,18 @@ export default {
});
},
handleNewChat
()
{
this
.
checking_list
=
{
1
:
"
1.询问附近居民;
"
,
2
:
"
2.查看墓地周边;
"
,
3
:
"
3.在图书馆调查本地消息;
"
,
4
:
"
4.询问警方;
"
,
5
:
"
5.查阅本地报纸《阿诺兹堡广告报》的旧刊
"
,
6
:
"
6.查看金博尔家周边;
"
,
7
:
"
7.结束调查.
"
};
this
.
action_list
=
{
1
:
"
1.检查道格拉斯·金博尔最喜欢的墓碑;
"
,
2
:
"
2调查墓地中的隧道;
"
,
3
:
"
3.监视屋子或墓地.
"
};
this
.
dialogs
=
[
""
];
this
.
showPersonalButton
=
false
;
this
.
showPersonalButton
=
true
;
this
.
personal_info
=
""
;
this
.
status_id
=
0
;
this
.
action_id
=
0
;
this
.
result_id
=
0
;
this
.
pre_action
=
0
;
},
handleOpenPrompt
()
{
this
.
showPrompt
=
true
;
...
...
@@ -265,12 +409,15 @@ export default {
background
:
true
});
}
else
{
const
pre_promt
=
this
.
status_info
[
this
.
status_id
]
const
prompt
=
pre_promt
+
this
.
prompt
;
localStorage
.
setItem
(
'
setting-prompt
'
,
prompt
);
// const pre_promt=this.handleKeeper()
const
prompt
=
this
.
prompt
;
this
.
personal_info
=
this
.
prompt
;
this
.
showPersonalButton
=
false
;
this
.
showPrompt
=
false
;
localStorage
.
setItem
(
'
setting-prompt
'
,
prompt
);
this
.
handleLoadPrompt
();
this
.
showPersonalButton
=
false
;
}
},
handleLoadPrompt
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录