Actualmente estoy haciendo un MMORPG.
En este momento, estoy trabajando en la parte de la moneda del juego, pero estoy confundido sobre si debería asignar un número de serie único para cada unidad de la moneda generada.
Espero usar este sistema para rastrear cualquier mal uso de la moneda virtual, pero ¿es esta una práctica común y, de no ser así, sería una buena idea desde el punto de vista operativo y / o de rendimiento?
Respuestas:
Es poco probable que tenga sentido.
Cuando obtengo 100 Zorkmids del jugador A y 100 Zorkmids del jugador B, tengo 200 Zorkmids.
Cuando luego pague 50 Zorkmids al Jugador C, ¿C los obtendrá de los Zorkmids que obtuve del formulario A o de los que obtuve de B? ¿Tengo control sobre esto? ¿Incluso importa? Un Zorkmid es un Zorkmid.
Definitivamente no importa para los bancos y contadores del mundo real, todos los cuales rastrean el historial de transacciones de las cuentas, no el historial de transacciones de unidades individuales de moneda. Todavía es posible identificar el mal uso de esa manera.
Dicho esto, me imagino un juego que trata las monedas individuales como artículos de inventario, por lo que cuando intercambias con alguien, debes asegurarte de tener un cambio de repuesto. Esto permitiría algunas características interesantes, como marcar, encantar o falsificar monedas. En ese caso, tendría sentido rastrear cada moneda individualmente. Pero no puedo pensar en ningún juego que realmente haga eso.
fuente
HC40415464
escrito en ella, por lo que claramente tiene alguna ventaja tener una identificación única y los gobiernos del mundo real se preocupanNo, no deberías
Si bien debe crear sistemas que le permitan rastrear las transacciones de divisas (especialmente si esa moneda es un ofuscador de dinero real), no necesita rastrear cada unidad individual de esa moneda. Lo que le interesa rastrear es el movimiento agregado de fondos, particularmente en grandes volúmenes (ya que esto podría ser un indicador de posibles transacciones externas / no autorizadas de dinero real). El seguimiento de unidades de moneda individuales no ayuda con eso (de hecho, puede dañar), y solo complica el mantenimiento de los datos relevantes al requerirle que genere muchas ID y almacene volúmenes de información relativamente masivos en su base de datos.
Esta idea tiene cierto valor para las monedas ofuscadoras de dinero real (es decir, lo que compra con dinero del mundo real que se usa para comprar contenido en el juego, como las gemas en Guild Wars 2). En particular, este deseo podría surgir para desambiguar entre las unidades de moneda introducidas en la economía para "libre" frente a las que se introdujeron a través de una transacción real en el mundo real. En general, en última instancia, solo puede reconocer los ingresos de este último, por lo que es importante mantenerlos distintos.
Sin embargo, puede realizar un seguimiento de la información que necesita simplemente almacenando los números en conjunto (unidades totales de entrada, unidades totales de salida, tanto para las instancias "gratuitas" como "pagas" de la moneda). Esto coincide con la idea general de que desea realizar un seguimiento de estas cosas en conjunto, generalmente el nivel de transacción y no el nivel actual, ya que rastrea los datos que realmente necesita y hace que sea más fácil rastrear grandes cantidades de fondos a medida que se dispersan en todo tu sistema.
fuente
Nota del autor: Esta respuesta se hizo con el supuesto de que no está operando mientras está fuera de la red y luego se sincroniza con los servidores.
No necesita rastrear números de serie individuales de monedas específicamente porque cualquier transacción entre jugadores individuales debe realizarse a través de sus servidores. En otras palabras, sus servidores son la fuente autorizada en saldos de cuentas. Sus servidores no le preguntarán al usuario cuánto dinero tiene. Los clientes conectados a los servidores le preguntan al servidor "Cuánto dinero tiene mi reproductor" a través de una llamada API. Esto supone que los jugadores no operan mientras están fuera de la red y luego vuelven a sincronizarse con los servidores [Aunque eso sería novedoso, no lo recomiendo a menos que desee pasar mucho tiempo en teoría ]
En el ejemplo de la moneda del gobierno, la única fuente autorizada es la moneda cuando no está vinculada a la cuenta [Un hombre saca $ 200, cada billete está "firmado" con un número de serie que lo etiqueta para que otros puedan determinar si es real (si pasaron por la molestia de hacerlo) para tomarlo]. Cuando la factura se lleva a un banco, hay formas de determinar si los números de serie se han marcado como fuera de circulación, etc. Sin embargo, sus transacciones son más similares a las de múltiples usuarios en una sola sucursal que transfiere fondos entre cuentas sin ver nunca la moneda.
La historia principal para ilustrar es quién es su fuente autorizada: Trataré de ilustrar: un usuario quiere sacar dinero del cajero automático. El usuario no va a la sucursal y declara "Tengo $ 500, confía en mí, estos son los números de serie". En su lugar, entrega la clave [número de cuenta / clave] y la sucursal / servidor puede notificar al usuario sobre sus fondos y permitirle sacar dinero mientras disminuye su saldo. No importa lo que haga un usuario para tratar de convencer al banco "Realmente, tengo $ 500" a menos que la fuente autorizada (el servidor) verifique el saldo, no sucederá nada.
Aclamaciones.
fuente
Si intentas programar una simulación de juego basada en cómo funciona el mundo real, te encontrarás con grandes problemas cuando se trata de cuánta información puede procesar una computadora.
Tomemos, por ejemplo, la siguiente página, que es un intento de calcular cuántos átomos hay en un grano de arena.
http://www.thenakedscientists.com/forum/index.php?topic=6447.0
He visto muchos problemas como este al estudiar química y física y el número ridículamente alto al que llegó la persona en esta página está en el estadio de lo que he visto inventar a varios maestros y libros de texto. -> 78 000 000 000 000 000 000
Incluso si esto está muy lejos y elimina 6 de esos ceros, aún tendrá un número que es demasiado grande para que la computadora promedio lo maneje a tasas interactivas. Especialmente cuando hay miles de estas transacciones que tienen lugar en un momento dado.
¿Cómo podríamos calcular y rastrear el momento, las posiciones, la velocidad, las aceleraciones instantáneas, las cargas de campo, etc., de cada átomo en cada grano de arena en una playa si solo un grano tiene 78 000 000 000 000 000 000 de componentes individuales? (O incluso más si considera los componentes subatómicos).
Una vez leí un documento de programación de gráficos nVidia que decía algo como lo siguiente.
Haga lo que ofrezca la mejor aproximación del aspecto, porque nadie realmente podrá saber si la simulación no es 100% precisa. La eficiencia debe ser tomada en consideración.
Lo mismo se aplica para todo tipo de simulación de juegos, incluso si no tiene que ver con los gráficos. Probablemente solo deberías hacer lo mínimo necesario para que las cosas funcionen. Si haces todo lo posible aquí, enterrarás la computadora en una complejidad que no puede manejar.
También tendrá que escribir e intentar mantener un código de esta complejidad.
Puede dar números de serie únicos a cada unidad de moneda, pero utilizará todos los recursos de la computadora solo con este detalle.
Quizás una mejor manera de manejar esto es dar solo 1 identificación única para cada transacción.
Entonces el jugador # 1 paga al jugador # 2 $ 1000000.
Si le da a cada dólar un identificador único, las computadoras de muchas personas comenzarán a tener grandes problemas, sin mencionar todo el tráfico de red y el retraso que esto causará.
O simplemente puede crear un valor que represente la transacción completa.
uint transferFunds_Player1ToPlayer2 = 1000000;
Incluso una calculadora de bolsillo de 20 años puede manejar algo como esto.
fuente