Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

[Script] CashMaster 5e - a simple script to manage a party's money.

Arthur B said: Nover C. said: Script is crashing on me. It's on OGL and latest. Just started a new campaign  Can you give me some more information? Did the console give any error message? i think it is when you add money to a target that does not already have 0 in each money category/ i had this happen to me 
1518389410

Edited 1518389496
all character sheet has some # in their currency cant !cm or any other commands each time i restart the sandbox For reference, the error message generated was: TypeError: Cannot convert undefined or null to object TypeError: Cannot convert undefined or null to object at Function.entries (<anonymous>) at apiscript.js:2500:39 at eval (eval at <anonymous> (/home/node/d20-api-server/api.js:146:1), <anonymous>:65:16) at Object.publish (eval at <anonymous> (/home/node/d20-api-server/api.js:146:1), <anonymous>:70:8) at /home/node/d20-api-server/api.js:1510:12 at /home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:560 at hc (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:39:147) at Kd (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:546) at Id.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:489) at Zd.Ld.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:94:425)
Nover C. said: all character sheet has some # in their currency cant !cm or any other commands each time i restart the sandbox For reference, the error message generated was: TypeError: Cannot convert undefined or null to object TypeError: Cannot convert undefined or null to object at Function.entries (<anonymous>) at apiscript.js:2500:39 at eval (eval at <anonymous> (/home/node/d20-api-server/api.js:146:1), <anonymous>:65:16) at Object.publish (eval at <anonymous> (/home/node/d20-api-server/api.js:146:1), <anonymous>:70:8) at /home/node/d20-api-server/api.js:1510:12 at /home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:560 at hc (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:39:147) at Kd (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:546) at Id.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:489) at Zd.Ld.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:94:425) Ok, thanks. I'll have a look. It might be fixed in the next version already, but I make sure I'll double-check this. So it's OGL sheet, new campaign, but the characters have some coins of all different types? Or just for some of them (e.g. only gold and silver, but no ep)?
in my games this happens if there are no numbers entered for any currency to bad the system could not detect a blank and place a 0 in it
Ah, ok. I see. I just checked it with the latest version of the script, and the script doesn't crash any longer (which is good), but it messes up some of the conversion calculations. Thanks for pointing it out.
Nover C, lordmage - I (hopefully) fixed this in the upcoming version. Could you please give this version here a try:&nbsp; <a href="https://gist.github.com/arthur-bauer/017f79dba35e8" rel="nofollow">https://gist.github.com/arthur-bauer/017f79dba35e8</a>... Note that I changed the syntax a bit. !cm --help should give you the new commands. It's not the final syntax - I'm still a bit unsure how it should look like. &nbsp;
1518479000

Edited 1518479268
So here is what I noticed. With the update: it worked fine, than again I did have the token(s) selected. When they are not selected I got this: TypeError: Cannot convert undefined or null to object TypeError: Cannot convert undefined or null to object at Function.entries (&lt;anonymous&gt;) at apiscript.js:17240:30 at eval (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:146:1), &lt;anonymous&gt;:65:16) at Object.publish (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:146:1), &lt;anonymous&gt;:70:8) at /home/node/d20-api-server/api.js:1510:12 at /home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:560 at hc (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:39:147) at Kd (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:546) at Id.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:489) at Zd.Ld.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:94:425) Now I went back to the old version - and it is working fine. when they weren't highlighted, I got that error.. so basically - when nothing is selected - it crashes the script. I didn't realize before, I had not selected the token. Lastly - curious - is it possible to have another pay system included? One where, if the players don't have the exact amount of cp/sp/ep/gp/pp - a notification occurs. I am running a strict encumbrance game, and one where money is still newish to the world. So many vendors do not want to break change or as if that concept is foreign. There hasnt been an establishment of how many cp = 1 sp, etc. Also because this is a new country that never seen gold but uses electrum and vice versa from where the players came from.&nbsp; &nbsp;
Nover C. said: So here is what I noticed. With the update: it worked fine, than again I did have the token(s) selected. When they are not selected I got this: TypeError: Cannot convert undefined or null to object TypeError: Cannot convert undefined or null to object at Function.entries (&lt;anonymous&gt;) at apiscript.js:17240:30 at eval (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:146:1), &lt;anonymous&gt;:65:16) at Object.publish (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:146:1), &lt;anonymous&gt;:70:8) at /home/node/d20-api-server/api.js:1510:12 at /home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:560 at hc (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:39:147) at Kd (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:546) at Id.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:489) at Zd.Ld.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:94:425) Now I went back to the old version - and it is working fine. when they weren't highlighted, I got that error.. so basically - when nothing is selected - it crashes the script. I didn't realize before, I had not selected the token. Lastly - curious - is it possible to have another pay system included? One where, if the players don't have the exact amount of cp/sp/ep/gp/pp - a notification occurs. I am running a strict encumbrance game, and one where money is still newish to the world. So many vendors do not want to break change or as if that concept is foreign. There hasnt been an establishment of how many cp = 1 sp, etc. Also because this is a new country that never seen gold but uses electrum and vice versa from where the players came from.&nbsp; &nbsp; Ok, that was something that I broke somewhere along the way. Sorry. I updated the test version gist:&nbsp; <a href="https://gist.github.com/arthur-bauer/017f79dba35e8" rel="nofollow">https://gist.github.com/arthur-bauer/017f79dba35e8</a>... It now displays an error message if no token is selected. For the other pay system - essentially if you have to pay 5 gp, but the character has less than 5gp (but enough cash in other coins) it should display an error?
I just wrapped things up and released v0.6.0 The biggest visible changes here are a slightly changed command syntax (see below). Essentially, I changed the hoard &nbsp;to loot &nbsp;and adjusted the syntax to this general pattern !cm -&lt;subcommand&gt; &lt;cash value&gt;&lt;currency&gt; and added a shorter version !cm -&lt;first letter of subcommand&gt; &lt;cash value&gt;&lt;currency&gt; The overview output is less cluttered. A lot of things happened "under the hood" - Kryx basically cleaned up a lot of my messy code. Thanks for that! Here's the link to the newest version (I also updated the original posting):&nbsp; Cashmaster v0.6.0 And here's the new readme: --- CashMaster A currency management script for the D&D 5e OGL and 5e Shaped sheets on Roll20.net. Please use !cm for inline help and examples. Setup Make sure you use the correct sheet setting ( OGL , 5E-Shaped , or other ). Usage First, select one or several party members. Base commands !cm or !cm -help or !cm -h will show this help overview !cm -overview or !cm -o to get an overview over the party's cash !cm -overview --usd will also give you an overview and a rough conversion to USD (default value: 1 gp equals roughly 110 USD). Payment commands !cm -add [amount][currency] or !cm -a [amount][currency] to add an equal amount of money to each selected party member, !cm -loot [amount][currency] or !cm -l [amount][currency] to split up a certain amount of coins between the party members, like a found treasure. Note that in this case, no conversion between the different coin types is made - if a party of 5 shares 4 pp, then 4 party members receive one pp each, and the last member won't get anything. !cm -pay [amount][currency] or !cm -p [amount][currency] to let each selected party member pay a certain amount. The script will even try to take higher and lower coin types to get the full amount. E.g. to pay 1gp when the character has no gold, the script will use 1pp (and return 9gp), or it will take 2ep, 10sp or 100cp - or any other valid combination of coins - to pay the desired amount. Conversion/Cleanup commands !cm -share or !cm -s to convert and share the money equally between party members, converting the amount into the best combination of gold, silver and copper (this should be used in smaller stores), !cm -best-share or !cm -bs to convert and share the money equally between party members, converting the amount into the best combination of platinum, gold, electrum, silver and copper (this should only be used in larger stores that have a fair amount of cash), Note: You can use several coin values at once, e.g. !cm -loot 50gp 150sp 2000cp or !cm -pay 2sp 5cp . Examples !cm -overview will show a cash overview. !cm -add 50gp will add 50 gp to every selected character. !cm -loot 50gp will (more or less evenly) distribute 50 gp among the party members. !cm -pay 10gp will subtract 10gp from each selected character. It will try to exchange the other coin types (e.g. it will use 1pp if the player doesn't have 10gp). !cm -share will collect all the money and share it evenly on the members, using gp, sp and cp only (pp and ep will be converted). Can also be used for one character to 'exchange' money. !cm -convert - same as !cm -share , but will also use platinum and electrum. Credits With thanks to Kryx / mlenser for his contributions.
example of pay2 !cm -pay 10gp - will subtract 10gp from each selected character. If selected character does not have 10gp, a message pops up saying insufficient funds. gonna test out update! btw awesome work
hey, when the you state the sheet to other? would that work with sheets outside DnD
Danny C. said: hey, when the you state the sheet to other? would that work with sheets outside DnD Probably not. The script is looking for several fields/attributes (pp, gp, ep, sp, cp) for the coin types, and the relation between the different coin types is fixed (1 pp = 10 gp = 20 ep = 100 sp = 1000 cp). So unless your sheet is using exactly these field names and your game uses the same conversion rates, this script won't be of much help for you, sorry. :/
I will say it again, Arthur. This script is magnificent and I'm having so much fun with it. I'm currently trying to setup some traders that the players can visit at leisure to buy and sell to using this script. And I'm wondering if anyone else have tried this kind of set-up so that I don't have to invent the wheel twice.
Very handy script!&nbsp; The only thing it seems to really be missing is the ability for players to transfer coin amongst themselves, but I was able to extend it to that pretty easily last night.&nbsp; I'll likely make a few tweaks before the session tonight, but so far, it's looking good. Below is a simple screenshot of what i've got at the moment.
Michael G. said: Very handy script!&nbsp; The only thing it seems to really be missing is the ability for players to transfer coin amongst themselves, but I was able to extend it to that pretty easily last night.&nbsp; I'll likely make a few tweaks before the session tonight, but so far, it's looking good. Below is a simple screenshot of what i've got at the moment. Sounds like a great idea! Do you want to share the modifications? We could add it to the main script.
Ravenknight said: I will say it again, Arthur. This script is magnificent and I'm having so much fun with it. I'm currently trying to setup some traders that the players can visit at leisure to buy and sell to using this script. And I'm wondering if anyone else have tried this kind of set-up so that I don't have to invent the wheel twice. I'm glad to hear that you like it!&nbsp; I didn't set up anything more than just a simple text macro, but I'd love to see what you come up with!
1522429732

Edited 1522429823
GM Michael
API Scripter
Fine by me.&nbsp; I'll probably make some adjustments after tonight, but for now, it's on&nbsp; github . More used to SVN myself, how do you get the %%version%% and %%readme%% fields and whatnot to populate?
Michael G. said: Fine by me.&nbsp; I'll probably make some adjustments after tonight, but for now, it's on&nbsp; github . More used to SVN myself, how do you get the %%version%% and %%readme%% fields and whatnot to populate? Sorry, totally missed that one. I'm using&nbsp; gulp to build the different files and readme versions. The Aaron recommended it to me a while ago.
1524400630
The Aaron
Pro
API Scripter
PSA: Wow, that must have REALLY been a while ago. =D&nbsp; At this point I've kind of moved on from Gulp and am instead using Webpack + node scripts. =D&nbsp; Still a fine technology, and I still use it in some places (it drives my development script management system), but I'm finding other ways of working more fitting, for the most part.&nbsp; =D
Well, it wasn't that &nbsp;long ago... I just needed some time to wrap my head around it. I was doing most things with simple bash scripts before.
1524404905
The Aaron
Pro
API Scripter
=D&nbsp; HAHAHAHA, fair enough.&nbsp; If you do run into issues with gulp though, feel free to ping me and I'd be happy to help you sort them out.
1524688608

Edited 1524688953
So I don't know how I'm missing it, but how do you tell the script you are using Shaped? I guess you have to change the API manually? I figured that out, sure would be a cool function if it was a -config.
Jerry, you can easily change it in the dropdown menu at the bottom of the API script page.
Hi, First of all, I just started using this script and I think it is pretty awesome. I have a couple questions/suggestions : Is there a way to make the party cash overview (or other output from the script) visible to all players? Right now the messages appear to me (GM) as a whisper 'From CashMaster', and my players cannot see it. Suggestion*: It would be great if there was some way if we could save the list of characters, instead of selecting the tokens each time. On some maps (overland maps, city page etc) I do not put the party tokens on the vtt, but use a separate token to represent the entire party. In these cases I had to go on a different page that has the tokens to distribute looted gold. * I have noticed that other people made similar suggestions before, I am just adding my voice to them :)
Yeah, saving a selection of tokens is one the roadmap. I'm just not sure how to implement it in the best way, both script-wise and user-interface-wise...&nbsp;
Thanks for the reply! Looking forward to the updates. Any tips on showing the overview to the players ?
Right now, all the output is whispered to the GM only. I'm wondering: Do you think about having all the output visible to everyone? Or should it only be the party overview? Or should there be some additional "switch"?&nbsp;
1524747761

Edited 1524749825
Arthur B said: Jerry, you can easily change it in the dropdown menu at the bottom of the API script page. Haha I never even thought to see if it is in the API Library. I don't know what is wrong with my game but the API library version won't work but the manual API with the line changed works just fine.
Well ideally whoever executed the command should get feedback also (for example a player can run !cm -loot xgp , and have the character sheet updated, but right now only the GM would get the message in chat). I am not sure how viable is implementing something like this. Alternatively a flag in the command itself could work also. By default it would appear only to the GM, but by adding -public or something like that, it would make a broadcast instead. I had a couple of use-cases in mind: The GM wants to determine the current wealth of the party. In this case it makes sense to show the output to the GM only. The GM wants the players to pay for some service, so does a '!cm -pay xgp', in this case it would be nice if the players get some visual feedback that a transaction occurred. The GM tells the players that they looted x amount of gold. The party decides that they will use the highest strength character as a pack-mule, so that player would use a macro like this: '!gm -loot ?{amount}' and enter the amount in the pop-up. In this case either 'pack-mule' or the entire party should get the message in chat.
Gabor M. said: Well ideally whoever executed the command should get feedback also (for example a player can run !cm -loot xgp , and have the character sheet updated, but right now only the GM would get the message in chat). I am not sure how viable is implementing something like this. Alternatively a flag in the command itself could work also. By default it would appear only to the GM, but by adding -public or something like that, it would make a broadcast instead. I had a couple of use-cases in mind: The GM wants to determine the current wealth of the party. In this case it makes sense to show the output to the GM only. The GM wants the players to pay for some service, so does a '!cm -pay xgp', in this case it would be nice if the players get some visual feedback that a transaction occurred. The GM tells the players that they looted x amount of gold. The party decides that they will use the highest strength character as a pack-mule, so that player would use a macro like this: '!gm -loot ?{amount}' and enter the amount in the pop-up. In this case either 'pack-mule' or the entire party should get the message in chat. Oh, a player shouldn't be able to issue the command at all. Need to look into that again :-O But I hear.. well read you. And it makes sense using some kind of switch like `-public`. I'll have a look into it.
In my branch of things, I have it such that the players see transfers to/from them as well as transfer funds among themselves.
Michael G. said: In my branch of things, I have it such that the players see transfers to/from them as well as transfer funds among themselves. Want to send a PR?
Sent my first pull request on GitHub (hopefully I didn't break anything).
Michael G. said: Sent my first pull request on GitHub (hopefully I didn't break anything). Thanks, looks good! I fixed some details and merged it in. I'll test it now, and if I don't see any problems, I'll release it as a new version. &nbsp;
I just pushed out the newest version&nbsp; 0.7.0 on my github (see first post). I also sent a pull request, so within short, it should be available via script library. Again, thanks @ Michael G.
Hiya Arthur. Is there a State object or something associated with this script that can break? For some reason !cm -share refuse to work in one of my campaigns. It works fine in the others.
Ravenknight said: Hiya Arthur. Is there a State object or something associated with this script that can break? For some reason !cm -share refuse to work in one of my campaigns. It works fine in the others. No, there's no state object. Did you check that every characters have a value in all currency fields? I think I have a check for empty values everywhere, but I would't put my last gold coin on it... ;)
1528409722

Edited 1528659770
Ravenknight
KS Backer
Arthur B said: Ravenknight said: Hiya Arthur. Is there a State object or something associated with this script that can break? For some reason !cm -share refuse to work in one of my campaigns. It works fine in the others. No, there's no state object. Did you check that every characters have a value in all currency fields? I think I have a check for empty values everywhere, but I would't put my last gold coin on it... ;) Yep, all of them. I can get everything to work but !cm -share. Edit: Update: I used Chatsetattr and added currency to every character in game and the problem still persists. It didn't even help to make a clean copy of the game without any other script installed. I'm at wits end, but there must be something lurking and hindering the script from functioning.
Ok, I just gave up trying to get it to work in the current campaign and launched a new one just for testing. After installing just the Cashmaster script I still couldn't get the -share or -convert commands to work. -merge works fine though. Is this a bug or have I missed something? The script works wonder in two other games I run and nothing is changed as far as I can see.&nbsp;
1528675833
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Did you run the&nbsp; setup step ? Setup Make sure you use the correct sheet setting ( OGL , 5E-Shaped , or other ).
keithcurtis said: Did you run the&nbsp; setup step ? Setup Make sure you use the correct sheet setting ( OGL , 5E-Shaped , or other ). Yep. I tried putting it to "other" as well.
I will have a look this week. Maybe I broke something when I added the last changes. I'll see if I can replicate the issue. Sorry for this.
So after getting some more feedback from my players, it sounded like the main thing holding them back from using this regularly was the lack of a UI.&nbsp; I'm rather busy this week, so I don't expect to get around to it, but maybe I will this weekend.
1528842977

Edited 1528843002
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Simple UI's are easy to construct .
Got a preliminary UI up and running. I went ahead and created a pull request.
Michael G. said: Got a preliminary UI up and running. I went ahead and created a pull request. Awesome, thanks a lot! I'll have a look at it right now. There is a merge conflict that I'll sort out quickly. If everything's fine, I'll add the new version and push it out.
Ok, I just published v0.7.1 and created a pull request for the roll20 repo. Ravenknight, this version also fixed the bug for the problems with the share command you had with the previous version.
Arthur B said: Ok, I just published v0.7.1 and created a pull request for the roll20 repo. Ravenknight, this version also fixed the bug for the problems with the share command you had with the previous version. Thanks a lot Arthur! :D
1529336027

Edited 1529756079
GM Michael
API Scripter
So talking to my players yesterday, they loved having the UI.&nbsp; A few things came up for a wishlist of things to do with the tool now that it's infinitely more intuitive to use. Player To ols [DONE] Drop with Reason : Pay NPCs easily.&nbsp; Obviously it's a whole lot more arduous to actually make accounts for all NPCs, especially since most NPCs will be one-offs (my players have a long history of flipping a gold coin to people as they walk away).&nbsp; I'm thinking the ability to basically just subtract gold from their own accounts while displaying a message to the DM saying the action has occurred with a custom message from the PC. Command: !cm -dwr&nbsp;[amount][currency] "[Message]" [Partially Complete] Invoice Player : Obviously you don't want players to be able to transfer negatives to each other, so what I'm thinking is that Player A types out how much Player B owes them.&nbsp; This then appears as a whisper to Player B , telling how much they're being charged with an [Approve Transaction] button that will actually transfer the gold to Player A .&nbsp; Another button, [Haggle] would allow Player B to propose a new price.&nbsp; Player A could then approve or counter-offer.&nbsp; Counter-offers continue until someone approves.&nbsp; If Player A approves, it goes back to Player B one last time to actually agree to pay up. Command (A -&gt; B): !cm -invoice|inv [amount][currency] "Invoicee Name" Command (B -&gt; A): !cm -approveInvoice|ainv [amount][currency] "Invoicer Name" Command (B -&gt; A): !cm -haggleInvoice|hainv [amount][currency] "Invoicer Name" Command (A -&gt; B): !cm -haggleCounter|hac [amount][currency] "Invoicee Name" Command (A -&gt; B): !cm -approveHaggle|aha [amount][currency] "Invoicee Name" The flow would start with an invoice, then goes back and forth between haggleInvoice and haggleCounter.&nbsp; This loops until the invoicer approves a haggle or the invoicee approves an invoice.&nbsp; If the loop ended with an approveHaggle, Player B must then approve the invoice to finally actually pay. Distribute to Party : I have a character riding a displacer beast with saddle bags of holding, so they're the de facto party inventory.&nbsp; The ability to disburse to the players from that fund would be useful. Command (select recipients): !cm -disburse|dis [amount][currency] "[Player Name]+" Command (all party members, including self): !cm -disburse|dis [amount][currency] Pickpocket : I honestly have no idea how I'd do this, but I'd like to have support for it eventually. [DONE] Set Default Token : Player selects a token and a state variable is set to mark it as their default so they don't need to manually select it in the future.&nbsp; Command: !cm -setToken|st DM Tools NPC Invoices Player : Similar to when a player does it, but obviously at the end, the coins just get tossed into the void that is NPC purses. [DONE] Set Party Name List : It would be great to have a state variable that the DM could set the party names to so that players don't have to manually type them every time. Command: !cm -setPartyNames|spn "[Player Name]+" Configurable -merge Access : In my game, I gave my players an item called a Modron Coin Purse that lets you convert between currency types. Thus, for a game like mine, being able to auto-merge to platinum is something the players do all the time. For other DMs that do things like give their players mountains of 100,000cp, giving the players access to -merge doesn't make sense. Command: !cm -playersMerge|pm 1|0 I'm not sure when I'll get to work on all this, but if anyone has anything else for a wishlist, let me know.
I've added NPC Transfers and basic PC to PC Invoicing as well as dropdown menus for player selections to my branch.&nbsp; (Yay no more typing made-up words!)&nbsp; I also got rid of the shortened tags (ie -status vs -s).&nbsp; Because of the UI, the shortened ones aren't really useful anymore, not to mention, as we add more options, the shortened commands start to overlap with multiple commands.&nbsp; -s was already a culprit of this, triggering -status when a user might intend -share. It's still all in my&nbsp; dev branch , and I'm holding off on creating a pull request because of further upcoming changes and the documentation changes I haven't gotten around to, but it's there if anyone wants to grab and test it.&nbsp; IMO, even in its incomplete state, the ability to set the party list alone makes this version much more user-friendly. The order of features that I'm planning: Default Tokens: this is up there with setting the party in terms of improving user-friendliness.&nbsp; This is just too good to pass up. Distribute to Party: with the party list and with a default token system implemented, this should come easily. Configurable -merge Access: I think this'll probably be a pretty small change and is something my players would appreciate. Merge back to Arthur's branch: At this point, I should have all the "critical" changes made.&nbsp; Everything hereafter is icing. Haggling: this isn't strictly necessary with existing commands, but it does allow back-and-forth without re-selecting the other party, so having this will be slightly more efficient. NPC -&gt; PC Invoice: while this seems useful at the outset, the DM already has admin power with the script, letting them steal from players, so until haggling is implementing, it's not actually that useful. If someone comes up with a better idea, it'll probably preempt 5 and 6, but I don't think 1-4 will change unless it's something really useful.