using System; using System.Net; using System.Threading; using SteamKit2; using SteamTrade; using System.Collections.Generic; using System.Linq; namespace SteamBot { public class PaintBot : UserHandler { public int yeolderusticcolour = 9; public int muskelmannbraun = 9; public int darksalmoninjustice = 9; public int peculiarlydrabtincture = 9; public int drablyolive = 12; public int radiganconagherbrown = 12; public int zepheniahsgreed = 12; public int colorno216190216 = 15; public int noblehattersviolet = 15; public int agedmoustachegrey = 18; public int thecolorofagentlemannsbusinesspants = 18; public int manncoorange = 18; public int acolorsimilartoslate = 18; public int indubitablygreen = 21; public int australiumgold = 24; public int adeepcommitmenttopurple = 27; public int pinkashell = 42; public int thebittertasteofdefeatandlime = 45; public int amannsmint = 51; public int teamspirit = 61; public int aftereight = 61; public int anairofdebonair = 61; public int thevalueofteamwork = 61; public int waterloggedlabcoat = 61; public int balaclavasareforever = 61; public int creamspirit = 61; public int operatorsoveralls = 61; public int adistinctivelackofhue = 80; public int anextraordinaryabundanceoftinge = 80; public int buyyeolderusticcolour = 7; public int buymuskelmannbraun = 7; public int buydarksalmoninjustice = 7; public int buypeculiarlydrabtincture = 7; public int buydrablyolive = 10; public int buyradiganconagherbrown = 10; public int buyzepheniahsgreed = 10; public int buycolorno216190216 = 13; public int buynoblehattersviolet = 13; public int buyagedmoustachegrey = 16; public int buythecolorofagentlemannsbusinesspants = 16; public int buymanncoorange = 16; public int buyacolorsimilartoslate = 16; public int buyindubitablygreen = 19; public int buyaustraliumgold = 22; public int buyadeepcommitmenttopurple = 25; public int buypinkashell = 40; public int buythebittertasteofdefeatandlime = 43; public int buyamannsmint = 49; public int buyteamspirit = 59; public int buyaftereight = 59; public int buyanairofdebonair = 59; public int buythevalueofteamwork = 59; public int buywaterloggedlabcoat = 59; public int buybalaclavasareforever = 59; public int buycreamspirit = 59; public int buyoperatorsoveralls = 59; public int buyadistinctivelackofhue = 78; public int buyanextraordinaryabundanceoftinge = 78; public int IDyeolderusticcolour = 5036; public int IDmuskelmannbraun = 5033; public int IDdarksalmoninjustice = 5056; public int IDpeculiarlydrabtincture = 5034; public int IDdrablyolive = 5053; public int IDradiganconagherbrown = 5035; public int IDzepheniahsgreed = 5028; public int IDcolorno216190216 = 5030; public int IDnoblehattersviolet = 5029; public int IDagedmoustachegrey = 5038; public int IDthecolorofagentlemannsbusinesspants = 5055; public int IDmanncoorange = 5032; public int IDacolorsimilartoslate = 5052; public int IDindubitablygreen = 5027; public int IDaustraliumgold = 5037; public int IDadeepcommitmenttopurple = 5031; public int IDpinkashell = 5051; public int IDthebittertasteofdefeatandlime = 5054; public int IDamannsmint = 5076; public int IDteamspirit = 5046; public int IDaftereight = 5077; public int IDanairofdebonair = 5063; public int IDthevalueofteamwork = 5064; public int IDwaterloggedlabcoat = 5061; public int IDbalaclavasareforever = 5062; public int IDcreamspirit = 5065; public int IDoperatorsoveralls = 5060; public int IDadistinctivelackofhue = 5040; public int IDanextraordinaryabundanceoftinge = 5039; public int invScrap = 0; public int offeredScrap = 0; public int ScrapPutUp = 0; public bool isDebug = false; public int offeredItems = 0; public int freeInvSlots = 0; public string paints = ""; public string requestedPaints = ""; public PaintBot(Bot bot, SteamID sid) : base(bot, sid) { } public override bool OnFriendAdd() { TellAdmins(Bot.SteamFriends.GetFriendPersonaName(OtherSID) + " tried to add the bot"); return true; } public void TellAdmins(string message) { foreach (ulong adminID in Bot.Admins) { Bot.SteamFriends.SendChatMessage(adminID, EChatEntryType.ChatMsg, message); } Log.Success("Told all admins: " + message); } public override void OnLoginCompleted() { if (!isDebug) { Bot.SteamFriends.SetPersonaState(EPersonaState.LookingToTrade); TellAdmins("I am now online master's slaving for you... <3 I will do my best to not fuck up anymore!"); Bot.SetGamePlaying(440); } else { Bot.SteamFriends.SetPersonaName("[Debug Mode]" + Bot.SteamFriends.GetPersonaName()); TellAdmins("Bot started in debug mode. test, and have your way with me as you wish masters... I cannot disobey <3"); Bot.SteamFriends.SetPersonaState(EPersonaState.Busy); Bot.SetGamePlaying(440); } } public override void OnChatRoomMessage(SteamID chatID, SteamID sender, string message) { Log.Info(Bot.SteamFriends.GetFriendPersonaName(sender) + ": " + message); base.OnChatRoomMessage(chatID, sender, message); } public override void OnFriendRemove() { } public override void OnMessage(string message, EChatEntryType type) { Log.Success(Bot.SteamFriends.GetFriendPersonaName(OtherSID) + " said: " + message); if (IsAdmin) { if (message == "starttrade") { Bot.SteamFriends.SendChatMessage(OtherSID, type, "Trading you..."); Bot.OpenTrade(OtherSID); } else if (message == "launchtf") { Bot.SetGamePlaying(440); TellAdmins("I am now playing TF2"); } else if (message == "launchudk") { Bot.SetGamePlaying(13260); TellAdmins("I am not sure of this name but the ID of the game I am playing now is " + Bot.CurrentGame); } else if (message == "launchas") { Bot.SetGamePlaying(630); TellAdmins("I am now playing Alien Swarm"); } else if (message.Split(' ')[0] == "launchgame") { Bot.SetGamePlaying(Convert.ToInt32(message.Split(' ')[1])); TellAdmins("I am not sure of this name but the ID of the game I am playing now is " + Bot.CurrentGame); } else if (message == "<3") { Bot.SteamFriends.SendChatMessage(OtherSID, type, "I love you so much master *cuddles you tightly* I love you masters <3"); } else if (message == "closegame") { Bot.SetGamePlaying(0); TellAdmins("closed my game"); } else if (message == "canceltrade") { if (Bot.CurrentTrade != null) { Trade.CancelTrade(); Bot.SteamFriends.SendChatMessage(OtherSID, type, "Successfully cancelled the trade!"); } else { Bot.SteamFriends.SendChatMessage(OtherSID, type, "I am not currently in a trade, so I can't say anything in it!"); } } else if (message.Split(' ')[0] == "saytrade") { if (Bot.CurrentTrade != null) { Trade.SendMessage(message.Substring(message.Split(' ')[0].Length + 1)); Bot.SteamFriends.SendChatMessage(OtherSID, type, "Successfully sent the message!"); } else { Bot.SteamFriends.SendChatMessage(OtherSID, type, "I am not currently in a trade, so I can't say anything in it!"); } } else if (message.Split(' ')[0] == "sayfriends") { for (int i = 0; i < Bot.SteamFriends.GetFriendCount(); i++) { Bot.SteamFriends.SendChatMessage(Bot.SteamFriends.GetFriendByIndex(i), type, message.Substring(message.Split(' ')[0].Length + 1)); } } else if (message == "listfriends") { string friends = "\nFriends:"; for (int i = 0; i < Bot.SteamFriends.GetFriendCount(); i++) { friends += "\n" + i + ": " + Bot.SteamFriends.GetFriendPersonaName(Bot.SteamFriends.GetFriendByIndex(i)) + " (" + Bot.SteamFriends.GetFriendByIndex(i).ToString() + ")"; } Bot.SteamFriends.SendChatMessage(OtherSID, type, friends); } else if (message.Split(' ')[0] == "sayfriend") { SteamKit2.SteamID friend = Bot.SteamFriends.GetFriendByIndex(Convert.ToInt32(message.Split(' ')[1])); string messageToSend = message.Substring(message.Split(' ')[0].Length + message.Split(' ')[1].Length + 2); Bot.SteamFriends.SendChatMessage(friend, EChatEntryType.ChatMsg, messageToSend); Log.Success("Told " + Bot.SteamFriends.GetFriendPersonaName(friend) + ": " + messageToSend); } else if (message == "removeall") { for (int i = 0; i < Bot.SteamFriends.GetFriendCount(); i++) { if (!Bot.Admins.Contains(Bot.SteamFriends.GetFriendByIndex(i))) { Bot.SteamFriends.RemoveFriend(Bot.SteamFriends.GetFriendByIndex(i)); } } TellAdmins("All friends removed!"); } else { Bot.SteamFriends.SendChatMessage(OtherSID, type, "\nInvalid command! Valid commands:\n" + "starttrade - Start a trade\n" + "launchtf - Launch TF2\n" + "launchudk - Launch UDK\n" + "launchas - Launch Alien Swarm\n" + "launchgame [appid] - Launch game with appid\n" + "closegame - Close running game\n" + "canceltrade - Cancel an ongoing trade\n" + "saytrade [message] - Send a message to the trade\n" + "sayfriends [message] - Send a message to all friends\n" + "sayfriend [friend] [message] - Send a message to a friend with the given id from listfriends\n" + "removeall - Deletes all friends excluding admins\n" + "listfriends - List all friends" ); } } else { if (message == "starttrade") { Bot.SteamFriends.SendChatMessage(OtherSID, type, "Trading you..."); Bot.OpenTrade(OtherSID); } else Bot.SteamFriends.SendChatMessage(OtherSID, type, Bot.ChatResponse); TellAdmins(Bot.SteamFriends.GetFriendPersonaName(OtherSID) + "(" + OtherSID + ")" + " said to the bot: " + message); } } public override bool OnTradeRequest() { if (!isDebug || IsAdmin) { return true; } else { Bot.SteamFriends.SendChatMessage(OtherSID, EChatEntryType.ChatMsg, "Sorry, I'm in debug mode you cannot trade with me at this time"); return false; } } public override void OnTradeError(string error) { Bot.SteamFriends.SendChatMessage(OtherSID, EChatEntryType.ChatMsg, "Oh, there was an error: " + error + "." ); Bot.log.Warn(error); Bot.SteamFriends.SetPersonaState(EPersonaState.LookingToTrade); } public override void OnTradeTimeout() { Bot.SteamFriends.SendChatMessage(OtherSID, EChatEntryType.ChatMsg, "Sorry, but you were AFK and the trade was canceled."); Bot.log.Info("User was kicked because he was AFK."); Bot.SteamFriends.SetPersonaState(EPersonaState.LookingToTrade); } public override void OnTradeInit() { invScrap = 0; offeredScrap = 0; ScrapPutUp = 0; offeredItems = 0; freeInvSlots = 0; paints = ""; requestedPaints = ""; if (IsAdmin && !isDebug) { Bot.GetInventory(); Bot.GetOtherInventory(OtherSID); Bot.SteamFriends.SetPersonaState(EPersonaState.Busy); Bot.SteamFriends.SendChatMessage(OtherSID, EChatEntryType.ChatMsg, "I will tell you commands in the trade chat please be patient for the trade to load my masters <3"); Trade.SendMessage("Say addmetal to add all metal\n" + "additem (ITEMID) to add specific items\n" + "addallitem (ITEMID) to add all specific items"); } else { freeInvSlots = 0; offeredItems = 0; paints = ""; Bot.SteamFriends.SetPersonaState(EPersonaState.Busy); Trade.SendMessage("Success. Please put up your items."); Bot.GetInventory(); Bot.GetOtherInventory(OtherSID); Trade.SendMessage("Loading inventory..."); freeInvSlots = Convert.ToInt32(Trade.MyInventory.NumSlots) - Trade.MyInventory.Items.Length; Trade.SendMessage("I have " + freeInvSlots + " free slots!"); } } public override void OnTradeAddItem(Schema.Item schemaItem, Inventory.Item inventoryItem) { Log.Success("User added " + schemaItem.Name); Log.Success("HolidayRestriction: \"" + schemaItem.HolidayRestriction + "\""); offeredItems += 1; Validate(); } public override void OnTradeRemoveItem(Schema.Item schemaItem, Inventory.Item inventoryItem) { Log.Warn("User removed " + schemaItem.Name); offeredItems -= 1; Validate(); } public override void OnTradeMessage(string message) { if (IsAdmin && !isDebug) { if (message.ToLower() == "addall") { Trade.SendMessage("Adding all items..."); Bot.GetInventory(); Inventory.Item[] inventory = Bot.MyInventory.Items; foreach (Inventory.Item item in inventory) { if (item != null && !item.IsNotTradeable) { Trade.AddItem(item.Id); } } Trade.SendMessage("Added all items!"); return; } else if (message.ToLower().Split(' ')[0] == "additem") { if (message.Split(' ').Length != 2) { Trade.SendMessage("You must tell me the item ID you want me to add!"); return; } int itemID = Convert.ToInt32(message.Split(' ')[1]); Trade.SendMessage("Adding all items with defindex " + itemID + "..."); Trade.AddItemByDefindex(itemID); Trade.SendMessage("Added all items with defindex " + itemID + "!"); return; } else if (message.ToLower().Split(' ')[0] == "addallitem") { if (message.Split(' ').Length != 2) { Trade.SendMessage("You must tell me the item ID you want me to add!"); return; } int itemID = Convert.ToInt32(message.Split(' ')[1]); Trade.SendMessage("Adding all items with defindex " + itemID + "..."); Trade.AddAllItemsByDefindex(itemID); Trade.SendMessage("Added all items with defindex " + itemID + "!"); return; } else if (message.ToLower() == "removeall") { Trade.SendMessage("Removing all items..."); Trade.RemoveAllItems(); Trade.SendMessage("Removed all items!"); return; } else if (message.ToLower() == "addmetal") { int scrap = (5000); int rec = (5001); int refined = (5002); Trade.SendMessage("Adding all metal"); Trade.AddAllItemsByDefindex(scrap); Trade.AddAllItemsByDefindex(rec); Trade.AddAllItemsByDefindex(refined); Trade.SendMessage("Added all metal!"); return; } else if (message.ToLower().Split(' ')[0] == "removeitem") { if (message.Split(' ').Length != 2) { Trade.SendMessage("You must tell me the item ID you want me to remove!"); return; } int itemID = Convert.ToInt32(message.Split(' ')[1]); Trade.SendMessage("Removing all items with defindex " + itemID + "..."); Trade.RemoveAllItemsByDefindex(itemID); Trade.SendMessage("Removed all items with defindex " + itemID + "!"); return; } } if (message.ToLower().Split(' ')[0] == "add") { if (message.Split(' ').Length != 2) { Trade.SendMessage("You must tell me the paint you want!"); return; } Validate(); string wantedPaints = message.Substring(message.Split(' ')[0].Length + 1).ToLower(); if (requestedPaints.Contains(wantedPaints)) Trade.SendMessage("You already have the paints " + wantedPaints + "! If you want to remove it, say add clear"); int offeredScrapCalc = ScrapPutUp; if (ScrapPutUp == yeolderusticcolour && wantedPaints == "yeolderusticcolour" && !requestedPaints.Contains("yeolderusticcolour")) { offeredScrapCalc -= yeolderusticcolour; requestedPaints += "yeolderusticcolour"; Trade.AddItemByDefindex(IDyeolderusticcolour); Validate(); } if (ScrapPutUp == muskelmannbraun && wantedPaints == "muskelmannbraun" && !requestedPaints.Contains("muskelmannbraun")) { offeredScrapCalc -= muskelmannbraun; requestedPaints += "muskelmannbraun"; Trade.AddItemByDefindex(IDmuskelmannbraun); Validate(); } if (ScrapPutUp == darksalmoninjustice && wantedPaints == "darksalmoninjustice" && !requestedPaints.Contains("darksalmoninjustice")) { offeredScrapCalc -= darksalmoninjustice; requestedPaints += "darksalmoninjustice"; Trade.AddItemByDefindex(IDdarksalmoninjustice); Validate(); } if (ScrapPutUp == peculiarlydrabtincture && wantedPaints == "peculiarlydrabtincture" && !requestedPaints.Contains("peculiarlydrabtincture")) { offeredScrapCalc -= peculiarlydrabtincture; requestedPaints += "peculiarlydrabtincture"; Trade.AddItemByDefindex(IDpeculiarlydrabtincture); Validate(); } if (ScrapPutUp == drablyolive && wantedPaints == "drablyolive" && !requestedPaints.Contains("drablyolive")) { offeredScrapCalc -= drablyolive; requestedPaints += "drablyolive"; Trade.AddItemByDefindex(IDdrablyolive); Validate(); } if (ScrapPutUp == radiganconagherbrown && wantedPaints == "radiganconagherbrown" && !requestedPaints.Contains("radiganconagherbrown")) { offeredScrapCalc -= radiganconagherbrown; requestedPaints += "radiganconagherbrown"; Trade.AddItemByDefindex(IDradiganconagherbrown); Validate(); } if (ScrapPutUp == zepheniahsgreed && wantedPaints == "zepheniahsgreed" && !requestedPaints.Contains("zepheniahsgreed")) { offeredScrapCalc -= zepheniahsgreed; requestedPaints += "zepheniahsgreed"; Trade.AddItemByDefindex(IDzepheniahsgreed); Validate(); } if (ScrapPutUp == colorno216190216 && wantedPaints == "colorno216190216" && !requestedPaints.Contains("colorno216190216")) { offeredScrapCalc -= colorno216190216; requestedPaints += "colorno216190216"; Trade.AddItemByDefindex(IDcolorno216190216); Validate(); } if (ScrapPutUp == noblehattersviolet && wantedPaints == "noblehattersviolet" && !requestedPaints.Contains("noblehattersviolet")) { offeredScrapCalc -= noblehattersviolet; requestedPaints += "noblehattersviolet"; Trade.AddItemByDefindex(IDnoblehattersviolet); Validate(); } if (ScrapPutUp == agedmoustachegrey && wantedPaints == "agedmoustachegrey" && !requestedPaints.Contains("agedmoustachegrey")) { offeredScrapCalc -= agedmoustachegrey; requestedPaints += "agedmoustachegrey"; Trade.AddItemByDefindex(IDagedmoustachegrey); Validate(); } if (ScrapPutUp == thecolorofagentlemannsbusinesspants && wantedPaints == "thecolorofagentlemannsbusinesspants" && !requestedPaints.Contains("thecolorofagentlemannsbusinesspants")) { offeredScrapCalc -= thecolorofagentlemannsbusinesspants; requestedPaints += "thecolorofagentlemannsbusinesspants"; Trade.AddItemByDefindex(IDthecolorofagentlemannsbusinesspants); Validate(); } if (ScrapPutUp == manncoorange && wantedPaints == "manncoorange" && !requestedPaints.Contains("manncoorange")) { offeredScrapCalc -= manncoorange; requestedPaints += "manncoorange"; Trade.AddItemByDefindex(IDmanncoorange); Validate(); } if (ScrapPutUp == acolorsimilartoslate && wantedPaints == "acolorsimilartoslate" && !requestedPaints.Contains("acolorsimilartoslate")) { offeredScrapCalc -= acolorsimilartoslate; requestedPaints += "acolorsimilartoslate"; Trade.AddItemByDefindex(IDacolorsimilartoslate); Validate(); } if (ScrapPutUp == indubitablygreen && wantedPaints == "indubitablygreen" && !requestedPaints.Contains("indubitablygreen")) { offeredScrapCalc -= indubitablygreen; requestedPaints += "indubitablygreen"; Trade.AddItemByDefindex(IDindubitablygreen); Validate(); } if (ScrapPutUp == australiumgold && wantedPaints == "australiumgold" && !requestedPaints.Contains("australiumgold")) { offeredScrapCalc -= australiumgold; requestedPaints += "australiumgold"; Trade.AddItemByDefindex(IDaustraliumgold); Validate(); } if (ScrapPutUp == adeepcommitmenttopurple && wantedPaints == "adeepcommitmenttopurple" && !requestedPaints.Contains("adeepcommitmenttopurple")) { offeredScrapCalc -= adeepcommitmenttopurple; requestedPaints += "adeepcommitmenttopurple"; Trade.AddItemByDefindex(IDadeepcommitmenttopurple); Validate(); } if (ScrapPutUp == pinkashell && wantedPaints == "pinkashell" && !requestedPaints.Contains("pinkashell")) { offeredScrapCalc -= pinkashell; requestedPaints += "pinkashell"; Trade.AddItemByDefindex(IDpinkashell); Validate(); } if (ScrapPutUp == thebittertasteofdefeatandlime && wantedPaints == "thebittertasteofdefeatandlime" && !requestedPaints.Contains("thebittertasteofdefeatandlime")) { offeredScrapCalc -= thebittertasteofdefeatandlime; requestedPaints += "thebittertasteofdefeatandlime"; Trade.AddItemByDefindex(IDthebittertasteofdefeatandlime); Validate(); } if (ScrapPutUp == amannsmint && wantedPaints == "amannsmit" && !requestedPaints.Contains("amannsmit")) { offeredScrapCalc -= amannsmint; requestedPaints += "amannsmint"; Trade.AddItemByDefindex(IDamannsmint); Validate(); } if (ScrapPutUp == teamspirit && wantedPaints == "teamspirit" && !requestedPaints.Contains("teamspirit")) { offeredScrapCalc -= teamspirit; requestedPaints += "teamspirit"; Trade.AddItemByDefindex(IDteamspirit); Validate(); } if (ScrapPutUp == aftereight && wantedPaints == "aftereight" && !requestedPaints.Contains("aftereight")) { offeredScrapCalc -= aftereight; requestedPaints += "aftereight"; Trade.AddItemByDefindex(IDaftereight); Validate(); } if (ScrapPutUp == anairofdebonair && wantedPaints == "anairofdebonair" && !requestedPaints.Contains("anairofdebonair")) { offeredScrapCalc -= anairofdebonair; requestedPaints += "anairofdebonair"; Trade.AddItemByDefindex(IDanairofdebonair); Validate(); } if (ScrapPutUp == thevalueofteamwork && wantedPaints == "thevalueofteamwork" && !requestedPaints.Contains("thevalueofteamwork")) { offeredScrapCalc -= thevalueofteamwork; requestedPaints += "thevalueofteamwork"; Trade.AddItemByDefindex(IDthevalueofteamwork); Validate(); } if (ScrapPutUp == waterloggedlabcoat && wantedPaints == "waterloggedlabcoat" && !requestedPaints.Contains("waterloggedlabcoat")) { offeredScrapCalc -= waterloggedlabcoat; requestedPaints += "waterloggedlabcoat"; Trade.AddItemByDefindex(IDwaterloggedlabcoat); Validate(); } if (ScrapPutUp == balaclavasareforever && wantedPaints == "balaclavasareforever" && !requestedPaints.Contains("balaclavasareforever")) { offeredScrapCalc -= balaclavasareforever; requestedPaints += "balaclavasareforever"; Trade.AddItemByDefindex(IDbalaclavasareforever); Validate(); } if (ScrapPutUp == creamspirit && wantedPaints == "creamspirit" && !requestedPaints.Contains("creamspirit")) { offeredScrapCalc -= creamspirit; requestedPaints += "creamspirit"; Trade.AddItemByDefindex(IDcreamspirit); Validate(); } if (ScrapPutUp == operatorsoveralls && wantedPaints == "operatorsoveralls" && !requestedPaints.Contains("operatorsoveralls")) { offeredScrapCalc -= operatorsoveralls; requestedPaints += "operatorsoveralls"; Trade.AddItemByDefindex(IDoperatorsoveralls); Validate(); } if (ScrapPutUp == adistinctivelackofhue && wantedPaints == "adistinctivelackofhue" && !requestedPaints.Contains("adistinctivelackofhue")) { offeredScrapCalc -= adistinctivelackofhue; requestedPaints += "adistinctivelackofhue"; Trade.AddItemByDefindex(IDadistinctivelackofhue); Validate(); } if (ScrapPutUp == anextraordinaryabundanceoftinge && wantedPaints == "anextraordinaryabundanceoftinge" && !requestedPaints.Contains("anextraordinaryabundanceoftinge")) { offeredScrapCalc -= anextraordinaryabundanceoftinge; requestedPaints += "anextraordinaryabundanceoftinge"; Trade.AddItemByDefindex(IDanextraordinaryabundanceoftinge); Validate(); } else if (wantedPaints == "clear") { requestedPaints = ""; Trade.RemoveAllItems(); Validate(); } else { Trade.SendMessage("You either have not put up enough for this Paints, or this Paints does not exist! Sorry!"); } Trade.SendMessage("Your current Paints: " + requestedPaints); return; } } public override void OnTradeReady(bool ready) { bool isValid = Validate(); //Because SetReady must use its own version, it's important //we poll the trade to make sure everything is up-to-date. Trade.Poll(); if (IsAdmin && !isDebug) { Trade.SetReady(true); } else if (!ready) { Trade.SetReady(false); } else { if (isValid && offeredItems >= 1 && !IsAdmin) { Trade.SendMessage("Sucess you have paid enough now accept the trade"); Trade.SetReady(true); } else { Trade.SendMessage("Not valid please put your metal back up or cancle the trade!"); } } } public override void OnTradeAccept() { if (Validate() || IsAdmin) { //Even if it is successful, AcceptTrade can fail on //trades with a lot of items so we use a try-catch try { Trade.AcceptTrade(); } catch { Log.Warn("The trade might have failed, but we can't be sure."); } Log.Success("Trade Complete!"); } OnTradeClose(); } public bool Validate() { ScrapPutUp = 0; paints = ""; List errors = new List(); foreach (ulong id in Trade.OtherOfferedItems) { var item = Trade.OtherInventory.GetItem(id); if (item.Defindex == 5000) ScrapPutUp += 1; else if (item.Defindex == 5001) ScrapPutUp += 3; else if (item.Defindex == 5002) ScrapPutUp += 9; else if (item.Defindex == 5021) ScrapPutUp += 61; else { var schemaItem = Trade.CurrentSchema.GetItem(item.Defindex); errors.Add("Item " + schemaItem.Name + " is not accepted"); } } int offeredScrapCalc = ScrapPutUp; foreach (ulong id in Trade.OtherOfferedItems) { var item = Trade.OtherInventory.GetItem(id); var myitem = Trade.MyInventory.GetItem(id); int dIndex = (int)item.Defindex; ScrapPutUp = 0; switch (dIndex) { case 5027: ScrapPutUp += buyindubitablygreen; break; case 5028: ScrapPutUp += buyzepheniahsgreed; break; case 5029: ScrapPutUp += buynoblehattersviolet; break; case 5030: ScrapPutUp += buycolorno216190216; break; case 5031: ScrapPutUp += buyadeepcommitmenttopurple; break; case 5032: ScrapPutUp += manncoorange; break; case 5033: ScrapPutUp += buymuskelmannbraun; break; case 5034: ScrapPutUp += buypeculiarlydrabtincture; break; case 5035: ScrapPutUp += buyradiganconagherbrown; break; case 5036: ScrapPutUp += buyyeolderusticcolour; break; case 5037: ScrapPutUp += buyaustraliumgold; break; case 5038: ScrapPutUp += buyagedmoustachegrey; break; case 5046: ScrapPutUp += buyteamspirit; break; case 5051: ScrapPutUp += buypinkashell; break; case 5052: ScrapPutUp += buyacolorsimilartoslate; break; case 5053: ScrapPutUp += buydrablyolive; break; case 5054: ScrapPutUp += buythebittertasteofdefeatandlime; break; case 5055: ScrapPutUp += buythecolorofagentlemannsbusinesspants; break; case 5056: ScrapPutUp += buydarksalmoninjustice; break; case 5063: ScrapPutUp += buyanairofdebonair; break; case 5076: ScrapPutUp += buyamannsmint; break; case 5077: ScrapPutUp += buyaftereight; break; } } offeredScrapCalc = ScrapPutUp; if (offeredScrapCalc >= yeolderusticcolour && requestedPaints.Contains("yeolderusticcolour")) { offeredScrapCalc -= yeolderusticcolour; paints += "yeolderusticcolour "; } else if (offeredScrapCalc >= muskelmannbraun && requestedPaints.Contains("muskelmannbraun")) { offeredScrapCalc -= muskelmannbraun; paints += "muskelmannbraun"; } else if (offeredScrapCalc >= darksalmoninjustice && requestedPaints.Contains("darksalmoninjustice")) { offeredScrapCalc -= darksalmoninjustice; paints += "darksalmoninjustice"; } else if (offeredScrapCalc >= peculiarlydrabtincture && requestedPaints.Contains("peculiarlydrabtincture")) { offeredScrapCalc -= peculiarlydrabtincture; paints += "peculiarlydrabtincture"; } else if (offeredScrapCalc >= drablyolive && requestedPaints.Contains("drablyolive")) { offeredScrapCalc -= drablyolive; paints += "drablyolive"; } else if (offeredScrapCalc >= radiganconagherbrown && requestedPaints.Contains("radiganconagherbrown")) { offeredScrapCalc -= radiganconagherbrown; paints += "radiganconagherbrown"; } else if (offeredScrapCalc >= zepheniahsgreed && requestedPaints.Contains("zepheniahsgreed")) { offeredScrapCalc -= zepheniahsgreed; paints += "zepheniahsgreed"; } else if (offeredScrapCalc >= colorno216190216 && requestedPaints.Contains("colorno216190216")) { offeredScrapCalc -= colorno216190216; paints += "color216190216"; } else if (offeredScrapCalc >= noblehattersviolet && requestedPaints.Contains("noblehattersviolet")) { offeredScrapCalc -= noblehattersviolet; paints += "noblehattersviolet"; } else if (offeredScrapCalc >= agedmoustachegrey && requestedPaints.Contains("agedmoustachegrey")) { offeredScrapCalc -= agedmoustachegrey; paints += "agedmoustachegrey"; } else if (offeredScrapCalc >= thecolorofagentlemannsbusinesspants && requestedPaints.Contains("thecolorofagentlemannsbusinesspants")) { offeredScrapCalc -= thecolorofagentlemannsbusinesspants; paints += "thecolorofagentlemannsbusinesspants"; } else if (offeredScrapCalc >= manncoorange && requestedPaints.Contains("manncoorange")) { offeredScrapCalc -= manncoorange; paints += "manncoorange"; } else if (offeredScrapCalc >= acolorsimilartoslate && requestedPaints.Contains("acolorsimilartoslate")) { offeredScrapCalc -= acolorsimilartoslate; paints += "acolorsimilartoslate"; } else if (offeredScrapCalc >= indubitablygreen && requestedPaints.Contains("indubitablygreen")) { offeredScrapCalc -= indubitablygreen; paints += "indubitablygreen"; } else if (offeredScrapCalc >= australiumgold && requestedPaints.Contains("australiumgold")) { offeredScrapCalc -= australiumgold; paints += "australiumgold"; } else if (offeredScrapCalc >= adeepcommitmenttopurple && requestedPaints.Contains("adeepcommitmenttopurple")) { offeredScrapCalc -= adeepcommitmenttopurple; paints += "adeepcommitmenttopurple"; } else if (offeredScrapCalc >= pinkashell && requestedPaints.Contains("pinkashell")) { offeredScrapCalc -= pinkashell; paints += "pinkashell"; } else if (offeredScrapCalc >= thebittertasteofdefeatandlime && requestedPaints.Contains("thebittertasteofdefeatandlime")) { offeredScrapCalc -= thebittertasteofdefeatandlime; paints += "thebittertasteofdefeatandlime"; } else if (offeredScrapCalc >= amannsmint && requestedPaints.Contains("amannsmint")) { offeredScrapCalc -= amannsmint; paints += "amannsmint"; } else if (offeredScrapCalc >= teamspirit && requestedPaints.Contains("teamspirit")) { offeredScrapCalc -= teamspirit; paints += "teamspirit"; } else if (offeredScrapCalc >= aftereight && requestedPaints.Contains("aftereight")) { offeredScrapCalc -= aftereight; paints += "aftereight"; } else if (offeredScrapCalc >= anairofdebonair && requestedPaints.Contains("anairofdebonair")) { offeredScrapCalc -= anairofdebonair; paints += "anairofdebonair"; } else if (offeredScrapCalc >= thevalueofteamwork && requestedPaints.Contains("thevalueofteamwork")) { offeredScrapCalc -= thevalueofteamwork; paints += "thevalueofteamwork"; } else if (offeredScrapCalc >= waterloggedlabcoat && requestedPaints.Contains("waterloggedlabcoat")) { offeredScrapCalc -= waterloggedlabcoat; paints += "waterloggedlabcoat"; } else if (offeredScrapCalc >= balaclavasareforever && requestedPaints.Contains("balaclavasareforever")) { offeredScrapCalc -= balaclavasareforever; paints += "balaclavasareforever"; } else if (offeredScrapCalc >= creamspirit && requestedPaints.Contains("creamspirit")) { offeredScrapCalc -= creamspirit; paints += "creamspirit"; } else if (offeredScrapCalc >= operatorsoveralls && requestedPaints.Contains("operatorsoveralls")) { offeredScrapCalc -= operatorsoveralls; paints += "operatorsoveralls"; } else if (offeredScrapCalc >= adistinctivelackofhue && requestedPaints.Contains("adistinctivelackofhue")) { offeredScrapCalc -= adistinctivelackofhue; paints += "adistinctivelackofhue"; } else if (offeredScrapCalc >= anextraordinaryabundanceoftinge && requestedPaints.Contains("anextraordinaryabundanceoftinge")) { offeredScrapCalc -= anextraordinaryabundanceoftinge; paints += "anextraordinaryabundanceoftinge"; } else if (offeredScrapCalc <= ScrapPutUp && !IsAdmin) { Trade.RemoveAllItems(); Trade.SendMessage("you have not paid enough"); return false; } if (offeredScrapCalc > 0) { SetScrap(offeredScrapCalc); } else { SetScrap(0); } // send the errors if (errors.Count != 0) Trade.SendMessage("There were errors in your trade: "); foreach (string error in errors) { Trade.SendMessage(error); } return errors.Count == 0; } public bool SetScrap (int scrapToOffer) { Log.Success ("Validate triggered!"); if (scrapToOffer > invScrap) { Trade.SendMessage ("I do not have enough scrap left for these items! Sorry!"); return false; } if (scrapToOffer != offeredScrap) { Log.Success ("Setting up scrap..."); while (scrapToOffer != offeredScrap) { if (scrapToOffer > offeredScrap) { if (offeredScrap / 9 < (offeredScrap + 1) / 9) { Trade.RemoveAllItemsByDefindex (5000); Trade.RemoveAllItemsByDefindex (5001); Trade.AddItemByDefindex (5002); offeredItems -= 3; } else if (offeredScrap / 3 < (offeredScrap + 1) / 3) { Trade.RemoveAllItemsByDefindex (5000); Trade.AddItemByDefindex (5001); offeredItems -= 1; } else { Trade.AddItemByDefindex (5000); offeredItems += 1; } offeredScrap += 1; } else if (scrapToOffer < offeredScrap) { if (offeredScrap / 9 > (offeredScrap - 1) / 9) { Trade.RemoveItemByDefindex (5002); Trade.AddItemByDefindex (5001); Trade.AddItemByDefindex (5001); Trade.AddItemByDefindex (5000); Trade.AddItemByDefindex (5000); offeredItems += 3; } else if (offeredScrap / 3 > (offeredScrap - 1) / 3) { Trade.RemoveItemByDefindex (5001); Trade.AddItemByDefindex (5000); Trade.AddItemByDefindex (5000); offeredItems += 1; } else { Trade.RemoveItemByDefindex (5000); offeredItems -= 1; } offeredScrap -= 1; } } } return true; } } }