D2BS does not try to exploit any bugs in the Diablo 2 code, the Battle.net protocol or game servers; it only simulates a real player.Binary Download
: hereSource Code
: hereVisual Studio 2008 Runtime
(necessary for loading the D2BS runtime): here.NET 3.5 Runtime
(necessary for loading the D2BS loader): here
Version 1.4 -
. API changes:
- Added useStatPoint(statid, count) and useSkillPoint(skillid, count)--no significant error checking
is done, so be careful or you may cause a crash (or worse, a ban)!
- Added loadMpq(string mpqname) (this allows you to switch cd keys on the fly)
- Added me.revive()--no error checking is done, so you may cause a ban if you're not dead
- Added takeScreenshot()--this is the same as pressing the print screen key in D2
- Added me.pid--this returns the process id for the current D2 that D2BS is loaded to
- Added me.nopickup--returns the current nopickup setting, and allows you to enable/disable nopickup
- Added me.mapid--returns the current map seed
- Added me.profile--returns the last profile used for login() OR the profile set as the default
- Renamed getTextWidthHeight to getTextSize
- Changed the return from getPath--now it returns an array of objects with x and y properties
- Added support for setting skills from item charges (me.setSkill(skill, hand [, item object]) where
item object is the result of getUnit(TYPE_ITEM))
- say() fixed to properly detect the screen location and correctly encode % characters
- Multiple problems with screenhook clicking and hovering.
- Signed/unsigned problems with stat ids 13, 29 and 30
- Channel chat input parsing
- unit.getStat(-2) now properly bitshifts life, mana, and stamina
- clickMap no longer crashes with a null 'unit' argument
- FileTools functions now correctly use the locking API
- Unit.getFlags() now correctly works
- me.cancel no longer affects the automap
- The D2BSScript object is now initialized properly like all the others
- The event code now correctly returns a 32-bit integer--this was similar to the old getUnit bug, but
. Added partial support for TCP/IP games in login()
. Had to revert the new map code--it wasn't working for all area exits, and existing scripts rely
on that behavior. :(
. Changed the Warden behavior so that you can load D2BS without cGuard, and it will terminate on
Warden if not loaded with cGuard
. Upgraded the SQLite library to version 3.7.5
. Downgraded "Game not ready" exception from an error to a warning.
. Added the ability to change the default starting script names, as well as the ability to let the
profile specify both the script path and the default starting script names (see the new values in
d2bs.ini for more details)
. Added the ability to specify the profile to use *before* calling login():
- The profile is activated by the first time you call login() OR
- The first WM_COPYDATA message with an ID of 0x31337 (the data is treated as a profile name) OR
- The first XTYP_POKE sent via DDE (the data is treated as a profile name) OR
- Setting the profile via the "profile" command on the console.
- After the first profile is set, you cannot change it. However, specifying a different profile
via login() will allow you to login using a different profile (but me.profile will *not* be
updated, it will remain as-is, and the script path will remain the same)
. The console is now scrollable using page up/down. Only the last 300 lines are saved.
. Added new debug code! D2 will now silently crash when it does crash (no more "Window not found"
errors!), and will output debug information to D2BS.log.
. Known issues:
- getBaseStat does not correctly detect the end of the the item table. Calling it with a rowid greater
than the last rowid will cause a crash.