5.2.2.4 dev v4 alarm manager data processing change
This commit is contained in:
3 files changed
+246
-77
No files matched your search
+5
-3
@@ -20,10 +20,12 @@ module.exports = {
|
|||||||
* @param {*} param3
|
* @param {*} param3
|
||||||
*/
|
*/
|
||||||
run: async (client, interaction, args, { GuildDB }, start) => {
|
run: async (client, interaction, args, { GuildDB }, start) => {
|
||||||
|
|
||||||
client.updateLogs()
|
|
||||||
|
|
||||||
return interaction.send({ content: 'debugging...' })
|
let alarmEmbed = new EmbedBuilder()
|
||||||
|
.setDescription('test des.')
|
||||||
|
.addFields({ name: 'Test Field', value: `[Test Data](https://www.izurvive.com/chernarusplussatmap/#location=11467.6;7452)`, inline: false })
|
||||||
|
|
||||||
|
return interaction.send({ embeds: [alarmEmbed] });
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "dayz-armbands",
|
"name": "dayz-armbands",
|
||||||
"version": "5.2.0.1",
|
"version": "5.2.2.4",
|
||||||
"description": "A General Purpose Discord Bot for DayZ Servers.",
|
"description": "A General Purpose Discord Bot for DayZ Servers.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"nodemonConfig": {
|
"nodemonConfig": {
|
||||||
|
|||||||
+240
-73
@@ -108,8 +108,234 @@ class DayzArmbands extends Client {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async killfeed(guildId) {
|
async handleKillfeed(guildId, line) {
|
||||||
|
|
||||||
|
let guild = await this.GetGuild(guildId);
|
||||||
|
if (guild.playerstats == undefined) guild.playerstats = [];
|
||||||
|
const channel = this.channels.cache.get(guild.killfeedChannel);
|
||||||
|
let template = /(.*) \| Player \"(.*)\" \(DEAD\) \(id=(.*) pos=<(.*)>\)\[HP\: 0\] hit by Player \"(.*)\" \(id=(.*) pos=<(.*)>\) into (.*) for (.*) damage \((.*)\) with (.*) from (.*) meters /g;
|
||||||
|
let data = [...line.matchAll(template)][0];
|
||||||
|
|
||||||
|
let info = {
|
||||||
|
time: data[1],
|
||||||
|
victim: data[2],
|
||||||
|
victimID: data[3],
|
||||||
|
victimPOS: data[4],
|
||||||
|
killer: data[5],
|
||||||
|
killerID: data[6],
|
||||||
|
killerPOS: data[7],
|
||||||
|
bodyPart: data[8],
|
||||||
|
damage: data[9],
|
||||||
|
bullet: data[10],
|
||||||
|
weapon: data[11],
|
||||||
|
distance: data[12]
|
||||||
|
};
|
||||||
|
|
||||||
|
let killerStat = guild.playerstats.find(stat => stat.playerID == info.killerID)
|
||||||
|
let victimStat = guild.playerstats.find(stat => stat.playerID == info.victimID)
|
||||||
|
let killerStatIndex = guild.playerstats.indexOf(killerStat);
|
||||||
|
let victimStatIndex = guild.playerstats.indexOf(victimStat);
|
||||||
|
if (killerStat == undefined) killerStat = this.getDefaultPlayerStats(info.killer, info.killerID);
|
||||||
|
if (victimStat == undefined) victimStat = this.getDefaultPlayerStats(info.victim, info.victimID);
|
||||||
|
|
||||||
|
killerStat.kills++;
|
||||||
|
killerStat.killStreak++;
|
||||||
|
killerStat.bestKillStreak = killerStat.killStreak > killerStat.bestKillStreak ? killerStat.killStreak : killerStat.bestKillStreak;
|
||||||
|
victimStat.deaths++;
|
||||||
|
victimStat.deathStreak++;
|
||||||
|
victimStat.worstDeathStreak = victimStat.deathStreak > victimStat.worstDeathStreak ? victimStat.deathStreak : victimStat.bestKillStreak;
|
||||||
|
killerStat.KDR = killerStat.kills / (killerStat.deaths == 0 ? 1 : killerStat.deaths); // prevent division by 0
|
||||||
|
victimStat.KDR = victimStat.kills / (victimStat.deaths == 0 ? 1 : victimStat.deaths); // prevent division by 0
|
||||||
|
if (victimStat.killStreak>0) victimStat.killStreak = 0;
|
||||||
|
if (killerStat.deathStreak>0) killerStat.deathStreak = 0;
|
||||||
|
|
||||||
|
if (killerStatIndex == -1) guild.playerstats.push(killerStat);
|
||||||
|
else guild.playerstats[killerStatIndex] = killerStat;
|
||||||
|
if (victimStatIndex == -1) guild.playerstats.push(victimStat);
|
||||||
|
else guild.playerstats[victimStatIndex] = victimStat;
|
||||||
|
|
||||||
|
this.dbo.collection("guilds").updateOne({ "server.serverID": guild.serverID }, {
|
||||||
|
$set: {
|
||||||
|
"server.playerstats": guild.playerstats
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
let today = new Date();
|
||||||
|
let newDt = new Date(`${today.toLocaleDateString('default', { month: 'long' })} ${today.getDate()}, ${today.getFullYear()} ${info.time} EST`)
|
||||||
|
let unixTime = Math.floor(newDt.getTime()/1000);
|
||||||
|
|
||||||
|
const killEvent = new EmbedBuilder()
|
||||||
|
.setColor(this.config.Colors.Default)
|
||||||
|
.setDescription(`**Kill Event** - <t:${unixTime}>\n**${info.killer}** killed **${info.victim}**\n> **__Kill Data__**\n> **Weapon:** \` ${info.weapon} \`\n> **Distance:** \` ${info.distance} \`\n> **Body Part:** \` ${info.bodyPart.split('(')[0]} \`\n> **Damage:** \` ${info.damage} \`\n **Killer\n${killerStat.KDR} K/D - ${killerStat.kills} Kills - Killstreak: ${killerStat.killStreak}\nVictim\n${victimStat.KDR} K/D - ${victimStat.deaths} Deaths - Deathstreak: ${victimStat.deathStreak}**`);
|
||||||
|
|
||||||
|
if (this.exists(channel)) channel.send({ embeds: [killEvent] });
|
||||||
|
}
|
||||||
|
|
||||||
|
async handleAlarms(guildId, data) {
|
||||||
|
let guild = await this.GetGuild(guildId);
|
||||||
|
|
||||||
|
for (let i = 0; i < guild.alarms.length; i++) {
|
||||||
|
let alarm = guild.alarms[i];
|
||||||
|
|
||||||
|
let diff = [Math.round(alarm.origin[0] - data.pos[0]), Math.round(alarm.origin[1] - data.pos[1])];
|
||||||
|
let distance = Math.sqrt(Math.pow(diff[0], 2) + Math.pow(diff[1], 2)).toFixed(2)
|
||||||
|
|
||||||
|
if (distance < alarm.radius) {
|
||||||
|
const channel = this.channels.cache.get(alarm.channel);
|
||||||
|
|
||||||
|
let today = new Date();
|
||||||
|
let newDt = new Date(`${today.toLocaleDateString('default', { month: 'long' })} ${today.getDate()}, ${today.getFullYear()} ${data.time} EST`);
|
||||||
|
let unixTime = Math.floor(newDt.getTime()/1000);
|
||||||
|
|
||||||
|
let alarmEmbed = new EmbedBuilder()
|
||||||
|
.setColor(this.config.Colors.Default)
|
||||||
|
.setDescription(`**Zone Ping - <t:${unixTime}>**\n**${data.player}** was located within **${distance} meters** of the Zone **${alarm.name}**`)
|
||||||
|
.addFields({ name: '**Location**', value: `**[${data.pos[0]}, ${data.pos[1]}](https://www.izurvive.com/chernarusplussatmap/#location=${data.pos[0]};${data.pos[1]})**`, inline: false })
|
||||||
|
|
||||||
|
channel.send({ content: `<@&${alarm.role}>`, embeds: [alarmEmbed] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async sendConnectionLogs(guildId, data) {
|
||||||
|
|
||||||
|
let guild = await this.GetGuild(guildId);
|
||||||
|
if (!this.exists(guild.connectionLogsChannel)) return;
|
||||||
|
const channel = this.channels.cache.get(guild.connectionLogsChannel);
|
||||||
|
|
||||||
|
let today = new Date();
|
||||||
|
let newDt = new Date(`${today.toLocaleDateString('default', { month: 'long' })} ${today.getDate()}, ${today.getFullYear()} ${data.time} EST`);
|
||||||
|
let unixTime = Math.floor(newDt.getTime()/1000);
|
||||||
|
|
||||||
|
let connectionLog = new EmbedBuilder()
|
||||||
|
.setColor(data.connected ? this.config.Colors.Green : this.config.Colors.Red)
|
||||||
|
.setDescription(`**${data.connected ? 'Connect' : 'Disconnect'} Event - <t:${unixTime}>\n${data.player} ${data.connected ? 'Connected' : 'Disconnected'}**`);
|
||||||
|
|
||||||
|
if (!data.connected) {
|
||||||
|
if (!data.lastConnectionDate == null) {
|
||||||
|
let oldUnixTime = Math.floor(data.lastConnectionDate.getTime()/1000);
|
||||||
|
let sessionTime = this.secondsToDhms(unixTime - oldUnixTime);
|
||||||
|
connectionLog.addFields({ name: '**Session Time**', value: `**${sessionTime}**`, inline: false });
|
||||||
|
} else connectionLog.addFields({ name: '**Session Time**', value: `**Unknown**`, inline: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.exists(channel)) channel.send({ embeds: [connectionLog] });
|
||||||
|
}
|
||||||
|
|
||||||
|
async handlePlayerLogs(guildId, line) {
|
||||||
|
|
||||||
|
let guild = await this.GetGuild(guildId);
|
||||||
|
if (guild.playerstats == undefined) guild.playerstats = [];
|
||||||
|
|
||||||
|
const connectTemplate = /(.*) \| Player \"(.*)\" is connected \(id=(.*)\)/g;
|
||||||
|
const disconnectTemplate = /(.*) \| Player \"(.*)\"\(id=(.*)\) has been disconnected/g;
|
||||||
|
const positionTemplate = /(.*) \| Player \"(.*)\" \(id=(.*) pos=<(.*)>\)/g;
|
||||||
|
|
||||||
|
if (line.includes('connected')) {
|
||||||
|
let data = [...line.matchAll(connectTemplate)][0];
|
||||||
|
|
||||||
|
let info = {
|
||||||
|
time: data[1],
|
||||||
|
player: data[2],
|
||||||
|
playerID: data[3],
|
||||||
|
connected: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
let playerStat = guild.playerstats.find(stat => stat.playerID == info.playerID)
|
||||||
|
let playerStatIndex = guild.playerstats.indexOf(playerStat);
|
||||||
|
if (playerStat == undefined) playerStat = this.getDefaultPlayerStats(info.player, info.playerID);
|
||||||
|
|
||||||
|
let today = new Date();
|
||||||
|
let newDt = new Date(`${today.toLocaleDateString('default', { month: 'long' })} ${today.getDate()}, ${today.getFullYear()} ${info.time} EST`);
|
||||||
|
|
||||||
|
playerStat.lastConnectionDate = newDt;
|
||||||
|
playerStat.connected = true;
|
||||||
|
|
||||||
|
if (playerStatIndex == -1) guild.playerstats.push(playerStat);
|
||||||
|
else guild.playerstats[playerStatIndex] = playerStat;
|
||||||
|
|
||||||
|
this.dbo.collection("guilds").updateOne({ "server.serverID": guildId }, {
|
||||||
|
$set: {
|
||||||
|
"server.playerstats": guild.playerstats
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.sendConnectionLogs(guildId, {
|
||||||
|
time: info.time,
|
||||||
|
player: info.player,
|
||||||
|
conected: info.connected,
|
||||||
|
lastConnectionDate: null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.includes('disconnected')) {
|
||||||
|
let data = [...line.matchAll(disconnectTemplate)][0];
|
||||||
|
|
||||||
|
let info = {
|
||||||
|
time: data[1],
|
||||||
|
player: data[2],
|
||||||
|
playerID: data[3],
|
||||||
|
connected: false
|
||||||
|
}
|
||||||
|
|
||||||
|
let playerStat = guild.playerstats.find(stat => stat.playerID == info.playerID)
|
||||||
|
let playerStatIndex = guild.playerstats.indexOf(playerStat);
|
||||||
|
if (playerStat == undefined) playerStat = this.getDefaultPlayerStats(info.player, info.playerID);
|
||||||
|
|
||||||
|
playerStat.connected = false;
|
||||||
|
|
||||||
|
if (playerStatIndex == -1) guild.playerstats.push(playerStat);
|
||||||
|
else guild.playerstats[playerStatIndex] = playerStat;
|
||||||
|
|
||||||
|
this.dbo.collection("guilds").updateOne({ "server.serverID": guildId }, {
|
||||||
|
$set: {
|
||||||
|
"server.playerstats": guild.playerstats
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.sendConnectionLogs(guildId, {
|
||||||
|
time: info.time,
|
||||||
|
player: info.player,
|
||||||
|
conected: info.connected,
|
||||||
|
lastConnectionDate: playerStat.lastConnectionDate,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.includes('pos=<')) {
|
||||||
|
let data = [...line.matchAll(positionTemplate)][0];
|
||||||
|
|
||||||
|
let info = {
|
||||||
|
time: data[1],
|
||||||
|
player: data[2],
|
||||||
|
playerID: data[3],
|
||||||
|
pos: data[4].split(', ').map(v => parseFloat(v)).pop()
|
||||||
|
};
|
||||||
|
|
||||||
|
let playerStat = guild.playerstats.find(stat => stat.playerID == info.playerID)
|
||||||
|
let playerStatIndex = guild.playerstats.indexOf(playerStat);
|
||||||
|
if (playerStat == undefined) playerStat = this.getDefaultPlayerStats(info.player, info.playerID);
|
||||||
|
|
||||||
|
playerStat.pos = info.pos;
|
||||||
|
|
||||||
|
this.handleAlarms(guildId, {
|
||||||
|
time: info.time,
|
||||||
|
player: info.player,
|
||||||
|
playerID: info.playerID,
|
||||||
|
pos: info.pos,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (playerStatIndex == -1) guild.playerstats.push(playerStat);
|
||||||
|
else guild.playerstats[playerStatIndex] = playerStat;
|
||||||
|
|
||||||
|
this.dbo.collection("guilds").updateOne({ "server.serverID": guildId }, {
|
||||||
|
$set: {
|
||||||
|
"server.playerstats": guild.playerstats
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async readLogs() {
|
||||||
const fileStream = fs.createReadStream('./logs/server-logs.ADM');
|
const fileStream = fs.createReadStream('./logs/server-logs.ADM');
|
||||||
|
|
||||||
let logHistoryDir = path.join(__dirname, '..', 'logs', 'history-logs.ADM.json');
|
let logHistoryDir = path.join(__dirname, '..', 'logs', 'history-logs.ADM.json');
|
||||||
@@ -129,86 +355,20 @@ class DayzArmbands extends Client {
|
|||||||
let lines = [];
|
let lines = [];
|
||||||
for await (const line of rl) { lines.push(line); }
|
for await (const line of rl) { lines.push(line); }
|
||||||
|
|
||||||
const channel = this.channels.cache.get('993272430342721597');
|
|
||||||
let guild = await this.GetGuild(guildId);
|
|
||||||
if (guild.playerstats == undefined) guild.playerstats = [];
|
|
||||||
|
|
||||||
console.log(guild.playerstats)
|
|
||||||
|
|
||||||
for (let i = lines.indexOf(history.lastLog) + 1; i < lines.length; i++) {
|
for (let i = lines.indexOf(history.lastLog) + 1; i < lines.length; i++) {
|
||||||
if (i == lines.length - 1) break;
|
if (lines[i].includes('connected') || lines[i].includes('disconnected') || lines[i].includes('pos=<')) this.handlePlayerLogs(guildId, lines[i]);
|
||||||
let nextLine = lines[i + 1];
|
if (!(i + 1 >= lines.length) && lines[i + 1].includes('killed by Player')) this.handleKillfeed(guildId, lines[i]);
|
||||||
if (!nextLine.includes('killed by Player')) continue;
|
|
||||||
|
|
||||||
let line = lines[i];
|
|
||||||
let template = /(.*) \| Player \"(.*)\" \(DEAD\) \(id=(.*) pos=<(.*)>\)\[HP\: 0\] hit by Player \"(.*)\" \(id=(.*) pos=<(.*)>\) into (.*) for (.*) damage \((.*)\) with (.*) from (.*) meters /g;
|
|
||||||
let data = [...line.matchAll(template)][0];
|
|
||||||
|
|
||||||
let info = {
|
|
||||||
time: data[1],
|
|
||||||
victim: data[2],
|
|
||||||
victimID: data[3],
|
|
||||||
victimPOS: data[4],
|
|
||||||
killer: data[5],
|
|
||||||
killerID: data[6],
|
|
||||||
killerPOS: data[7],
|
|
||||||
bodyPart: data[8],
|
|
||||||
damage: data[9],
|
|
||||||
bullet: data[10],
|
|
||||||
weapon: data[11],
|
|
||||||
distance: data[12]
|
|
||||||
};
|
|
||||||
|
|
||||||
let killerStat = guild.playerstats.find(stat => stat.gamertag == info.killer)
|
|
||||||
let victimStat = guild.playerstats.find(stat => stat.gamertag == info.victim)
|
|
||||||
let killerStatIndex = guild.playerstats.indexOf(killerStat);
|
|
||||||
let victimStatIndex = guild.playerstats.indexOf(victimStat);
|
|
||||||
if (killerStat == undefined) killerStat = this.getDefaultPlayerStats(info.killer);
|
|
||||||
if (victimStat == undefined) victimStat = this.getDefaultPlayerStats(info.victim);
|
|
||||||
|
|
||||||
killerStat.kills++;
|
|
||||||
killerStat.killStreak++;
|
|
||||||
killerStat.bestKillStreak = killerStat.killStreak > killerStat.bestKillStreak ? killerStat.killStreak : killerStat.bestKillStreak;
|
|
||||||
victimStat.deaths++;
|
|
||||||
victimStat.deathStreak++;
|
|
||||||
victimStat.worstDeathStreak = victimStat.deathStreak > victimStat.worstDeathStreak ? victimStat.deathStreak : victimStat.bestKillStreak;
|
|
||||||
killerStat.KDR = killerStat.kills / (killerStat.deaths == 0 ? 1 : killerStat.deaths); // prevent division by 0
|
|
||||||
victimStat.KDR = victimStat.kills / (victimStat.deaths == 0 ? 1 : victimStat.deaths); // prevent division by 0
|
|
||||||
if (victimStat.killStreak>0) victimStat.killStreak = 0;
|
|
||||||
if (killerStat.deathStreak>0) killerStat.deathStreak = 0;
|
|
||||||
|
|
||||||
if (killerStatIndex == -1) guild.playerstats.push(killerStat);
|
|
||||||
else guild.playerstats[killerStatIndex] = killerStat;
|
|
||||||
if (victimStatIndex == -1) guild.playerstats.push(victimStat);
|
|
||||||
else guild.playerstats[victimStatIndex] = victimStat;
|
|
||||||
|
|
||||||
this.dbo.collection("guilds").updateOne({ "server.serverID": guild.serverID }, {
|
|
||||||
$set: {
|
|
||||||
"server.playerstats": guild.playerstats
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
var today = new Date();
|
|
||||||
let newDt = new Date(`${today.toLocaleDateString('default', { month: 'long' })} ${today.getDate()}, ${today.getFullYear()} ${info.time} EST`)
|
|
||||||
let unixTime = Math.floor(newDt.getTime()/1000);
|
|
||||||
|
|
||||||
const killEvent = new EmbedBuilder()
|
|
||||||
.setColor(this.config.Colors.Default)
|
|
||||||
.setDescription(`**Kill Event** - <t:${unixTime}>\n**${info.killer}** killed **${info.victim}**\n> **__Kill Data__**\n> **Weapon:** \` ${info.weapon} \`\n> **Distance:** \` ${info.distance} \`\n> **Body Part:** \` ${info.bodyPart.split('(')[0]} \`\n> **Damage:** \` ${info.damage} \`\n **Killer\n${killerStat.KDR} K/D - ${killerStat.kills} Kills - Killstreak: ${killerStat.killStreak}\nVictim\n${victimStat.KDR} K/D - ${victimStat.deaths} Deaths - Deathstreak: ${victimStat.deathStreak}**`);
|
|
||||||
|
|
||||||
channel.send({ embeds: [killEvent] });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (history.lastLog == null) history.lastLog = lines[lines.length-1];
|
history.lastLog = lines[lines.length-1];
|
||||||
|
|
||||||
// write JSON string to a file
|
// write JSON string to a file
|
||||||
await fs.writeFileSync(logHistoryDir, JSON.stringify(history));
|
await fs.writeFileSync(logHistoryDir, JSON.stringify(history));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async logsUpdateTimer() {
|
async logsUpdateTimer() {
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
this.killfeed('992982520591294524');
|
this.readLogs('992982520591294524');
|
||||||
// await this.updateLogs().then(() => {
|
// await this.updateLogs().then(() => {
|
||||||
// this.guilds.cache.forEach((guild) => {
|
// this.guilds.cache.forEach((guild) => {
|
||||||
// this.killfeed(guild.id); // Check logs for killfeed
|
// this.killfeed(guild.id); // Check logs for killfeed
|
||||||
@@ -217,7 +377,7 @@ class DayzArmbands extends Client {
|
|||||||
// });
|
// });
|
||||||
// });
|
// });
|
||||||
this.logsUpdateTimer(); // restart this function
|
this.logsUpdateTimer(); // restart this function
|
||||||
}, minute * 0.5); // restart every 5 minutes
|
}, minute * 5); // restart every 5 minutes
|
||||||
}
|
}
|
||||||
|
|
||||||
async connectMongo(mongoURI, dbo) {
|
async connectMongo(mongoURI, dbo) {
|
||||||
@@ -344,17 +504,21 @@ class DayzArmbands extends Client {
|
|||||||
return {
|
return {
|
||||||
serverID: GuildId,
|
serverID: GuildId,
|
||||||
allowedChannels: [],
|
allowedChannels: [],
|
||||||
|
killfeedChannel: "",
|
||||||
|
connectionLogsChannel: "",
|
||||||
factionArmbands: {},
|
factionArmbands: {},
|
||||||
usedArmbands: [],
|
usedArmbands: [],
|
||||||
excludedRoles: [],
|
excludedRoles: [],
|
||||||
botAdminRoles: [],
|
botAdminRoles: [],
|
||||||
playerstats: [],
|
playerstats: [],
|
||||||
|
alarms: [],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getDefaultPlayerStats(gt) {
|
getDefaultPlayerStats(gt, pID) {
|
||||||
return {
|
return {
|
||||||
gamertag: gt,
|
gamertag: gt,
|
||||||
|
playerID: pID,
|
||||||
KDR: 0.00,
|
KDR: 0.00,
|
||||||
kills: 0,
|
kills: 0,
|
||||||
deaths: 0,
|
deaths: 0,
|
||||||
@@ -362,6 +526,9 @@ class DayzArmbands extends Client {
|
|||||||
bestKillStreak: 0,
|
bestKillStreak: 0,
|
||||||
deathStreak: 0,
|
deathStreak: 0,
|
||||||
worstDeathStreak: 0,
|
worstDeathStreak: 0,
|
||||||
|
pos: [],
|
||||||
|
lastConnectionDate: null,
|
||||||
|
connected: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user