public async Task <bool> DoBan(BanningEventArgs ev) { string banned_user_id = ev.Target.UserId; string banned_nickname = ev.Target.Nickname; string banned_ip_address = ev.Target.IPAddress; int banduration = ev.Duration; Player adminHub = ev.Issuer; Log.Info("--------------------------------------"); Log.Info("Ban detected, plugin taking over:"); Log.Info($"Banned Name: {banned_nickname}"); Log.Info($"Banned ID: {banned_user_id}"); Log.Info($"Banned IP: {banned_ip_address}"); Log.Info($"Admin Name: {adminHub.Nickname}"); Log.Info($"Admin ID: {adminHub.UserId}"); Log.Info($"Duration: {banduration}"); if (banduration.ToString().Contains("1576800000")) { banduration = 0; Log.Info($"Duration: UPDATED TO PERM!"); } string reason = ev.Reason; if (reason == "") { reason = "No reason provided. Please contact a Head Administrator for further details."; } if (await WebTask.IssueBan(plugin.Config.APIKey, banned_user_id, banned_nickname, banned_ip_address, adminHub.UserId, banduration, reason, ev.Target.ReferenceHub.serverRoles.DoNotTrack)) { Log.Info($"Successfully pushed ban for {banned_user_id} ({banned_ip_address}) to the web API!"); Log.Info("--------------------------------------"); SendClientToServer(ev.Target, 7790); // We can safely remove the ban since the web client will handle it from here. //BanHandler.RemoveBan(ev.Target.UserId, ev.); return(true); } else { // Error out to requesting admin adminHub.Broadcast(15, $"ERROR while adding ban to web API for: {banned_nickname}({banned_user_id})"); Log.Error($"FATAL BANNING ERROR! WebTask.IssueBan() Failed to push to web API"); // Actually ban them since the webapi decided to do the funny... BanDetails ban = new BanDetails { OriginalName = ev.Target.Nickname, Id = ev.Target.UserId, IssuanceTime = TimeBehaviour.CurrentTimestamp(), Expires = DateTime.UtcNow.AddMinutes((double)ev.Duration).Ticks, Reason = ev.Reason, Issuer = ev.Issuer.UserId }; BanHandler.IssueBan(ban, BanHandler.BanType.UserId); Log.Info("Pushed manual server-side ban."); Log.Info("--------------------------------------"); return(false); } return(false); }
public void playerBan(PlayerBanEvent ev) { ev.Allow = false; GameObject player = ev.BannedPlayer.characterClassManager.gameObject; if (ev.Duration == 0) { ServerConsole.Disconnect(player, ev.FullMessage); } else { ServerConsole.Disconnect(player, ev.FullMessage); Ban BanJSON = new Ban(); BanJSON.Steamid64 = ev.BannedPlayer.characterClassManager.UserId; BanJSON.Ip = ev.BannedPlayer.queryProcessor._ipAddress; BanJSON.BannedAt = TimeBehaviour.CurrentTimestamp(); BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)ev.Duration).Ticks; BanJSON.By = ev.Issuer.characterClassManager.UserId; if (!String.IsNullOrEmpty(ev.Reason)) { BanJSON.Reason = ev.Reason; } String JSON = Serialize.ToJson(BanJSON); String JsonResponse = Methods.Post(Plugin.BanURL, JSON); try { JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse); } catch (Exception e) { JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse); if (!String.IsNullOrEmpty(json.Code)) { Log.Error("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code); } else { Log.Error("Erreur durant le processus d'API (Code d'erreur plugin: " + e); } } } }
private static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan) { try { if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false)) { duration = int.MaxValue; } string userId = null; string address = user.GetComponent <NetworkIdentity>().connectionToClient.address; API.Features.Player targetPlayer = API.Features.Player.Get(user); API.Features.Player issuerPlayer = API.Features.Player.Get(issuer) ?? API.Features.Server.Host; try { if (ConfigFile.ServerConfig.GetBool("online_mode", false)) { userId = targetPlayer.UserId; } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (1)!"); return(false); } string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. "; if (!string.IsNullOrEmpty(reason)) { message = message + "Reason: " + reason; } if (!ServerStatic.PermissionsHandler.IsVerified || !targetPlayer.IsStaffBypassEnabled) { if (duration > 0) { var ev = new BanningEventArgs(targetPlayer, issuerPlayer, duration, reason, message); Player.OnBanning(ev); duration = ev.Duration; reason = ev.Reason; message = ev.FullMessage; if (!ev.IsAllowed) { return(false); } string originalName = string.IsNullOrEmpty(targetPlayer.Nickname) ? "(no nick)" : targetPlayer.Nickname; long issuanceTime = TimeBehaviour.CurrentTimestamp(); long banExpieryTime = TimeBehaviour.GetBanExpirationTime((uint)duration); try { if (userId != null && !isGlobalBan) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = userId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.UserId); if (!string.IsNullOrEmpty(targetPlayer.CustomUserId)) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = targetPlayer.CustomUserId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.UserId); } } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (2)!"); return(false); } try { if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = address, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.IP); } } catch { ServerConsole.AddLog("Failed during issue of IP ban!"); return(false); } } else if (duration == 0) { var ev = new KickingEventArgs(targetPlayer, issuerPlayer, reason, message); Player.OnKicking(ev); reason = ev.Reason; message = ev.FullMessage; if (!ev.IsAllowed) { return(false); } } } ServerConsole.Disconnect(targetPlayer.ReferenceHub.gameObject, message); return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.BanningAndKicking: {e}\n{e.StackTrace}"); return(true); } }
public static void HandleCommand(JObject o) { try { string type = (string)o["type"]; if (type == "IDENT") { if ((string)o["data"] == "PASS") { Log.Debug($"Server {ServerConsole.Port} passed identification."); } else if ((string)o["data"] == "FAIL") { Log.Warn($"Server {ServerConsole.Port} failed identification."); } } else if (type == "UPDATE") { EventHandlers.tcp.SendData(new Update()); } else if (type == "ROLESYNC") { Log.Warn(o); string userid = (string)o["userid"]; if (o["group"] == null) { Log.Debug($"No role sync found for {userid}"); SCPDiscord.VerifyReservedSlot(userid); return; } string group = (string)o["group"]; UserGroup userGroup = ServerStatic.PermissionsHandler.GetGroup(group); if (userGroup == null) { Log.Error($"Attempted to assign invalid user group {group} to {userid}"); return; } Player player = Player.Get(userid); if (player == null) { Log.Error($"Error assigning user group to {userid}, player not found."); return; } if (SCPDiscord.setRoleGroups.Contains(group)) { Log.Debug($"Assigning role: {userGroup} to {userid}."); player.Group = userGroup; } string tag = (string)o["tag"]; if (SCPDiscord.setTagGroups.Contains(group) && tag != null) { Log.Debug($"Changing tag of {userid} to {tag}."); player.RankName = tag; } if (SCPDiscord.reservedSlotGroups.Contains(group)) { // grant reserved slot Log.Debug("Player has necessary rank for reserved slot, checking..."); List <string> lines = File.ReadAllLines(SCPDiscord.reservedSlots).ToList(); if (!lines.Contains(userid)) { Log.Debug("Reserved slot not found, adding player..."); lines.Add(userid); File.WriteAllLines(SCPDiscord.reservedSlots, lines); // This only reloads the slots on the current server, change this to reload on every server? // Might not work ReservedSlot.Reload(); } } else { SCPDiscord.VerifyReservedSlot(userid); } } else if (type == "COMMAND") { GameCore.Console.singleton.TypeCommand((string)o["command"]); } else if (type == "BAN") { bool isuid = false; string uid = (string)o["user"]; if (!uid.Contains("@steam") && !uid.Contains("@discord")) { if (!uid.Contains(".")) { isuid = true; uid += "@steam"; } } else { isuid = true; } Player player = Player.Get(uid); int min = (int)o["min"]; string reason = (string)o["reason"]; Ban ban = new Ban { player = null, duration = min, success = true, offline = false }; if (player != null) { PlayerManager.localPlayer.GetComponent <BanPlayer>().BanUser(player.GameObject, min, reason, "Server"); ban.player = new User { name = player.Nickname, userid = player.UserId }; } else { if (isuid) { ban.offline = true; ban.player = new User { name = "Offline Player", userid = uid }; if (SCPDiscord.instance.Config.SteamApiKey != string.Empty) { string data = null; try { data = webclient.DownloadString($"https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key={SCPDiscord.instance.Config.SteamApiKey}&format=json&steamids={uid.Replace("@steam", "")}"); } catch { Log.Debug("Failed to get profile data from SteamAPI."); } JObject o2 = JObject.Parse(data); if (o2 != null) { ban.player.name = (string)o2["response"]["players"][0]["personaname"]; } } BanHandler.IssueBan(new BanDetails() { OriginalName = ban.player.name, Id = uid, IssuanceTime = TimeBehaviour.CurrentTimestamp(), Expires = DateTime.UtcNow.AddMinutes((double)min).Ticks, Reason = reason, Issuer = "Server" }, BanHandler.BanType.UserId); } else if (uid.Contains(".")) { ban.offline = true; BanHandler.IssueBan(new BanDetails() { OriginalName = "IP Address", Id = uid, IssuanceTime = TimeBehaviour.CurrentTimestamp(), Expires = DateTime.UtcNow.AddMinutes((double)min).Ticks, Reason = reason, Issuer = "Server" }, BanHandler.BanType.IP); } else { ban.success = false; } } EventHandlers.tcp.SendData(ban); } else if (type == "KICK") { string uid = (string)o["user"]; if (!uid.Contains("@steam") && !uid.Contains("@discord")) { uid += "@steam"; } Player player = Player.Get(uid); Kick kick = new Kick { player = null }; if (player != null) { kick.player = new User { name = player.Nickname, userid = player.UserId }; ServerConsole.Disconnect(player.GameObject, (string)o["reason"]); } EventHandlers.tcp.SendData(kick); } else if (type == "UNBAN") { Unban unban = new Unban(); List <string> ipBans = File.ReadAllLines(SCPDiscord.ipBans).ToList(); List <string> userIDBans = File.ReadAllLines(SCPDiscord.useridBans).ToList(); string id = (string)o["user"]; if (!id.Contains(".")) { if (!id.Contains("@steam") && !id.Contains("@discord")) { id += "@steam"; } } List <string> matchingIPBans = ipBans.FindAll(s => s.Contains(id)); List <string> matchingSteamIDBans = userIDBans.FindAll(s => s.Contains(id)); if (matchingIPBans.Count == 0 && matchingSteamIDBans.Count == 0) { unban.success = false; EventHandlers.tcp.SendData(unban); return; } ipBans.RemoveAll(s => s.Contains(id)); userIDBans.RemoveAll(s => s.Contains(id)); foreach (var row in matchingIPBans) { userIDBans.RemoveAll(s => s.Contains(row.Split(';').Last())); } foreach (var row in matchingSteamIDBans) { ipBans.RemoveAll(s => s.Contains(row.Split(';').Last())); } File.WriteAllLines(SCPDiscord.ipBans, ipBans); File.WriteAllLines(SCPDiscord.useridBans, userIDBans); EventHandlers.tcp.SendData(unban); } } catch (Exception x) { Log.Error("SCPDiscord handle command error: " + x.Message); } }
public void ConsoleCmd(ConsoleCommandEvent ev) { if (ev.Player.GetRole() == RoleType.Scp079) { string[] args = ev.Command.Split(' '); if (args[0].Equals(Plugin.CommandPrefix)) { if (args.Length >= 2) { if (args[1].ToLower().Equals("help") || args[1].ToLower().Equals("commands") || args[1].ToLower().Equals("?")) { ev.ReturnMessage = Plugin.HelpMsgTitle + "\n" + "\"." + Plugin.CommandPrefix + " a1\" - " + Plugin.HelpMsgA1 + " | Coût: " + Plugin.A1Power + " AP | Tier " + (Plugin.A1Tier + 1) + ".\n" + "\"." + Plugin.CommandPrefix + " a2\" - " + Plugin.HelpMsgA2 + " | Coût: " + Plugin.A2Power + " AP | Tier " + (Plugin.A2Tier + 1) + ".\n" + "\"." + Plugin.CommandPrefix + " a3\" - " + Plugin.HelpMsgA3 + " | Coût: " + Plugin.A3Power + " AP | Tier " + (Plugin.A3Tier + 1) + ".\n" + "\"." + Plugin.CommandPrefix + " a4\" - " + Plugin.HelpMsgA4 + " | Coût: " + Plugin.A4Power + " AP | Tier " + (Plugin.A4Tier + 1) + ".\n" + "\"." + Plugin.CommandPrefix + " a5\" - " + Plugin.HelpMsgA5 + " | Coût: " + Plugin.A5Power + " AP | Tier " + (Plugin.A5Tier + 1) + ".\n" + "\"." + Plugin.CommandPrefix + " a6\" - " + Plugin.HelpMsgA6 + " | Coût: " + Plugin.A6Cost + " Tier | Tier " + (Plugin.A6Tier + 1) + ".\n" + "\"." + Plugin.CommandPrefix + " suicide\" - " + Plugin.HelpMsgSuicide + ".\n"; return; } if (args[1].ToLower().Equals("a1")) { if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A1Tier) { ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A1Tier + 1)); return; } if (ev.Player.scp079PlayerScript.NetworkcurMana < Plugin.A1Power) { ev.ReturnMessage = Plugin.NoPowerMsg; return; } if (args.Length > 3) { if (Plugin.A1AntiSpam > TimeBehaviour.CurrentTimestamp()) { ev.ReturnMessage = Plugin.AntiSpamMsg.Replace("%s", Math.Ceiling(TimeSpan.FromTicks(Plugin.A1AntiSpam - TimeBehaviour.CurrentTimestamp()).TotalSeconds).ToString()); return; } else { // .079 a1 SCP CAUSE[unknow/as/mtf/chaos] UNIT[C] UNIT[25] if (int.TryParse(args[2], out int SCP) || !String.IsNullOrWhiteSpace(args[3])) { string tts = string.Empty; tts += "BG_MTF2 BREAK_PREANNC SCP"; foreach (char c in args[2]) { tts += " " + c; } switch (args[3].ToLower()) { case "mtf": if (args.Length > 5) { if (char.IsLetter(args[4][0]) || !String.IsNullOrWhiteSpace(args[5])) { tts += " CONTAINEDSUCCESSFULLY CONTAINMENTUNIT NATO_" + args[4][0] + " " + args[5]; } else { ev.ReturnMessage = Plugin.FailA1Msg; return; } } else { ev.ReturnMessage = Plugin.FailA1Msg; return; } break; case "security": tts += " SUCCESSFULLY TERMINATED BY AUTOMATIC SECURITY SYSTEM"; break; case "chaos": tts += " TERMINATED BY CHAOSINSURGENCY"; break; case "classed": tts += " TERMINATED BY CLASSD PERSONNEL"; break; case "scientifique": tts += " TERMINATED BY SCIENCE PERSONNEL"; break; case "decontamination": tts += " LOST IN DECONTAMINATION SEQUENCE"; break; default: tts += " SUCCESSFULLY TERMINATED . CONTAINMENTUNIT UNKNOWN"; break; } DoAnnouncement(tts, true); ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A1Power; Plugin.A1AntiSpam = DateTime.UtcNow.AddSeconds((double)Plugin.A1TimeBetween).Ticks; ev.ReturnMessage = Plugin.RunA1Msg; return; } } } else { ev.ReturnMessage = Plugin.FailA1Msg; return; } } if (args[1].ToLower().Equals("a2")) { if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A2Tier) { ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A2Tier + 1)); return; } if (ev.Player.scp079PlayerScript.NetworkcurMana >= Plugin.A2Power) { ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A2Power; } else { ev.ReturnMessage = Plugin.NoPowerMsg; return; } Room room = SCP079Room(ev.Player); if (room == null) { ev.ReturnMessage = Plugin.FailA2Msg; return; } if (room.Zone == ZoneType.Surface) { ev.ReturnMessage = Plugin.FailA2Msg; return; } foreach (var item in Plugin.A2BlacklistRooms) { if (room.Name.ToLower().Contains(item.ToLower())) { ev.ReturnMessage = Plugin.FailA2Msg; return; } } if (Plugin.A2AntiSpam > TimeBehaviour.CurrentTimestamp()) { ev.ReturnMessage = Plugin.AntiSpamMsg.Replace("%s", Math.Ceiling(TimeSpan.FromTicks(Plugin.A2AntiSpam - TimeBehaviour.CurrentTimestamp()).TotalSeconds).ToString()); return; } Timing.RunCoroutine(GasRoom(room, ev.Player)); Plugin.A2AntiSpam = DateTime.UtcNow.AddSeconds((double)Plugin.A2TimeBetween).Ticks; ev.ReturnMessage = Plugin.RunA2Msg; return; } if (args[1].ToLower().Equals("a3")) { if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A3Tier) { ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A3Tier + 1)); return; } if (ev.Player.scp079PlayerScript.NetworkcurMana >= Plugin.A3Power) { ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A3Power; } else { ev.ReturnMessage = Plugin.NoPowerMsg; return; } Generator079.generators[0].RpcCustomOverchargeForOurBeautifulModCreators(Plugin.A3Timer, false); ev.ReturnMessage = Plugin.RunA3Msg; return; } if (args[1].ToLower().Equals("a4")) { if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A4Tier) { ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A4Tier + 1)); return; } if (ev.Player.scp079PlayerScript.NetworkcurMana >= Plugin.A4Power) { ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A4Power; } else { ev.ReturnMessage = Plugin.NoPowerMsg; return; } var pos = ev.Player.scp079PlayerScript.currentCamera.transform.position; GrenadeManager gm = ev.Player.GetComponent <GrenadeManager>(); GrenadeSettings settings = gm.availableGrenades.FirstOrDefault(g => g.inventoryID == ItemType.GrenadeFlash); FlashGrenade flash = GameObject.Instantiate(settings.grenadeInstance).GetComponent <FlashGrenade>(); flash.fuseDuration = 0.5f; flash.InitData(gm, Vector3.zero, Vector3.zero, 1f); flash.transform.position = pos; NetworkServer.Spawn(flash.gameObject); ev.ReturnMessage = Plugin.RunA4Msg; return; } if (args[1].ToLower().Equals("suicide")) { ev.Player.playerStats.HurtPlayer(new PlayerStats.HitInfo(119000000, ev.Player.GetNickname(), DamageTypes.Wall, ev.Player.GetPlayerId()), ev.Player.gameObject); return; } if (args[1].ToLower().Equals("a5")) { if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A1Tier) { ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A5Tier + 1)); return; } if (ev.Player.scp079PlayerScript.NetworkcurMana < Plugin.A5Power) { ev.ReturnMessage = Plugin.NoPowerMsg; return; } if (args.Length > 2) { if (Plugin.A5AntiSpam > TimeBehaviour.CurrentTimestamp()) { ev.ReturnMessage = Plugin.AntiSpamMsg.Replace("%s", Math.Ceiling(TimeSpan.FromTicks(Plugin.A5AntiSpam - TimeBehaviour.CurrentTimestamp()).TotalSeconds).ToString()); return; } else { // .079 a5 GROUPE[unknow/mtf] UNIT[C] UNIT[25] [REMAIN SCP] if (!String.IsNullOrWhiteSpace(args[2])) { string tts = string.Empty; switch (args[2].ToLower()) { case "mtf": if (args.Length > 5) { bool success = Int32.TryParse(args[5], out int scpleft); if (char.IsLetter(args[3][0]) || !String.IsNullOrWhiteSpace(args[4]) || success) { tts += "MTFUNIT EPSILON 11 DESIGNATED NATO_" + args[3][0] + " " + args[4] + " HASENTERED ALLREMAINING "; tts += ((scpleft <= 0) ? "NOSCPSLEFT" : ("AWAITINGRECONTAINMENT " + scpleft + ((scpleft == 1) ? " SCPSUBJECT" : " SCPSUBJECTS"))); } else { ev.ReturnMessage = Plugin.FailA5Msg; return; } } else { ev.ReturnMessage = Plugin.FailA5Msg; return; } break; default: tts += "Danger. Alert all security .g1 personnel. .g4 Unauthorized personnel .g2 have been detected .g1 in the facility."; break; } DoAnnouncement(tts, true); ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A5Power; Plugin.A5AntiSpam = DateTime.UtcNow.AddSeconds((double)Plugin.A5TimeBetween).Ticks; ev.ReturnMessage = Plugin.RunA5Msg; return; } } } else { ev.ReturnMessage = Plugin.FailA5Msg; return; } } if (args[1].ToLower().Equals("a6")) { if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A6Tier) { ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A6Tier + 1)); return; } if (ev.Player.scp079PlayerScript.NetworkcurMana < Plugin.A6Power) { ev.ReturnMessage = Plugin.NoPowerMsg; return; } else { List <ReferenceHub> riplist; ReferenceHub chosenPlayer; riplist = GetHubList(RoleType.Spectator); if (riplist.Count > 0) { chosenPlayer = riplist[(new System.Random()).Next(riplist.Count)]; int SCP = PlayerManager.localPlayer.GetComponent <CharacterClassManager>().FindRandomIdUsingDefinedTeam(Team.SCP); if (SCP != 1) { chosenPlayer.SetRole((RoleType)SCP); chosenPlayer.Broadcast(10, Plugin.NewSCPA6Msg, false); ev.Player.scp079PlayerScript.NetworkcurLvl -= Plugin.A6Cost; ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A6Power; Scp079.SetMaxEnergy(ev.Player, 125); Timing.CallDelayed(0.8f, () => { foreach (Room r in Map.Rooms) { if (r.Name.ToLower().Equals("HCZ_079".ToLower())) { chosenPlayer.SetPosition(r.Position.x, r.Position.y + 1, r.Position.z); } } chosenPlayer.SetHealth(chosenPlayer.GetMaxHealth()); }); DoAnnouncement("Alert. New containment .g1 breach detected. Cassie .g2 corruption detected. Code .g4 red.", true); ev.ReturnMessage = Plugin.RunA6Msg; return; } else { ev.ReturnMessage = Plugin.NoSCPA6Msg; return; } } else { ev.ReturnMessage = Plugin.NoPlayerA6Msg; return; } } } ev.ReturnMessage = Plugin.HelpMsg.Replace("$prefix", "" + Plugin.CommandPrefix); return; } ev.ReturnMessage = Plugin.HelpMsg.Replace("$prefix", "" + Plugin.CommandPrefix); return; } } }
public void RemoteAdminCommandEvent(ref RACommandEvent ev) { string[] args = ev.Command.Split(' '); ReferenceHub sender = ev.Sender.SenderId == "SERVER CONSOLE" || ev.Sender.SenderId == "GAME CONSOLE" ? Player.GetPlayer(PlayerManager.localPlayer) : Player.GetPlayer(ev.Sender.SenderId); switch (args[0].ToLower()) { case "oban": ev.Allow = false; if (!sender.CheckPermission("oban.use")) { ev.Sender.RaReply("ExiledPermissions#No permission.", true, true, string.Empty); return; } if (args.Length == 1) { ev.Sender.RaReply("OBAN#Commandes:", true, true, string.Empty); ev.Sender.RaReply("#- OBAN - Afficher la liste des commandes.", true, true, string.Empty); ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); return; } else if (args.Length > 1) { switch (args[1].ToLower()) { case "steamid": if (args.Length > 3) { string Steamid64 = args[2]; long BannedAt = TimeBehaviour.CurrentTimestamp(); double Expire = (double.TryParse(args[3], out double x)) ? x : -1; string By = sender.characterClassManager.UserId; string Reason = (args.Length > 3) ? string.Join(" ", args.Skip(4)) : string.Empty; Ban BanJSON = new Ban(); BanJSON.Steamid64 = Steamid64; BanJSON.BannedAt = BannedAt; BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks; BanJSON.By = By; if (!String.IsNullOrEmpty(Reason)) { BanJSON.Reason = Reason; } String JSON = Serialize.ToJson(BanJSON); String JsonResponse = Methods.Post(Plugin.BanURL, JSON); try { JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse); string response = "\n" + "SteamID: " + Steamid64 + "\n" + "Est banni pour : " + Expire + " minutes \n" + "Par: " + By + " / " + sender.nicknameSync.MyNick; ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, ""); } catch (Exception e) { JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse); if (!String.IsNullOrEmpty(json.Code)) { ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty); } else { ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty); } } } else { ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); } break; case "ip": if (args.Length > 3) { string IP = args[2]; long BannedAt = TimeBehaviour.CurrentTimestamp(); double Expire = (double.TryParse(args[3], out double x)) ? x : -1; string By = sender.characterClassManager.UserId; string Reason = (args.Length > 3) ? string.Join(" ", args.Skip(4)) : string.Empty; Ban BanJSON = new Ban(); BanJSON.Ip = IP; BanJSON.BannedAt = BannedAt; BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks; BanJSON.By = By; if (!String.IsNullOrEmpty(Reason)) { BanJSON.Reason = Reason; } String JSON = Serialize.ToJson(BanJSON); String JsonResponse = Methods.Post(Plugin.BanURL, JSON); try { JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse); string response = "\n" + "IP: " + IP + "\n" + "Est banni pour : " + Expire + " minutes \n" + "Par: " + By + " / " + sender.nicknameSync.MyNick; ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, ""); } catch (Exception e) { JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse); if (!String.IsNullOrEmpty(json.Code)) { ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty); } else { ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty); } } } else { ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); } break; case "user": if (args.Length > 4) { string Steamid64 = args[2]; string IP = args[3]; long BannedAt = TimeBehaviour.CurrentTimestamp(); double Expire = (double.TryParse(args[4], out double x)) ? x : -1; string By = sender.characterClassManager.UserId; string Reason = (args.Length > 4) ? string.Join(" ", args.Skip(5)) : string.Empty; Ban BanJSON = new Ban(); BanJSON.Steamid64 = Steamid64; BanJSON.Ip = IP; BanJSON.BannedAt = BannedAt; BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks; BanJSON.By = By; if (!String.IsNullOrEmpty(Reason)) { BanJSON.Reason = Reason; } String JSON = Serialize.ToJson(BanJSON); String JsonResponse = Methods.Post(Plugin.BanURL, JSON); try { JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse); string response = "\n" + "SteamID: " + Steamid64 + "\n" + "IP: " + IP + "\n" + "Est banni pour : " + Expire + " minutes \n" + "Par: " + By + " / " + sender.nicknameSync.MyNick; ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, ""); } catch (Exception e) { JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse); if (!String.IsNullOrEmpty(json.Code)) { ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty); } else { ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty); } } } else { ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); } break; default: ev.Sender.RaReply("OBAN#Commandes:", true, true, string.Empty); ev.Sender.RaReply("#- OBAN - Afficher la liste des commandes.", true, true, string.Empty); ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty); return; } } break; } }
public override void OnEnable() { try { Enabled = Config.GetBool("b079_enable", true); if (!Enabled) { Log.Info("Le plugin est désactivé, ou il manque des entrées dans la configuration."); return; } // Compteur interne A1AntiSpam = A5AntiSpam = A2AntiSpam = TimeBehaviour.CurrentTimestamp(); A1Power = Config.GetFloat("b079_a1_power", 35f); A1Tier = Config.GetInt("b079_a1_tier", 0); A1TimeBetween = Config.GetDouble("b079_a1_antispam", 60); A2Power = Config.GetFloat("b079_a2_power", 75f); A2Tier = Config.GetInt("b079_a2_tier", 2); A2TimeBetween = Config.GetDouble("b079_a2_antispam", 30); A2Timer = Config.GetInt("b079_a2_timer", 5); A2TimerGas = Config.GetInt("b079_a2_gas_timer", 10); A2Exp = Config.GetFloat("b079_a2_exp", 35f); A2BlacklistRooms = Config.GetStringList("b079_a2_blacklisted_rooms"); if (A2BlacklistRooms == null) { A2BlacklistRooms = new List <string>(); } A3Power = Config.GetFloat("b079_a3_power", 100f); A3Tier = Config.GetInt("b079_a3_tier", 1); A3Timer = Config.GetFloat("b079_a3_timer", 30f); A4Power = Config.GetFloat("b079_a4_power", 40f); A4Tier = Config.GetInt("b079_a4_tier", 1); A5Power = Config.GetFloat("b079_a4_power", 35f); A5Tier = Config.GetInt("b079_a4_tier", 1); A5TimeBetween = Config.GetDouble("b079_a5_antispam", 75); A6Power = Config.GetFloat("b079_a6_power", 200f); A6Tier = Config.GetInt("b079_a6_tier", 4); A6Cost = Config.GetInt("b079_a6_tiercost", 2); CommandPrefix = Config.GetString("b079_prefix", "079").Replace(' ', '_'); HelpMsgTitle = Config.GetString("b079_help_title", "Compétences:"); HelpMsgA1 = Config.GetString("b079_help_a1", "Annoncer la mort d'un SCP."); HelpMsgA2 = Config.GetString("b079_help_a2", "Décontaminer la salle dans laquelle vous êtes."); HelpMsgA3 = Config.GetString("b079_help_a3", "Eteindre les lumières de la fondation."); HelpMsgA4 = Config.GetString("b079_help_a4", "Flash ceux qui regardent votre caméra."); HelpMsgA5 = Config.GetString("b079_help_a5", "Annoncer l'arriver d'un groupe sur site."); HelpMsgA6 = Config.GetString("b079_help_a6", "Déconfiner un nouveau SCP (aléatoire, et non présent en début de partie)."); HelpMsgSuicide = Config.GetString("b079_msg_suicide", "Vous permet de vous suicider"); TierRequiredMsg = Config.GetString("b079_msg_tier_required", "Tier $tier ou plus requis."); NoPowerMsg = Config.GetString("b079_msg_no_power", "Pas assez de puissance."); HelpMsg = Config.GetString("b079_msg_help_cmd_fail", "Invalide. Entrez \".$prefix ?\" pour obtenir de l'aide."); FailA1Msg = Config.GetString("b079_msg_a1_fail", "Erreur.\nSyntaxe: .079 a1 <SCP> <RAISON> [NOM ESCOUADE] [NOMBRE ESCOUADE]\nExemple: .079 a1 939 mtf alpha 15\nExemple: .079 a1 173 chaos\nRaisons possibles: MTF, CHAOS, SECURITY, CLASSED, UNKNOWN, DECONTAMINATION, SCIENTIFIQUE."); RunA1Msg = Config.GetString("b079_msg_a1_run", "Annonce de la mort..."); FailA2Msg = Config.GetString("b079_msg_a2_fail", "Vous ne pouvez pas déconfiner cette salle!"); RunA2Msg = Config.GetString("b079_msg_a2_run", "Activation..."); RunA3Msg = Config.GetString("b079_msg_a3_run", "Overcharge..."); RunA4Msg = Config.GetString("b079_msg_a4_run", "Flash..."); FailA5Msg = Config.GetString("b079_msg_a5_fail", "Erreur.\nSyntaxe: .079 a5 <GROUPE> [NOM ESCOUADE] [NOMBRE ESCOUADE] [NOMBRE DE SCP]\nExemple: .079 a5 mtf alpha 15 2\nExemple: .079 a5 unknown\nGroupes possibles: MTF, UNKNOWN."); RunA5Msg = Config.GetString("b079_msg_a5_run", "Annonce du nouveau groupe..."); FailA6Msg = Config.GetString("b079_msg_a6_fail", "Erreur.\nSyntaxe: .079 a6\nExemple: .079 939\nFait apparaitre un nouveau SCP dans la partie."); RunA6Msg = Config.GetString("b079_msg_a6_run", "Apparition du nouveau SCP..."); NoPlayerA6Msg = Config.GetString("b079_msg_a6_noplayer", "Il n'y a aucun joueur de disponible pour faire apparaitre un nouveau SCP."); NoSCPA6Msg = Config.GetString("b079_msg_a6_noscp", "Il n'y a plus aucun SCP à faire apparaître."); NewSCPA6Msg = Config.GetString("b079_msg_a6_newscp", "<color=red>SCP-079 vient de vous déconfiner.</color>"); A2WarnMsg = Config.GetString("b079_msg_a2_warn", "<color=#ff0000>ALERTE:</color>\n<color=#ff0000>Décontamination de la salle dans $seconds secondes.</color>"); A2ActiveMsg = Config.GetString("b079_msg_a2_active", "<color=#ff0000>Décontamination activé.</color>"); SpawnMsg = Config.GetString("b079_spawn_msg", "<color=#6642f5>Entrez \".079 help\" dans la console pour consulter vos abilités.</color>"); AntiSpamMsg = Config.GetString("b079_msg_antispam", "Merci de patienter %s secondes avant de faire cette commande."); EventHandler = new EventHandlers(this); Events.PlayerSpawnEvent += EventHandler.PlayerSpawn; Events.ConsoleCommandEvent += EventHandler.ConsoleCmd; } catch (Exception e) { Log.Error($"Erreur durant le démarrage du plugin: {e}"); return; } }
public string[] OnCall(ICommandSender sender, string[] args) { if (args.Length > 0) { if (args[0] == "reload") { if (plugin.data_enabled) { plugin.LoadPlayersData(); return(new string[] { "Player Data Reload!" }); } else { return(new string[] { "Player Data Disabled, not load." }); } } else if (args[0] == "prune") { if (plugin.data_enabled) { foreach (var tar in plugin.playersData.ToArray()) { if (tar.level == 1 && tar.exp == 0) { plugin.playersData.Remove(tar); } } plugin.SavePlayersData(); return(new string[] { "database pruned." }); } else { return(new string[] { "Player Data Disabled" }); } } else if (args[0] == "blackout") { List <Room> rooms = new List <Room>(plugin.Server.Map.Get079InteractionRooms(Scp079InteractionType.CAMERA)).FindAll(x => x.ZoneType == ZoneType.LCZ); foreach (Room r in rooms) { r.FlickerLights(); } Generator079.mainGenerator.CallRpcOvercharge(); return(new string[] { "blackout success." }); } else if (args[0] == "lcza") { DecontaminationLCZ lcz = GameObject.Find("Host").GetComponent <DecontaminationLCZ>(); int anm; if (args.Length > 1 && int.TryParse(args[1], out anm)) { lcz.CallRpcPlayAnnouncement(Mathf.Clamp(anm, 0, 5), true); return(new string[] { $"lcz announcement:{Mathf.Clamp(anm, 0, 5)}" }); } } else if (args[0] == "amb") { int amb; if (args.Length > 1 && int.TryParse(args[1], out amb)) { SanyaPlugin.CallAmbientSound(Mathf.Clamp(amb, 0, 31)); return(new string[] { $"ambient:{Mathf.Clamp(amb, 0, 31)}" }); } } else if (args[0] == "airbomb") { if (SanyaPlugin.isAirBombGoing) { SanyaPlugin.isAirBombGoing = false; return(new string[] { "airbomb force stopped." }); } else { Timing.RunCoroutine(SanyaPlugin._AirSupportBomb(5, 10, true, true, true), Segment.Update); return(new string[] { "airbomb started!" }); } } else if (args[0] == "gen") { if (args.Length > 1) { if (args[1] == "unlock") { foreach (Generator items in plugin.Server.Map.GetGenerators()) { items.Unlock(); } return(new string[] { "gen unlock." }); } else if (args[1] == "open") { foreach (Generator items in plugin.Server.Map.GetGenerators()) { if (!items.Engaged) { items.Open = true; } } return(new string[] { "gen open." }); } else if (args[1] == "close") { foreach (Generator items in plugin.Server.Map.GetGenerators()) { items.Open = false; } return(new string[] { "gen close." }); } else if (args[1] == "act") { float engagecount = 6.0f; foreach (Generator items in plugin.Server.Map.GetGenerators()) { if (!items.Engaged) { items.TimeLeft = engagecount--; items.HasTablet = true; } } return(new string[] { "gen activate." }); } } } else if (args[0] == "ev") { foreach (Elevator ev in plugin.Server.Map.GetElevators()) { ev.Use(); } return(new string[] { "EV used." }); } else if (args[0] == "tesla") { bool isInstant = false; if (args.Length > 1) { if (args[1] == "i") { isInstant = true; } } foreach (Smod2.API.TeslaGate tesla in plugin.Server.Map.GetTeslaGates()) { tesla.Activate(isInstant); } return(new string[] { "tesla activated." }); } else if (args[0] == "shake") { plugin.Server.Map.Shake(); return(new string[] { "map shaking." }); } else if (args[0] == "femur") { SanyaPlugin.Call106Scream(); return(new string[] { "Screaming!" }); } else if (args[0] == "heli") { SanyaPlugin.CallVehicle(false); return(new string[] { "heli moved." }); } else if (args[0] == "van") { SanyaPlugin.CallVehicle(true); return(new string[] { "van spawned." }); } else if (args[0] == "next") { if (args.Length > 1) { GameObject host = GameObject.Find("Host"); MTFRespawn respawn = host.GetComponent <MTFRespawn>(); if (args[1] == "ci") { respawn.nextWaveIsCI = true; return(new string[] { $"nextIsCi:{respawn.nextWaveIsCI}" }); } else if (args[1] == "mtf" || args[1] == "ntf") { respawn.nextWaveIsCI = false; return(new string[] { $"nextisCi:{respawn.nextWaveIsCI}" }); } } } else if (args[0] == "spawn") { GameObject host = GameObject.Find("Host"); MTFRespawn respawn = host.GetComponent <MTFRespawn>(); if (respawn.nextWaveIsCI) { respawn.timeToNextRespawn = 14f; return(new string[] { $"SpawnSet. nextIsCi:{respawn.nextWaveIsCI}" }); } else { respawn.timeToNextRespawn = 19f; return(new string[] { $"SpawnSet. nextIsCi:{respawn.nextWaveIsCI}" }); } } else if (args[0] == "override") { Player ply = sender as Player; if (ply != null) { SanyaPlugin.scp_override_steamid = ply.SteamId; } return(new string[] { $"set ok:{SanyaPlugin.scp_override_steamid}" }); } else if (args[0] == "ammo") { Player ply = sender as Player; if (ply != null) { ply.SetAmmo(AmmoType.DROPPED_5, 999); ply.SetAmmo(AmmoType.DROPPED_7, 999); ply.SetAmmo(AmmoType.DROPPED_9, 999); } return(new string[] { $"Ammo set full." }); } else if (args[0] == "106") { foreach (PocketDimensionExit pde in plugin.Server.Map.GetPocketDimensionExits()) { pde.ExitType = PocketDimensionExitType.Exit; } return(new string[] { $"All set to [Exit]." }); } else if (args[0] == "914") { if (args.Length > 1) { if (args[1] == "use") { SanyaPlugin.Call914Use(); return(new string[] { "914 used." }); } else if (args[1] == "change") { SanyaPlugin.Call914Change(); return(new string[] { "914 changed." }); } } } else if (args[0] == "939") { SanyaPlugin.Call939CanSee(); return(new string[] { "939 can all see." }); } else if (args[0] == "096") { Scp096PlayerScript.instance.IncreaseRage(1f); return(new string[] { "096 has Raged." }); } else if (args[0] == "079") { if (args.Length > 2) { if (args[1] == "level") { foreach (Player player in plugin.Server.GetPlayers(Role.SCP_079)) { player.Scp079Data.Level = Mathf.Clamp(int.Parse(args[2]) - 1, 0, 4); player.Scp079Data.ShowLevelUp(Mathf.Clamp(int.Parse(args[2]) - 1, 0, 4)); } return(new string[] { $"079 Level Set to:{Mathf.Clamp(int.Parse(args[2]), 1, 5)}" }); } } else if (args.Length > 1) { if (args[1] == "ap") { foreach (Player player in plugin.Server.GetPlayers(Role.SCP_079)) { player.Scp079Data.AP = player.Scp079Data.MaxAP; } return(new string[] { "079 AP MAX." }); } } } else if (args[0] == "flagtest") { if (SanyaPlugin.test) { SanyaPlugin.test = false; } else { SanyaPlugin.test = true; } plugin.Error($"test:{SanyaPlugin.test}"); return(new string[] { $"test:{SanyaPlugin.test}" }); } else if (args[0] == "ping") { List <string> pinglist = new List <string>(); byte b; foreach (Player player in plugin.Server.GetPlayers()) { UnityEngine.Networking.NetworkConnection conn = (player.GetGameObject() as GameObject).GetComponent <NicknameSync>().connectionToClient; pinglist.Add($"Name: {player.Name} IP: {player.IpAddress} Ping: {UnityEngine.Networking.NetworkTransport.GetCurrentRTT(conn.hostId, conn.connectionId, out b)}ms"); } return(pinglist.ToArray()); } else if (args[0] == "now") { return(new string[] { TimeBehaviour.CurrentTimestamp().ToString() }); } else if (args[0] == "randomitem") { List <string> returned = new List <string>(); RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType <RandomItemSpawner>(); foreach (var i in rnde.posIds) { returned.Add($"{i.index}:{i.posID}:{i.position.position}"); } returned.Add($"-----"); foreach (var i in rnde.pickups) { returned.Add($"{i.itemID}:{i.posID}:{(ItemType)i.itemID}"); } return(returned.ToArray()); } else if (args[0] == "namechange") { Player ply = sender as Player; if (ply != null) { if (args.Length > 1) { GameObject gameObject = ply.GetGameObject() as GameObject; if (gameObject != null) { plugin.Warn($"[NameChanger] {ply.Name} -> {args[1]}"); gameObject.GetComponent <NicknameSync>().NetworkmyNick = args[1]; gameObject.GetComponent <CharacterClassManager>().NetworkSteamId = string.Empty; if (plugin.level_enabled) { ply.SetRank("default", $"Level{UnityEngine.Random.Range(1, 50)}", null); } else { Timing.RunCoroutine(SanyaPlugin._DelayedRefreshTag(ply), Segment.Update); } if (plugin.score_summary_inround) { PlayerScoreInfo target = SanyaPlugin.eventhandler.scoredb.Find(x => x.player.PlayerId == ply.PlayerId); if (target != null) { SanyaPlugin.eventhandler.scoredb.Remove(target); SanyaPlugin.eventhandler.scoredb.Add(new PlayerScoreInfo(plugin.Server.GetPlayer(ply.PlayerId))); } } return(new string[] { $"Change to : {ply.Name} -> {args[1]}" }); } else { return(new string[] { "Error. (GameObject cast error)" }); } } else { return(new string[] { "param \"Name\" not found." }); } } else { return(new string[] { "only can use player." }); } } else if (args[0] == "test") { Player ply = sender as Player; GameObject gameObject = null; GameObject host = GameObject.Find("Host"); System.Random rnd = new System.Random(); if (ply != null) { gameObject = ply.GetGameObject() as GameObject; } //foreach (Camera079 item in Scp079PlayerScript.allCameras) //{ // if(item.cameraName.Contains("ICOM")) // plugin.Debug($"Name:{item.cameraName}"); //} //foreach(Smod2.API.Player p in plugin.Server.GetPlayers()) //{ // FootstepSync foots = (p.GetGameObject() as UnityEngine.GameObject).GetComponent<FootstepSync>(); // foots.CallCmdSyncFoot(true); //} //if(args.Length > 1) //{ // SanyaPlugin.CallAmbientSound(int.Parse(args[1])); //} //RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType<RandomItemSpawner>(); //foreach(var i in rnde.pickups) //{ // plugin.Info($"{i.itemID} {i.posID}"); //} //foreach(var i in rnde.posIds) //{ // plugin.Info($"{i.index} {i.posID} {i.position.position}"); //} //(ply.GetGameObject() as UnityEngine.GameObject).GetComponent<FlashEffect>().CallCmdBlind(true); //Scp049PlayerScript s049 = gameObject.GetComponent<Scp049PlayerScript>(); //Vector3 position = s049.plyCam.transform.position; //Vector3 forward = s049.plyCam.transform.forward; //plugin.Debug($"Raycast..."); //RaycastHit raycastHit; //if (Physics.Raycast(position, forward, out raycastHit, 500f, 262144)) //{ // plugin.Error($"name:{raycastHit.transform.name} parent:{raycastHit.transform.parent.name} root:{raycastHit.transform.root.name}"); //} //else //{ // plugin.Warn($"not hit(raycast)"); //} //plugin.Debug($"CheckGround..."); //Vector3 pos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y - 0.8f, gameObject.transform.position.z); //Collider[] hits = Physics.OverlapBox(pos, FallDamage.GroundCheckSize, new Quaternion(0f, 0f, 0f, 0f), FallDamage.staticGroundMask); //if (hits.Length != 0) //{ // foreach (var i in hits) // { // plugin.Error($"name:{i.transform.name} parent:{i.transform.parent.name} root:{i.transform.root.name}"); // } //} //else //{ // plugin.Warn($"not hit(ground)"); //} //foreach (var i in GameObject.FindObjectsOfType<TeslaGate>()) //{ // plugin.Debug($"{i.killerMask.ToString()}"); //} //for (int i = 0; i < 32; i++) //{ // plugin.Debug($"Layer[{i}]{LayerMask.LayerToName(i)}"); // if (((1 << i) & 1208246273) != 0) // { // plugin.Warn($"1208246273 in [{i}]"); // } // if (((1 << i) & 1207976449) != 0) // { // plugin.Warn($"1207976449 in [{i}]"); // } //} //plugin.Debug($"{LayerMask.GetMask(new string[] { "CCTV" })}"); //CharacterClassManager ccm = gameObject.GetComponent<CharacterClassManager>(); //PlayerStats.HitInfo info = new PlayerStats.HitInfo(1f, ply.Name, DamageTypes.None, ply.PlayerId); //gameObject.GetComponent<RagdollManager>().SpawnRagdoll(gameObject.transform.position, gameObject.transform.rotation, ccm.curClass, info, false, // gameObject.GetComponent<Dissonance.Integrations.UNet_HLAPI.HlapiPlayer>().PlayerId, gameObject.GetComponent<NicknameSync>().myNick, // gameObject.GetComponent<RemoteAdmin.QueryProcessor>().PlayerId, gameObject); //plugin.Debug($"{GameObject.FindObjectOfType<TeslaGate>().killerMask.value}"); //RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType<RandomItemSpawner>(); //foreach (var pos in rnde.posIds) //{ // plugin.Warn($"[{pos.index}] {pos.posID} -> [{pos.position.position}]"); //} //plugin.Debug($"{(ply.GetCurrentItem().GetComponent() as Inventory).items[(ply.GetCurrentItem().GetComponent() as Inventory).curItem].}"); //var outside = GameObject.FindObjectOfType<AlphaWarheadOutsitePanel>(); //if(outside != null) //{ // outside.SetKeycardState(false); //} //GrenadeManager gre = GameObject.FindObjectOfType<GrenadeManager>(); //foreach (var i in GrenadeManager.grenadesOnScene) //{ // plugin.Error($"{i.id}"); // gre.CallRpcExplode(i.id, ply.PlayerId); //} //GrenadeManager gre = GameObject.FindObjectOfType<GrenadeManager>(); //foreach(var i in gre.availableGrenades) //{ // plugin.Error($"{i.apiName}[{i.inventoryID}]:{i.timeUnitilDetonation}"); //} //GrenadeManager gre = GameObject.FindObjectOfType<GrenadeManager>(); //foreach (var i in GrenadeManager.grenadesOnScene) //{ // plugin.Error($"{i.id}:{i.transform.position}"); //} //plugin.Error($"return:{MEC.Timing.KillCoroutines("FollowingGrenade")}"); //gameObject.GetComponent<PlyMovementSync>().SetAllowInput(SanyaPlugin.test); //for(var i = 0; i < Scp079PlayerScript.allCameras.Length; i++) //{ // plugin.Warn($"[{i}]{Scp079PlayerScript.allCameras[i].cameraName}"); //} //plugin.Error($"{plugin.Server.GetAppFolder(false,true)}"); //plugin.Error($"{plugin.Server.GetAppFolder(true,true)}"); //plugin.Warn($"{gameObject.GetComponent<ServerRoles>().GetUncoloredRoleString()}:{gameObject.GetComponent<ServerRoles>().MyColor}"); //plugin.Error($"Count:{plugin.playersData.Count}"); //foreach(PlayerData player in plugin.playersData) //{ // plugin.Error($"{player.steamid}:{player.level}:{player.exp}"); //} //foreach(PlayerData data in plugin.playersData) //{ // plugin.Warn($"{data.steamid}:Level{data.level}({data.exp}EXP/Next:{Mathf.Clamp(data.level*3-data.exp,0,data.level*3-data.exp)})"); //} //MEC.Timing.RunCoroutine(plugin._CheckIsLimitedSteam(ply), MEC.Segment.FixedUpdate); //ServerConsole.Disconnect(gameObject, plugin.steam_kick_limited_message); //plugin.Error($"{host.GetComponent<MTFRespawn>().timeToNextRespawn}"); //foreach(var i in gameObject.GetComponent<Medkit>().Medkits) //{ // plugin.Error($"{i.InventoryID}:{i.Label}:{i.MaximumHealthRegeneration}:{i.MinimumHealthRegeneration}"); //} //gameObject.GetComponent<Inventory>().NetworkcurItem = -1; //plugin.Error($"{LayerMask.GetMask(new string[] { "Ragdoll" })}"); //foreach(var i in plugin.playersData) //{ // plugin.Error($"{i.steamid}:{i.limited}"); // i.limited = true; //} //plugin.SavePlayersData(); //RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType<RandomItemSpawner>(); //foreach(var i in rnde.posIds) //{ // plugin.Error($"{i.index}:{i.posID}:{i.position.position}"); //} //plugin.Error($"-----"); //foreach(var i in rnde.pickups) //{ // plugin.Error($"{i.itemID}:{i.posID}:{(ItemType)i.itemID}"); //} //var lcz = host.GetComponent<DecontaminationLCZ>(); //foreach(var i in lcz.announcements) //{ // plugin.Error($"{i.startTime}:{i.options}"); //} //GameObject[] array = GameObject.FindGameObjectsWithTag("RoomID"); //foreach(GameObject gameObject2 in array) //{ // if(gameObject2.GetComponent<Rid>() != null) // { // plugin.Error($"{gameObject2.GetComponent<Rid>().id}:{gameObject2.transform.position}"); // } //} //foreach(var pos in SanyaPlugin.Call106PDRandomExit(false)) //{ // plugin.Error($"{pos}"); //} //GameObject tunnel = GameObject.Find("Root_CollapsedTunnel"); //GameObject entrance = GameObject.Find("EntranceRooms"); //if(tunnel != null) //{ // plugin.Error($"{tunnel.name}/{tunnel.transform.position}"); //} //if(entrance != null) //{ // plugin.Error($"{entrance.name}/{entrance.transform.position}"); // foreach(Transform i in entrance.GetComponentInChildren<Transform>()) // { // plugin.Error($"{i.name}/{i.position}/{i.localPosition}"); // plugin.Error($"--->{i.}"); // } //} //ImageGenerator ig_ent = null; //ImageGenerator ig_hcz = null; //ImageGenerator ig_lcz = null; //foreach(ImageGenerator ig in GameObject.FindObjectsOfType<ImageGenerator>()) //{ // if(ig.height == 0) // { // plugin.Error("lcz found"); // ig_lcz = ig; // }else if(ig.height == -1000) // { // plugin.Error("hcz found"); // ig_hcz = ig; // } // else // { // plugin.Error("ent found"); // ig_ent = ig; // } //} //foreach(var i in ig_ent.roomsOfType) //{ // foreach(var x in i.roomsOfType) // { // foreach(var y in x.room) // { // plugin.Error($"{y.name}/{x.type}"); // } // } //} //int testmask = 1208246273; //testmask |= 1 << 4; //plugin.Debug($"{testmask}"); //for(int i = 0; i < 32; i++) //{ // plugin.Debug($"Layer[{i}]{LayerMask.LayerToName(i)}"); // if(((1 << i) & 1208246273) != 0) // { // plugin.Warn($"1208246273 in [{i}]"); // } // if(((1 << i) & testmask) != 0) // { // plugin.Warn($"testmask in [{i}]"); // } //} //foreach(var i in UnityEngine.Object.FindObjectsOfType<BreakableWindow>()) //{ // plugin.Error($"{i.health}"); //} //foreach(var i in UnityEngine.Object.FindObjectsOfType<Radio>()) //{ // System.Type radiotype = i.GetType(); // var myRadio = radiotype.GetField("myRadio", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); // var radioUniq = radiotype.GetField("radioUniq", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); // plugin.Error($"name:{i.name}/isLocalPlayer:{i.isLocalPlayer}/myRadio:{(int)myRadio.GetValue(i)}/radioUniq:{(int)radioUniq.GetValue(i)}"); //} return(new string[] { "test ok" }); } } return(new string[] { GetUsage() }); }
public static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan) { if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false)) { duration = int.MaxValue; } string userId = null; string address = user.GetComponent <NetworkIdentity>().connectionToClient.address; CharacterClassManager characterClassManager = null; ReferenceHub userHub = Extensions.Player.GetPlayer(user); try { if (ConfigFile.ServerConfig.GetBool("online_mode", false)) { characterClassManager = userHub.characterClassManager; userId = characterClassManager.UserId; } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (1)!"); return(false); } string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. "; if (!string.IsNullOrEmpty(reason)) { message = message + "Reason: " + reason; } try { bool allow = true; Events.InvokePlayerBan(ref userHub, ref userId, ref duration, ref allow, ref message, ref reason); if (!allow) { return(false); } } catch (Exception ex) { Log.Error($"Error in OnBanPlayer event: {ex.ToString()}"); } if (duration > 0 && (!ServerStatic.PermissionsHandler.IsVerified || !userHub.serverRoles.BypassStaff)) { string originalName = string.IsNullOrEmpty(userHub.nicknameSync.MyNick) ? "(no nick)" : userHub.nicknameSync.MyNick; long issuanceTime = TimeBehaviour.CurrentTimestamp(); long banExpieryTime = TimeBehaviour.GetBanExpieryTime((uint)duration); try { if (userId != null && !isGlobalBan) { BanHandler.IssueBan(new BanDetails { OriginalName = originalName, Id = userId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer }, BanHandler.BanType.UserId); if (!string.IsNullOrEmpty(characterClassManager.UserId2)) { BanHandler.IssueBan(new BanDetails { OriginalName = originalName, Id = characterClassManager.UserId2, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer }, BanHandler.BanType.UserId); } } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (2)!"); return(false); } try { if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan) { BanHandler.IssueBan(new BanDetails { OriginalName = originalName, Id = address, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer }, BanHandler.BanType.IP); } } catch { ServerConsole.AddLog("Failed during issue of IP ban!"); return(false); } } List <GameObject> playersToBan = new List <GameObject>(); foreach (GameObject gameObject in PlayerManager.players) { characterClassManager = gameObject.GetComponent <CharacterClassManager>(); if ((userId != null && characterClassManager.UserId == userId) || (address != null && characterClassManager.connectionToClient.address == address)) { playersToBan.Add(characterClassManager.gameObject); } } foreach (GameObject player in playersToBan) { ServerConsole.Disconnect(player, message); } return(false); }