Пример #1
0
        public void Execute(ICommandContext context)
        {
            IPlayerUser player        = (IPlayerUser)context.User;
            var         playerManager = context.Container.Resolve <IPlayerManager>();

            playerManager.Kick(player, context.User, "Exit");
        }
Пример #2
0
        public async Task RegisterCooldownAsync(IPlayerUser player, string kitName, DateTime time)
        {
            if (await m_PermissionChecker.CheckPermissionAsync(player, c_NoCooldownPermission) ==
                PermissionGrantResult.Grant)
            {
                return;
            }

            kitName = kitName.ToLower();

            if (m_KitsCooldownData.KitsCooldown !.TryGetValue(player.Id, out var kitCooldowns))
            {
                var kitCooldown = kitCooldowns !.Find(x => x.KitName == kitName);
                if (kitCooldown == null)
                {
                    kitCooldown = new() { KitName = kitName };
                    kitCooldowns.Add(kitCooldown);
                }

                kitCooldown.KitCooldown = time;
            }
            else
            {
                m_KitsCooldownData.KitsCooldown.Add(player.Id,
                                                    new() { new() { KitCooldown = time, KitName = kitName } });
            }

            await SaveData();
        }
Пример #3
0
        public static IPlayer GetPlayer(this IPlayerUser user)
        {
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            return(user.GetPrivateProperty <IPlayer>("Player"));
        }
Пример #4
0
        public static bool TryBuy(this IItemShop shop, IPlayerUser player, int amount = 1)
        {
            if (shop.CanBuy())
            {
                return(false);
            }

            shop.Buy(player, amount);

            return(true);
        }
Пример #5
0
        public async Task <TimeSpan?> GetLastCooldownAsync(IPlayerUser player, string kitName)
        {
            if (await m_PermissionChecker.CheckPermissionAsync(player, c_NoCooldownPermission) ==
                PermissionGrantResult.Grant ||
                !m_KitsCooldownData.KitsCooldown !.TryGetValue(player.Id, out var kitCooldowns))
            {
                return(null);
            }

            var kitCooldown = kitCooldowns !.Find(x =>
                                                  x.KitName?.Equals(kitName, StringComparison.CurrentCultureIgnoreCase) == true);

            return(kitCooldown == null ? null : DateTime.Now - kitCooldown.KitCooldown);
        }
Пример #6
0
        public virtual async Task GiveKitToPlayer(IPlayerUser playerUser, IServiceProvider serviceProvider)
        {
            if (Items == null)
            {
                return;
            }

            var economyProvider = serviceProvider.GetRequiredService <IEconomyProvider>();
            var stringLocalizer = serviceProvider.GetRequiredService <IStringLocalizer>();
            var logger          = serviceProvider.GetRequiredService <ILogger <Kit> >();

            if (playerUser.Player is IHasInventory hasInventory && hasInventory.Inventory != null)
            {
                var itemSpawner = serviceProvider.GetRequiredService <IItemSpawner>();

                foreach (var item in Items)
                {
                    var result = await itemSpawner.GiveItemAsync(hasInventory.Inventory, item.ItemAssetId,
                                                                 item.State);

                    if (result == null)
                    {
                        logger.LogWarning("Item {Id} was unable to give to player {Name})", item.ItemAssetId, playerUser.FullActorName);
                    }
                }
            }

            if (!string.IsNullOrEmpty(VehicleId))
            {
                var vehicleSpawner = serviceProvider.GetRequiredService <IVehicleSpawner>();

                var result = await vehicleSpawner.SpawnVehicleAsync(playerUser.Player, VehicleId !);

                if (result == null)
                {
                    logger.LogWarning("Vehicle {Id} was unable to give to player {Name})", VehicleId, playerUser.FullActorName);
                }
            }

            if (Money != 0)
            {
                await economyProvider.UpdateBalanceAsync(playerUser.Id, playerUser.Type, Money,
                                                         stringLocalizer["commands:kit:balanceUpdateReason:got"]);
            }
        }
Пример #7
0
        public async Task GiveKitAsync(IPlayerUser user, string name, ICommandActor?instigator = null,
                                       bool forceGiveKit = false)
        {
            var kit = await m_KitStore.FindKitByNameAsync(name);

            if (kit == null)
            {
                throw new UserFriendlyException(m_StringLocalizer["commands:kit:notFound", new { Name = name }]);
            }

            if (!forceGiveKit && await m_PermissionChecker.CheckPermissionAsync(user,
                                                                                $"{KitDatabaseManager.c_KitsKey}.{kit.Name}") != PermissionGrantResult.Grant)
            {
                throw new UserFriendlyException(m_StringLocalizer["commands:kit:noPermission", new { Kit = kit }]);
            }

            var cooldown = await m_KitCooldownStore.GetLastCooldownAsync(user, name);

            if (!forceGiveKit && cooldown != null)
            {
                if (cooldown.Value.TotalSeconds < kit.Cooldown)
                {
                    throw new UserFriendlyException(m_StringLocalizer["commands:kit:cooldown",
                                                                      new { Kit = kit, Cooldown = kit.Cooldown - cooldown.Value.TotalSeconds }]);
                }
            }

            if (!forceGiveKit && kit.Cost != 0)
            {
                await m_EconomyProvider.UpdateBalanceAsync(user.Id, user.Type, -kit.Cost,
                                                           m_StringLocalizer["commands:kit:balanceUpdateReason:buy", new { Kit = kit }]);
            }

            await m_KitCooldownStore.RegisterCooldownAsync(user, name, DateTime.Now);

            await kit.GiveKitToPlayer(user, m_ServiceProvider);

            await user.PrintMessageAsync(m_StringLocalizer["commands:kit:success", new { Kit = kit }]);

            if (instigator != null)
            {
                await instigator.PrintMessageAsync(m_StringLocalizer["commands:kit:success", new { Kit = kit }]);
            }
        }
Пример #8
0
        public async Task <decimal> Buy(IPlayerUser user)
        {
            var vehicleAsset = await GetVehicleAsset();

            var balance = await _economyProvider.UpdateBalanceAsync(user.Id, user.Type, -ShopData.BuyPrice,
                                                                    _stringLocalizer["transactions:vehicles:bought",
                                                                                     new
                                                                                     {
                                                                                         VehicleAsset = vehicleAsset,
                                                                                         Price = ShopData.BuyPrice,
                                                                                         _economyProvider.CurrencySymbol,
                                                                                         _economyProvider.CurrencyName
                                                                                     }]);

            // todo: Switch to non extension method in next update
            await _vehicleSpawner.SpawnVehicleAsync(user.Player, vehicleAsset.VehicleAssetId);

            return(balance);
        }
Пример #9
0
        public async Task <decimal> Buy(IPlayerUser user, int amount = 1)
        {
            if (!CanBuy())
            {
                throw new InvalidOperationException("No buying at this shop");
            }

            var inventory = user.Player.GetInventory() ??
                            throw new UserFriendlyException(_stringLocalizer["errors:no_inventory"]);

            VerifyAmount(amount);

            var itemAsset = await GetItemAsset();

            var price = ShopData.BuyPrice !.Value * amount;

            var balance = await _economyProvider.UpdateBalanceAsync(user.Id, user.Type, -price,
                                                                    _stringLocalizer["transactions:items:bought",
                                                                                     new
                                                                                     {
                                                                                         ItemAsset = itemAsset,
                                                                                         Amount = amount,
                                                                                         Price = price,
                                                                                         _economyProvider.CurrencySymbol,
                                                                                         _economyProvider.CurrencyName
                                                                                     }]);

            for (var i = 0; i < amount; i++)
            {
                var item = await _itemSpawner.GiveItemAsync(inventory, itemAsset);

                if (item == null)
                {
                    throw new Exception($"Could not give item with id '{itemAsset.ItemAssetId}' to player");
                }
            }

            return(balance);
        }
Пример #10
0
        public async Task <IReadOnlyCollection <Kit> > GetAvailableKitsForPlayerAsync(IPlayerUser player)
        {
            var list = new List <Kit>();

            foreach (var kit in await m_KitStore.GetKitsAsync())
            {
                if (await m_PermissionChecker.CheckPermissionAsync(player,
                                                                   $"{KitDatabaseManager.c_KitsKey}.{kit.Name}") == PermissionGrantResult.Grant)
                {
                    list.Add(kit);
                }
            }

            return(list);
        }
Пример #11
0
        public async Task <decimal> Sell(IPlayerUser user, int amount = 1)
        {
            if (!CanSell())
            {
                throw new InvalidOperationException("No selling at this shop");
            }

            var inventory = user.Player.GetInventory() ??
                            throw new UserFriendlyException(_stringLocalizer["errors:no_inventory"]);

            VerifyAmount(amount);

            var itemAsset = await GetItemAsset();

            var id = ShopData.ItemId;

            var count = inventory.Pages.SelectMany(x => x.Items)
                        .Count(inventoryItem => inventoryItem.Item.Asset.ItemAssetId == id);

            if (count < amount)
            {
                throw new UserFriendlyException(_stringLocalizer["commands:errors:not_enough_items",
                                                                 new { CurrentAmount = count, NeededAmount = amount }]);
            }

            var deleted = 0;

            foreach (var page in inventory.Pages)
            {
                var items = page.Items.ToList();

                for (var i = items.Count - 1; i >= 0 && deleted < amount; i--)
                {
                    if (items[i].Item.Asset.ItemAssetId != id)
                    {
                        continue;
                    }

                    await items[i].DestroyAsync();
                    deleted++;
                }

                if (deleted >= amount)
                {
                    break;
                }
            }

            if (deleted != amount)
            {
                throw new Exception($"Deleted items count ({deleted}) is not equal to sell amount ({amount})");
            }

            var price = ShopData.SellPrice !.Value * amount;

            return(await _economyProvider.UpdateBalanceAsync(user.Id, user.Type, price,
                                                             _stringLocalizer["transactions:items:sold",
                                                                              new
                                                                              {
                                                                                  ItemAsset = itemAsset,
                                                                                  Amount = amount,
                                                                                  Price = price,
                                                                                  _economyProvider.CurrencySymbol,
                                                                                  _economyProvider.CurrencyName
                                                                              }]));
        }
Пример #12
0
        public static void AddClothes(IPlayerUser user, IList <KitItem> kitsItems)
        {
            if (!s_IsUnturned)
            {
                return;
            }

            if (!ulong.TryParse(user.Id, out var id))
            {
                return;
            }

            var player = PlayerTool.getPlayer((CSteamID)id);

            if (player == null)
            {
                return;
            }

            var clothing = player.clothing;

            if (clothing.hat != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.hat.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.hatQuality,
                    ItemQuality = clothing.hatQuality,
                    StateData = clothing.hatState
                }));
            }

            if (clothing.glasses != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.glasses.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.glassesQuality,
                    ItemQuality = clothing.glassesQuality,
                    StateData = clothing.glassesState
                }));
            }

            if (clothing.mask != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.mask.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.maskQuality,
                    ItemQuality = clothing.maskQuality,
                    StateData = clothing.maskState
                }));
            }

            if (clothing.pants != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.pants.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.pantsQuality,
                    ItemQuality = clothing.pantsQuality,
                    StateData = clothing.pantsState
                }));
            }

            if (clothing.vest != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.vest.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.vestQuality,
                    ItemQuality = clothing.vestQuality,
                    StateData = clothing.vestState
                }));
            }

            if (clothing.shirt != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.shirt.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.shirtQuality,
                    ItemQuality = clothing.shirtQuality,
                    StateData = clothing.shirtState
                }));
            }

            if (clothing.backpack != 0)
            {
                kitsItems.Insert(0,
                                 new(clothing.backpack.ToString(),
                                     new KitItemState()
                {
                    ItemAmount = 1,
                    ItemDurability = clothing.backpackQuality,
                    ItemQuality = clothing.backpackQuality,
                    StateData = clothing.backpackState
                }));
            }
        }