/// <summary> /// Create a new <see cref="EntitlementManager"/> from existing database model. /// </summary> public EntitlementManager(WorldSession session, AccountModel model) { this.session = session; foreach (AccountEntitlementModel entitlementModel in model.AccountEntitlement) { EntitlementEntry entry = GameTableManager.Instance.Entitlement.GetEntry(entitlementModel.EntitlementId); if (entry == null) { throw new DatabaseDataException($"Account {model.Id} has invalid entitlement {entitlementModel.EntitlementId} stored!"); } var entitlement = new AccountEntitlement(entitlementModel, entry); accountEntitlements.Add(entitlement.Type, entitlement); } }
/// <summary> /// Create or update account <see cref="EntitlementType"/> with supplied value. /// </summary> /// <remarks> /// A positive value must be supplied for new entitlements otherwise an <see cref="ArgumentException"/> will be thrown. /// For existing entitlements a positive value will increment and a negative value will decrement the entitlement value. /// </remarks> public void SetAccountEntitlement(EntitlementType type, int value) { EntitlementEntry entry = GameTableManager.Instance.Entitlement.GetEntry((ulong)type); if (entry == null) { throw new ArgumentException($"Invalid entitlement type {type}!"); } AccountEntitlement entitlement = SetEntitlement(accountEntitlements, entry, value, () => new AccountEntitlement(session.Account.Id, entry, (uint)value)); session.EnqueueMessageEncrypted(new ServerAccountEntitlement { Entitlement = type, Count = entitlement.Amount }); }