Пример #1
0
        public static bool Prefix(CheaterReport __instance, GameConsoleTransmission reporter, string reporterSteamId,
                                  string reportedSteamId, string reportedAuth, string reportedIp, string reporterAuth, string reporterIp,
                                  ref string reason, ref byte[] signature, string reporterPublicKey, int reportedId)
        {
            if (EventPlugin.CheaterReportPatchDisable)
            {
                return(true);
            }

            try
            {
                if (reportedSteamId == reporterSteamId)
                {
                    reporter.SendToClient(__instance.connectionToClient,
                                          "You can't report yourself!" + Environment.NewLine, "yellow");
                }

                int  serverId = ServerConsole.Port;
                bool allow    = true;
                Events.InvokeCheaterReport(reporterSteamId, reportedSteamId, reportedIp, reason, serverId, ref allow);

                return(allow);
            }
            catch (Exception e)
            {
                Log.Error($"Cheater Report Patch error: {e}");
                return(true);
            }
        }
Пример #2
0
        private static bool Prefix(
            CheaterReport __instance,
            GameConsoleTransmission reporter,
            string reporterUserId,
            string reportedUserId,
            ref string reason)
        {
            if (reportedUserId == reporterUserId)
            {
                reporter.SendToClient(__instance.connectionToClient, "You can't report yourself!" + Environment.NewLine, "yellow");
            }

            var ev = new ReportingCheaterEventArgs(API.Features.Player.Get(reporterUserId), API.Features.Player.Get(reportedUserId), ServerConsole.Port, reason);

            Server.OnReportingCheater(ev);

            reason = ev.Reason;

            return(ev.IsAllowed);
        }
Пример #3
0
 public void OpenReportWindow(string text) => GameConsoleTransmission.SendToClient(Connection, "[REPORTING] " + text, "white");
Пример #4
0
        public void LogReport(GameConsoleTransmission reporter, string reporterUserId, string reportedUserId, ref string reason, int reportedId, bool notifyGm)
        {
            if (string.IsNullOrEmpty(_serverAddress) && !_hasLoaded)
            {
                reportedPlayers = typeof(CheaterReport).GetField("reportedPlayers",
                                                                 BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(PlayerManager.localPlayer.GetComponent <CheaterReport>()) as HashSet <int> ?? new HashSet <int>();

                _serverAddress = $"{ServerConsole.Ip}:{ServerConsole.Port}";

                _hasLoaded = true;
            }

            try
            {
                GameObject reporterGO = PlayerManager.players.Find(p => p.GetComponent <CharacterClassManager>().UserId == reporterUserId);
                GameObject reportedGO = PlayerManager.players.Find(p => p.GetComponent <CharacterClassManager>().UserId == reportedUserId);

                if (reportedGO != null && reporterGO != null)
                {
                    string json = JsonSerializer.ToJsonString(new DiscordWebhook($"{PMConfigFile.webhookMessage}", PMConfigFile.webhookName, PMConfigFile.webhookAvatar, tts: false, new DiscordEmbed[1]
                    {
                        new DiscordEmbed("Ingame player report", "rich", "Player has just been reported.", PMConfigFile.webhookColour, new DiscordEmbedField[5]
                        {
                            new DiscordEmbedField("Reported User", $"{reportedGO.GetComponent<NicknameSync>().MyNick} ({reportedUserId})", inline: false),
                            new DiscordEmbedField("Reporter", $"{reporterGO.GetComponent<NicknameSync>().MyNick} ({reporterUserId})", inline: false),
                            new DiscordEmbedField("Reason", reason, inline: false),
                            new DiscordEmbedField("Server", _serverAddress, inline: false),
                            new DiscordEmbedField("Reported ID", reportedId.ToString(), inline: false)
                        })
                    }));

                    HttpClient _client;

                    _client = new HttpClient();
                    _client.DefaultRequestHeaders.Add("User-Agent", "SCP SL");
                    _client.DefaultRequestHeaders.Add("Game-Version", CustomNetworkManager.CompatibleVersions[0]);
                    _client.Timeout = TimeSpan.FromSeconds(20.0);

                    _client.PostAsync(PMConfigFile.webhookUrl, new StringContent(json, Encoding.UTF8, "application/json"));

                    try
                    {
                        Base.Debug("Triggering PlayerReportEvent");
                        PluginManager.TriggerEvent <IEventHandlerPlayerReport>(new PlayerReportEvent(new PheggPlayer(reporterGO), new PheggPlayer(reportedGO), reason));
                    }
                    catch (Exception e)
                    {
                        Base.Error($"Error triggering PlayerReportEvent {e.InnerException.ToString()}");
                    }

                    if (!notifyGm)
                    {
                        reportedPlayers.Add(reportedId);
                        reporter.SendToClient(base.connectionToClient, "[REPORTING] Player report successfully sent to local administrators by webhooks.", "green");
                    }
                }
            }
            catch (Exception ex)
            {
                ServerConsole.AddLog("Failed to send report by webhook: " + ex.Message);
                Debug.LogException(ex);
                reporter.SendToClient(base.connectionToClient, "[REPORTING] Failed to send report to local administrators by webhooks.", "red");
            }
        }
Пример #5
0
 private extern void orig_LogReport(GameConsoleTransmission reporter, string reporterUserId, string reportedUserId, ref string reason, int reportedId, bool notifyGm);