Нужно ли присваивать уникальный идентификатор отдельным единицам игровой валюты?


22

Я сейчас делаю MMORPG.

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

Я надеюсь использовать эту систему для отслеживания любых злоупотреблений виртуальной валютой, но является ли это обычной практикой, и если нет, то будет ли это хорошей идеей с точки зрения операционной и / или производительности?


8
Как часто в вашей игре случается, что один игрок переносит около миллиона зоркмидов другому? Когда это произойдет, придется ли вам обновлять миллион объектов в вашей базе данных?
Филипп

1
На самом деле это интересная идея. BitCoin делает что-то подобное для произвольных сумм валюты. Там может быть решение / возможность.
ashes999

4
@ ashes999 Ребята из bitcoin stackexchange говорят, что BitCoin также отслеживает остатки на счетах, а не отдельные единицы валюты.
Филипп

1
Если деньги полностью взаимозаменяемы, то один зоркмид такой же, как и любой другой.
Джо

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

Ответы:


26

Это вряд ли имеет смысл.

Когда я получаю 100 Zorkmids от игрока A и 100 Zorkmids от игрока B, у меня есть 200 Zorkmids.

Когда я заплачу 50 Zorkmids игроку C, получит ли C их от Zorkmids, которые я получил в форме A, или те, которые я получил от B? У меня есть контроль над этим? Имеет ли это значение? Зоркмид - это Зоркмид.

Это определенно не имеет значения для реальных банков и бухгалтеров, которые все отслеживают историю транзакций счетов, а не историю транзакций отдельных единиц валюты. Таким способом все еще можно определить злоупотребление.

При этом я мог бы представить себе игру, в которой отдельные монеты рассматриваются как предметы инвентаря, поэтому, когда вы торгуете с кем-то, вы должны убедиться, что у вас есть запасные деньги. Это позволило бы некоторые интересные функции, такие как маркировка, зачарование или подделка монет. В этом случае имеет смысл проследить каждую монету в отдельности. Но я не могу думать ни о какой игре, которая действительно делает это.


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 из этих нулей, у вас все равно останется число, слишком большое для среднего компьютера, чтобы справляться с интерактивными ставками. Особенно, когда в любой момент времени происходят тысячи таких транзакций.

Как мы могли бы рассчитать и отследить импульс, позиции, скорость, мгновенные ускорения, полевые заряды и т. Д. Каждого атома в каждой песчинке на пляже, если только одна крупа имеет 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.