using GTANetworkAPI; using reallife_gamemode.Model; using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Util; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; /** * @overview Life of German Reallife - Entities User (User.cs) * @author VegaZ, hydrant * @copyright (c) 2008 - 2018 Life of German */ namespace reallife_gamemode.Server.Entities { public class User : IBankAccountOwner { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [StringLength(32)] public string Name { get; set; } [StringLength(32)] public string SocialClubName { get; set; } [StringLength(64)] public string Password { get; set; } public int LogUserId { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public DateTime RegistrationDate { get; set; } [EmailAddress] [StringLength(64)] public string Email { get; set; } public AdminLevel AdminLevel { get; set; } public bool Dead { get; set; } public float PositionX { get; set; } public float PositionY { get; set; } public float PositionZ { get; set; } [ForeignKey("Character")] public int? CharacterId { get; set; } public Character Character { get; set; } [ForeignKey("Ban")] public int? BanId { get; set; } public Ban Ban { get; set; } public int? FactionId { get; set; } public Faction Faction { get; set; } public bool FactionLeader { get; set; } public int? FactionRankId { get; set; } public FactionRank FactionRank { get;set; } public Faction GetFaction() { using(var context = new DatabaseContext()) { return context.Factions.FirstOrDefault(f => f.Id == FactionId); } } public FactionRank GetFactionRank() { using (var context = new DatabaseContext()) { FactionRank toReturn = context.FactionRanks.FirstOrDefault(fR => fR.Id == FactionRankId); if(toReturn == null) { toReturn = context.FactionRanks.OrderBy(f => f.Order).FirstOrDefault(f => f.FactionId == FactionId); } if(toReturn == null) { toReturn = new FactionRank { RankName = "Rang-Fehler" }; } return toReturn; } } public void BanPlayer(Client admin, string reason, int mins) { using (var banUserContext = new DatabaseContext()) { int unixTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; Ban banUser; if (mins == 0) { NAPI.Chat.SendChatMessageToAll("!{#FF4040}[BAN] " + this.Name + " wurde von " + admin.Name + " permanent gebannt. [" + reason + "]"); banUser = new Ban { UserId = this.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp }; //TODO user.Kick(); mins--; } else { NAPI.Chat.SendChatMessageToAll("!{#FF4040}[BAN] " + this.Name + " wurde von " + admin.Name + " für " + mins + " Minuten gebannt. [" + reason + "]"); banUser = new Ban { UserId = this.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp + mins * 60 }; //TODO user.Kick(); } banUserContext.Bans.Add(banUser); banUserContext.SaveChanges(); var targetUser = banUserContext.Users.FirstOrDefault(u => u.Name == this.Name); targetUser.BanId = banUser.Id; banUserContext.SaveChanges(); } } public void UnbanPlayer(Client admin) { using (var unbanUser = new DatabaseContext()) { User user = admin.GetUser(); var targetUser = unbanUser.Users.FirstOrDefault(u => u.Id == user.Id); targetUser.BanId = null; unbanUser.SaveChanges(); } } public bool IsAdmin(AdminLevel level) => AdminLevel >= level; public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) { if (databaseContext == null) { using (databaseContext = new DatabaseContext()) { return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id); } } else { return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id); } } } }