Topic: My tutorial on setting up PvPGN using Windows 7 64 bit
Ok I have spent TWO days trying to get PvPGN to work!!! I have finally made it to work!! The first time I tried I could connect to my server but I kept on getting a "No Realms Found" error. I then scratched everything and followed the advice from this thread:
https://forums.pvpgn.pro/viewtopic.php?id=2045
But I used mysql and pvpgnconsole.exe would crash all the time! I learned that a function named 'lua_pushlstring(st, v, std::strlen(v));' was called and the variable 'v' was an empty pointer. I then scratched the project again and installed a binary release. But instead of using mysql I decided to use the plaintext option. Launching Diablo II I was finally able to connect to a realm but everytime I tried to create a character I would get the annoying message "Character name already exists". In my d2cs logs I kept on getting an error that it did not understand the parameter 'newbiefile'!!! I searched all over the internet to figure out what appropriate parameter I should be using to no avail! I even opened D2CSConsole.exe in a hexeditor to search for symbol data that may help. I finally found a d2cs.conf file somewhere and learned that the correct parameters are below:
newbiefile_amazon
newbiefile_sorceress
newbiefile_necromancer
newbiefile_paladin
newbiefile_barbarian
newbiefile_druid
newbiefile_assasin
After assigning them to the appropriate locations I finally have a working server!!! So now I will show you step-by-step of how I accomplished this and hopefully it helps many people struggling with setting up/running a server:
You will need the following files:
BNGatewayEditor.exe
D2GS-113c(3).zip
LODPatch_113c.exe
pvpgn-master-1.99.7.2.1-PRO-77c2b4e_plain.zip
INSTALLATION INSTRUCTIONS
1) Install Diablo 2 and Expansion. When finished:
- Right-click on Diablo II.exe and choose Properties
- Click on the Compatibility tab
- Near the bottom, in the 'Privilege Level' space, make sure the 'Run this program as an administrator' is checked
- Click Apply and OK
2) Execute the LODPatch_113c.exe. DO NOT USE ANY OTHER PATCH
3) Run BNGateWayEditor.exe:
- Click on the Diablo tab
- Click on 'Add Gateway'
- Enter a name for the gateway
- Enter '6' for the zone
- Enter your External IP
- Delete all other gateways
- Click on 'Set as Chosen Gateway'
- Export as a registry file. Save it on the Desktop
- Open the saved registry file and follow all the instructions
4) Setup PvPGN
- Extract the PvPGN zip file to C:\pvpgn. This is important since most of the config files point to this location
- Change the compatibility to Windows XP v3 for ALL USERS to the following executables
* D2CSConsole.exe
* D2DBSConsole.exe
* PvPGNConsole.exe
- Copy/Paste the conf files I listed at the bottom of this post and change anywhere there is a <Local IP>/<External IP> to your LAN IP/WAN IP
- These files should be modified in the C:\pvpgn\conf directory
5) Setup D2GS
- Extract the D2GS zip file to C:\pvpgn\d2gs
- Change the compatibility to Windows XP v3 for ALL USERS to the D2GS.exe
- Delete the d2server.ini file and replace it with a blank one named D2Server.ini
- Copy/Paste what I posted of this file near the end of my post
- From your Diablo II folder, copy the following files into the D2GS directory:
* D2Client.dll
* D2CMP.dll
* D2Common.dll
* D2Game.dll
* D2gfx.dll
* D2Lang.dll
* D2MCPClient.dll
* D2Net.dll
* D2sound.dll
* D2Win.dll
* Fog.dll
* ijl11.dll
* Storm.dll
* d2data.mpq
* d2exp.mpq
* d2sfx.mpq
* d2speech.mpq
* Patch_D2.mpq
- If you are on a 64 bit system then change the d2gs.reg file to what is listed near the bottom of the post.
---OTHERWISE----
- Edit the d2gs.reg file.
- Change the D2CSIP, D2DBSIP lines where it reads '192.168.1.1' to your LAN IP
- Change the MaxGames line from 00000001 to 00000064
- Save the file
- Double-click on the d2gs.reg file
- Open the command line with admin privileges.
- Type: cd \pvpgn\d2gs
- Type: d2gssvc.exe -i
- Open mmc.exe
- Goto File->Add/Remove Snap-in
- Choose the Services snap-in (use Local Computer)
- Navigate to the 'Diablo II Close Game Server'
- Make sure the 'Path to Executable' is set to 'C:\pvpgn\d2gs\D2GSSVC.exe'
----IF NOT THEN YOU MUST CHANGE THIS PATH THRU REGEDIT---
- Ensure you set the service startup mode to 'Automatic'
- Click OK and exit
6) Setup network:
- Launch mmc.exe again
- Choose File->Add/Remove Snap-in
- Choose the Firewall snap-in
- Make a new inbounding rule
- Make sure the following ports are open:
* 6112-6114
* 4000
* 16112
* 8888
- Save the rule and exit mmc.exe
- Connect to your router
- I would STRONGLY encourage that you reserve your computers LAN IP.
- Enable 'Port Forwarding' and make sure the above ports point to your LAN IP.
7) Restart Computer
8) Load Server
- Make sure that your 'Diablo II Close Game Server' service has started and is running
- Open up the command-line tool as administrator
- Type: cd \pvpgn
- Load the servers IN THIS ORDER:
* Type: D2CSConsole.exe &
* Type: D2DBSConsole.exe &
* Type: PvPGNConsole.exe &
- Check if things are working:
* Launch the BNGatewayEditor.exe. Click on the 'Detect Gateway'. Hopefully it will connect!!!!
* If not then check the C:\pvpgn\var logs for a place to start
* If the logs do not provide any ideas then check your firewalls and router setup
- Launch Diablo II. You should be able to start a game via 'BattleNet' (optional)
9) Have Friends Connect
- Make sure your friends version of Diablo II uses the Patch provided. If not they will have to reinstall Diablo II
- Have your friends execute the BNGatewayEditor.exe and follow the same instructions in Step 3 but use YOUR WAN IP.
CONFIG AND INI FILES:
address_translation.conf:
########################################################################################################
#------------------------------------------------------------------------------------------------------#
# Address Translation table #
#------------------------------------------------------------------------------------------------------#
# #
# This is a list of ip:port addresses that get translated #
# #
# The entries are broken into four parts: #
# #
# * the IP address w/port to be translated #
# * the output IP address w/port #
# * comma delimited list of networks to be excluded from translation #
# * comma delimited list of networks to be included in translation #
# #
# Each line must contain all four parts or the entire entry will be rejected #
# There are no default ports, make sure input and output includes the port number #
# #
# The entries are searched in the order listed in this file #
# Exclude networks are searched before include networks #
# Only the first matching line is used #
# Lines begining with '#' are ignored #
# #
# If no match is found, the input ip will be returned. #
# #
# NONE = There are no neworks to exclude/include (just a place holder, no entries will be added) #
# ANY = All networks will be excluded/included (same as 0.0.0.0/0) #
# #
########################################################################################################
########################################################################################################
# w3route server ip (removed from w3trans.conf) (Port 6200) #
# #
# Set input address the same as the w3routeaddr setting in the bnetd.conf #
# Set output address to the address to be sent to war3 clients #
# Set exclude to the range of clients you want to recieve the input address #
# instead of the output address #
# Set include to the range of clients you want to recieve the output address #
# #
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
#--------------------- ---------------------- ---------------------------- -------------------------#
#0.0.0.0:6200 192.168.1.100:6200 NONE 192.168.1.0/24
#0.0.0.0:6200 internetip:6200 NONE ANY
########################################################################################################
# Game Translations for clients (removed from gametrans.conf) (client data ports) #
# #
# Set input address to the client to be translated #
# Set output address to the address to be sent to the other clients #
# Set exclude to the range of clients you want to recieve the input address #
# instead of the output address #
# Set include to the range of clients you want to recieve the output address #
# #
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
#--------------------- ---------------------- ---------------------------- -------------------------#
#LOCAL IP GAMING PC1:16112 EXTERNAL IP SERVER PC:16112 192.168.1.0/24,10.0.0.0/8 ANY
#LOCAL IP GAMING PC2:16113 EXTERNAL IP SERVER PC:16113 192.168.1.0/24,10.0.0.0/8 ANY
#LOCAL IP GAMING PC3:16114 EXTERNAL IP SERVER PC:16114 192.168.1.0/24,10.0.0.0/8 ANY
#192.168.1.18:4000 72.107.xx.xxx:4000 192.168.1.0/24 ANY
########################################################################################################
# Diablo II Charactar Server (d2cs) - (removed from realm.conf) (Port 6113) #
# #
# Set input address to the ip of d2cs (same as the ip in the realm.conf) #
# Set output address to the address to be sent to the clients #
# Set exclude to the range of clients you want to recieve the input address #
# instead of the output address #
# Set include to the range of client you want to recieve the output address #
# #
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
#--------------------- ---------------------- ---------------------------- -------------------------#
<Local IP>:6113 <External IP>:6113 192.168.1.0/24 ANY
########################################################################################################
# Diablo II Game Server (d2gs) - (removed from d2gstrans.conf) (Port 4000) #
# #
# Set input address to the ip of d2gs (same as the gameservlist in d2cs.conf) #
# Set output address to the address to be sent to the clients #
# Set exclude to the range of clients you want to recieve the input address #
# instead of the output address #
# Set include to the range of client you want to recieve the output address #
# #
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
#--------------------- ---------------------- ---------------------------- -------------------------#
<Local IP>:4000 <External IP>:4000 NONE ANY
bnetd.conf:
##############################################################################
# bnetd.conf - Configuration file for the Unix Battle.net daemon #
#----------------------------------------------------------------------------#
# #
# This file is an example configuration and may require modification to #
# suit your needs or your site. Blank lines and lines starting with a "#" #
# are ignored. Use quotes around values that contain spaces. #
# #
##############################################################################
##############################################################################
# Storage section #
# storage_path will tell pvpgn how and where from/to to read/write accounts #
# right now it supports 2 "drivers" : file and sql #
# #
# Syntax: #
# * for plain file driver: #
# storage_path = file:mode=plain;dir=<path_to_user_files>;clan=<path_to_clan_files>;team=<path_to_team_files>;default=/path/to/default/account #
# * for cdb file driver: #
# storage_path = file:mode=cdb;dir=<path_to_cdb_files>;clan=<path_to_clan_files>;team=<path_to_team_files>;default=/path/to/default/account #
# * for sql driver: #
# storage_path = sql:variable=value;...;default=0 (0 is the default uid) #
# #
# Variables for sql can be: #
# - "mode" : tells PVPGN the sql mode you will use (mysql/pgsql/etc..) #
# - "host" : the database host #
# - "port" : the TCP/IP port if needed #
# - "socket" : the UNIX local socket if needed #
# - "name" : database name #
# - "user" : db username #
# - "pass" : db password #
# - "default" : specify the UID to use for the default account data #
# - "prefix" : prefix to use for all pvpgn tables (default "") #
# #
# Examples: #
# storage_path = file:mode=plain;dir=var\users;clan=var\clans;team=var\teams\;default=conf\bnetd_default_user.plain
# storage_path = file:mode=cdb;dir=var\userscdb;clan=var\clans;team=var\teams\;default=conf\bnetd_default_user.cdb
# storage_path = sql:mode=mysql;host=127.0.0.1;name=PVPGN;user=pvpgn;pass=pvpgnrocks;default=0;prefix=pvpgn_
# storage_path = sql:mode=pgsql;host=127.0.0.1;name=pvpgn;user=pvpgn;pass=pvpgnrocks;default=0;prefix=pvpgn_
# storage_path = sql:mode=sqlite3;name=var\users.db;default=0;prefix=pvpgn_
# storage_path = sql:mode=odbc;name=PVPGN;prefix=pvpgn_
#----------------------------------------------------------------------------#
storage_path = file:mode=plain;dir=var\users;clan=var\clans;team=var\teams;default=conf\bnetd_default_user.plain
# #
##############################################################################
##############################################################################
# File section #
# The pidfile can be set to "" to turn it off. #
# Use absolute paths in these lines to avoid problems! #
#----------------------------------------------------------------------------#
filedir = files
scriptdir = lua
reportdir = var\reports
chanlogdir = var\chanlogs
userlogdir = var\userlogs
i18ndir = conf\i18n
issuefile = conf\bnissue.txt
channelfile = conf\channel.conf
adfile = conf\ad.json
topicfile = conf\topics.conf
ipbanfile = conf\bnban.conf
transfile = conf\address_translation.conf
mpqfile = conf\autoupdate.conf
logfile = var\bnetd.log
realmfile = conf\realm.conf
versioncheck_file = conf\versioncheck.json
mapsfile = conf\bnmaps.conf
xplevelfile = conf\bnxplevel.conf
xpcalcfile = conf\bnxpcalc.conf
#pidfile = var\bnetd.pid
ladderdir = var\ladders
command_groups_file = conf\command_groups.conf
statusdir = var\status
aliasfile = conf\bnalias.conf
anongame_infos_file = conf\anongame_infos.conf
DBlayoutfile = conf\sql_DB_layout.conf
supportfile = conf\supportfile.conf
customicons_file = conf\icons.conf
# #
##############################################################################
##############################################################################
# Localized files realm server settings #
#----------------------------------------------------------------------------#
# These filenames can have translated versions in
# the "i18ndir" directory specified above.
# (there are also two downloadable files: chathelp-war3.txt, newaccount.txt)
localizefile = common.xml
motdfile = bnmotd.txt
motdw3file = w3motd.txt
newsfile = news.txt
helpfile = bnhelp.conf
tosfile = termsofservice.txt
# Do localization by a game language or by user country?
localize_by_country = true
# #
##############################################################################
##############################################################################
# Message logs #
#----------------------------------------------------------------------------#
# Multiple log levels can be defined by connecting them with a comma (,)
# Available loglevels are:
# none
# trace
# debug
# info
# warn
# error
# fatal
#loglevels = fatal,error,warn,info,debug,trace
loglevels = fatal,error,warn,info
# #
##############################################################################
##############################################################################
# D2CS realm server settings #
#----------------------------------------------------------------------------#
# Version of D2CS server to connect with (set to zero to disable version check)
d2cs_version = 0
# Allow the D2CS server to change realm names?
allow_d2cs_setname = true
# #
##############################################################################
##############################################################################
# Downloadable files #
#----------------------------------------------------------------------------#
# These filenames are reported directly to the client and are relative to
# the "filedir" directory specified above.
iconfile = "icons.bni"
war3_iconfile = "icons-WAR3.bni"
star_iconfile = "icons_STAR.bni"
# #
##############################################################################
##############################################################################
# Client verification and upgrades #
#----------------------------------------------------------------------------#
# This option lists the client types allowed to connect (only valid for
# the bnet and wol protocol). The list is a comma separated list of any of
# the following elements:
# all : all client types allowed (default)
# chat : client type "CHAT" allowed (used by some bot software)
# dshr : client type Diablo 1 Shareware
# drtl : client type Diablo 1 (Retail)
# sshr : client type Starcraft Shareware
# star : client type Starcraft
# sexp : client type Starcraft Broodwar
# w2bn : client type Warcraft II Battle.Net Edition
# d2dv : client type Diablo 2
# d2xp : client type Diablo 2 LOD
# war3 : client type Warcraft III (Reign Of Chaos)
# w3xp : client type Warcraft III Frozen Throne
# tsun : client type Tiberian Sun
# tsxp : client type Tiberian Sun Firestorm
# ralt : client type Red Alert (with 4 players internet patche)
# ral2 : client type Red Alert 2
# dn2k : client type Dune 2000
# noxx : client type Nox
# noxq : client type Nox Quest
# rngd : client type Renegade
# yuri : client type Yuri's Revenge
# empr : client type Emperor: Battle for Dune
#
# Example: allowed_clients = war3,w3xp
allowed_clients = all
# If you enable the version checks but want to allow clients that don't pass
# the checksum test then enable this.
allow_bad_version = true
# If you enable the version checks but want to allow clients that aren't
# listed in the versioncheck configuration file then enable this. Unless
# you have a very complete file or are very paranoid about cheaters this
# is a good idea.
allow_unknown_version = true
# #
##############################################################################
##############################################################################
# Time values #
#----------------------------------------------------------------------------#
# Time in seconds between account file updates, 0 means wait forever.
usersync = 300
# Number of seconds of inactivity before file is unloaded from memory.
# (only checked during account file updates)
userflush = 3600
# Number of users checked for updates at once. Higher values make sense if you
# either have very fast hardware or you don't have many number of accounts.
# Lower values make sense if you have very high CPU usage on the system you run
# the server (dont make it too low or your system will save accounts continously).
# Modify this value ONLY if you know what you are doing!!
userstep = 100
# Flush connected users? Set "false" and they will never flushed untill logout (it will consume more memory but less CPU usage, because of no queries to a file)
userflush_connected = true
# How often to send user latency tests in seconds.
latency = 600
# How often to send null or keepalive packets in seconds.
nullmsg = 120
# Amount of time to delay shutting down server in seconds.
shutdown_delay = 300
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
# (control-c) signal in seconds.
shutdown_decr = 60
# How often should bans be checked for expiration? (in seconds)
#ipban_check_int = 30
# #
##############################################################################
##############################################################################
# Policy options #
#----------------------------------------------------------------------------#
# If you don't want people to be able to create new accounts, set this to
# false.
new_accounts = true
# Set this to the maximum number of accounts you want to allow to be
# created on your server. A value of 0 means infinite and is the default.
#max_accounts = 0
# If someone attempts to log in more than once, should it kick off the old
# login, or deny the new one?
kick_old_login = true
#kick_old_login = false
# With no passwords, this is bad to have enabled --NonReal
# load_new_account option has been eliminated and the functionality now is
# always active in PvPGN
# If a user is creating a new channel, should it be added automatically, or
# prompt them first?
ask_new_channel = true
# Should a game report be written for every game played or just ladder
# games?
#report_all_games = false
report_all_games = true
# Should Diablo I/II reports be written? There are no winners/losers.
report_diablo_games = false
# Should games with passwords be hidden on the game list?
hide_pass_games = true
# Should games already started be hidden on the game list? (for heavily
# loaded servers)
hide_started_games = true
# Should non-permanent channels hidden on the channel list?
hide_temp_channels = true
# Should any and all disconnects to be counted as losses?
# (Turning this on will override the user's choice in ladder games!)
disc_is_loss = false
# List additional game types to be counted as ladder games
# Curently allowed types: topvbot, melee, ffa, oneonone
# Example: ladder_games = "topvbot,oneonone"
ladder_games = "none"
# If additional game types are configured (see above) to be counted as ladder
# games then this setting configures a game name prefix to make only games
# which match this game name prefix be counted as ladder. This allows to
# still have normal games of the game types configured with "ladder_games"
# directive. However if this setting is commented or "" then ALL games
# which match the game types configured with "ladder_games" are to be
# considered as ladder games. The prefix checking is CASE SENSITIVE!
# Example: ladder_prefix = "ldr_"
ladder_prefix = ""
# Should all users be able to use the /con and /connections commands?
enable_conn_all = true
# Should client IP addresses (from /con, /games, /gameinfo, /netinfo)
# be hidden from non-admins?
hide_addr = false
# Should private channel messages be logged to files in the chanlogdir
# directory? (see channels.list for public channels)
chanlog = false
# Do you want to use the channel quota feature?
quota = yes
# The following options deal with flood prevention.
#
# How many lines do you accept in quota_time seconds?
# (The default should allow 5 lines in 5 seconds,
# longer time periods allow "bursts" of traffic before the quota is full.)
quota_lines = 5 # must be between 1 and 100 lines
quota_time = 5 # must be between 1 and 60 seconds
# "virtual wrapping", so long lines count as multiple lines
quota_wrapline = 40 # must be between 1 to 256 chars
# absolute maximum characters allowed in a line
quota_maxline = 200 # must be between 1 to 256 chars
#
# How many lines do you accept in quota_time seconds before user is
# disconnected?
# (According to Jung-woo, Dobae is a Korean term for flooding the game server...
# it originally meant "to paint the wallpaper on a new or refurbished house").
# If it less than or equal to quota_lines, there is no warning before
# disconnection so don't set this too low.
quota_dobae = 10 # must be between 1 and 100 lines
# Mail support
mail_support = true
mail_quota = 5
# Channel logging message
log_notice = "*** Please note this channel is logged! ***"
# Ban on repeated password fails against bruteforce password thieves
# Fails required to get ip banned (0 to disable ban on password fail)
passfail_count = 0
# Password fail IP ban duration (in seconds)
passfail_bantime = 300
# Max users limit in private channels (0 = unlimited)
maxusers_per_channel = 0
# #
##############################################################################
##############################################################################
# Account configuration #
#----------------------------------------------------------------------------#
# Should account files be named by the account number or the player name?
savebyname = true
# Save the account data on logoff
sync_on_logoff = false
# How man rows should the account lookup hash table have? Servers with
# more accounts should use a larger table for better performance.
hashtable_size = 61
# Per default, only alphanumerical symbols are allowed in account names
# with this variable you can add some extra symbols to be allowed
# but be warned - that some of them might cause trouble - at least with
# savebyname=true (some symbols are forbidden in filenames or might cause
# you real trouble - plz neither allow wildcard symbols like '*' or '?'.
# Path delimiters like '/' or '\' are hardcoded filtered and can't be allowed.
# Also note that allowing the '.' might cause u some headache on win32 systems.
# You have been warned - the rest is up to you.
# default setting is "-_[]" as it was previous versions
account_allowed_symbols = "-_[]"
# This setting affects users that login with their uid rather than their
# username. If set to true their displayed username will be forcefully
# converted to their registered account name.
account_force_username = false
# maximum number of friends a user can add to there friends list
# default setting is 20
max_friends = 20
# #
##############################################################################
##############################################################################
# Tracking server info #
#----------------------------------------------------------------------------#
# Set track=0 to disable tracking. Any other number will set number
# of seconds between sending tracking packets. This is ON by default.
#track = 0
track = 60
# Tracking server(s)
# Use a comma delimited list of hostnames with optional UDP port numbers
# after colons. (port 6114 is the default for the newer tracking protocol)
trackaddrs = "track.pvpgn.pro,track.pvpgn.org,bntrack.darkwings.org,bnet.mivabe.nl,track.eurobattle.net"
# Change these to match your system, for example:
location = "unknown"
description = "unknown"
url = ""
contact_name = "a PvPGN user"
contact_email = "unknown"
# #
##############################################################################
##############################################################################
# Server network info #
#----------------------------------------------------------------------------#
# Servername by which the server identifies itself (default: "PvPGN Realm")
#servername = "PvPGN Realm"
# Set this to the maximum number of concurrent connections allowed on
# this server (minimum 32). This limit sets a general server connection
# limit, NOT the concurrent user limit (for that see next option)
max_connections = 1000
# Set maximum amount of packets in client packet queue
# If limit is reached, client connection will be dropped
# Set to 0 to disable
packet_limit = 1000
# Maximum number of concurrent users (0 means unlimited).
max_concurrent_logins = 0
# Set this option to true to allow TCP to detect and close stale
# connections.
use_keepalive = false
# Limit maximum number of connections per IP (0 = unlimited)
# this feature is new, so no recommended value so far
# (d2cs connections are exempted from this limitation)
max_conns_per_IP = 0
# This is a comma delimited list of hostnames that the server should
# listen on. It might be useful to make an internal-only server on a
# gateway machine for example. If the list is not set or if it has a
# entry with no host component, the server will bind to that port on all
# interfaces.
#servaddrs = ":9999"
#servaddrs = "myinternalname.some.com,localhost"
servaddrs = ":" # default interface (all) and default port (6112)
# Don't change these unless you really need to! You will need to run a proxy
# or modify the clients. Also note that these will not change when simply
# sending a HUP signal to the server; they are only read on startup.
# This is the port the server send the UDP test packets to by default.
# Setting it to zero makes the server use the same port as the TCP connection
# comes from. Newer clients can override this setting on a per connection
# basis.
#udptest_port = 6112
# W3 Play Game router address. Just put your server address in here
# or use 0.0.0.0:6200 for server to bind to all interfaces,
# but make sure you set up w3trans if you do.
w3routeaddr = "0.0.0.0:6200"
# w3routeshow has been removed.
# see the address_translation.conf for translating the w3route ip for local networks
# initkill_timer sets up a periodic timer on init/defer class connections
# this should detect and clean up stale connections to your server
initkill_timer = 120
# #
##############################################################################
##############################################################################
# Westwood Online (WOL) configuration #
#----------------------------------------------------------------------------#
# NOTE: WOL support is still experimental!
# This specifies the addresses where WOL connections should be accepted. See
# the description of servaddrs for formatting information. Leave this field
# blank if you do not want to accept WOL connections. If the wolv1 port is
# not specifed then 4005 will be used. Also if wolv2 port is not specifed
# then 4000 will be used.
# WOLv2 address includes servserv, game/chatting and ladder services.
#
# Note: DO NOT SET THE PORT TO ANYTHING OTHER THEN 4000 for WOLv1 or 4005 for
# WOLv2, WOL WILL FAIL IF YOU DO!
#wolv1addrs = ":4000"
#wolv2addrs = ":4005"
#wgameresaddrs = ":4807"
#apiregaddrs = ":5400"
# Just leave these as default (unless you know the timezone, longitiude and latitude
# of your server
woltimezone = "-8"
wollongitude = "36.1083"
wollatitude = "-115.0582"
# These as default means that WOL autoupdate will use official WOL FTP server.
# As "wol_update_serverhost" can be used also an IP address. FTP server is not
# component of PvPGN so for that purpose can be used any FTP server.
# Note that username and password is specifiable only in WOLv2 protocol. WOLv1
# will always use the default values.
wol_autoupdate_serverhost = "westwood-patch.ea.com"
wol_autoupdate_username = "update"
wol_autoupdate_password = "world96"
# #
##############################################################################
##############################################################################
# Internet Relay Chat (IRC) configuration #
#----------------------------------------------------------------------------#
# NOTE: IRC support is still experimental!
# This specifies the addresses where IRC connections should be accepted. See
# the description of servaddrs for formatting information. Leave this field
# blank if you do not want to accept IRC connections. If the port is not
# specifed then 6667 will be used.
#ircaddrs = ":6667"
# This is the IRC network name. If this is not specified then the default of
# "PvPGN" will be used.
#irc_network_name = "PvPGN"
# This is the hostname used for IRC connections. Set this to your
# hostname, if the automatic detection doesn't correctly.
#hostname = "none"
# Set this to the desired IRC connection timeout in seconds.
#irc_latency = 180
# #
##############################################################################
##############################################################################
# Telnet configuration #
#----------------------------------------------------------------------------#
# This specifies the addresses where telnet connections should be accepted.
# See the description of servaddrs for formatting information. Leave this
# field # blank if you do not want to accept telnet connections. If the port
# is not specifed then 23 will be used.
#telnetaddrs = ":23"
# #
##############################################################################
###############################################################################
# war3 ladder textual output #
#-----------------------------------------------------------------------------#
# this is for all the guys, that want Warcraft 3 ladder, but don't want their
# server to run with MySQL support.
# For each ladder (solo, team, ffa, at) a corresponing file is created,
# so it's easy to build your ladder pages with them
# the following value determines, at which rate, these files are created
# set to 0 if you don't want or need these files
war3_ladder_update_secs = 300
# jfro's latest ladder is based on XML... so we can switch to XML output of ladder
# on demand. Maybe we should set update interval bigger cause XML output version
# is much more verbose than the standard output
XML_output_ladder = false
###############################################################################
# server status textual output #
#-----------------------------------------------------------------------------#
# This is for writing status of the server in an attempt to see number of user
# on line actually, and games/chans.
# This is store in file var\status\warcraft3.dat as a *.ini format.
# Shouldn't be so hard in php to create dynamic website using this content.
# the following value determines, at which rate, these files are created
# set to 0 if you don't want or need these files
output_update_secs = 60
# jfro's latest ladder is based on XML... so we can switch to XML output of ladder
# on demand. Maybe we should set update interval bigger cause XML output version
# is much more verbose than the standard output
XML_status_output = false
###############################################################################
# clan settings #
#-----------------------------------------------------------------------------#
# Time in hours for a new member of clan to be a newer(Peon icon, cannot promote to Grunt)
# default value 168(7 days). If set to 0, all new members could be promote in no time
clan_newer_time = 0
# max members count allowed in a clan, set between 10 and 100, default 50.
clan_max_members = 50
# Default clan channel status when create a clan, 1 for private, 0 for public
clan_channel_default_private = 0
# Minimum accepted invites for create new clan. 0 = clans will be created
# without accepted invitations need. This does not affect WAR3/W3XP ingame
# clan management.
clan_min_invites = 2
###############################################################################
# user commands logging #
#-----------------------------------------------------------------------------#
# Should commands from users be logged to files in the userlogdir?
log_commands = true
# Commands will be logged for users with these command groups
# (global operators and admins are included)
log_command_groups = 2345678
# List of commands that will be logged
# can be defined by connecting them with a comma (,)
# set empty to log all commands
log_command_list = ""
realm.conf:
#################################################################################
# realm.list - List of Diablo II Realms #
#-------------------------------------------------------------------------------#
# #
# Realms are areas that hold closed characters and games. #
# Users are given this list of realms to choose from when #
# creating a new character. Next time the character is #
# used, they will automatically join the same realm. #
# #
# The realm server runs on port 6113 by default. #
# If you do not specify a port number, it will use this by default. #
# #
# <realmname> : the realm name (mandatory; must start and end with " ) #
# <description> : the realm description (optional; must start and end with " ) #
# ip:port - actual ip the d2cs server is running on (mandatory) #
# #
# --- realm name --- --- description --- --- real address --- #
# (mandatory) (optional) (mandatory) #
#-------------------------------------------------------------------------------#
# "<realmname>" ["<description>"] <ip:port> #
# #
#################################################################################
# WARNING!! DO NOT USE "127.0.0.1" or "localhost" FOR ANY IP ADDRESS
# example (having a d2cs server running on IP 1.2.3.4):
"D2CS" "A PvPGN Realm" <Local IP>:6113
d2dbs.conf:
#################################################################################
# d2dbs.conf - Configuration file for the Diablo2 Game database server #
#-------------------------------------------------------------------------------#
# #
# This file is an example configuration and may require modification to #
# suit your needs or your site. Blank lines and lines starting with a "#" #
# are ignored. Use quotes around values that contain spaces. #
# #
#################################################################################
#################################################################################
# Server Major Settings #
#-------------------------------------------------------------------------------#
# This is a comma delimited list of hostnames that the server should
# listen on. It might be useful to make an internal-only server on a
# gateway machine for example. If the list is not set or if it has a
# entry with no host component, the server will bind to that port on all
# interfaces.
# dbs default listening port is 6114
# WARNING!! DO NOT USE "127.0.0.1" or "localhost" !!!
servaddrs = <Local IP>:6114
# This is a comma delimited list of game servers
# WARNING!! DO NOT USE "127.0.0.1" or "localhost" !!!
gameservlist = <Local IP>
# #
#################################################################################
#################################################################################
# Message logs #
#-------------------------------------------------------------------------------#
# Multiple log levels can be defined by connecting them with a comma (,)
# Available loglevels are:
# none
# trace
# debug
# info
# warn
# error
# fatal
#loglevels = fatal,error,warn,info
loglevels = fatal,error,warn,info,debug,trace
# #
#################################################################################
#################################################################################
# File and Path section #
# Use absolute paths in these lines to avoid problems! #
#-------------------------------------------------------------------------------#
logfile = var\d2dbs.log
logfile-gs = var\d2dbs-gs.log
charsavedir = var\charsave
charinfodir = var\charinfo
ladderdir = var\ladders
bak_charsavedir = var\bak\charsave
bak_charinfodir = var\bak\charinfo
# #
#################################################################################
#################################################################################
# Misc #
#-------------------------------------------------------------------------------#
# #
# Ladder save interval
laddersave_interval = 3600
# Time that allow characters create after it insert into ladder
# These code should be rewritted to support string formmated time
ladderinit_time = 0
# create extra ladder file in XML format that can be parsed more easy
# 0 = turn extra output off (default)
# 1 = turn on the XML output
XML_ladder_output = 0
# Amount of time to delay shutting down server in seconds.
shutdown_delay = 360
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
# (control-c) signal in seconds.
shutdown_decr = 60
# connection max idle time in seconds
idletime = 300
# connection keep alive interval
keepalive_interval = 60
# connection time out check interval
timeout_checkinterval = 60
# experience threshold, minimum experience needed to register on the ladder
ladderupdate_threshold = 0
# What chars will be added to ladder?
# 0 = ladder and non-ladder chars
# 1 = only ladder chars
ladder_chars_only = 1
# This setting activates a workaround for the well known "Lvl 100" bug.
# It should be activated for mods where the max level is greater than 99.
# Activating this should work for mods with any max level
# If level is greater than 255, it will be set to 255
# 0 = deactivated
# 1 = activated
difficulty_hack = 0
# #
#################################################################################
d2cs.conf:
#################################################################################
# d2cs.conf - Configuration file for the diablo2 game control server #
#-------------------------------------------------------------------------------#
# #
# This file is an example configuration and may require modification to #
# suit your needs or your site. Blank lines and lines starting with a "#" #
# are ignored. Use quotes around values that contain spaces. #
# #
#################################################################################
#################################################################################
# Server Major Settings #
#-------------------------------------------------------------------------------#
# #
# Your realm server name #
realmname = "D2CS"
# This is a comma delimited list of hostnames that the server should
# listen on. It might be useful to make an internal-only server on a
# gateway machine for example. If the list is not set or if it has a
# entry with no host component, the server will bind to that port on all
# interfaces.
# d2cs default listening port is 6113
# WARNING!! DO NOT USE "127.0.0.1" or "localhost" !!!
servaddrs = <Local IP>:6113
# This is a comma delimited list of game servers
# WARNING!! DO NOT USE "127.0.0.1" or "localhost" !!!
gameservlist = <Local IP>
# This is bnetd server address with port
# bnetd default listening port is 6112
# WARNING!! DO NOT USE "127.0.0.1" or "localhost" !!!
bnetdaddr = <Local IP>:6112
# Set this to the maximum number of concurrent connections allowed on
# this server.
max_connections = 1000
# This sets the realm to Classic or LOD or Both
# Classic = 0
# LOD = 1
# Both = 2 (default)
lod_realm = 2
# This sets whether you can convert a clasic char to
# an expansion char.
# Allow Convert = 1
# Don't allow Convert = 0
allow_convert = 1
# here u can enter the symbols allowed in accountnames (additional to
# alphanumerical symbals which are always accepted). please note that
# it is absolutly mandatory that u set up the same symbols here as in
# bnetd.conf or else u wont be able to play D2 with some characters
# (those whose symbols are allowed in bnetd.conf but not here)
# same warnings as in bnetd.conf apply here - be warned - and just
# change something if you know what you are doing
#default setting is "-_[]"
account_allowed_symbols = "-_[]"
# #
#################################################################################
#################################################################################
# Message logs #
#-------------------------------------------------------------------------------#
# Multiple log levels can be defined by connecting them with a comma (,)
# Available loglevels are:
# none
# trace
# debug
# info
# warn
# error
# fatal
#loglevels = fatal,error,warn,info
loglevels = fatal,error,warn,info,debug,trace
# #
#################################################################################
#################################################################################
# File and Path section #
# Use absolute paths in these lines to avoid problems! #
#-------------------------------------------------------------------------------#
# #
logfile = C:\pvpgn\var\d2cs.log
charsavedir = C:\pvpgn\var\charsave
charinfodir = C:\pvpgn\var\charinfo
bak_charsavedir = C:\pvpgn\var\bak\charsave
bak_charinfodir = C:\pvpgn\var\bak\charinfo
ladderdir = C:\pvpgn\var\ladders
#newbiefile = C:\pvpgn\files\newbie.save
transfile = C:\pvpgn\conf\address_translation.conf
d2gsconffile = C:\pvpgn\d2gs\D2Server.ini
newbiefile_amazon = C:\pvpgn\files\newbie.save
newbiefile_sorceress = C:\pvpgn\files\newbie.save
newbiefile_necromancer = C:\pvpgn\files\newbie.save
newbiefile_paladin = C:\pvpgn\files\newbie.save
newbiefile_barbarian = C:\pvpgn\files\newbie.save
newbiefile_druid = C:\pvpgn\files\newbie.save
newbiefile_assasin = C:\pvpgn\files\newbie.save
# #
#################################################################################
#################################################################################
# Misc #
#-------------------------------------------------------------------------------#
# #
# Message Of The Day
motd = "Hello World!"
# Set to non-zero to allow creation of new realm character
allow_newchar = 1
# Do you want d2cs to check client for multilogin for security reason?
check_multilogin = 0
# Maxinum number of character per account
# Max allowed value is 18 (enforced by server)
maxchar = 8
# Character sorting. Options are: level, mtime, name, none. (none assumed if
# not specified).
#charlist_sort = "none"
# Do we need ascending or descending order for charlist?
#charlist_sort_order = "ASC"
# Maxinum number of games will be shown in join game list
# Zero = infinite
maxgamelist = 20
# Set to non-zero to allow show all games with difficulty < character difficulty
# Otherwise, only game with difficulty = character difficulty will be shown
gamelist_showall = 0
# Maxinum time in seconds that a user can idle
# Zero = infinite
idletime = 3600
# Amount of time to delay shutting down server in seconds.
shutdown_delay = 300
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
# (control-c) signal in seconds.
shutdown_decr = 60
#
#################################################################################
#################################################################################
# Internal System Settings #
# You may just ignore them and use the default value #
#-------------------------------------------------------------------------------#
#
# How often will the server purge all list to clean unused data (in seconds)
listpurgeinterval = 300
# How often will the server check game queues (in seconds)
gqcheckinterval = 60
# How often will the server retry to connect to bnetd
# when connection lost (in seconds)
s2s_retryinterval = 10
# How long time the s2s connection will timeout
s2s_timeout = 10
# How often the server will check server queues for expired data
sq_checkinterval = 300
# How long time will a server queue data expire
sq_timeout = 300
# Game serer binary files checksum, use zero to skip this checking
d2gs_checksum = 0
# Game server version, use zero to skip this checking
d2gs_version = 0
# Game server password
d2gs_password = ""
# Maxinum number of second that a game will be shown on list( zero = infinite )
game_maxlifetime = 0
# A game will be automatically destroied after how long time idle
max_game_idletime = 0
# Allow Limitation created game with password, player number or level limit?
allow_gamelimit = 1
# Ladder refresh time
ladder_refresh_interval = 3600
# server to server connection max idle time in seconds
s2s_idletime = 300
# server to server connection keepalive interval
s2s_keepalive_interval = 60
# all connection timeout check interval
timeout_checkinterval = 60
# game server restart interval
# when sending SIGUSR2 signal to your d2cs this issues a restart
# of all connected d2gs after d2gs_restart_delay seconds
d2gs_restart_delay = 300
# ladder start time
# format: yyyy-mm-dd hh:mm:ss
# be carefull:
# all chars created before this date will revert to non-ladder chars
ladder_start_time = ""
# number of days before a char expires (default 0=unlimited)
char_expire_day = 0
#
#################################################################################
D2Server.ini:
;Standard windows INI file format
[D2GE]
DebugDumpThread=1
;EnableMeleeHireableAI: When set to 1, the ACT2&ACT5 hireable's AI will be fixed, when the hireable is cursed by IM, he will stop attack monster, until the cruse disappear or replace by another curse.(Your melee pet will be more safer!)
;EnableNeroPetAI: When set to 1, the Nero Golem's AI will be fixed, when the golem is cursed by IM, it will stop attack monster, until the cruse disappear or replace by another curse.(Your Pride Nero Iron Golem will be more safer!)
;EnableExpGlitchFix: When set to 1, the experience that player get when in party will be fixed.(The orig program has some bug, you will get only 1 exp when in 8pp party killing hell diablo.)
;DisableUberUp: When set to 1, you will get 0 exp when killing the monster summon by Uber Boss(including Uber Meph and Uber Diablo). This will prevent the Uber Up.
;EnableUnicodeCharName: When set to 1, the server will allow the unicode charname login the game. NOTE: Need modified D2CS support! Please check the UnicodeCharName directory!
;EnableWarden: When set to 1, the server will start a d2warden thread, and use a build-in MOD check the client for hack or bot. See d2warden.ini for detail.
;EnablePreCalculateTCNoDropTbl: When set to 1, the multiply players TC NoDrop floating-point calculation will be pre-calculated, and this can improve your server performance.
;EnableEthSocketBugFix=1 ; This will disable additional 50% reward of eth armor when use the cube.
;DisableBugMF=1 ; This will disable all ACT boss quest drop within a non-quest drop game.
;DisableDCSpawnInSomeArea=1; This will not spawn DiabloClone in 'The Chaos Sanctuary' 'Arreat Summit' and Uber Boss Levels.
[NewFeatures]
EnableMeleeHireableAI=1
EnableNeroPetAI=1
EnableExpGlitchFix=1
DisableUberUp=1
EnableUnicodeCharName=1
EnableWarden=0
EnablePreCalculateTCNoDropTbl=1
EnableEthSocketBugFix=1
DisableBugMF=1
DisableDCSpawnInSomeArea=1
;UberQuest configuration in d2server.ini
;SpawnProbability: The probability that the Uber bosses try to spawn a monster, should be a int between 0~99;
;MaxSpawnNum: Max spawn number of monsters in a single game;
;SpawnInterval: the interval time between two spawns;
;ActivArea: how far ways that the uber boss try to spawn a monster;
;StallTime: After spawn a monster, the boss should stall for some time;
;SpawnMonsters: The monster type that a boss can spawn, should be a 0~733. You can look up the monststat.txt to get some hits. A boss can spawn 10 types of monsters at most;
[UberMephisto]
SpawnProbability=30
MaxSpawnNum=50
SpawnInterval=10
ActivArea=40
StallTime=10
SpawnMonsters=725,726,727,728,729,730
[UberDiablo]
SpawnProbability=30
MaxSpawnNum=50
SpawnInterval=10
ActivArea=40
StallTime=10
SpawnMonsters=712,731,732
[World Event]
Enable=1
; Enable DiabloClone Spawned only in the only game where the key sold.
; Also, all games in a server can spawn DCs when the original condition meet.(ItemRangeMin,ItemRangeMax,...)
; DcItemRate=1000 100% spawned DiabloClone in the only game
; DcItemRate=0 0% spawned DiabloClone in the only game
DcItemRate=1000
ShowSOJMessage=1
;update interval in seconds
UpdateInterval=10
;Notes: even if DC spawns in non-hell difficulty, it can only drop USC in hell difficulty
;e.g: Difficulty=normal,nightmare,hell means spawn DC in any difficulty
Difficulty=normal
;you will be happy when SpawnMinions set to non zero...
SpawnMinions=0
ItemDataFile=ItemConfig.dat
;World event trigger item config
Item=Key
;Total items needed to trigger DC is:
;[ItemRangeMin, ItemRangeMax] + (ItemNormalGameFactor * NormalGames)/100
;+ (ItemNormalPlayerFactor * NormalPlayers)/100 + ...
;NormalGame, NormalPlayers ... all are current dyanmic count on this server
ItemRangeMin=1
ItemRangeMax=1
ItemNormalGameFactor=0
ItemNightmareGameFactor=0
ItemHellGameFactor=100
ItemNormalPlayerFactor=0
ItemNightmarePlayerFactor=0
ItemHellPlayerFactor=100
[Key]
Mods = code=key
[The Stone of Jordan]
Mods = code=rin & quality=unique & prefix=122
[7% mf sc]
Mods = code=cm1 & quality=magical & mf=7
[UM Rune]
Mods = code=r22
[Unique or Set ring]
Mods = code=rin & quality=unique, quality=set
[UnID unique ring or unID set amulet]
Mods = code=rin & quality=unique | code=amu & quality=set
;Item Format:
;Logical operators:
;'|' ';' high priority OR
;'&' normal priority AND
;',' low priority OR
;e.g:
;mod1 | mod2, mod3 & mod4 = mod1 ; mod2, mod3 & mod4 = mod1 || ((mod2 || mod3) && mod4) (unsupported c like expression)
;all spaces are ignored
;any character after '/' will be treated as comment and ignored
;Mod format:
;[mod] [<|=|>|<=|>=] [value]
;Currently supported mod list:
;Type -> item base type id
;can be found from weapons.txt armor.txt misc.txt
;notes: the ID start from 0 instead of 1
;code -> item code
;can be found from weapons.txt armor.txt misc.txt
;quality -> tempered, craft,unique,set,rare,magical,superior,normal,inferior
;prefix -> item prefix id
;actually, for unique/set/runeword items, it is the name index.
;can be found from UniqueItems.txt, SetItems.txt, Runes.txt
;notes: the ID start from 0 instead of 1
;ilvl -> item ilvl
;stat[n] -> stats value
;see ItemStatCost.txt ID column
;flag[n] -> item flag value
;see alias for common used flags
;MPQVersion -> item version
;ItemClassic for classic item, ItemExpansion for expansion item, ItemExpansion110 for items after 1.10
;Common used alias
;socket = number of socket
;ethereal = [1|0]
;ear = [1|0]
;runeword = [1|0]
;broken = [1|0]
;identified = [1/0]
;personalized = [1/0]
;gems = number of gems socketed
;unsupported now
;gem[n] = mod of certain gem
;suffix = item suffix id
;and item magical prefix/suffix, use Stat[n] to check them now
;e.g: mf=7 & code=cm1 or stat80=7 & code=cm1 means 7% mf sc
FOR 64-BIT SYSTEMS ONLY
d2gs.reg:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\D2Server\D2GS]
@="Diablo II Close Game Server"
"AutoUpdate"=dword:00000000
"AutoUpdateUrl"=""
"AutoUpdateVer"=dword:00000000
"AutoUpdateTimeout"=dword:00007530
"D2CSIP"="<Local IP>"
"D2CSPort"=dword:000017e1
"D2DBSIP"="<Local IP>"
"D2DBSPort"=dword:000017e2
"MaxGames"=dword:00000064
"MaxGameLife"=dword:00003840
"AdminPassword"="9e75a42100e1b9e0b5d3873045084fae699adcb0"
"AdminPort"=dword:000022b8
"AdminTimeout"=dword:00000e10
"D2CSSecrect"=""
"EnableNTMode"=dword:00000001
"EnablePreCacheMode"=dword:00000001
"IdleSleep"=dword:00000001
"BusySleep"=dword:00000001
"CharPendingTimeout"=dword:00000258
"DebugNetPacket"=dword:00000000
"DebugEventCallback"=dword:00000000
"EnableGSLog"=dword:00000001
"EnableGELog"=dword:00000001
"EnableGEMsg"=dword:00000000
"EnableGEPatch"=dword:00000001
"IntervalReconnectD2CS"=dword:00000032
"MultiCPUMask"=dword:00000001
"MaxPreferUsers"=dword:000000b4
"MaxPacketPerSecond"=dword:000004b0
"ServerConfFile"="D2Server.ini"
"MOTD"="Hello world!"
NOTES:
Please review each code segment above CAREFULLY!!! Anywhere there is a <Local IP> or <External IP> you MUST change its values!!!
If your WAN IP changes don't fret!!! Just change the WAN IP in the above mentioned conf files to the new one. Restart your computer. Anytime you want to setup the server do Step 8 again. After everything seems to work fine you can tweek your conf files to your liking (ie MOTD and realm names, etc). I hope this helps!!