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 ); } }
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; }
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)) ); } } }