我应该为游戏货币的各个单位分配唯一的ID吗?


22

我目前正在制作MMORPG。

目前,我正在游戏的货币部分,但是我是否应该为所生成货币的每个单位分配唯一的序列号感到困惑。

我希望使用此系统来跟踪对虚拟货币的任何滥用,但这是否是常见的做法?


8
一个玩家将大约一百万个zorkmids转移给另一位玩家的游戏会多久发生一次?发生这种情况时,您是否需要更新数据库中的一百万个实体?
菲利普2014年

1
这实际上是一个有趣的想法。对于任意数量的货币,BitCoin都会执行类似的操作。可能有解决方案/可能性。
ashes999 2014年

4
@ ashes999 比特币 stackexchange 的家伙说,比特币也跟踪帐户余额,而不是单个货币单位。
菲利普2014年

1
如果钱可以完全替代,那么一个zorkmid就像其他任何东西一样。
2014年

1
不对,乔。纯金条是完全可替代的,但通常进行序列化以防止贪污。
卡尔·史密斯

Answers:


26

这不太可能。

当我从玩家A获得100个Zorkmids,从玩家B获得100个Zorkmids时,我有200个Zorkmids。

然后,当我向玩家C支付50克朗时,C会从我从A表格中获得的Zorkmid还是从B格中获得的?我对此有控制权吗?有关系吗 or虫是is虫。

对于都跟踪帐户的交易历史记录而不是单个货币单位的交易历史记录的现实世界银行和会计师,这绝对不重要。仍然可以通过这种方式识别滥用。

话虽如此,我可以想象一个游戏将单个硬币当作库存物品,因此当您与某人交易时,必须确保您有零钱。这将允许一些有趣的功能,例如标记,附魔或伪造硬币。在这种情况下,单独跟踪每个硬币将是有意义的。但是我想不出任何真正做到这一点的游戏。


5
我只记得一个实际上可以追踪每个硬币的游戏,但它不是在线游戏:Dwarf Fortress。但是,就像它模拟的许多事物一样,它并没有真正利用它来发挥全部游戏潜力。
菲利普2014年

4
我必须指出,我国现实£10注已经HC40415464写在上面所以显然是有些优势,具有唯一的ID和真实世界goverments做护理
理查德发麻

2
@RichardTingle,真实的纸币具有序列号,以便至少在某种程度上可以跟踪交易并使伪造更加困难(如果您在每个纸币上打印相同的数字,则可能会有人注意到)。但是在游戏中,所有货币交易都由中央机构进行跟踪,因此无法进行伪造。
cjm 2014年

我喜欢一个游戏的想法,该游戏实际上允许代币的适配。将会有一个整个市场,专门寻找可以检测到它们的咒语和物品,当然还有一个整个“无法检测到的”伪造品的柜台市场!此外,还有一个“ Where's Zork”网站的潜力...
Tim Holt 2014年

3
这个“正确”的答案是错误的。现实世界中的银行要花费大量资金来跟踪单个货币单位。
卡尔·史密斯

6

不,你不应该。

尽管您应该构建可以跟踪货币交易的系统(尤其是如果该货币是真实货币混淆器),则无需跟踪该货币的每个单独单位。您感兴趣的是资金的总动向,尤其是大笔交易(因为这可能表明潜在的外部/未经批准的真实货币交易)。跟踪单个货币单位无济于事(实际上可能会有所伤害),并且通过要求您生成大量ID并在数据库中存储相对大量的信息,只会使相关数据的维护复杂化。

对于真实货币混淆器货币(即,您用真实货币购买的东西用于购买游戏中的内容,例如《激战2》中的宝石),这种想法具有一定的价值。尤其是,可能希望产生这种希望,以便使为“免费”引入经济中的货币单位与通过实际交易所引入的货币单位之间没有歧义。通常,您最终只能在后者上确认收入,因此保持收入的区别很重要。

但是,您可以通过简单地通过存储合计数字(对于货币的“免费”和“付费”实例,总计单位,总计单位)来跟踪所需的信息。这与一般的想法有关,即您希望总体跟踪这些东西,通常是交易级别而不是当前级别,因为它既可以跟踪您真正需要的数据也可以更轻松地跟踪大笔资金分散时的情况。在整个系统中


4

作者的注释:假设您不在网络时进行交易,然后再同步回服务器,则得出此答案。

您无需特别跟踪各个货币的序列号,因为各个玩家之间的任何交易都必须通过您的服务器进行。换句话说,您的服务器是帐户余额的权威来源。您的服务器不会询问用户他有多少钱。连接到服务器的客户端通过api调用询问服务器“我的播放器有多少钱”。假设玩家不在网络时进行交易,然后再同步回服务器[尽管这很新颖,但除非您想在理论上花很多时间,否则我不建议您这样做。 ]。

在政府货币的示例中,唯一权威的来源是未附加到帐户时的货币[一个人拿出200美元,每张钞票都用签名的序列号“签名”,以便其他人可以确定它是否真实(如果他们经历了这样做的麻烦)。当将票据带入银行时,可以使用一些方法来确定序列号是否已标记为不流通等。但是,您的交易更类似于单个分支中的多个用户,在帐户之间转移资金却从未见过货币。

要说明的主要故事就是谁是您的权威来源:我将尝试说明:用户想要从自动取款机中取出钱。用户不会去分支机构并声明“我有500美元,请相信我,这些是序列号”。相反,他放弃了密钥[帐号/密钥],分支机构/服务器可以将资金通知用户,并允许他在减少余额的同时提取货币。无论用户采取什么措施说服银行“真的,我有500美元”,除非权威来源(服务器)验证余额,否则什么都不会发生。

干杯。


2

如果您尝试根据现实世界的工作方式对游戏模拟进行编程,那么在计算机可以处理的信息量方面,您将遇到一些大问题。
以下面的页面为例,该页面试图计算一粒沙中有多少原子。

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

通过研究化学和物理,我已经看到了许多类似的问题,而此页面上的人来的却高得离谱,这是我见过的各种各样的老师和教科书提出来的。-> 78000亿欧元

即使这很远并且您删除了这些零中的6个,您仍然会有一个太大的数字,无法让普通计算机以交互速率处理。尤其是在任何给定时间发生1000笔此类交易时。

如果只有一个谷物具有78 000 000 000 000 000 000个单独的成分,我们怎么可能计算和跟踪海滩上每个沙粒中每个原子的动量,位置,速度,瞬时加速度,场电荷等。(或者,如果考虑亚原子成分,则更多。)

我曾经读过一个nVidia图形编程文档,该文档说明如下内容。
尽一切所能,最好地近似看起来很好,因为没有人能够真正分辨出模拟是否不是100%准确的。必须考虑效率。

即使与图形无关,这也适用于每种类型的游戏模拟。您可能应该只做使工作正常进行的最少工作。如果全力以赴,那么您将陷入计算机无法处理的复杂性中。
您还必须编写并尝试维护这种复杂性的代码。

您可以为每个货币单位赋予唯一的序列号,但是仅在这一细节上,您将用尽计算机的所有资源。

也许更好的处理方法是为每个交易仅提供1个唯一标识。

因此,玩家#1向玩家#2支付了$ 1000000。
如果给每一美元一个唯一的标识符,那么许多人的计算机将开始出现大问题,更不用说所有网络流量和由此引起的滞后了。

或者,您可以只创建一个代表整个交易的值。

uint transferFunds_Player1ToPlayer2 = 1000000;

即使是20岁的袖珍计算器也可以处理类似的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.