The main repository for the Darkflame Universe Server Emulator project.

Darkflame Universe

Introduction

Darkflame Universe (DLU) is a server emulator for LEGO® Universe. Development started in 2013 and has gone through multiple iterations and is now able to present a near perfect emulation of the game server.

LEGO® Universe

Developed by NetDevil and The LEGO Group, LEGO® Universe launched in October 2010 and ceased operation in January 2012.

License

Darkflame Universe is licensed under AGPLv3, please read LICENSE. Some important points:

  • We are not liable for anything you do with the code
  • The code comes without any warranty what so ever
  • You must disclose any changes you make to the code when you distribute it
  • Hosting a server for others counts as distribution

Disclaimers

Setup difficulty

Throughout the entire build and setup process a level of familiarity with the command line and preferably a Unix-like development environment is greatly advantageous.

Hosting a server

We do not recommend hosting public servers. DLU is intended for small scale deployment, for example within a group of friends. It has not been tested for large scale deployment which comes with additional security risks.

Supply of resource files

Darkflame Universe is a server emulator and does not distribute any LEGO® Universe files. A separate game client is required to setup this server emulator and play the game, which we cannot supply. Users are strongly suggested to refer to the safe checksums listed in the resources tab below when checking if a client will work.

Build

Development of the latest iteration of Darkflame Universe has been done primarily in a Unix-like environment and is where it has been tested and designed for deployment. It is therefore highly recommended that Darkflame Universe be built and deployed using a Unix-like environment for the most streamlined experience.

Prerequisites

Clone the repository

git clone --recursive https://github.com/DarkflameUniverse/DarkflameServer

Python

Some tools utilized to streamline the setup process require Python 3, make sure you have it installed.

Choosing the right version for your client DLU clients identify themselves using a higher version number than the regular live clients out there. This was done make sure that older and incomplete clients wouldn't produce false positive bug reports for us, and because we made bug fixes and new content for the client.

If you're using a DLU client, then you don't need to change anything. But if you're using any other client, you'll have to go into the "CMakeVariables.txt" file and change it to match your client's version. (likely 171022)

Linux builds

Make sure packages like gcc, cmake, and zlib are installed. Depending on the distribution, these packages might already be installed. Note that on systems like Ubuntu, you will need the zlib1g-dev package so that the header files are available.

Build the repository

# Create the build directory, preserving it if it already exists
mkdir -p build
cd build

# Run CMake to generate make files
cmake ..

# Run make to build the project. To build utilizing multiple cores, append `-j` and the amount of cores to utilize, for example `make -j8`
make

MacOS builds

Download precompiled MySQL connector

# Install required tools
brew install boost mysql-connector-c++

# Symlinks for finding the required modules
sudo ln -s /usr/local/mysql-connector-c++/lib64/libmysqlcppconn.dylib /usr/local/mysql-connector-c++/lib64/libmysql.dylib 
sudo ln -s /usr/local/mysql-connector-c++/lib64/libcrypto.1.1.dylib /usr/local/mysql/lib/libcrypto.1.1.dylib

Then follow the Linux build steps (gcc is not required), but before running make, run the following to make sure all the libs are available in the build folder:

sudo ln -s /usr/local/mysql-connector-c++/lib64/libssl.1.1.dylib /path/to/build/folder/libssl.1.1.dylib
sudo ln -s /usr/local/mysql-connector-c++/lib64/libcrypto.1.1.dylib /path/to/build/folder/libcrypto.1.1.dylib

Windows builds (native)

Ensure that you have either the MSVC or the Clang (recommended) compiler installed. You will also need to install CMake.

Build the repository

:: Create the build directory
mkdir build
cd build

:: Run CMake to generate make files
cmake ..

:: Run CMake with build flag to build
cmake --build .

Windows builds (WSL)

This section will go through how to install WSL and building in a Linux environment under Windows. WSL requires Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11.

Open the Command Prompt application with Administrator permissions and run the following:

# Installing Windows Subsystem for Linux
wsl --install

Open the Ubuntu application and run the following:

# Make sure the install is up to date
apt update && apt upgrade

# Make sure the gcc, cmake, and build-essentials are installed
sudo apt install gcc
sudo apt install cmake
sudo apt install build-essential

Follow the Linux instructions

Setting up the environment

Database

Darkflame Universe utilizes a MySQL/MariaDB database for account and character information.

Initial setup can vary drastically based on which operating system or distribution you are running; there are instructions out there for most setups, follow those and come back here when you have a database up and running.

  • Create a database for Darkflame Universe to use
  • Run each SQL file in the order at which they appear here on the database

Resources

LEGO® Universe 1.10.64

This repository does not distribute any LEGO® Universe files. A full install of LEGO® Universe version 1.10.64 (latest) is required to finish setting up Darkflame Universe.

Known good SHA256 checksums of the client:

  • 8f6c7e84eca3bab93232132a88c4ae6f8367227d7eafeaa0ef9c40e86c14edf5 (packed client, rar compressed)
  • c1531bf9401426042e8bab2de04ba1b723042dc01d9907c2635033d417de9e05 (packed client, includes extra locales, rar compressed)
  • 0d862f71eedcadc4494c4358261669721b40b2131101cbd6ef476c5a6ec6775b (unpacked client, includes extra locales, rar compressed)

Known good SHA1 checksum of the DLU client:

  • 91498e09b83ce69f46baf9e521d48f23fe502985 (packed client, zip compressed)

How to generate a SHA256 checksum:

# Replace <file> with the file path to the client

# If on Linux or MacOS
shasum -a 256 <file>

# If on Windows
certutil -hashfile <file> SHA256

Unpacking the client

  • Clone lcdr's utilities repository here
  • Use pkextractor.pyw to unpack the client files if they are not already unpacked

Setup resource directory

  • In the build directory create a res directory if it does not already exist.
  • Copy over or create symlinks from macros, BrickModels, chatplus_en_us.txt, names, and maps in your client res directory to the server build/res directory
  • Unzip the navmeshes here and place them in build/res/maps/navmeshes

Setup locale

  • In the build directory create a locale directory if it does not already exist
  • Copy over or create symlinks from locale.xml in your client locale directory to the build/locale directory

Client database

  • Use fdb_to_sqlite.py in lcdr's utilities on res/cdclient.fdb in the unpacked client to convert the client database to cdclient.sqlite
  • Move and rename cdclient.sqlite into build/res/CDServer.sqlite
  • Run each SQL file in the order at which they appear here on the SQLite database

Configuration

After the server has been built there should be four ini files in the build director: authconfig.ini, chatconfig.ini, masterconfig.ini, and worldconfig.ini. Go through them and fill in the database credentials and configure other settings if necessary.

Verify

Your build directory should now look like this:

  • AuthServer
  • ChatServer
  • MasterServer
  • WorldServer
  • authconfig.ini
  • chatconfig.ini
  • masterconfig.ini
  • worldconfig.ini
  • locale/
    • locale.xml
  • res/
    • CDServer.sqlite
    • chatplus_en_us.txt
    • macros/
      • ...
    • BrickModels/
      • ...
    • maps/
      • navmeshes/
        • ...
      • ...
  • ...

Running the server

If everything has been configured correctly you should now be able to run the MasterServer binary. Darkflame Universe utilizes port numbers under 1024, so under Linux you either have to give the binary network permissions or run it under sudo.

First admin user

Run MasterServer -a to get prompted to create an admin account. This method is only intended for the system administrator as a means to get started, do NOT use this method to create accounts for other users!

Account Manager

Follow the instructions here to setup the DLU account management Python web application. This is the intended way for users to create accounts.

Admin levels

The admin level, or game master level, is specified in the accounts.gm_level column in the MySQL database. Normal players should have this set to 0, which comes with no special privileges. The system administrator will have this set to 9, which comes will all privileges. Admin level 8 should be used to give a player a majority of privileges without the safety critical once.

While a character has a gmlevel of anything but 0, some gameplay behavior will change. When testing gameplay, you should always use a character with a gmlevel of 0.

User guide

A few modifications have to be made to the client.

Client configuration

To connect to a server follow these steps:

  • In the client directory, locate boot.cfg
  • Open it in a text editor and locate where it says AUTHSERVERIP=0:
  • Replace the contents after to : and the following , with what you configured as the server's public facing IP. For example AUTHSERVERIP=0:localhost for locally hosted servers
  • Launch legouniverse.exe, through wine if on a Unix-like operating system

Survival

The client script for the survival minigame has a bug in it which can cause the minigame to not load. To fix this, follow these instructions:

  • Open res/scripts/ai/minigame/survival/l_zone_survival_client.lua
  • Navigate to line 617
  • Change PlayerReady(self) to onPlayerReady(self)
  • Save the file, overriding readonly mode if required

Brick-By-Brick building

Brick-By-Brick building requires PATCHSERVERIP=0: in the boot.cfg to point to a HTTP server which always returns HTTP 404 - Not Found for all requests. This can be achieved by pointing it to localhost while having sudo python -m http.server 80 running in the background.

In-game commands

Here is a summary of the commands available in-game. All commands are prefixed by / and typed in the in-game chat window. Some commands requires admin privileges. Operands within <> are required, operands within () are not. For the full list of in-game commands, please checkout the source file.

Command Usage Description Admin Level Requirement
info /info Displays server info to the user, including where to find the server's source code.
credits /credits Displays the names of the people behind Darkflame Universe.
instance-info /instance-info Displays in the chat the current zone, clone, and instance id.
gmlevel /gmlevel <level> Within the authorized range of levels for the current account, changes the character's game master level to the specified value. This is required to use certain commands.
testmap /testmap <zone> (clone-id) Transfers you to the given zone by id and clone id. 1
ban /ban <username> Bans a user from the server. 4
gmadditem /gmadditem <id> (count) Adds the given item to your inventory by id. 8
spawn /spawn <id> Spawns an object at your location by id. 8
metrics /metrics Prints some information about the server's performance. 8

Credits

Contributors to DLUv3

  • DarwinAnim8or
  • Wincent01
  • Mick
  • averysumner
  • Jon002
  • Jonny
  • Xiphoseer

Research and tools

  • lcdr

Community management

  • Neal

Former contributors

  • TheMachine
  • Matthew
  • Raine
  • Bricknave

Special thanks

  • humanoid24
  • pwjones1969
  • BlasterBuilder for the logo
  • ALL OF THE NETDEVIL AND LEGO TEAMS!
Comments
  • Completely automated docker setup

    Completely automated docker setup

    My final goal is it to have a nearly completely automated setup via docker. The only thing the user should do is specify the client path. Everything else should happen completely automated. From client extraction to database setup and configuration.

  • Aarch64 port

    Aarch64 port

    Summary of changes:

    • added aarch64 defines and checks to raknet library
    • replaced sql connector with mariadb connector cpp
      • Windows will use the prebuilt binaries from the website but can build it from source if desired (with msvc anyway).
      • Some changes to code (like setting the environment variable) were so that installing mariadb connector manually didn't have to be done
    • change in dGame/LeaderboardManager.cpp was because of a compiler error on my system.
    • A few changes because mariadb connector doesn't have asStdString() as part of it's SQLString class

    Tested and compiled on Windows 10 x64 and Raspberry Pi 4 8gb (Pi OS 64 bit)

  • BUILD: Docker setup throws Errors on Windows and Linux

    BUILD: Docker setup throws Errors on Windows and Linux

    Make sure you've done the following:

    Platform

    Other

    Architecture

    ARM

    Error Logs

    There seems to be an issue with the installation of the Darkflame Docker as the command "docker compose up -d --build" throws several Warnings/Errors. After finished installation the command "docker compose exec darkflame /app/MasterServer -a" then throws the Error:

    Error: no such table: ActivityRewards Fatal error -1 Stacktrace: /app/MasterServer[0x414163] /usr/local/lib64/libstdc++.so.6(+0xb10ea)[0x7f15364ce0ea] /usr/local/lib64/libstdc++.so.6(+0xb1155)[0x7f15364ce155] /usr/local/lib64/libstdc++.so.6(+0xb13e8)[0x7f15364ce3e8] /app/MasterServer[0x40a80c] /app/MasterServer[0x43fc97] /app/MasterServer[0x416864] /app/MasterServer[0x41c81f] /app/MasterServer[0x4171f6] /app/MasterServer[0x40bc6d]

    After failing multiple times on Linux i tried using Docker Desktop on Win10 and got the same errors.

    I followed both the README.md, the docker.md and the docker_Windows.md with no luck.

    I listed the Errors/Warnings below in Chronological Order.

    /build/thirdparty/libbcrypt/src/wrapper.c: In function 'crypt_gensalt_ra':
    /build/thirdparty/libbcrypt/src/wrapper.c:257:26: warning: implicit declaration of function 'strdup'; did you mean 'strcmp'? [-Wimplicit-function-declaration]
      257 |                 retval = strdup(retval);
          |                          ^~~~~~
          |                          strcmp
    /build/thirdparty/libbcrypt/src/wrapper.c:257:24: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
      257 |                 retval = strdup(retval);
          |                        ^
    -----------------------------------------------------------------------------------------------------------
    /build/thirdparty/raknet/Source/RakNetTypes.cpp: In member function 'void SystemAddress::SetBinaryAddress(const char*)':
    /build/thirdparty/raknet/Source/RakNetTypes.cpp:132:30: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
      132 |                 IPPart[index]=0;
          |                 ~~~~~~~~~~~~~^~
    /build/thirdparty/raknet/Source/RakNetTypes.cpp:123:22: note: at offset 22 into destination object 'IPPart' of size 22
      123 |                 char IPPart[22];
          |                      ^~~~~~
    -----------------------------------------------------------------------------------------------------------
     
    /build/thirdparty/raknet/Source/RakNetTypes.cpp: In member function 'void SystemAddress::SetBinaryAddress(const char*)':
    /build/thirdparty/raknet/Source/RakNetTypes.cpp:132:30: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
      132 |                 IPPart[index]=0;
          |                 ~~~~~~~~~~~~~^~
    /build/thirdparty/raknet/Source/RakNetTypes.cpp:123:22: note: at offset 22 into destination object 'IPPart' of size 22
      123 |                 char IPPart[22];
          |                      ^~~~~~
    
    /build/thirdparty/raknet/Source/RakString.cpp:16:55: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
       16 | RakString::SharedString RakString::emptyString={0,0,0,"",""};
          |                                                       ^~
    -----------------------------------------------------------------------------------------------------------
    
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp: In member function 'int dtNavMesh::findConnectingPolys(const float*, const float*, const dtMeshTile*, int, dtPolyRef*, float*, int) const':
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:46:34: warning: 'bmax[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       46 |         const float bd = (bmax[1]-bmin[1]) / (bmax[0]-bmin[0]);
          |                          ~~~~~~~~^~~~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:24: note: 'bmax[1]' was declared here
      311 |         float bmin[2], bmax[2];
          |                        ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:52:59: warning: 'bmax[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       52 | template<class T> inline T dtMin(T a, T b) { return a < b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:24: note: 'bmax[0]' was declared here
      311 |         float bmin[2], bmax[2];
          |                        ^~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:46:34: warning: 'bmin[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       46 |         const float bd = (bmax[1]-bmin[1]) / (bmax[0]-bmin[0]);
          |                          ~~~~~~~~^~~~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:15: note: 'bmin[1]' was declared here
      311 |         float bmin[2], bmax[2];
          |               ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:58:59: warning: 'bmin[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       58 | template<class T> inline T dtMax(T a, T b) { return a > b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:15: note: 'bmin[0]' was declared here
      311 |         float bmin[2], bmax[2];
          |               ^~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:44:34: warning: 'amax[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       44 |         const float ad = (amax[1]-amin[1]) / (amax[0]-amin[0]);
          |                          ~~~~~~~~^~~~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:24: note: 'amax[1]' was declared here
      306 |         float amin[2], amax[2];
          |                        ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:52:59: warning: 'amax[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       52 | template<class T> inline T dtMin(T a, T b) { return a < b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:24: note: 'amax[0]' was declared here
      306 |         float amin[2], amax[2];
          |                        ^~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:45:21: warning: 'amin[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       45 |         const float ak = amin[1] - ad*amin[0];
          |                     ^~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:15: note: 'amin[1]' was declared here
      306 |         float amin[2], amax[2];
          |               ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:58:59: warning: 'amin[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       58 | template<class T> inline T dtMax(T a, T b) { return a > b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:15: note: 'amin[0]' was declared here
      306 |         float amin[2], amax[2];
          |               ^~~~
    -----------------------------------------------------------------------------------------------------------
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp: In member function 'int dtNavMesh::findConnectingPolys(const float*, const float*, const dtMeshTile*, int, dtPolyRef*, float*, int) const':
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:46:34: warning: 'bmax[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       46 |         const float bd = (bmax[1]-bmin[1]) / (bmax[0]-bmin[0]);
          |                          ~~~~~~~~^~~~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:24: note: 'bmax[1]' was declared here
      311 |         float bmin[2], bmax[2];
          |                        ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:52:59: warning: 'bmax[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       52 | template<class T> inline T dtMin(T a, T b) { return a < b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:24: note: 'bmax[0]' was declared here
      311 |         float bmin[2], bmax[2];
          |                        ^~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:46:34: warning: 'bmin[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       46 |         const float bd = (bmax[1]-bmin[1]) / (bmax[0]-bmin[0]);
          |                          ~~~~~~~~^~~~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:15: note: 'bmin[1]' was declared here
      311 |         float bmin[2], bmax[2];
          |               ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:58:59: warning: 'bmin[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       58 | template<class T> inline T dtMax(T a, T b) { return a > b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:311:15: note: 'bmin[0]' was declared here
      311 |         float bmin[2], bmax[2];
          |               ^~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:44:34: warning: 'amax[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       44 |         const float ad = (amax[1]-amin[1]) / (amax[0]-amin[0]);
          |                          ~~~~~~~~^~~~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:24: note: 'amax[1]' was declared here
      306 |         float amin[2], amax[2];
          |                        ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:52:59: warning: 'amax[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       52 | template<class T> inline T dtMin(T a, T b) { return a < b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:24: note: 'amax[0]' was declared here
      306 |         float amin[2], amax[2];
          |                        ^~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:45:21: warning: 'amin[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       45 |         const float ak = amin[1] - ad*amin[0];
          |                     ^~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:15: note: 'amin[1]' was declared here
      306 |         float amin[2], amax[2];
          |               ^~~~
    In file included from /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:24:
    /build/thirdparty/recastnavigation/Detour/Include/DetourCommon.h:58:59: warning: 'amin[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
       58 | template<class T> inline T dtMax(T a, T b) { return a > b ? a : b; }
          |                                                     ~~~~~~^~~~~~~
    /build/thirdparty/recastnavigation/Detour/Source/DetourNavMesh.cpp:306:15: note: 'amin[0]' was declared here
      306 |         float amin[2], amax[2];
          |               ^~~~
    -----------------------------------------------------------------------------------------------------------
    /build/thirdparty/SQLite/sqlite3.c: In function 'sqlite3SelectNew':
    /build/thirdparty/SQLite/sqlite3.c:113013:10: warning: function may return address of local variable [-Wreturn-local-addr]
    113013 |   return pNew;
           |          ^~~~
    /build/thirdparty/SQLite/sqlite3.c:112973:10: note: declared here
    112973 |   Select standin;
           |          ^~~~~~~
    -----------------------------------------------------------------------------------------------------------
    /build/thirdparty/SQLite/CppSQLite3.cpp: In function 'int sqlite3_encode_binary(const unsigned char*, int, unsigned char*)':
    /build/thirdparty/SQLite/CppSQLite3.cpp:1549:20: warning: 'e' may be used uninitialized in this function [-Wmaybe-uninitialized]
     1549 |     int c = (in[i] - e)&0xff;
          |             ~~~~~~~^~~~
    -----------------------------------------------------------------------------------------------------------
    /build/thirdparty/SQLite/CppSQLite3.cpp: In function 'int sqlite3_encode_binary(const unsigned char*, int, unsigned char*)':
    /build/thirdparty/SQLite/CppSQLite3.cpp:1549:20: warning: 'e' may be used uninitialized in this function [-Wmaybe-uninitialized]
     1549 |     int c = (in[i] - e)&0xff;
          |             ~~~~~~~^~~~
    -----------------------------------------------------------------------------------------------------------
    
  • Add database in Docker for easy deployment

    Add database in Docker for easy deployment

    Description

    This adds an effortless way to deploy the needed database for the server. It wraps up MariaDB in Docker and reads from a .env file for configuration. This way you only need Docker available to be able to run the database.

  • Added Comprehensive Slash Command Documentation

    Added Comprehensive Slash Command Documentation

    This PR takes the original command documentation from the README and adds comprehensive details for each command available in game.

    This creates a new file /docs/Commands.md. All available commands are split up by their use — general commands, moderation, server operation, and development. They are then sorted by their required permission level and then by alphabetical order.

    This detailed list of commands should help both server operators run their servers and contributors get started with development.

    This PR also pioneers a common practice among many open source projects, where markdown documentation is placed in a top level docs folder. In this folder we can continue to contribute markdown documentation in order to help with server setup and operation, as well as development and contributions. Documentation here would be more specific to Darkflame Universe and its development than documentation found at https://lu-dev.net.

  • BUG: Forbidden Valley Wind Lift Not Working

    BUG: Forbidden Valley Wind Lift Not Working

    I am having the same issues as people in #72 and #63. The Forbidden Valley wind lift is not working and the gate is not stopping players. I am running the server on Linux.

  • Added Frostburgh into Starbase Interface

    Added Frostburgh into Starbase Interface

    This adds a way for players to launch themselves to Frostburgh without needing to TP (assuming the user has fixed Frostburgh on their CDServer.sqlite), it adds an entry to the LUP interface (in Starbase 3001).

  • Make loot accurate to the loot drop rates during live.

    Make loot accurate to the loot drop rates during live.

    This PR is mostly made of repaired code from @averysumner that was never finished and has now been reimplemented.

    I have no idea of knowing if these drops are accurate however Krysto (a prominent community member, who knows much more about loot than I) had spent a good amount of time with this build testing the drop rates.

  • Random Disconnects

    Random Disconnects

    Fatal error 11 Stacktrace: ./WorldServer(+0xe4b2f)[0x5622a5d12b2f] /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7fee3321f3c0] /lib/x86_64-linux-gnu/libc.so.6(+0x16e052)[0x7fee32e31052] ./WorldServer(+0x1cb8d3)[0x5622a5df98d3] ./WorldServer(+0x1be36c)[0x5622a5dec36c] ./WorldServer(+0x1cffbe)[0x5622a5dfdfbe] ./WorldServer(+0xcd3db)[0x5622a5cfb3db] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7fee32cea0b3] ./WorldServer(+0xdc29e)[0x5622a5d0a29e] double free or corruption (out)

    Fatal error 6 Stacktrace: ./WorldServer(+0xe4b2f)[0x5622a5d12b2f] /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7fee3321f3c0] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7fee32d0918b] /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7fee32ce8859] /lib/x86_64-linux-gnu/libc.so.6(+0x903ee)[0x7fee32d533ee] /lib/x86_64-linux-gnu/libc.so.6(+0x9847c)[0x7fee32d5b47c] /lib/x86_64-linux-gnu/libc.so.6(+0x9a120)[0x7fee32d5d120] /home/adminpie/Desktop/LegoU/DarkflameServerTest/DarkflameServer/build/_deps/mysql-src/lib64/libmysqlcppconn.so.9(_ZNSs7reserveEm+0x89)[0x7fee33374209] /lib/x86_64-linux-gnu/libstdc++.so.6(_ZNSs6appendERKSs+0x3b)[0x7fee330f542b] ./WorldServer(+0xe4bb9)[0x5622a5d12bb9]

    Fatal error 11 Stacktrace: ./WorldServer(+0xe4b2f)[0x5622a5d12b2f] /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7fee3321f3c0] ./WorldServer(+0x405340)[0x5622a6033340] ./WorldServer(+0x406a00)[0x5622a6034a00] /lib/x86_64-linux-gnu/libpthread.so.0(+0x9609)[0x7fee33213609] /lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7fee32de5293] [07-12-21 17:26:31] [BehaviorContext]: Failed to find behavior sync entry with sync id (283)!

    [07-12-21 17:35:39] [ActivityManager]: Executing timer 'PlaySpawnSound' Fatal error 11 Stacktrace: ./WorldServer(+0xe4b2f)[0x55bdfb4d2b2f] /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7f42fa1723c0] /lib/x86_64-linux-gnu/libc.so.6(+0x16e048)[0x7f42f9d84048] ./WorldServer(+0x1cb8d3)[0x55bdfb5b98d3] ./WorldServer(+0x1be36c)[0x55bdfb5ac36c] ./WorldServer(+0x1cffbe)[0x55bdfb5bdfbe] ./WorldServer(+0xcd3db)[0x55bdfb4bb3db] /lib/x86_64-linux-gnu/libc.so.6(libc_start_main+0xf3)[0x7f42f9c3d0b3] ./WorldServer(+0xdc29e)[0x55bdfb4ca29e] malloc(): corrupted top size

    Fatal error 6 Stacktrace: ./WorldServer(+0xe4b2f)[0x55bdfb4d2b2f] /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7f42fa1723c0] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7f42f9c5c18b] /lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7f42f9c3b859] /lib/x86_64-linux-gnu/libc.so.6(+0x903ee)[0x7f42f9ca63ee] /lib/x86_64-linux-gnu/libc.so.6(+0x9847c)[0x7f42f9cae47c] /lib/x86_64-linux-gnu/libc.so.6(+0x9b83a)[0x7f42f9cb183a] /lib/x86_64-linux-gnu/libc.so.6(libc_malloc+0x1b9)[0x7f42f9cb3419] /lib/x86_64-linux-gnu/libc.so.6(_IO_file_doallocate+0x94)[0x7f42f9c9ae84] /lib/x86_64-linux-gnu/libc.so.6(_IO_doallocbuf+0x50)[0x7f42f9cab050] munmap_chunk(): invalid pointer Fatal error 6 Stacktrace: ./WorldServer(+0xe4b2f)[0x55bdfb4d2b2f]

  • Chat not working

    Chat not working

    Tested on a Vultr VPS with all ports open and a home server OS: Ubuntu 20.04 Database: Mysql 8.0.27 and MariaDB 10.7.1 on docker

    Problem: Local chat can not be used, any messages without a slash typed in show a loading button and then a red exclamation mark. Level ups do not show in the chat box either. Only slash commands that do work are /info and /credits, all others do nothing but do not show the red exclamation. Tested using gm levels 0, 1, 9. Others who managed to compile report the same issue but not everyone.

  • BUG: Stuck at

    BUG: Stuck at "Escape the Venture Explorer"

    Make sure you've done the following:

    • [X] I have checked that this issue has not already been reported.

    • [X] I have validated that this issue is not a syntax error of either MySQL or SQLite.

    • [X] I have pulled the latest version of the main branch of DarkflameServer and have confirmed that the issue exists there.

    Issue Description

    Until the conclusion of the mission everything seems OK. Built the rocket, selected the rocket launch pad, rocket animation OK, and then nothing... the game hangs at this point:

    image

    If I force client quit and re-enter, it restarts from the moment I have to activate the escape pod, rocket animation and hang again.

    Reproduction steps

    • Complete all missions on Venture Explorer
    • Build the rocket
    • Go to launch ramp and use the rocket

    Expected Behavior

    Leave the base and going to Avant garderns

    Environment

    • I have installed the server on my private local server (Ubuntu LTS 20.04).
    • Client is: 0d862f71eedcadc4494c4358261669721b40b2131101cbd6ef476c5a6ec6775b (unpacked client, includes extra locales, rar compressed)
    • DarkflameUniverse with fresh pull

    This is the output of the server:

    `[23-01-22 14:18:05] [AuthPackets] Received client version: 171022

    [23-01-22 14:18:05] [WorldServer] User User authenticated with correct key.

    [23-01-22 14:18:05] [Character] Loaded xmlData for character User (2)!

    [23-01-22 14:18:10] [MasterServer] Received zone transfer req

    [23-01-22 14:18:10] [InstanceManager] Searching for an instance for mapID 1000/0

    [23-01-22 14:18:10] [MasterServer] Instance: 0/0/0 -> 0

    [23-01-22 14:18:10] [MasterServer] Instance: 1100/0/2 -> 0

    [23-01-22 14:18:10] [MasterServer] Instance: 1000/0/3 -> 1

    [23-01-22 14:18:10] [MasterServer] Responding to transfer request 4 for zone 1000 0

    [23-01-22 14:18:10] [MasterServer] Sent affirmation request 4 to 1000/0

    [23-01-22 14:18:10] [MasterServer] Got affirmation request of transfer 4

    [23-01-22 14:18:10] [MasterServer] Got affirmation of transfer 4

    [23-01-22 14:18:10] [MasterServer] Affirmation complete 4

    [23-01-22 14:18:10] [UserManager] Transferring User to Zone 1000 (Instance 3 | Clone 0 | Mythran Shift: false) with IP 192.168.0.10 and Port 3003

    [23-01-22 14:18:10] [UserManager] Deleted user 1

    [23-01-22 14:18:10] [AuthPackets] Received client version: 171022

    [23-01-22 14:18:10] [WorldServer] User User authenticated with correct key.

    [23-01-22 14:18:10] [Character] Loaded xmlData for character User (2)!

    [23-01-22 14:18:10] [User] Loaded 2 as it is the last used char

    [23-01-22 14:18:18] [WorldServer] Received level load complete from user.

    [23-01-22 14:18:18] [WorldPackets] Sent CreateCharacter for ID: 1152921508901814274

    [23-01-22 14:18:18] [ControllablePhysicsComponent] Using patch to load minifig physics

    [23-01-22 14:18:18] [PlayerContainer] Added user: User (1152921508901814274), zone: 1000

    [23-01-22 14:18:18] [ChatServer] Asked for ignore list, but is unimplemented right now.

    [23-01-22 14:18:20] [GameMessageHandler] Player User (1152921508901814274) loaded.

    [23-01-22 14:22:29] [TotalTimePlayed] Time since last save: 251

    [23-01-22 14:22:29] [MasterServer] Prepping zone 1100

    [23-01-22 14:22:29] [InstanceManager] Searching for an instance for mapID 1100/0

    [23-01-22 14:22:29] [Character] Saved character to Database in: 0.115481s

    [23-01-22 14:22:29] [GameMessages] Trade canceled from (1152921508901814274)

    [23-01-22 14:22:38] [FireEventServerSide] Player 1152921508901814274 has requested zone transfer to (1100, 0).

    [23-01-22 14:22:38] [HandlePacket] Unknown world packet received: 32

    [23-01-22 14:22:38] [MasterServer] Received zone transfer req

    [23-01-22 14:22:38] [InstanceManager] Searching for an instance for mapID 1100/0

    [23-01-22 14:22:38] [MasterServer] Instance: 0/0/0 -> 0

    [23-01-22 14:22:38] [MasterServer] Instance: 1100/0/2 -> 1

    [23-01-22 14:22:38] [MasterServer] Instance: 1000/0/3 -> 0

    [23-01-22 14:22:38] [MasterServer] Server not ready, adding pending request 3 1100 0`

  • Address Brick-By-Brick builds not properly saving

    Address Brick-By-Brick builds not properly saving

    Fixes #654 Fixes #190

    This PR fixes large Brick-By-Brick (hereafter referred to as B3) models not saving due to B3 models being sent in a compressed SD0 format and not just a Zlib compressed format. Since we only ever use the compressed version when communicating with the client, there is no reason to de-compress concatenate the sd0 chunks, and re-compress them. Hence this PR makes it so we instead just store the full sd0 the client sends so we can send it to other clients as they request them. In the future we will need to de-compress the sd0 in order to normalize the position of the model, but this fixes the core functionality of B3 where you couldn't make big models at all.

    • [ ] The second change necessary here is a regression fix for all previous models. Since we are removing the SD0 header writing, it is necessary to include a command line argument in order to fix the old models, since this update will only ever need to be run once, but we need to de-compress the current Zlib stored in the database to see if its actually valid first as before this PR, large models would not save all their chunks. It is hence necessary to parse all of the models, check if they are valid lxfml, and if so just prepend the SD0 header and chunk size. If it is not valid lxfml the model will be deleted from the database since models that saved broken lxfml would cause B3 to break entirely on the client and none would render at all.

    Tested building big and small models alike as a Civilian player. All models saved and were able to be loaded properly when a player visited the property, including models that edged the maximum lxfml size allowed by Civilians.

  • BUG: Most Avant Gardens Survival enemies do not aggro properly

    BUG: Most Avant Gardens Survival enemies do not aggro properly

    Make sure you've done the following:

    • [X] I have checked that this issue has not already been reported.

    • [X] I have validated that this issue is not a syntax error of either MySQL or SQLite.

    • [X] I have pulled the latest version of the main branch of DarkflameServer and have confirmed that the issue exists there.

    DarkflameServer Version

    d626ac1

    Issue Description

    With the exception of Stromling Mechs, AGS enemies don't aggro from afar, rather they just pile up in the corners where they spawn.

    https://youtu.be/1-1JsU2PjZY?t=547

    Reproduction Steps

    play ags

    Expected Behavior

    https://www.youtube.com/watch?v=iWe3KZv2TJE&list=PL9EFB8500E625ADC7&index=4&ab_channel=jamessterV2

    enemies should aggro pretty much from the other side of the map.

    Environment

    ubuntu server

  • BUG: Some triggers in Nimbus Station and Forbidden Valley do not work

    BUG: Some triggers in Nimbus Station and Forbidden Valley do not work

    Make sure you've done the following:

    • [X] I have checked that this issue has not already been reported.

    • [X] I have validated that this issue is not a syntax error of either MySQL or SQLite.

    • [X] I have pulled the latest version of the main branch of DarkflameServer and have confirmed that the issue exists there.

    DarkflameServer Version

    All

    Issue Description

    Players do not take damage and are unaffected by some triggers, notably the "castSkill" and "repelObject" triggers. There may be others but I am reporting what I know on the issue

    Reproduction Steps

    1. Step into a torch in Nimbus Station leading to Forbidden Valley or the maelstrom gates that spawn the horsemen.
    2. Observe that the player does not take damage when they should

    Expected Behavior

    The player takes damage

    Environment

    All

  • BUG: Taking hits forces you out of Pirate-only swing quickbuild animation

    BUG: Taking hits forces you out of Pirate-only swing quickbuild animation

    Make sure you've done the following:

    • [X] I have checked that this issue has not already been reported.

    • [X] I have validated that this issue is not a syntax error of either MySQL or SQLite.

    • [X] I have pulled the latest version of the main branch of DarkflameServer and have confirmed that the issue exists there.

    DarkflameServer Version

    d2b05a1

    Issue Description

    When hit after building a pirate only quickbuild, it forces the character out of the animation of swinging, however you are still sent to the top of the cliff.

    https://user-images.githubusercontent.com/48499798/182682367-5e38e816-8050-4397-a96e-20a29ef1ab48.mp4

    Reproduction Steps

    go to the pirate only quickbuild in gnarled forest near the elephant escarpment where the flags are on the cliff, and with the stromling pirates aggroed, build the quickbuild.

    Expected Behavior

    There is footage here https://youtu.be/fII2nP02_P0?t=958 but I am unsure if they didn't aggro over there in live or they were just distracted by the other player. Even if they did go there, my assumption is that you would get fully knocked out of the swing, or at least make the swing without being knocked out of the animation.

    Environment

    ubuntu server

Step-by-step guide through the abstract and complex universe of Fragment Shaders.

The Book of Shaders by Patricio Gonzalez Vivo and Jen Lowe This is a gentle step-by-step guide through the abstract and complex universe of Fragment S

Aug 7, 2022
A conda-smithy repository for qt-main.

About qt-main Home: http://qt.io Package license: LGPL-3.0-only Feedstock license: BSD-3-Clause Summary: Qt is a cross-platform application and UI fra

Dec 17, 2021
Mitsuba renderer main repository

Mitsuba — Physically Based Renderer http://mitsuba-renderer.org/ About Mitsuba is a research-oriented rendering system in the style of PBRT, from whic

Aug 10, 2022
This project contains the main ROS 2 packages of Xiaomi CyberDog®.
This project contains the main ROS 2 packages of Xiaomi CyberDog®.

Xiaomi CyberDog ROS 2 文档包含简体中文和English 简介 - Introduction 本项目包含小米铁蛋®的ROS 2主要功能包. This project contains the main ROS 2 packages of Xiaomi CyberDog®. 基本信

Aug 9, 2022
OpenBK7231T project - main application

Building Clone the SDK repo to a folder, e.g. bk7231sdk/ Clone the app repo into bk7231sdk/apps/ - e.g. bk7231sdk\apps\openbk7231app On Windows, start

Aug 13, 2022
OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++.
OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++.

OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++. It is a fork of the OTServBR-Global project. To connect to the server and to take a stable experience, you can use our own client or tibia client and if you want to edit something, check our customized tools.

Aug 14, 2022
EarlyBird process hollowing technique (BOF) - Spawns a process in a suspended state, inject shellcode, hijack main thread with APC, and execute shellcode
EarlyBird process hollowing technique (BOF) - Spawns a process in a suspended state, inject shellcode, hijack main thread with APC, and execute shellcode

HOLLOW - Cobalt Strike BOF Authors: Bobby Cooke (@0xBoku) Justin Hamilton (@JTHam0) Octavio Paguaga (@OakTree__) Matt Kingstone (@n00bRage) Beacon Obj

Aug 12, 2022
An operating system. Its main goal? Readable code, developer experience and documentation.

OS Dependencies Required for development. sudo apt install build-essential nasm grub-pc-bin grub-common xorriso Required for building cross-compiler.

Jun 20, 2022
A commented version of my libft, with details about how my algorithms work and simple main functions to compile them.
A commented version of my libft, with details about how my algorithms work and simple main functions to compile them.

LIBFT COMMENTED VERSION : ?? PART I : ?? FT_STRCHR : ?? PART II : ?? FT_SUBSTR : /* * DEFINITION : * CREATES A SUBSTRING FROM A STRING WITH PREDETER

Nov 11, 2021
Half-Life : Extended main branch for developing purposes
Half-Life : Extended main branch for developing purposes

Half Life : Extended SDK Source Code of Half Life : Extended as a open source modbase for everyone publicly, make your own mod with alot of features e

Jun 21, 2022
PRINT++ is a simple, open source print library for C++, the main usage of PRINT++ is printing out "log" messages
PRINT++ is a simple, open source print library for C++, the main usage of PRINT++ is printing out

note that for now, print++ is using std::cout. In future it will be using own print function. Windows version can be unstable That library is in alpha

Jan 23, 2022
This repository is a study repository to implement the LCD 16x2 in my project below
 This repository is a study repository to implement the LCD 16x2 in my project below

This repository is a study repository to implement the LCD 16x2 in my project below. Index ?? About ?? Functionalities ?? Deploy ?? Requirements ?? Pi

Jun 7, 2022
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more

Archived cquery is no longer under development. clangd and ccls are both good replacements. cquery cquery is a highly-scalable, low-latency language s

Aug 11, 2022
Rp-pppoe - Public repository for RP-PPPoE PPPoE client and server software

RP-PPPoE - a PPPoE client, relay and server for Linux RP-PPPoE is a PPPoE client, relay and server for Linux. It can run completely in user-mode or us

Aug 12, 2022
This repository is for everyone for Hacktoberfest 2021. Anyone can contribute anything for your Swags (T- Shirt), must be relevant that can add some value to this repository.
This repository is for everyone for Hacktoberfest 2021. Anyone can contribute anything for your Swags (T- Shirt), must be relevant that can add some value to this repository.

Hacktober Fest 2021 For Everyone! Upload Projects or Different Types of Programs in any Language Use this project to make your first contribution to a

Dec 21, 2021
This Repository is created to help fellow coders learn open source contributions. This Repository is created for Hacktoberfest 2021

Hacktoberfest 2021 Follow the README below to get started! This Repository is created to help fellow coders learn open source contributions This Repos

Aug 11, 2022
Public repository for Beerbox project.

Beerbox v1.0 - Public Repository This is a public repository for an "IoT Project"-course project called Beerbox. Difference between the private and pu

Dec 23, 2021
A repository containing our learnings and implementations for the project "Anchor: The Docker Clone" under IEEE-NITK

Anchor: The Docker Clone A repository containing our learnings and implementations for the project "Anchor: The Docker Clone" under IEEE-NITK Currentl

Feb 7, 2022