From cc68bbc18067e122088bf045932f75abab290399 Mon Sep 17 00:00:00 2001 From: Thomas Smyth Date: Fri, 15 May 2020 19:09:54 +0100 Subject: [PATCH 1/5] Add missing plugin to main readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5211862e..34dfe02b 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ SquadJS relies on being able to access the Squad server log directory in order t * [Discord Admin Cam Logs](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/discord-admin-cam-logs) - Log admin cam usage to Discord. * [Discord Chat](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/discord-chat) - Log in game chat to Discord. * [Discord Teamkill](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/discord-teamkill) - Log teamkills to Discord. + * [Discord Server Status](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/discord-server-status) - Add a server status embed to Discord. * [Map Vote](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/mapvote) - In-game chat map voting system. * [InfluxDB Log](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/influxdb-log) - Log server and player stats to InfluxDB. * [MySQL Log](https://github.com/Thomas-Smyth/SquadJS/tree/master/plugins/mysql-log) - Log more in-depth server and player stats to MySQL. From 17cfe83b449c1a848ea680c3d9eea744d81bf962 Mon Sep 17 00:00:00 2001 From: Thomas Smyth Date: Fri, 15 May 2020 19:11:39 +0100 Subject: [PATCH 2/5] Specify if event is a suicide or teamkill in discord-teamkill plugin --- plugins/discord-teamkill/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/discord-teamkill/index.js b/plugins/discord-teamkill/index.js index ba358ea3..e161b5a5 100644 --- a/plugins/discord-teamkill/index.js +++ b/plugins/discord-teamkill/index.js @@ -32,7 +32,7 @@ export default async function plugin( channel.send({ embed: { - title: `Teamkill: ${info.attacker.name}`, + title: `${info.attacker.steamID === info.victim.steamID ? 'Suicide' : 'Teamkill'}: ${info.attacker.name}`, color: options.color, fields: [ { From 6a85afadf2e9aecee2783d19dd8391059839d792 Mon Sep 17 00:00:00 2001 From: Thomas Smyth Date: Fri, 15 May 2020 19:56:03 +0100 Subject: [PATCH 3/5] Fix lack of updating of server information --- squad-server/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/squad-server/index.js b/squad-server/index.js index 0c9bfe12..2dc9efda 100644 --- a/squad-server/index.js +++ b/squad-server/index.js @@ -56,14 +56,14 @@ export default class Server extends EventEmitter { this.updateInterval ); - setTimeout(async () => { + setInterval(async () => { const data = await this.rcon.getMapInfo(); this.currentLayer = data.currentLayer; this.nextLayer = data.nextLayer; this.emit(SERVER_LAYERS_UPDATED, data); }, this.updateInterval); - setTimeout(async () => { + setInterval(async () => { const data = await Gamedig.query({ type: 'squad', host: this.host, From 398f36966af2425135cadd41ba7543467c4dc708 Mon Sep 17 00:00:00 2001 From: Thomas Smyth Date: Fri, 15 May 2020 20:23:16 +0100 Subject: [PATCH 4/5] Improve admin cam usage detection --- plugins/discord-admin-cam-logs/index.js | 112 +++++++++--------- squad-server/events/log-parser.js | 19 +-- squad-server/log-parser/rules/index.js | 2 + .../log-parser/rules/player-possess.js | 8 +- .../log-parser/rules/player-un-possess.js | 21 ++++ 5 files changed, 92 insertions(+), 70 deletions(-) create mode 100644 squad-server/log-parser/rules/player-un-possess.js diff --git a/plugins/discord-admin-cam-logs/index.js b/plugins/discord-admin-cam-logs/index.js index 997b5a50..b7037d70 100644 --- a/plugins/discord-admin-cam-logs/index.js +++ b/plugins/discord-admin-cam-logs/index.js @@ -1,5 +1,5 @@ import { COPYRIGHT_MESSAGE } from 'core/config'; -import { LOG_PARSER_PLAYER_POSSESS } from 'squad-server/events/log-parser'; +import { LOG_PARSER_PLAYER_POSSESS, LOG_PARSER_PLAYER_UNPOSSESS } from 'squad-server/events/log-parser'; export default async function plugin( server, @@ -30,68 +30,68 @@ export default async function plugin( const adminsInCam = {}; server.on(LOG_PARSER_PLAYER_POSSESS, info => { - if (info.player === null) return; + if (info.player === null || info.possessClassname !== 'CameraMan') return; - if (info.possessClassname === 'CameraMan') { - adminsInCam[info.player.steamID] = info.time; + adminsInCam[info.player.steamID] = info.time; - channel.send({ - embed: { - title: `Admin Entered Admin Camera`, - color: options.color, - fields: [ - { - name: "Admin's Name", - value: info.player.name, - inline: true - }, - { - name: "Admin's SteamID", - value: `[${info.player.steamID}](https://steamcommunity.com/profiles/${info.player.steamID})`, - inline: true - } - ], - timestamp: info.time.toISOString(), - footer: { - text: COPYRIGHT_MESSAGE + channel.send({ + embed: { + title: `Admin Entered Admin Camera`, + color: options.color, + fields: [ + { + name: "Admin's Name", + value: info.player.name, + inline: true + }, + { + name: "Admin's SteamID", + value: `[${info.player.steamID}](https://steamcommunity.com/profiles/${info.player.steamID})`, + inline: true } + ], + timestamp: info.time.toISOString(), + footer: { + text: COPYRIGHT_MESSAGE } - }); - } else { - if (!(info.player.steamID in adminsInCam)) return; + } + }); + }); + + server.on(LOG_PARSER_PLAYER_UNPOSSESS, info => { + if (info.switchPossess === true || !(info.player.steamID in adminsInCam)) return; - channel.send({ - embed: { - title: `Admin Left Admin Camera`, - color: options.color, - fields: [ - { - name: "Admin's Name", - value: info.player.name, - inline: true - }, - { - name: "Admin's SteamID", - value: `[${info.player.steamID}](https://steamcommunity.com/profiles/${info.player.steamID})`, - inline: true - }, - { - name: 'Time in Admin Camera', - value: `${Math.round( - (info.time.getTime() - - adminsInCam[info.player.steamID].getTime()) / - 60000 - )} mins` - } - ], - timestamp: info.time.toISOString(), - footer: { - text: COPYRIGHT_MESSAGE + channel.send({ + embed: { + title: `Admin Left Admin Camera`, + color: options.color, + fields: [ + { + name: "Admin's Name", + value: info.player.name, + inline: true + }, + { + name: "Admin's SteamID", + value: `[${info.player.steamID}](https://steamcommunity.com/profiles/${info.player.steamID})`, + inline: true + }, + { + name: 'Time in Admin Camera', + value: `${Math.round( + (info.time.getTime() - + adminsInCam[info.player.steamID].getTime()) / + 60000 + )} mins` } + ], + timestamp: info.time.toISOString(), + footer: { + text: COPYRIGHT_MESSAGE } - }); + } + }); - delete adminsInCam[info.player.steamID]; - } + delete adminsInCam[info.player.steamID]; }); } diff --git a/squad-server/events/log-parser.js b/squad-server/events/log-parser.js index d0e28a84..e6d338d4 100644 --- a/squad-server/events/log-parser.js +++ b/squad-server/events/log-parser.js @@ -1,11 +1,3 @@ -/** Occurs when an admin enters admin camera. - * - * Data: - * - time - Date object of when the event occurred. - * - player - PlayerObject of the admin. - */ -const LOG_PARSER_ADMIN_POSSESS_CAMERA = 'LOG_PARSER_ADMIN_POSSESS_CAMERA'; - /** Occurs when a new layer is loaded. * * Data: @@ -75,6 +67,15 @@ const LOG_PARSER_PLAYER_POSSESS = 'LOG_PARSER_PLAYER_POSSESS'; */ const LOG_PARSER_PLAYER_REVIVED = 'LOG_PARSER_PLAYER_REVIVED'; +/** Occurs when a player unpossess an object. + * + * Data: + * - time - Date object of when the event occurred. + * - player - PlayerObject of the admin. + * - switchPossess - True if switching a possess. + */ +const LOG_PARSER_PLAYER_UNPOSSESS = 'LOG_PARSER_PLAYER_UNPOSSESS'; + /** Occurs when a player is teamkilled. * * Data: @@ -110,13 +111,13 @@ const LOG_PARSER_PLAYER_WOUNDED = 'LOG_PARSER_PLAYER_WOUNDED'; const LOG_PARSER_SERVER_TICK_RATE = 'LOG_PARSER_SERVER_TICK_RATE'; export { - LOG_PARSER_ADMIN_POSSESS_CAMERA, LOG_PARSER_NEW_GAME, LOG_PARSER_PLAYER_CONNECTED, LOG_PARSER_PLAYER_DAMAGED, LOG_PARSER_PLAYER_DIED, LOG_PARSER_PLAYER_POSSESS, LOG_PARSER_PLAYER_REVIVED, + LOG_PARSER_PLAYER_UNPOSSESS, LOG_PARSER_TEAMKILL, LOG_PARSER_PLAYER_WOUNDED, LOG_PARSER_SERVER_TICK_RATE diff --git a/squad-server/log-parser/rules/index.js b/squad-server/log-parser/rules/index.js index 8f904b94..85cb483a 100644 --- a/squad-server/log-parser/rules/index.js +++ b/squad-server/log-parser/rules/index.js @@ -4,6 +4,7 @@ import PlayerDamaged from './player-damaged.js'; import PlayerDied from './player-died.js'; import PlayerPossess from './player-possess.js'; import PlayerRevived from './player-revived.js'; +import PlayerUnPossess from './player-un-possess.js'; import PlayerWounded from './player-wounded.js'; import ServerTickRate from './server-tick-rate.js'; import SteamIDConnected from './steamid-connected.js'; @@ -15,6 +16,7 @@ export default [ PlayerDied, PlayerPossess, PlayerRevived, + PlayerUnPossess, PlayerWounded, ServerTickRate, SteamIDConnected diff --git a/squad-server/log-parser/rules/player-possess.js b/squad-server/log-parser/rules/player-possess.js index 3903daf1..c8ed5cf7 100644 --- a/squad-server/log-parser/rules/player-possess.js +++ b/squad-server/log-parser/rules/player-possess.js @@ -1,6 +1,5 @@ import { - LOG_PARSER_PLAYER_POSSESS, - LOG_PARSER_ADMIN_POSSESS_CAMERA + LOG_PARSER_PLAYER_POSSESS } from '../../events/log-parser.js'; export default { @@ -14,9 +13,8 @@ export default { possessClassname: args[4] }; - logParser.server.emit(LOG_PARSER_PLAYER_POSSESS, data); + logParser.eventStore[args[3]] = args[2]; - if (data.possessClassname === 'CameraMan') - logParser.server.emit(LOG_PARSER_ADMIN_POSSESS_CAMERA, data); + logParser.server.emit(LOG_PARSER_PLAYER_POSSESS, data); } }; diff --git a/squad-server/log-parser/rules/player-un-possess.js b/squad-server/log-parser/rules/player-un-possess.js new file mode 100644 index 00000000..ac892165 --- /dev/null +++ b/squad-server/log-parser/rules/player-un-possess.js @@ -0,0 +1,21 @@ +import { + LOG_PARSER_PLAYER_UNPOSSESS +} from '../../events/log-parser.js'; + +export default { + regex: /^\[([0-9.:-]+)]\[([ 0-9]*)]LogSquadTrace: \[DedicatedServer](?:ASQPlayerController::)OnUnPossess\(\): PC=(.+)/, + onMatch: async (args, logParser) => { + const data = { + raw: args[0], + time: args[1], + chainID: args[2], + player: await logParser.server.getPlayerByName(args[3], true), + switchPossess: false + }; + + if(args[3] in logParser.eventStore && logParser.eventStore[args[3]] === args[2]) data.switchPossess = true; + delete logParser.eventStore[args[3]]; + + logParser.server.emit(LOG_PARSER_PLAYER_UNPOSSESS, data); + } +}; From e2543b3e3b97d6f3ce7db2a9afe4c41f0d1fd38a Mon Sep 17 00:00:00 2001 From: Thomas Smyth Date: Fri, 15 May 2020 20:32:51 +0100 Subject: [PATCH 5/5] SquadJS v1.0.1 Release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b732eec1..bb09ea8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "SquadJS", - "version": "1.0.0", + "version": "1.0.1", "repository": "https://github.com/Thomas-Smyth/SquadJS.git", "author": "Thomas Smyth ", "license": "MIT",