namespace Supercell.Laser.Logic.Home.Items { using System; using System.Collections.Generic; using System.Text.Json.Serialization; using Supercell.Laser.Titan.DataStream; public class Notification { public int Id; public int Index; public bool IsViewed; public DateTime TimePassed; public string MessageEntry; public string PrimaryMessageEntry; public string SecondaryMessageEntry; public string ButtonMessageEntry; public string FileLocation; public string FileSha; public string ExtLint; public List HeroesIds; public List HeroesTrophies; public List HeroesTrophiesReseted; public List StarpointsAwarded; public int DonationCount; public int DonationGlobalId; public int BrawlerID; public int SkinID; public int PinID; public int IconID; public int ResourceID; public int ResourceCount; public int Type; public int RewardGold; public int RewardGems; public int RewardHeroGlobalId; public int RewardSkinGlobalId; public int RevokePersonHighID; public int RevokePersonLowID; public int RevokeCount; public int VanityRewardGlobalId; public Notification() { if (TimePassed == default(DateTime)) TimePassed = DateTime.UtcNow; HeroesIds = new List(); HeroesTrophies = new List(); HeroesTrophiesReseted = new List(); StarpointsAwarded = new List(); } public void Encode(ByteStream stream) { stream.WriteVInt(Id); stream.WriteInt(Index); stream.WriteBoolean(IsViewed); stream.WriteInt(0); stream.WriteString(MessageEntry); switch (Id) { case 2: // DonateNotification stream.WriteString(null); break; case 63: // ChallengeRewardNotification stream.WriteVInt(0); stream.WriteVInt(1); stream.WriteVInt(1); stream.WriteVInt(1); stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteString(null); stream.WriteBoolean(false); break; case 64: // BoxRewardNotification stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteVInt(0); break; case 66: // FloaterTextNotification break; case 67: // RankedMidSeasonRewardNotification stream.WriteVInt(1); stream.WriteBoolean(true); stream.WriteBoolean(true); stream.WriteVInt(0); stream.WriteVInt(99); stream.WriteBoolean(false); break; case 68: // RankedSeasonEndNotification stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteBoolean(false); break; case 69: // BrawlPassAutoCollectSeasonNotification stream.WriteVInt(0); stream.WriteVInt(0); break; case 70: // ChallengeRewardNotification2 stream.WriteVInt(0); stream.WriteVInt(1); stream.WriteVInt(1); stream.WriteVInt(1); stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteString(null); stream.WriteBoolean(false); break; case 71: // BrawlPassPointRewardNotification stream.WriteVInt(0); stream.WriteVInt(0); break; case 72: // VanityItemRewardNotification stream.WriteVInt(0); stream.WriteVInt(VanityRewardGlobalId); break; case 73: // BrawlPassRewardNotification stream.WriteVInt(0); stream.WriteVInt(0); break; case 75: // ChallengeSkinRewardNotification stream.WriteVInt(0); stream.WriteVInt(SkinID); break; case 76: // QualifyNotification stream.WriteVInt(0); stream.WriteVInt(0); break; case 77: // ProLeagueSeasonEndNotification stream.WriteVInt(0); // Rank stream.WriteVInt(0); // Trophy stream.WriteVInt(0); // RewardId stream.WriteVInt(0); // PointsEarned stream.WriteVInt(0); // SeasonId break; case 78: // RankRewardNotification stream.WriteVInt(0); stream.WriteVInt(16000000 + BrawlerID); // HeroId stream.WriteVInt(0); // Rank break; case 79: // StarPointsNotification stream.WriteVInt(0); if (HeroesIds == null) HeroesIds = new List(); if (HeroesTrophies == null) HeroesTrophies = new List(); if (HeroesTrophiesReseted == null) HeroesTrophiesReseted = new List(); if (StarpointsAwarded == null) StarpointsAwarded = new List(); stream.WriteVInt(HeroesIds.Count); for (int i = 0; i < HeroesIds.Count; i++) { stream.WriteVInt(HeroesIds[i]); stream.WriteVInt(HeroesTrophies[i]); stream.WriteVInt(HeroesTrophiesReseted[i]); stream.WriteVInt(StarpointsAwarded[i]); } stream.WriteVInt(0); break; case 80: // ResourceRewardNotification stream.WriteVInt(ResourceCount); break; case 81: // FreeTextNotification stream.WriteVInt(1); stream.WriteVInt(1); break; case 82: // BandNotification stream.WriteVInt(1); stream.WriteBoolean(true); stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteBoolean(true); stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteString(""); stream.WriteVInt(0); break; case 83: // PromoPopupNotification stream.WriteInt(0); stream.WriteStringReference(PrimaryMessageEntry ?? ""); stream.WriteInt(0); stream.WriteStringReference(SecondaryMessageEntry ?? ""); stream.WriteInt(0); stream.WriteStringReference(ButtonMessageEntry ?? ""); stream.WriteStringReference(FileLocation ?? ""); stream.WriteStringReference(FileSha ?? ""); stream.WriteStringReference(ExtLint ?? ""); break; case 84: // StarPowerRewardNotification stream.WriteVInt(0); stream.WriteVInt(16000000 + BrawlerID); stream.WriteVInt(0); // StarPowerId break; case 85: // RevokeNotification stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteVInt(RevokeCount); stream.WriteInt(RevokePersonHighID); stream.WriteInt(RevokePersonLowID); stream.WriteVInt(0); stream.WriteString(""); break; case 86: // IAPDeliveryNotification stream.WriteVInt(0); stream.WriteVInt(0); break; case 88: // CoinDoublerRewardNotification stream.WriteVInt(0); stream.WriteVInt(ResourceCount); break; case 89: // GemRewardNotification stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteVInt(DonationCount); break; case 90: // ResourceRewardNotification (скин/ресурс) stream.WriteVInt(0); stream.WriteVInt(5000000 + ResourceID); stream.WriteVInt(ResourceCount); break; case 93: // HeroRewardNotification stream.WriteVInt(0); stream.WriteVInt(0); stream.WriteVInt(16000000 + BrawlerID); break; case 94: // SkinRewardNotification stream.WriteVInt(0); stream.WriteVInt(29000000 + SkinID); break; default: // FreeTextNotification fallback stream.WriteVInt(0); break; } } } }