protected void DoMessages() { if ((this.Messages.Count != 0) && this.Enabled) { foreach (string str in this.Messages) { Broadcast.MessageAll(Helper.ReplaceVariables(null, str, null, "")); } } }
public static void DoAirdropEvent() { if (!Events.bool_2) { Events.bool_2 = true; int tickCount = Environment.TickCount; if (Core.Airdrop && Core.AirdropPlanes > 0 && NetCull.connections.Length >= airdrop.min_players) { bool flag = false; int num = (int)Math.Abs(EnvironmentControlCenter.Singleton.GetTime()); if (Core.AirdropInterval && (long)Environment.TickCount >= Events.AirdropNextTime) { if (Events.AirdropLastTime != -1L) { flag = true; } Events.AirdropLastTime = (long)Environment.TickCount; Events.AirdropNextTime = Events.AirdropLastTime + (long)(Core.AirdropIntervalTime * 1000); if (server.log > 1) { Helper.Log("[Airdrop.Extended] A next call airdrop after " + Core.AirdropIntervalTime + " second(s).", true); } } if (Core.AirdropDropTime) { if (Events.AirdropNextHour == -1L && Core.AirdropDropTimeHours.Length > 0) { Events.AirdropNextDay = (long)(EnvironmentControlCenter.Singleton.sky.Cycle.Day + 1); if (Core.AirdropDropTimeHours.Length > 2) { Events.AirdropNextHour = (long)Core.AirdropDropTimeHours.Length.Random(0); } else if (Core.AirdropDropTimeHours.Length > 1) { Events.AirdropNextHour = (long)UnityEngine.Random.Range(Core.AirdropDropTimeHours[0], Core.AirdropDropTimeHours[1]); } else { Events.AirdropNextHour = (long)Core.AirdropDropTimeHours[0]; } if (server.log > 1) { Helper.Log("[Airdrop.Extended] A next call airdrop set on " + Events.AirdropNextHour + " h.", true); } } else if (Events.AirdropNextHour == (long)num && (long)EnvironmentControlCenter.Singleton.sky.Cycle.Day >= Events.AirdropNextDay) { Events.AirdropNextHour = -1L; flag = true; } } if (flag) { if (Core.AirdropAnnounce) { Broadcast.MessageAll(Config.GetMessage("Airdrop.Incoming", null, null)); } for (int i = 0; i < Core.AirdropPlanes; i++) { SupplyDropZone.CallAirDrop(); } } } Events.bool_2 = false; } }
public static bool Test_WeaponShot(Character Killer, GameObject hitObj, IBulletWeaponItem weapon, ItemRepresentation rep, Transform transform, Vector3 endPos, bool isHeadshot) { if ((Killer == null) || (transform == null)) { return(true); } if (((transform == null) || (Killer == null)) || (Killer.netUser == null)) { return(true); } if ((float.IsNaN(endPos.x) || float.IsNaN(endPos.y)) || float.IsNaN(endPos.z)) { return(true); } Character component = hitObj.GetComponent <Character>(); NetUser key = ((Killer == null) || (Killer.controllable == null)) ? null : Killer.netUser; NetUser user2 = ((component == null) || (component.controllable == null)) ? null : component.netUser; Vector3 origin = Helper.GetEyesRay(Killer).origin; float num = Vector3.Distance(origin, endPos); float bulletRange = ((BulletWeaponDataBlock)rep.datablock).bulletRange; if (component == null) { if (num > bulletRange) { return(true); } foreach (Collider collider in Physics.OverlapSphere(Killer.eyesRay.origin, 0.2f)) { IDBase base2 = collider.gameObject.GetComponent <IDBase>(); if ((base2 != null) && (base2.idMain is StructureMaster)) { return(true); } } IDMain idMain = IDBase.GetMain(hitObj).idMain; if ((idMain.GetComponent <StructureComponent>() == null) && (idMain.GetComponent <SleepingAvatar>() == null)) { Ray lookRay = Helper.GetLookRay(Killer); Vector3 position = hitObj.transform.position; position.y += 0.1f; if (Physics.RaycastAll(lookRay, Vector3.Distance(lookRay.origin, position), -1).Length > 1) { return(true); } } return(false); } if ((CheckAimbot && !key.admin) && !component.dead) { string newValue = Helper.NiceName((user2 != null) ? user2.displayName : component.name); if (!WeaponShotEyes.ContainsKey(key)) { PlayerShotEyes eyes = new PlayerShotEyes { origin = Killer.eyesRay.origin, angles = Killer.eyesAngles, count = 0 }; WeaponShotEyes.Add(key, eyes); } Vector3 vector5 = transform.position - endPos; if (vector5.magnitude > 3f) { PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.JackedSilent", key, "", 0, new DateTime()); PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName); PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue); PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name); Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, true); return(true); } if (num < 1f) { return(false); } if (ShotThroughObjectBlock) { Vector3 vector3; GameObject obj2 = Helper.GetLineObject(origin, endPos, out vector3, 0x183e1411); if ((obj2 != null) && ((obj2.GetComponent <StructureComponent>() != null) || (obj2.GetComponent <BasicDoor>() != null))) { PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.ShootBlocked", key, "", 0, new DateTime()); PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName); PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue); PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%OBJECT%", Helper.NiceName(obj2.name)); PunishDetails = PunishDetails.Replace("%OBJECT.NAME%", Helper.NiceName(obj2.name)); PunishDetails = PunishDetails.Replace("%OBJECT.POS%", obj2.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%POINT%", vector3.AsString()); PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name); if (!Killer.stateFlags.movement) { if (ShotThroughObjectPunish) { Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, false); } else { Helper.LogError(string.Concat(new object[] { "Blocked [", key.displayName, ":", key.userID, "]: ", PunishDetails }), true); } return(true); } Vector3 pos = key.truthDetector.prevSnap.pos; pos.x = origin.x; pos.z = origin.z; if (Helper.GetLineObject(pos, endPos, out vector3, 0x183e1411) == obj2) { Helper.LogError(string.Concat(new object[] { "Blocked [", key.displayName, ":", key.userID, "]: ", PunishDetails }), true); return(true); } } } uint num4 = ((uint)Environment.TickCount) - key.truthDetector.prevHitTime; if (num4 == Environment.TickCount) { num4 = 0; } key.truthDetector.prevHitTime = (uint)Environment.TickCount; if ((num4 > 100) && (num4 < Environment.TickCount)) { float minShotRateByRange = MinShotRateByRange; float num6 = ((float)num4) / num; Config.Get("SERVER", "Truth.MinShotRateByRange." + weapon.datablock.name, ref minShotRateByRange, true); if (num6 < minShotRateByRange) { PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.HighFireRate", key, "", 0, new DateTime()); PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName); PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue); PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name); PunishDetails = PunishDetails.Replace("%SHOTRATE%", num6.ToString("N2")); PunishDetails = PunishDetails.Replace("%MINRATE%", minShotRateByRange.ToString("N2")); Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, false); return(true); } } if (CheckShotRange && (Math.Abs(num) > bulletRange)) { PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.OverWeaponRange", key, "", 0, new DateTime()); PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName); PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue); PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name); if (user2 != null) { bool punishBan = (ShotAboveMaxDistance > 0f) && ((num - bulletRange) >= ShotAboveMaxDistance); Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, punishBan); } else { Broadcast.MessageAll(ViolationColor, PunishDetails, null); Helper.LogError(string.Concat(new object[] { "Noticed [", key.displayName, ":", key.userID, "]: ", PunishDetails }), true); } return(true); } float num7 = HeadshotAimTime * num; if (num4 > num7) { key.truthDetector.headshotHold = 0; } if (isHeadshot) { key.truthDetector.headshotHold += (int)num; } if (key.truthDetector.headshotHold >= HeadshotThreshold) { PunishDetails = Config.GetMessageTruth("Truth.Punish.Reason.Aimbot.ThresholdHeadshots", key, "", 0, new DateTime()); PunishDetails = PunishDetails.Replace("%KILLER.NAME%", key.displayName); PunishDetails = PunishDetails.Replace("%VICTIM.NAME%", newValue); PunishDetails = PunishDetails.Replace("%KILLER.POS%", Killer.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%VICTIM.POS%", component.transform.position.AsString()); PunishDetails = PunishDetails.Replace("%DISTANCE%", Math.Abs(num).ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON.RANGE%", bulletRange.ToString("N1")); PunishDetails = PunishDetails.Replace("%WEAPON%", weapon.datablock.name); Punish(key, Users.GetBySteamID(key.userID), HackMethod.AimedHack, false); return(true); } } return(false); }
public static TruthDetector.ActionTaken Punish(NetUser netUser, UserData userData, HackMethod hackMethod, [Optional, DefaultParameterValue(false)] bool PunishBan) { string str = ""; if ((server.log > 1) && Users.HasFlag(netUser.userID, UserFlags.admin)) { if (hackMethod == HackMethod.AimedHack) { Broadcast.Message(netUser, string.Concat(new object[] { "Violation ", netUser.truthDetector.violation, "(+", 100, ") of ", truth.threshold }), "TRUTH", 0f); } else { Broadcast.Message(netUser, string.Concat(new object[] { "Violation ", netUser.truthDetector.violation, "(+", Rate, ") of ", truth.threshold }), "TRUTH", 0f); } } switch (hackMethod) { case HackMethod.AimedHack: str = "'Aimbot Hack'"; netUser.truthDetector.violation += truth.threshold; break; case HackMethod.SpeedHack: str = "'Speed Hack'"; netUser.truthDetector.violation += Rate; break; case HackMethod.MoveHack: str = "'Move Hack'"; netUser.truthDetector.violation += Rate; break; case HackMethod.JumpHack: str = "'Jump Hack'"; netUser.truthDetector.violation += Rate; break; case HackMethod.WallHack: str = "'Wall Hack'"; netUser.truthDetector.violation += Rate; break; case HackMethod.FallHack: str = "'Fall Hack'"; netUser.truthDetector.violation += truth.threshold; break; case HackMethod.NetExploit: str = "'Network Exploit'"; netUser.truthDetector.violation += truth.threshold; break; case HackMethod.OtherHack: str = "'Object Hack'"; netUser.truthDetector.violation += Rate; break; default: return(TruthDetector.ActionTaken.None); } if (netUser.truthDetector.violation >= truth.threshold) { if ((MaxViolations != -1) && (userData != null)) { userData.ViolationDate = DateTime.Now; userData.Violations++; } netUser.truthDetector.violation = 0; if ((MaxViolations != -1) && ((PunishAction.Contains <string>("BAN") || PunishBan) || ((MaxViolations <= 0) || (userData.Violations >= MaxViolations)))) { Users.SetViolations(userData.SteamID, 0); DateTime period = new DateTime(); if (BannedPeriod > 0) { period = DateTime.Now.AddMinutes((double)BannedPeriod); } PunishReason = Config.GetMessageTruth("Truth.Logger.Banned", netUser, str, userData.Violations, new DateTime()); if (PunishDetails != "") { Helper.LogError(string.Concat(new object[] { "Violated [", netUser.displayName, ":", netUser.userID, "]: ", PunishDetails }), ViolationDetails); } Helper.Log(PunishReason, true); if (ReportRank > 0) { Broadcast.MessageGM(PunishReason); } if (Core.DatabaseType.Equals("MYSQL")) { MySQL.Update(string.Format(string_0, userData.SteamID, MySQL.QuoteString(PunishReason), MySQL.QuoteString(PunishDetails))); MySQL.Update(string.Format(string_1, userData.SteamID, userData.ViolationDate.ToString("yyyy-MM-dd HH:mm:ss"))); } if (PunishAction.Contains <string>("NOTICE")) { Broadcast.Message(ViolationColor, netUser, Config.GetMessageTruth("Truth.Violation.Banned", netUser, str, userData.Violations, period), null, 0f); Broadcast.MessageAll(ViolationColor, Config.GetMessageTruth("Truth.Punish.Banned", netUser, str, userData.Violations, new DateTime()), netUser); Broadcast.MessageAll(ViolationColor, PunishDetails, null); } else { Broadcast.Message(ViolationColor, netUser, Config.GetMessageTruth("Truth.Violation.Banned", netUser, str, userData.Violations, period), null, 0f); Broadcast.Message(ViolationColor, netUser, PunishDetails, null, 0f); } if (BannedBlockIP && !BannedExcludeIP.Contains <string>(userData.LastConnectIP)) { Blocklist.Add(userData.LastConnectIP); } Users.Ban(netUser.userID, "Banned for using " + str + " by SERVER.", period, PunishDetails); netUser.Kick(NetError.Facepunch_Kick_Violation, true); return(TruthDetector.ActionTaken.Kicked); } PunishReason = Config.GetMessageTruth("Truth.Logger.Notice", netUser, str, userData.Violations, new DateTime()); if (PunishDetails != "") { Helper.LogError(string.Concat(new object[] { "Violated [", netUser.displayName, ":", netUser.userID, "]: ", PunishDetails }), ViolationDetails); } Helper.Log(PunishReason, true); if (ReportRank > 0) { Broadcast.MessageGM(PunishReason); } if (Core.DatabaseType.Equals("MYSQL")) { MySQL.Update(string.Format(string_0, userData.SteamID, MySQL.QuoteString(PunishReason), MySQL.QuoteString(PunishDetails))); MySQL.Update(string.Format(string_1, userData.SteamID, userData.ViolationDate.ToString("yyyy-MM-dd HH:mm:ss"))); } string text = Config.GetMessageTruth("Truth.Violation.Notice", netUser, str, userData.Violations, new DateTime()); string str3 = Config.GetMessageTruth("Truth.Punish.Notice", netUser, str, userData.Violations, new DateTime()); if (PunishAction.Contains <string>("KILL")) { text = Config.GetMessageTruth("Truth.Violation.Killed", netUser, str, userData.Violations, new DateTime()); str3 = Config.GetMessageTruth("Truth.Punish.Killed", netUser, str, userData.Violations, new DateTime()); } if (PunishAction.Contains <string>("KICK")) { text = Config.GetMessageTruth("Truth.Violation.Kicked", netUser, str, userData.Violations, new DateTime()); str3 = Config.GetMessageTruth("Truth.Punish.Kicked", netUser, str, userData.Violations, new DateTime()); } if (PunishAction.Contains <string>("NOTICE")) { Broadcast.Message(ViolationColor, netUser, text, null, 0f); Broadcast.MessageAll(ViolationColor, str3, netUser); Broadcast.MessageAll(ViolationColor, PunishDetails, null); } if (PunishAction.Contains <string>("KILL")) { TakeDamage.KillSelf(netUser.playerClient.controllable.character, null); } if (PunishAction.Contains <string>("KICK")) { netUser.Kick(NetError.Facepunch_Kick_Violation, true); } } return(actionTaken_0); }