Всем приветы. Я работаю над игровым проектом. В нем потребовалось реализовать сундуки. Все кто играл в игры, сталкивались так или иначе с сундуками. Открывали их. Забирали выпавшие награды. А как это реализовано? Так как мне нужно было реализовать уже, в целом, не новую механику, я начал много спрашивать и искать подходящие варианты. Меня интересовало , буквально все. От возможности создания сервера, до того, как пользователь будет забирать награду. Возможно, я очень плохо искал и/или до сих пор плохо гуглю, но я не нашёл достаточно описания и разъяснения механик сундуков. Вы сталкивались с такими механиками? Как они реализованы у вас?
Пришлось идти мучать гейм дизайнеров, чтобы понять, что они хотят от сундуков. Вырисовывалась следующая картина - гейм дизайнеры хотят создавать сундук и наполнять его различными наградами, типа золото, артефакты, геммы. Награды могут быть как обязательными, так и нет. В сундуке может быть несколько золотых наград, но которые будут выпадать с разным шансом. И это лишь начало, того что хотят наши ГД.
Окей, сундуки ушли на второй план. И нужно было определиться с тем как создавать награды, как хранить их в БД. Очень хотелось бы сделать достаточно гибкую систему, чтобы со временем была возможность добавить новые награды или выключить определенный тип наград. Первое что пришло в голову - сделать отдельную таблицу под каждую награду. Классная идея, под каждую таблицу есть свой репозиторий, достающий данные из БД, есть сервис обрабатывающий параметры награды и сервис по применению награды на игрока, когда он взял ее. И все работает отлично, пока не появляется необходимость собрать сундук из наград. Получается, что сущность Сундук, должна знать о всех наградах в системе. Добавление новой награды, вызывает изменение сущности сундук и сервисов, которые этот сундук открывают. Вообще это рабочий вариант, но принцип open-close говорит нам, что система должна быть открыта для расширения, но закрыта для изменения.
Читать далее про создание сундуков