public long Insert(BannerSlot bannerSlot) { return(QueryFactory.Query(TableName).InsertGetId <long>(new { datetime = bannerSlot.ActivateTime.ToUnixTimeSeconds(), banner_id = bannerSlot.BannerId, active = bannerSlot.Active })); }
private static UGC HandleCreateUGCBanner(GameSession session, PacketReader packet) { Player player = session.Player; long bannerId = packet.ReadLong(); UGCBanner banner = GameServer.UGCBannerManager.GetBanner(bannerId); if (banner is null) { Logger.Warning("Banner {0} not found.", bannerId); return(null); } // get metadata for prices AdBannerMetadata metadata = AdBannerMetadataStorage.GetMetadata(bannerId); if (metadata is null) { Logger.Warning("Banner {0} metadata not found.", bannerId); } byte count = packet.ReadByte(); UGC newUgc = new($"AD Banner {bannerId}", player.CharacterId, player.Name, player.Account.Id, 0, UGCType.Banner); for (int i = 0; i < count; i++) { long id = packet.ReadLong(); packet.ReadInt(); // 1 packet.ReadLong(); // banner id packet.ReadInt(); // date as YYYYMMDD int hour = packet.ReadInt(); packet.ReadLong(); if (!player.Account.Meret.Modify(-metadata.Prices[hour])) { return(null); } BannerSlot bannerSlot = banner.Slots.FirstOrDefault(x => x.Id == id); if (bannerSlot is null) { Logger.Warning("Invalid banner slot with id {id} and hour {hour}.", id, hour); return(null); } bannerSlot.UGC = newUgc; DatabaseManager.BannerSlot.UpdateUGCUid(bannerSlot.Id, newUgc.Uid); } return(newUgc); }
private static void WriteActiveBannerSlot(this PacketWriter pWriter, UGCBanner ugcBanner) { pWriter.WriteLong(ugcBanner.Id); BannerSlot activeSlot = ugcBanner.Slots.FirstOrDefault(x => x.Active); pWriter.WriteBool(activeSlot is not null); if (activeSlot is null) { return; } pWriter.Write(UGCType.Banner); pWriter.WriteInt(2); pWriter.WriteLong(activeSlot.UGC.AccountId); pWriter.WriteLong(activeSlot.UGC.CharacterId); pWriter.WriteUnicodeString(); // unknown pWriter.WriteUnicodeString(activeSlot.UGC.CharacterName); pWriter.WriteLong(activeSlot.UGC.Uid); pWriter.WriteUnicodeString(activeSlot.UGC.Guid.ToString()); pWriter.WriteByte(3); pWriter.WriteByte(1); pWriter.WriteLong(activeSlot.BannerId); byte loopCounter = 1; // not sure when more than 1 is used pWriter.WriteByte(loopCounter); for (byte i = 0; i < loopCounter; i++) { pWriter.WriteLong(activeSlot.Id); pWriter.WriteInt(2); pWriter.WriteLong(activeSlot.BannerId); pWriter.WriteInt(activeSlot.Date); pWriter.WriteInt(activeSlot.Hour); pWriter.WriteLong(); } pWriter.WriteUnicodeString(activeSlot.UGC.Url); }