Чи слід призначити унікальний ідентифікатор окремим одиницям валюти гри?


22

Наразі роблю MMORPG.

На даний момент я працюю над валютною частиною гри, але я збентежений, чи варто призначити унікальний серійний номер для кожної одиниці генерованої валюти.

Я сподіваюся використати цю систему для відстеження будь-якого зловживання віртуальною валютою, але чи є це звичайною практикою, і якщо ні, то це буде хорошою ідеєю з точки зору операцій та / або ефективності?


8
Як часто у вашій грі трапиться так, що один гравець передає близько мільйона zorkmids іншому? Коли це станеться, вам доведеться оновити мільйон осіб у вашій базі даних?
Філіпп

1
Це насправді цікава ідея. BitCoin робить щось подібне для довільної кількості валюти. Можливо, є рішення / можливість.
ashes999

4
@ ashes999 Хлопці в bitcoin stackexchange кажуть, що BitCoin також відстежує залишки на рахунках, а не окремі валютні одиниці.
Філіп

1
Якщо гроші повністю взаємозамінні , то один zorkmid так само , як і будь-який інший.
Джо

1
Не справжній Джо. Чистий золотий злиток є повністю збудливим, але часто серіалізується для запобігання розкрадання.
Карл Сміт

Відповіді:


26

Це навряд чи має сенс.

Коли я отримую 100 Zorkmids від гравця A та 100 Zorkmids від гравця B, у мене є 200 Zorkmids.

Коли я заплачу 50 Zorkmids гравцеві C, чи отримає їх від Zorkmids, я отримав форму A, або ті, які я отримав від B? Чи маю я контроль над цим? Це навіть має значення? Zorkmid - Zorkmid.

Це, безумовно, не має значення для реальних банків та бухгалтерів, які простежують історію трансакцій рахунків, а не історію транзакцій окремих валютних одиниць. Досі можливо визначити неправомірне використання таким чином.

Якщо говорити, я можу уявити гру, яка розглядає окремі монети як товарні речі, тому, торгуючи з ким-небудь, ви повинні переконатися, що у вас є запасні зміни. Це дозволить отримати деякі цікаві особливості, такі як маркування, чарівні або підроблені монети. У цьому випадку було б доцільно простежити кожну монету окремо. Але я не можу придумати жодної гри, яка насправді це робить.


5
Я просто згадав гру, яка насправді простежує кожну окрему монету, але це не онлайн-гра: Dwarf Fortress . Але так само, як і багато з тих речей, які він імітує, він насправді не використовує це для всього свого ігрового потенціалу.
Філіп

4
Я маю зазначити, що моя справжня примітка в розмірі 10 фунтів стерлінгів HC40415464написана на ній, тому явно є певна перевага в тому, щоб мати унікальний ідентифікаційний документ, а уряди реального світу дбають
Річард Тінгл,

2
@RichardTingle, справжні нотатки мають серійні номери, щоб дозволити хоч якусь можливість відстеження транзакцій та ускладнити підробку (якщо ви надрукуєте однаковий номер на кожній ноті, хтось може помітити). Але в грі всі валютні операції відслідковуються центральним органом, і підробляти це неможливо.
cjm

Мені подобається ідея гри, яка фактично дозволяє підробляти монети. Був би цілий ринок лише заклинань та предметів, які могли б їх виявити, і, звичайно, цілий контр-ринок підробок, які не можна виявити! Також є потенціал наявності веб-сайту "Де Зорк" ...
Тім Холт,

3
Ця «правильна» відповідь неправильна. Банки реального світу витрачають великі витрати на відстеження окремих одиниць грошей.
Карл Сміт

6

Ні, ви не повинні.

Хоча ви повинні будувати системи, які дозволять вам відслідковувати валютні операції (особливо якщо ця валюта є обтуратором реальних грошей), вам не потрібно відстежувати кожну окрему одиницю цієї валюти. Що вам цікаво відстежувати - це сукупний рух коштів, особливо у великих обсягах (оскільки це може бути показником потенційних зовнішніх / несанкціонованих операцій з реальними грошима). Відстеження окремих одиниць валюти не допомагає у цьому (адже це може зашкодити), а лише ускладнює збереження відповідних даних, вимагаючи генерувати багато ідентифікаторів та зберігати відносно великі обсяги інформації у вашій базі даних.

Ця ідея має певну цінність для валют обтескателя реальних грошей (тобто те, що ви купуєте за гроші в реальному світі, які використовуються для придбання вмісту в грі, наприклад, дорогоцінні камені в Guild Wars 2). Зокрема, це бажання може виникнути для того, щоб розподілити між валютними одиницями, введеними в економіку, «вільні» порівняно з тими, які були введені за допомогою реальної операції в реальному світі. Як правило, ви можете визнати дохід від останнього лише в кінцевому рахунку, тому важливо зберігати їх.

Однак ви можете відслідковувати потрібну інформацію, просто зберігаючи номери в сукупності (загальна кількість одиниць, загальна кількість одиниць, як для "безкоштовних", так і для "платних" екземплярів валюти). Це узгоджується із загальною ідеєю, що ви хочете відслідковувати ці речі у сукупності, як правило, рівень транзакцій, а не поточний рівень, оскільки вони відстежують потрібні вам дані та полегшують відстеження великих фрагментів коштів під час їх розповсюдження. у всій системі.


4

Примітка автора: Ця відповідь зроблена з припущенням, що ви не займаєтесь торгівлею, поки не в мережі, а потім синхронізуєтесь із серверами.

Вам не потрібно відстежувати окремі серійні номери валют, оскільки будь-яка транзакція між окремими гравцями повинна відбуватися через ваші сервери. Іншими словами, ваші сервери є авторитетним джерелом залишків рахунків. Ваші сервери не запитують у користувача, скільки у нього грошей. Клієнти, підключені до серверів, запитують сервер "Скільки грошей має мій програвач" через дзвінок api. Це передбачає припущення, що гравці не займаються торгівлею, поки вони не в мережі, а потім синхронізуються назад до серверів (хоч це було б новим, я не рекомендую цього, якщо ви не хочете витрачати багато часу на теорію ].

На прикладі урядової валюти єдиним авторитетним джерелом є валюта, коли її не додають до облікового запису [Чоловік виймає 200 доларів, кожен вексель "підписується" порядковим номером, який позначає його, щоб інші могли визначити, чи справжній він (якщо вони пройшли через клопоти про це), щоб прийняти це]. Коли вексель приймається в банк, існують способи визначити, чи були позначені серійні номери як поза обігом тощо]. Але ваші транзакції більш схожі на декілька користувачів у одній філії, які переказують кошти між рахунками, не бачачи валюти.

Основна історія для ілюстрації - це лише те, хто є вашим авторитетним джерелом: Я спробую проілюструвати: Користувач хоче забрати гроші з банкомату. Користувач не йде в відділення і заявляє "у мене 500 доларів, повірте, це серіали". Натомість він передає ключ [номер рахунку / ключ], а філія / сервер може повідомити користувача про свої кошти і дозволить йому витягувати валюту, зменшуючи при цьому баланс. Незалежно від того, що користувач намагається переконати банк "Дійсно, у мене є 500 доларів", якщо авторитетне джерело (сервер) не підтвердить баланс, нічого не відбудеться.

Ура.


2

Якщо ви спробуєте запрограмувати ігрове моделювання на основі того, як працює реальний світ, тоді у вас виникнуть великі проблеми, коли справа стосується того, скільки інформації комп'ютер може обробити.
Візьмемо для прикладу наступну сторінку, яка є спробою підрахувати, скільки атомів є в піску.

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

Я бачив багато подібних проблем із вивченням хімії та фізики, і смішно велика кількість людей, які потрапляють на цю сторінку, знаходиться в парку балів того, що я бачив, як придумали різні викладачі та підручники. -> 78 000 000 000 000 000 000

Навіть якщо це не вдасться, і ви вилучите 6 з цих нулів, у вас все одно буде число, яке занадто велике, щоб середній комп'ютер міг обробляти інтерактивні швидкості. Особливо, коли є 1000 таких транзакцій, які відбуваються в будь-який момент часу.

Як ми могли б обчислити та відстежити імпульс, положення, швидкість, миттєві прискорення, польові заряди тощо, кожного атома в кожному піску на пляжі, якщо лише одне зерно має 78 000 000 000 000 000 000 окремих компонентів. (Або навіть більше, якщо врахувати субатомні компоненти.)

Я одного разу прочитав документ із графічного програмування nVidia, в якому сказано щось на зразок наступного.
Робити те, що найкраще наближається, виглядає добре, тому що ніхто не зможе сказати, чи симуляція не на 100% точна. Ефективність слід враховувати.

Те саме стосується кожного типу ігрового моделювання, навіть якщо це не пов'язане з графікою. Напевно, ви повинні робити лише мінімум того, що потрібно для роботи. Якщо ви вийдете все тут, то похоронить комп’ютер у складності, з якою він не може впоратися.
Вам також доведеться написати та спробувати підтримати код цієї складності.

Ви можете дати унікальні серійні номери для кожної валютної одиниці, але ви використаєте всі ресурси комп’ютера саме на цій одній деталі.

Можливо, кращий спосіб вирішити це - дати лише 1 унікальну ідентифікацію для кожної транзакції.

Тож гравець №1 платить гравцю №2 1000000 доларів.
Якщо ви дасте кожному долару унікальний ідентифікатор, у багатьох людей комп'ютери почнуть мати великі проблеми, не кажучи вже про весь мережевий трафік і відставання, що це спричинить.

Або ви можете просто створити одне значення, яке представляє всю транзакцію.

uint transferFunds_Player1ToPlayer2 = 1000000;

Навіть 20-річний кишеньковий калькулятор може впоратись із чимось подібним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.