using Conquer_Online_Server.Network;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Conquer_Online_Server
{
public class DailySignIn : Writer, Interfaces.IPacket
{
public static void Reload(Client.GameState client)
{
DailySignIn signin = new DailySignIn(true);
signin.Type = Action.Info;
signin.Claimed = client.SignClaim;
signin.CumulativeDays = client.CumulativeDays;
signin.LateSignChance = client.LateSignChance;
client.Send(signin);
}
static Database.ConquerItemBaseInformation[] Daily;
public class PrizeInfo
{
public uint UID;
public uint prizeItemType;
public uint needDays;
}
public static SafeDictionary<uint, PrizeInfo> PrizeInfos;
public static uint RandomPrizes()
{
return Daily[Kernel.Random.Next(Daily.Length)].ID;
}
public static void Load()
{
PrizeInfos = new SafeDictionary<uint, PrizeInfo>();
string[] text = File.ReadAllLines("database\\signin.ini");
PrizeInfo PrizeInfo = new PrizeInfo();
for (int x = 0; x < text.Length; x++)
{
string line = text[x];
string[] split = line.Split('=');
if (line.StartsWith("[") && line.EndsWith("]") && !line.Contains("Prize"))
{
string numbers = line.Replace("[", "").Replace("]", "");
uint id = uint.Parse(numbers);
if (PrizeInfos.ContainsKey(id))
PrizeInfo = PrizeInfos[uint.Parse(split[1])];
else
{
PrizeInfo = new PrizeInfo();
PrizeInfo.UID = id;
PrizeInfos.Add(id, PrizeInfo);
}
}
else
{
if (split[0] == "prizeItemType")
PrizeInfo.prizeItemType = uint.Parse(split[1]);
else if (split[0] == "needDays")
PrizeInfo.needDays = uint.Parse(split[1]);
}
}
Daily = Database.ConquerItemInformation.BaseInformations.Values
.Where(p => (p.ID >= 188105 && p.ID <= 192785)).ToArray();
Console.WriteLine("signin loaded.");
}
public byte[] Packet;
public DailySignIn(bool create)
{
if (create)
{
Packet = new byte[12 + 8];
Writer.WriteUInt16((ushort)(Packet.Length - 8), 0, Packet);
Writer.WriteUInt16(3200, 2, Packet);
}
}
public enum Action
{
SignIn,
LateSignIn,
Claim,
Info
}
public Action Type
{
get { return (Action)Packet[4]; }
set { WriteByte((byte)value, 4, Packet); }
}
public byte Claimed
{
get { return Packet[5]; }
set { WriteByte(value, 5, Packet); }
}
public ushort LateSignChance
{
get { return BitConverter.ToUInt16(Packet, 6); }
set { WriteUInt16(value, 6, Packet); }
}
public uint CumulativeDays
{
get { return BitConverter.ToUInt32(Packet, 8); }
set { WriteUInt32(value, 8, Packet); }
}
public byte[] ToArray()
{
return Packet;
}
public void Deserialize(byte[] buffer)
{
Packet = buffer;
}
public void Send(Client.GameState client)
{
client.Send(Packet);
}
}
}