PSO2SERVER/Server/Protocol/Packets/4D-ClassicMissionPassPacket/4D-03-MissionPassPacket.cs

180 lines
5.3 KiB
C#

using PSO2SERVER.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PSO2SERVER.Protocol.Packets
{
public class MissionPassPacket : Packet
{
public uint Unk1 { get; set; }
// Ongoing season ID.
public uint CurSeasonId { get; set; }
// Ongoing season name.
public string CurSeason { get; set; }
// Stars required to advance to the next tier.
public uint StarsPerTier { get; set; }
// Regular tier count.
public uint Tiers { get; set; }
// Overrun tier count.
public uint OverrunTiers { get; set; }
// Total tier count.
public uint TotalTiers { get; set; }
// Pass start timestamp.
public uint StartDate { get; set; }
// Pass end timestamp.
public uint EndDate { get; set; }
// Catchup period start timestamp.
public uint CatchupStart { get; set; }
public uint Unk11 { get; set; }
// Banner ID for the ongoing season.
public string CurBanner { get; set; }
// SG price per tier.
public uint PricePerTier { get; set; }
// SG price for gold pass.
public uint GoldPassPrice { get; set; }
// Mission Pass rewards.
public List<MissionPassItem> CurItems { get; set; }
// Previous season ID.
public uint LastSeasonId { get; set; }
// Previous season name.
public string LastSeason { get; set; }
// Stars required to advance to the next tier (previous season).
public uint LastStarsPerTier { get; set; }
// Regular tier count (previous season).
public uint LastTiers { get; set; }
// Overrun tier count (previous season).
public uint LastOverrunTiers { get; set; }
// Total tier count (previous season).
public uint LastTotalTiers { get; set; }
// Pass start timestamp (previous season).
public uint LastStartDate { get; set; }
// Pass end timestamp (previous season).
public uint LastEndDate { get; set; }
// Catchup period start timestamp (previous season).
public uint LastCatchupStart { get; set; }
// Catchup period end timestamp (previous season).
public uint LastCatchupEnd { get; set; }
// Banner ID for the previous season.
public string LastBanner { get; set; }
// SG price per tier (previous season).
public uint LastPricePerTier { get; set; }
// SG price for gold pass (previous season).
public uint LastGoldPassPrice { get; set; }
// Mission Pass rewards (previous season).
public List<MissionPassItem> LastItems { get; set; }
public uint Unk30 { get; set; }
public uint Unk31 { get; set; }
// Default constructor
public MissionPassPacket()
{
CurItems = new List<MissionPassItem>();
LastItems = new List<MissionPassItem>();
}
#region implemented abstract members of Packet
public override byte[] Build()
{
var pkt = new PacketWriter();
pkt.Write(Unk1);
pkt.Write(CurSeasonId);
pkt.WriteUtf16(CurSeason, 0xB0C, 0x35);
// Stars required to advance to the next tier.
pkt.Write(StarsPerTier);
// Regular tier count.
pkt.Write(Tiers);
// Overrun tier count.
pkt.Write(OverrunTiers);
// Total tier count.
pkt.Write(TotalTiers);
// Pass start timestamp.
pkt.Write(StartDate);
// Pass end timestamp.
pkt.Write(EndDate);
// Catchup period start timestamp.
pkt.Write(CatchupStart);
pkt.Write(Unk11);
// Banner ID for the ongoing season.
pkt.WriteUtf16(CurBanner, 0xB0C, 0x35);
// SG price per tier.
pkt.Write(PricePerTier);
// SG price for gold pass.
pkt.Write(GoldPassPrice);
// Write CurItems count and each item
pkt.WriteMagic(CurItems.Count, 0xB0C, 0x35);
foreach (var item in CurItems)
{
pkt.WriteStruct(item);
}
// Write other properties
pkt.Write(LastSeasonId);
pkt.WriteUtf16(LastSeason, 0xB0C, 0x35);
pkt.Write(LastStarsPerTier);
pkt.Write(LastTiers);
pkt.Write(LastOverrunTiers);
pkt.Write(LastTotalTiers);
pkt.Write(LastStartDate);
pkt.Write(LastEndDate);
pkt.Write(LastCatchupStart);
pkt.Write(LastCatchupEnd);
pkt.WriteUtf16(LastBanner, 0xB0C, 0x35);
pkt.Write(LastPricePerTier);
pkt.Write(LastGoldPassPrice);
// Write LastItems count and each item
pkt.WriteMagic(LastItems.Count, 0xB0C, 0x35);
foreach (var item in LastItems)
{
pkt.WriteStruct(item);
}
// Write Unk30 and Unk31
pkt.Write(Unk30);
pkt.Write(Unk31);
return pkt.ToArray();
}
public override PacketHeader GetHeader()
{
return new PacketHeader(0x4D, 0x03, PacketFlags.PACKED);
}
#endregion
}
}