プレイヤーが何らかの方法で世界を形作るオンラインゲームを持っています-例えば。世界地図の特定の部分に直接家を建てることができるウルティマオンラインの住宅。これらは、永続的な世界の一部として時間とともに持続する必要がある変更です。
同時に、デザインチームは新しいコンテンツを追加し、古いコンテンツを修正して、新しいプレーヤーのためにゲームを改善および拡張しています。彼らは最初にテスト中に開発サーバー上でこれを行い、その後、ライブサーバー上のプレイヤーの「作業」に自分の作業をマージする必要があります。
ゲームデザインの問題を修正すると仮定します。プレーヤーは指定された領域でのみ構築できるため、デザイナーの編集と地理的に衝突することはありません- 新しいデザイナーデータが新しいプレーヤーデータとマージされるときに競合を避けるためにデータを処理したりデータ構造を配置する良い方法は何ですか?
例1:プレーヤーが新しいタイプのアイテムを作成すると、ゲームはそれにID 123456を割り当てます。そのアイテムのインスタンスはすべて123456を参照します。ゲームデザイナーが同様のシステムを持ち、デザイナーが123456という番号の新しいアイテムを作成するとします。これを回避するにはどうすればよいですか?
例2:誰かがすべてのドラゴンにフランス語のアクセントを与える人気のあるMODを作成します。これには、新しいassignFrenchAccent
ドラゴンオブジェクトに新しい音声アセットを割り当てるために使用する、新しいオブジェクトと呼ばれるスクリプトが含まれています。しかし、同じ名前のオブジェクトを持つ「ナポレオン対スマウグ」DLCを展開しようとしています-多くの顧客サービスの問題なくこれを行うにはどうすればよいですか?
私は次の戦略を考えました:
- 2つの個別のファイル/ディレクトリ/データベースを使用できますが、読み取り操作は非常に複雑です。「すべてのアイテムを表示」では、デザイナーDBで1回の読み取りを実行し、プレーヤーDBで1回の読み取りを実行する必要があります(それでも2を区別する必要があります)。
- 1つのストア内で2つの異なる名前空間を使用できます。文字列を主キーとして使用し、接頭辞に「DESIGN:」または「PLAYER:」を付けますが、これらの名前空間の作成は簡単ではなく、依存関係は明確ではありません。(たとえば、RDBMSでは、文字列を主キーとして効率的に使用できない場合があります。整数を使用して、特定の数(100万など)未満のすべての主キーをデザイナーデータに割り当て、そのポイントより上のすべてを割り当てることができますただし、その情報はRDBMSからは見えず、外部キーリンクは「分割」を通過します。つまり、すべてのツールとスクリプトは明示的に回避する必要があります。
- 同じ共有データベースでいつでもリアルタイムで作業できますが、パフォーマンスが低下したり、プレーヤーのデータが破損するリスクが高まる場合があります。また、異なるワールドデータを持つ複数のサーバーで実行されるゲームには適用されません。
- ...他のアイデアはありますか?
これは主にオンラインゲームの問題ですが、開発者がゲームにパッチを適用すると同時にコミュニティがMODを作成するMODにも概念が適用される可能性があります。新しいパッチがリリースされたときにmodが壊れる可能性を減らすために、ここで使用されている戦略はありますか?
また、これを「バージョン管理」としてタグ付けしました。これは、あるレベルでは、これが何であるかということです。マージが必要なデータ開発の2つのブランチです。おそらく、その方向からの洞察がいくつかあるかもしれません。
編集-問題を明確にするために、上にいくつかの例を追加しました。この問題は、実際にはネームスペースの1つであり、複合キーを介してストアに実装できると考え始めています。これにより、少なくともマージ戦略が簡素化されます。しかし、私が見ていない選択肢があるかもしれません。