From 188928c39306094d34d24614a6b7f6d9c77779f7 Mon Sep 17 00:00:00 2001 From: Braeden Sowinski Date: Sun, 22 Oct 2023 10:25:30 -0700 Subject: [PATCH] feature/ban on fireplace placement in zone --- commands/alarm.js | 3 ++- package.json | 2 +- util/AlarmsHandler.js | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/commands/alarm.js b/commands/alarm.js index e93cb23..a911a09 100644 --- a/commands/alarm.js +++ b/commands/alarm.js @@ -151,7 +151,8 @@ module.exports = { required: true, choices: [ { name: 'Ban on Entry', value: 'ban_on_entry' }, - { name: 'Ban on Kill', value: 'ban_on_kill' } + { name: 'Ban on Kill', value: 'ban_on_kill' }, + { name: 'Ban on Fireplace Placement', value: 'ban_on_fireplace_placement' }, ] }] }, diff --git a/package.json b/package.json index a2a2dcf..9ee6f95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dayzr-bot", - "version": "11.1.1", + "version": "11.2.0", "description": "A General Purpose Discord Bot for DayZ Nitrado Servers.", "main": "index.js", "nodemonConfig": { diff --git a/util/AlarmsHandler.js b/util/AlarmsHandler.js index 14238b2..250b2f5 100644 --- a/util/AlarmsHandler.js +++ b/util/AlarmsHandler.js @@ -197,6 +197,47 @@ module.exports = { } }, + PlaceFireplaceInAlarm: async (client, guildId, line) => { + + let fireplacePlacement = /(.*) \| Player \"(.*)\" \(id=(.*) pos=<(.*)>) placed Fireplace/g; + let data = [...line.matchAll(fireplacePlacement)][0]; + if (!data) return; + + let info = { + time: data[1], + victim: data[2], + victimID: data[3], + victimPOS: data[4].split(', ').map(v => parseFloat(v)), + }; + + let guild = await client.GetGuild(guildId); + + for (let i = 0; i < guild.alarms.length; i++) { + let alarm = guild.alarms[i]; + if (alarm.disabled || !alarm.rules.includes('ban_on_fireplace_placement')) continue; + if (alarm.ignoredPlayers.includes(info.playerID)) continue; + + let diff = [Math.round(alarm.origin[0] - info.playerPOS[0]), Math.round(alarm.origin[1] - info.playerPOS[1])]; + let distance = Math.sqrt(Math.pow(diff[0], 2) + Math.pow(diff[1], 2)).toFixed(2); + + if (distance < alarm.radius) { + const channel = client.GetChannel(alarm.channel); + + let newDt = await client.getDateEST(info.time); + let unixTime = Math.floor(newDt.getTime()/1000); + + let alarmEmbed = new EmbedBuilder() + .setColor(client.config.Colors.Default) + .setDescription(`**Zone Ping - **\n**${info.player}** was located within **${distance} meters** of the Zone **${alarm.name}** __and has been banned for **placing a fireplace**.__`) + .addFields({ name: '**Location**', value: `**[${info.playerPOS[0]}, ${info.playerPOS[1]}](https://www.izurvive.com/chernarusplussatmap/#location=${info.playerPOS[0]};${info.playerPOS[1]})**`, inline: false }) + + channel.send({ content: `<@&${alarm.role}>`, embeds: [alarmEmbed] }); + + BanPlayer(client, info.player); + } + } + }, + HandleEvents: async (client, guildId) => { let guild = await client.GetGuild(guildId);