Сразу подчеркну, что я не видел кода Сферы, поэтому не могу быть на 100 процентов уверен в своей догадке. Основываюсь я на услышанном от тех, кто код видел, и на собственных знаниях.
Причина 12345 - в необходимости синхронизировать действия, меняющие состояние соты, между разными потоками обработки данных.
Что имеется в виду?
Движок игры построен на принципе "задержанных рассчетов". То есть, большинство действий, которые должны производиться в определенный момент, производятся не в тот момент, а в момент, когда результат этих действий востребован игроком (рефреш) или внутренними нуждами сервера (начало боя, освобождение заводов и т.д.)
Каждая сессия игрока ДС - это отдельный процесс на одном из серверов игры. Запрос данных (рефреш, но не только) этим игроком вызывает определенный каскад действий, задержанных ранее до этого момента. Результат некоторых из этих действий - изменения записей в базах данных игры. Весь процесс занимает в сложных случаях десятки секунд серверного времени.
Теперь, что происходит если несколько игроков пытаются обновить свою соту более-менее одновременно (в рамках 10 секунд)?
А происходит следующее:
Если эти игроки хоть коссвенно связаны (или один летел на другого, или оба они летали на кого-то третьего в разное время, но с тех пор не обновлялись, либо кто-то третий летел к ним обоим) - два параллельных процесса пытаются произвести изменения. Например, чтоб выяснить, кто первый ограбил кормушку и сколько ресурсов отгружать второму, и т.д.
Раньше, до НСБ, это совмещение вызывало зависание иногда целого мира. Теперь в большинстве случаев, сервер распознает подобное и выдает одному или обоим игрокам "счетчик"...
Проблема в том, что оба сразу вновь рефрешатся... снова вызвав те же "грабли".
Теперь о возможных решениях:
1) в идеале, было бы убрать совсем "задержанные вычисления". это решило бы не только баг с 12345, но и много других глюков сферы. Проблема, что для этого придется переписать начисто весь движок игры.
2) автоматическая блокировка потоков и создание очереди. К сожалению, это не намного проще чем 1), и программистам ДС не очень хочется за это браться
3) Рандомизация времени ожидания. То есть, если шарик выдан нескольким игрокам, заставить одного ждать 5 секунд, а другого, скажем, 10. Это "расцепит" их и повысит шансы развисания ситуации. Думаю, это несложно реализовать.
4) ничего не сделать. это проще всего, так скорее всего и поступят
Поэтому рекомендую после появления шарика прождать от 5 до 15 секунд, если возникнет снова - от 5 до 30, снова - от 5 до 60. Как правило, такой "алгоритм" помогает.
ЗЫ: И не в коем случае не начинайте тыкать в ф5, перегружать страницу и т.д. - это только ухудшит положение. А вот выйти из игры и перелогиниться - может помочь.