7.3.1 (2017-03-09)
Bug Fixes
import: Rework --all options and limit !shaped-import-spell-list ( 7f2bd9a ) Ok, so I think this one is going to cause some wailing and gnashing of teeth. I have removed the --all option from !shaped-import-monster. I have no idea if anyone was using it, but it's just too dangerous now (see below for a general discussion of why). I have also put a limit on !shaped-import-spell-list. If an import will result in a character having more than 35 spells, it will refuse to run. Separately, I have added a --all option that was missing to !shaped-expand-spells. Note that this limit only applies when doing !shaped-import-spell-list, to try and discourage people from misusing this command. If you import spells 1 by 1 using !shaped-import-spell you can still add as many as you want (but think before you do!) Up until know, I've been happy to turn a blind eye to the fact that some people ignore the recommendations about spell count and campaign size. In the end, it only affects their campaigns and their players, and if they want to wait for 30 seconds to open their character sheet, so be it. Unfortunately, with the recent changes to the script and the character sheet, this has become an issue for all of us. When you run script commands that make changes to characters, they run on the API server. The new API sheetworkers functionality means that these changes will update everything just as if you'd made the changes manually on the client. This is all well and good, but the sheet is now a big hairy javascript gorilla, and some of those updates actually do a lot of work, fetching, modifying, transforming and saving attributes behind the scenes. Riley has been dropping hints for a while now that the intention of this functionality is not to allow lots of processing to be moved out of the browser and on to the API server - it was merely to try and make sure that changes made in one place would be equivalent to the other. Unfortunately, because we have no (nice) way to automate a lot of the changes in the browser, we have ended up doing exactly what Riley didn't really want us to do. When you do !shaped-update-character --all (and I understand that it's a very appealing thing to do), you are tying up a server that doesn't appear to be very powerful for an extended period of time. The same is true when you do !shaped-import-spell-list --classes cleric. If enough of us do this enough times, Roll20 are going to look into why their servers are on fire, and they're going to ask us, more or less politely, to stop doing it. Eventually, they might take some more radical action, and none of us want that. I've tried to reach out to Riley about what a more sustainable alternative might be in the future that still results in a good user experience, but that's going to be a very long term thing. In the meantime, people need to be aware that running these heavyweight commands has consequences for us all. With that in mind, here are some guidelines to follow: Don't import whole spell lists for classes. Sorry, I know it's appealing, but it's bad for the sheet, it's an expensive operation and it makes everything that subsequently gets done with that character more expensive. Try to keep your campaigns as small as possible, ideally by modularising them into several smaller campaigns that can be worked with separately. If possible, do major operations like !shaped-update-character in batches - do all the tokens on a page rather than the whole campaign at once. Think about when you're running those big bulk commands. Roll20s servers have peak times when more people are gaming. Don't whip out your SKT campaign on a Sunday afternoon and do !shaped-update-character --all: it's the computational equivalent of turning up at a party and taking a big dump in the middle of the living room floor. Do it on a Monday morning when the impact on others will be minimised. In general, if you're running a command that takes minutes to complete, remember that it's affecting everyone else, and ask yourself whether there's a practical alternative that might put less strain on the API server. Sorry, I wish there was a better alternative, but at the moment this is what we're stuck with.