Generally, I constantly find myself balancing between more or less client knowledge and having a hard time deciding on which I like the best. On the one hand, it is, of course, good to be able to mod the client, which requires more knowledge on the client side of things. On the other hand, it is very nice for me to be able to implement new features entirely on the server side without having to touch the client code. The various meters are probably the perfect example: It would be very useful to be able to move the health/stamina/&c meters around or do various other things with them, but then I couldn't add new meters arbitrarily from the server whenever I feel like it without modifying the client with it. It is very hard for me to decide what to do with all this. For sure, though, there are a couple of ugly things which should be cleaned up in various ways.
theTrav wrote:"take item <id> out of container <id> and [move to container/equipory <id> | drop on ground]"
This is probably a good idea. The problem is that it would require me to keep inventory IDs on the server and reverse mappings of item IDs, which I don't currently have. I'll have to think about it.
theTrav wrote:The Action Menu currently looks extremely server driven. It would be much nicer for the server to simply provide a request/response message pair to say "what actions can I access?" "you can access 1,3,212 and 5" and then have the client decide how to display those options to the user, and which hotkeys to use.
But... that's how it is. The server sends PAGINAE messages which contain updates to the client's list of available actions, which is stored in the Glob. If you look at MenuGrid.cons(), you'll see that it fetches the global action list from ui.sess.glob.paginae and construct the current view from that. Navigating inside the menu is done entirely on the client.