Покупка лото, разбежка в показаниях.
Нынче очень популярный вопрос: почему в статистику порой пишет большее число купленного, чем есть на самом деле. Что за негодяйство, я вас спрашиваю!
Зайду из далека =)
Чтобы на 100% быть уверенным, что покупка совершена, нужно отправить запрос, дождаться и проанализировать ответ. Между отправкой и получением ответа проходит какое-то время. И оно не имеет фиксированной величины, может относительно быстро, скажем через полсекунды, а может составить и 5 и даже больше секунд. Последний вариант особенно актуален для ажиотажа. Когда много пользователей пытаются многократно делать одно и тоже. Например покупать много-много раз пачки лото из лавки. В такие моменты даже визуально в игре заметны сильные тормоза при выполнении действий руками.
Итак, чтобы иметь точную раскладку по купленному надо смириться с черепашьей скоростью в момент сильной нагрузки сервера. Одно время помощник так и работал, что вызывало сильное недовольство пользователей. Оно и понятно, реальный итог был более чем скромен.
Текущий вариант покупки просто не проверяет ответ на каждое действие. Например, в лавке фиксируются пачки по 100шт. Ок, моя прелесть, берем! Купили 10 раз и тут прилетает ответ, что все, по 100шт уже нет. Но это информация не с последней покупки, а хз с какой) В итоге в идеале должно было купить 1000шт, но реально с какой-то попытки в середине купить было невозможно, т.к. такие стеки закончились.
В статистику пишется выполненный объем, а ресурсы с перса списываются исходя из того, сколько сервер вам в реальности выдал билетов. История повторяется для стеков в 10шт. В какой-то момент они заканчиваются, но программа узнает об этом только совершив уже несколько "холостых" действий (напоминаю ответ запаздывает на неопределенный срок). В итоге разбежка между идеальной ситуацией и жестоким реалом становится еще больше.
В итоге ситуация "недопокупки" считается условной нормой. Игровая механика увы немного калечная в этом вопросе.
Одно время я пробовал все считать исходя строго из получаемых ответов, но в результате временного лага и возможной потери части ответов, ситуация была обратная, когда покупка например 2000шт приводила в реальным числам в 5 и более тыс, что разоряло часть пользователей в 0.
Я пришел к выводу, что безобразие с "недопокупкой" все же лучше, чем "перепокупка". И система учета реализована в тот вид, который есть сейчас. Прошу отнестись с пониманием =)