PHP Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using COFarmerPluginLibrary;
namespace COFarmerBlueMousePlugin
{
public class Bluemouse
{
public const int METEOR_ID = 1088001;
public static int[] MapOrder = { 2000,
2002,
2006, 2007,
2003,
2008, 2009,
2001,
2004,
2010, 2011,
2005,
2012, 2013
};
public static COFarmerPoint[] Search =
{
new COFarmerPoint(51, 71),
new COFarmerPoint(74, 90),
new COFarmerPoint(92, 131),
new COFarmerPoint(128, 142)
};
public int MapIdx;
public int SearchIdx;
public bool Active;
public ICOFarmerUnit Mouse;
public uint LocalTime;
public static bool HasExchangableItem(COFarmerClient Client)
{
if (BCOHelper.CountItemID(Client, 722512) > 0 ||
BCOHelper.CountItemID(Client, 722513) > 0 ||
BCOHelper.CountItemID(Client, 722514) > 0 ||
BCOHelper.CountItemID(Client, 722515) > 0)
{
return true;
}
return false;
}
public static bool ForceLocation(COFarmerClient Client, int MapID, int X, int Y)
{
if (Client.DynamicMapID == MapID && Client.Location.X == X && Client.Location.Y == Y)
{
return true;
}
Client.TravelTo(MapID, X, Y);
return false;
}
public static bool HasGoldGems(COFarmerClient Client)
{
return ( // gold
BCOHelper.CountItemID(Client, 700021) > 0 ||
BCOHelper.CountItemID(Client, 700051) > 0 ||
BCOHelper.CountItemID(Client, 700061) > 0
);
}
public static bool HasSilverGems(COFarmerClient Client)
{
return ( // silver
BCOHelper.CountItemID(Client, 700011) > 0 ||
BCOHelper.CountItemID(Client, 700031) > 0 ||
BCOHelper.CountItemID(Client, 700001) > 0 ||
BCOHelper.CountItemID(Client, 700041) > 0);
}
public static bool HasGems(COFarmerClient Client)
{
return HasGoldGems(Client) || HasSilverGems(Client);
}
public static bool HasNeedle(COFarmerClient Client)
{
return (BCOHelper.CountItemID(Client, 722510) > 0 ||
BCOHelper.CountItemID(Client, 722511) > 0);
}
public void OnFindNPC(COFarmerClient Client, ICOFarmerUnit Unit)
{
if (this.Active)
{
if (Client.DynamicMapID >= 2000 && Client.DynamicMapID <= 2013) // in the mines!
{
if (Unit.UID >= 1600 && Unit.UID <= 1630) // this range should do, lol (bluemouse)
{
this.Mouse = Unit; // boo ya'!
}
}
}
}
public void OnProcess(COFarmerClient Client, uint Time)
{
if (Client.Traveling)
return;
if (!Active)
return;
if (Time - this.LocalTime < 1000) // execute every 1s
return;
this.LocalTime = Time;
if (Client.MapID == 1002)
{
if (HasExchangableItem(Client))
{
if (!BCOHelper.HasInventorySpace(Client, 10))
{
if (BCOHelper.CountItemID(Client, METEOR_ID) >= 10)
{
// we go to market to make some meteor scrollls
Client.TravelTo(1036, 235, 239);
Client.Log("[Bluemouse] Going to market to make some scrolls!");
}
else
{
// nothing we can do, full inventory gg
Client.TravelTo(1002, 400, 400);
Active = false;
Client.Log("[Bluemouse] No more furthur tasks!");
}
}
else if (ForceLocation(Client, 1002, 397, 236)) // general judd
{
Client.ClickNpc(1611);
Client.AnswerNpc(0); // hook us up with some meteors bro'
Client.ClickNpc(1611);
Client.AnswerNpc(1);
Client.AnswerNpc(0); // other dialog for meteors
Client.Log("[Bluemouse] Exchanging items to meteors...");
}
}
else if (BCOHelper.CountItemID(Client, METEOR_ID) >= 10)
{
// go market make some scrollz
Client.TravelTo(1036, 235, 239);
Client.Log("[Bluemouse] Going to market to make some scrolls!");
}
else if (HasGems(Client) && BCOHelper.HasInventorySpace(Client, 3))
{
// travel outside the mines
Client.TravelTo(1011, 915, 550);
Client.Log("[Bluemouse] Heading to phoenix castle mines!");
}
else
{
// go to our end point
Client.TravelTo(1002, 400, 400);
Active = false;
Client.Log("[Bluemouse] No more furthur tasks!");
}
}
else if (Client.MapID == 1011)
{
if (HasGems(Client) || HasNeedle(Client))
{
if (HasNeedle(Client)) // we already have a needle
{
Client.TravelTo(1025, 32, 70); // go inside the mines
}
else if (ForceLocation(Client, 1011, 915, 550))
{
// obtain a needle...
Client.ClickNpc(1610);
if (HasGoldGems(Client))
{
Client.AnswerNpc(0);
Client.AnswerNpc(1);
Client.AnswerNpc(0);
Client.Log("[Bluemouse] Obtained a golden needle!");
}
else // logically should have silver gems otherwise
{
Client.AnswerNpc(0);
Client.AnswerNpc(2);
Client.AnswerNpc(0);
Client.Log("[Bluemouse] Obtained a silver needle!");
}
}
}
else
{
// go back to twincity...
Client.TravelTo(1002, 400, 400);
Client.Log("[Bluemouse] No gems, or needle found, returning to twincity...");
}
}
else if (Client.MapID == 1036)
{
if (BCOHelper.CountItemID(Client, METEOR_ID) > 9) // do we have meteors to convert?
{
if (ForceLocation(Client, 1036, 235, 239)) // go to lee
{
// lee... (pack meteors)
Client.ClickNpc(5004);
Client.AnswerNpc(0);
Client.AnswerNpc(0);
Client.Log("[Bluemouse] Packed meteors!");
}
}
else
{
// go back to twincity...
Client.TravelTo(1002, 400, 400);
Client.Log("[Bluemouse] No more meteors to exchange! Returning to twincity...");
}
}
else if (Client.MapID == 1025 || (Client.MapID >= 1500 && Client.MapID <= 1513))
{
if (!HasNeedle(Client)) // we don't have a needle
{
// go back to phoenix castle
Client.TravelTo(1011, 915, 550);
Client.Log("[Bluemouse] No needle found. Returning to phoenix castle...");
}
else if (BCOHelper.HasInventorySpace(Client, 3)) // <- means we also have a needle
{
if (Client.MapID == 1025) // start of mines
{
SearchIdx = 0;
MapIdx = 0;
Mouse = null;
Client.TravelTo(MapOrder[MapIdx], Search[SearchIdx++]);
Client.Log("[Bluemouse] Synced bluemouse search.");
}
else
{
if (Mouse != null)
{
if (ForceLocation(Client, Mouse.DynamicMapID, Mouse.Location.X, Mouse.Location.Y))
{
Client.ClickNpc(Mouse);
Mouse = null;
Client.Log("[Bluemouse] Clicked a BlueMouse!");
}
}
else
{
Client.TravelTo(MapOrder[MapIdx], Search[SearchIdx++]);
if (SearchIdx == Search.Length)
{
SearchIdx = 0;
if (++MapIdx == MapOrder.Length)
{
Client.TravelTo(1025, 32, 70); // go back to start of mines
Client.Log("[Bluemouse] Finished searching, no luck. Returning to base mine.");
}
}
}
}
}
else
{
// go back to twincity...
Client.TravelTo(1002, 400, 400);
Client.Log("[Bluemouse] Insufficient inventory space to perform blue mouse. Returning to twincity...");
}
}
}
}
public static class Plugin
{
public static void Main(COFarmerClient Client)
{
Bluemouse bm = new Bluemouse();
Client.Session.Add("Bluemouse_Session", bm);
Client.OnProcessNew += bm.OnProcess;
Client.OnNPC += bm.OnFindNPC;
Client.AddCommand("bluemouse", BluemouseCommand);
}
public static void ClientToServer(COFarmerClient Client, COFarmerPacket Packet)
{
}
public static void ServerToClient(COFarmerClient Client, COFarmerPacket Packet)
{
}
public static void BluemouseCommand(COFarmerClient Client, string[] args)
{
try
{
Bluemouse bm;
if (Client.GetSessionVariable("Bluemouse_Session", out bm))
{
bm.Active = true;
Client.Log("[Bluemouse] Started bluemouse bot -- Special thanks: pogi2010!!!");
}
}
catch (Exception e)
{
Client.Chat("Error: " + e.Message, ChatMode.System, COFarmerPacketSource.ToClient);
}
}
}
}






