public void AddReward(Reward reward, CPResponse responseBody) { ClubPenguin.Net.Offline.PlayerAssets value = offlineDatabase.Read <ClubPenguin.Net.Offline.PlayerAssets>(); ProgressionService progressionService = Service.Get <ProgressionService>(); if (reward.TryGetValue <CoinReward>(out var rewardable)) { value.Assets.coins += rewardable.Coins; } if (reward.TryGetValue <MascotXPReward>(out var rewardable2)) { foreach (KeyValuePair <string, int> item in rewardable2.XP) { if (value.Assets.mascotXP.ContainsKey(item.Key)) { value.Assets.mascotXP[item.Key] = progressionService.addXp(item.Key, item.Value, value.Assets.mascotXP[item.Key]); } else { value.Assets.mascotXP[item.Key] = progressionService.addXp(item.Key, item.Value, 0L); } } int level = progressionService.Level; int num = 0; foreach (long value5 in value.Assets.mascotXP.Values) { num += ProgressionService.GetMascotLevelFromXP(value5); } if (num > level) { if (responseBody.wsEvents == null) { responseBody.wsEvents = new List <SignedResponse <WebServiceEvent> >(); } responseBody.wsEvents.Add(new SignedResponse <WebServiceEvent> { Data = new WebServiceEvent { details = num, type = 3 } }); } } if (reward.TryGetValue <CollectibleReward>(out var rewardable3)) { foreach (KeyValuePair <string, int> collectible in rewardable3.Collectibles) { if (value.Assets.collectibleCurrencies.ContainsKey(collectible.Key)) { value.Assets.collectibleCurrencies[collectible.Key] += collectible.Value; } else { value.Assets.collectibleCurrencies[collectible.Key] = collectible.Value; } } } if (reward.TryGetValue <DecalReward>(out var rewardable4)) { value.Assets.decals.AddRange(rewardable4.Decals); } if (reward.TryGetValue <FabricReward>(out var rewardable5)) { value.Assets.fabrics.AddRange(rewardable5.Fabrics); } if (reward.TryGetValue <EmoteReward>(out var rewardable6)) { value.Assets.emotePacks.AddRange(rewardable6.Emotes); } if (reward.TryGetValue <EquipmentTemplateReward>(out var rewardable7)) { value.Assets.equipmentTemplates.AddRange(rewardable7.EquipmentTemplates); } if (reward.TryGetValue <EquipmentInstanceReward>(out var rewardable8)) { System.Random random = new System.Random(); byte[] array = new byte[8]; CustomEquipmentCollection value2 = offlineDatabase.Read <CustomEquipmentCollection>(); foreach (CustomEquipment equipmentInstance in rewardable8.EquipmentInstances) { random.NextBytes(array); value2.Equipment.Add(new CustomEquipment { dateTimeCreated = DateTime.UtcNow.GetTimeInMilliseconds(), definitionId = equipmentInstance.definitionId, equipmentId = BitConverter.ToInt64(array, 0), parts = equipmentInstance.parts }); } offlineDatabase.Write(value2); } if (reward.TryGetValue <LotReward>(out var rewardable9)) { value.Assets.lots.AddRange(rewardable9.Lots); } if (reward.TryGetValue <DecorationInstanceReward>(out var rewardable10)) { DecorationInventoryEntity value3 = offlineDatabase.Read <DecorationInventoryEntity>(); foreach (KeyValuePair <int, int> decoration in rewardable10.Decorations) { DecorationId decorationId = new DecorationId(decoration.Key, DecorationType.Decoration); if (value3.Inventory.ContainsKey(decorationId)) { value3.Inventory[decorationId] += decoration.Value; } else { value3.Inventory[decorationId] = decoration.Value; } } offlineDatabase.Write(value3); } if (reward.TryGetValue <StructureInstanceReward>(out var rewardable11)) { DecorationInventoryEntity value3 = offlineDatabase.Read <DecorationInventoryEntity>(); foreach (KeyValuePair <int, int> decoration2 in rewardable11.Decorations) { DecorationId decorationId = new DecorationId(decoration2.Key, DecorationType.Structure); if (value3.Inventory.ContainsKey(decorationId)) { value3.Inventory[decorationId] += decoration2.Value; } else { value3.Inventory[decorationId] = decoration2.Value; } } offlineDatabase.Write(value3); } if (reward.TryGetValue <DecorationReward>(out var rewardable12)) { value.Assets.decorations.AddRange(rewardable12.Decorations); } if (reward.TryGetValue <StructureReward>(out var rewardable13)) { value.Assets.structures.AddRange(rewardable13.Structures); } if (reward.TryGetValue <MusicTrackReward>(out var rewardable14)) { value.Assets.musicTracks.AddRange(rewardable14.MusicTracks); } if (reward.TryGetValue <LightingReward>(out var rewardable15)) { value.Assets.lighting.AddRange(rewardable15.Lighting); } if (reward.TryGetValue <DurableReward>(out var rewardable16)) { value.Assets.durables.AddRange(rewardable16.Durables); } if (reward.TryGetValue <IglooSlotsReward>(out var rewardable17)) { value.IglooSlots += rewardable17.IglooSlots; } if (reward.TryGetValue <ConsumableReward>(out var rewardable18)) { value.Assets.partySupplies.AddRange(rewardable18.Consumable); } if (reward.TryGetValue <TubeReward>(out var rewardable19)) { value.Assets.tubes.AddRange(rewardable19.Tubes); } if (reward.TryGetValue <ConsumableInstanceReward>(out var rewardable20)) { ClubPenguin.Net.Offline.ConsumableInventory value4 = offlineDatabase.Read <ClubPenguin.Net.Offline.ConsumableInventory>(); foreach (KeyValuePair <string, int> consumable in rewardable20.Consumables) { if (value4.Inventory.ContainsKey(consumable.Key)) { value4.Inventory[consumable.Key].itemCount += consumable.Value; } else { value4.Inventory[consumable.Key] = new InventoryItemStock { itemCount = consumable.Value }; } value4.Inventory[consumable.Key].lastPurchaseTimestamp = DateTime.UtcNow.GetTimeInMilliseconds(); } offlineDatabase.Write(value4); } offlineDatabase.Write(value); }