Hey,你们好!我是 Bill “LtRandolph” Clark,一名英雄联盟的游戏工程师。许多 Rioter 工程师关注大量的内容须要直接发送给玩家问题——这是两个我最近最喜欢的例子之一,包括最新的冠军Jhin及项目重构的支持。而个人团队使得这个过程变得又快有简单。php
咱们有一个简单的目标:即容许参加游戏试玩项目的暴民,可以建立两倍于任何给定的LoL(英雄联盟)补丁的内容。这提及来容易,可是执行起来倒是一个充满挑战的任务。程序员
今天,咱们讨论实现这一目标咱们所铺设的基础:Riot 游戏数据服务器(GDS)。虽然这是一篇技术文章,可是我会站在一个较高的层次来解释这个问题。若是你是一个在作多系统间传送数据工做的工程师,我但愿这能让你特别感兴趣。安全
游戏数据:
首先,咱们了解一些背景。在LoL的工做中,存在两种类型的游戏数据:一种是 key-value 对,被称为属性数据(如 Black Cleaver HP 奖金是300),另外一种是不透明的二进制数据(如,大文本、动画和视频)。在这篇文章中,咱们只讨论属性数据,二进制数据处理是将来潜在的一篇博文。服务器
在LoL的全部历史中,属性数据由一堆松散、混乱的文件组成,这些文件存储在一个大的名为 DATA 的文件夹中。动画
早期,咱们将数据存储在.ini的文件中(对,就是 Windows 下 .ini的文件格式)。相似以下所示:spa
没有漂亮的界面设计
固然,我建立这个例子是为了强调一些咱们在编辑.ini文件时遇到的一些共同的问题。这离用户友的界面相差甚远。编辑原始文本时很是容易混乱——缺少重要的内容,而其余字段又重复。设计者们天天不得不处理这种混乱,这里总共有 977 种法术,这些功能(固然忽略)位于“MissileEffect=AnnieBasicAttack_mis.troy”行中,在很早的LoL开发中,每一个冠军涉及一个使人愉快的场景:“Death=Cardmaster_Death.wav。”视频
下面是当前数据系统面临的一些关键问题:blog
一、使用 Notepad++ 来编辑属性数据
二、对已存在的字段没有清晰的定义
三、缺少类型安全
四、多人同时编辑同一个文件时会有合并冲突问题游戏
………………………………
转自:解放号IT众包微刊