Devo atribuir um ID exclusivo a unidades individuais da moeda do jogo?


22

Atualmente, estou fazendo um MMORPG.

No momento, estou trabalhando na parte da moeda do jogo, mas estou confuso se devo atribuir um número de série exclusivo para cada unidade da moeda gerada.

Espero usar esse sistema para rastrear qualquer uso indevido da moeda virtual, mas isso é uma prática comum e, se não, seria uma boa idéia do ponto de vista operacional e / ou de desempenho?


8
Quantas vezes acontecerá no seu jogo que um jogador transfira cerca de um milhão de zorkmids para outro? Quando isso acontecer, você precisará atualizar um milhão de entidades no seu banco de dados?
Philipp

1
Esta é realmente uma ideia interessante. BitCoin faz algo parecido com isto, para quantidades arbitrárias de moeda. Pode haver uma solução / possibilidade.
ashes999

4
@ ashes999 O pessoal da bitcoin stackexchange diz que o BitCoin também rastreia saldos de contas e não unidades individuais de moeda.
Philipp

1
Se o dinheiro é completamente fungível , um zorkmid é como qualquer outro.
21415 Joe

1
Joe não é verdade. Barras de ouro puro são completamente fungíveis, mas geralmente são serializadas para evitar desfalques.
Carl Smith

Respostas:


26

É improvável que faça sentido.

Quando recebo 100 Zorkmids do Jogador A e 100 Zorkmids do Jogador B, tenho 200 Zorkmids.

Quando eu pagar 50 Zorkmids para o Jogador C, C os receberá dos Zorkmids que obtive no formulário A ou daqueles que obtive no B? Eu tenho controle sobre isso? Isso importa? Um Zorkmid é um Zorkmid.

Definitivamente, isso não importa para bancos e contadores do mundo real, todos eles rastreando o histórico de transações das contas, não o histórico de transações de unidades individuais de moeda. Ainda é possível identificar o uso indevido dessa maneira.

Dito isso, eu poderia imaginar um jogo que trate moedas individuais como itens de inventário; portanto, quando você negocia com alguém, precisa se certificar de ter trocas sobressalentes. Isso permitiria alguns recursos interessantes, como marcar, encantar ou falsificar moedas. Nesse caso, faria sentido rastrear cada moeda individualmente. Mas não consigo pensar em nenhum jogo que realmente faça isso.


5
Acabei de me lembrar de um jogo que realmente rastreia cada moeda individual, mas não é um jogo online: Dwarf Fortress . Mas, assim como muitas dessas coisas que ele simula, ele realmente não usa isso em todo o seu potencial de jogo.
Philipp

4
Tenho de constatar que o meu verdadeiro £ 10 nota tem HC40415464escrito nele por isso há claramente alguma vantagem de ter um ID único e goverments do mundo real se importam
Richard Tingle

2
@RichardTingle, as notas reais têm números de série para permitir pelo menos alguma possibilidade de rastrear transações e tornar a falsificação mais difícil (se você imprimir o mesmo número em todas as notas, alguém poderá notar). Mas em um jogo todas as transações em moeda são rastreadas por uma autoridade central e a falsificação não é possível.
CJM

Eu amo a idéia de um jogo que realmente permite a contrafação de moedas. Haveria um mercado inteiro apenas para feitiços e itens que poderiam detectá-los e, claro, todo um contra-mercado de falsificações "não detectáveis"! Além disso, há o potencial de ter um site "de Onde Zork" ...
Tim Holt

3
Esta resposta 'correta' está errada. Os bancos do mundo real gastam muito para rastrear unidades individuais de dinheiro.
Carl Smith

6

Não, você não deveria.

Embora você deva criar sistemas que permitam rastrear transações em moeda (especialmente se essa moeda for um ofuscador com dinheiro real), não será necessário rastrear todas as unidades individuais dessa moeda. O que você está interessado em acompanhar é a movimentação agregada de fundos, principalmente em grandes volumes (pois isso pode ser um indicador de possíveis transações externas / não autorizadas em dinheiro real). O rastreamento de unidades individuais de moeda não ajuda nisso (na verdade, pode doer) e apenas complica a manutenção dos dados relevantes, exigindo que você gere muitos IDs e armazene volumes relativamente grandes de informações em seu banco de dados.

Existe algum valor nessa idéia para as moedas do ofuscador de dinheiro real (ou seja, algo que você compra com dinheiro do mundo real usado para comprar conteúdo do jogo, como as jóias de Guild Wars 2). Em particular, esse desejo pode surgir para desambiguar entre as unidades de moeda introduzidas na economia como "gratuitas" versus aquelas que foram introduzidas por meio de uma transação real no mundo real. Geralmente, você só pode reconhecer a receita no último, por isso é importante mantê-lo distinto.

No entanto, você pode rastrear as informações necessárias simplesmente armazenando os números em agregado (total de unidades, total de unidades, para instâncias 'gratuitas' e 'pagas' da moeda). Isso acompanha a ideia geral de que você deseja rastrear essas coisas de forma agregada, geralmente no nível da transação e não no atual, pois ele rastreia os dados que você realmente precisa e facilita o rastreamento de grandes quantidades de fundos à medida que se dispersam. em todo o sistema.


4

Nota do autor: Essa resposta foi feita com a suposição de que você não está negociando enquanto estiver fora da rede e depois sincronizando de volta com os servidores.

Você não precisa rastrear números de série individuais de moedas especificamente porque qualquer transação entre jogadores individuais deve acontecer através de seus servidores. Em outras palavras, seus servidores são a fonte autorizada dos saldos das contas. Seus servidores não perguntarão ao usuário quanto dinheiro ele possui. Os clientes conectados aos servidores perguntam ao servidor "Quanto dinheiro meu player possui" por meio de uma chamada de API. Isso pressupõe que os jogadores não estão negociando enquanto estão fora da rede e depois sincronizando com o (s) servidor (es) [Embora isso seja novo, eu não recomendo, a menos que você queira gastar muito tempo em teoria ]

No exemplo da moeda do governo, a única fonte autorizada é a moeda quando não está anexada à conta. eles passaram pelo aborrecimento de fazê-lo). Quando a conta é recebida em um banco, existem maneiras de determinar se os números de série foram marcados como fora de circulação, etc]. Porém, suas transações são mais semelhantes a vários usuários em uma única agência, transferindo fundos entre contas sem nunca ver a moeda.

A principal história a ser ilustrada é exatamente quem é sua fonte autorizada: tentarei ilustrar: um usuário deseja retirar dinheiro do caixa eletrônico. O usuário não vai para a filial e declara "Tenho US $ 500, confie em mim, estes são os folhetins". Em vez disso, ele entrega a chave [número da conta / chave] e a agência / servidor pode notificar o usuário de seus fundos e permitir que ele retire moedas enquanto diminui seu saldo. Não importa o que um usuário faça para tentar convencer o banco "Realmente, tenho US $ 500", a menos que a fonte autorizada (o servidor) verifique o saldo, nada acontecerá.

Felicidades.


2

Se você tentar programar uma simulação de jogo com base no funcionamento do mundo real, terá grandes problemas quando se trata de quanta informação um computador pode processar.
Tomemos, por exemplo, a página a seguir, que é uma tentativa de calcular quantos átomos existem em um grão de areia.

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

Eu já vi muitos problemas assim estudando química e física, e o número ridiculamente alto que a pessoa nesta página chegou está no estádio do que eu vi vários professores e livros didáticos. -> 78 000 000 000 000 000 000

Mesmo que isso esteja muito distante e você remova 6 desses zeros, você ainda terá um número muito grande para o computador comum lidar com taxas interativas. Especialmente quando existem milhares dessas transações em um determinado momento.

Como poderíamos calcular e rastrear o momento, as posições, a velocidade, as acelerações instantâneas, as cargas de campo, etc., de cada átomo em cada grão de areia de uma praia, se apenas um grão possui 78 000 000 000 000 000 000 componentes individuais. (Ou ainda mais, se você considerar os componentes subatômicos.)

Certa vez, li um documento de programação gráfica da nVidia que dizia algo como o seguinte.
Faça o que for melhor para obter uma boa aparência, porque ninguém será capaz de dizer se a simulação não é 100% precisa. A eficiência deve ser levada em consideração.

O mesmo se aplica a todo tipo de simulação de jogo, mesmo que não tenha relação com gráficos. Você provavelmente deve fazer apenas o mínimo necessário para fazer as coisas funcionarem. Se você fizer tudo isso aqui, enterrará o computador com complexidade que ele não pode suportar.
Você também precisará escrever e tentar manter o código dessa complexidade.

Você pode fornecer números de série exclusivos para cada unidade de moeda, mas usará todos os recursos do computador apenas neste detalhe.

Talvez a melhor maneira de lidar com isso seja fornecer apenas uma identificação única para cada transação.

Portanto, o jogador 1 paga $ 1000000 ao jogador 2.
Se você atribuir a cada dólar um identificador único, os computadores de muitas pessoas começarão a ter grandes problemas, sem mencionar todo o tráfego de rede e o atraso que isso causará.

Ou você pode apenas criar um valor que represente toda a transação.

uint transferFunds_Player1ToPlayer2 = 1000000;

Mesmo uma calculadora de bolso de 20 anos pode lidar com algo assim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.