То, что вы называете «спецэффектами», раньше называли «модификаторами», но в наши дни термин, популярный в ММО, называют «положительными эффектами». Работать с ними так же легко или сложно, как вы этого хотите, учитывая, что вы можете выбирать, сколько разносторонности вы хотите иметь на каждой стадии.
По сути, каждый аспект системы обычно хранит список модификаторов, которые применяются к нему, и вы можете запрашивать их по требованию. Обычно есть только несколько модификаторов, которые применимы к любому игроку в любой момент времени, так что это не проблема - возьмите статистику игрока и любые модификаторы, наложенные умениями / заклинаниями / чем угодно, добавьте любые модификаторы, наложенные изношенным оборудованием, затем добавьте все, что сообщается с этим оружием. Если у вас есть стандартный интерфейс (например, sumModifiersTo (attributeID)), который используется актерами, предметами, местоположениями и т. Д., То реализация этого может быть быстрой и простой.
Как правило, объекты «эффекта» будут содержаться внутри сущности, к которой они относятся: у актеров есть список эффектов, а у предметов, которые они носят или используют, есть свой собственный список эффектов. Там, где эффекты явно активированы и / или ограничены по времени, вы сами должны их хранить, например. если у вас есть магические зелья или другие расходные материалы, их эффекты необходимо будет добавить к актеру, а не к (предположительно уничтоженному) предмету.
Не поддавайтесь искушению попытаться изменить эффекты атрибутов актеров на месте, так как вы быстро обнаружите, что атрибутам легко «дрейфовать», если вы не гарантируете, что все добавления и удаления выполняются после правильного протокол. Это также усложняет обход определенных модификаторов позже. например. Представьте себе магический щит, который защищает только от другой магии - вы можете передать своего рода предикат своей суммирующей функции модификатора, которая игнорирует определенные типы эффектов, чтобы сделать это.