namespace Holo.Managers { using Holo; using Ion.Storage; using System; using System.Collections; using System.Data; using System.Threading; public static class recyclerManager { private static int itemMinOwnershipLength; private static int sessionExpireLength; private static int sessionLength; private static Hashtable sessionRewards; public static string setupString; public static void createSession(int userID, int itemCount) { int rewardTemplateID = (int) sessionRewards[itemCount]; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dbClient.AddParamWithValue("userID", userID); dbClient.AddParamWithValue("dateTime", DateTime.Now.ToString()); dbClient.AddParamWithValue("rewardTemplateID", rewardTemplateID); dbClient.runQuery("INSERT INTO users_recycler(userid,session_started,session_reward) VALUES (@userID, @dateTime, @rewardTemplateID)"); } } public static void dropSession(int userID, bool dropItems) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dbClient.runQuery("DELETE FROM users_recycler WHERE userid = '" + userID + "' LIMIT 1"); if (dropItems) { dbClient.runQuery("DELETE FROM furniture WHERE ownerid = '" + userID + "' AND roomid = '-2'"); } else { dbClient.runQuery("UPDATE furniture SET roomid = '0' WHERE ownerid = '" + userID + "' AND roomid = '-2'"); } } } public static void Init(bool Update) { if (Config.getTableEntry("recycler_enable") == "1") { DataTable dTable; Config.enableRecycler = true; Out.WriteLine("Initializing recycler..."); using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dTable = dbClient.getTable("SELECT rclr_cost, rclr_reward FROM system_recycler"); } sessionLength = int.Parse(Config.getTableEntry("recycler_session_length")); sessionExpireLength = int.Parse(Config.getTableEntry("recycler_session_expirelength")); itemMinOwnershipLength = int.Parse(Config.getTableEntry("recycler_minownertime")); sessionRewards = new Hashtable(); setupString = "I" + Encoding.encodeVL64(itemMinOwnershipLength) + Encoding.encodeVL64(sessionLength) + Encoding.encodeVL64(sessionExpireLength) + Encoding.encodeVL64(dTable.Rows.Count); foreach (DataRow dRow in dTable.Rows) { catalogueManager.itemTemplate Template = catalogueManager.getTemplate(Convert.ToInt32(dRow["rclr_reward"])); if (Template.Sprite != "") { sessionRewards.Add(Convert.ToInt32(dRow["rclr_cost"]), Convert.ToInt32(dRow["rclr_reward"])); object CS$0$0003 = setupString; setupString = string.Concat(new object[] { CS$0$0003, Encoding.encodeVL64(Convert.ToInt32(dRow["rclr_cost"])), "H", Template.Sprite, Convert.ToChar(2), "H", Encoding.encodeVL64(Template.Length), Encoding.encodeVL64(Template.Width), Convert.ToChar(2) }); } } Out.WriteLine("Recycler enabled."); } else { setupString = "H"; Out.WriteLine("Recycler disabled."); } if (Update) { Thread.CurrentThread.Abort(); } } public static int passedMinutes(int userID) { try { TimeSpan Span; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { Span = (TimeSpan) (DateTime.Now - DateTime.Parse(dbClient.getString("SELECT session_started FROM users_recycler WHERE userid = '" + userID + "' LIMIT 1"))); } return Convert.ToInt32(Span.TotalMinutes); } catch { return 0; } } public static bool rewardExists(int itemCount) { return sessionRewards.ContainsKey(itemCount); } public static void rewardSession(int userID) { int rewardTemplateID = sessionRewardID(userID); using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dbClient.AddParamWithValue("reward", sessionRewardID(userID)); dbClient.AddParamWithValue("userID", userID); dbClient.runQuery("INSERT INTO furniture(tid,ownerid, roomid) VALUES (@reward, @userID, '0')"); } catalogueManager.handlePurchase(rewardTemplateID, userID, 0, "0", 0, 0); } public static bool sessionExists(int userID) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { return dbClient.findsResult("SELECT userid FROM users_recycler WHERE userid = '" + userID + "'"); } } public static bool sessionReady(int userID) { if (sessionExists(userID)) { int minutesPassed = passedMinutes(userID); if ((minutesPassed > sessionLength) & (minutesPassed < sessionExpireLength)) { return true; } } return false; } private static int sessionRewardID(int userID) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { return dbClient.getInt("SELECT session_reward FROM users_recycler WHERE userid = '" + userID + "'"); } } public static string sessionString(int userID) { if (Config.enableRecycler) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { if (!dbClient.findsResult("SELECT * FROM users_recycler WHERE userid = '" + userID + "'")) { return "H"; } } int minutesPassed = passedMinutes(userID); if (minutesPassed < sessionLength) { return string.Concat(new object[] { "IH", catalogueManager.getTemplate(sessionRewardID(userID)).Sprite, Convert.ToChar(2), Encoding.encodeVL64(sessionLength - minutesPassed) }); } if (minutesPassed > sessionLength) { return ("JH" + catalogueManager.getTemplate(sessionRewardID(userID)).Sprite + Convert.ToChar(2)); } if (minutesPassed > sessionExpireLength) { return "K"; } } return "H"; } } }