I built a MUD in Elixir and I completely agree. After many iterations what I landed on as the best path was having rooms as actors. Mobs, characters, items etc are just data in the room process (actor) state (in memory that is, in the database they're all modeled more or less as you'd expect for a relational DB).
This gives me a large number of units of concurrency, while allowing the overwhelming majority of the code to be written sequentially since most of the complicated bits (combat etc) happen within a room so I don't have to think about concurrency at all for those. The only communication between processes is moving monster / character data from one room to another when those entities move around the map.
This gives me a large number of units of concurrency, while allowing the overwhelming majority of the code to be written sequentially since most of the complicated bits (combat etc) happen within a room so I don't have to think about concurrency at all for those. The only communication between processes is moving monster / character data from one room to another when those entities move around the map.