Files
DarkflameServer/resources/sharedconfig.ini
Aaron Kimbrell 9f29f65686 feat(ugc): answer the client's UGC manifest requests without 3D services
With UGCUSE3DSERVICES=7:0 (the client's default) the client asks its world for
a blueprint file's MD5 and size (REQUEST_UGC_MANIFEST_INFO, world 27) and then
downloads BrickModels/UserMade/<id % 1000>/<id>.<ext>.sd0. Layouts checked in
the 1.10.64 client: the request is a u64 blueprint id and a u8 resource type;
the answer (UGC_MANIFEST_RESPONSE, client 60) repeats them and adds a u8 valid,
the u32 size and the 16 byte MD5 of the inflated file, 37 bytes after the 0x53
exactly or the client drops it.

- dNet: WorldPackets::RequestUgcManifestInfo, ClientPackets::UgcManifestResponse
  (eUgcResourceType), with byte tests against the client's layouts.
- Database: ugc_file_checksums (per model or module combination and file) and
  ugc_modular_build.combination_id (migrations 89 / 72), GetUgcFileChecksum
  looks a blueprint up as a model, else as a build through its combination.
- UGC server: every download is also written as .sd0 (Sd0::Compress); workers
  hand the checksums back and the main thread stores them; old items get their
  sd0 icon and checksum, and builds their combination id, once at start-up, a
  few per tick; serves <dir>/BrickModels/UserMade/<bucket>/<id>.<ext>.sd0 under
  client_path, /<folder>/UserBrickModels and the root (.hkx 404).
- World: UgcManifest answers on the main thread with one indexed query per
  request; files not made yet are answered when they are (looked at again
  every 5 seconds), and a model in its quiet period is made right away. No
  worker threads, HTTP or file reads in the world.

Off by default (ugc_manifest=0): checked in game, the client then downloads
from http://127.0.0.1:80/lwoclient/UserBrickModels/ whatever its boot.cfg says
and logs the player out when it can't connect, so icons need the UGC server on
port 80 of each player's machine. docs/UgcServer.md has the details.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 17:47:38 -05:00

102 lines
3.7 KiB
INI

# MySQL connection info:
mysql_host=
mysql_database=
mysql_username=
mysql_password=
# 0 or 1, should log to console
log_to_console=1
# 0 or 1, should log debug (developer only) statements to console for debugging, not needed for normal operation
log_debug_statements=0
# The public facing IP address. Can be 'localhost' for locally hosted servers
external_ip=localhost
# The local IPv4 address every server (auth, chat, master, world and the dashboard's
# connection to master) listens on, for machines with more than one network interface.
# Empty (the default) or 0.0.0.0 listens on all interfaces; localhost means 127.0.0.1.
# This only changes where the servers listen: players are still sent external_ip, so
# use it when the public address isn't one this machine can bind to (NAT, a proxy).
# The servers refuse to start if this isn't an IPv4 address.
bind_ip=
# 0 or 1, should not compile chat hash map to file
dont_generate_dcf=0
# How many clients can be connected to the server at once
max_clients=999
# Where to put crashlogs
dump_folder=
# The location of the client
# Either the folder with /res or with /client and /versions
client_location=
# The maximum outgoing bandwidth in bits. If your clients are having
# issues with enemies taking a while to catch up to them, increse this value.
# Empty or 0 means no limit
maximum_outgoing_bandwidth=0
# The Maximum Translation Unit (MTU) size for packets. If players are
# getting stuck at 55% on the loading screen, lower this number to
# reduce the chances of packet loss. This value only has an effect
# from 512 <= maximum_mtu_size <= 1492 so make sure to keep this
# value within that range.
maximum_mtu_size=1228
# The client network version to allow to connect to this server.
# Client's that do not match this value will be kicked from the server.
# If you are using a Darkflame Universe client, set this value to 171023.
# This cannot just be any arbitrary number. This has to match the same value that is in your client.
# If you do not know what this value is, default it to 171022.
client_net_version=171022
# Turn to 0 to default teams to use the live accurate Shared Loot (0) by default as opposed to Free for All (1)
# This is used in both Chat and World servers.
default_team_loot=0
# event gating for login response and luz gating
event_1=Talk_Like_A_Pirate
event_2=
event_3=
event_4=
event_5=
event_6=
event_7=
event_8=
# version for login response and luz gating
version_major=1
version_current=10
version_minor=64
# The port the chat server is started and listening on
# Used in chat and world servers
chat_server_port=2005
sqlite_database_path=resServer/dlu.sqlite
database_type=sqlite
# Skips the account creation check in master. Used for non-interactive setups.
skip_account_creation=0
# 0 or 1, restrict mail while account is muted
mute_restrict_mail=1
# 0 or 1, restrict trade while account is muted
mute_restrict_trade=1
# 0 or 1, automatically reject character and pet names submitted while muted
mute_auto_reject_names=1
# The UGC server makes a saved property model this many seconds after its owner's last save (each save starts the wait
# again for all their waiting models), or as soon as a game client asks for it or the owner leaves the world. 0: right
# away. See docs/UgcServer.md.
ugc_debounce_seconds=120
# 0 or 1: worlds answer game clients without 3D services (UGCUSE3DSERVICES=7:0, the default) with the checksums of the
# files the UGC server made, so they download the icons of cars, rockets and models. The 1.10.64 client then downloads
# from http://127.0.0.1:80/lwoclient/UserBrickModels/ whatever its boot.cfg says, and a client that can't connect there
# is logged out, so only set 1 when the UGC server answers there for every player. See docs/UgcServer.md.
ugc_manifest=0