v1.50
has been successfully deployed! 
This update introduces a number of new features and improvements to the site - I'll get onto these in just a moment. The patch also addresses many of the feature requests and bugs reported in by you guys. If you're looking for other development logs (before and after 1.50) then click here. Okay here we go!
Automatic Online Terror Zone Tracker
- I've partnered with d2emu.com to provide you guys with an Automatic tracker for current (and next) online Terror Zones. It updates the current Terror zone at the top of the hour, and updates the next Terror zone automatically at 5-8 minutes past the hour, every hour, and includes immunities present (represented by icons). It also shows a record of the last 12 hours of online terror zones.
- Added a sidebar widget for displaying the current + next online terror zones, with a link to the more detailed tracker page itself. I also added an index block for the new Tzone site area, reflecting it's subnav contents.
- Created a Guide to Terror Zones here explaining the effect terrorizing a zone has on its
alvl
,mlvl
, and experience gains. It also lists all possible TZs, and all impossible TZs. - Added a Terror Zone tier list (by experience gained) here. This takes into account monster density and type, number of elite groups, and ease of access.
- Many thanks to Mysterio for providing API access - I tried for weeks to try and figure out how this was being done at the source but without the success I was hoping for. While I was able to get current terror zones through memory reading, I was unable to get 'next' TZs because I can't read assembly code - hence the d2emu paid partnership for which I am very grateful.
- A quick reminder that in the last patch, I introduced new filters to the Areas database which allow you to filter by immunities present (or) absence of immunities. These filters should be useful in tandem with the tracker.
Automatic Dclone Progress Tracking
- The Dclone progress tracker now accepts automatic updates from d2emu.com as part of our partnership. These appear as reports 'made by' d2emu, and come in shortly after the real in-game status updates.
- You can still manually update the progress as you were able to before, in case the blizz servers get bugged or otherwise. Big Shout-out to everyone here who put in manual reports over the years!
- The d2io Dclone API continues to function as before, so you'll still be able to receive notifications as you normally would through any of the community-built notifiers/apps etc.
- There is now also a sidebar widget for dclone tracking - by default (and for guests) it shows softcore ladder and softcore non-ladder - but if you're logged in, it can be configured with the gear icon to display whatever combination of modes you want.
- The tracker page itself has a new, simpler layout, which splits the original table into four parts for easy scanning: SC L, SC NL, HC L, HC NL, in that order. This change ^ removes the need for filtering, although you can still sort by Progress, Region and Last Report, ascending/descending. The Stone of Jordan listings are now also unfiltered by default (but can be filtered by clicking the 'Advanced Filters' button. After making a manual report, you are returned to the page as-is with no pre-filtering.
- There is a new colour scheme for the actual progress indicators, which start out blue (cold), get hotter, until they reach 5/6 where it turns red and begins to shake, and finally 6/6 is purple (cooling off). I think this more accurately represents the urgency of the status level, with 5/6 being the most important in order to get into a game in time before Diablo Clone actually spawns.
- Many thanks again to Mysterio for providing API access to the automated dclone statuses. This should help keep the tracker accurate to the in-game status for it now no longer relies on manual inputs.
Push Notifications
- You now have the option to receive push notifications from diablo2.io again! These notifications appear on your device at the browser/OS level (and in some cases, on your device OS even when the browser is closed or backgrounded), rather than just on the website or through email. Push notifications can be received when:
Someone sends you a private message
Someone comments on a trade you created or are watching
Someone marks a trade you are watching as sold
Someone gives you +1 trust for a trade
Someone mentions you in a post
Someone quotes you in a post
Someone likes your post
Someone replies to a topic you have bookmarked
Etc. (too many to list here but the above are probably the most important) - You can turn push notifications on/off by clicking the button in your UCP (user control panel) on the Notifications Options page, or directly from the notifications dropdown in the site header.
- You can choose which types of notifications you want to receive via push from the UCP, on the Notifications Options page, just like you can for board notifications and email notifications.
- Enabling push notifications will activate them on the device you're currently using only.
- Take a look at this compatibility table which explains which notification types are supported on which browsers/OSes - some allow for pushes even when the browser is closed, some require the browser to be open, etc.
- To set up pushes on your phone, see this guide for iOS and this guide for Android.
- Please ensure that you have given your browser permission for diablo2.io to send you notifications, and ensure that your operating system/device settings allow push notifications to actually appear.
- Remember, if you clear your browser cache, it will also unsubscribe you from push notifications - meaning that you'll have to re-enable them from the UCP again in this scenario.
- This should hopefully be of use to traders and forum-goers alike. I was able to leverage the new, official phpBB extension for this, which works much smoother than the old paid extension I had attempted to use in the past.
- I debugged and fixed an issue with the official extension where iOS/Mac OS X would only receive 3 notifications then get unsubscribed. The extension has since been updated.
Automatic text detection in trade screenshots
- When you upload a screenshot of an item to a trade listing, any text inside the image is automatically detected and then added to your post.
- The text is added to your post inside a quote tag to separate it (visually) from the usual post content like your expected offers etc. Its contents do indeed show up in inline trade descriptions when viewing rows of listings on the site, so by no means is it hidden in any way. If you add additional screenshots, these are also processed and appended to the post.
- This makes the
Search descriptions
search option so much stronger, because now all of the item's exact in-game stats from the tooltip are inside posts as actual text and therefore indexed by the site (and appear in description searches). This means that you can for example search for Annihilus as usual, then search the descriptions of those results for '10% to experience'. - The results are by no means perfect - it will still sometimes pick up text from 'behind' the tooltip, and sometimes if there is anything in the screenshot that is not the tooltip text itself, it will 'see' text where there isn't any. For the best results, screenshot the item with nothing behind the tooltip if you can, and only screenshot the Black tooltip box itself.
- This is I think close to as good as I can possibly get it in terms of accuracy. I think there will be some more common patterns that might be able to be eliminated through post-processing, but I've addressed the most obvious ones. Users are still encouraged to review the output (and see a reminder to this effect) and make any edits themselves if necessary.
Technical notes for those interested
The process of detecting the text from the image is called Optical Character Recognition (OCR) - something that has been on my wish list for the site for yearsUsually OCR is trivial to implement, but because D2R's in-game tooltip font is so exotic, most stock solutions simply do not work and produce a garbled mess of incorrect text.
With @sabcoll's guidance, I first explored using Tesseract.js to achieve this - but the default model also produced very poor results. I then did pre-processing on the image, increasing contrast and desaturating, but this had no effect. I spent hours 'training' up a custom Tesseract model on individual screenshots, correcting mistakes character by character, but even this was not enough and I started losing hope.
I gave up on Tesseract eventually and decided to look at other options - I came across Google's 'Vision API', a paid per-request service which on its own was producing (slightly) better results from the screenshots.
After playing with pre-processing the image (reducing depth field, increasing contrast, monochrome), sending the pre-processed version to Vision API, then post-processing the response in PHP to eliminate further common mistakes/patterns (with regex/preg_replace etc.), I was able to get it to output tooltip text fairly reliably.
Trade Listing Hover Previews
- When hovering over trade listings (on desktop), you now see a hover tooltip that contains a preview of the first image attachment within that trade listing (if an image attachment exists).
- This allows you to quickly hover over listings and see the stats of the item's screenshot without having to rely on the description or having to enter the listing itself. This works on the trade page, when browsing trades, when searching trades, when viewing your watchlist, and when viewing your own or others' stash pages (and tabs).
- It's also present on database entry pages where the latest 20 active trades are listed - if no image attachment exists then it loads the description text into the tooltip instead (since there are no inline descriptions here). There's now no delay on the tooltips here either, so you can scan the list quickly by hovering.
- I wanted to have the hover tooltip appear only on the clickable element within the standard trade listing row, but because this sometimes overflows horizontally, it made it impossible to also have the tooltip display when in an overflowing state. Therefore the tooltip will be visible even when hovering over a non-clickable section of the listing container (not the end of the world).
Freeze Trades
- The Freeze Trades feature is back! The purpose of this feature is so that if, for some reason, you cannot access the site for more than 3 days (holiday, work trip, break from the game etc.), you can 'freeze' all your trade listings from your stash page, making them immune to the 3 day expiry until you unfreeze them. There is no time limit on how long trades can be frozen.
- Frozen trades will not appear in browse trades, trade search results, in your watchlist, or anywhere else on the site. You can still see your own frozen trades in your own stash. You cannot interact with Frozen Trades in any way (unless you are a moderator). You can only freeze 'all trades' at the time of freezing, not individual ones.
- When you unfreeze your trade listings (also done from the stash), they all get bumped automatically (this is in part to avoid it being immediately purged). You cannot unfreeze your trades if less than 12 hours have elapsed since you froze them.
- This is my fifth (and hopefully last) attempt to get this feature working on production. I have refactored the code that froze, unfroze, (and has the purger ' Dodge') frozen trade listings. I have tested this thoroughly on my local environment and it is all working as expected. This time is slightly different from previous attempts in that the database schema used has changed.
- Freeze trades has now been confirmed as working correctly!
(9th June)
Trade Listing Quantities
- You can now set a quantity for your trade listings. This quantity appears as a blue figure after the WTB/WTS tag (if a quantity has been specified) in all areas in which trade listings normally appear, including in price history.
- The field is optional - if you don't set it to anything - then no figure will display. It is not retroactively applied, meaning that only new trade listings from today onwards will have a quantity field (if set).
- This should make it easier for people listing or price checking multiples of the same item (like Perfect Gems, Perfect Amethyst, Chipped Gems, Gold, Token of Absolution, 3x3 Keyset etc. etc.)
Traders Online Filter
- When browsing trades or searching trades, you can now apply the 'Online' filter to see only trade listings from users that have been online within the last 10 minutes. Handy for browsing or searching for a quick trade with someone already online.
- This feature did used to exist on the site but had to be disabled due to performance reasons. Optimisation work from this (and previous) patches allows this feature to be reintroduced today.
Other Trade Improvements
- You can now add keywords to refine your historical price check results. This allows you to search for certain stats or keywords within the descriptions of all of the price check results returned. It works in combination with the filters also. Just hit the 'Add keywords' button, enter your keywords, and then hit 'Apply filters' like normal - the results will be refined to include listings in which the description had your keywords in it. Now that we have OCR screenshot text in descriptions, this will be handy for finding the price of an item with a specific stat or set of stats.
- Event scheduler created to delete Player Services trades that have no replies for longer than 3 months. This will clear up the backlog of old Player Services topics that are now inactive.
- You can now filter for 'All runes' when browsing trades. This is different to the 'high runes' and 'low runes' filters in that it returns listings for all runes regardless of quality.
- Added Gold as a pseudo item that can be traded. Can someone please add an informative description, or failing that, some comments to populate the database entry page?
- Added Chipped Gems as a pseudo-item that can be traded. Can someone please add some comments to this page explaining their usage in trade exchanges? I think it's useful for some crafting stuff for example.
- The /trade page has a simpler layout now (dispenses with the volume graph - which can still be found on the Stats page btw) that brings its most important elements above the fold, and now shows 30 trade listings as opposed to 10.
- Changed 'My stash' to 'Stash' in the Trade subnavigation. Changed 'Trade Stats' to 'Stats' in the Trade subnavigation.
Deckard Cain AI Beta (just for fun)
- I hooked up our boy Deckard Cain to ChatGPT 4 - he will now respond to you if you mention him using
[mention]Deckard Cain[/mention]
or quote one of his posts. You can also click a check box in the quick reply/full editor to insert the full mention tag into your post. - He is only available in the main discussion forum. Once you click 'Submit', it can take a number of seconds for the page to load with his response. What's happening here is your post's contents are being sent to the API, the AI is thinking, and then it's sending the request back and parsing it into a reply.
- Deckard Cain will always answer in-character, and only answers questions in the context of Diablo 2 Resurrected. I tried to ask him if he likes Andariel's curvy bits but his response was unfortunately very sanctimonious. He seems to be an expert on Diablo 2 Lore, but his responses to questions regarding itemisation, builds, strategy etc. could be improved.
- I did this more for the lols than anything else, but there is potential here for improvement (not saying I am committed to trying this btw) - There are other AIs out there like Gemini, Claude etc. which I could try. All of these have very little context on Diablo 2 by default, but, if I can vectorise the posts database of diablo2.io, then hand that context to the AI, then we could have some pretty interesting interactions, like being able to give AI price appraisals, discuss complex theorycrafting etc. all taking into account previous posts on the forums here. I don't want to promise much because there are more important things still on my backlog, but just to put that out there as a possibility!
- I'll set up a testing thread in the forums where we can all ask him absurd questions and see what he spits out
It will be fun. Please also try to use him in earnest to answer some difficult questions. This is a beta, so let's try and see what he's capable of and where the issues are. Whether he stays on diablo2.io for the long term is yet to be determined.
Miscellaneous Changes & Improvements
- phpBB has been updated to the latest version
3.3.15
and extensions updated to match. diablo2.io is now also running onPHP 8.3
! Both these tasks took a lot of testing and compatibility fixes in order to get everything working again. - We're now running on a smaller but more modern server with increased storage. Together with the upgrade from PHP 7.4 to PHP 8.3, along with more SQL optimisations with this patch (including some tweaks to mysql Memory usage), the site should feel faster. See here for details on that migration if interesthed.
- Quotes now render collapsed if they are over 10 lines in length, and show an 'Expand quote' button. Once expanded, a quote can be collapsed again by clicking 'Collapse quote'. This should make reading long topics with multiple nested quotes a bit easier.
- Inline attachments now have their width and height predefined before they lazy-load into the page - this has stopped the post elements themselves from jumping up and down/changing in height as the images load in - this is a much smoother scrolling experience for topics!
- Added 'Rune' suffix to H1s and HTML titles of Rune database entry pages to assist SEO, as these are often searched {name} + 'Rune' as opposed to the rune name alone.
- Created an event scheduler to delete orphaned attachments every 24 hours to save on future disk space and automate an otherwise manual task for myself.
- The 'Weapons' filter in Runewords database has been changed to 'All Weapons' and now filters for Runewords that can be placed in any weapon, excluding Melee-only weapons and Missile-only weapons.
- When filtering for Uniques, Sets, and Bases, the 'Normal, Exception, Elite' filters can now only be selected one at a time.
- When filtering for Bases, the 'Light, Medium, Heavy' weight filters can now only be selected one at a time.
- Made a new 'brass cog' icon that shows at 1022px breakpoint and activates the user dropdown - this replaces the old fontawesome icon which looked really out of place.
- Removed the chevron down icons in navbar layout, and one vertical bar that used to go between notification bell and username. This was to make more space in layout for the new Tzones nav item.
- New nav bar layout breakpoint at 730px which shrinks the left logo (again this was required to make space for the new Tzones nav item).
- Sidebar blocks now follow a more uniform pattern - latest discussion is always at the top (most interacted with), followed by remaining dynamic blocks, which also have been re-ordered somewhat. Donate is now at the bottom, and 'random items' is somewhere in the middle.
- Made sidebar call to action buttons smaller in size to keep things compact and reduce the overall height of the sidebar somewhat now that it is full of items.
- On the forums page, there is now a dedicated dropdown button for searching the forums - this was a little bit difficult to find before. The other options like marking read/sorting are found under the 'Cog icon' button next to it.
- Main navigation arrow indicators and subnavigation stay where they are when navigating to the Dclone guide page, Dclone help topic, or Dclone Public API topic. This is also the case for the new Tzone guide page and Tzone tierlist page.
- Added an additional 'edit your profile' mini button underneath the profile fields when viewing ones own profile/stash page because I thought it would be handy there - especially for those who have hidden their trade stash from profile.
- Added the ability to delete one's entire Holy Grail collection - look in the site footer when viewing your own grail and you'll see the link to do so in red. A modal will appear asking you to confirm your choice - after confirming your entire holy grail collection will be wiped and you'll be taken back to the tracker page. This action is irreversible so please use with caution.
- Adjusted video ad positioning somewhat to keep it closer to the right edge of the screen.
- Reduced the cache time of the 'latest discussion' topics list in the sidebar from 30 seconds to 10 seconds.
- Installed a new 'post saver' extension - when editing any post, if you lose connection, navigate away by accident etc. then when you return the contents of the post you were writing are retrieved from localstorage and added to the text field automatically.
Bugs Fixed
- Fixed a performance issue where some pages were eating up vast server resources to calculate online status indicators.
- Donations no longer send the site into a death spiral (updated this extension and made some visual changes to the page also).
- Fixed a bug with the Horadric Ban Hammer which would time out before deleting a user's posts, signature, and profile fields.
- Fixed a bug where users deleting their own account would cause the script to time out.
- Fixed a bug where users registering a new account would sometimes time out, resulting in a 'Email/Username is already in use' error.
- Some emojis weren't displaying on certain browsers (specifically Fredkid's posts for some reason lol) - this has now been fixed and you will see those emojis instead of the empty square icon.
- Long usernames no longer break the main navigation layout and overflow correctly with ellipsis.
- Fixed an issue where adding recipient to a private message wasn't working on Chrome.
- Fixed an issue where the forum options layout would break at a certain horizontal breakpoint.
- Fixed an issue where top navigation items weren't lighting up on mouseover.
- Fixed an issue where top-right avatar was being lazy loaded, causing cumulative layout shift (CLS), on every page load. It now loads 'eagerly' which should reduce CLS. Unfortunately the noti bell is still causing some CLS in this area, but the problem was too deep-rooted and I had to move on to more important things.
- Fixed a bug where the jump to top/jump to bottom buttons were overlapping horizontally on some browsers.
- Fixed a bug where there was a missing space between 'Act' and the act number in Area hover tooltips.
- Added missing lightning immunities to The Secret Cow Level.
- Fixed missing and redundant navigation links in the Dclone mobile nav accordion and index block. Fixed a bug where the Dclone index block header linked to the wrong page.
- Fixed bug where an extra (redundant) divider was appearing on profile/stash pages for users without any profile fields set.
- Fixed bug where scrollbars were still appearing on Holy Grail Tracker graph tooltip bounding box.
- Updated old year values in site footer which still said 2024.
- Fixed a typo of 'exclusively' in the sidebar block for the trading marketplace.
- Removed (now redundant) username hover tooltip that was still present when viewing a private message and hovering over the author's name.
- Moderators no longer see 'message reporter/reported' buttons when the report type is a private message report.
- Fixed missing sidebar footer while on mobile viewport on database pages, dclone tracker page, browse trades page, search trades page, search results page, price check pages, memberlist page, donate page, and discord page.
- Fixed a bug for Mac OS X Safari users where the trade search would start bugging out after a few characters were typed. This was due to a recent change made by Apple in how Safari deals with inputs where type is "search". Changed to "text" type to fix.
- Fixed a bug where selecting a mercenary on the attack speed calculator would not (visually) deselect a main class button and vice versa.
- Fixed missing The Stone of Jordan ingredient in Recipe: Add 1 Socket to a Rare Item.
- Fixed a bug where replying to a topic with an extremely long title would cause an SQL error due to an overflowing database field.
- Fixed an issue where tables, unordered lists, and ordered lists were making their way into price history/user buy history/user sell history/trade/browse/stash/watchlist description strings and breaking the layout. These have now been stripped out at the PHP level before the descriptions are rendered.
- Fixed an issue where users entering a number greater than 127 for any 'sold for amount' would encounter an SQL error. This was due to the field being
TINYINT
and anything greater than 127 being out of range. Changed toSMALLINT
so that amounts of up to 9999 are permitted. - Fixed a bug where playstation, xbox, and switch 'Copy ID' buttons wouldn't appear in trader posts unless a Bnet ID or discord ID was also present. They can now display independently.
- Added missing Steel Scarab ( Scarab Demon) monster spawn to the Tal Rasha's Tomb database entry.
- Fixed a bug where the notification options table layout was broken (one column group was shifted down on Chrome specifically).
- Fixed a skill tree bug where from level 28 upwards, Poison Nova and Poison Creeper showed incorrect damage values.
- Fixed incorrect skill tree skill description on Poison Creeper.
- Fixed a skill tree bug where from level 32 upwards, Holy Shock, Holy Fire, Holy Freeze, and Sanctuary Aura showed incorrect damage values.
- Fixed a skill tree bug where Fists of Fire was not showing the % Physical Damage Converted to Fire Damage stat.
- Fixed an issue where Sazabi's Grand Tribute was missing its Poison Length Reduced by 75% stat in the full set completion bonus section.
- Fixed an issue where sold crafted item listings would sometimes appear blue in user buy/sell history pages.
Personal Comments
- I started this sprint about a month ago. As always - time is the enemy - I could only fit into this sprint what I thought were the highest priority items from the existing backlog, feedback subforum, and bug reports subforum. I will be attacking the backlog again in the next update.
- I really hope you enjoy this patch. If you have any questions then feel free to ask in this topic, or in the feedback/bug reports subforum. Good drops and fair trades to you all! Teeb
Teebling
7827
Admin