Я сейчас делаю MMORPG.
В данный момент я работаю над валютной частью игры, но я не уверен, стоит ли присваивать уникальный серийный номер для каждой единицы генерируемой валюты.
Я надеюсь использовать эту систему для отслеживания любых злоупотреблений виртуальной валютой, но является ли это обычной практикой, и если нет, то будет ли это хорошей идеей с точки зрения операционной и / или производительности?
Ответы:
Это вряд ли имеет смысл.
Когда я получаю 100 Zorkmids от игрока A и 100 Zorkmids от игрока B, у меня есть 200 Zorkmids.
Когда я заплачу 50 Zorkmids игроку C, получит ли C их от Zorkmids, которые я получил в форме A, или те, которые я получил от B? У меня есть контроль над этим? Имеет ли это значение? Зоркмид - это Зоркмид.
Это определенно не имеет значения для реальных банков и бухгалтеров, которые все отслеживают историю транзакций счетов, а не историю транзакций отдельных единиц валюты. Таким способом все еще можно определить злоупотребление.
При этом я мог бы представить себе игру, в которой отдельные монеты рассматриваются как предметы инвентаря, поэтому, когда вы торгуете с кем-то, вы должны убедиться, что у вас есть запасные деньги. Это позволило бы некоторые интересные функции, такие как маркировка, зачарование или подделка монет. В этом случае имеет смысл проследить каждую монету в отдельности. Но я не могу думать ни о какой игре, которая действительно делает это.
источник
HC40415464
написана на ней, так что, безусловно, есть определенное преимущество в том, что уникальное удостоверение личности и правительства реального мира действительно заботятсяНет, ты не должен
Хотя вы должны создавать системы, которые позволяют отслеживать валютные операции (особенно, если эта валюта является обфускатором реальных денег), вам не нужно отслеживать каждую отдельную единицу этой валюты. В отслеживании вас интересует совокупное движение средств, особенно в больших объемах (поскольку это может быть индикатором потенциальных внешних / несанкционированных операций с реальными деньгами). Отслеживание отдельных единиц валюты не помогает в этом (на самом деле это может повредить), а только усложняет обслуживание соответствующих данных, требуя, чтобы вы генерировали много идентификаторов и хранили относительно большие объемы информации в вашей базе данных.
В этой идее есть некоторая ценность для обфускаторных валют на реальные деньги (то есть вещи, которую вы покупаете за реальные деньги, которые используются для покупки игрового контента, такого как драгоценные камни в Guild Wars 2). В частности, это желание может возникнуть для того, чтобы устранить неоднозначность между единицами валюты, введенными в экономику как «свободные», по сравнению с теми, которые были введены посредством реальной транзакции в реальном мире. Как правило, вы можете в конечном итоге признать доход только по последним, поэтому важно, чтобы они были различны.
Тем не менее, вы можете отслеживать необходимую информацию, просто сохраняя числа в совокупности (общее количество единиц в, общее количество единиц, как для «бесплатных», так и «платных» экземпляров валюты). Это согласуется с общей идеей, что вы хотите отслеживать эти вещи в совокупности, как правило, на уровне транзакций, а не на текущем уровне, так как он отслеживает данные, которые вам действительно нужны, и облегчает отслеживание больших кусков средств по мере их распределения по всей вашей системе.
источник
Примечание автора. Этот ответ сделан с предположением, что вы не торгуете, находясь вне сети, а затем синхронизируетесь с серверами.
Вам не нужно отслеживать отдельные серийные номера валют, в частности, потому что любая транзакция между отдельными игроками должна происходить через ваши серверы. Другими словами, ваши серверы являются авторитетным источником остатков на счетах. Ваши серверы не будут спрашивать пользователя, сколько у него денег. Клиенты, подключенные к серверам, спрашивают сервер «Сколько денег у моего игрока» через вызов API. Это создает предположение, что игроки не торгуют, находясь вне сети, а затем синхронизируются с сервером (-ами) [Хотя это было бы новым, я не рекомендую это делать, если вы не хотите проводить много времени в теории ].
В примере с государственной валютой единственным авторитетным источником является валюта, когда она не привязана к учетной записи [мужчина берет 200 долларов, каждый счет «подписывается» серийным номером, который помечает его, чтобы другие могли определить, является ли он реальным (если они прошли через это), чтобы взять это]. Когда вексель поступает в банк, существуют способы определить, были ли серийные номера помечены как вне обращения и т. Д.]. Но ваши транзакции больше похожи на то, как несколько пользователей в одном отделении переводят средства между счетами, даже не видя валюты.
Основная история, которую нужно проиллюстрировать, - это кто ваш авторитетный источник: я постараюсь проиллюстрировать: пользователь хочет вынуть деньги из банкомата. Пользователь не заходит в ветку и заявляет: «У меня есть 500 долларов, поверьте мне, это сериалы». Вместо этого он передает ключ [номер счета / ключ], и филиал / сервер может уведомить пользователя о своих средствах и позволить ему вынимать валюту, уменьшая при этом свой баланс. Независимо от того, что пользователь делает, чтобы попытаться убедить банк «Действительно, у меня есть 500 долларов», если только авторитетный источник (сервер) не проверит баланс, ничего не произойдет.
Приветствия.
источник
Если вы попытаетесь запрограммировать игровой симулятор на основе того, как работает реальный мир, то вы столкнетесь с некоторыми большими проблемами, когда речь заходит о том, сколько информации может обработать компьютер.
Возьмем, к примеру, следующую страницу, которая является попыткой подсчитать, сколько атомов содержится в песчинке.
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-летний карманный калькулятор может справиться с чем-то вроде этого.
источник