Obecnie tworzę MMORPG.
W tej chwili pracuję nad częścią walutową gry, ale nie wiem, czy powinienem przypisać unikalny numer seryjny do każdej wygenerowanej jednostki waluty.
Mam nadzieję, że wykorzystam ten system do śledzenia niewłaściwego wykorzystania wirtualnej waluty, ale czy jest to powszechna praktyka, a jeśli nie, czy byłby to dobry pomysł z punktu widzenia operacyjnego i / lub wydajnościowego?
Odpowiedzi:
Jest mało prawdopodobne, aby miało to sens.
Kiedy otrzymam 100 Zorkmidów od Gracza A i 100 Zorkmidów od Gracza B, mam 200 Zorkmidów.
Kiedy następnie zapłacę 50 Zorkmidom Graczowi C, czy C otrzyma je od Zorkmidów, które dostałem od A, czy od B? Czy mam nad tym kontrolę? Czy to w ogóle ma znaczenie? Zorkmid to Zorkmid.
Z pewnością nie ma to znaczenia dla banków i księgowych z prawdziwego świata, które śledzą historię transakcji na rachunkach, a nie historię transakcji poszczególnych jednostek waluty. Nadal można w ten sposób zidentyfikować niewłaściwe użycie.
Biorąc to pod uwagę, mogę sobie wyobrazić grę, która traktuje poszczególne monety jako przedmioty ekwipunku, więc kiedy handlujesz z kimś, musisz upewnić się, że masz zapasowe zmiany. Pozwoliłoby to na kilka interesujących funkcji, takich jak znakowanie, zaklęcie lub fałszowanie monet. W takim przypadku sensowne byłoby śledzenie każdej monety osobno. Ale nie mogę wymyślić żadnej gry, która by to zrobiła.
źródło
HC40415464
na nim napisane tak wyraźnie istnieje jakiś zaletą posiadające unikalny identyfikator i prawdziwe goverments świat obchodziNie powinieneś.
Chociaż powinieneś budować systemy, które pozwolą ci śledzić transakcje walutowe (szczególnie jeśli ta waluta jest zaciemniaczem prawdziwych pieniędzy), nie musisz śledzić każdej pojedynczej jednostki tej waluty. Rzeczą, którą chcesz śledzić, jest łączny przepływ funduszy, szczególnie w dużych ilościach (ponieważ może to wskazywać na potencjalne zewnętrzne / niesankcjonowane transakcje na prawdziwe pieniądze). Śledzenie poszczególnych jednostek waluty nie pomaga w tym (w rzeczywistości może zaszkodzić), a jedynie komplikuje utrzymanie odpowiednich danych, wymagając wygenerowania dużej liczby identyfikatorów i przechowywania stosunkowo dużej ilości informacji w bazie danych.
Pomysł na waluty zaciemniające z prawdziwych pieniędzy ma pewną wartość (to znaczy, że kupujesz za prawdziwe pieniądze, które służą do kupowania zawartości w grze, na przykład klejnotów w Guild Wars 2). W szczególności pragnienie to może powstać w celu rozróżnienia między jednostkami waluty wprowadzonymi do gospodarki „za darmo” a tymi, które zostały wprowadzone w drodze rzeczywistej transakcji w świecie rzeczywistym. Zasadniczo możesz ostatecznie rozpoznać przychody z tych ostatnich, dlatego ważne jest, aby były odrębne.
Można jednak śledzić potrzebne informacje, po prostu przechowując liczby w agregacie (łączna liczba jednostek, całkowita liczba jednostek dla obu „darmowych” i „płatnych” wystąpień waluty). Jest to zgodne z ogólną ideą, że chcesz śledzić te rzeczy łącznie, na ogół poziom transakcji , a nie bieżący poziom, ponieważ zarówno śledzi to, czego naprawdę potrzebujesz, jak i ułatwia śledzenie dużych kawałków funduszy podczas ich rozpraszania w całym systemie.
źródło
Nota autora: Ta odpowiedź została założona przy założeniu, że nie prowadzisz handlu poza siecią, a następnie synchronizujesz z powrotem na serwerach.
Nie musisz śledzić poszczególnych numerów seryjnych walut, ponieważ każda transakcja między poszczególnymi graczami musi odbywać się za pośrednictwem serwerów. Innymi słowy, twoje serwery są wiarygodnym źródłem sald kont. Twoje serwery nie zapytają użytkownika, ile pieniędzy ma. Klienci podłączeni do serwerów pytają serwer „Ile pieniędzy ma mój gracz” za pośrednictwem połączenia API. To zakłada założenie, że gracze nie handlują poza siecią, a następnie synchronizują z powrotem na serwerach. Chociaż byłoby to nowością, nie polecam, chyba że chcesz spędzić dużo czasu w teorii ].
W przykładzie waluty rządowej jedynym wiarygodnym źródłem jest waluta, gdy nie jest dołączona do konta [Mężczyzna bierze 200 $, każdy rachunek jest „podpisany” numerem seryjnym, który oznacza go, aby inni mogli ustalić, czy jest on prawdziwy (jeśli przeszli przez to z trudem), aby to wziąć]. Po przyjęciu rachunku do banku istnieją sposoby ustalenia, czy numery seryjne zostały oznaczone jako wycofane z obiegu itp.]. Ale twoje transakcje są bardziej podobne do wielu użytkowników w jednym oddziale przesyłających środki między kontami, nigdy nie widząc waluty.
Główną historią do zilustrowania jest to, kto jest Twoim autorytatywnym źródłem: Spróbuję zilustrować: Użytkownik chce wziąć pieniądze z bankomatu. Użytkownik nie idzie do oddziału i deklaruje „Mam 500 $, zaufaj mi, to są seriale”. Zamiast tego przekazuje klucz [numer konta / klucz], a oddział / serwer może powiadomić użytkownika o swoich środkach i pozwolić mu na wyjęcie waluty, jednocześnie zmniejszając saldo. Bez względu na to, co użytkownik zrobi, aby przekonać bank „Naprawdę, mam 500 $”, chyba że wiarygodne źródło (serwer) zweryfikuje saldo, nic się nie stanie.
Twoje zdrowie.
źródło
Jeśli spróbujesz zaprogramować symulację gry w oparciu o to, jak działa rzeczywisty świat, napotkasz duże problemy, jeśli chodzi o ilość informacji, które komputer może przetworzyć.
Weźmy na przykład następną stronę, która jest próbą obliczenia liczby atomów w ziarnie piasku.
http://www.thenakedscientists.com/forum/index.php?topic=6447.0
Widziałem wiele takich problemów związanych ze studiowaniem chemii i fizyki oraz absurdalnie wysoką liczbą osób, które pojawiły się na tej stronie, znajdują się w parku gry, w którym widziałem różnych nauczycieli i podręczniki. -> 78 000 000 000 000 000 000
Nawet jeśli jest to bardzo dalekie i usuniesz 6 z tych zer, nadal będziesz mieć liczbę, która jest zbyt duża, aby przeciętny komputer poradził sobie z interaktywnymi stawkami. Zwłaszcza, gdy w danym momencie ma miejsce 1000 takich transakcji.
Jak moglibyśmy obliczyć i śledzić pęd, pozycje, prędkość, chwilowe przyspieszenia, ładunki pola itp. Każdego atomu w każdym ziarnie piasku na plaży, jeśli tylko jedno ziarno ma 78 000 000 000 000 000 000 poszczególnych składników. (Lub nawet więcej, jeśli weźmie się pod uwagę składniki subatomowe).
Kiedyś przeczytałem dokument programistyczny grafiki nVidia, który stwierdził coś takiego.
Rób to, co daje najlepsze przybliżenie wyglądu, ponieważ nikt tak naprawdę nie będzie w stanie stwierdzić, czy symulacja nie jest w 100% dokładna. Należy wziąć pod uwagę wydajność.
To samo dotyczy każdego rodzaju symulacji gry, nawet jeśli nie ma ona związku z grafiką. Prawdopodobnie powinieneś zrobić minimum tego, co jest potrzebne, aby wszystko działało. Jeśli pójdziecie tutaj wszyscy, pogrzebicie komputer w złożoności, z którą nie będzie w stanie sobie poradzić.
Będziesz także musiał pisać i próbować zachować kod o tej złożoności.
Możesz podać unikalne numery seryjne każdej jednostce waluty, ale wykorzystasz wszystkie zasoby komputera tylko na jednym szczególe.
Być może lepszym sposobem na poradzenie sobie z tym jest nadanie tylko 1 unikalnego identyfikatora dla każdej transakcji.
Gracz nr 1 płaci graczowi nr 2 1000000 $.
Jeśli nadasz każdemu dolarowi unikalny identyfikator, komputery wielu ludzi zaczną mieć duże problemy, nie wspominając o całym ruchu sieciowym i opóźnieniu, które to spowoduje.
Lub możesz po prostu utworzyć jedną wartość, która reprezentuje całą transakcję.
uint transferFunds_Player1ToPlayer2 = 1000000;
Nawet 20-letni kalkulator kieszonkowy poradzi sobie z czymś takim.
źródło