diff --git a/release/crosstool-x86.defconfig b/release/crosstool-x86.defconfig new file mode 100644 index 0000000..b235209 --- /dev/null +++ b/release/crosstool-x86.defconfig @@ -0,0 +1,22 @@ +CT_CONFIG_VERSION="3" +CT_EXPERIMENTAL=y +CT_ALLOW_BUILD_AS_ROOT=y +CT_ALLOW_BUILD_AS_ROOT_SURE=y +# CT_SAVE_TARBALLS is not set +CT_PREFIX_DIR="${CT_PREFIX:-/opt/x-tools}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}" +# CT_LOG_TO_FILE is not set +CT_ARCH_X86=y +CT_ARCH_32=y +CT_KERNEL_LINUX=y +CT_LINUX_V_2_6_32=y +CT_BINUTILS_LINKER_LD_GOLD=y +CT_BINUTILS_GOLD_THREADS=y +CT_BINUTILS_LD_WRAPPER=y +CT_BINUTILS_PLUGINS=y +CT_CC_LANG_CXX=y +CT_LIBC_GLIBC=y +# CT_LOG_PROGRESS_BAR is not set +CT_GLIBC_V_2_17=y +# CT_COMP_TOOLS_AUTOCONF is not set +# CT_COMP_TOOLS_AUTOMAKE is not set +CT_CC_GCC_BUILD_ID=y diff --git a/release/crosstool-x86_64.defconfig b/release/crosstool-x86_64.defconfig new file mode 100644 index 0000000..ea0e344 --- /dev/null +++ b/release/crosstool-x86_64.defconfig @@ -0,0 +1,22 @@ +CT_CONFIG_VERSION="3" +CT_EXPERIMENTAL=y +CT_ALLOW_BUILD_AS_ROOT=y +CT_ALLOW_BUILD_AS_ROOT_SURE=y +# CT_SAVE_TARBALLS is not set +CT_PREFIX_DIR="${CT_PREFIX:-/opt/x-tools}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}" +# CT_LOG_TO_FILE is not set +CT_ARCH_X86=y +CT_ARCH_64=y +CT_KERNEL_LINUX=y +CT_LINUX_V_2_6_32=y +CT_BINUTILS_LINKER_LD_GOLD=y +CT_BINUTILS_GOLD_THREADS=y +CT_BINUTILS_LD_WRAPPER=y +CT_BINUTILS_PLUGINS=y +CT_CC_LANG_CXX=y +CT_LIBC_GLIBC=y +# CT_LOG_PROGRESS_BAR is not set +CT_GLIBC_V_2_17=y +# CT_COMP_TOOLS_AUTOCONF is not set +# CT_COMP_TOOLS_AUTOMAKE is not set +CT_CC_GCC_BUILD_ID=y diff --git a/servers/block.cfg b/servers/block.cfg index 14ecd8a..9c61820 100644 --- a/servers/block.cfg +++ b/servers/block.cfg @@ -4,13 +4,15 @@ conn_timeout_protection 0 sv_swap 0 +auth_add_p Umbra mod 37cdcb65eaeec74cfa4e683b687e4b76 2b5bc6cea41e69fa # deen 2020-10-06 + sv_reset_file "" sv_find_free_port 0 -sv_vanilla_antispoof 0 +sv_vanilla_antispoof 1 sv_gametype "DDRace" sv_kill_protection 0 -sv_dnsbl_host blocklist +sv_dnsbl_host SECRET_DNSBL sv_dnsbl 1 sv_dnsbl_ban 1 sv_dnsbl_vote 1 diff --git a/servers/common.cfg b/servers/common.cfg index 9d31cb1..0fa2ef6 100644 --- a/servers/common.cfg +++ b/servers/common.cfg @@ -1,17 +1,18 @@ sv_sqlite_file "ddnet-server-test.sqlite" +sv_swap 1 sv_practice 1 sv_vanilla_antispoof 1 sv_gametype "DDRace" sv_ipv4only 1 -sv_emoticon_delay 0 +sv_emoticon_ms_delay 20 #sv_rcon_password numpq010 #sv_rcon_mod_password rand123X #sv_rcon_helper_password foliba999 sv_rcon_password "" -sv_rcon_mod_password "" -sv_rcon_helper_password "" +#sv_rcon_mod_password "" +#sv_rcon_helper_password "" sv_server_info_per_second 50 sv_map_vote 1 @@ -23,12 +24,14 @@ exec ddrace_local_auths.cfg # load namebans exec ddrace_namebans.cfg -sv_dnsbl_host blocklist +#sv_dnsbl_host blocklist +sv_dnsbl_host SECRETDNSBL +sv_dnsbl_key SECRETKEY sv_dnsbl 1 -sv_dnsbl_ban 1 -sv_dnsbl_vote 1 +sv_dnsbl_ban 0 +sv_dnsbl_vote 0 -sv_register 1,ipv4 +sv_register ipv4 sv_max_clients 64 sv_max_clients_per_ip 4 sv_spectator_slots 0 @@ -63,9 +66,6 @@ sv_vote_kick_min 5 sv_spectator_votes 0 -sv_banned_versions "16,502,602,605,708,1003,10072,11017,11072,12073" # baumalein, fclient, zclient, zclient, baumalein, original ath, ath, replay, ath, sash -# Consider removing 903 for DDNet Android support - #sv_deepfly 0 access_level logout 2 @@ -92,6 +92,9 @@ access_level unmute 1 access_level unmuteid 1 #access_level muteip 1 access_level mutes 1 +access_level sv_dnsbl_ban 1 +access_level sv_dnsbl_vote 1 +access_level dump_log 1 sv_ddrace_rules "0" sv_rules_line1 "Rules:" @@ -107,7 +110,7 @@ sv_rules_line9 "Breaking these rules will result in a penalty." sv_tee_historian 1 sv_reserved_slots 1 -sv_reserved_slots_pass SECRETSLOT +#sv_reserved_slots_pass cake sv_saveswapgames_delay 30 sv_saveswapgames_penalty 30 diff --git a/servers/reset.cfg b/servers/reset.cfg index 52ad6c7..42e19ce 100644 --- a/servers/reset.cfg +++ b/servers/reset.cfg @@ -1,5 +1,5 @@ sv_welcome "Welcome to DDraceNetwork!" -#sv_motd "DDraceNetwork - https://ddnet.tw\nDownload DDNet client for 64 players!" +sv_motd "DDraceNetwork - https://ddnet.tw\nDownload DDNet client for 64 players!" sv_savegames 1 sv_min_team_size 2 diff --git a/servers/runasan.sh b/servers/runasan.sh new file mode 100755 index 0000000..506244c --- /dev/null +++ b/servers/runasan.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while true; do + mv servers/$1.log servers/$1.log.old + ASAN_OPTIONS=log_path=./ASAN:print_stacktrace=1:check_initialization_order=1:detect_leaks=1:halt_on_errors=0 ni -15 2 ./DDNet-Server-asan -f servers/$1.cfg + sleep 1 +done diff --git a/servers/runubsan.sh b/servers/runubsan.sh new file mode 100755 index 0000000..b556eaf --- /dev/null +++ b/servers/runubsan.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while true; do + mv servers/$1.log servers/$1.log.old + UBSAN_OPTIONS=log_path=./UBSAN:print_stacktrace=1 ni -15 2 ./DDNet-Server-ubsan -f servers/$1.cfg + sleep 1 +done diff --git a/servers/scripts/ddnet.py b/servers/scripts/ddnet.py index 619bef8..0324b4f 100644 --- a/servers/scripts/ddnet.py +++ b/servers/scripts/ddnet.py @@ -38,7 +38,7 @@ webDir = "/var/www" htmlRanksPath = "/home/teeworlds/servers/scripts/discord-ranks.html" -countries = ["NLD", "FRA", "GER", "POL", "RUS", "TUR", "IRN", "CHL", "BRA", "ARG", "MEX", "USA", "CAN", "CHN", "KOR", "JAP", "SGP", "ZAF", "IND", "AUS", "OLD"] +countries = ["NLD", "FRA", "GER", "POL", "RUS", "TUR", "IRN", "SAU", "CHL", "BRA", "ARG", "MEX", "PER", "USA", "CAN", "CHN", "KOR", "TWN", "SGP", "ZAF", "IND", "AUS", "OLD"] pointsDict = { 'Novice': (1, 0), @@ -157,9 +157,9 @@ def textJoinNames(names): return result def joinNames(names): - result = ', '.join(names[:-1]) + result = '‭, '.join(names[:-1]) if names[-1]: - result += ' & ' + names[-1] + result += '‭ & ' + names[-1] return result def renderStars(points): @@ -503,7 +503,7 @@ def serverStatus(title): Statistics, ServerStatus - + """ % title @@ -825,7 +825,7 @@ def getRecords(cursor, startTime, endTime): cursor.execute(""" select Name, lll.Map, Time, min(lll.Timestamp), min(Type), Server, max(OldTime), Points, Country from ( -select Name, Map, Time, Timestamp, "2 Top 1 rank" as Type, (select Time from record_race where Map = l.map and Timestamp < "{0}" order by Time limit 1) as OldTime, Country from (select Timestamp, Name, Map, Time, Server as Country from record_race where Timestamp >= "{0}" and Timestamp < "{1}") as l where Time <= (select min(Time) from record_race where Map = l.Map) +select Name, Map, Time, Timestamp, "2 Top 1 rank" as Type, (select Time from record_race where Map = l.map and Timestamp < "{0}" order by Time limit 1) as OldTime, Country from (select Timestamp, Name, Map, Time, Server as Country from record_race where Timestamp >= "{0}" and Timestamp < "{1}") as l where Time <= (select min(Time) from record_race where Map = l.Map) and (Time < (select min(Time) from record_race where Map = l.Map and Timestamp < "{0}") or Name != l.Name) union all select record_teamrace.Name, record_teamrace.Map, record_teamrace.Time, record_teamrace.Timestamp, "1 Top 1 team rank" as Type, OldTime, record_race.Server as Country from (select ID, (select Time from record_teamrace where Map = l.Map and ID != l.ID and Timestamp < "{0}" order by Time limit 1) as OldTime from (select distinct ID, Map, Time from record_teamrace where Timestamp >= "{0}" and Timestamp < "{1}") as l left join (select Map, min(Time) as minTime from record_teamrace group by Map) as r on l.Map = r.Map where Time = minTime) as ll inner join record_teamrace on ll.ID = record_teamrace.ID join record_race on record_teamrace.Map = record_race.Map and record_teamrace.Name = record_race.Name and record_teamrace.Time = record_race.Time and record_teamrace.Timestamp = record_race.Timestamp union all diff --git a/servers/scripts/discord-ranks.py b/servers/scripts/discord-ranks.py index d4afa2a..1e1b3f8 100755 --- a/servers/scripts/discord-ranks.py +++ b/servers/scripts/discord-ranks.py @@ -25,15 +25,18 @@ 'COL': '๐Ÿ‡จ๐Ÿ‡ด', 'CRI': '๐Ÿ‡จ๐Ÿ‡ท', 'MEX': '๐Ÿ‡ฒ๐Ÿ‡ฝ', + 'PER': '๐Ÿ‡ต๐Ÿ‡ช', 'USA': '๐Ÿ‡บ๐Ÿ‡ธ', 'CAN': '๐Ÿ‡จ๐Ÿ‡ฆ', 'CHN': '๐Ÿ‡จ๐Ÿ‡ณ', 'KOR': '๐Ÿ‡ฐ๐Ÿ‡ท', 'JAP': '๐Ÿ‡ฏ๐Ÿ‡ต', + 'TWN': '๐Ÿ‡น๐Ÿ‡ผ', 'SGP': '๐Ÿ‡ธ๐Ÿ‡ฌ', 'ZAF': '๐Ÿ‡ฟ๐Ÿ‡ฆ', 'AUS': '๐Ÿ‡ฆ๐Ÿ‡บ', 'IND': '๐Ÿ‡ฎ๐Ÿ‡ณ', + 'SAU': '๐Ÿ‡ธ๐Ÿ‡ฆ', } htmlRanksPathTmp = "%s.%d.tmp" % (htmlRanksPath, os.getpid()) @@ -79,9 +82,9 @@ def postRecord(row, namesDiscord, namesHtml, namesTitle): with open("scripts/discord-ranks-last", 'r+') as f: startTime = parseDatetime(f.read().rstrip()) - # give mysql replication 1 minute to get the rank over to us, otherwise we + # give mysql replication 3 minutes to get the rank over to us, otherwise we # won't see it here - endTime = datetime.datetime.now() - datetime.timedelta(minutes=1) + endTime = datetime.datetime.now() - datetime.timedelta(minutes=3) f.seek(0) f.write(formatDateExact(endTime)) f.truncate() diff --git a/servers/scripts/extract-master.py b/servers/scripts/extract-master.py index 2851e73..280fff1 100755 --- a/servers/scripts/extract-master.py +++ b/servers/scripts/extract-master.py @@ -28,6 +28,8 @@ for server in j['servers']: for player in server['info'].get('clients', []): # rstrip() because some servers allow trailing spaces, ddnet doesn't, and mysql considers strings the same if only trailing space differs + if 'name' not in player or not isinstance(player['name'], unicode): + continue name = player['name'].rstrip() if name not in playersNow: players[name] += 5 diff --git a/servers/scripts/players.py b/servers/scripts/players.py index a080a82..79177df 100755 --- a/servers/scripts/players.py +++ b/servers/scripts/players.py @@ -209,7 +209,7 @@ def favoritePartners(name): skips += 1 encodedName = slugify2(u'%s' % name.encode('utf-8')) - print >>out, '%d. %s: %d ranks' % (pos, encodedName, escape(name), finishes) + print >>out, '%d. %s‭: %d ranks' % (pos, encodedName, escape(name), finishes) print >>out, '' except: @@ -279,7 +279,7 @@ def comparison(namePlayers): print >>out, '
' print >>out, '

' print >>out, '
%s
' % hiddenFields - print >>out, '' + print >>out, '' print >>out, '' print >>out, '' print >>out, '' diff --git a/servers/scripts/stats.py b/servers/scripts/stats.py index 3eec03b..670f289 100755 --- a/servers/scripts/stats.py +++ b/servers/scripts/stats.py @@ -460,7 +460,7 @@ def getRanksTyp(result, start, end): json.dump(data, tf) os.rename(tmpname, filename) -otherIncludes = ''' +otherIncludes = ''' ''' menu = """