Example #1
0
        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}!");
        }
Example #4
0
        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}!");
        }
Example #5
0
        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();
        }
Example #7
0
File: Item.cs Project: kulaj/Uchu
        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);
        }