Beispiel #1
0
 public long Insert(BannerSlot bannerSlot)
 {
     return(QueryFactory.Query(TableName).InsertGetId <long>(new
     {
         datetime = bannerSlot.ActivateTime.ToUnixTimeSeconds(),
         banner_id = bannerSlot.BannerId,
         active = bannerSlot.Active
     }));
 }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
    }