The devs for DND Beyond are working very hard on the next set of features, I am sure of it :)! Just making sure they they support all the latest books and adventures I am sure is not easy (due to classes, races, etc). What I am doing is pretty minimal compared to the huge things they are working so hopefully I can add some cool useful things while they work on the real meat of the system hehe.
I am glad though that so many of you enjoy this tool, it honestly means the world to me!! The support I have received has been nothing short of amazing. Be that feedback, ideas, content sharing, etc.
The devs for DND Beyond are working very hard on the next set of features, I am sure of it :)! Just making sure they they support all the latest books and adventures I am sure is not easy (due to classes, races, etc). What I am doing is pretty minimal compared to the huge things they are working so hopefully I can add some cool useful things while they work on the real meat of the system hehe.
I am glad though that so many of you enjoy this tool, it honestly means the world to me!! The support I have received has been nothing short of amazing. Be that feedback, ideas, content sharing, etc.
Amen!
As a fellow programmer who builds sites like this for a living (although never for anything as cool as D&D, unfortunately), I can assure non-experts out there, it is clear that Curse has put a MASSIVE amount of work into this, and furthermore, has taken the time to do it right rather than quick and dirty. Just looking at the generated client-side HTML and JS, I learned a couple new tricks. Plus parsing and entering something like Tomb of Annihilation takes weeks. Player-driven content like Xanathar's likely even longer.
So this Chrome extension is really great. But that really shouldn't be used as a weapon to beat Curse with considering the extension wouldn't have even been possible if the site was built in a more haphazard, sloppy fashion that happens far too often with even bigger name sites.
Could not have said it better myself haha. The reason I can do what I can do so quickly is because for the most part the HTML, CSS and plugins they use are properly implemented / codded, generated and readable. My job would be 10X harder if everything was a mess but the fact I can use the chrome dev debug toolkit and within minutes test out a new feature shows the hardwork they put into this product, and why I am bothering with this tool - because I think DDB will be around for a long time!
Added new DDB Lightbox open high res image button function.
In the future, I will working on making it so actually invokes a download vs open but that is going to take some time as it will involve some server code.
i just needed some space to release my frustration... if i wouldnt believe in the devs i would not have have bought tomb of annihilation nor would i post here...
thank you for taking my criticism so professional...
The Firefox extension will be the first, secondary browser I will support. I use chrome and it has like 60% or something market share globally and something like 80% if you don't take into account traffic from businesses - so it seemed like the obvious first choice as I initially built this for myself until I realized others would like this too.
I have never built extensions before; Until this this one. So I have to first understand how to make an extension in Firefox, figure out the changes that I will have to make to the chrome one to make them compatible and then make the changes, verify they work across the settings and features. Then I will make the Firefox extension.
But before this, I first need to fix bugs based on reports and my own things I have noticed, make Tomb of A work as currently it just gets run through the generic "I don't know how to handle this" code and build in a way for people to know the changes that occur version to version without checking the forum.
So in all honesty, the Firefox release has been delayed by a few weeks because of this. If things go smashing well with everything, then less but I am also taking into account not developing on this for 8 hours a day. I was on vacation for a week and so I built this in that time and now its back to dev when I have the time which is only a few hours a week (sometimes a bit more) :).
So...should you wait for the Firefox? I honestly don't know - but what I can tell you is that Chrome is a awesome browser if you want to try it out ;)
The Firefox extension will be the first, secondary browser I will support. I use chrome and it has like 60% or something market share globally and something like 80% if you don't take into account traffic from businesses - so it seemed like the obvious first choice as I initially built this for myself until I realized others would like this too.
I have never built extensions before; Until this this one. So I have to first understand how to make an extension in Firefox, figure out the changes that I will have to make to the chrome one to make them compatible and then make the changes, verify they work across the settings and features. Then I will make the Firefox extension.
But before this, I first need to fix bugs based on reports and my own things I have noticed, make Tomb of A work as currently it just gets run through the generic "I don't know how to handle this" code and build in a way for people to know the changes that occur version to version without checking the forum.
So in all honesty, the Firefox release has been delayed by a few weeks because of this. If things go smashing well with everything, then less but I am also taking into account not developing on this for 8 hours a day. I was on vacation for a week and so I built this in that time and now its back to dev when I have the time which is only a few hours a week (sometimes a bit more) :).
So...should you wait for the Firefox? I honestly don't know - but what I can tell you is that Chrome is a awesome browser if you want to try it out ;)
thanks man for your honesty i will give chrome a shot i guess so i can use your extention on it and i will go back to firefox if i dont like chrome enough to stick with it
@BitsInBytes, it's cool that you're working on this, but I'm genuinely confused why you have a back-end for any of this. Here's the one I started: https://github.com/owensd/beyond-discord. It just pops alerts at the moment as my primary focus is integration with Discord and the Avrae bot - and I only have about an hour or so to work on it during the week.
All of this can be done via scraping the HTML contents locally without any need to round-trip across a server. I already have too many points of failures in my online games: DDB, Discord, Avrae Bot, Google Hangouts. Adding another one to the mix is just asking for trouble for a lot of folks on game night.
Also, open sourcing at least part of it, would let you focus on the browser you use the most and let others chip in for the other browsers.
@owensd: The reason is pretty simple, the inception of this was just for monsters...monsters *don't* have hard coded attributes, classes, ids or anything. They can't be easily queried as well the HTML is not even standard across monsters (looks to be user entered in via a WYSIWYG editor) Some have <strong> tags, some are <em>, some don't have either. For a example see this (https://pastebin.com/HiG94WrG) - there is nothing to hook. This is from basic rules dragon actions.
So when I first worked on this, *just* for my own means - as I am a server / service developer I wrote a language processing engine in C# to attempt to read the text and understand what it is actually trying to do and not look at the HTML (because its useless). Saving throws, rolls, "linked" actions or spells, you name it are not defined in the HTML what so ever. So my code builds what it thinks the text is trying to represent in real time by reading the words and piecing it all together. This was not easy as the wording is not the same across monsters, the formatting is different in a lot of ways and there are many, many "edge" cases so my code had to be for the most part pretty smart. It still does not get 100% of things, but I am working on it as I have bigger plans for it.
When I showed my friends what I wrote, they said "this is really cool, could you find a way for others to use this tool". So I converted the back end logic to work in a web API service and eventually crafted the extension as we know it - the rest is history. The widget I will most likely move to being totally client side once I work out its bugs, its getting there. Having to deploy extension versions is a real pain and I can't even guarantee people will get it. I still get PM's about bugs from versions from days ago just because chrome for what ever reason has not updated them yet due to stuff I had to put into the core client. I will use the service architecture to test scrips and get instant feed back and when the "basic" features work 100%, then I will convert them to the extension so they are client side. *However* the monsters will remain in the service because they are 100% dynamic.
@owensd: The reason is pretty simple, the inception of this was just for monsters...monsters *don't* have hard coded attributes, classes, ids or anything. They can't be easily queried as well the HTML is not even standard across monsters (looks to be user entered in via a WYSIWYG editor) Some have <strong> tags, some are <em>, some don't have either. For a example see this (https://pastebin.com/HiG94WrG) - there is nothing to hook. This is from basic rules dragon actions.
Huh. I hadn't looked into the Monster code, just the PCs where there is a nice set of JSON data to query against. With the DM Dashboard I'm building for myself, the biggest problem I ran into (other than time to work on it ;) ) is sometimes the data is too raw. For example, there is no AC field, it is calculated client-side when the page renders. But the nice thing is that it is accessible as actual data, not just fully rendered HTML. I would have thought they built the monsters the same. Yeah, that's definitely more difficult.
What about going far more generalized and looking for any "[number]d[2,3,4,6,8,10,20,100]" string? Sometimes if the data is too varied it's worthwhile to just go fully generic instead. *shrug* But you obviously know what you are doing, so have at it and keep up the good work! :)
Service: -Javascript cache -----[Contains all the JS scripts active in memory in a singleton] ----------(So response rate will be extremely quick when the end point is hit to get the data as there is no processing) -Monster cache -----[Gets filled overtime as people use the service, allows the get monster call to get quicker over time] -[Generic caching things that I won't go into] -Admin routes for me to push data to so I can update the cache or the back end system without a deployment -Public routes -----[Get resources (scripts currently, but maybe things in the future)] ----------{This also returns a func that gets executed right away on the client that is dynamic so I can add features, service routes without client changes} -----[Get monster (for monsters already generated as only a name is sent over] -----[Get monster dynamic (for when monster is not already generated, attempts a runtime generation using the language engine) -Monster builder -----[Contains the basic html parser that strips out the html and segments it into areas "actions" vs "abilities" etc] -----[Language parser to parse the raw text into instructions (dice rolling, saving throws, linked actions to execute (like Multiattack)] -----[Dynamic javascript generation to take all the data and turn it into functions that hooks the main scripts (that roll dice, etc)] -----[There are a few smaller things but no real point getting into them]
Database: -Monster data -----[So the system does not need to generate a monster over and over again) {can be purged or updated via admin module} -Service web requests so I can track usage and error rate [No hand shake so it does not slow down service]
Over all its a pretty robust solution and the only draw back is basically my host might not be able to hand the traffic like a 30-40$ a month cloud service would using Azure or AWS.
I am a senior back end developer so I used what I knew to build what worked...it may very well be slightly over engineered but does allow extreme flexibility and second bug fixes and in memory patching.
I would love to hear your opinions though! I will make the javascript totally open source in time once I get things sorted out as I *know* it can be improved. I spent a day learning javascript, jquery and then wrote the entire javascript system...so I am sure it can be improved by people who know JS inside and out. (not gonna lie...I have really come to love javascript after this project!)
I might even make aspects of my back end system open source, but the language processing I might keep in-house for later use.
@owensd: The reason is pretty simple, the inception of this was just for monsters...monsters *don't* have hard coded attributes, classes, ids or anything. They can't be easily queried as well the HTML is not even standard across monsters (looks to be user entered in via a WYSIWYG editor) Some have <strong> tags, some are <em>, some don't have either. For a example see this (https://pastebin.com/HiG94WrG) - there is nothing to hook. This is from basic rules dragon actions.
Huh. I hadn't looked into the Monster code, just the PCs where there is a nice set of JSON data to query against. With the DM Dashboard I'm building for myself, the biggest problem I ran into (other than time to work on it ;) ) is sometimes the data is too raw. For example, there is no AC field, it is calculated client-side when the page renders. But the nice thing is that it is accessible as actual data, not just fully rendered HTML. I would have thought they built the monsters the same. Yeah, that's definitely more difficult.
What about going far more generalized and looking for any "[number]d[2,3,4,6,8,10,20,100]" string? Sometimes if the data is too varied it's worthwhile to just go fully generic instead. *shrug* But you obviously know what you are doing, so have at it and keep up the good work! :)
Oh yes, nice find on the JSON data for the players. Even better!
As for the string search, that's exactly what I was planning on doing. +### is a d20 roll, #d##(+#)? is a simple dice roll. I roll my dice locally as I'm the DM, but the players want to use Avrae and Discord and that JSON stream might just be the ticket!
Oh yes, nice find on the JSON data for the players. Even better!
I was hesitant to mention it since I hadn't seen it mentioned anywhere else yet. So before people start making use of it, I do feel I should mention that it is obviously built for Curse's use in generating the web pages and is NOT designed as a public API. As they roll out new features, unlike a public API, I expect it will change without notice. So coders beware.
It's human nature to start making use of it and when a change comes along, getting annoyed at Curse for breaking your code. But it's not built for us, so I'm just expecting it to randomly break and I just need to deal with it. :)
Oh yes, nice find on the JSON data for the players. Even better!
I was hesitant to mention it since I hadn't seen it mentioned anywhere else yet. So before people start making use of it, I do feel I should mention that it is obviously built for Curse's use in generating the web pages and is NOT designed as a public API. As they roll out new features, unlike a public API, I expect it will change without notice. So coders beware.
It's human nature to start making use of it and when a change comes along, getting annoyed at Curse for breaking your code. But it's not built for us, so I'm just expecting it to randomly break and I just need to deal with it. :)
Yes, this is NOT meant to be a public API. Meaning, we will continuously break that contract without notice. You have been warned.
Although, I am happy to see a fair amount of community-driven development going on! Please be aware though, if you are collecting data for non SRD content that you have paid for, but then making that accessible to users outside of the system we have provided (i.e. Campaign content sharing), that may be against our ToS. Tread carefully.
I fully expect to have to roll out changes as the website evolves and I am 100% ok with that as it means they are also making improvements!
And thank you for not shutting us down haha (nervous laughter ;) ) - but in all serious its nice to be apart of a community / software that appreciates community / moders (or what ever you call us).
maybe the option here would be that curse make a similar tools that you provide us so they can update and make it work flawlessly without chance that it break because of curse change in the code ? is it a possibility ?
maybe the option here would be that curse make a similar tools that you provide us so they can update and make it work flawlessly without chance that it break because of curse change in the code ? is it a possibility ?
Integrated dice rolling is on our Todo list. We just have some higher priority features on our plate, atm.
maybe the option here would be that curse make a similar tools that you provide us so they can update and make it work flawlessly without chance that it break because of curse change in the code ? is it a possibility ?
Integrated dice rolling is on our Todo list. We just have some higher priority features on our plate, atm.
And here this nice person is, doing it for you. Make him official, why don't you?
Rollback Post to RevisionRollBack
"Any society that would give up a little liberty to gain a little security will deserve neither and lose both" -- allegedly Benjamin Franklin
maybe the option here would be that curse make a similar tools that you provide us so they can update and make it work flawlessly without chance that it break because of curse change in the code ? is it a possibility ?
Integrated dice rolling is on our Todo list. We just have some higher priority features on our plate, atm.
And here this nice person is, doing it for you. Make him official, why don't you?
The devs for DND Beyond are working very hard on the next set of features, I am sure of it :)! Just making sure they they support all the latest books and adventures I am sure is not easy (due to classes, races, etc). What I am doing is pretty minimal compared to the huge things they are working so hopefully I can add some cool useful things while they work on the real meat of the system hehe.
I am glad though that so many of you enjoy this tool, it honestly means the world to me!! The support I have received has been nothing short of amazing. Be that feedback, ideas, content sharing, etc.
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
As a fellow programmer who builds sites like this for a living (although never for anything as cool as D&D, unfortunately), I can assure non-experts out there, it is clear that Curse has put a MASSIVE amount of work into this, and furthermore, has taken the time to do it right rather than quick and dirty. Just looking at the generated client-side HTML and JS, I learned a couple new tricks. Plus parsing and entering something like Tomb of Annihilation takes weeks. Player-driven content like Xanathar's likely even longer.
So this Chrome extension is really great. But that really shouldn't be used as a weapon to beat Curse with considering the extension wouldn't have even been possible if the site was built in a more haphazard, sloppy fashion that happens far too often with even bigger name sites.
Could not have said it better myself haha. The reason I can do what I can do so quickly is because for the most part the HTML, CSS and plugins they use are properly implemented / codded, generated and readable. My job would be 10X harder if everything was a mess but the fact I can use the chrome dev debug toolkit and within minutes test out a new feature shows the hardwork they put into this product, and why I am bothering with this tool - because I think DDB will be around for a long time!
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
Added new DDB Lightbox open high res image button function.
In the future, I will working on making it so actually invokes a download vs open but that is going to take some time as it will involve some server code.
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
i just needed some space to release my frustration... if i wouldnt believe in the devs i would not have have bought tomb of annihilation nor would i post here...
thank you for taking my criticism so professional...
i wonder if i should change my web browser for chrome instead of firefox or should i wait .. for the firefox extention ?
The Firefox extension will be the first, secondary browser I will support. I use chrome and it has like 60% or something market share globally and something like 80% if you don't take into account traffic from businesses - so it seemed like the obvious first choice as I initially built this for myself until I realized others would like this too.
I have never built extensions before; Until this this one. So I have to first understand how to make an extension in Firefox, figure out the changes that I will have to make to the chrome one to make them compatible and then make the changes, verify they work across the settings and features. Then I will make the Firefox extension.
But before this, I first need to fix bugs based on reports and my own things I have noticed, make Tomb of A work as currently it just gets run through the generic "I don't know how to handle this" code and build in a way for people to know the changes that occur version to version without checking the forum.
So in all honesty, the Firefox release has been delayed by a few weeks because of this. If things go smashing well with everything, then less but I am also taking into account not developing on this for 8 hours a day. I was on vacation for a week and so I built this in that time and now its back to dev when I have the time which is only a few hours a week (sometimes a bit more) :).
So...should you wait for the Firefox? I honestly don't know - but what I can tell you is that Chrome is a awesome browser if you want to try it out ;)
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
@BitsInBytes, it's cool that you're working on this, but I'm genuinely confused why you have a back-end for any of this. Here's the one I started: https://github.com/owensd/beyond-discord. It just pops alerts at the moment as my primary focus is integration with Discord and the Avrae bot - and I only have about an hour or so to work on it during the week.
All of this can be done via scraping the HTML contents locally without any need to round-trip across a server. I already have too many points of failures in my online games: DDB, Discord, Avrae Bot, Google Hangouts. Adding another one to the mix is just asking for trouble for a lot of folks on game night.
Also, open sourcing at least part of it, would let you focus on the browser you use the most and let others chip in for the other browsers.
Just something to think about.
@owensd: The reason is pretty simple, the inception of this was just for monsters...monsters *don't* have hard coded attributes, classes, ids or anything. They can't be easily queried as well the HTML is not even standard across monsters (looks to be user entered in via a WYSIWYG editor) Some have <strong> tags, some are <em>, some don't have either. For a example see this (https://pastebin.com/HiG94WrG) - there is nothing to hook. This is from basic rules dragon actions.
So when I first worked on this, *just* for my own means - as I am a server / service developer I wrote a language processing engine in C# to attempt to read the text and understand what it is actually trying to do and not look at the HTML (because its useless). Saving throws, rolls, "linked" actions or spells, you name it are not defined in the HTML what so ever. So my code builds what it thinks the text is trying to represent in real time by reading the words and piecing it all together. This was not easy as the wording is not the same across monsters, the formatting is different in a lot of ways and there are many, many "edge" cases so my code had to be for the most part pretty smart. It still does not get 100% of things, but I am working on it as I have bigger plans for it.
When I showed my friends what I wrote, they said "this is really cool, could you find a way for others to use this tool". So I converted the back end logic to work in a web API service and eventually crafted the extension as we know it - the rest is history. The widget I will most likely move to being totally client side once I work out its bugs, its getting there. Having to deploy extension versions is a real pain and I can't even guarantee people will get it. I still get PM's about bugs from versions from days ago just because chrome for what ever reason has not updated them yet due to stuff I had to put into the core client. I will use the service architecture to test scrips and get instant feed back and when the "basic" features work 100%, then I will convert them to the extension so they are client side. *However* the monsters will remain in the service because they are 100% dynamic.
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
As it seems there are some technical people here and some questioning / curious how it was built, here is a detailed overview of the entire system.
Core Client Extension:
-JQuery
-JQueryUi
-JQueryMods
-JQueryPlugins
-Images
-Injection Script: Calls Service
Service:
-Javascript cache
-----[Contains all the JS scripts active in memory in a singleton]
----------(So response rate will be extremely quick when the end point is hit to get the data as there is no processing)
-Monster cache
-----[Gets filled overtime as people use the service, allows the get monster call to get quicker over time]
-[Generic caching things that I won't go into]
-Admin routes for me to push data to so I can update the cache or the back end system without a deployment
-Public routes
-----[Get resources (scripts currently, but maybe things in the future)]
----------{This also returns a func that gets executed right away on the client that is dynamic so I can add features, service routes without client changes}
-----[Get monster (for monsters already generated as only a name is sent over]
-----[Get monster dynamic (for when monster is not already generated, attempts a runtime generation using the language engine)
-Monster builder
-----[Contains the basic html parser that strips out the html and segments it into areas "actions" vs "abilities" etc]
-----[Language parser to parse the raw text into instructions (dice rolling, saving throws, linked actions to execute (like Multiattack)]
-----[Dynamic javascript generation to take all the data and turn it into functions that hooks the main scripts (that roll dice, etc)]
-----[There are a few smaller things but no real point getting into them]
Database:
-Monster data
-----[So the system does not need to generate a monster over and over again) {can be purged or updated via admin module}
-Service web requests so I can track usage and error rate [No hand shake so it does not slow down service]
Over all its a pretty robust solution and the only draw back is basically my host might not be able to hand the traffic like a 30-40$ a month cloud service would using Azure or AWS.
I am a senior back end developer so I used what I knew to build what worked...it may very well be slightly over engineered but does allow extreme flexibility and second bug fixes and in memory patching.
I would love to hear your opinions though! I will make the javascript totally open source in time once I get things sorted out as I *know* it can be improved. I spent a day learning javascript, jquery and then wrote the entire javascript system...so I am sure it can be improved by people who know JS inside and out. (not gonna lie...I have really come to love javascript after this project!)
I might even make aspects of my back end system open source, but the language processing I might keep in-house for later use.
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
I am the Inquisitor Imperitus. I am judge, jury, and executioner. Draw your last breath now, as I send you to the Nine Hells.
I fully expect to have to roll out changes as the website evolves and I am 100% ok with that as it means they are also making improvements!
And thank you for not shutting us down haha (nervous laughter ;) ) - but in all serious its nice to be apart of a community / software that appreciates community / moders (or what ever you call us).
Check out my new DDB Extension!!
https://www.dndbeyond.com/forums/d-d-beyond-general/general-discussion/7320-d-d-beyond-interaction-chrome-extension
maybe the option here would be that curse make a similar tools that you provide us so they can update and make it work flawlessly without chance that it break because of curse change in the code ? is it a possibility ?
I am the Inquisitor Imperitus. I am judge, jury, and executioner. Draw your last breath now, as I send you to the Nine Hells.
"Any society that would give up a little liberty to gain a little security will deserve neither and lose both" -- allegedly Benjamin Franklin
Tooltips (Help/aid)
I am the Inquisitor Imperitus. I am judge, jury, and executioner. Draw your last breath now, as I send you to the Nine Hells.