/// <summary> /// Purchase effect handler /// </summary> private void PurchaseEffect(int userId, CatalogueItem catalogueItem, int amount) { List <EffectData> purchaseEffectsQueue = new List <EffectData>(); var existingEffects = EffectDao.GetUserEffects(userId); for (int i = 0; i < amount; i++) { foreach (var cataloguePackage in catalogueItem.Packages) { var dataList = GenerateEffectData(userId, cataloguePackage, existingEffects); if (!dataList.Any()) { continue; } purchaseEffectsQueue.AddRange(dataList); } } // Bulk create items EffectDao.SaveEffects(purchaseEffectsQueue); var player = PlayerManager.Instance.GetPlayerById(userId); if (player == null) { return; } player.Send(new PurchaseOKComposer(catalogueItem)); purchaseEffectsQueue.ForEach(player.EffectManager.AddEffect); }
public void Load() { Pages = CatalogueDao.GetPages().Select(x => new CataloguePage(x)).ToList(); Items = CatalogueDao.GetItems().Select(x => new CatalogueItem(x)).ToList(); Packages = CatalogueDao.GetPackages().Select(i => new CataloguePackage(i, Items.FirstOrDefault(x => x.Data.SaleCode == i.SaleCode))).ToList(); Effects = EffectDao.GetEffectSettings().ToDictionary(x => x.EffectId, x => new EffectType(x)); Discounts = CatalogueDao.GetDiscounts(); DeserialisePageData(); }
public void Load() { Effects = new ConcurrentDictionary <int, Effect>(); foreach (var effectData in EffectDao.GetUserEffects(player.EntityData.Id)) { Effect effect = new Effect(effectData); Effects.TryAdd(effect.Id, effect); } player.Send(new EffectsMessageComposer(new List <Effect>(Effects.Values))); }
/// <summary> /// Try activate the effects /// </summary> public bool TryActivate() { if (Data.IsActivated) { return(false); } Data.IsActivated = true; Data.ExpiresAt = DateTime.Now.AddSeconds(Duration); EffectDao.UpdateEffect(Data); return(true); }
/// <summary> /// Process effect expiry /// </summary> public void ProcessEffectExpiry(QueuedEvent queuedEvent) { if (!(Entity is Player)) { return; } var player = (Player)Entity; foreach (var effect in player.EffectManager.Effects.Where(x => x.Value.Data.IsActivated && x.Value.Data.ExpiresAt != null && DateTime.Now > x.Value.Data.ExpiresAt).ToList()) { if (effect.Value.Data.Quantity > 0) { effect.Value.Data.Quantity--; } effect.Value.Data.ExpiresAt = null; if (effect.Value.Data.Quantity == 0) { player.EffectManager.Effects.Remove(effect.Value.Id); EffectDao.DeleteEffect(effect.Value.Data); } else { EffectDao.UpdateEffect(effect.Value.Data); } player.Send(new EffectExpiredMessageComposer(effect.Value.Id)); if (player.RoomEntity.EffectId == effect.Value.Id) { player.RoomEntity.UseEffect(0); } } }