游戏服务器设计之NPC系统

游戏服务器设计之NPC系统

简介

NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验。NPC在游戏中有如下作用:

  1. 引导玩家体验游戏内容,一般游戏内有很多主线、支线任务,而任务的介绍、接取、领取奖励等操作都是通过NPC的操作,一般会有几个核心NPC,再不停的任务引导中,玩家会对核心npc印象深刻,强化了游戏代入感。
  2. 核心功能的展示和操作。游戏大部分功能都会放到游戏主界面,但是全部功能都放进去是不现实的,其他功能则以NPC的方式提供,比如进入某副本的入口等。
  3. 一些运营活动,比如道具秒杀,打折促销等,过年过节也可以制作一些应景的NPC形象。

NPC的设计

NPC跟角色怪物等相似是一个实体,所谓实体指的是必须有唯一ID,可通过ID索引到且可以在地图动态添加,本文实现的NPC的ID由配置文件指定,其他基本属性如名字、地图坐标、外形、朝向等都可配置。
282357-20180128105058740-253708518.jpg

当与NPC对话时一般都是显示文字和一些引导操作的按钮。这些都是需要可配置。另外NPC的文字除了静态描述文字,还需要一些动态数据,比如显示玩家活动分数,排名次序等。如何定义服务器和客户端的协议才能满足上述要求呢?首先必须是文字协议并且可扩展,这样才对配置友好,Json是一种,但是json够紧凑但是对配置不是很友好尤其是对文字描述这种。xml相比更好一点,扩展性强,可读性也好,在文字长度不大的情况下效率也可以接受。本人推荐用xml的格式NPC的显示协议。NPC至少有两个元素文字和按钮,怎么用xml来表示呢?我首先想到了html。常规文字显示就参考html的格式,特殊的ui组件,扩展一下xml就可以了,这种情况甚至不需要重启服务器。为了客户端解析方便,我们只需要使用html的子集即可,比如:

过年好!<br/>
<font color="red">狗年大吉!</font> <a href="showPage">旺旺旺</a>
<br/>
<button type="button" onclick="showPage">OK</button>

使用html格式的配置有如下好处:

  1. html大家都比较熟悉,无论是服务器客户端都对html有一定了解,甚至策划也不陌生,接受起来非常容易。
  2. html编写虽说需要一定的程序能力,但是这种在线编辑器一抓一大把,所见即所得的配置方式非常方便配置人员。
    比如使用http://www.w3school.com.cn/tiy/t.asp?f=html_basic 这个在线html编辑工具可以所见即所得的编辑文字内容。结果示例如下:
    282357-20180216102206499-231571014.png
    使用这种格式的好处是,策划事先可以在在线编辑器上编辑好npc相关的文字,颜色、排版等都处理好,一些显示错误可以一开始就发现。

关于超链接和按钮

上图显示了一个有超链和按钮的npc面板,那么点击了超链和按钮后程序如何处理呢?这时正时脚本排上用场的地方了。一个超链或按钮对应一个脚本的函数,而整个脚本正好是对应了脚本的全部功能。另外超链是可以传参数的,那么参数会被带到脚本函数中,如下例所示:
查看成绩

def showScore(player, npcid, param):
    sortCondition = param['sort']
    #do something
    return

第一次点击npc因为没有指定超链,那么默认调用脚本的main函数。时序图如下:

def main(player, npcid):
    msg = '''
过年好!<br/>
<font color="red">狗年大吉!</font> <a href="showPage">旺旺旺</a>
<br/>
<button type="button" onclick="showPage">OK</button>
'''
    return msg

关于安全性

思考下如果有外挂没有点击main直接发消息点击showScore会怎么样?正常情况下角色必须点击当前看到的页面包含的超链,否则会出现安全性问题,必须加以限制。npc系统每次发送npc面板内容给客户端时,都会记录下当前的npc面板内容,当玩家点击超链,首先验证一下是否是本次面板内的超链,否则拒绝,安全性大大提高。时序图如下:
282357-20180216150620265-986168314.png

总结

  1. xml作为npc显示协议具有非常强的扩展性,比如显示文字,控制文字大小,显示图标等都可以通过扩展xml标记实现。
  2. xml与脚本结合实现npc的功能,会大大利用脚本的已修改、热更新的优势,一些运营活动不停机上线这是最基本的要求了,如果有bug,可以下发正确的脚本覆盖后重新载入脚本即可。
  3. 这种格式易理解,好配置,对于策划这种弱程序的也是可以接受,当然基于html做个配置工具也是非常的容易。
  4. 实现显示协议后,npc的外放、删除,外形配置、文字配置等,都是策划可以搞定的,这也是团队都希望的。
  5. 再考虑到扩展性前提下,保证了npc的安全性,有的时候写代码的人经常会写这样的代码,如判断一个人可以领奖,然后显示可以领按钮,点击了领取按钮的对应函数有可能忘了判断有效性,在这种npc的方式下,就不太会出现重复领奖的bug,因为每次领奖,都会npc提示领奖成功,然后把player上的当前npc文字冲掉,这样假如外挂再发领奖请求会被npc系统自动拦调,大大提高系统安全性。
  6. npc的点击频率限制,npc距离限制,这写基本的安全性逻辑也要有,这个不在赘述,详情看github代码。
  7. GitHub地址: https://github.com/fanchy/h2engine
  8. 关于属性管理器:http://www.cnblogs.com/zhiranok/p/h2engine_propmgr.html
  9. 关于游戏服务器引擎h2engine:http://www.cnblogs.com/zhiranok/p/ffengine.html
    更多精彩文章 http://h2cloud.org/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
游戏情感设计》,英文名《Creating Emotion in Games: The Craft and Art of Emotioneering》,作者(美)David E.Freeman,本书是为英文版,大小 29 MB。 内容简介 过去的游戏缺乏情感,也很少有值得动情的对象,因为一般游戏角色只能发出机械的声音和做出固定的动作,很难让人产生情感效果。随着计算机游戏技术的提高,我们不断完善模拟的思想、行为与情感,创建更加扣人心弦的游戏,让玩家进入强烈的情感之旅。本书介绍如何创建与提炼情感工程技术。. David Freeman的情感工程技术包括下列内容:让玩家认同自己的角色和与NPC(非玩家角色)结合、设计动人而出人意料的游戏时刻、创建具有情感深度的NPC。情感工程技术分为32类,本书分别介绍了所有这些技术,并对每一类中的各种技术进行了演示。... 目录 第一部分 简介. 第1章 交流、探索、帮助、术语、范围3 第2章 情感工程简介5 第3章 为何在游戏中建立情感8 第4章 电影剧本作家对游戏的17个盲点1l 第5章 为什么游戏设计师经常感到创作很难20 第6章 为什么”写作”不好,而“情感工程”较好23 第7章 天衣无缝,巧匠无痕25 第8章 电影剧本所缺,情感工程所补27 第二部分 32类情感工程技术 第9章 NPC趣味技术33 第10章 NPC加深技术43 第11章 对话趣味技术50 第12章 对话加深技术55 第13章 群体趣味技术62 第14章 群体加深技术67 第15章 NPCNPC化学技术70 第16章 NPCNPC关系加深技术76 第17章 NPC角色弧技术79 第18章 NPC固定兴趣技术84 .第19章 玩家到NPC化学技术92 第20章 NPC到玩家关系加深技术99 第21章 玩家到NPC关系加深技术104 第22章 群体结合技术107 第23章 情感复杂时刻与情境技术112 第24章 情节趣味技术131 第25章 情感加深技术143 第26章 世界诱入技术..151 第27章 角色诱入技术159 第28章 第一人称角色弧技术167 第29章 第一人称加深技术175 第30章 通过动作揭示复杂角色189 第31章 通过符号加强情感深度195 第32章 自动创建故事技术208 第33章 激发技术212 第34章 聚合技术219 第35章 “生活真实”技术223 第36章 跨人群技术225 第37章 把情感注入游戏的故事要素中231 第38章 将故事和游戏与机制联系238 第39章 编写有力的预先绘制和游戏中的影片片断244 第40章 开头影片片断技术259 第三部分 情感工程序 第41章 简介267 第42章 陷坑269 第43章 Styx 275 第44章 倒霉的交易278 第四部分 魔法 第45章 魔法285 第五部分 附录 附录A 简介293 附录B 生成趣味的技术295 附录C 收集301 附录D 图片致谢314 跗录E 作者简介以及联系信息319 附录F 术语...330

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值