ゲーム通貨の個々のユニットに一意のIDを割り当てる必要がありますか?


22

現在、MMORPGを作成しています。

現時点では、ゲームの通貨部分に取り組んでいますが、生成された通貨のすべてのユニットに一意のシリアル番号を割り当てる必要があるかどうか混乱しています。

このシステムを使用して仮想通貨の誤用を追跡したいと思っていますが、これは一般的な慣行ですか?


8
あなたのゲームでは、あるプレイヤーが約100万のzorkmidsを別のプレイヤーに転送する頻度はどのくらいですか?その場合、データベース内の100万個のエンティティを更新する必要がありますか?
フィリップ

1
これは実際に興味深いアイデアです。BitCoinは、任意の金額の通貨に対してこのようなことを行います。解決策/可能性があります。
ashes999 14年

4
@ ashes999 Bitcoin stackexchangeの担当者は、BitCoinは個々の通貨単位ではなく口座残高も追跡すると言います。
フィリップ14年

1
お金が完全に代替可能な場合、1つのzorkmidは他のzorkmidとまったく同じです。
ジョー14年

1
本当じゃないジョー。純金地金は完全に代替可能ですが、横領を防ぐためにしばしばシリアル化されます。
カールスミス14年

回答:


26

意味がありそうにない。

プレイヤーAから100のゾルクミドを、プレイヤーBから100のゾルクミドを取得すると、200のゾルクミドがあります。

その後、プレイヤーCに50のZorkmidを支払うと、CはフォームAまたはBから取得したZorkmidからそれらを取得しますか?これを制御できますか?それも重要ですか?ZorkmidはZorkmidです。

個々の通貨単位の取引履歴ではなく、口座の取引履歴をすべて追跡する実際の銀行や会計士にとっては、まったく問題ではありません。そのように誤用を識別することはまだ可能です。

そうは言っても、個々のコインを在庫アイテムとして扱うゲームを想像することができます。だから、誰かと取引するときは、予備の交換があることを確認する必要があります。これにより、コインのマーキング、魅惑、偽造などの興味深い機能が可能になります。その場合、各コインを個別にトレースするのが理にかなっています。しかし、実際にそれを行うゲームは考えられません。


5
個々のコインを実際にトレースするゲームを思い出しましたが、オンラインゲームではありません:Dwarf Fortress。しかし、それがシミュレートするこれらの多くのものと同様に、ゲームプレイの可能性を最大限に引き出すためにこれを実際に使用するわけではありません。
フィリップ14年

4
私は私の本当の£10ノートがあることに注意してくださいする必要がありますHC40415464ので、そこに明確にユニークなIDと現実世界のgovermentsを持つにはいくつかの利点は、ケアがないですそれに書かれた
リチャードチンクル

2
@RichardTingle、実際のメモにはシリアル番号があり、少なくともトランザクションを追跡する可能性があり、偽造をより困難にすることができます(すべてのメモに同じ番号を印刷すると、誰かが気付くかもしれません)。しかし、ゲームでは、すべての通貨取引は中央当局によって追跡され、偽造は不可能です。
cjm 14年

私は実際にコインのカウンターフィッティングを可能にするゲームのアイデアが大好きです。それらを検出できる呪文とアイテムだけの市場があり、もちろん「検出不可能な」偽造品の対抗市場があります!また、「のゾーク」のウェブサイトを持つことの可能性があります...
ティム・ホルト

3
この「正しい」答えは間違っています。現実の銀行は、個々のお金の単位を追跡するために多額の費用を費やしています。
カールスミス14年

6

いいえ、すべきではありません。

通貨取引を追跡できるシステムを構築する必要がありますが(特に、その通貨がリアルマネー難読化ツールである場合)、その通貨の個々の単位をすべて追跡する必要はありません。追跡に関心があるのは、特に大量の資金の総移動です(これは潜在的な外部/認可されていないリアルマネー取引の指標になる可能性があるため)。個々の通貨単位を追跡することはそれを助けません(実際には傷つく可能性があります)。多くのIDを生成し、データベースに比較的大量の情報を保存する必要があるため、関連データの維持が複雑になります。

リアルマネー難読化通貨(つまり、ギルドウォーズ2の宝石など、ゲーム内コンテンツの購入に使用される現実世界のお金で購入するもの)には、このアイデアに価値があります。特に、この欲求は、「無料」で経済に導入された通貨単位と、実際の実際の取引を介して導入された通貨単位とを明確にするために発生する可能性があります。一般に、後者の収益を最終的にしか認識できないため、それらを区別することが重要です。

ただし、数値を合計(通貨の「無料」と「有料」の両方のインスタンスの合計単位、合計単位出力)で保存するだけで、必要な情報を追跡できます。これは集計でこれらの事、一般的に追跡したいという一般的な考え方と一緒に行くの取引それとして両方のトラック、あなたが本当に必要なデータをレベルではなく、現在のレベルをして、彼らは分散として資金の大きな塊をトレースすることが容易になりますシステム全体。


4

著者のメモ:この回答は、ネットワーク外で取引を行っていないのにサーバーに同期していないと仮定して作成されました。

個々のプレイヤー間の取引はサーバーを介して行われる必要があるため、通貨の個々のシリアル番号を追跡する必要はありません。つまり、サーバーは口座残高の信頼できるソースです。サーバーは、ユーザーにどのくらいのお金があるかを尋ねません。サーバーに接続されているクライアントは、API呼び出しを介してサーバーに「プレーヤーにどれだけのお金があるか」を尋ねます。これは、プレイヤーがネットワーク外で取引を行っていないのにサーバーに同期しているという仮定を置きます。 ]。

政府通貨の例では、唯一の信頼できるソースは、アカウントに接続されていないときの通貨です[男性が200ドルを引き出し、各請求書には、他の人が本物かどうかを判断できるようにタグ付けするシリアル番号で「署名」されています(if彼らはそうするという面倒を経て)それを取るために]。請求書が銀行に持ち込まれたとき、シリアル番号が流通禁止などとしてマークされているかどうかを判断する方法があります。ただし、取引は、通貨を見ることなく口座間で資金を移動する単一支店の複数のユーザーにより似ています。

説明する主なストーリーは、誰があなたの信頼できる情報源であるかということです。ユーザーはブランチに行って「私は500ドルを持っている、信頼してください、これらは連載です」と宣言しません。代わりに、彼はキー[アカウント番号/キー]を渡し、ブランチ/サーバーはユーザーに資金を通知し、残高を減らしながら通貨を取り出すことができます。信頼できるソース(サーバー)が残高を確認しない限り、ユーザーが銀行に「本当に、私は500ドルを持っている」と納得させようとしても、何も起こりません。

乾杯。


2

現実の世界の仕組みに基づいてゲームシミュレーションをプログラムしようとすると、コンピューターが処理できる情報量に関して、いくつかの大きな問題が発生します。
たとえば、次のページを見てください。これは、砂粒に含まれる原子の数を計算する試みです。

http://www.thenakedscientists.com/forum/index.php?topic=6447.0

私は化学と物理学を研究することでこのような問題をたくさん見てきました。このページの人が来たとんでもないほどの数は、私がさまざまな教師や教科書が思いつくものの球場にあります。-> 78 000 000 000 000 000 000

これで十分であり、これらのゼロを6つ削除しても、平均的なコンピューターでは対話型の速度で処理するには大きすぎる数値が残っています。特に、特定の時間にこれらのトランザクションが数千件ある場合。

1つの穀物に78,000 000 000 000 000 000個の個々の成分がある場合、浜辺のすべての砂粒のすべての原子の運動量、位置、速度、瞬間加速度、電界電荷などを計算して追跡するにはどうすればよいでしょうか。(または、サブ原子コンポーネントを検討する場合はさらに多くなります。)

私はかつて、次のような内容のnVidiaグラフィックプログラミングドキュメントを読みました。
シミュレーションが100%正確ではない場合、誰も実際に知ることができないため、見栄えの最良の近似を与えるものを実行します。効率を考慮する必要があります。

グラフィックスに関係なくても、あらゆる種類のゲームシミュレーションに同じことが当てはまります。おそらく、物事を機能させるために必要な最低限のことだけを行うべきです。ここにすべて出て行くと、コンピューターを処理できない複雑さに埋めることになります。
また、この複雑さのコードを作成して、試行および保守する必要があります。

通貨のすべての単位に一意のシリアル番号を付けることができますが、この1つの詳細だけですべてのコンピューターのリソースを使い果たします。

これを処理するより良い方法は、各トランザクションに一意の識別を1つだけ与えることです。

したがって、プレイヤー#1はプレイヤー#2に$ 1000000を支払います。
各ドルに一意の識別子を与えると、多くの人々のコンピューターは、すべてのネットワークトラフィックとこれが引き起こす遅延を言うまでもなく、大きな問題を抱え始めます。

または、トランザクション全体を表す1つの値を作成することもできます。

uint transferFunds_Player1ToPlayer2 = 1000000;

20年前のポケット電卓でも、このようなものを処理できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.