public void Execute(ICommandContext context) { IPlayerUser player = (IPlayerUser)context.User; var playerManager = context.Container.Resolve <IPlayerManager>(); playerManager.Kick(player, context.User, "Exit"); }
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(); }
public static IPlayer GetPlayer(this IPlayerUser user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } return(user.GetPrivateProperty <IPlayer>("Player")); }
public static bool TryBuy(this IItemShop shop, IPlayerUser player, int amount = 1) { if (shop.CanBuy()) { return(false); } shop.Buy(player, amount); return(true); }
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); }
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"]); } }
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 }]); } }
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); }
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); }
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); }
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 }])); }
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 })); } }