云风开发笔记(1) 背包系统

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

折腾了好久,终于可以开始正式项目开发了。

之前的这段日子,我们陷落在公司的股权分配问题中,纠结于到底需要几个人到位才启动;更是反复讨论,到底应该做个怎样的游戏。林林总总,终于,在已经到位的几位同学的摩拳擦掌中,叮当决定自己挂帅开始干了。

就这么不到十个人,空旷的办公室,跟我们起先想像的情况不太一样。尤其是主策划还没有落定。我说,叮当,你好歹也是一资深游戏玩家,带了这么多年的游戏部,跟了这么多成功的项目,没吃过猪肉总见过猪跑吧,我就不相信你干着会比别人差。若不是我必须盯着程序实现这块,我都想自己做主策划了。不过有你干,我放心。

主策划的位置,咱们可以先空着,前期工作不能延。产品经理代理一下游戏主策划的位置也是创业公司必须的;正如我这挂牌的 CTO ,除了负责系统架构以外,也得兼个程序员做实现嘛。

经过两天对项目计划表的讨论后,我们今天就算正式开工了。

游戏是怎样的?半保密,不在这里多写,怕大家骂。再说了,这个东西现在说是怎样的,一两年后肯定有变化,多说无益,多解释无益。简单说呢,就是一个战斗系统类似魔兽世界,但系统核心玩法差异很大,更为轻松,更偏重 PvP 的 MMORPG 。为什么是这样一个东西,不想解释,反正不是拍脑袋想出来的。

既然是开发笔记,就写写现在在做些啥,打算怎样做下去。

我们先集体玩了一周魔兽世界,虽然大部分人已经是 wow 老玩家,但还是有一两个人玩的比较少,大家一起熟悉一下。主要是熟悉战斗系统,还有美术风格的感觉。培养点兴趣,对未来我们自己做的东西至少在表层上大家都有点感觉,有爱。

瞥开美术和策划的计划不谈,主要写写程序的计划。

在 Closed Beta 前,有 8 个历程碑,到一期截至,就开始有内部运行的版本。这次完全抛弃以往在网易积累的任何一点成品,全部从零开始做。但是,对于程序员来说,一切都在脑子里,其实工作量并不大。有机会重头来,恐怕是大部分程序员梦寐以求的机会。

当然,我们购买了一套 3d engine (不介绍,不解释),起点高一些。服务器也会尽量用一些成熟的开源库。

一期打算实现基本的用户登陆,场景漫游,包括在场景中做各种跑、跳、走、骑乘等动作。


一期程序员三人:

  • 云风:负责总体规划,总体协议设计,以及部分服务器模块的实现。

  • 怪物公司:负责客户端的设计与实现。

  • 蜗牛:负责服务器的细节设计与实现。

吵架是我们的传统,自今天就开始了。按照惯例,我无法说服项目组认可我的所有设计和技术选择。不过大家妥协的结果是,先按我的想法做,一期雏形在下周末前完成,根据实现过程中遇到的问题,我们在修正甚至全部重构目前的设计。一周半时间的代价是目前我们可以承受的。

ps. 程序员就是这么一种奇怪的生物。好的程序员都有自己独立的思想。对自己实现或即将实现的代码有爱。按照别人的思想去实现是件无比痛苦的事情,会觉得在浪费自己的生命。所以,大部分有活力的项目开始都是一个人建立起来的。在大公司,好多老程序员都喜欢招聘所谓有潜力的新人,认为他们白纸一张,好塑造。说到底就是听话。但事实的结果一般是,要么培养出来一个庸才,无法担当;要么,在技术选择上最终分道扬镳。我总是对他们说,想想你愿不愿意总听着别人的意见干活?如果你不愿意,那么就别指挥别人干。自己不愿意做的事情,就别让别人帮你做。


我的设计草稿是这样的:

整个游戏系统(一期工程需要的)大体由这样一些部分组成:

  • 客户端,运行在玩家的终端上,用一条 TCP 连接和系统通讯。它接入游戏服务器网关。

  • 网关,负责汇总所有客户端,大体上和我很多年前的想法一致 ,虽然会有一些实现上的小改变,但思想没有根本变化。

  • 客户代理(Agent) ,运行在网关的后端,在逻辑上,每个客户端都有一个 agent 负责翻译和转发客户端发来的请求,以及回应。众多 agent 可以实现在同一个进程中,也可以是多个不同的进程里。可以用脚本虚拟机的形式跑,也可以是别的形式,这些都不太重要。这一次,我们最大可能使用独立的 lua state 来实现单个 agent。

  • 数据服务,保存玩家数据,场景数据等。前端用自己的代码和协议同系统其它部分沟通,后端这次想采用 redis 做储存。

  • 场景管理器,用于管理静态场景和动态副本。

  • 若干场景服务器,用于玩家在里面做漫游。

网关之后的服务是相互信任的,并组成一个虚拟网络可以相互通讯。通讯底层暂时采用 zeromq ,通讯协议采用 google protobuf 。

客户端到 agent 的通讯协议与网关后各个逻辑结点之间的通讯协议将隔离,分开设计。甚至不保证采用一致的技术实现方案,以及协议设计风格。


这里的设计关键在于 Agent 的设计,大部分的工作量是围绕它而来的。

单个 Agent 的工作流程代表了项目一期的结果会展现的东西,大体上逻辑流程如下:

  1. 等待用户认证

  2. 把认证系统交给认证服务器认证,失败则返回 1 重试。

  3. 从数据库获取用户数据(一期数据很少,仅有默认的用户名,用户形象) ,并转发给客户端。

  4. 取得用户所在场景号,从场景管理器取得场景服务的位置,并申请加入场景。

  5. 从场景服务器,同步环境。

  6. 转发用户在场景中漫游的请求,并同步场景的实时数据。

  7. 一旦客户端发生异常或得到推出消息,通知场景服务器离开。

这里,和历史上我们的游戏服务器设计有一个小的不同。我认为,用户的角色在场景中的位置,动作状态,甚至以后的战斗数值状态,都是属于场景数据的一部分,而不是用户数据的一部分。

用户数据中,和场景有关的只包括他当前所属的场景。由场景自己来保存角色在场景中的状态数据。简单而具体的说,类似网易历史上的西游系列,玩家的坐标是玩家的属性之一,是会在持久化时存放在玩家数据里的。经过我这两年的思考,我觉得这种设计方法是有问题的。

从我现在的直觉上来说,虚拟角色的属性不应包括角色的地理位置信息。那是角色的外在约束。而场景更应该拥有在它其中的 PC 和 NPC 的位置以及各种状态。PC 下线只应该认为是 PC 处于一种特殊状态(不被周围的 PC/NPC 所见或影响),而并没有脱离这个场景。所以我更愿意把 PC 下线定义成 detach ,而上线则是 attach 的操作。在这点上,场景,作为一个实体,拥有它自己的数据逻辑。


agent 相关的协议粗略的设计如下:

  • auth 登陆认证
    • user/pass 取得 userid ,返回成功或各种失败
  • userdb
    • 用 userid 取得 avatar list
    • 用 avatar 取得 avatar data (包括场景名)
  • scene manager
    • 用 场景名 取得 scene id
    • 用 scene id 取得场景状态,返回允许进入或各种拥堵状态
  • scene
    • 把 avatar attach 到场景
    • 取得 avatar 的场景上下文
    • 把 avatar detach 出场景
    • avatar 设置坐标,速度,行为(跑,走,站立),方向
    • avatar 骑乘状态改变
    • avatar 做特定动作

唠唠两个游戏服务端框架:ET 和 Skynet SkynetET框架Skynet 优缺点底层C编写,性能极高,资源消耗极小,适合做极致优化的项目。单进程多服务Actor模型,服务间隔离性强,一个服务崩溃不会影响其他。Lua热更新天然支持,灵活方便。社区成熟,有大量实践案例,如《陌陌争霸》等。学习曲线陡峭,需要熟悉C和Lua,理解多服务协作。调试困难,主要依赖日志,缺乏IDE级别的单步调试。生态相对原始,很多功能需要自己组装,开发效率不如开箱即用的框架。ET框架优缺点全C#栈,前后端统一,Unity开发者上手极快,代码易读易理解。 阅读详情

相关推荐

Unity与Skynet通信实战:Sproto协议配置与心跳机制详解

在游戏服务器开发中,网络通信是连接客户端与服务端的核心技术。其核心原理在于通过序列化协议将结构化数据转换为二进制流进行传输,以实现高效、可靠的数据交换。Sproto作为一种轻量级二进制序列化协议,凭借其高效的解析性能和紧凑的数据体积,在游戏开发领域,特别是与Skynet服务端框架的搭配中,展现出独特的技术价值。它专为Lua环境优化,能与Skynet生态深度集成,为实时交互应用提供了稳定的通信基础。在实际应用场景中,稳定的长连接是游戏体验的保障,这离不开健壮的心跳机制。心跳机制通过定期发送轻量数据包来维持连接

weixin_28077113的博客 234

游戏之旅-我的编程感悟云风

游戏之旅-我的编程感悟,云风大神的编程感悟,不知道云风是谁吗???

游戏之旅之我的编程感悟(云风

游戏之旅之游戏之游戏之旅之我的编程感悟(云风)旅之我的编程感悟(云风)我的编程感悟(云风)游戏之旅之我的编程感悟(云风

云风开发笔记(1)

折腾了好久,终于可以开始正式项目开发了。 之前的这段日子,我们陷落在公司的股权分配问题中,纠结于到底需要几个人到位才启动;更是反复讨论,到底应该做个怎样的游戏。林林总总,终于,在已经到位的几位同学的摩拳擦掌中,叮当决定自己挂帅开始干了。 就这么不到十个人,空旷的办公室,跟我们起先想像的情况不太一样。尤其是主策划还没有落定。我说,叮当,你好歹也是一资深游戏玩家,带了这么多年的游戏部,跟了这么多成

Augmented Reality & Computer Graphics 1590

超详细超实用!!!零基础java开发云风笔记笔记列表接口开发(七)

云风云风笔记 云风知识库添加笔记所需要的字段属性主要有: 2、新建note/Response类,用来处理返回信息 其中result是为了后面笔记列表接口数据做准备 二、服务包service下新建NoteApi定义接口 三、在 impl 软件包下新建 NoteServiceImpl类来实现接口。 四、软件包mapper下创建NoteMapper类 五、编写sql逻辑 在 resources/mapper 文件夹下新建相关的 NoteMapper.xml 文件 六、数据库新建表note 八、验证接

qq_43206280的博客 784

云风开发笔记(3) Redis, Google Protobuffer, ZeroMQ

这周的工作主要是写代码。 开发计划制定好后,我们便分头写代码去了。我们希望一期早点做出可以运行的东西来,一切都从简。整体的代码量并不多,如果硬拆成很多份让很多人来做的话,估计设计拆分方案,安排工作,协调每个人写的东西这些比一个人全部实现一遍的工作量还要大的多。 所以,最终就是两个人在做。怪物公司在弄客户端的东西,蜗牛同学包干了服务器。好吧,基本没我的事了,我就是那个打酱油的,好听点说,就是设计

To be continue 3695

云风开发笔记(4) Agent 的消息循环及 RPC

话接 开发笔记1 。我们将为每个玩家的接入提供一个 agent 服务。agent 相应玩家发送过来的数据包,然后给于反馈。 对于 agent 服务,是一个典型的包驱动模式。无论我们用 Erlang 框架,还是用 ZeroMQ 自己搭建的框架,agent 都会不会有太多的不同。它将利用一个单一的输入点获取输入,根据这些输入产生输出。这个输入点是由框架提供的。框架把 Agent 感兴趣的包发给它。

To be continue 1925

MMORPG游戏背包系统策划

无论是传统的容量扩展、便捷的分类整理,还是更加创新的重量系统与智能推荐,一个符合玩家需求并融入游戏特色的背包系统,都能让玩家对游戏产生更深的依赖和热爱。在未来的开发中,我们要不断吸收优秀案例中的经验,结合自身游戏的核心玩法,打造一个既实用又有趣的背包系统,让玩家在探索虚拟世界时,始终感受到乐趣与挑战。例如,系统可以根据玩家的行为和需求,自动推荐物品的使用或优化物品的分类。背包不仅是物品管理的工具,还可以与游戏中的成就系统结合,玩家通过收集特定物品、整理背包等方式获得独特的奖励或称号,增加背包系统的趣味性。

小宝哥Code的专栏 1743

云风的个人空间 : ---开发笔记---牛X学习

里是我在简悦第一个项目的开发笔记: * 开发笔记 (1) * 开发笔记 (2) :redis 数据库结构设计 * 开发笔记 (3) * 开发笔记 (4) : Agent 的消息循环及 RPC * 开发笔记 (5) : 场景服务及避免读写锁 * 开发笔记 (6) : 结构化数据的共享存储 * 开发笔记 (7) : 服务器底层框架及 RPC *

335

linux下 socket读写锁,云风的 BLOG

Comments:x :twisted: 神云网络2015版最新免费建站方案 http://www.uzsz.cn使用共享变量的方式做多线程会是恶梦以角色为单位锁定其所有的附属属性,不光是属性模块吧?其他属于角色的数据呢(比如战斗时buff定时扣除l背包中的物品)?甚至会影响到角色之外的数据?譬如有个buff叫移形换位,不光增加角色的敏捷属性或速度,甚至定时改变你的位置,同时影响角色所在地图视野...

weixin_30199989的博客 203

游戏服务器存储数据库选型

数据库选择历程我们的项目一直使用MySQL作为数据库。无论是从C++的服务器,还是到Golang服务器。 当年搞服务器时,看大部分人都是用SQL(MySQL/SQLServer),而Mongo感觉像邪教一样,再加上服务器还是Linux比较正统,所以果断选了MySQL。刚开始感觉,游戏服务器的数据存储其实应该是蛮神圣的过程。那么多的数据, 需要按照MySQL一样分表,分字段存储,为了查询,还要乖乖的学一下SQL的语法。就这么折腾了几年,在云DB的蒙蔽下,一直认为MySQL就是做游戏服务器存储的专业技术...

ludongguoa的博客 4417

Lua背包实例项目代码

lua背包已实现游戏背包的部分功能,绝对可完美运行,附文字注释,欢迎下载!

游戏行业全景扫盲:从业务流程、团队分工到底层游戏服务端技术

很多人会简单认为:做游戏 = 画画 + 写代码。实际上网络游戏是一套创意设计 + 工程研发 + 商业化运营 + 分布式实时系统的复合型工程。单机游戏侧重于内容与体验;网络游戏额外需要解决并发、数据一致性、网络延迟、反外挂、经济系统、长线运营等一系列难题。本文从业务层逐步下沉到底层技术,消除策划、美术、客户端、服务端之间的信息壁垒,所有行业黑话、专业名词附带通俗解释,适合零基础建立完整知识框架。

Awna的博客 270

如何看待游戏技术大牛云风从阿里离职,曾在网易工作10年

国内游戏开发领域的「令狐冲」。转自:游戏葡萄君今天,吴云洋(云风)在个人博客发布了一篇文章,称自己将于5月20日离开灵犀互娱,并准备研发一款PC端的独立游戏。云风在国内游戏技术领域有重要影响。新程序员专访报道称,1979年出生的云风码龄已经超过了30年。20岁时,他曾研发出二维游戏引擎风魂系列,该引擎后续被不少公司团队用于游戏制作。云风,图源《新程序员》2001年4月入职网易后,云风参与研发了网易...

极客重生 3576

云风:不加班、不炫技,把复杂的问题简单化

小学时跟随母亲去成人大学学习编程,初中开始参加信息学奥赛,高中写出人生中第一个成熟软件——Cview,大学发布开源软件风魂系列,后用于网易开发的《大话西游》《梦幻西游》等热门游戏,离开网易创立简悦科技……随着云风在游戏与编程领域的不断深入,他的声名也愈发广为人知,成为大家口中的技术大神。“游戏做得好”“博客写得好”“很极客的一个人”是大家对他的印象,“云风大佬”“云风大神”“云大”是大家对他的称呼。 《新程序员》专访了这位集游戏、编程、开源、创业、攀岩等标签于一身的极客,深入了解其三十多年编程生涯与人生感悟

博文视点(北京)官方博客 3530

《我的编程感悟》——游戏开发者的全景探索

《我的编程感悟》——游戏开发者的全景探索 去发现同类优质开源项目:https://gitcode.com/ 《我的编程感悟》是由中国知名游戏开发云风撰写的一本关于游戏编程的深度探索书籍。本书经过《仙剑奇侠传》之父姚壮宪的热情推荐,技术作家孟岩的高度评价,为您带来一场横跨游戏程序过去、现在和未来的知识盛宴。 书籍简介 本书忠实地记录了作者十余年来对游戏编程的所思、所感、所悟。全书按照作者学习和实践...

gitblog_06733的博客 925

云风开发笔记(25) : 改进的 RPC

自从动了重新实现 skynet 的念头,最近忙的跟狗一样。每天 10 点醒来就忙着写代码,一句废话都不想说,一直到晚上 11 点回家睡觉。连续干了快一个月了。到昨天,终于把全部代码基本移植到了新框架下,正常启动了起来。这项工作算是搞一段落。庆幸的是,我这个月的工作,并没有影响到其他人对游戏逻辑的开发。只是我单方面的同步不断新增的逻辑逻辑代码。Skynet 的重写,实际上在半个月前就已经完成。那时,...

明潮的BLOG 521

云风coroutine库源码分析

coroutine库是云风大佬以前写的一个协程库,短小精悍,源码分析在这(https://github.com/theanarkh/read-coroutine-code)。今天就分析一下这个库的原理。话不多说,直接开始。 首先了解一下数据结构。 // 记录协程公共数据的结构体 struct schedule { // 协程的公共栈 char stack[STACK_SIZE]; // 主上...

标子 的专栏 686

近40年码龄,从通宵写代码到三思而后行——专访云风

与专家技术面对面,听云风讲“程序人生”

《程序员》官方BLOG 2万+
上一篇: MaNGOS源码分析
下一篇: 云风开发笔记(2) Redis数据库结构设计
wildtech
博客等级 码龄19年 31粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值