Added catalogue features pages + add some extra checks in catalogue index + pages

main
Tiger 2023-10-14 19:35:03 +02:00
parent e20079bc2c
commit f56198e9cb
10 changed files with 93 additions and 9 deletions

View File

@ -25,10 +25,13 @@ public class GetCatalogIndexEvent : IMessageEvent
await _gameSessionManager.CloseAsync("Not logged in", gameSession);
return;
}
var categories = _catalogueManager.Pages.Values.Where(p => p.Parent is null);
await gameSession.SendComposerAsync(new CatalogPagesListComposer(categories,
request.ReadString() ?? "normal"));
var mode = request.ReadString() ?? "normal";
var categories =
_catalogueManager.Pages.Values.Where(
p => p.Parent is null && p.Modes.Contains(mode) && p.MinRank <= gameSession.Habbo.Rank);
await gameSession.SendComposerAsync(new CatalogPagesListComposer(categories, mode));
}
}

View File

@ -30,11 +30,16 @@ public class GetCatalogPageEvent : IMessageEvent
var offerId = request.ReadInt32() ?? 0;
var mode = request.ReadString() ?? "normal";
if (!_catalogueManager.Pages.TryGetValue(pageId, out var page))
if (!_catalogueManager.Pages.TryGetValue(pageId, out var page) || !page.Enabled ||
page.MinRank > gameSession.Habbo.Rank || !page.Modes.Contains(mode))
{
return;
}
await gameSession.SendComposerAsync(new CatalogPageMessageComposer(page, offerId, mode));
var featuredPages = page.Layout.Equals("frontpage4")
? _catalogueManager.FeaturedPages.Values
: new List<CatalogueFeaturedPage>();
await gameSession.SendComposerAsync(new CatalogPageMessageComposer(page, offerId, mode, featuredPages));
}
}

View File

@ -9,12 +9,15 @@ public class CatalogPageMessageComposer : IMessageComposer
private readonly CataloguePage _page;
private readonly int _offerId;
private readonly string _mode;
private readonly ICollection<CatalogueFeaturedPage> _featuredPages;
public CatalogPageMessageComposer(CataloguePage page, int offerId, string mode)
public CatalogPageMessageComposer(CataloguePage page, int offerId, string mode,
ICollection<CatalogueFeaturedPage> featuredPages)
{
_page = page;
_offerId = offerId;
_mode = mode;
_featuredPages = featuredPages;
}
public OutgoingHeaders Header => OutgoingHeaders.CatalogPage;
@ -40,5 +43,26 @@ public class CatalogPageMessageComposer : IMessageComposer
message.AppendInt32(0);
message.AppendInt32(_offerId);
message.AppendBoolean(_page.SeasonalCurrency);
message.AppendInt32(_featuredPages.Count);
foreach (var featuredPage in _featuredPages)
{
message.AppendInt32(featuredPage.SlotId);
message.AppendString(featuredPage.Caption);
message.AppendString(featuredPage.Image);
message.AppendInt32((int)featuredPage.Type);
switch (featuredPage.Type)
{
default:
case CatalogueFeaturedPageType.PageName:
case CatalogueFeaturedPageType.ProductName:
message.AppendString(featuredPage.Data);
break;
case CatalogueFeaturedPageType.PageId:
message.AppendInt32(int.TryParse(featuredPage.Data, out var pageId) ? pageId : -1);
break;
}
message.AppendInt32((int)(DateTime.Now - featuredPage.Expire).TotalSeconds);
}
}
}

View File

@ -21,7 +21,7 @@ public class CatalogPagesListComposer : IMessageComposer
message.AppendBoolean(true);
message.AppendInt32(0);
message.AppendInt32(-1);
message.AppendString(string.Empty);
message.AppendString("root");
message.AppendString(string.Empty);
message.AppendInt32(0);
message.AppendInt32(_pages.Count());

View File

@ -0,0 +1,11 @@
namespace Tiger.Game.Catalogue;
public class CatalogueFeaturedPage
{
public virtual int SlotId { get; set; }
public virtual string Image { get; set; } = null!;
public virtual string Caption { get; set; } = null!;
public virtual CatalogueFeaturedPageType Type { get; set; }
public virtual DateTime Expire { get; set; }
public virtual string Data { get; set; } = null!;
}

View File

@ -0,0 +1,17 @@
using FluentNHibernate.Mapping;
namespace Tiger.Game.Catalogue;
public class CatalogueFeaturedPageMap : ClassMap<CatalogueFeaturedPage>
{
public CatalogueFeaturedPageMap()
{
Table("catalogue_featured_pages");
Id(fp => fp.SlotId).Column("slot_id").GeneratedBy.Identity();
Map(fp => fp.Image).Column("image").Not.Nullable();
Map(fp => fp.Caption).Column("caption").Not.Nullable();
Map(fp => fp.Type).CustomType<int>().Column("type").Not.Nullable();
Map(fp => fp.Expire).Column("expire").Not.Nullable();
Map(fp => fp.Data).Column("data").Not.Nullable();
}
}

View File

@ -0,0 +1,8 @@
namespace Tiger.Game.Catalogue;
public enum CatalogueFeaturedPageType
{
PageName,
PageId,
ProductName
}

View File

@ -7,14 +7,19 @@ public class CatalogueManager : ICatalogueManager
{
private readonly IRepository<CataloguePage> _pagesRepository;
private readonly ILogger<ICatalogueManager> _logger;
private readonly IRepository<CatalogueFeaturedPage> _featuredPagesRepository;
public IDictionary<int, CataloguePage> Pages { get; private set; }
public IDictionary<int, CatalogueFeaturedPage> FeaturedPages { get; private set; }
public CatalogueManager(IRepository<CataloguePage> pagesRepository, ILogger<ICatalogueManager> logger)
public CatalogueManager(IRepository<CataloguePage> pagesRepository, ILogger<ICatalogueManager> logger,
IRepository<CatalogueFeaturedPage> featuredPagesRepository)
{
_pagesRepository = pagesRepository;
_logger = logger;
_featuredPagesRepository = featuredPagesRepository;
Pages = new Dictionary<int, CataloguePage>();
FeaturedPages = new Dictionary<int, CatalogueFeaturedPage>();
}
public async Task LoadPagesAsync()
@ -23,4 +28,12 @@ public class CatalogueManager : ICatalogueManager
_logger.LogInformation("Loaded {Count} catalogue pages", Pages.Count);
}
public async Task LoadFeaturedPagesAsync()
{
FeaturedPages =(await _featuredPagesRepository.FindByAsync())
.ToDictionary(p => p.SlotId, p => p);
_logger.LogInformation("Loaded {Count} catalogue featured pages", FeaturedPages.Count);
}
}

View File

@ -3,5 +3,7 @@ namespace Tiger.Game.Catalogue;
public interface ICatalogueManager
{
public IDictionary<int, CataloguePage> Pages { get; }
public IDictionary<int, CatalogueFeaturedPage> FeaturedPages { get; }
Task LoadPagesAsync();
Task LoadFeaturedPagesAsync();
}

View File

@ -47,6 +47,7 @@ var provider = collection.BuildServiceProvider();
await provider.GetRequiredService<ISettingManager>().ReloadSettingsAsync();
await provider.GetRequiredService<ICatalogueManager>().LoadPagesAsync();
await provider.GetRequiredService<ICatalogueManager>().LoadFeaturedPagesAsync();
provider.GetRequiredService<IFigureDataManager>();
await provider.GetRequiredService<ILandingViewManager>().LoadPromoArticlesAsync();
await provider.GetRequiredService<IAchievementManager>().LoadAchievementsAsync();