diff --git a/SOURCES/main/kf2-srv b/SOURCES/main/kf2-srv
index f59fb8e..0ed06e9 100755
--- a/SOURCES/main/kf2-srv
+++ b/SOURCES/main/kf2-srv
@@ -43,7 +43,7 @@ readonly InstanceConfigTemplate="/etc/kf2-srv/instance.conf.template"
readonly AppServerNum="232130"
readonly AppClientNum="232090"
-readonly StrangeConstUID="17825793"
+readonly SteamConstB='17825793'
readonly ServerBotLogin="srvbot"
declare -a DiffNames
diff --git a/SOURCES/main/lib/ban.lib b/SOURCES/main/lib/ban.lib
index 24d136b..17be557 100644
--- a/SOURCES/main/lib/ban.lib
+++ b/SOURCES/main/lib/ban.lib
@@ -108,7 +108,7 @@ function ban_ID3 () # $1: ID3
do
(
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini"
- local BanStr="(Uid=(A=$ID3,B=$StrangeConstUID))"
+ local BanStr="(Uid=(A=$ID3,B=$SteamConstB))"
local Service=$(service_name "$Instance")
if ! multini -gq "$Config" "Engine.AccessControl" "BannedIDs" "$BanStr"; then
echo "Add ban $ID3 to $Instance"
@@ -137,7 +137,7 @@ function unban_ID3 () # $1: ID3
do
(
local Config="$InstanceConfigDir/$Instance/LinuxServer-KFGame.ini"
- local BanStr="(Uid=(A=$ID3,B=$StrangeConstUID))"
+ local BanStr="(Uid=(A=$ID3,B=$SteamConstB))"
local Service=$(service_name "$Instance")
if systemctl -q is-active $Service ; then
local PlainID=0
diff --git a/SOURCES/main/lib/playerids.lib b/SOURCES/main/lib/playerids.lib
index 1443fcc..5d50069 100644
--- a/SOURCES/main/lib/playerids.lib
+++ b/SOURCES/main/lib/playerids.lib
@@ -19,35 +19,42 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-# conversion algorithm taken from here:
-# https://github.com/noobient/killinuxfloor/blob/master/share/killinuxfloor
-# thank bviktor for that :)
-function steamID3_to_steamID64 () # $1: ID3
+# WARNING:
+# Conversion works correctly for positive A/B for EGS,
+# but still gives incorrect results if there are negative ones
+
+function steamID3_to_steamID64 () # $1: ID3 (A), $2: B
{
- # steamID64 = "7656" + (steamID3 + 1197960265728)
- ID64=$1
- ((ID64+=1197960265728))
- ID64="7656${ID64}"
- echo "$ID64"
+ local ID3="$1"
+ if [[ -z $2 ]]; then
+ local B="$SteamConstB"
+ else
+ local B="$2"
+ fi
+
+ # SteamID64=B*2^32+SteamID3
+ echo $(($B*(2**32)+$ID3))
}
-function steamID64_to_steamID3 () # $1: ID4
+function steamID64_to_steamID3 () # $1: ID64, $2: B
{
- # steamID3 = substr(steamID64, 4) - 1197960265728
- ID3=${1:4}
- ((ID3-=1197960265728))
- echo "$ID3"
+ local ID64="$1"
+ if [[ -z $2 ]]; then
+ local B="$SteamConstB"
+ else
+ local B="$2"
+ fi
+
+ # SteamID3=SteamID64-B*2^32
+ echo $(($ID64-$B*(2**32)))
}
function any_to_ID3 () # $1: ID3/ID64/Url
{
if echo "$1" | grep -qP '^http.+'; then
- local Xml=$(mktemp)
- curl -ss "$1/?xml=1" > "$Xml"
- local ID64=$(xmllint --xpath 'string(//steamID64/text())' "$Xml")
+ local ID64=$(curl -ss "$1/?xml=1" | xmllint --xpath 'string(//steamID64/text())' -)
local ID3=$(steamID64_to_steamID3 "$ID64")
- rm -f "$Xml"
- elif [[ $(echo "$1" | wc -m) -eq 18 ]] && echo "$1" | grep -qP '^76561[0-9]+' ; then
+ elif [[ $(echo "$1" | wc -m) -eq 18 ]] && echo "$1" | grep -qP '^7656[0-9]+' ; then
local ID3=$(steamID64_to_steamID3 "$1")
else
local ID3="$1"
diff --git a/SPECS/kf2-srv.spec b/SPECS/kf2-srv.spec
index 95fa527..761ae09 100644
--- a/SPECS/kf2-srv.spec
+++ b/SPECS/kf2-srv.spec
@@ -1,7 +1,7 @@
%global steamuser steam
Name: kf2-srv
-Version: 0.15.3
+Version: 0.15.4
Release: 1%{dist}
Summary: Killing Floor 2 server
Group: Amusements/Games
@@ -101,6 +101,9 @@ if [[ $1 == 1 ]]; then # Install
fi
%changelog
+* Sat Aug 15 2020 GenZmeY - 0.15.4-1
+- replaced steamID3/steamID64 conversation algorithm.
+
* Sat Aug 15 2020 GenZmeY - 0.15.3-1
- fix 'find: Failed to restore initial working directory'.