1 | #!/bin/bash
|
---|
2 |
|
---|
3 | # Copyright 2016 Christian 'Alloc' Illy
|
---|
4 | #
|
---|
5 | # Licensed under the Apache License, Version 2.0 (the "License");
|
---|
6 | # you may not use this file except in compliance with the License.
|
---|
7 | # You may obtain a copy of the License at
|
---|
8 | #
|
---|
9 | # http://www.apache.org/licenses/LICENSE-2.0
|
---|
10 | #
|
---|
11 | # Unless required by applicable law or agreed to in writing, software
|
---|
12 | # distributed under the License is distributed on an "AS IS" BASIS,
|
---|
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
---|
14 | # See the License for the specific language governing permissions and
|
---|
15 | # limitations under the License.
|
---|
16 |
|
---|
17 |
|
---|
18 | PLAYERSXML=$(getInstancePath $1)/players.xml
|
---|
19 | PLAYERSLOG=$(getInstancePath $1)/logs/$(date '+%Y-%m-%d_%H-%M-%S')_players.log
|
---|
20 |
|
---|
21 | timestamp() {
|
---|
22 | date '+%Y.%m.%d %H:%M:%S'
|
---|
23 | }
|
---|
24 |
|
---|
25 | # Create empty player list if not existing
|
---|
26 | createPlayerList() {
|
---|
27 | if [ ! -f "$PLAYERSXML" ]; then
|
---|
28 | echo "<Players/>" > $PLAYERSXML
|
---|
29 | fi
|
---|
30 | if [ -z "$(cat $PLAYERSXML)" ]; then
|
---|
31 | echo "<Players/>" > $PLAYERSXML
|
---|
32 | fi
|
---|
33 | }
|
---|
34 |
|
---|
35 | # Set all players for an instance to offline (on startup/shutdown)
|
---|
36 | setAllPlayersOffline() {
|
---|
37 | createPlayerList
|
---|
38 | $XMLSTARLET ed -L \
|
---|
39 | -u "/Players/Player/@online" -v "false" \
|
---|
40 | "$PLAYERSXML"
|
---|
41 | rm $(getInstancePath $INSTANCE)/logs/current_players.log
|
---|
42 | ln -s $PLAYERSLOG $(getInstancePath $INSTANCE)/logs/current_players.log
|
---|
43 | }
|
---|
44 |
|
---|
45 | # Handle a player connect for logging/tracking
|
---|
46 | # Params:
|
---|
47 | # 1: Instance name
|
---|
48 | # 2: Entity ID
|
---|
49 | # 3: Steam ID
|
---|
50 | # 4: Nick name
|
---|
51 | # 5: IP
|
---|
52 | # 6: Steam Owner ID
|
---|
53 | logPlayerConnect() {
|
---|
54 | local ENTITYID="$2"
|
---|
55 | local NICKNAME="$3"
|
---|
56 | local PLATFORMID="$4"
|
---|
57 | local CROSSID="$5"
|
---|
58 | local IP="$6"
|
---|
59 | local OWNERID="$7"
|
---|
60 |
|
---|
61 | echo "$(timestamp) +++ $ENTITYID $NICKNAME $PLATFORMID $CROSSID $IP $OWNERID" >> "$PLAYERSLOG"
|
---|
62 |
|
---|
63 | createPlayerList
|
---|
64 |
|
---|
65 | XPATHBASE="/Players/Player[@platformid='$PLATFORMID']"
|
---|
66 |
|
---|
67 | if [ -z $($XMLSTARLET sel -t -v "$XPATHBASE/@platformid" "$PLAYERSXML") ]; then
|
---|
68 | $XMLSTARLET ed -L \
|
---|
69 | -s "/Players" -t elem -n "Player" -v "" \
|
---|
70 | -i "/Players/Player[not(@platformid)]" -t attr -n "platformid" -v "$PLATFORMID" \
|
---|
71 | -i "$XPATHBASE" -t attr -n "crossid" -v "$CROSSID" \
|
---|
72 | -i "$XPATHBASE" -t attr -n "nick" -v "$NICKNAME" \
|
---|
73 | -i "$XPATHBASE" -t attr -n "playtime" -v "0" \
|
---|
74 | -i "$XPATHBASE" -t attr -n "logins" -v "1" \
|
---|
75 | -i "$XPATHBASE" -t attr -n "lastlogin" -v "$(date '+%s')" \
|
---|
76 | -i "$XPATHBASE" -t attr -n "online" -v "true" \
|
---|
77 | -i "$XPATHBASE" -t attr -n "entityid" -v "$ENTITYID" \
|
---|
78 | -i "$XPATHBASE" -t attr -n "lastIp" -v "$IP" \
|
---|
79 | -i "$XPATHBASE" -t attr -n "steamOwner" -v "$OWNERID" \
|
---|
80 | "$PLAYERSXML"
|
---|
81 | else
|
---|
82 | LOGINS=$($XMLSTARLET sel -t -v "$XPATHBASE/@logins" "$PLAYERSXML")
|
---|
83 | (( LOGINS++ ))
|
---|
84 | $XMLSTARLET ed -L \
|
---|
85 | -u "$XPATHBASE/@lastlogin" -v "$(date '+%s')" \
|
---|
86 | -u "$XPATHBASE/@online" -v "true" \
|
---|
87 | -u "$XPATHBASE/@nick" -v "$NICKNAME" \
|
---|
88 | -u "$XPATHBASE/@entityid" -v "$ENTITYID" \
|
---|
89 | -u "$XPATHBASE/@logins" -v "$LOGINS" \
|
---|
90 | -u "$XPATHBASE/@lastIp" -v "$IP" \
|
---|
91 | -u "$XPATHBASE/@steamOwner" -v "$OWNERID" \
|
---|
92 | "$PLAYERSXML"
|
---|
93 | fi
|
---|
94 | }
|
---|
95 |
|
---|
96 | # Handle a player disconnect for logging/tracking
|
---|
97 | # Params:
|
---|
98 | # 1: Instance name
|
---|
99 | # 2: Entity ID
|
---|
100 | logPlayerDisconnect() {
|
---|
101 | ENTITYID="$2"
|
---|
102 |
|
---|
103 | createPlayerList
|
---|
104 |
|
---|
105 | XPATHBASE="/Players/Player[@entityid='$ENTITYID'][@online='true']"
|
---|
106 |
|
---|
107 | if [ -f $PLAYERSXML ]; then
|
---|
108 | if [ ! -z $($XMLSTARLET sel -t -v "$XPATHBASE/@platformid" "$PLAYERSXML") ]; then
|
---|
109 | NICKNAME=$($XMLSTARLET sel -t -v "$XPATHBASE/@nick" "$PLAYERSXML")
|
---|
110 | PLATFORMID=$($XMLSTARLET sel -t -v "$XPATHBASE/@platformid" "$PLAYERSXML")
|
---|
111 | CROSSID=$($XMLSTARLET sel -t -v "$XPATHBASE/@crossid" "$PLAYERSXML")
|
---|
112 | IP=$($XMLSTARLET sel -t -v "$XPATHBASE/@lastIp" "$PLAYERSXML")
|
---|
113 | OWNERID=$($XMLSTARLET sel -t -v "$XPATHBASE/@steamOwner" "$PLAYERSXML")
|
---|
114 | LOGINTIME=$($XMLSTARLET sel -t -v "$XPATHBASE/@lastlogin" "$PLAYERSXML")
|
---|
115 | PLAYTIME=$($XMLSTARLET sel -t -v "$XPATHBASE/@playtime" "$PLAYERSXML")
|
---|
116 | NOW=$(date '+%s')
|
---|
117 | PLAYTIME=$(( PLAYTIME + NOW - LOGINTIME ))
|
---|
118 | $XMLSTARLET ed -L \
|
---|
119 | -u "$XPATHBASE/@playtime" -v "$PLAYTIME" \
|
---|
120 | -u "$XPATHBASE/@online" -v "false" \
|
---|
121 | "$PLAYERSXML"
|
---|
122 | fi
|
---|
123 | fi
|
---|
124 |
|
---|
125 | echo "$(timestamp) --- $ENTITYID $NICKNAME $PLATFORMID $CROSSID" >> "$PLAYERSLOG"
|
---|
126 | }
|
---|
127 |
|
---|