The main repository for the Darkflame Universe Server Emulator project.

Overview

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.

    S-waiting-on-decision 
    opened by TheNoim 95
  • 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 S-waiting-on-author 
    opened by jumpy-badger 89
  • BUG: Saving Brick-By-Brick models kicks users to the login screen

    BUG: Saving Brick-By-Brick models kicks users to the login screen

    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

    1789ec7

    Issue Description

    This has happened for quite some time now (for months, but it was working fine at one point), but only today have I found out that it's not just me. After placing some bricks in brick building mode on a property and pressing save, it shows the loading bar for less than 2 seconds before booting the user to the login screen. Requests for the models were shown on the HTTP server hosted locally but the instance crashes before the server is able to save the models, so they don't ever load in on a relog. Tried it on several characters with no success, although existing models do load as usual. I wanted to run the command to fix broken models again but I couldn't find the exact command anywhere on GitHub.

    Here are the logs for the most recent crash. WorldServer_1151_4_1672805355.log crash_World_314332.log

    Reproduction Steps

    On a property, place any amount of bricks in brick building mode and press the place models arrow in the corner of the screen. (With the HTTP python script running, and patch/ugc server ip set to localhost)

    Expected Behavior

    Brick models should save to the server without crashing, as they once did.

    Environment

    ubuntu server

    bug P-low 
    opened by MustacheMan2 40
  • 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;
          |             ~~~~~~~^~~~
    -----------------------------------------------------------------------------------------------------------
    
    build P-misconfiguration 
    opened by DasRaschloch 40
  • 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.

    opened by jgkawell 33
  • 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.

    docs 
    opened by DrOverbuild 27
  • 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.

    bug P-misconfiguration A-game 
    opened by Phoenyx11 24
  • 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).

    opened by PyEddy 23
  • 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.

    opened by Jettford 23
  • 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]

    bug P-high 
    opened by IAmVolvic 22
  • 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.

    opened by basedx32 21
  • ENH: Add config option for charging property rent

    ENH: Add config option for charging property rent

    Is your feature request related to a problem?

    Not sure how many people would care for this, but if the server is to be as live accurate as possible, then there should be an option to enable monthly rent being charged to players who own properties besides Block Yard. Prices varied based on the property in live, but Block Yard was free for everyone. Not sure what happened if the player was out of funds, but I would assume the property would revert to its original state.

    Describe the solution you'd like

    An option in sharedconfig.ini for enabling or disabling this feature, possibly with additional values for how much money the admin wants to charge.

    Repository breaking implications

    No response

    Describe alternatives you've considered

    No response

    Additional context

    No response

    enhancement P-Fixer 
    opened by MustacheMan2 1
  • Further implement Property Behavior parsing

    Further implement Property Behavior parsing

    The goal here is to implement a robust, modular base class to be used for the implementation of behaviors such that clutter is reduced and very few modifications would be needed to maintain the system in the future.

    • [x] Change the name of BEHAVIORSTATE and STRIPID to be BehaviorState and StripId to follow our current camelCase naming conventions
    • [x] Implement a base class for all actions
    • [x] Implement a way to serialize this data
    • [ ] Implement a low cost way to allow each BehaviorBlock access to its default values.
    • [x] Implement a way to know which base object type to create (likely going to use a map to determine the template typing)
    • [ ] Update ControlBehaviors.cpp to represent the new classes
    • [ ] Implement tests so this can all be tested without needing to do a full implementation of behaviors
    opened by EmosewaMC 0
  • ENH: Remove need to install 3 different packages to install new version of CMake for WSL version 20 and below.

    ENH: Remove need to install 3 different packages to install new version of CMake for WSL version 20 and below.

    Is your feature request related to a problem?

    I've experienced the gripe of downloading 1000 packages to do one thing. We should not be recommending users install more packages just for a more generic command. However I am not knowledgeable in how to do so safely and easily at this time

    Describe the solution you'd like

    Remove the need for the packages, just add the CMake repository to the applists

    Repository breaking implications

    No response

    Describe alternatives you've considered

    No response

    Additional context

    No response

    enhancement P-Fixer 
    opened by EmosewaMC 0
  • Improve Interrupt Behavior

    Improve Interrupt Behavior

    The motivation for this PR is to improve stuns so we dont just blanket stun all behaviors of an entity, but rather only behaviors that should be interrupted and that are not able to be blocked. The first unknown definition comes from a GM call in the client to check immunity and if that is true, write 1 otherwise write 0. The same goes for the second unknown. This was the isBlocking flag as the client does a GetStatus check and if they are blocking and this behavior can interrupt blocks, interrupt the block and write 0, otherwise write 1. The last bit is always a zero in my testing and is always written and I believe to be apart of a deprecated serialization system for the behavior in that it used to serialize what skillUIds were interrupted, but the client never logs this information and it always seems to be false. There is only so much I can think of to test, so if you have special test cases where currently interrupts dont work that this may fix, let me know. Otherwise all functionality appears to be good, if not a bit better on the surface.

    opened by EmosewaMC 1
  • BUG: Some everlasting items replenish double the intended stats

    BUG: Some everlasting items replenish double the intended stats

    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

    675cf1d

    Issue Description

    When using an everlasting items that replenish stats such as Thumpin' Bass or Flowin' MC, the replenishment is double of what is intended.

    Reproduction Steps

    Use an everlasting item that replenishes stats

    Expected Behavior

    The items should be replenishing the proper amount.

    Environment

    ubuntu server

    bug P-low 
    opened by MustacheMan2 0
Releases(v1.0)
  • v1.0(Dec 5, 2021)

    This is our first public release for our game's server code! We spent a lot of our spare time making this a reality and making sure it would work for our needs. There are a lot of things that we could have and wanted to improve; but there's no point for us to keep the source hidden anymore.

    We hope you all enjoy tinkering with the source, and experiencing the game once more :)

    Per aspera ad astra! -The DLU Team.

    Source code(tar.gz)
    Source code(zip)
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

Patricio Gonzalez Vivo 4.9k Jan 2, 2023
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

conda-forge 4 Dec 15, 2022
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

Mitsuba Physically Based Renderer 924 Dec 27, 2022
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®. 基本信

null 383 Dec 31, 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

null 428 Jan 9, 2023
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.

OpenTibiaBR 104 Dec 28, 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. Index ?? About ?? Functionalities ?? Deploy ?? Requirements ?? Pi

Rickelme Dias 3 Jun 7, 2022
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

Bobby Cooke 203 Dec 20, 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.

Stijn Rogiest 1 Nov 15, 2022
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

Abdessamad Laamimi 1 Nov 11, 2021
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

Bacontsu 15 Dec 12, 2022
PRINT++ is a simple, open source print library for C++, the main usage of PRINT++ is printing out "log" messages

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

Ksawery 3 Jan 23, 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

Jacob Dufault 2.3k Jan 2, 2023
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

Dianne Skoll 22 Dec 21, 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.

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

Mahesh Jain 174 Dec 27, 2022
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

Somesh Debnath 6 Oct 24, 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

null 2 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

Rakshita Varadarajan 1 Feb 7, 2022