Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Diablo III - Blizzless Server

Joined
Feb 22, 2012
Messages
2,103
Reaction score
1,271
DiIiS is an open-source local server for Diablo III: Reaper of Souls. It features account creation, authorization, lobby, Necromancer class mechanics, chat system, clan system, basic DRLG, item generator with in-game affixes, set items, main scripts for all story quests 5 acts, Adventure Mode, Challenge Nephalem Rifts mode, artificial intelligence for minions, personal artificial intelligence for monsters and bosses, and LAN.





Subscribe to the thread for changelogs!

DiIiS Project

DiIiS is a fully-functional open-source local server for .

Diablo III Private Servers

Diablo III is an action role-playing game developed and published by Blizzard Entertainment. It is the third installment in the Diablo franchise and was released for Microsoft Windows and OS X in May 2012, with the console versions releasing in September 2013. The game has been praised for its engaging story, variety of classes, and intense combat.

Playing Diablo III on a private server can provide an even better experience than playing it on the official servers. Private servers offer a more stable connection, faster loading speeds, and no restrictions on character creation or trading. Additionally, many private servers also allow players to customize their gaming experience with unique mods and settings that are not available on the official servers. This makes playing Diablo III on a private server the best way to experience the game.

A private game server also allows players to create a custom gaming environment, allowing them to customize the game to their own preferences. This includes changing the difficulty level, adding unique mods and settings, and even creating custom maps. Private servers also provide a more secure gaming experience as they are not subject to the same restrictions as official servers, and faster community responses.

Overall, playing Diablo III on a private server is the best way to experience the game. Private servers offer a more stable connection, faster loading speeds, and no restrictions on character creation or trading. Additionally, players can customize their gaming experience with unique mods and settings that are not available on the official servers. This makes playing Diablo III on a private server the ideal way to enjoy the game.

Features

  • Implemented account creation system, authorization and lobby.
  • Implemented Necromancer class mechanics.
  • Fully implemented chat system and friends.
  • Fully implemented clan system.
  • Implemented basic DRLG (dungeon generator).
  • Implemented item generator with in-game affixes.
  • Implemented the basic mechanics of almost all active abilities for all classes.
  • Implemented a system of set items.
  • Implemented all main scripts for all story quests 5 acts.
  • Implemented basic scripts and generator for "Adventure Mode".
  • Implemented the basis for the "Challenge Nephalem Rifts" mode.
  • Implemented artificial intelligence for 80% of minions.
  • Implemented personal artificial intelligence for 40% of all monsters.
  • Implemented personal artificial intelligence for half of the Bosses.
  • Implemented LAN

Restrictions

  • Donate Store implementation is removed.

Installation

Supported Clients

Each version of the client includes changes to structures, opcodes and attributes.

The currently supported version of the client: 2.7.4.84161 - latest on Battle.NET

Server Deploying
➡ Install .
➡ Create databases in PostgreSQL: diiis and worlds.
➡ Change you account and password in database.Account.config and database.Worlds.conifg.
➡ Restore worlds.backup to worlds database.
➡ Compile using .
[Skip this stage for local game] Copy the file to the server folder (It overwrites the default settings):
  • Update the parameter entries with your IP record on the network: BindIP and PublicIP.
➡ Launch wait until server start, it creates a hierarchy.

➡ Create user account(s) using console:

Code:
!account add LoginMail Password BattleTag <user|tester|gm|admin|owner>
Example - creates a username Droppy@ with password TestPass123!, gamertag (without #) is MyBattleTag with owner rank:
Code:
!account add Droppy@ TestPass123! MyBattleTag owner´

Prepare Client

Do this for each client connecting to the server.

➡ Make sure you are using a Supported Client (mentioned above)
➡ Install certificate , password - 123 (the game verifies the CA root certificates).
➡ Setting up redirects client to your server:

Method 1: Via HOSTS file

Add redirects to the hosts file (C:\WINDOWS\System32\drivers\etc\hosts on windows or /etc/hosts on Linux/Unix):
Code:
127.0.0.1 us.actual.battle.net
127.0.0.1 eu.actual.battle.net
127.0.0.1 cn.actual.battle.net
127.0.0.1 kr.actual.battle.net

Or use this tool released here for easier distribution (compilation required)

After the modification the official Battle.Net application will not be able to connect to the server! Make sure you are logged in before this change!

Method 2: Via Binary Patching
Code:
// Find null-terminated string enum and rewrite with HexEditor to your IP server.
eu.actual.battle.net/
us.actual.battle.net/
cn.actual.battle.net/
kr.actual.battle.net/

➡ Optionally (to bypass Battle.NET bloatware): Launch the client (x64 or x86) with arguments "Diablo III64.exe" -launch

➡ Login to the game using your credentials.

If you are not running locally, it is important to ensure that the game is set to public. This will allow other players to locate and join the game. To ensure successful connection, players must also set their game to public prior to connecting.

You're in the game world!

Using

Navigate to the designated 'db' directory and execute the command docker-compose up. Once this process has been successfully completed, please proceed to step 5 in the 'server' section of the relevant documentation for further instructions.

Game World Parameters

Please check this:

Source Code

Community branch (recommended):

Credits to
iEve advocaite PapkaHere


Screenshots

Droppy - Diablo III - Blizzless Server - RaGEZONE Forums


View more:
Droppy - Diablo III - Blizzless Server - RaGEZONE Forums


Droppy - Diablo III - Blizzless Server - RaGEZONE Forums


Droppy - Diablo III - Blizzless Server - RaGEZONE Forums


Droppy - Diablo III - Blizzless Server - RaGEZONE Forums

Donate to the project

The Blizzless Team are proud to offer their software as open source, allowing anyone to access, modify and utilize its capabilities. The community is proud to continue, maintain and improve the software. If you find value in their work, please consider showing your appreciation through a donation. Every contribution helps!

Russian (patreon-like):

Donations to Blizzless are greatly appreciated and will be acknowledged with a discord color as a token of our gratitude. However, please note that such contributions do not entitle the donor to any additional privileges or access to server files.

 
Last edited:
Joined
Feb 22, 2012
Messages
2,103
Reaction score
1,271
Excellent post.I hope this project can grow more and more,and the community gets very active.

thanks for your contributions! it's a nice project that tends to grow. I'll be trying to making some tools to aid development!



Recent Changes:


ATTENTION: new PTR is out. some opcodes may be outdated. Backup your files whille we upgrade

Cheers!



Changelog



Changelog
 
Last edited:
Joined
Feb 22, 2012
Messages
2,103
Reaction score
1,271
Changelog

Changelog


Major:




plus some other small changes




Changelog:

Major changes (thanks to advocaite :love:)



Basically, the enum couldn't find the actual file name of the actor file.

The changes rely on adding a new attribute named SnoFileNameAttribute:
Code:
public enum ActorSno
{
   // ...
    [SnoFileName("a1dun_Caves_Nephalem Altar_A_Chest_03")]
    _a1dun_caves_nephalem_altar_a_chest_03 = 215434,
    _arcanumorb_model = 215444,
    _fallenshaman_a_unique01whipple = 215445,
    _wizard_waveofforce_runeobsidian_shell = 215488,
    _cow_gem_flippy = 215500,
    _wizard_waveofforce_runegolden_shell = 215511,
     [SnoFileName("a1dun_Caves_Nephalem Altar_A_Chest_03_B")]
     _a1dun_caves_nephalem_altar_a_chest_03_b = 215512,
     // ...
}
 
Last edited:
Joined
Feb 22, 2012
Messages
2,103
Reaction score
1,271
Someone could make a repack for the client? Can't get that version which this required. Even live and test server already on different version :)

Due to copyright restrictions, it is not permissible to share this product on RZ. You may have luck finding it on other search engines, such as DuckDuckGo or Russian websites.



Changelog

Update: Reverted the last commit as the animation IDs were incorrect, causing an unexpected behaviour in Open World. This was reported by a contributor.
It appears that either the IDs on CoreTOC are incorrect or there is an implementation issue. Further investigation is required to determine the cause.

Major changelog
Description:
  • Fixed #116 - Community branch cannot save gold
  • Nephalem rift progress multiplier added to the Config.cs. Defaults to 1f (no change). Helps greatly.
  • `!world info` added for world information
  • `!difficulty <min/max>` added
  • Returning `List<T>` to `ImmutableArray<T>` on a particular method (will be changing more soon). Most List<T> on the project are read/only, best to return an array instead, less re-iteration by default, and some CLR improvements ( )
  • Upgraded LogLevel from Warn to Error when it's a database error (DBSession.cs)
  • Removed some `//Blizzless Project 2022` with regex replacement
  • MethodTrace output enhancement.

I have implemented a GetField<T>(...) and SetField(...) on GameAccount.cs, which should be applied to the rest of the project if it performs as expected. The use of lock alongside a property getter that generates a new instance every time is not recommended (nor works), as it will hold the lock for... nothing.

Before:


// notice this will query DBGameAccount every time it's called
public DBGameAccount DBGameAccount => DBSessions.SessionGet(PersistentID);

// case 1: works, but useless querying.
lock (DBGameAccount)
{

var dbGAcc = DBGameAccount;
DBSessions.SessionUpdate(dbGAcc);
}

// case 2: dooesn't work. two to three queries being made to the game account
not a property that acts like a method. Apologise, but let's not let it happen again to other contributors

lock (DBGameAccount)
{
DBGameAccount.DBAccount = value.DBAccount;
DBSessions.SessionUpdate(DBGameAccount);
}

After:

public ulong Gold
{
get => CurrentToon.IsHardcore ? GetField(s => s.HardcoreGold) : GetField(s => s.Gold);
set
{
SetField(dbGameAccount =>
{

if (CurrentToon.IsHardcore) dbGameAccount.HardcoreGold = value;
else dbGameAccount.Gold = value;
// SetField will also take care of updating
});
}
}

This wrapper will serve as a reference for use in a different class to facilitate the movement of additional tables, as long as it's accepted by the community.

TSource GetField<TSource>(Func<DBGameAccount, TSource> execute)
=> DBSessions.GetField(PersistentID, execute);
void SetField(Action<DBGameAccount> execute, [CallerMemberName] string methodName = "")
=> DBSessions.SetField(PersistentID, execute);


And finally, on DBSessions.GetField and DbSessions.SetField


// obj = primary key

public static TResult GetField<TSource, TResult>(object obj, Func<TSource, TResult> execute)
{
using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession();
var db = session.Get<TSource>(obj);
return execute(db);
}

public static void SetField<TSource>(object obj, Action<TSource> execute)
{
using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession();
var db = session.Get<TSource>(obj);
execute(db);
session.Update(db);
}
 
Last edited:
Joined
Jul 7, 2004
Messages
779
Reaction score
212
Yeah yesterday just found it out, im already trying to understand the code :)

Looks like with version 2.4.7.86197 again lot of packet structure changed.
Able to login, create char and warp but hitting several monster instantly desync the client..

I'm us some client version it's work perfect.

Desync? Mb you talk about actor animation? It's fix today.
 
Joined
Jul 24, 2011
Messages
806
Reaction score
618
possibly missing ticks. it is insanely heavy to run the animations for some reason. I'll see if I can pinpoint exactly what is causing this.
PapkaHere I think it's the one we talked about yesterday, where the game kinda freezes sometimes when animations are on...

Yeah exactly this
the monsters freeze on hit, and also waypoints and everything else in the client is like you disconnecting.. you can move but can't hit or interact with anything

This with the today's community branch src...
 
Back
Top