Bireysel oyun para birimlerine benzersiz bir kimlik atamalı mıyım?


22

Şu anda bir MMORPG yapıyorum.

Şu anda, oyunun para birimi üzerinde çalışıyorum, ancak oluşturulan para biriminin her birimi için benzersiz bir seri numarası atamam gerekip gerekmediği konusunda kafam karıştı.

Bu sistemi sanal para biriminin kötüye kullanımını izlemek için kullanmayı umuyorum, ancak bu yaygın bir uygulama mı, değilse de operasyonel ve / veya performans açısından iyi bir fikir olabilir mi?


8
Oyunda, bir oyuncunun milyonlarca zorkid'i diğerine transfer etmesi ne sıklıkta olacak? Bu olduğunda, veritabanınızdaki bir milyon kişiyi güncellemeniz gerekecek mi?
Philipp

1
Bu aslında ilginç bir fikir. BitCoin, isteğe bağlı para birimleri için böyle bir şey yapar. Bir çözüm / olasılık olabilir.
ashes999

4
@ ashes999 Bitcoin stackexchange'teki adamlar, BitCoin'in ayrıca bireysel para birimlerini değil hesap bakiyelerini takip ettiğini söylüyor.
Philipp

1
Para tamamen ise karşılanabilir sonra bir zorkmid tıpkı diğer gibidir.
Joe

1
Doğru değil Joe. Saf altın külçesi tamamen elverişlidir, ancak zimmetlenmeyi önlemek için sıklıkla seri hale getirilir.
Carl Smith,

Yanıtlar:


26

Mantıklı gelmesi mümkün değil.

Oyuncu A'dan 100 Zorkmids ve Oyuncu B'den 100 Zorkmids aldığımda 200 Zorkmids var.

O zaman Oyuncu C'ye 50 Zorkmids ödedim, C onları A formundan veya B'den aldığım Zorkmidlerden alır mı? Bunun üzerinde kontrol sahibi miyim? Fark eder mi? Bir Zorkmid bir Zorkmiddir.

Tek tek para birimlerinin işlem geçmişini değil, hesapların işlem geçmişini izleyen gerçek dünya bankaları ve muhasebeciler için kesinlikle önemli değil. Bu şekilde kötüye kullanımı tespit etmek hala mümkündür.

Bununla birlikte, bireysel paraları envanter eşyası olarak gören bir oyun hayal edebiliyorum , bu yüzden biriyle işlem yaparken yedek değişimin olduğundan emin olmalısın. Bu, markalama, büyüleyici veya sahte paralar gibi bazı ilginç özelliklere izin verir. Bu durumda, her bozuk para ayrı ayrı izlemek için mantıklı olacaktır. Ama bunu yapan hiçbir oyun düşünemiyorum.


5
Sadece her bir bozuk parayı izleyen bir oyunu hatırladım, ancak bu bir çevrimiçi oyun değil: Cüce Kalesi . Ancak, taklit ettiği pek çok şey gibi, bunu gerçekten de tam oyun potansiyeli için kullanmaz.
Philipp

4
10 £ değerindeki HC40415464notumun üzerine yazıldığını ve bu nedenle benzersiz bir kimlik sahibi olmanın bir avantajı olduğunu ve gerçek dünya hükümetlerinin umursamadığını not etmeliyim
Richard Tingle

2
@RichardTingle, gerçek notların en azından bazı takip işlemlerini yapma olasılığına izin vermek ve sahteciliği daha zor hale getirmek için seri numaralara sahiptir (aynı numarayı her nota yazdırırsanız, birileri fark edebilir). Ancak bir oyunda tüm döviz işlemleri merkezi bir otorite tarafından izlenir ve sahtecilik mümkün değildir.
cjm

Madeni paraların dengelenmesine izin veren bir oyun fikrini seviyorum. Sadece onları tespit edebilecek büyüler ve eşyalar için bir pazar ve elbette "algılanamayan" sahtecilikten oluşan bir karşı pazar! Ayrıca, "Where's Zork" web sitesine sahip olma potansiyeli var ...
Tim Holt

3
Bu 'doğru' cevap yanlıştır. Gerçek dünya bankaları, bireysel para birimlerini takip etmek için büyük bir masrafa gitmektedir.
Carl Smith,

6

Hayır yapmamalısın.

Para birimi işlemlerini izleyebilecek sistemler kurmanız gerekirken (özellikle bu para birimi gerçek para ödeyici ise), o para biriminin her bir birimini izlemeniz gerekmez . Takip etmek istediğiniz şey, özellikle büyük hacimlerde fonların toplam hareketidir (çünkü bu potansiyel dış / izinsiz gerçek para işlemlerinin bir göstergesi olabilir). Bireysel para birimlerini takip etmek buna yardımcı olmaz (aslında zarar verebilir) ve yalnızca çok sayıda kimlik oluşturmanızı ve veritabanınıza nispeten büyük miktarda bilgi depolamanızı isteyerek ilgili verilerin bakımını zorlaştırır.

Bu fikir için gerçek parayla bloke edici para birimleri için bir değer vardır (yani, Guild Wars 2'deki taşlar gibi oyun içi içerik satın almak için kullanılan gerçek dünya parasıyla satın aldığınız şey ). Özellikle, bu arzu, ekonomiye verilen para birimi birimleri arasında "özgür" olan gerçek bir gerçek dünya işlemiyle getirilenler arasındaki farkı belirlemek amacıyla ortaya çıkabilir. Genel olarak, yalnızca nihayetinde gelirin sonundaki geliri tanıyabilirsiniz, bu nedenle onları farklı tutmak önemlidir.

Ancak, sayıları toplamda (para biriminin hem 'ücretsiz' hem de 'ödenen' 'toplamı için toplam birim giriş, toplam birim çıkış olarak) depolayarak ihtiyaç duyduğunuz bilgileri izleyebilirsiniz. Bu, genel olarak gerek duyduğunuz verileri takip ettiği ve büyük miktarda fon parçasını izlemeyi kolaylaştırdığı için , genel olarak işlem düzeyinde ve mevcut düzeyde değil , bunları genel olarak takip etmek istediğiniz genel fikrine uyar. Sisteminiz boyunca.


4

Yazarın notu: Bu cevap, ağ kapalıyken işlem yapmadığınız ve ardından sunuculara geri senkronizasyon yaptığınız varsayımıyla yapılmıştır.

Tek tek seri para birimlerini takip etmeniz gerekmez, çünkü tek tek oyuncular arasındaki işlemlerin sunucularınız üzerinden yapılması gerekir. Başka bir deyişle, sunucularınız hesap bakiyeleri üzerindeki yetkili kaynaktır. Sunucularınız kullanıcıya ne kadar paraya sahip olduğunu sormayacak. Sunuculara bağlı istemciler, bir api çağrısı ile sunucuya "oynatıcımın ne kadar parası var" sorusunu sorar. Bu, oyuncuların ağ kapalıyken işlem yapmadığı ve daha sonra sunuculara geri döndüğü varsayımını yerleştirir [Bu yeni olsa da teoride çok zaman harcamak istemiyorsanız bunu önermem ].

Hükümet para biriminin örneğinde, tek yetkili kaynak, hesaba eklenmemiş olan para birimidir. bunu yapmakta güçlük çektiler). Fatura bir bankaya alındığında, seri numaralarının dolaşım dışı olarak işaretlenip işaretlenmediğini belirlemenin yolları vardır]. Ancak, işlemleriniz, para birimini görmeden hesaplar arasında para transferi yapan tek bir şubedeki birden fazla kullanıcıya benzer.

Gösterilecek ana hikaye sadece sizin yetkili kaynağınızdır: Göstermeye çalışacağım: Bir kullanıcı ATM'den para çekmek istiyor. Kullanıcı şubeye gitmez ve "500 dolarım var, bana güven, bunlar seri" diyor. Bunun yerine anahtarını [hesap numarası / anahtarı] verir ve şube / sunucu parasını kullanıcıya bildirir ve dengesini düşürürken para almasına izin verebilir. Bir kullanıcının bankayı ikna etmeye çalıştığı şey ne olursa olsun, yetkili kaynak (sunucu) bakiyeyi doğrulamadığı sürece 500 dolar buldum.

Şerefe.


2

Gerçek dünyanın nasıl çalıştığına bağlı olarak bir oyun simülasyonu programlamaya çalışırsanız, o zaman bir bilgisayarın ne kadar bilgi işleyebileceği konusunda bazı büyük problemlerle karşılaşacaksınız.
Örneğin, bir kum tanesinde kaç atom bulunduğunu hesaplamaya çalışan bir sonraki sayfayı ele alalım.

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

Bunun gibi kimya ve fizik okumaktan ve bu sayfadaki kişinin geldiği saçma sayıdaki yüksek sayıların, çeşitli öğretmenler ve ders kitaplarının ortaya çıktığını gördüğü top parkında olduğunu gördüm. -> 78 000 000 000 000 000 000

Bu yol kapalı olsa ve bu sıfırdan 6'sını kaldırsanız bile, ortalama bilgisayarın etkileşimli hızlarda ele alması için çok büyük bir sayıya sahip olacaksınız. Özellikle bu işlemlerden 1000'lerin herhangi bir zamanda gerçekleşmesi durumunda.

Sadece bir tane 78 000 000 000 000 000 000 münferit bileşene sahipse, kumsaldaki her bir kum tanesindeki her atomun momentumunu, konumlarını, hızını, anlık ivmelerini, alan yüklerini vb. Nasıl hesaplayabiliriz ve izleyebiliriz. (Alt atomik bileşenleri göz önüne alırsanız daha da fazla.)

Bir keresinde aşağıdaki gibi bir şey ifade eden bir nVidia grafik programlama belgesini okudum.
İyi görünüme en iyi yaklaşımı veren şeyi yapın, çünkü simülasyonun% 100 doğru olup olmadığını kimse anlayamaz. Verimlilik dikkate alınmalıdır.

Aynı şey, grafiklerle ilgisi olmasa bile, her tür oyun simülasyonu için de geçerlidir. Muhtemelen işlerin yürümesi için gerekenlerin sadece minimumunu yapmalısınız. Hepsini buraya çıkarsanız, bilgisayarı kullanamadığı karmaşıklığa gömeceksiniz.
Ayrıca, bu karmaşıklığın kodunu yazmalı ve denemelisiniz.

Her birim para birimine benzersiz seri numaraları verebilirsiniz, ancak tüm bilgisayar kaynaklarını bu ayrıntıda kullanırsınız.

Belki de bunun üstesinden gelmek için daha iyi bir yol, her işlem için yalnızca 1 benzersiz kimlik vermektir.

Yani # 1 oyuncu # 2 $ 1000000 öder.
Her dolara benzersiz bir tanımlayıcı verirseniz, çoğu insanın bilgisayarlarında tüm ağ trafiğinden ve bunun neden olacağı gecikmeden bahsetmek yerine büyük sorunlar yaşamaya başlarsınız.

Veya işlemin tamamını temsil eden yalnızca bir değer oluşturabilirsiniz.

uint transferFunds_Player1ToPlayer2 = 1000000;

20 yaşında bir cep hesap makinesi bile böyle bir şeyle başa çıkabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.