public string RemoveUser(string[] arguments) { if (arguments.Length != 1) { return("removeuser <name>"); } var name = arguments[0]; using var ctx = new UchuContext(); var user = ctx.Users.FirstOrDefault(u => u.Username == name); if (user == null) { return($"No user with the username of: {name}"); } Console.Write("Write the username again to confirm deletion: "); if (Console.ReadLine() != name) { return("Deletion aborted"); } ctx.Users.Remove(user); ctx.SaveChanges(); return($"Successfully deleted user: {name}"); }
public static string RemoveUser(string[] arguments) { if (arguments == null) { throw new ArgumentNullException(nameof(arguments), ResourceStrings.StandardCommandHandler_RemoveUser_ArgumentsNullException); } if (arguments.Length != 1) { return("removeuser <name>"); } var name = arguments[0]; using var ctx = new UchuContext(); var user = ctx.Users.FirstOrDefault(u => String.Equals(u.Username.ToUpper(), name.ToUpper())); if (user == null) { return($"No user with the username of: {name}"); } Console.Write(ResourceStrings.StandardCommandHandler_RemoveUser_ConfirmationMessage); if (Console.ReadLine() != name) { return("Deletion aborted"); } ctx.Users.Remove(user); ctx.SaveChanges(); return($"Successfully deleted user: {name}"); }
public static string AddUser(string[] arguments) { if (arguments == null) { throw new ArgumentNullException(nameof(arguments), ResourceStrings.StandardCommandHandler_AddUser_ArgumentsNullException); } if (arguments.Length != 1) { return("adduser <name>"); } var name = arguments[0]; if (name.Length > 33) { return("Usernames with more than 33 characters is not supported"); } using var ctx = new UchuContext(); if (ctx.Users.Where(u => !u.Sso).Any(u => string.Equals(u.Username.ToUpper(), name.ToUpper()))) { return("A user with that username already exists"); } Console.Write(ResourceStrings.StandardCommandHandler_AddUser_PasswordPrompt); var password = GetPassword(); if (password.Length > 42) { return("Passwords with more than 42 characters is not supported"); } ctx.Users.Add(new User { Username = name, Password = BCrypt.Net.BCrypt.EnhancedHashPassword(password), CharacterIndex = 0 }); ctx.SaveChanges(); return($"\nSuccessfully added user: {name}!"); }
public string AddUser(string[] arguments) { if (arguments.Length != 1) { return("adduser <name>"); } var name = arguments[0]; if (name.Length > 33) { return("Usernames with more than 33 characters is not supported"); } using var ctx = new UchuContext(); if (ctx.Users.Any(u => u.Username == name)) { return("A user with that username already exists"); } Console.Write("Password: "******"Passwords with more than 42 characters is not supported"); } ctx.Users.Add(new User { Username = name, Password = BCrypt.Net.BCrypt.EnhancedHashPassword(password), CharacterIndex = 0 }); ctx.SaveChanges(); return($"\nSuccessfully added user: {name}!"); }
public async Task <string> RejectUserNames(string[] arguments) { await using var ctx = new UchuContext(); if (arguments.Length == 0 || arguments[0].ToLower() == "all") { var unApproved = ctx.Characters.Where(c => !c.NameRejected && c.Name != c.CustomName && !string.IsNullOrEmpty(c.CustomName)); if (arguments.Length != 1 || arguments[0] != "all") { return(string.Join("\n", unApproved.Select(s => s.CustomName) ) + "\nreject <name> / all"); } foreach (var character in unApproved) { character.NameRejected = true; } ctx.SaveChanges(); return("Successfully rejected all names!"); } var selectedCharacter = await ctx.Characters.FirstOrDefaultAsync(c => c.CustomName == arguments[1] && !c.NameRejected); if (selectedCharacter == null) { return($"No unapproved character with name: \"{arguments[1]}\""); } selectedCharacter.NameRejected = true; await ctx.SaveChangesAsync(); return($"Successfully rejected \"{selectedCharacter.CustomName}\"!"); }
/// <summary> /// Update the activity leaderboard with a player's score. /// </summary> /// <param name="player">The player with the new score.</param> public void UpdateActivityLeaderboard(Player player) { var yearAndWeek = ISOWeek.GetYear(DateTime.Now) * 100 + ISOWeek.GetWeekOfYear(DateTime.Now); using var ctx = new UchuContext(); var existingWeekly = ctx.ActivityScores.FirstOrDefault(entry => entry.Activity == this.GetActivityId() && entry.Zone == Convert.ToInt32(player.Zone.ZoneId) && entry.CharacterId == (long)player.Id && entry.Week == yearAndWeek); var existingAllTime = ctx.ActivityScores.FirstOrDefault(entry => entry.Activity == this.GetActivityId() && entry.Zone == Convert.ToInt32(player.Zone.ZoneId) && entry.CharacterId == (long)player.Id && entry.Week == 0); var leaderboardType = this.GetActivityLeaderboardType(); // For racing and AG monument, a shorter time is better var timeHigherIsBetter = leaderboardType == LeaderboardType.Footrace || leaderboardType == LeaderboardType.AvantGardensSurvival || leaderboardType == LeaderboardType.BattleOfNimbusStation; var timeVar = Convert.ToInt32(this.GetActivityValue(player, 1)); var scoreVar = Convert.ToInt32(this.GetActivityValue(player, 0)); // Update existing weekly leaderboard entry if (existingWeekly != null) { existingWeekly.Time = timeHigherIsBetter ? Math.Max(existingWeekly.Time, timeVar) : Math.Min(existingWeekly.Time, timeVar); existingWeekly.Points = Math.Max(existingWeekly.Points, scoreVar); ctx.ActivityScores.Update(existingWeekly); } // Add new entry else { ctx.ActivityScores.Add(new ActivityScore { Activity = this.GetActivityId(), Zone = player.Zone.ZoneId, CharacterId = player.Id, Points = scoreVar, Time = timeVar, Week = yearAndWeek, }); } // Update existing all-time leaderboard entry. if (existingAllTime != null) { existingAllTime.NumPlayed++; existingAllTime.Time = timeHigherIsBetter ? Math.Max(existingAllTime.Time, timeVar) : Math.Min(existingAllTime.Time, timeVar); existingAllTime.Points = Math.Max(existingAllTime.Points, scoreVar); existingAllTime.LastPlayed = DateTimeOffset.Now.ToUnixTimeSeconds(); ctx.ActivityScores.Update(existingAllTime); } // Add new entry. else { ctx.ActivityScores.Add(new ActivityScore { Activity = this.GetActivityId(), Zone = player.Zone.ZoneId, CharacterId = player.Id, Points = scoreVar, Time = timeVar, LastPlayed = DateTimeOffset.Now.ToUnixTimeSeconds(), NumPlayed = 1, Week = 0, }); } ctx.SaveChanges(); }
public static Item Instantiate(Lot lot, Inventory inventory, uint count, uint slot, LegoDataDictionary extraInfo = default) { using var cdClient = new CdClientContext(); using var ctx = new UchuContext(); var cdClientObject = cdClient.ObjectsTable.FirstOrDefault( o => o.Id == lot ); var itemRegistryEntry = cdClient.ComponentsRegistryTable.FirstOrDefault( r => r.Id == lot && r.Componenttype == 11 ); if (cdClientObject == default || itemRegistryEntry == default) { Logger.Error($"<new item> [{lot}] is not a valid item"); return(null); } var instance = Instantiate <Item> ( inventory.ManagerComponent.Zone, cdClientObject.Name, objectId: ObjectId.Standalone, lot: lot ); instance.Settings = extraInfo ?? new LegoDataDictionary(); var itemComponent = cdClient.ItemComponentTable.First( i => i.Id == itemRegistryEntry.Componentid ); instance.Inventory = inventory; instance.Player = inventory.ManagerComponent.GameObject as Player; var playerCharacter = ctx.Characters.Include(c => c.Items).First( c => c.Id == inventory.ManagerComponent.GameObject.Id ); var inventoryItem = new InventoryItem { Count = count, InventoryType = (int)inventory.InventoryType, Id = instance.Id, IsBound = itemComponent.IsBOP ?? false, Slot = (int)slot, Lot = lot, ExtraInfo = extraInfo?.ToString() }; playerCharacter.Items.Add(inventoryItem); ctx.SaveChanges(); var message = new AddItemToInventoryMessage { Associate = inventory.ManagerComponent.GameObject, InventoryType = (int)inventory.InventoryType, Delta = count, TotalItems = count, Slot = (int)slot, ItemLot = lot, IsBoundOnEquip = itemComponent.IsBOE ?? false, IsBoundOnPickup = itemComponent.IsBOP ?? false, IsBound = inventoryItem.IsBound, Item = instance, ExtraInfo = extraInfo }; (inventory.ManagerComponent.GameObject as Player)?.Message(message); inventory.ManageItem(instance); return(instance); }