Если мне не изменяет память, когда-то девелоперы рассказывали, что перерасчет происходит по тику или такту, который происходит раз в секунду или типа того. Лучше всего наблюдается по пропрыгам флотов в гейт, когда игроки нажимают пропрыг в какое-то свое уникальное время, а корабли прыгают порциями каждую секунду. И соответственно, все вычисления должны в эту секунду уместиться. Временные рамки для допустимого времени расчета установлены. Как мне кажется, грид был придуман для того, чтобы ограничить количество задействованных объектов. Даже когда в системе тысячи человек, если где-то на отшибе тусуется небольшая группа со схожими интересами, то обсчитываются взаимодействия только между ними, что значительно снижает количество обрабатываемой информации. Поэтому вопрос номер один - как ограничить количество объектов до интересующих нас в данном контексте. Если ответ дается без костылей в виде грида - от грида можно отказаться и ввести влияние бонусов от расстояния. Подобная идея мне лично нравится и кажется логичной. Теперь далее, номер 2 - сервер все равно знает координаты всех кораблей, почему бы ему не бросать события типа "вошел в зону действия" и "вышел из зоны действия". Если активируется модуль, на который накладываются бонусы (как одно из событий, запускающих процесс перерасчета характеристик), высчитывается значение, которое кэшируется и не требует вычислений до изменения одного из параметров. Причем если после изменения набора параметров выясняется, что значение для него уже вычислялось, то тупо брать его из кэша, где оно уже сохранено. Как конкретно считать бонусы - отдельный вопрос, который обсуждается отдельно. Напрашиваются, на первый взгляд, декораторы, но это очень сильно зависит от того, как это сейчас реализовано и на что еще повлияет. Насколько это массивные вычисления - вопрос, на который с разбегу не ответишь. Нужно написать модель и потестить, выявить потолок игроков, при котором данный подход загнется. Может так статься, что этот потолок выше существующих ныне ограничений и вполне приемлем.