Devo assegnare un ID univoco alle singole unità della valuta di gioco?


22

Attualmente sto realizzando un MMORPG.

Al momento, sto lavorando sulla parte valutaria del gioco, ma sono confuso se dovrei assegnare un numero seriale univoco per ogni unità della valuta generata.

Spero di utilizzare questo sistema per rintracciare qualsiasi uso improprio della valuta virtuale, ma è una pratica comune e, in caso contrario, sarebbe una buona idea dal punto di vista operativo e / o delle prestazioni?


8
Con quale frequenza accadrà nel tuo gioco che un giocatore trasferisca circa un milione di zorkmid a un altro? Quando ciò accade, dovrai aggiornare un milione di entità nel tuo database?
Philipp

1
Questa è in realtà un'idea interessante. BitCoin fa qualcosa del genere, per importi arbitrari di valuta. Potrebbe esserci una soluzione / possibilità.
ashes999,

4
@ ashes999 I ragazzi di bitcoin stackexchange affermano che BitCoin traccia anche i saldi dei conti e non le singole unità di valuta.
Philipp,

1
Se il denaro è completamente fungibile, allora uno zorkmid è come un altro.
Joe,

1
Non è vero Joe. Il lingotto d'oro puro è completamente fungibile, ma è spesso serializzato per prevenire l'appropriazione indebita.
Carl Smith,

Risposte:


26

È improbabile che abbia senso.

Quando ricevo 100 Zorkmids dal giocatore A e 100 Zorkmids dal giocatore B, ho 200 Zorkmids.

Quando poi pago 50 Zorkmids al giocatore C, C li prenderà dagli Zorkmids che ho ricevuto dal modulo A o da quelli che ho ricevuto da B? Ho il controllo su questo? Importa anche? Uno Zorkmid è uno Zorkmid.

Sicuramente non importa per le banche e i contabili del mondo reale che tracciano tutti la cronologia delle transazioni dei conti, non la cronologia delle transazioni delle singole unità di valuta. È ancora possibile identificare un uso improprio in questo modo.

Detto questo, potrei immaginare un gioco che tratta le singole monete come oggetti di inventario, quindi quando scambi con qualcuno, devi assicurarti di avere un ricambio. Ciò consentirebbe alcune caratteristiche interessanti, come la marcatura, l'incanto o la contraffazione di monete. In tal caso avrebbe senso tracciare ciascuna moneta singolarmente. Ma non riesco a pensare a nessun gioco che lo faccia davvero.


5
Ho appena ricordato un gioco che in realtà rintraccia ogni singola moneta, ma non è un gioco online: Dwarf Fortress . Ma proprio come molte di quelle cose che simula, non lo utilizza davvero per il suo pieno potenziale di gioco.
Philipp,

4
Devo notare che la mia vera banconota da £ 10 ha HC40415464scritto su di essa, quindi c'è chiaramente qualche vantaggio nell'avere un documento d'identità unico e le amministrazioni del mondo reale se ne interessano
Richard Tingle,

2
@RichardTingle, le note reali hanno numeri di serie per consentire almeno alcune possibilità di tracciare le transazioni e rendere più difficile la contraffazione (se si stampa lo stesso numero su ogni nota, qualcuno potrebbe accorgersene). Ma in un gioco tutte le transazioni in valuta sono monitorate da un'autorità centrale e la contraffazione non è possibile.
cjm

Adoro l'idea di un gioco che in realtà consente la contraffazione di monete. Ci sarebbe un intero mercato solo per incantesimi e oggetti che potrebbero rilevarli, e naturalmente un intero contro-mercato di falsi "non rilevabili"! Inoltre, c'è il potenziale di avere un sito web "Where's Zork" ...
Tim Holt,

3
Questa risposta "corretta" è sbagliata. Le banche del mondo reale fanno grandi spese per tracciare le singole unità di denaro.
Carl Smith,

6

No, non dovresti.

Mentre dovresti costruire sistemi che possano permetterti di tracciare le transazioni in valuta (specialmente se quella valuta è un offuscatore di denaro reale), non è necessario tracciare ogni singola unità di quella valuta. La cosa che ti interessa monitorare è il movimento aggregato di fondi, in particolare in grandi volumi (poiché potrebbe essere un indicatore di potenziali transazioni in denaro reale esterne / non autorizzate). Tracciare singole unità di valuta non aiuta a farlo (in effetti potrebbe danneggiare) e complica solo la conservazione dei dati rilevanti richiedendo la generazione di molti ID e l'archiviazione di volumi relativamente massicci di informazioni nel database.

Questa idea ha un certo valore per le valute degli offuscatori con denaro reale (vale a dire, cosa che compri con denaro reale utilizzato per acquistare contenuti di gioco, come le gemme di Guild Wars 2). In particolare, questo desiderio potrebbe sorgere al fine di chiarire le ambiguità tra le unità di valuta introdotte nell'economia come "libere" rispetto a quelle che sono state introdotte tramite una transazione reale. In generale, in ultima analisi, puoi riconoscere solo le entrate relative a quest'ultima, quindi è importante tenerle distinte.

Tuttavia, è possibile tenere traccia delle informazioni necessarie semplicemente memorizzando i numeri in aggregati (unità totali in entrata, unità totali in uscita, sia per le istanze "gratuite" che "pagate" della valuta). Ciò si accompagna all'idea generale di voler tenere traccia di queste cose in forma aggregata, generalmente a livello di transazione e non a livello corrente, in quanto tiene traccia dei dati di cui hai veramente bisogno e rende più facile rintracciare grossi pezzi di fondi mentre si disperdono in tutto il tuo sistema.


4

Nota dell'autore: questa risposta ha assunto il presupposto che non stai facendo trading mentre sei fuori rete e quindi sincronizzato con i server.

Non è necessario tenere traccia dei singoli numeri di serie delle valute in particolare perché qualsiasi transazione tra singoli giocatori deve avvenire attraverso i server. In altre parole, i tuoi server sono la fonte autorevole sui saldi degli account. I tuoi server non chiederanno all'utente quanti soldi ha. I client collegati ai server chiedono al server "Quanti soldi ha il mio giocatore" tramite una chiamata API. Questo presuppone che i giocatori non stiano facendo trading mentre sono fuori rete e quindi si sincronizzano di nuovo con il / i server [Anche se sarebbe un romanzo, non lo consiglio a meno che tu non voglia passare molto tempo in teoria ].

Nell'esempio della valuta del governo, l'unica fonte autorevole è la valuta quando non è collegata all'account [Un uomo prende $ 200, ogni fattura viene "firmata" con un numero seriale che lo etichetta in modo che altri possano determinare se è reale (se sono passati attraverso la seccatura di farlo) per prenderlo]. Quando la fattura viene presa in una banca, ci sono modi per determinare se i numeri di serie sono stati contrassegnati come fuori circolazione, ecc.]. Tuttavia, le tue transazioni sono più simili a più utenti in una singola filiale trasferendo fondi tra conti senza mai vedere la valuta.

La storia principale da illustrare è solo chi è la tua fonte autorevole: proverò a illustrare: un utente vuole prelevare denaro dall'atmosfera. L'utente non va alla filiale e dichiara "Ho $ 500, fidati di me, questi sono i periodici". Fornisce invece la chiave [numero / chiave conto] e la filiale / server può comunicare all'utente i suoi fondi e consentirgli di prelevare valuta riducendo al contempo il suo saldo. Indipendentemente da ciò che un utente fa per cercare di convincere la banca "Davvero, ho $ 500" a meno che la fonte autorevole (il server) non verifichi il saldo, non accadrà nulla.

Saluti.


2

Se si tenta di programmare una simulazione di gioco in base al modo in cui funziona il mondo reale, si verificheranno alcuni grossi problemi quando si tratta della quantità di informazioni che un computer può elaborare.
Prendiamo ad esempio la pagina seguente che è un tentativo di calcolare quanti atomi ci sono in un granello di sabbia.

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

Ho visto molti problemi come questo nello studio della chimica e della fisica e il numero ridicolmente alto che la persona in questa pagina è arrivata è nel parco di ciò che ho visto vari insegnanti e libri di testo. -> 78.000.000.000.000.000.000.000

Anche se questo è lontano e si rimuovono 6 di questi zero, si avrà comunque un numero troppo grande per il computer medio da gestire a velocità interattive. Soprattutto quando ci sono migliaia di queste transazioni che si svolgono in un dato momento.

Come potremmo eventualmente calcolare e tracciare lo slancio, le posizioni, la velocità, le accelerazioni istantanee, le cariche sul campo, ecc. Di ogni atomo in ogni granello di sabbia su una spiaggia se solo un granello ha 78.000.000.000.000.000.000.000 di componenti individuali. (O ancora di più se si considerano i componenti subatomici).

Una volta ho letto un documento di programmazione grafica nVidia che affermava qualcosa di simile al seguente.
Fai ciò che dà la migliore approssimazione dell'aspetto, perché nessuno sarà in grado di dire se la simulazione non è accurata al 100%. L'efficienza deve essere presa in considerazione.

Lo stesso vale per ogni tipo di simulazione del gioco anche se non ha a che fare con la grafica. Probabilmente dovresti fare solo il minimo indispensabile per far funzionare le cose. Se vai tutto qui, seppellirai il computer in una complessità che non può gestire.
Dovrai anche scrivere e provare e mantenere il codice di questa complessità.

Potresti dare numeri di serie univoci a ogni unità di valuta, ma utilizzerai tutte le risorse del computer solo su questo dettaglio.

Forse un modo migliore per gestirlo è quello di fornire solo 1 identificativo univoco per ogni transazione.

Quindi il giocatore # 1 paga il giocatore # 2 $ 1000000.
Se dai a ogni dollaro un identificativo univoco, i computer di molte persone inizieranno ad avere grossi problemi, per non parlare di tutto il traffico di rete e del ritardo che ciò causerà.

Oppure puoi semplicemente creare un valore che rappresenta l'intera transazione.

uint transferFunds_Player1ToPlayer2 = 1000000;

Anche una calcolatrice tascabile di 20 anni può gestire qualcosa del genere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.