大家好,

在 Album3D 中,我正在通过 Steam 库使用 Steam Inventory Service 实现虚拟货币的信用系统,但遇到了一个重要的问题。

最初,我没有意识到库存项目堆栈数量是受 16 位值限制的。如果用户最终在一个堆栈中拥有超过 65535 个信用,事情可能会严重损坏,因为数量可能会溢出或其他情况下无效。在信用/货币系统中,这显然是危险的。

我还发现 auto_stack=true 不像我预期的那样行为。假设一个堆栈达到最大大小时,Steam 将自动创建第二个堆栈。然而,在我的使用案例中,这似乎并没有可靠地发生,所以大额信用授予仍然会击中堆栈大小问题。

我的当前解决方案是:

  • 将信用货币项目设为 auto_stack=false
  • 保证每个单独的信用堆栈安全地低于 65535
  • 对于更大的信用包,定义多个信用堆栈的捆绑包。

例如,要出售 100000 个信用,我定义捆绑包为两个 50000 个信用堆栈:

"bundle": "5000x50000;5000x50000"

其中 5000 是信用货币项目定义。

然后,在应用程序中,我将所有拥有的堆栈加起来以获取总信用余额,并在需要时消耗多个堆栈中的信用。

在实现 Steam 库中的虚拟货币时是否遇到过这个问题?这是否是推荐的方法,还是您使用不同的模式来处理大额信用/货币余额?