using Lib_K_Relay;
using Lib_K_Relay.Interface;
using Lib_K_Relay.Networking;
using Lib_K_Relay.Networking.Packets;
using Lib_K_Relay.Networking.Packets.Client;
using Lib_K_Relay.Utilities;
using System;
namespace Rollback
{
public class Rollback : IPlugin
{
private UInt32 _amount = 30000;
public string GetAuthor()
{
return "059";
}
public string GetName()
{
return "Rollback";
}
public string GetDescription()
{
return "Delays character saving on the server.";
}
public string[] GetCommands()
{
return new string[2]
{
"/dupe", "/damount"
};
}
public void Initialize(Proxy proxy)
{
proxy.HookCommand("dupe", OnDupeCommand);
proxy.HookCommand("damount", OnAmountCommand);
}
private void OnDupeCommand(Client client, string command, string[] args)
{
ChangeGuildRankPacket changeGuildRankPacket = (ChangeGuildRankPacket)Packet.Create(PacketType.CHANGEGUILDRANK);
changeGuildRankPacket.GuildRank = -1;
changeGuildRankPacket.Name = "\n";
for (int index = 0; index < _amount; ++index)
client.SendToServer((Packet)changeGuildRankPacket);
client.SendToClient((Packet)PluginUtils.CreateNotification((int)client.ObjectId, 0xFFFF00, "Rollback Initiated"));
client.SendToClient((Packet)PluginUtils.CreateOryxNotification("@059", "Rollback Initiated at " + DateTime.Now));
}
private void OnAmountCommand(Client client, string command, string[] args)
{
if (args.Length == 1){
_amount = UInt32.Parse(args[0]);
client.SendToClient((Packet)PluginUtils.CreateOryxNotification("@059", "Amount set to " + _amount));
}
}
}
}


public Dictionary<Client, Data> Players = new Dictionary<Client, Data>();
public int amount = 10000;
public class Data
{
public DateTime EndTime = DateTime.Now.AddSeconds(10);
public bool Notified;
public Data()
{
Notified = true;
}
}
public void Initialize(Proxy proxy)
{
proxy.HookCommand("d", OnDupeCommand);
proxy.HookPacket(PacketType.NEWTICK, OnTick);
proxy.ClientConnected += client =>
{
if (!Players.ContainsKey(client)) Players[client] = new Data();
};
}
private void OnDupeCommand(Client client, string command, string[] args)
{
var chg = (ChangeGuildRankPacket)Packet.Create(PacketType.CHANGEGUILDRANK);
chg.GuildRank = -1;
chg.Name = "\n";
for (var i = 0; i < amount; i++)
{
client.SendToServer(chg);
}
client.SendToClient(PluginUtils.CreateNotification(client.ObjectId, 0xFFFF00, "Start"));
Players[client].EndTime = DateTime.Now.AddMinutes(10);
Players[client].Notified = false;
client.SendToClient(PluginUtils.CreateOryxNotification("RollBack", "Rollback Initiated at " + DateTime.Now));
}
public void OnTick(Client client, Packet packet)
{
if (TimeSpan.Parse((Players[client].EndTime - DateTime.Now).ToString()) < TimeSpan.Zero && !Players[client].Notified)
{
Players[client].Notified = true;
client.SendToClient(PluginUtils.CreateNotification(client.ObjectId, 0xFFFF00, "Finished!"));
client.SendToClient(PluginUtils.CreateOryxNotification("DONE", "Finished at " + DateTime.Now));
}
}