Answers:
我们正在使用面向命令的界面/体系结构来审核用户活动。
这意味着对服务器的请求导致服务器端实例化代表命令的类的实例(用户可以执行的原子动作)。
例如,假设用户在商品商店购物:
//We could have done something like
someShop.sell(item, player); // This function deducts money from the player
// and stores the new item in their inventory
//Instead we do this:
$buyItemCmd = new BuyItemCommand(item); // The player is already known from the sessionId
$cmdExecuter.run($buyItemCmd);
现在,我们在中添加了cmdExecuter
适用于所有命令的日志记录/审核功能。这样,几乎没有代码重复,我们可以通过重新配置特定的命令类常量和/或修改cmdExecuter来关闭审核。
它有助于使事情井井有条。当前,我们为每个“重要”命令创建一个数据库记录。这有助于跟踪我们感兴趣的行为。
Martin Fowler的进一步阅读《
面向命令的界面》
这里的“技术”是如此简单,以至于几乎不值得这样称呼:您只记录了您认为相关的游戏系统中的数据。
如何您录制数据(数据库,文件,文件等等)太宽而不能在这里讨论(以及技术和模式不是特别游戏开发具体在任何情况下,使它们更适合在SO讨论),原样哪些系统相关的问题。没有聪明的自动技术来回答这些问题。那将是人工智能的壮举。
您想要在具有服务器组件的游戏中确保的事情是,服务器应尽其所能进行所有日志记录。从客户那里得到的任何东西都不值得信任,尤其是如果您要使用这些数据来调整游戏的更改时,您不希望玩家能够对其进行篡改。
客户端仅应记录和传输通常也无法访问服务器的统计信息。例如,您要记录UI单击热图,那可能仅在客户端上可行。
在MMO中,您已经具有有关用户去向,他执行的任务以及他使用的设备发送到服务器的数据。
您可能会感兴趣的其他数据是它们如何使用各种GUI,它们使统计数据和清单屏幕保持打开状态的时间。例如,您可以记录使用鼠标或键盘激活某个功能的次数。
一个重要因素是允许用户选择退出(或选择启用)非关键数据收集,以符合隐私法规。并允许服务器决定在游戏时段/下一个小时应该记录哪些数据,以节省玩家的带宽。