using System.Diagnostics;
using System.Threading;
using ff14bot;
using ff14bot.Helpers;
using ff14bot.Interfaces;
using ff14bot.Managers;
using ff14bot.Objects;
using ff14bot.Behavior;
using Newtonsoft.Json;
using System;
using System.IO;
using Quack.Settings;
using System.Configuration;
using System.Runtime.InteropServices;
namespace Quack_
{
public class Quack : IBotPlugin
{
#region Necessary Stuff
public string Author { get { return "Exmortem"; } }
public string Description { get { return "Logs out based on settings."; } }
public Version Version { get { return new Version(0, 0, 1); } }
public bool Equals(IBotPlugin other)
{
throw new NotImplementedException();
}
public void OnInitialize()
{
settings.Enabled = false;
}
public void OnShutdown()
{
Logging.Write("[Quack!] OnShutdown.");
}
public void OnEnabled()
{
settings.Enabled = false;
}
public void OnDisabled()
{
Logging.Write("[Quack!] Disabled.");
}
public string Name
{
get { return "Quack!"; }
}
public bool WantButton
{
get { return true; }
}
public string ButtonText
{
get { return "Quack!"; }
}
public void OnButtonPress()
{
if (_form == null || _form.IsDisposed || _form.Disposing)
_form = new frmMain();
_form.ShowDialog();
}
#endregion
#region Variables
public static QuackSettings settings = QuackSettings.Instance;
private frmMain _form;
#endregion
public void OnPulse()
{
if (settings.Enabled)
{
if (System.DateTime.Now >= settings.TimeEnd)
{
if (Core.Player.InCombat)
{
Logging.Write("[Quack!] Waiting for combat to end.");
return;
}
else
{
Logging.Write("[Quack!] Starting stop sequence");
if (settings.Teleport)
{
if (Core.Player.IsMounted)
{
Logging.Write("[Quack!] Mounted, attempting dismount.");
Thread.Sleep(1000);
Actionmanager.Dismount();
Thread.Sleep(1000);
}
CommonBehaviors.MoveStop();
Logging.Write("[Quack!] Teleporting to {0}.",settings.TeleportLocation);
CommonBehaviors.MoveStop();
switch (settings.TeleportLocation)
{
case "New Gridania":
CommonBehaviors.MoveStop();
WorldManager.TeleportById(2);
Thread.Sleep(20000);
break;
case "Limsa Lominsa":
CommonBehaviors.MoveStop();
WorldManager.TeleportById(8);
Thread.Sleep(20000);
break;
case "Ul'dah":
CommonBehaviors.MoveStop();
WorldManager.TeleportById(9);
Thread.Sleep(20000);
break;
}
Thread.Sleep(20000);
}
Logging.Write("[Quack!] Stopping Bot!");
TreeRoot.Stop();
if (settings.Logout)
{
Logging.Write("[Quack!] Closing FFXIV.");
Process[] ffxiv = Process.GetProcessesByName("ffxiv");
foreach (Process p in ffxiv)
p.Kill();
}
}
}
}
}
}
}
#region Settings
namespace Quack.Settings
{
public class QuackSettings : JsonSettings
{
[JsonIgnore]
private static QuackSettings _instance;
public static QuackSettings Instance { get { return _instance ?? (_instance = new QuackSettings("QuackSettings")); } }
public QuackSettings(string filename) : base(Path.Combine(CharacterSettingsDirectory, "Quack.json")) { }
[Setting]
public bool Enabled { get; set; }
#region Time Settings
[Setting]
public int HoursElapsed { get; set; }
[Setting]
public int MinutesElapsed { get; set; }
[Setting]
public DateTime TimeEnd { get; set; }
[Setting]
public DateTime TimeStart { get; set; }
#endregion
#region Action Settings
[Setting]
public bool Teleport { get; set; }
[Setting]
public string TeleportLocation { get; set; }
[Setting]
public bool Logout { get; set; }
#endregion
}
}
#endregion