using System; using System.Linq; using GTANetworkAPI; using ReallifeGamemode.Database; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Wanted; /** * @overview Life of German Reallife - Event Login (Login.cs) * @author VegaZ, xSprite, aviate * @copyright (c) 2008 - 2018 Life of German */ namespace ReallifeGamemode.Server.Events { class Connect : Script { [ServerEvent(Event.PlayerConnected)] public void OnPlayerConnected(Player player) { player.TriggerEvent("CLIENT:StopSound"); //player.SetSharedData("vehicleAdminSpeed2", 1.0); player.SetData("isLoggedIn", false); player.Position = new Vector3(-1883.736, -781.4911, -10); bool registered = false; using (var dbContext = new DatabaseContext()) { registered = dbContext.Users.Where(u => u.Name == player.Name).Any(); if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName == player.SocialClubName)) { string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist."; ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN); NAPI.Util.ConsoleOutput(player.Name + " tried to join without whitelist entry"); ChatService.SendMessage(player, "~m~Du stehst nicht auf der Whitelist"); player.Kick(); return; } } if (IsPlayerBanned(player)) return; NAPI.Task.Run(() => { player.TriggerEvent("CLIENT:PlaySound", "music/login", "mp3", 20); }, delayTime: 1000); player.TriggerEvent("SERVER:Login_ShowBrowser", registered); string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID: " + player.Handle.Value + "] (" + player.Address + ")"; ChatService.BroadcastAdmin(msg, AdminLevel.ADMIN); } private bool IsPlayerBanned(Player player) { using (var dbContext = new DatabaseContext()) { var user = dbContext.Users.SingleOrDefault(b => b.Name == player.Name); if (user == null) { return false; } if (user.BanId != null) { var dt = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var bannedUser = dbContext.Bans.SingleOrDefault(u => u.Id == user.BanId); if (bannedUser.Applied == bannedUser.UntilDateTime) { ChatService.SendMessage(player, "!{#FF4040}Du wurdest permanent gebannt! [" + bannedUser.Reason + "]"); player.Kick(); return true; } else { var timeStamp = bannedUser.UntilDateTime; int unixTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; if (timeStamp > unixTimestamp) { ChatService.SendMessage(player, "Du bist noch bis zum !{#FF4040}" + dt.AddSeconds(timeStamp).ToLocalTime() + " Uhr ~s~gebannt. [" + bannedUser.Reason + "]"); player.Kick(); return true; } else { user.BanId = null; dbContext.SaveChanges(); return false; } } } return false; } } } }