Player2NPC Talk模块简述

Action 玩家可以通过talk模块与NPC进行对话,对话的内容仅支持文字。 开发者在的到玩家的文字输入后,整合UDP对话包,发送给npc-engine, npc-engine会返回该NPC的回答、动作调用的复合包。 目前,该功能还不支持流响应。请求返回时间大概在2-5秒左右,引入流响应后,可以将返回时间缩短到1秒以内。

engine会返回一个包含action和answer的对话包给游戏端,游戏端可自行决定是否发送action_done包给engine(本模块记忆不需要发送确认包来添加)。

Talk模块UDP请求例

# player2npc的对话包
player2npc_packet = {
    "func":"talk2npc",
    "npc_name":"警员1",
    "time": "2021-01-01 12:00:00", # 游戏世界的时间戳

    # NPC的状态
    "scenario_name": "警察局",
    "npc_state": {
      "position": "雁栖村入口",
      "observation": {
              "people": ["囚犯阿呆","警员2","旅行者小王"],
              "items": ["椅子#1","椅子#2","椅子#3[李大爷占用]","床"],
              "locations": ['牢房', '雁栖村入口']
                    },
      "backpack":["优质西瓜", "大砍刀", "黄金首饰"]
    },
    # player的信息
    "player_name":"旅行者小王",  # player的名字
    "speech_content":"你好,我是旅行者小王, 我要报警, 在林区中好像有人偷砍树",  # player说的话
    "items_visible": ["金丝眼镜", "旅行签证", "望远镜"],  # player身上的物品
    "state": "旅行者小王正在严肃地站着,衣冠规整,手扶着金丝眼镜",  # player状态的自然语言描述,开发者可以随意添加
}

# action_done包例
{
    "func":"action_done",
    "npc_name":"王大妈",
    "status": "success",
    "time": "2021-01-01 12:00:00", # 游戏世界的时间戳

    "scenario_name": "李大爷家", 
    "npc_state": {
      "position": "李大爷家卧室",
      "observation": {
              "people": ["李大爷", "村长", "李飞飞"],
              "items": ["椅子#1","椅子#2","椅子#3[李大爷占用]","床"],
              "locations": ["李大爷家大门","李大爷家后门","李大爷家院子"]
                    },
      "backpack":["优质西瓜", "大砍刀", "黄金首饰"]
    },

    "action":"mov",
    "object":"李大爷家",  # 之前传过来的动作对象
    "parameters":[], # 之前传过来的参数
    "reason": "", # "王大妈在去往‘警察局’的路上被李大爷打断"
}

Talk模块响应数据包

{"name": "talk_result", 
 "npc_name": "警员1",  # NPC 名字 
 "answer": "旅行者小王,请跟我来,我需要你协助我前往林区查看。",  # NPC 回答
 "actions": [{"action": "mov", "object": "林区", "parameters": "", "npc_name": "警员1"}] # NPC动作调用(开发者可选择性使用)
 }