NPC如何主动进行交互

NPC如何主动进行交互
NPC的任何行为都可以根据需求来驱动。


大部分叙事场景都可以通过自身需求驱动来完成叙事场景,
比如 买东西,点餐,物品交易,打劫,等等。
都可以通过需求驱动来展开叙事场景。

二。
还有很多叙事场景需要NPC主动交互来完成,
比如感谢,打招呼,等,这些都是根据外部环境的变化
而产生的叙事场景。

1.看到了某个熟悉的人,主动打招呼进行交互
2.主动感谢。有人帮你脱离危险后主动感谢。
3.看热闹,有人打架,凑个热闹,询问一下谁和谁在打,因为什么打架,产生一个叙事场景。
4.发现天材地宝,展开叙事场景。
比如,大哥,左边有一个5级灵药,旁边有一只5级守护灵兽,
右边有一个6级灵药,有两只5级守护灵兽,我们好像都打不过,咋办。

比如
点餐叙事场景,你只要检查到你饿了,你就可以向决策系统发送信息
来驱动该行为从而展开叙事场景。
再比如
打劫叙事场景,触发打劫的场景比较多,当你是土匪的时候,打劫就是一种工作,
发现目标,且目标容易被欺负,条件合理,就可以告诉决策系统我要打劫了。
当你不是土匪的时候,目标的回报大于当前付出的代价,就可以剑走偏锋,
当然最终结果要结合,人格,社会地位,人际关系,当前状态,等等,
获得一个是否满足打劫的权重。

如何让NPC知道自己被帮助了,从而产生感谢的叙事场景。

战斗场景

开始战斗后记录所有参战人员的信息,主要包含,阵营,强弱程度,
我方阵营强弱程度,敌方阵营强弱程度.
强弱程度随着战局的变化而变化

-----------------------------------------------------------
    战斗停止后,对所有己方帮忙的人员根据社会地位进行排序
	对社会地位高的人根据不同势力分别表达感谢。
	(比如武当和少林都有人帮你,战斗结束后分别对武当和少林的领头人物表达感谢)
	
	如何判断胜利和失败:
	胜利:把欺负你的人全部打成丧失战斗力,逃跑也算失去战斗力
	失败:欺负你的人把你和帮你的人打到丧失战斗力。
	
	战斗胜利:
	战斗失败:
	战斗被调停: 主要是有影响力的人出面调停
	战斗被强制停止:通过实力强制双方停手,比如境界压制。
	--------------------------------------------------
	最后生成对应事件信息到决策系统,驱动决策系统做出合理的行为。
	
    判断阵营胜利或失败,因为胜利或失败产生的叙事文字不一样。
    比如,胜利后:感谢少侠出手相助,大恩大德没齿难忘。
    失败后:感谢少侠,不顾危险,挺身相助,以后有什么需要的地方,万死不辞。
	------------------------------------------------------------------
	通过以上信息,NPC应该知道自己被帮助了 。

欺男霸女场景
不一定触发战斗,把欺负当事人的坏人赶走是最核心的,
也就是当当事人感知不到危险后,触发感谢信息到决策系统。

受伤救助场景
当事人感受到的危险是自身受伤严重,长时间得不到帮助,有生命危险。
小姑娘糖葫芦被坏人弄到地上了,小姑娘哭了,帮小姑娘又买了一个,小姑娘很开心。

如果按照传统的开发方式实现这些场景,其工作量之大非人力可为。
这些场景描述不单指这一个场景,就受伤救助来说分很多种,
比如,
自己修炼功法走火入魔
被别人打伤,挂了debuff,无法自我修复
当和别人对波的时候,眼看顶不住了,千钧一发出手相助。
爷爷采灵药的时候被守护灵兽 挂了debuff,受长期折磨,孙女外出采药碰到高人,解决问题,佳人倾心。


还需要更抽象的分类,比如,有感到危险的,有失去重要之物的等,
NPC是通过什么感受到了危险,又是谁帮NPC解决了这次危险,决策系统可以根据危险难度的等级和重要程度
做出合理行为。
其实我也不知道怎么做,还没有找到更合理的解决方案。

这些内容要通过MVC结构实现,从底层开始构建,如果不继承前人的工作,从头开始,非常困难。

我描述的可能不够清楚,以至于你可能没有完全理解到这个NPC交互的难度。
这是一个非线性虚拟世界。
简单来说的话,目前市面上任何游戏,都没有NPC主动进行交互的。
可以被动交互产生叙事场景的都没有。
因为市面上所有游戏的叙事场景都是提前做好的。

你可以简单的理解成,让chatGPT扮演游戏里面的某个角色,让后和他进行场景叙事。

什么叫主动进行交互?设置一个触发点,人物到达触发,NPC过来跟你交互,算不算主动交互?

你的意思是不设置任何触发点,让NPC自己思考要不要过来跟你搭话?还chatGPT扮演NPC啊?那你怎么控制支线剧情触发?NPC过来纯闲聊吗难道。还是说你就丢给NPC一个任务,让他引诱玩家去打什么什么怪,聊天内容他自己想是吧

如果可以通过设置触发点,让NPC和你交互,那么你同一个点得到的结果
基本是一样的,一般情况下这算是一个线性世界。

如果你和NPC交互的叙事场景不一样,那么这个点就无法设置,
如果可以设置,那么这个点就是非常庞大的一个内容,我上面提到的
1234都算是一个点,即便这样如果开发一个非线性世界,也是一个无法估算工作量。
可以理解长圆上一点,想要把圆填满,几乎不可能。

是的,让NPC拥有自主行为,
这就是为什么要让NPC知道自己被帮助了,他才能做出合理的行为。

GPT我只是打个比方,有助于大家理解。
没有主线,也没有支线,这就是一个非线性虚拟世界。
NPC拥有自主行为,你后面说的是正确的。

你得先明确需求。如果条件和事件数量可控,用状态机或者行为树。如果数量未知,你得先去做个ai

我是不是可以理解你想做个《西部世界》,理想是高大上的,钱包足够丰满吗?

是的,你可以这么理解

游戏是有限集合,世界是无限集合,他们有着根本的区别。

比如理解自然语言就有很多种方式,

现实让计算机理解的话,
就要真正的理解每一个字,每一个词的含义。
是无限集合,就要用到自主学习。

而游戏让NPC理解自然语言
并不需要理解每一个字和词。
他只要能完成这个世界框架下的场景叙事就可以。

所以他并没有想的那么遥不可及。

顺便说一句,我只是单纯的讨论,没有任何其他意思,
我自然有我的方式去解决这个问题,
只是想通过和大家讨论看看是否能得到更好的解决方案

斯坦福有一个虚拟小镇,npc自治

嗯,那个我看过,只要根据需求驱动行为就可以做到,
和我的思路是一样的。
具体实现方案要考虑的就多了,因为他只是几十个人,
只考虑效果,不用考虑性能瓶颈。

而我要做的是一个5000人大世界,对性能要求比较高,
很多功能的实现方案都要做出取舍的。

比如外部环境有了变化,是否实时对外部环境监测就需要考虑了。

[西部世界] 原型从这里开始~~~

中国科技弯道超车不是梦想!
见证NPC历史新起点!

npc 被玩家欺负了 会不会去反抗,其他npc是否会帮忙? 他们发现打不过,会不会去打怪升级?会不会去杀其他npc掉装备?他们会不会要组成大军,一起来胖揍你?npc自相残杀后,发现人少了 会不会组成团体,并开始造小人?

想法是挺好,不过还是建议将这个阶段设置为终极目标,先完成你的游戏的1.0版本,实现有限的ai吧?

友善讨论,无任何恶意
你说的所有这些都可以归纳为
需求驱动行为,
人要做什么和不做什么大部分情况都是根据自身利益来决定的。

NPC被欺负了会不会反抗,取决于,人格,能力,施暴者的社会地位等。
会不会帮忙也取决于,人格,能力,利益等。
就好比 这个世界需要声音,
并不需要一种声音一种声音去添加。
只需要告诉这个世界
声音是由震动产生的就可以了。

可以去看看上古卷轴的Radiant AI,这种就已经很厉害了