Damn! I lost a kilometric post... Never ever try to clean up your Esc key while writing a forum post.
Ouch, I hate when that happens. Because of that I nowadays write long posts in an external editor.

In case my browser crashes.
- Knife is not really wearable. Pants are wearable. Knife goes into some inventory slot.
I was thinking WoW-Style here. But this is subject to the game mechanics I guess. I wouldn't like to have my weapon in my inventory, but wear it sheated on my belt or sth. like that.
- Some agents may include multiple containers, so directly inheriting from container may not be the best option for Barrel. Instead, we can have a HasInventory class, which would abstract container access
I like HasInventory - and it is there in the diagram, but with a different name and not in the inheritance model. I think we should go for your way. Integrates better with the NPC classes as well.
Another point: What you say implies that every object is an agent. I disagree. Actors are agents, like animals, npcs, the player. Dead items are not agents. You use them, you trigger their functionality, but they rarely trigger them themselves. (Traps might be a crossing of both?!)
- Instead of having each Barrel, Chest, etc. inherit from multiple classes, we should have some base MapContainer class. Same goes for weapons, characters, etc
Agreed.
- Carryable should include (through inheritance) the MapItem properties. Whatever can be carried can also be dropped. When it is dropped, MapItem stuff kicks in.
That was one of my questions. So every item should be dropable? Then we need to think about the consequences. Do we want them to remain on the floor forever? Should they disappear after a while? Too many objects on the floor will make the game slower and it requires more data to be stored. We should evaluate scalability of suggested solutions here.
- Openable should include Pickable
Hmm... I'd rather put pickable in lockable. Openable would have open() close(). Lockable inherits from openable and has lock() and pick() additionally.
- We may not need separate PC and NPC classes, if we have a good enough Character class
Indeed. The classes for PlayerCharacter is more a concrete class already. When I thought about them I (wrongly) assumed that NPCs wouldn't have an inventory. (I was thinking about the GUI inventory here) HasInventory should also introduce a pickPocket() function, imo.
- We already have an ActionStack class (developed while we were using the Rio codebase), which can be used as a command queue (per character, or world-wide)
Interesting, going to have a look at it. (Shoot! I have yet to read so much

)
Some (pseudo) code:
class Blade (AgentBase, Usable, Carryable, Weapon):
...
class SwissArmyKnife (Blade)
...
class MapContainer (AgentBase, MapItem, Openable, HasInventory, Trappable, Scriptable, Destructable):
...
class Barrel (MapContainer):
...
class Character (AgentBase, MapItem, HasInventory, Living, CharacterStats, AI, Scriptable):
...
I love the descriptiveness of Character(AgentBase, IsMapItem, HasInventory, IsLiving, HasCharacterStats, HasAI, IsScriptable)