Exemple #1
0
        public static void ReportPlayer(Character chr, Packet packet)
        {
            var characterId = packet.ReadInt();

            var reported = Server.Instance.GetCharacter(characterId);

            var reason = packet.ReadByte();

            string textReason = "Invalid reason (" + reason + ")";

            switch (reason)
            {
            case 0: textReason = "hacking"; break;

            case 1: textReason = "botting"; break;

            case 2: textReason = "scamming"; break;

            case 3: textReason = "fAKE gm"; break;

            case 4: textReason = "harassment"; break;

            case 5: textReason = "advertising"; break;
            }

            if (reported != null)
            {
                SendSueResult(reported, SueResults.YouHaveBeenSnitched);
            }
            else
            {
                // Not sending this as we have enough info anyway
                // SendSueResult(chr, SueResults.UnableToLocateTheUser);
            }

            SendSueResult(chr, SueResults.SuccessfullyReported);

            // Store the reasons somewhere...
            var report = new AbuseReport(
                chr.Name,
                chr.ID,
                chr.UserID,
                reported == null ? "null" : reported.Name,
                reported == null ? -1 : reported.ID,
                reported == null ? -1 : reported.UserID,
                chr.MapID,
                reason,
                textReason,
                MasterThread.CurrentDate);

            Server.Instance.ServerTraceDiscordReporter.Enqueue(report.ToString());
            MessagePacket.SendNoticeGMs(report.ToString(), MessagePacket.MessageTypes.Notice);
            ReportManager.AddAbuseReport(report);
        }
 public void PermaBan(string reason, BanReasons banReason = BanReasons.Hack, bool doNotBanForNow = false, int extraDelay = 0)
 {
     if (IsAdmin) doNotBanForNow = true;
     if (!doNotBanForNow)
     {
         Server.Instance.AddDelayedBanRecord(this, reason, banReason, extraDelay);
     }
     else
     {
         MessagePacket.SendNoticeGMs(
             $"Would've perma'd {Name} (uid {UserID}, cid {ID}), reason: {reason}",
             MessagePacket.MessageTypes.Notice
         );
     }
 }
Exemple #3
0
        public void ResetEvent()
        {
            EventDoing = false;
            Event      = GetMobItemID != 0 && (Rand32.Next() % 100) <= 30;

            int randomMinutes = (int)(Rand32.Next() % (RequiredMin - 5));

            MobGenTime = NextBoardingTime + ((60 * TimeMultiplier) * (WaitMin + randomMinutes + 2));
            var curTime       = MasterThread.CurrentTime;
            var timeTillSpawn = MobGenTime - curTime;
            var timeTillBoard = NextBoardingTime - curTime;

            if (Event)
            {
                var txt = $"Will spawn crogs on trip {FieldIdStartShipMove} -> {FieldIdEndShipMove} (map {FieldIdMove}) in {(timeTillSpawn / 1000):D} seconds";
                MessagePacket.SendNoticeGMs(txt, MessagePacket.MessageTypes.Notice);
            }
        }
        public bool AssertForHack(bool isHack, string hackType, bool seriousHack = true)
        {
            if (!isHack || IsAdmin) return false;

            HackLog.Warn(hackType);
            Trace.WriteLine(hackType);

            if (IsGM || IsAdmin) return false;
            HackLog.Warn(hackType);
            if (seriousHack && HacklogMuted < MasterThread.CurrentDate)
            {
                MessagePacket.SendNoticeGMs(
                    $"Check '{hackType}' triggered! Character: '{Name}', Map: '{MapID}'.",
                    MessagePacket.MessageTypes.Megaphone
                );
            }

            return isHack;
        }
Exemple #5
0
        public override void OnHackDetected()
        {
            if (!Loaded || !HackDetected.HasValue)
            {
                return;
            }
            var character = Player.Character;
            var hack      = HackDetected.Value;

            if (hack.HasFlag(RedisBackend.HackKind.Speedhack))
            {
                MessagePacket.SendNoticeGMs(
                    $"Detected speed hacks on character '{character.Name}', map {character.MapID}...",
                    MessagePacket.MessageTypes.RedText);

                if (character.IsGM == false)
                {
                    character.PermaBan(
                        "Detected speedhack",
                        extraDelay: (int)((2 * 60) + Rand32.Next() % (5 * 60))
                        );
                }
            }

            if (hack.HasFlag(RedisBackend.HackKind.MemoryEdits))
            {
                MessagePacket.SendNoticeGMs(
                    $"Detected memory edits on character '{character.Name}', map {character.MapID}.",
                    MessagePacket.MessageTypes.RedText
                    );

                if (character.IsGM == false)
                {
                    // Add some randomness
                    character.PermaBan(
                        "Detected memory edits",
                        // Between 2 and 12 minutes
                        extraDelay: (int)((2 * 60) + Rand32.Next() % (10 * 60))
                        );
                }
            }
        }