Untitled
unknown
plain_text
4 years ago
269 kB
7
Indexable
using System; using System.Data.SqlClient; using System.Threading.Tasks; using SR_PROXY.ENGINES; using System.Collections.Generic; using System.Data; using System.Windows.Forms; using SR_PROXY.MODEL; using System.IO; using System.Text; using SR_PROXY.GameSpawn; using SR_PROXY.SECURITYOBJECTS; using System.Globalization; using Framework; using static SR_PROXY.ENGINES.UTILS; using SR_PROXY.CORE; using System.Linq; namespace SR_PROXY.SQL { class QUERIES { public static string connectionstring; public static void SetConnectiontType() { if (Settings.MAIN.checkBox19.Checked) connectionstring = "Data Source=" + Settings.MSSQL_SVR_NAME + "\\SQLEXPRESS,1433;Network Library = DBMSSOCN;max pool size=1000; Initial Catalog =xQc_FILTER; User ID = " + Settings.MSSQL_SVR_ID + "; Password=" + Settings.MSSQL_SVR_PW + ";"; else connectionstring = "Data Source=" + Settings.MSSQL_SVR_NAME + ";Initial Catalog=xQc_FILTER;max pool size=1000;Integrated Security=false;UID = " + Settings.MSSQL_SVR_ID + "; PWD = " + Settings.MSSQL_SVR_PW + ";"; } public static async Task<bool> SQL_CONNECTIVITY(string connectionString) { try { using (SqlConnection connection = new SqlConnection("Data Source=" + Settings.MSSQL_SVR_NAME + ";Initial Catalog=" + Settings.MSSQL_LOG_DB + ";Integrated Security=false;UID = " + Settings.MSSQL_SVR_ID + "; PWD = " + Settings.MSSQL_SVR_PW + ";")) { await connection.OpenAsync(); UTILS.WriteLine("Database Connection is okey!.", UTILS.LOG_TYPE.Notify); connection.Close(); MAIN.SQL_STATUS = true; return true; } } catch (Exception ex) { UTILS.WriteLine(ex.ToString(), UTILS.LOG_TYPE.Fatal); return false; } } public static string INJECTION_PREFIX(string str) { if (!string.IsNullOrEmpty(str)) { str = str.Replace("'", string.Empty); str = str.Replace(";", string.Empty); str = str.Replace("-", string.Empty); str = str.Replace("\\", string.Empty); str = str.Replace("%", string.Empty); str = str.Replace("<", string.Empty); str = str.Replace(">", string.Empty); } return str; } #region LOAD-PREQUESITIES - Startup Mandatory Checks public static async Task BACKUP_DB(string dbname, string filepath) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("BACKUP DATABASE " + dbname + " TO DISK = '" + filepath + "' WITH FORMAT;", con)) { await con.OpenAsync(); cmd.CommandTimeout = 250;//ms timeout, dbs can potentially be heavy sql operations, hence the bigger timeout await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception ex) { UTILS.WriteLine(ex.ToString()); } } public static async Task<bool> TABLE_EXISTENSE(string TN, string DBN) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("IF OBJECT_ID (N'" + DBN + ".dbo." + TN + "', N'U') IS NOT NULL SELECT 1 AS res ELSE SELECT 0 AS res;", con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result == 1 ? true : false; } } } catch { UTILS.WriteLine("TABLE_EXISTENSE returned false and failed."); return false; } } public static async Task<bool> DATABASE_EXISTENSE(string DBN) { try { using (SqlConnection con = new SqlConnection("Data Source=" + Settings.MSSQL_SVR_NAME + ";Initial Catalog=" + Settings.MSSQL_LOG_DB + ";Integrated Security=false;UID = " + Settings.MSSQL_SVR_ID + "; PWD = " + Settings.MSSQL_SVR_PW + ";")) { using (SqlCommand cmd = new SqlCommand("select name from master.dbo.sysdatabases where name = '" + DBN + "'", con)) { await con.OpenAsync(); string result = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return !string.IsNullOrEmpty(result) ? true : false; } } } catch { UTILS.WriteLine("DATABASE_EXISTENSE returned false and failed."); return false; } } public static async Task<bool> DBN_CREATE(string DBN) { try { using (SqlConnection con = new SqlConnection("Data Source=" + Settings.MSSQL_SVR_NAME + ";Initial Catalog=" + Settings.MSSQL_LOG_DB + ";Integrated Security=false;UID = " + Settings.MSSQL_SVR_ID + "; PWD = " + Settings.MSSQL_SVR_PW + ";")) { using (SqlCommand cmd = new SqlCommand("CREATE DATABASE " + DBN + ";", con)) { await con.OpenAsync(); await cmd.ExecuteScalarAsync(); con.Close(); return true; } } } catch (Exception EX) { UTILS.WriteLine("DBN_CREATE returned false and failed." + EX.ToString()); return false; } } public static async Task<bool> SQL_Run_Code(string SqlCode) { try { if (String.Empty.Equals(SqlCode)) { throw new Exception("执行的代码为空"); } using (SqlConnection con = new SqlConnection(connectionstring)) { //using (SqlCommand Getcharnamecmd = new SqlCommand("TRUNCATE TABLE xQc_FILTER.dbo._Players;", con)) using (SqlCommand cmd = new SqlCommand(SqlCode, con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); return true; } } } catch (Exception e) { UTILS.WriteLine($"SQL执行出现异常{SqlCode}:" + e.Message); return false; } } public static async Task<DataTable> GetList(string query) { try { using (var con = new SqlConnection(connectionstring)) { await con.OpenAsync().ConfigureAwait(false); using (SqlCommand command = new SqlCommand(query, con)) { using (SqlDataReader read = await command.ExecuteReaderAsync().ConfigureAwait(false)) { var dataTable = new DataTable(); dataTable.Load(read); return dataTable; } } } } catch (NullReferenceException) { return null; } catch (SqlException Ex) { } return null; } public static async Task<bool> Clear_Players_Records() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { //using (SqlCommand Getcharnamecmd = new SqlCommand("TRUNCATE TABLE xQc_FILTER.dbo._Players;", con)) using (SqlCommand cmd = new SqlCommand("update xQc_FILTER.dbo._Players set cur_status = 0;", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); return true; } } } catch { UTILS.WriteLine("Clear_Players_Records operation has failed"); return false; } } public static async Task SQL_SVR_BIT() { await loadCustomTitleList(); await LoadTitleColorsList(); await LoadEventTime(); await LoadChangeLog(); await LoadCustomNamesRank(); await LoadCharnameColor(); await LoadCustomNames(); await LoadIcons(); await LoadIconsData(); await LoadEventsScheduler(); await LoadDailyReward(); await LoadDailyRewardItems(); //required region IDs info for systems //regions IDs foreach (var item in Settings.ShardInfos) { await LoadGuildRank(item.Key); await LoadHonorRank(item.Key); //await LoadCharRank(item.Key); await LoadHunterRank(item.Key); await LoadTraderRank(item.Key); await LoadThiefRank(item.Key); await LoadPVPRank(item.Key); //await LoadJobKillsRank(item.Key); if (!await Get_wRegionID(READER.FW_WREGION_ID, "FORT_", item.Key)) { UTILS.WriteLine("FAILED:FWwRegionID.", UTILS.LOG_TYPE.Warning); } if (!await Get_wRegionID(READER.CTF_WREGION_ID, "SIEGE_DUNG", item.Key)) { UTILS.WriteLine("FAILED:GET_CTFwRegionID.", UTILS.LOG_TYPE.Warning); } if (!await Get_wRegionID(READER.FGW_WREGION_ID, "GOD_", item.Key)) { UTILS.WriteLine("FAILED:GET_BAwRegionID.", UTILS.LOG_TYPE.Warning); } if (!await Get_wRegionID(READER.BA_WREGION_ID, "ARENA_", item.Key)) { UTILS.WriteLine("FAILED:GET_FGWwRegionID.", UTILS.LOG_TYPE.Warning); } if (!await Get_wRegionID(READER.TOWNS_WREGION_ID, "TOWN", item.Key)) { UTILS.WriteLine("FAILED:GET_TownswRegionID.", UTILS.LOG_TYPE.Warning); } //gate portal IDs if (!await Get_TeleportID(READER.FW_TELEPORT_ID, "FORT", item.Key)) { UTILS.WriteLine("FAILED:GET_FWTeleportID.", UTILS.LOG_TYPE.Warning); } if (!await Get_TeleportID(READER.JC_TELEPORT_ID, "TEMPLE", item.Key)) { UTILS.WriteLine("FAILED:GET_JCTeleportID.", UTILS.LOG_TYPE.Warning); } //clear _Players table everytime we restart, to dispose old records, keeps the integrity of the data intact. if (!await Clear_Players_Records()) { UTILS.WriteLine("FAILED:Clear_Players_Records.", UTILS.LOG_TYPE.Warning); } UTILS.Available_Uniques = await GET_AvailableUniques(item.Key); } } #endregion #region BASE_HELPERS Get/Is Checks //BotEngine recent changes public static async Task<long?> Get_ItemID_bySlotandCharname16(string CharName16, string ItemCodeName128, int slot, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT ItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "') AND ItemID IN (SELECT ID64 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE RefItemID IN (SELECT ID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE CodeName128 = '" + ItemCodeName128 + "') and slot = '" + slot + "');", con)) { await con.OpenAsync(); long? result = Convert.ToInt64(await cmd.ExecuteScalarAsync()); con.Close(); return result != null ? result : 0; } } } catch (Exception EX) { UTILS.WriteLine("Get_ItemID_bySlotandCharname16() has returned 0 " + EX.ToString()); return 0; } } public static async Task<int> Get_ItemID_by_Slot(int Slot, int CharID,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select RefItemID from {Settings.ShardInfos[ShardID].DBName}.dbo._Items where ID64 = (Select ItemID from {Settings.ShardInfos[ShardID].DBName}.dbo._Inventory where Slot = {Slot} and CharID = {CharID})", con)) { await con.OpenAsync(); int x = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"Get_ItemID_by_Slot failed: {EX}"); return 0; } } public static async Task<int> Get_TidGroupID_By_SlotAndCharname(string CharName16, int slot, int ShardID,int CharID) { try { int[] result = await Get_ItemID_Data(CharName16, slot, ShardID,CharID); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT TidGroupID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefFmnTidGroupMap WHERE Service = 1 AND TypeID1 = " + result[0] + " AND TypeID2 = " + result[1] + " AND TypeID3 = " + result[2] + " AND TypeID4 = " + result[3], con)) { await con.OpenAsync(); int TidGroupID = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result == null ? 0 : TidGroupID; } } } catch (Exception EX) { UTILS.WriteLine("Get_TidGroupID_By_SlotAndCharname() has returned 0." + EX.ToString()); return 0; } } public static async Task<int[]> Get_ItemID_Data(string CharName16, int slot, int ShardID ,int CharID) { try { int[] result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT TOP 1 TypeID1, TypeID2, TypeID3, TypeID4 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE ID = ( SELECT RefItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE ID64 = ( SELECT ItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = '" + CharID + "' AND Slot = " + slot + " ))", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) result = new int[4] { Convert.ToInt32(reader[0]), Convert.ToInt32(reader[1]), Convert.ToInt32(reader[2]), Convert.ToInt32(reader[3]) }; reader.Close(); } con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine("Get_ItemID_Data() has returned 0 " + EX.ToString()); return null; } } public static async Task<int[]> Get_ItemID_Data_ByItemID(string CharName16, int ShardID , int ItemID) { try { int[] result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT TOP 1 TypeID1, TypeID2, TypeID3, TypeID4 FROM " + Settings.ShardInfos[ShardID].DBName + $".dbo._RefObjCommon WHERE ID like {ItemID}", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) result = new int[4] { Convert.ToInt32(reader[0]), Convert.ToInt32(reader[1]), Convert.ToInt32(reader[2]), Convert.ToInt32(reader[3]) }; reader.Close(); } con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine("Get_ItemID_Data() has returned 0 " + EX.ToString()); return null; } } public static async Task<int?> Get_Next_InvAvailableSlot(string CharName16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select top 1 Slot from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory where charid = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "') and slot >= 13 and slot < (SELECT InventorySize FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char WHERE CharName16 = N'" + CharName16 + "') and itemid = 0 order by slot;", con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result; } } } catch (Exception EX) { UTILS.WriteLine("Get_Next_InvAvailableSlot() has returned null " + EX.ToString()); return null; } } public static async Task<int?> Get_ItemMaxStack_By_CharNameAndSlot(string CharName16, int slot, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT MaxStack FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjItem WHERE ID = (SELECT Link FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE ID = (SELECT RefItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE ID64 = ( SELECT ItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = " + await QUERIES.Get_CharID_by_CharName16(CharName16, ShardID) + " AND Slot = " + slot + " )))", con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result; } } } catch (Exception EX) { UTILS.WriteLine("Get_ItemMaxStack_By_CharNameAndSlot() has returned null " + EX.ToString()); return null; } } public static async Task<int?> Get_ItemStack_Count(string CharName16, int slot, int ShardID) { if (await Get_ItemMaxStack_By_CharNameAndSlot(CharName16, slot, ShardID) == 1) return 1; // if item max stack is one, return 1 try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT Data FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE ID64 = ( SELECT ItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = " + await QUERIES.Get_CharID_by_CharName16(CharName16, ShardID) + " AND Slot = " + slot + " )", con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result; } } } catch (Exception EX) { UTILS.WriteLine("Get_ItemStack_Count() has returned null " + EX.ToString()); return null; } } public static async Task<int?> Get_InvSlot_By_Codename(string CharName16, int ShardID, string codename, int? stack_count = null, int? opt_level = null) { try { int CharID = await Get_CharID_by_CharName16(CharName16, ShardID); stack_count = (stack_count == 0 ? null : stack_count); string sql_cmd = string.Empty; using (SqlConnection con = new SqlConnection(connectionstring)) { if (stack_count == null && opt_level == null) sql_cmd = "SELECT TOP 1 Slot FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = " + CharID + " AND ItemID IN ( SELECT ID64 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE RefItemID IN ( SELECT ID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE CodeName128 = '" + codename + "' ) )"; else if (stack_count == null && opt_level != null) sql_cmd = "SELECT TOP 1 Slot FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = " + CharID + " AND ItemID IN ( SELECT ID64 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE RefItemID IN ( SELECT ID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE CodeName128 = '" + codename + "' ) AND OptLevel = " + opt_level + " )"; else sql_cmd = "SELECT TOP 1 Slot FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = " + CharID + " AND ItemID IN ( SELECT ID64 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE RefItemID IN ( SELECT ID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE CodeName128 = '" + codename + "' ) AND Data = " + stack_count + " AND OptLevel = " + opt_level + " )"; using (SqlCommand cmd = new SqlCommand(sql_cmd, con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result < 13 ? 404 : result; } } } catch (Exception EX) { UTILS.WriteLine("Get_ItemStack_Count() has returned null " + EX.ToString()); return null; } } public static async Task Add_Item_To_Inventory(string CharName16, string ItemCodeName, int Quantity, int PlusValue, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("exec " + Settings.ShardInfos[ShardID].DBName + ".dbo._ADD_ITEM_EXTERN '" + CharName16 + "','" + ItemCodeName + "'," + Quantity + "," + PlusValue, con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine("Add_Item_To_Inventory() has returned " + EX.ToString()); return; } } public static async Task<List<string>> Get_BotsEngine_CharName16(int ShardID) { try { var temp_records = new List<string>(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT CharName16 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char WHERE CharID IN (SELECT CharID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._User WHERE UserJID IN (SELECT JID FROM " + Settings.MSSQL_ACC_DB + ".dbo.TB_User WHERE StrUserID like 'srbot_%'))", con)) { cmd.CommandTimeout = 60; await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) temp_records.Add(reader[0].ToString()); reader.Close(); } con.Close(); } } return temp_records; } catch (Exception EX) { UTILS.WriteLine("Get_BotsEngine_CharName16() has returned并且返回NULL" + EX.ToString()); return null; } } public static async Task<List<string>> Get_Online_BotsEngine_Characters() { try { var temp_records = new List<string>(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT CharName16 FROM xQc_FILTER.dbo._Players WHERE StrUserID like 'srbot_%' AND cur_status = 1", con)) { cmd.CommandTimeout = 60; await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) temp_records.Add(reader[0].ToString()); reader.Close(); } con.Close(); } } return temp_records; } catch (Exception EX) { UTILS.WriteLine("Get_Online_BotsEngine_Characters() has returned并且返回NULL" + EX.ToString()); return null; } } // get public static async Task<int[]> Get_TOT_SILK_BALANCE(string CharName16, int ShardID) { string sql = ""; try { int[] result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { sql = "Select silk_own,silk_gift,silk_point from " + Settings.MSSQL_ACC_DB + ".dbo.SK_Silk where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "'))"; using (SqlCommand cmd = new SqlCommand(sql, con)) { await con.OpenAsync(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (await reader.ReadAsync()) result = new int[3] { Convert.ToInt32(reader[0]), Convert.ToInt32((int)reader[1]), Convert.ToInt32((int)reader[2]) }; reader.Close(); } con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine($"TOT_SILK_BALANCE() has returned,SQL:{sql},{EX.ToString()}"); return null; } } public static async Task<long> 获取余额(string CharName16,int Type, int ShardID) { string sql = ""; try { long result = 0; using (SqlConnection con = new SqlConnection(connectionstring)) { switch (Type) { case 0: sql = "select silk_own from " + Settings.MSSQL_ACC_DB + ".dbo.SK_Silk where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "'))"; break; case 1: sql = $"select RemainGold FROM {Settings.ShardInfos[ShardID].DBName}.[dbo].[_Char] where [CharName16]='{CharName16}'"; break; case 2: sql = "select silk_point from " + Settings.MSSQL_ACC_DB + ".dbo.SK_Silk where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "'))"; break; default: throw new Exception("非法货币类型"); break; } using (SqlCommand cmd = new SqlCommand(sql, con)) { await con.OpenAsync(); result = Convert.ToInt64(await cmd.ExecuteScalarAsync()); con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine($"获取余额 has returned,SQL:{sql},{EX.ToString()}"); return 0; } } public static async Task<int[]> Get_ADDED_POINTS(string CharName16, int ShardID) { string sql = "SELECT TOP 1 Silk_Offset, Silk_Type FROM " + Settings.MSSQL_ACC_DB + ".dbo.SK_SilkBuyList WHERE UserJID = (SELECT TOP 1 UserJID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._User WHERE CharID = (SELECT TOP 1 CharID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char WHERE CharName16 = N'" + CharName16 + "')) ORDER BY RegDate DESC;"; try { int[] result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand(sql, con)) { await con.OpenAsync(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (await reader.ReadAsync()) result = new int[2] { Convert.ToInt32(reader[0]), Convert.ToInt32(reader[1]) }; } con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine($"GET_ADDED_POINTS() has returned,Sql{sql},{EX.ToString()}"); return null; } } public static async Task<List<string>> GET_AvailableUniques(int ShardID) { try { var tempList = new List<string>(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select CodeName128 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon where Rarity = 3 and CodeName128 like '%MOB%' and CodeName128 not like '%_EV_%'and CodeName128 not like '%GNGWC%'and CodeName128 not like '%GOD%'and CodeName128 not like '%FW%'and CodeName128 not like '%_L%'and Service = 1", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) tempList.Add(reader[0].ToString().Split('_')[2]); reader.Close(); } con.Close(); } } return tempList; } catch { UTILS.WriteLine("GET_AvailableUniques returned an empty list and failed."); return new List<string>(); } } public static async Task<string> Get_BasicCode_by_SkillID(int SkillID, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select Basic_Code from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefSkill where ID = '" + SkillID + "';", con)) { await con.OpenAsync(); string Basic_Code = (string)await cmd.ExecuteScalarAsync(); con.Close(); return Basic_Code; } } } catch { UTILS.WriteLine("Get_BasicCode_by_SkillID operation has has returned string.Empty"); return string.Empty; } } public static async Task<int?> Get_LastOrderID() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select Max(cast(OrderNumber as int))+1 from " + Settings.MSSQL_ACC_DB + ".dbo.SK_SilkBuyList", con)) { await con.OpenAsync(); int? sb = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); if (sb == null) { await Insert_LastOrderID_Dummy(); return await Get_LastOrderID(); } else return sb; } } } catch { return 0; } } public static async Task<int> Insert_LastOrderID_Dummy() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT " + Settings.MSSQL_ACC_DB + ".dbo.SK_SilkBuyList(UserJID,Silk_Type,Silk_Reason,Silk_Offset,Silk_Remain,ID,BuyQuantity,OrderNumber,SlipPaper,RegDate) VALUES( 0,0,0,0,0,0,0,0,'dummy',GETDATE())", con)) { await con.OpenAsync(); int result = await cmd.ExecuteNonQueryAsync(); con.Close(); return result == 1 ? 0 : 1; } } } catch { UTILS.WriteLine("Insert_LastOrderID_Dummy operation has has returned 1"); return 1; } } public static async Task<string> Get_CHARNAME16_by_CharID(int CharID, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand Getcharnamecmd = new SqlCommand("Select CHARNAME16 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharID =" + CharID + ";", con)) { await con.OpenAsync(); string CHARNAME16 = (string)await Getcharnamecmd.ExecuteScalarAsync(); con.Close(); return CHARNAME16; } } } catch { UTILS.WriteLine("Get_CHARNAME16_by_CharID operation has has returned string.Empty"); return string.Empty; } } public static async Task<int> Get_CharID_by_CharName16(string CharName16,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = '" + UTILS.INJECTION_PREFIX(CharName16) + "';", con)) { await con.OpenAsync(); int CHARID = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return CHARID; } } } catch { UTILS.WriteLine("Get_CharID_by_CharName16 operation has has returned 0"); return 0; } } public static async Task<int> Get_JID_by_CharID(int CharID,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select UserJID from {Settings.ShardInfos[ShardID].DBName}.dbo._User where CharID = {CharID}", con)) { await con.OpenAsync(); int x = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"Get_JID_by_CharName16 failed: {EX}",UTILS.LOG_TYPE.Fatal); return 0; } } public static async Task<int> Get_Trophies_Price_By_Codename(string codename, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT Cost FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefPricePolicyOfItem WHERE PaymentDevice = 16 AND RefPackageItemCodeName = '" + codename + "'", con)) { await con.OpenAsync(); int price = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return price; } } } catch { UTILS.WriteLine("Get_Trophies_Price_By_Codename operation has has returned 0"); return 0; } } public static async Task<int> Get_Point_balance(string CharName16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select silk_point from " + Settings.MSSQL_ACC_DB + ".dbo.SK_Silk where JID IN (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID in (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "'));", con)) { await con.OpenAsync(); int currency = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return currency; } } } catch { UTILS.WriteLine("Get_Point_balance operation has has returned 0"); return 0; } } public static async Task<int> 获取版本号() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 1 [nVersion] FROM [{Settings.MSSQL_ACC_DB}].[dbo].[_ModuleVersion] order by nVersion desc", con)) { await con.OpenAsync(); int currency = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return currency; } } } catch (Exception Ex) { UTILS.WriteLine($"获取版本号失败:{Ex.ToString()}"); return 0; } } public static async Task<long> GetLastCertificateNum() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 1 certificate_num FROM {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] order by certificate_num desc", con)) { await con.OpenAsync(); object temp = await cmd.ExecuteScalarAsync(); long currency = Convert.ToInt64(temp == null ? "203103198405100000" : temp) + 1; con.Close(); return currency; } } } catch (Exception Ex) { UTILS.WriteLine($"GetLastCertificateNum:{Ex.ToString()}"); return 203103198405100000; } } public static async Task<int> 获取称号等级(string Name, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT [HwanLevel] FROM {Settings.ShardInfos[ShardID].DBName}.[dbo].[_Char] where [CharName16]='{Name}'", con)) { await con.OpenAsync(); object temp = await cmd.ExecuteScalarAsync(); con.Close(); return Convert.ToInt32(temp); } } } catch (Exception Ex) { UTILS.WriteLine($"获取称号等级:{Ex.ToString()}"); return 0; } } public static async Task<string> Get_StrUserID_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT StrUserID FROM " + Settings.MSSQL_ACC_DB + ".dbo.TB_User WHERE JID = (SELECT UserJID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._User WHERE CharID=(Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'));", con)) { await con.OpenAsync(); string Username = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return Username; } } } catch { UTILS.WriteLine("Get_StrUserID_by_CHARNAME16 operation has has returned string.Empty"); return string.Empty; } } public static async Task<int> Get_CurLevel_by_CHARNAME16(string CHARNAME16, int ShardID) { if (ShardID == 0) ShardID = 64; try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT CurLevel FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char WHERE CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync();//do not change to cast, do convert to int, cuasing errors int charlvl = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return charlvl; } } } catch(Exception ex) { UTILS.WriteLine($"Get_CurLevel_by_CHARNAME16 operation has has returned:{ex.ToString()}"); return Settings.GLOBAL_REQ_LVL + 1; } } public static async Task<string> Get_NikeName_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT NickName16 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char WHERE CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync();//do not change to cast, do convert to int, cuasing errors string charlvl = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return charlvl; } } } catch { UTILS.WriteLine("Get_NikeName_by_CHARNAME16 operation has has returned 1."); return ""; } } public static async Task<bool> Get_Jobstate_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT ItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = (Select CharID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "') AND Slot = 8;", con)) { await con.OpenAsync(); string result = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return (string.IsNullOrEmpty(result) || result == "0") ? false : true; } } } catch (Exception ex) { UTILS.WriteLine("$Get_Jobstate_by_CHARNAME16 returned 0 and failed." + ex.ToString(), UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<int[]> Get_JobType_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select JobType,Level from {Settings.ShardInfos[ShardID].DBName}.[dbo].[_CharTrijob] a,{Settings.ShardInfos[ShardID].DBName}.[dbo].[_Char] b where [CharName16]='{CHARNAME16}' and a.CharID=b.CharID", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { return new int[] {Convert.ToInt32(item["JobType"]), Convert.ToInt32(item["Level"]) }; } } } con.Close(); return null; } } } catch (Exception ex) { UTILS.WriteLine("Get_JobType_by_CHARNAME16:" + ex.ToString(), UTILS.LOG_TYPE.Fatal); return null; } } public static async Task<string> Get_ItemRealName_by_Slot(int Slot, string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select top (1) RealName from xQc_FILTER.dbo._ItemPoolName where CodeName COLLATE DATABASE_DEFAULT in(select CodeName128 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon where ID =(select RefItemID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items where ID64 = (select ItemID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory where Slot = " + Slot + " and CharID =(select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))))", con)) { await con.OpenAsync(); string result = (string)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("Get_ItemRealName_by_Slot operation has has returned null, if _ItemPoolName table has no records, please fill it up from Prerequisites folder."); return string.Empty; } } public static async Task<string> Get_ItemCodeName128_by_Slot(int Slot, string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select top (1) CodeName128 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon where ID =(select RefItemID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items where ID64 = (select ItemID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory where Slot = '" + Slot + "' and CharID =(select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "')))", con)) { await con.OpenAsync(); string result = (string)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("Get_ItemRealName_by_Slot operation has has returned null, if _ItemPoolName table has no records, please fill it up from Prerequisites folder."); return null; } } public static async Task<int?> Get_AdvancedElixirValue(int Slot, string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select nOptValue from " + Settings.ShardInfos[ShardID].DBName + ".dbo._BindingOptionWithItem WHERE nItemDBID = (SELECT ItemID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "') AND Slot = '" + Slot + "')", con)) { await con.OpenAsync(); int? result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result != null ? result : 0; } } } catch (Exception EX) { UTILS.WriteLine("Get_AdavncedElixirValue operation failed " + EX.ToString()); return 0; } } public static async Task<short> Get_RegionID_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT LatestRegion FROM [" + Settings.ShardInfos[ShardID].DBName + "].[dbo].[_Char] where CharName16 = N'" + CHARNAME16 + "'", con)) { await con.OpenAsync(); short region = (short)await cmd.ExecuteScalarAsync(); con.Close(); return region; } } } catch { UTILS.WriteLine("Get_RegionID_by_CHARNAME16 operation has has returned 0"); return 0; } } public static async Task<int> Get_EmptyInvSlotCount_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT COUNT(Slot) AS EmptySlots FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE CharID = (SELECT CharID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "') AND ItemID = 0 AND Slot > 12 AND Slot < (SELECT InventorySize FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharID = (SELECT CharID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))", con)) { await con.OpenAsync(); int sb = (int)await cmd.ExecuteScalarAsync(); con.Close(); return sb; } } } catch { UTILS.WriteLine("IS_BattleField_by_CHARNAME16 returned 500 and failed."); return 500; } } public static async Task<string> Get_ItemCodeName_by_SlotAndCHARNAME16(int slot, string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT TOP 1 CodeName128 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon WHERE ID = (SELECT TOP 1 RefItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items WHERE ID64 = (SELECT TOP 1 ItemID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory WHERE Slot = " + slot.ToString() + " and CharID = (SELECT CharID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))) AND CodeName128 like 'ITEM_CH_%_FRPVP_VOUCHER_%'", con)) { await con.OpenAsync(); string result = (string)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("Get_ItemCodeName_by_SlotAndCHARNAME16 returned string.Empty and failed."); return string.Empty; } } public static async Task<string> Get_Gender_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT Count(Deleted) FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "' AND (RefObjID BETWEEN 1907 AND 1919) OR (RefObjID BETWEEN 14717 AND 14734)", con)) { await con.OpenAsync(); int result = (int)await cmd.ExecuteScalarAsync(); con.Close(); return result > 0 ? "male" : "female"; } } } catch { UTILS.WriteLine("Get_Gender_by_CHARNAME16 returned string.Empty and failed."); return string.Empty; } } public static async Task<int> Get_Optlvl_by_SlotAndCHARNAME16(string CHARNAME16, int Slot, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select OptLevel from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items where ID64 = (select ItemID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory where Slot = '" + Slot + "' and CharID =(select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 ='" + CHARNAME16 + "'))", con)) { await con.OpenAsync(); string optlvl = Convert.ToString(cmd.ExecuteScalar()); con.Close(); return string.IsNullOrEmpty(optlvl) ? (Settings.ALCHEMY_MAXPLUS + 1) : Convert.ToInt32(optlvl); } } } catch (Exception EX) { UTILS.WriteLine("Get_Optlvl_by_SlotAndCHARNAME16 returned 0 and failed." + EX.ToString()); return 0; } } public static async Task<int> Get_GuildMembersCount_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select COUNT(CharID) from " + Settings.ShardInfos[ShardID].DBName + ".dbo._GuildMember where CharName = '" + INJECTION_PREFIX(CHARNAME16) + "';", con)) { await con.OpenAsync(); int memcount = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return memcount; } } } catch { UTILS.WriteLine("Get_GuildMembersCount_by_CHARNAME16 returned 0 and failed."); return 0; } } public static async Task<int> Get_UnionMembersCount_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT CASE WHEN Ally1 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally2 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally3 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally4 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally5 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally6 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally7 != 0 THEN 1 ELSE 0 END + CASE WHEN Ally8 != 0 THEN 1 ELSE 0 END AS TOTAL FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._AlliedClans where ID = (Select Alliance from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Guild where ID = (Select GuildID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + INJECTION_PREFIX(CHARNAME16) + "'));", con)) { await con.OpenAsync(); int UNcnt = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return UNcnt; } } } catch { UTILS.WriteLine("Get_UnionMembersCount_by_CHARNAME16 returned 0 and failed."); return 0; } } public static async Task<bool> Get_GMPrivileges_by_StrUserID(string StrUserID) { try { int[] result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select sec_primary,sec_content from " + Settings.MSSQL_ACC_DB + ".dbo.TB_User where StrUserID = '" + StrUserID + "';", con)) { await con.OpenAsync(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (await reader.ReadAsync()) result = new int[2] { (int)reader[0], (int)reader[1] }; reader.Close(); } con.Close(); return (result[0] == 1 && result[1] == 1) ? true : false; } } } catch { UTILS.WriteLine("Get_GMsPriviliges_by_StrUserID returned false and failed."); return false; } } public static async Task<List<string>> GET_AvailableHwanIDs(int ShardID) { try { var tempList = new List<string>(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select Title_CH70 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefHwanLevel where Title_CH70 like '%_LEVEL_%';", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) tempList.Add(reader[0].ToString().Split(new string[] { "_LEVEL_" }, StringSplitOptions.None)[1]); reader.Close(); } con.Close(); } } return tempList; } catch { UTILS.WriteLine("GET_AvailableHwanIDs returned an empty list and failed."); return new List<string>(); } } public static async Task<bool> Get_TableRowsNumber(string dbname, string tblname) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select COUNT (*) from " + dbname + ".dbo." + tblname + ";", con)) { await con.OpenAsync(); int rowsnr = (int)await cmd.ExecuteScalarAsync(); con.Close(); return rowsnr != 0 ? true : false; } } } catch (Exception EX) { UTILS.WriteLine(EX.ToString()); return false; } } public static async Task<bool> Get_wRegionID(List<short> LIST, string keyword, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select distinct wRegionID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Refregion where ContinentName like '%" + keyword + "%';", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) LIST.Add(Convert.ToInt16(reader[0])); reader.Close(); } con.Close(); } } return true; } catch { UTILS.WriteLine("GET_JCTeleportID returned false and failed."); return false; } } public static async Task<bool> Get_TeleportID(List<short> LIST, string keyword, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select distinct TargetTeleport from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefTeleLink WHERE OwnerTeleport IN (Select ID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefTeleport where CodeName128 like '%" + keyword + "%' AND Service = 1)", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) LIST.Add(Convert.ToInt16(reader[0])); reader.Close(); } con.Close(); } } return true; } catch { UTILS.WriteLine("GET_JCTeleportID returned false and failed."); return false; } } public static async Task<bool> Get_WebPrivileges_by_CharName16(string CharName16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT [STATUS] FROM " + Settings.MSSQL_ACC_DB + ".dbo.TB_User where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + INJECTION_PREFIX(CharName16) + "'))", con)) { await con.OpenAsync(); int status = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return status != 2 ? true : false; } } } catch (Exception EX) { UTILS.WriteLine("Get_WebPrivileges_by_StrUserID operation has has returned 0" + EX.ToString()); return true; } } /// <summary> /// 判断表是否存在 /// </summary> /// <param name="TabName"></param> /// <returns></returns> public static async Task<bool> SQL_Exist_Tab(string TabName) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { await con.OpenAsync(); using (SqlCommand cmd = new SqlCommand("USE [xQc_FILTER] select name from sys.objects where name = '" + TabName + "' and type='U'", con)) { using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { if (reader.Read()) { return true; } return false; } } con.Close(); } } catch { return false; } } /// <summary> /// 判断存储是否存在 /// </summary> /// <param name="ExeName"></param> /// <returns></returns> public static async Task<bool> SQL_Exist_Exe(string ExeName) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { await con.OpenAsync(); using (SqlCommand cmd = new SqlCommand("USE [xQc_FILTER] select name from sys.objects where name = '" + ExeName + "' and type='P'", con)) { using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { if (reader.Read()) { return true; } return false; } } con.Close(); } } catch { return false; } } /// <summary> /// 获取存储 /// </summary> /// <returns></returns> public static async Task<List<string>> Get_Sp_List() { List<string> SpNames = new List<string>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("use [xQc_FILTER] select name from sysobjects where type='P'", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { SpNames.Add(item["name"].ToString()); } } } con.Close(); } } return SpNames; } catch (Exception EX) { UTILS.WriteLine("存储列表获取失败" + EX.ToString()); return SpNames; } } /// <summary> /// 获取自定义指令列表 /// </summary> /// <returns></returns> public static async Task<ActionResponseModel> SQL_Run_Action(string ActionName, string CharName, List<string> Parameters, string DstCharName = "") { ActionResponseModel actionResponse = new ActionResponseModel(); try { SqlConnection con = new SqlConnection(connectionstring); await con.OpenAsync(); SqlCommand command = new SqlCommand("select * from xQc_FILTER.[dbo].[_CustomAction] where [Name]=N'" + ActionName + "'", con); SqlDataReader read = await command.ExecuteReaderAsync(); if (!read.Read()) { actionResponse.SrcNoticeMessage = "该功能不存在!"; return actionResponse; } string SpName = read["SpName"].ToString(); int ParameterNum = (int)read["ParameterNum"]; int Service = (int)read["Service"]; con.Close(); if (Parameters.Count != ParameterNum) { actionResponse.SrcNoticeMessage = "参数格式不正确!"; return actionResponse; } else if (Service == 0) { actionResponse.SrcNoticeMessage = "服务已被关闭!"; return actionResponse; } actionResponse = await SQL_Run_ActionSp(SpName, CharName, Parameters, DstCharName); } catch (Exception e) { string ParametersText = ""; foreach (var item in Parameters) { ParametersText += item + "|"; } UTILS.WriteLine($"玩家[{CharName}]执行[{ActionName}]指令,传入参数[{ParametersText}]发生异常:" + e.ToString(), UTILS.LOG_TYPE.Warning); actionResponse.SrcNoticeMessage = "发生异常!"; } return actionResponse; } public static async Task<Dictionary<string, AppConfigItemModel>> Get_AppConfig() { Dictionary<string, AppConfigItemModel> AppConfig = new Dictionary<string, AppConfigItemModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select * from xQc_FILTER.[dbo].[_AppConfig]", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { AppConfig.Add(item["Name"].ToString(), new AppConfigItemModel( int.Parse(item["Service"].ToString()) == 1, item["Name"].ToString(), item["Value"].ToString() )); } } } con.Close(); } } return AppConfig; } catch (Exception EX) { UTILS.WriteLine("配置列表读取失败" + EX.ToString()); return AppConfig; } } /// <summary> /// 运行自定义指令存储 /// </summary> /// <param name="SpName"></param> /// <param name="CharName"></param> /// <param name="Parameters"></param> /// <returns></returns> public static async Task<ActionResponseModel> SQL_Run_ActionSp(string SpName, string CharName, List<string> Parameters,string DstCharName="") { ActionResponseModel actionResponse = new ActionResponseModel(); try { SqlConnection con = new SqlConnection(connectionstring); await con.OpenAsync(); SqlCommand command = new SqlCommand("[xQc_FILTER].[dbo].[" + SpName + "]", con) { CommandType = CommandType.StoredProcedure }; //系统输入参数 command.Parameters.Add("@SrcCharName", SqlDbType.NVarChar); command.Parameters["@SrcCharName"].Value = CharName; //系统输出参数 command.Parameters.Add("@DstCharName", SqlDbType.NVarChar, 64); command.Parameters.Add("@SrcNoticeMessage", SqlDbType.NVarChar, -1); command.Parameters.Add("@DstNoticeMessage", SqlDbType.NVarChar, -1); command.Parameters.Add("@AllNoticeMessage", SqlDbType.NVarChar, -1); command.Parameters.Add("@SilkChangeType", SqlDbType.Int); command.Parameters.Add("@ExpelType", SqlDbType.Int); command.Parameters.Add("@SrcAddSLB", SqlDbType.Int); command.Parameters.Add("@DstAddSLB", SqlDbType.Int); command.Parameters["@DstCharName"].Direction = ParameterDirection.InputOutput; command.Parameters["@SrcNoticeMessage"].Direction = ParameterDirection.Output; command.Parameters["@DstNoticeMessage"].Direction = ParameterDirection.Output; command.Parameters["@AllNoticeMessage"].Direction = ParameterDirection.Output; command.Parameters["@SilkChangeType"].Direction = ParameterDirection.Output; command.Parameters["@ExpelType"].Direction = ParameterDirection.Output; command.Parameters["@SrcAddSLB"].Direction = ParameterDirection.Output; command.Parameters["@DstAddSLB"].Direction = ParameterDirection.Output; command.Parameters["@DstCharName"].Value = DstCharName; //自定义参数 for (int i = 0; i < Parameters.Count; i++) { command.Parameters.Add("@Parameter" + (i + 1), SqlDbType.VarChar, 64); command.Parameters["@Parameter" + (i + 1)].Value = Parameters[i]; } command.ExecuteNonQuery(); //int num = (int)command.Parameters["@return"].Value; con.Close(); actionResponse.DstCharName = command.Parameters["@DstCharName"].Value.ToString(); actionResponse.SrcNoticeMessage = command.Parameters["@SrcNoticeMessage"].Value.ToString(); actionResponse.DstNoticeMessage = command.Parameters["@DstNoticeMessage"].Value.ToString(); actionResponse.AllNoticeMessage = command.Parameters["@AllNoticeMessage"].Value.ToString(); actionResponse.SilkChangeType = int.Parse(command.Parameters["@SilkChangeType"].Value.ToString()); actionResponse.ExpelType = int.Parse(command.Parameters["@ExpelType"].Value.ToString()); actionResponse.SrcAddSLB = int.Parse(command.Parameters["@SrcAddSLB"].Value.ToString()); actionResponse.DstAddSLB = int.Parse(command.Parameters["@DstAddSLB"].Value.ToString()); } catch (Exception e) { string ParametersText = ""; foreach (var item in Parameters) { ParametersText += item + "|"; } UTILS.WriteLine($"玩家[{CharName}]执行[{SpName}]存储,传入参数[{ParametersText}]发生异常:" + e.ToString(), UTILS.LOG_TYPE.Warning); actionResponse.SrcNoticeMessage = "RunSp发生异常!"; } return actionResponse; } /// <summary> /// 运行自定义限制存储 /// </summary> /// <param name="SpName"></param> /// <param name="CharName"></param> /// <param name="Parameters"></param> /// <returns></returns> public static async Task<ActionResponseModel> SQL_Run_LimitSp(string SpName, string CharName, string Buff, string HWID) { ActionResponseModel actionResponse = new ActionResponseModel(); try { SqlConnection con = new SqlConnection(connectionstring); await con.OpenAsync(); SqlCommand command = new SqlCommand("[xQc_FILTER].[dbo].[" + SpName + "]", con) { CommandType = CommandType.StoredProcedure }; //系统输入参数 command.Parameters.Add("@SrcCharName", SqlDbType.NVarChar); command.Parameters["@SrcCharName"].Value = CharName; command.Parameters.Add("@Buff", SqlDbType.NVarChar); command.Parameters["@Buff"].Value = Buff; command.Parameters.Add("@HWID", SqlDbType.NVarChar); command.Parameters["@HWID"].Value = HWID; //系统输出参数 command.Parameters.Add("@SrcNoticeMessage", SqlDbType.NVarChar, -1); command.Parameters.Add("@AllNoticeMessage", SqlDbType.NVarChar, -1); command.Parameters.Add("@SilkChangeType", SqlDbType.Int); command.Parameters.Add("@ExpelType", SqlDbType.Int); command.Parameters.Add("@SrcAddSLB", SqlDbType.Int); command.Parameters.Add("@return", SqlDbType.Int); command.Parameters["@SrcNoticeMessage"].Direction = ParameterDirection.Output; command.Parameters["@AllNoticeMessage"].Direction = ParameterDirection.Output; command.Parameters["@SilkChangeType"].Direction = ParameterDirection.Output; command.Parameters["@ExpelType"].Direction = ParameterDirection.Output; command.Parameters["@SrcAddSLB"].Direction = ParameterDirection.Output; command.Parameters["@return"].Direction = ParameterDirection.ReturnValue; command.ExecuteNonQuery(); //int num = (int)command.Parameters["@return"].Value; con.Close(); actionResponse.SrcNoticeMessage = command.Parameters["@SrcNoticeMessage"].Value.ToString(); actionResponse.AllNoticeMessage = command.Parameters["@AllNoticeMessage"].Value.ToString(); actionResponse.SilkChangeType = int.Parse(command.Parameters["@SilkChangeType"].Value.ToString()); actionResponse.ExpelType = int.Parse(command.Parameters["@ExpelType"].Value.ToString()); actionResponse.SrcAddSLB = int.Parse(command.Parameters["@SrcAddSLB"].Value.ToString()); actionResponse.DstCharName = command.Parameters["@return"].Value.ToString(); } catch (Exception e) { string ParametersText = ""; UTILS.WriteLine($"玩家[{CharName}]触发限制执行[{SpName}]存储,发生异常:" + e.ToString(), UTILS.LOG_TYPE.Warning); actionResponse.SrcNoticeMessage = "RunSp发生异常!"; } return actionResponse; } /// <summary> /// 获取怪物击杀奖励列表 /// </summary> /// <returns></returns> public static async Task<List<MonsterKillRewardModel>> Get_MonsterKillReward_List() { List<MonsterKillRewardModel> MonsterKillRewards = new List<MonsterKillRewardModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select * from xQc_FILTER.[dbo].[_MonsterKillReward]", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { MonsterKillRewardModel monsterKillReward = new MonsterKillRewardModel( int.Parse(item["Service"].ToString()), int.Parse(item["ID"].ToString()), item["Name"].ToString(), int.Parse(item["SilkOwnReward"].ToString()), int.Parse(item["SLBReward"].ToString()), int.Parse(item["RewardProbability"].ToString()), int.Parse(item["NoticeType"].ToString()), item["NoticeMessage"].ToString()); MonsterKillRewards.Add(monsterKillReward); } } } con.Close(); } } return MonsterKillRewards; } catch (Exception EX) { UTILS.WriteLine("怪物击杀列表获取失败" + EX.ToString()); return MonsterKillRewards; } } /// <summary> /// 获取怪物击杀奖励 /// </summary> /// <returns></returns> public static async Task<MonsterKillRewardModel> Get_MonsterKillRewardByID(int ID) { MonsterKillRewardModel MonsterKillRewards = null; try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select * from xQc_FILTER.[dbo].[_MonsterKillReward] where [ID]=" + ID, con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); if (dt.Rows.Count > 0) { DataRow item = dt.Rows[0]; MonsterKillRewards = new MonsterKillRewardModel( int.Parse(item["Service"].ToString()), int.Parse(item["ID"].ToString()), item["Name"].ToString(), int.Parse(item["SilkOwnReward"].ToString()), int.Parse(item["SLBReward"].ToString()), int.Parse(item["RewardProbability"].ToString()), int.Parse(item["NoticeType"].ToString()), item["NoticeMessage"].ToString()); } } } con.Close(); } } return MonsterKillRewards; } catch (Exception EX) { UTILS.WriteLine($"怪物ID:{ID},奖励获取失败" + EX.ToString()); return MonsterKillRewards; } } /// <summary> /// 添加怪物击杀奖励 /// </summary> /// <param name="MonsterKillReward"></param> /// <returns></returns> public static async Task<bool> Add_MonsterKillReward(MonsterKillRewardModel MonsterKillReward) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.[dbo].[_MonsterKillReward] " + "values(@Service, @ID, @Name, @SilkOwnReward, @SLBReward, @RewardProbability, @NoticeType, @NoticeMessage)", con)) { await con.OpenAsync(); SqlParameter[] Parameters = { new SqlParameter("@Service",MonsterKillReward.Service), new SqlParameter("@ID",MonsterKillReward.ID), new SqlParameter("@Name",MonsterKillReward.Name), new SqlParameter("@SilkOwnReward",MonsterKillReward.SilkOwnReward), new SqlParameter("@SLBReward",MonsterKillReward.SLBReward), new SqlParameter("@RewardProbability",MonsterKillReward.RewardProbability), new SqlParameter("@NoticeType",MonsterKillReward.NoticeType), new SqlParameter("@NoticeMessage",MonsterKillReward.NoticeMessage), }; cmd.Parameters.AddRange(Parameters); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine("添加击杀奖励失败:" + EX.ToString()); return false; } } /// <summary> /// 修改怪物击杀奖励 /// </summary> /// <param name="MonsterKillReward"></param> /// <returns></returns> public static async Task<bool> Update_MonsterKillReward(MonsterKillRewardModel MonsterKillReward) { List<NoticeModel> Notices = new List<NoticeModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("update xQc_FILTER.[dbo].[_MonsterKillReward]" + " set [Service]=@Service,[Name]=@Name,[SilkOwnReward]=@SilkOwnReward,[SLBReward]=@SLBReward,[RewardProbability]=@RewardProbability,[NoticeType]=@NoticeType,[NoticeMessage]=@NoticeMessage" + " where [ID]=@ID", con)) { await con.OpenAsync(); SqlParameter[] Parameters = { new SqlParameter("@Service",MonsterKillReward.Service), new SqlParameter("@ID",MonsterKillReward.ID), new SqlParameter("@Name",MonsterKillReward.Name), new SqlParameter("@SilkOwnReward",MonsterKillReward.SilkOwnReward), new SqlParameter("@SLBReward",MonsterKillReward.SLBReward), new SqlParameter("@RewardProbability",MonsterKillReward.RewardProbability), new SqlParameter("@NoticeType",MonsterKillReward.NoticeType), new SqlParameter("@NoticeMessage",MonsterKillReward.NoticeMessage), }; cmd.Parameters.AddRange(Parameters); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine("修改击杀奖励失败:" + EX.ToString()); return false; } } /// <summary> /// 获取公告列表 /// </summary> /// <returns></returns> public static async Task<List<NoticeModel>> Get_Notice_List() { List<NoticeModel> Notices = new List<NoticeModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select * from xQc_FILTER.[dbo].[_Notice]", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { NoticeModel Notice = new NoticeModel( int.Parse(item["ID"].ToString()), Convert.ToDateTime(item["StartDate"].ToString()), Convert.ToDateTime(item["EndDate"]), item["Content"].ToString(), item["Color"].ToString()); Notices.Add(Notice); } } } con.Close(); } } return Notices; } catch (Exception EX) { UTILS.WriteLine("通知列表获取失败" + EX.ToString()); return Notices; } } /// <summary> /// 添加公告 /// </summary> /// <param name="Notice"></param> /// <returns></returns> public static async Task<bool> Add_Notice(NoticeModel Notice) { List<NoticeModel> Notices = new List<NoticeModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.[dbo].[_Notice] values(@StartDate,@EndDate,@Content,@Color)", con)) { await con.OpenAsync(); SqlParameter[] Parameters = { new SqlParameter("@StartDate",Notice.StartDateTime.ToString("yyyy-MM-dd HH:mm:ss")), new SqlParameter("@EndDate",Notice.EndDateTime.ToString("yyyy-MM-dd HH:mm:ss")), new SqlParameter("@Content",Notice.Content), new SqlParameter("@Color",Notice.Color) }; cmd.Parameters.AddRange(Parameters); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine("添加公告失败:" + EX.ToString()); return false; } } /// <summary> /// 修改公告 /// </summary> /// <param name="Notice"></param> /// <returns></returns> public static async Task<bool> Update_Notice(NoticeModel Notice) { List<NoticeModel> Notices = new List<NoticeModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("update xQc_FILTER.[dbo].[_Notice] set [StartDate]=@StartDate,[EndDate]=@EndDate,[Content]=@Content,[Color]=@Color where [ID]=@ID", con)) { await con.OpenAsync(); SqlParameter[] Parameters = { new SqlParameter("@StartDate",Notice.StartDateTime.ToString("yyyy-MM-dd HH:mm:ss")), new SqlParameter("@EndDate",Notice.EndDateTime.ToString("yyyy-MM-dd HH:mm:ss")), new SqlParameter("@Content",Notice.Content), new SqlParameter("@Color",Notice.Color), new SqlParameter("@ID",Notice.ID), }; cmd.Parameters.AddRange(Parameters); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine("修改公告失败:" + EX.ToString()); return false; } } public static async Task<bool> Delete_Notice(int ID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("delete xQc_FILTER.[dbo].[_Notice] where [ID]=@ID", con)) { await con.OpenAsync(); SqlParameter[] Parameters = { new SqlParameter("@ID",ID), }; cmd.Parameters.AddRange(Parameters); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine("删除公告失败:" + EX.ToString()); return false; } } // is public static async Task<int> IS_CHARNAME16_Exists(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT CHARNAME16 FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + INJECTION_PREFIX(CHARNAME16) + "';", con)) { await con.OpenAsync(); int result = await cmd.ExecuteNonQueryAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("IS_CHARNAME16_Exists operation has has returned 0"); return 0; } } public static async Task<bool> IS_OneOrMoreCharsInAcc_WearJob_by_StrUserID(string StrUserID, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("(select CH.CHARNAME16 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char as CH LEFT JOIN " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory as Inv ON CH.CharID=Inv.CharID LEFT JOIN " + Settings.ShardInfos[ShardID].DBName + ".dbo._User as US ON CH.CharID=US.CharID LEFT JOIN " + Settings.MSSQL_ACC_DB + ".dbo.TB_User as TUS ON US.UserJID=TUS.JID where TUS.StrUserID='" + StrUserID + "' AND Slot ='8' AND ItemID > 0)", con)) { await con.OpenAsync(); string result = (string)await cmd.ExecuteScalarAsync(); con.Close(); return !string.IsNullOrEmpty(result) ? true : false; } } } catch { UTILS.WriteLine("IS_OneOrMoreCharsInAcc_WearJob_by_StrUserID returned false and failed."); return false; } } public static async Task<bool> IS_FellowSummoned_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select top (1) CanBeVehicle from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjChar where CanBeVehicle = 1 and ID =(select top (1) Link from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon where ID = (select top (1) RefCharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._CharCOS as A inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items as B on A.ID = B.Data and A.ID != 0 inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory as C on B.ID64 = C.ItemID inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char as D on C.CharID = D.CharID where D.CharName16 = N'" + CHARNAME16 + "' and A.[State] = 3 order by A.RentEndTime))", con)) { await con.OpenAsync(); string result = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return !string.IsNullOrEmpty(result) ? true : false; } } } catch { UTILS.WriteLine("IS_SummoningFellow_by_CHARNAME16 returned 0 and failed."); return false; } } public static async Task<int> IS_PetSummoned_by_CHARNAME16(string CHARNAME16, int ShardID) { try {//Not used anywhere in the code, it makes some problems using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select count(ID) from " + Settings.ShardInfos[ShardID].DBName + ".dbo._CharCOS as A inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._Items as B on A.ID = B.Data and A.ID != 0 inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory as C on B.ID64 = C.ItemID inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char as D on C.CharID = D.CharID where D.CharName16 = N'" + CHARNAME16 + "' and A.[State] = 3", con)) { await con.OpenAsync(); int result = (int)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("IS_SummoningAttackOrFellowPets_by_CHARNAME16 returned 0 and failed."); return 0; } } public static async Task<bool> IS_CosSummoned_by_CHARID(int CharID, int ShardID) { try {//Not used anywhere in the code, it makes some problems using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select OwnerCharID from " + Settings.ShardInfos[ShardID].DBName + $".dbo._CharCOS WHERE RefCharID IN (SELECT [ID] FROM [{Settings.ShardInfos[ShardID].DBName}].[dbo].[_RefObjCommon] where TypeID1=1 and TypeID2=2 and TypeID3=3 and TypeID4=2 AND Service=1) AND OwnerCharID= {CharID}", con)) { await con.OpenAsync(); string result = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return !string.IsNullOrEmpty(result) ? true : false; } } } catch { UTILS.WriteLine("IS_SummoningAttackOrFellowPets_by_CHARNAME16 returned 0 and failed."); return false; } } public static async Task<bool> IS_BattleField_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select B.IsBattleField from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char as A inner join " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefRegion as B on A.LatestRegion = B.wRegionID where CharName16 = N'" + CHARNAME16 + "'", con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result == 0 ? true : false; } } } catch { UTILS.WriteLine("IS_BattleField_by_CHARNAME16 returned false and failed."); return false; } } public static async Task<int> IS_TransOrVehicleContainsGoods_by_CHARNAME16(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("select count(ItemID) from [" + Settings.ShardInfos[ShardID].DBName + "].[dbo].[_InvCOS] where COSID = (select ID from [" + Settings.ShardInfos[ShardID].DBName + "].[dbo].[_CharCOS] where OwnerCharID = (select CharID from " + Settings.ShardInfos[ShardID].DBName + ".[dbo].[_Char] where CharName16 = N'" + CHARNAME16 + "')) and ItemID != 0", con)) { await con.OpenAsync(); int result = (int)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("IS_TransOrVehicleContainsGoods_by_CHARNAME16 returned 0 and failed."); return 0; } } public static async Task<bool> IS_CHARNAME16_Has_Online_Record(string CHARNAME16) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT CHARNAME16 FROM xQc_FILTER.dbo._Players where CharName16 = N'" + CHARNAME16 + "'; ", con)) { await con.OpenAsync(); string result = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return string.IsNullOrEmpty(result) ? false : true; } } } catch { UTILS.WriteLine("IS_CHARNAME16_Has_Online_Record returned false and failed."); return false; } } public static async Task<bool> Is_StackRecord_Exists(string CharName16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select Count(LastSoldStack) from xQc_FILTER.dbo._ThievesStackRecords where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "');", con)) { await con.OpenAsync(); int result = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return result != 0 ? true : false; } } } catch { UTILS.WriteLine("Is_StackRecord_Exists returned false and failed."); return false; } } public static async Task<bool> IS_CHARNAME16_VIP(string CHARNAME16) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("SELECT top 1 GivenTime FROM xQc_FILTER.dbo._VIP where CharName16 = N'" + CHARNAME16 + "' order by GivenTime desc; ", con)) { await con.OpenAsync(); string result = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return !string.IsNullOrEmpty(result) ? (DateTime.Parse(result) != null && DateTime.Now.Subtract(DateTime.Parse(result)).TotalDays >= 27) : false; } } } catch { UTILS.WriteLine("IS_CHARNAME16_VIP returned false and failed."); return false; } } #endregion #region 功能相关 /// <summary> /// 保存称号颜色 /// </summary> /// <param name="CharName"></param> /// <param name="Color"></param> /// <param name="ShardID"></param> /// <returns></returns> public static async Task<bool> Exist_User(string UserName) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select JID from {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] where StrUserID=@StrUserID", con)) { cmd.Parameters.Add(new SqlParameter("@StrUserID", UserName)); await con.OpenAsync(); bool x = (await cmd.ExecuteReaderAsync()).HasRows; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"查找账号时发生异常:{ex.ToString()}"); return true; } } public static async Task<bool> Has_GM_Priv(string UserName) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select sec_content,sec_primary from {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] where StrUserID=@StrUserID", con)) { cmd.Parameters.Add(new SqlParameter("@StrUserID", UserName)); await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { return Convert.ToInt32(reader[0]) == 1 && Convert.ToInt32(reader[1]) == 1; //UTILS.WriteLine($"{reader[0]},{reader[1]},{reader[2]}"); } reader.Close(); con.Close(); return true; } } } } catch (Exception ex) { UTILS.WriteLine($"是否为GM账号:{ex.ToString()}"); return false; } } public static async Task<bool> Exist_Limit(int Code) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select ID from [dbo].[_CustomActionLimit] where ActionCode=@ActionCode and Service=1", con)) { cmd.Parameters.Add(new SqlParameter("@ActionCode", Code)); await con.OpenAsync(); bool x = (await cmd.ExecuteReaderAsync()).HasRows; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"判断限制时发生异常:{ex.ToString()}"); return true; } } public static async Task<string> Get_Limit(int Code) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select SpName from [dbo].[_CustomActionLimit] where ActionCode=@ActionCode and Service=1", con)) { cmd.Parameters.Add(new SqlParameter("@ActionCode", Code)); await con.OpenAsync(); string x = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"获取限制时发生异常:{ex.ToString()}"); return String.Empty; } } public static async Task<List<ActionLimitModel>> Get_LimitList() { List<ActionLimitModel> actionLimits = new List<ActionLimitModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select * from [dbo].[_CustomActionLimit]", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { actionLimits.Add(new ActionLimitModel( int.Parse(item["Service"].ToString()), int.Parse(item["ID"].ToString()), int.Parse(item["ActionCode"].ToString()), item["Name"].ToString(), item["SpName"].ToString(), item["Introduce"].ToString() )); } } } con.Close(); return actionLimits; } } } catch (Exception ex) { UTILS.WriteLine($"获取限制列表时发生异常:{ex.ToString()}"); return actionLimits; } } public static async Task<bool> Save_Limit(int ID, int Service) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"update [dbo].[_CustomActionLimit] set Service=@Service where ID=@ID", con)) { cmd.Parameters.Add(new SqlParameter("@ID", ID)); cmd.Parameters.Add(new SqlParameter("@Service", Service)); await con.OpenAsync(); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"保存限制时发生异常:{ex.ToString()}"); return false; } } public static async Task<List<Dictionary<string, string>>> GET_USERS_LIST() { List<Dictionary<string, string>> UserList = null; try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select StrUserID,Name,Address from {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] where Email='bimbum' order by newid()", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); UserList = new List<Dictionary<string, string>>(); foreach (DataRow item in dt.Rows) { Dictionary<string, string> User = new Dictionary<string, string>(); User.Add("Username", item["StrUserID"].ToString()); User.Add("Password", item["Name"].ToString()); User.Add("Role", item["Address"].ToString()); UserList.Add(User); } con.Close(); return UserList; } } } } } catch (Exception ex) { UTILS.WriteLine($"查询机器人列表发生异常:{ex.ToString()}"); return UserList; } } public static async Task<bool> Reg_User(string UserName, string PassWord, string SPassWord, string Mac, string Address = "test") { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"insert into {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] (StrUserID, password, Name,Email,address,certificate_num) values (@StrUserID, @Password, @SPassWord,@HWID,@Address,@certificate_num)", con)) { cmd.Parameters.Add(new SqlParameter("@StrUserID", UserName)); cmd.Parameters.Add(new SqlParameter("@Password", UTILS.UserMd5(PassWord))); cmd.Parameters.Add(new SqlParameter("@SPassWord", SPassWord)); cmd.Parameters.Add(new SqlParameter("@HWID", Mac)); cmd.Parameters.Add(new SqlParameter("@Address", Address)); cmd.Parameters.Add(new SqlParameter("@certificate_num", await GetLastCertificateNum())); await con.OpenAsync(); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"账号注册发生异常:{ex.ToString()}"); return false; } } public static async Task<bool> Update_User(string UserName, string PassWord, string SPassWord) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"update {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] set password=@Password where StrUserID=@StrUserID and Name=@SPassWord", con)) { cmd.Parameters.Add(new SqlParameter("@StrUserID", UserName)); cmd.Parameters.Add(new SqlParameter("@Password", UTILS.UserMd5(PassWord))); cmd.Parameters.Add(new SqlParameter("@SPassWord", SPassWord)); await con.OpenAsync(); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"账号修改发生异常:{ex.ToString()}"); return false; } } public static async Task<List<string>> GET_BOTS_NAMES() { try { List<string> result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT [Name] FROM [xQc_FILTER].[dbo].[_MinionsNames] A WHERE NOT EXISTS (SELECT * FROM {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] B WHERE A.Name=B.[address])", con)) { await con.OpenAsync(); //cmd.CommandTimeout = 60; using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { result = new List<string>(); while (await reader.ReadAsync()) { result.Add(reader[0].ToString()); //UTILS.WriteLine($"{reader[0]},{reader[1]},{reader[2]}"); } reader.Close(); } con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine($"GET_BOTS_NAMES failed!! {EX}"); UTILS.ExportLog("GET_BOTS_NAMES()", EX); return null; } } public static async Task<object[]> FETCH_NOTICE() { try { object[] result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select Top (1) [ID],[Message],[CHARNAME16] ,[SLBUpdate],[SilkUpdate],[IsBreak],[ShardID] from xQc_FILTER.dbo._AutoNotice with (nolock) where [Sent] = 0 order by [Time] desc;", con)) { await con.OpenAsync(); //cmd.CommandTimeout = 60; using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { result = new object[7] { reader[0], reader[1], reader[2], reader[3], reader[4], reader[5], reader[6] }; //UTILS.WriteLine($"{reader[0]},{reader[1]},{reader[2]}"); } reader.Close(); } con.Close(); } } return result; } catch (Exception EX) { UTILS.WriteLine("FETCH_NOTICE operation has returned NULL"); UTILS.ExportLog("FETCH_NOTICE()", EX); return null; } } public static async Task NOTICE_UPDATE_STATUS(int NoticeID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE xQc_FILTER.dbo._AutoNotice SET Sent = 1 WHERE ID = " + NoticeID + ";", con)) { await con.OpenAsync();//sending a beam of search, to find a CharID to teleport upon conditions met. await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("NOTICE_UPDATE_STATUS operation has has returned false"); } } public static async Task LOG_GLOBAL_CHAT(string Sender, string Content) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo._LogGlobalChat (Sender,Content,TimeSent) VALUES ('" + INJECTION_PREFIX(Sender) + "','" + INJECTION_PREFIX(Content) + "',GETDATE())", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("LOG_GLOBAL_CHAT operation has failed."); } } public static async Task LOG_COMMON_CHAT(string TableName, string Sender, string Content) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo." + TableName + " (Sender,Content,TimeSent) VALUES (N'" + INJECTION_PREFIX(Sender) + "',N'" + INJECTION_PREFIX(Content) + "',GETDATE())", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception ex) { UTILS.WriteLine("LOG_COMMON_CHAT operation has failed." + ex.ToString()); } } public static async Task LOG_PM_CHAT(string Sender, string To, string Content) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo._LogPMChat (Sender,[To],Content,TimeSent) VALUES ('" + Sender + "','" + INJECTION_PREFIX(To) + "','" + INJECTION_PREFIX(Content) + "',GETDATE())", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("LOG_PM_CHAT operation has failed."); } } public static async Task LOG_LOADIMAGE_TS(string TableName, string Sender, long delay) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand iq = new SqlCommand("INSERT INTO xQc_FILTER.dbo." + TableName + " (CHARNAME16,LoadingTimeSpanMS,TimeSent) VALUES ('" + INJECTION_PREFIX(Sender) + "','" + delay + "',GETDATE())", con)) { await con.OpenAsync(); await iq.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception ex) { UTILS.WriteLine("LOG_LOADIMAGE_TS operation has failed." + ex.ToString()); } } public static async Task LOG_MAGICPOP_STATS(string TableName, string CHARNAME16, string WonOrLost) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo." + TableName + " (CHARNAME16,WonOrLost,TimeSent) VALUES ('" + CHARNAME16 + "','" + WonOrLost + "',GETDATE())", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception ex) { UTILS.WriteLine("LOG_MAGICPOP_STATS operation has failed." + ex.ToString()); } } public static async Task LOG_UNQ_KILLS(string KillerName, string UniqueName) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo._LogUniqueKills (KillerName,UniqueName,KilledTime) values ('" + KillerName + "','" + UniqueName + "',GETDATE())", con)) { await con.OpenAsync(); int result = await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("LOG_UNQ_KILLS returned false and failed."); } } public static async Task LOG_PLAYER_STATUS(string CHARNAME16, string IP, string HWID, bool cur_status, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand( "INSERT INTO xQc_FILTER.dbo._Players (CHARNAME16,StrUserID,[ip],mac,cur_status,last_seen) values (N'" + CHARNAME16 + "',(SELECT StrUserID FROM " + Settings.MSSQL_ACC_DB + ".dbo.TB_User WHERE JID = (SELECT UserJID FROM " + Settings.ShardInfos[ShardID].DBName + ".dbo._User WHERE CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))),'" + IP + "','" + HWID + "',1,GETDATE());", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine("LOG_PLAYER_STATUS operation has failed." + EX.ToString()); } } public static async Task UPDATE_PLAYER_STATUS(string CHARNAME16, bool status) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE xQc_FILTER.dbo._Players SET cur_status = " + (status ? 1 : 0) + " WHERE CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("UPDATE_PLAYER_STATUS operation has failed."); } } public static async Task INSERT_PLAYER_STATISTICS(string CharName16, string IP, string HWID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo._CharsStatistics ([IP],[HWID],[CharName16],[CurrentTime]) values ('" + IP + "','" + HWID + "','" + CharName16 + "',GETDATE());", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("INSERT_PLAYER_STATISTICS operation has failed."); } } public static async Task DELETE_SilkChange_BY_Web_Records() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("DELETE FROM " + Settings.MSSQL_ACC_DB + ".dbo.SK_SilkChange_BY_Web;", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("DELETE_SilkChange_BY_Web_Records operation has failed."); } } public static async Task<int> DELETE_ITEM_FROM_INVENTORY(string CHARNAME16, int Slot, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE " + Settings.ShardInfos[ShardID].DBName + ".dbo._Inventory SET ItemID = 0 WHERE Slot = " + Slot + " AND CharID = ( SELECT CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "')", con)) { await con.OpenAsync(); int result = await cmd.ExecuteNonQueryAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("DELETE_ITEM_FROM_INVENTORY operation has has returned 0"); return 0; } } public static async Task UPDATE_HWANLEVEL_CHAR(string CHARNAME16, int hwanlevel, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char set HwanLevel = '" + hwanlevel + "' where CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception ex) { UTILS.WriteLine("UPDATE_HWANLEVEL_Char operation has failed." + ex.ToString()); } } public static async Task FILL_ITEMPOOL_TABLE(string codename, string realname) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo._ItemPoolName ([CodeName], [RealName]) VALUES ('" + codename + "','" + realname + "');", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine(EX.ToString()); } } public static async Task Update_Stack_Record(string CharName16, long value) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE xQc_FILTER.dbo._ThievesStackRecords set LastSoldStack = '" + value + "' where CharID = (Select CharID from SRO_VT_SHARD.dbo._Char where CharName16 = N'" + CharName16 + "');", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("Update_Stack_Record returned false and failed."); } } public static async Task Insert_Stack_Record(string CharName16, long value, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("INSERT INTO xQc_FILTER.dbo._ThievesStackRecords (CharID,LastSoldStack) values ((Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CharName16 + "'),'" + value + "');", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("Insert_Stack_Record returned false and failed."); } } public static async Task LOAD_UNIQUES_TABLE(DataGridView dgv, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select ID,NameStrID128 from " + Settings.ShardInfos[ShardID].DBName + ".dbo._RefObjCommon where Rarity = 3 and CodeName128 LIKE '%MOB%' AND Service = 1;", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); dgv.DataSource = dt; } } con.Close(); } } } catch (Exception AnyEX) { UTILS.WriteLine("Could not load uniques table, " + AnyEX.Message); } } #endregion #region MISC Queries - GUI workarounds public static async Task<string> GIVE_SILK(string StrUserID, int SilkAmount) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("EXEC " + Settings.MSSQL_ACC_DB + ".CGI.CGI_WebPurchaseSilk '" + await Get_LastOrderID() + "','" + StrUserID + "','1','" + SilkAmount + "',1", con)) { await con.OpenAsync(); string result = (string)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("GIVE_SILK opeation has has returned string.Empty"); return string.Empty; } } public static async Task<string> GIVE_TROPHIES(string StrUserID, int amount) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("EXEC " + Settings.MSSQL_ACC_DB + ".CGI.CGI_WebPurchaseGift '" + await Get_LastOrderID() + "','" + StrUserID + "','1','" + amount + "',1", con)) { await con.OpenAsync(); string result = (string)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("GIVE_TROPHIES opeation has has returned string.Empty"); return string.Empty; } } //public static async Task<int> SILK_BALANCE(string CHARNAME16, int ShardID) //{ // try // { // using (SqlConnection con = new SqlConnection(connectionstring)) // { // using (SqlCommand cmd = new SqlCommand("(Select silk_own from " + Settings.MSSQL_ACC_DB + ".dbo.SK_Silk where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "')))", con)) // { // await con.OpenAsync(); // int sb = (int)await cmd.ExecuteScalarAsync(); // con.Close(); // return sb; // } // } // } // catch(Exception ex) { UTILS.WriteLine($"SILK_BALANCE operation has has returned:{ex.ToString()}"); return 0; } //} public static async Task<bool> UpdateSilk(string CHARNAME16, int ShardID, int Type, int SilkOwn, int SilkGift = 0, int SilkPoint = 0) { string sql = ""; try { using (SqlConnection con = new SqlConnection(connectionstring)) { string 运算 = Type == 1 ? "+=" : "-="; sql = "update " + Settings.MSSQL_ACC_DB + $".dbo.SK_Silk set [silk_own]{运算}{SilkOwn},[silk_gift]{运算}{SilkGift},[silk_point]{运算}{SilkPoint} where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))"; using (SqlCommand cmd = new SqlCommand(sql, con)) { await con.OpenAsync(); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"UpdateSilk operation has has returned{sql}{ex.ToString()}"); return false; } } public static async Task<bool> 扣费(string CHARNAME16,long Num, int Type, int ShardID) { string sql = ""; try { using (SqlConnection con = new SqlConnection(connectionstring)) { switch (Type) { case 0: sql = "update " + Settings.MSSQL_ACC_DB + $".dbo.SK_Silk set [silk_own]-={Num} where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))"; break; case 1: sql = $"UPDATE {Settings.ShardInfos[ShardID].DBName}.dbo._Char set RemainGold -={Num} where CharName16 = N'" + CHARNAME16 + "';"; break; case 2: sql = "update " + Settings.MSSQL_ACC_DB + $".dbo.SK_Silk set [silk_point]-={Num} where JID = (Select UserJID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._User where CharID = (Select CharID from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "'))"; break; default: throw new Exception("货币类型不存在"); break; } using (SqlCommand cmd = new SqlCommand(sql, con)) { await con.OpenAsync(); bool x = await cmd.ExecuteNonQueryAsync() > 0; con.Close(); return x; } } } catch (Exception ex) { UTILS.WriteLine($"扣费 has returned{sql}{ex.ToString()}"); return false; } } public static async Task<LoginRewardModel> LoginReward(string CHARNAME16) { LoginRewardModel loginRewardModel = null; try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("_LoginReward", con)) { await con.OpenAsync(); cmd.CommandType = CommandType.StoredProcedure; //系统输入参数 cmd.Parameters.Add("@CharName", SqlDbType.NVarChar, -1); cmd.Parameters["@CharName"].Value = CHARNAME16; //系统输出参数 cmd.Parameters.Add("@SilkReward", SqlDbType.Int); cmd.Parameters.Add("@SLBReward", SqlDbType.Int); cmd.Parameters.Add("@return", SqlDbType.Int); cmd.Parameters["@SilkReward"].Direction = ParameterDirection.Output; cmd.Parameters["@SLBReward"].Direction = ParameterDirection.Output; cmd.Parameters["@return"].Direction = ParameterDirection.ReturnValue; await cmd.ExecuteNonQueryAsync(); loginRewardModel = new LoginRewardModel( int.Parse(cmd.Parameters["@return"].Value.ToString()), int.Parse(cmd.Parameters["@SilkReward"].Value.ToString()), int.Parse(cmd.Parameters["@SLBReward"].Value.ToString()) ); con.Close(); return loginRewardModel; } } } catch { UTILS.WriteLine("SILK_BALANCE operation has has returned 0"); return loginRewardModel; } } public static async Task<int> GIVE_GOLD(string CHARNAME16, long GoldAmount, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char set RemainGold = RemainGold+" + GoldAmount + " where CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync(); int result = await cmd.ExecuteNonQueryAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("GIVE_GOLD operation has has returned 0"); return 0; } } public static async Task<long> GOLD_BALANCE(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select RemainGold from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync(); long result = Convert.ToInt64(await cmd.ExecuteScalarAsync()); con.Close(); return result; } } } catch (Exception EX) { UTILS.WriteLine("GOLD_BALANCE operation has has returned 0" + EX.ToString()); return 0; } } public static async Task<int> GIVE_SP(string CHARNAME16, int SPAmount, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char set RemainSkillPoint = RemainSkillPoint+" + SPAmount + " where CharName16 = N'" + CHARNAME16 + "';", con)) { con.Open(); int result = await cmd.ExecuteNonQueryAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("GIVE_SP operation has has returned 0"); return 0; } } public static async Task<int> SP_BALANCE(string CHARNAME16, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("Select RemainSkillPoint from " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char where CharName16 = N'" + CHARNAME16 + "';", con)) { await con.OpenAsync(); int result = (int)await cmd.ExecuteScalarAsync(); con.Close(); return result; } } } catch { UTILS.WriteLine("SP_BALANCE operation has has returned 0"); return 0; } } public static async Task RESET_POS_ALL(int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char set LatestRegion='25000',PosX='985.1272',PosY='0.903694',PosZ='1585.906';", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("RESET_POS_ALL operation has failed"); } } public static async Task SET_CLIENTLESS_LOCATION_TO_JANGAN_SOUTH(int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand("UPDATE " + Settings.ShardInfos[ShardID].DBName + ".dbo._Char set LatestRegion='24744',PosX='1071',PosY='-9.72171',PosZ='1379' where CharName16 = N'" + Settings.CL_CharName + "';", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { UTILS.WriteLine("SET_CLIENTLESS_LOCATION_TO_JANGAN_SOUTH operation has failed"); } } public static async Task REMOTE_CMD(string remotecmd) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand(remotecmd, con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch { } } #endregion public static async void LoadRefSkill(int ShardID = 64) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT [ID],[Basic_Code] TypeName FROM {Settings.ShardInfos[ShardID].DBName}.[dbo].[_RefSkill] where Service=1", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { GameInfo.Skills.id.Add(Convert.ToUInt32(item["ID"])); GameInfo.Skills.type.Add(item["TypeName"].ToString()); } } } con.Close(); } } } catch (Exception ex) { UTILS.WriteLine($"LoadRefSkill:{ex.ToString()}"); } } public static async void LoadItems(int ShardID = 64) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT c.[ID] ID,c.[CodeName128] TypeName FROM {Settings.ShardInfos[ShardID].DBName}.[dbo].[_RefObjCommon] c,{Settings.ShardInfos[ShardID].DBName}.[dbo].[_RefObjItem] i where c.Service=1 and CodeName128 like'Item%' and c.Link=i.ID", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { GameInfo.Items.id.Add(Convert.ToUInt32(item["ID"])); GameInfo.Items.type.Add(item["TypeName"].ToString()); } } } con.Close(); } } } catch (Exception ex) { UTILS.WriteLine($"LoadItems:{ex.ToString()}"); } } public static async void LoadMobs(int ShardID = 64) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT c.[ID] ID,c.[CodeName128] TypeName FROM {Settings.ShardInfos[ShardID].DBName}.[dbo].[_RefObjCommon] c,{Settings.ShardInfos[ShardID].DBName}.[dbo].[_RefObjChar] i where c.Service=1 and not CodeName128 like'Item%' and c.Link=i.ID", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { GameInfo.Mobs.id.Add(Convert.ToUInt32(item["ID"])); GameInfo.Mobs.type.Add(item["TypeName"].ToString()); } } } con.Close(); } } } catch (Exception ex) { UTILS.WriteLine($"LoadMobs:{ex.ToString()}"); } } public static async Task<string> 获取职业称号(int 职业等级,int 职业类型) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT [TradeTitle],[ThiefTitle],[DartsTitle] FROM [xQc_FILTER].[dbo].[_CustomJobTitle] where [JobLevel]={职业等级}", con)) { await con.OpenAsync(); SqlDataReader sqlReader= await cmd.ExecuteReaderAsync(); sqlReader.Read(); if (职业类型 > 0 && 职业类型 < 4) { con.Close(); return sqlReader[职业类型 - 1].ToString(); } else { con.Close(); throw new Exception($"尝试查询不存在的类型:{职业类型}"); } } } } catch (Exception ex) { UTILS.WriteLine($"获取职业称号异常:{ex.ToString()}");return String.Empty; } } public static async Task UpdateHonorRanking(int ShardID = 64) { await SQL_Run_Code($"exec {Settings.ShardInfos[ShardID].DBName}.[dbo].[_TRAINING_CAMP_UPDATEHONORRANK]"); } public static async Task<List<ReputationRankModel>> 获取名誉排行(int ShardID = 64) { List<ReputationRankModel> ReputationRanks = new List<ReputationRankModel>(); try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select TR.Ranking,TR.[Rank],TM.CharName,TM.CharCurLevel,TM.CharMaxLevel,TC.GraduateCount,(select Name from {Settings.ShardInfos[ShardID].DBName}.[dbo]._Guild where ID =(select GuildID from {Settings.ShardInfos[ShardID].DBName}.[dbo]._Char where CharID = TM.CharID)) as GuildName,(select GuildID from {Settings.ShardInfos[ShardID].DBName}.[dbo]._Char where CharID = TM.CharID) as GuildID from {Settings.ShardInfos[ShardID].DBName}.[dbo]._TrainingCampHonorRank as TR,{Settings.ShardInfos[ShardID].DBName}.[dbo]._TrainingCampMember as TM,{Settings.ShardInfos[ShardID].DBName}.[dbo]._TrainingCamp as TC where TR.CampID = TM.CampID and TC.ID = TR.CampID and TM.MemberClass=0 order by TR.Ranking", con)) { await con.OpenAsync(); using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { using (DataTable dt = new DataTable()) { sda.Fill(dt); foreach (DataRow item in dt.Rows) { ReputationRanks.Add(new ReputationRankModel( Convert.ToInt32(item["Ranking"]), Convert.ToInt32(item["Rank"]), item["CharName"].ToString(), Convert.ToInt32(item["CharCurLevel"]), Convert.ToInt32(item["CharMaxLevel"]), Convert.ToInt32(item["GraduateCount"]), item["GuildName"].ToString(), Convert.ToInt32(item["GuildID"]) )); } return ReputationRanks; } } con.Close(); } } } catch (Exception ex) { UTILS.WriteLine($"获取名誉排行失败:{ex.ToString()}"); return ReputationRanks; } } public static async Task<int[]> ReturnType3AndOptlevel(int CharID, int Slot,int ShardID) { try { int[] temp = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT a.TypeID3, b.OptLevel FROM {Settings.ShardInfos[ShardID].DBName}.._RefObjCommon a JOIN {Settings.ShardInfos[ShardID].DBName}.._Items b ON a.ID = b.RefItemID JOIN {Settings.ShardInfos[ShardID].DBName}.._Inventory c ON b.ID64 = c.ItemID WHERE c.CharID = {CharID} AND c.Slot = {Slot}", con)) { await con.OpenAsync(); using (SqlDataReader Utils = await cmd.ExecuteReaderAsync()) { while (await Utils.ReadAsync()) { temp = new int[2] { Convert.ToInt32(Utils[0]), Convert.ToInt32(Utils[1])}; } Utils.Close(); } con.Close(); } } return temp; } catch (Exception EX) { UTILS.WriteLine("Get_Optlvl_by_SlotAndCharName16 returned 0 and failed." + EX.ToString()); return null; } } public static async Task<bool> GM账号登录(string UserName,string PassWord) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select count(JID) from {Settings.MSSQL_ACC_DB}.[dbo].[TB_User] where StrUserID='{UserName}' and password='{UTILS.UserMd5(PassWord)}' and sec_primary=1 and sec_content=1", con)) { await con.OpenAsync(); bool x = ((int)await cmd.ExecuteScalarAsync()) > 0; con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine("移动端尝试登陆GM账号报错:" + EX.ToString()); return false; } } public static async Task<bool> loadCustomTitleList() { try { UTILS.CustomTitleList.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomTitle", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string charname = Convert.ToString(reader[0]); string Title = Convert.ToString(reader[1]); byte isActive = Convert.ToByte(reader[2]); int ShardID = Convert.ToInt32(reader[3]); _CustomTitle Custom = new _CustomTitle(); _CustomTitle Custom2 = new _CustomTitle(); Custom = UTILS.CustomTitleList.Find(x => x.CharName == charname && x.ShardID == ShardID); if(Custom == null) { Custom2.CharName = charname; Custom2.Titles.TryAdd(Title, isActive); Custom2.ShardID = ShardID; UTILS.CustomTitleList.Add(Custom2); } else Custom.Titles.TryAdd(Title, isActive); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateCustomTitle returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadHwanList(AGENT_MODULE Session) { try { Session.CharTitles.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select CH70,EU70 from xQc_FILTER.dbo._TitleStorage where CharName = '{Session.CHARNAME16}' and ShardID = {Session.ShardID};", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string ch70 = Convert.ToString(reader[0]); string eu70 = Convert.ToString(reader[1]); if (!Session.CharTitles.ContainsKey(Session.CHARNAME16)) Session.CharTitles.TryAdd(Session.CHARNAME16, new List<string>()); if (Session.ISEURO) Session.CharTitles[Session.CHARNAME16].Add(eu70); else Session.CharTitles[Session.CHARNAME16].Add(ch70); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateHwanList returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<string> UpdateCurrentActiveTitle(string Charname, string Title) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE xQc_FILTER.dbo._CustomTitle set isActive =0 where CharName = '{Charname}';UPDATE xQc_FILTER.dbo._CustomTitle set isActive =1 where CharName = '{Charname}' and Title = '{UTILS.INJECTION_PREFIX(Title)}'", con)) { await con.OpenAsync(); string x = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"_TitleUpdateCurrentActive opeation failed and returned string.Empty: {EX}", UTILS.LOG_TYPE.Fatal) ; return string.Empty; } } public static async Task<bool> LoadTitleColorsList() { try { UTILS.titlescolors.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomTitleColor", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string charname = Convert.ToString(reader[0]); string colorcode = Convert.ToString(reader[1]); int ShardID = Convert.ToInt32(reader[2]); uint color = UInt32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber); _CustomTitleColor Custom = new _CustomTitleColor(); Custom.CharName = charname; Custom.Color = color; Custom.ShardID = ShardID; UTILS.titlescolors.Add(Custom); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadTitleColorsList returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<string> AddCustomTitle(string Charname, string Title,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE xQc_FILTER.dbo._CustomTitle set isActive =0 where CharName ='{Charname}' and ShardID = {ShardID};INSERT INTO xQc_FILTER.dbo._CustomTitle VALUES('{Charname}','{UTILS.INJECTION_PREFIX(Title)}',1,{ShardID})", con)) { await con.OpenAsync(); string x = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"AddCustomTitle opeation failed and returned string.Empty: {EX}",UTILS.LOG_TYPE.Fatal); return string.Empty; } } public static async Task ADD_NEW_LOCATION(int charid, byte Index, int region, int x, int y, int z, string location,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO xQc_FILTER.dbo._SavedLocations VALUES ({charid},{Index},{region},{x},{y},{z},'{UTILS.INJECTION_PREFIX(location)}',{ShardID})", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"ADD_NEW_LOCATION returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); } } public static async Task REMOVE_LOCATION(int charid, byte Index,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"DELETE FROM xQc_FILTER.dbo._SavedLocations where CharID = {charid} and BIndex = {Index} and ShardID = {ShardID}", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"REMOVE_LOCATION returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); } } public static async Task<bool> LOAD_SAVED_LOCATIONS(AGENT_MODULE Session = null) { try { Session.SavedLocations.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT * FROM xQc_FILTER.dbo._SavedLocations WHERE CharID = {Session.CharID} and ShardID = {Session.ShardID}", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte BIndex = Convert.ToByte(reader[2]); ushort region = Convert.ToUInt16(reader[3]); int x = Convert.ToInt32(reader[4]); int y = Convert.ToInt32(reader[5]); int z = Convert.ToInt32(reader[6]); string location = Convert.ToString(reader[7]); SavedLocation savedlocation = new SavedLocation { region = region, x = x, y = y, z = z, locationName = location }; Session.SavedLocations.Add(BIndex, savedlocation); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LOAD_SAVED_LOCATIONS returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<int> GetRemainSlots(int CharID,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT Count(Slot) FROM {Settings.ShardInfos[ShardID].DBName}.dbo._Inventory WHERE CharID = {CharID} AND ItemID = 0 and Slot BETWEEN 13 AND 255", con)) { await con.OpenAsync(); int x = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"GetRemainSlots returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return 0; } } public static async Task<bool> UpdateCharChest(AGENT_MODULE Session) { try { Session.CharChest.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER(ORDER BY ID asc),* from xQc_FILTER.dbo._CharChest where CharID = '{Session.CharID}' and ShardID = {Session.ShardID};", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int linenum = Convert.ToInt32(reader[0]); int ID = Convert.ToInt32(reader[1]); uint RefItemID = Convert.ToUInt32(reader[3]); int Count = Convert.ToInt32(reader[4]); byte OptLevel = Convert.ToByte(reader[5]); bool RandomStat = Convert.ToBoolean(reader[6]); string From = Convert.ToString(reader[7]); int ShardID = Convert.ToInt32(reader[8]); DateTime RegTime = Convert.ToDateTime(reader[9]); if (!Session.CharChest.ContainsKey(ID)) { _CharChest Chest = new _CharChest { LineNum = linenum, RefItemID = RefItemID, Count = Count, OptLevel = OptLevel, RandomizedStats = RandomStat, From = From, ShardID = ShardID, RegisterTime = RegTime }; Session.CharChest.Add(ID, Chest); } } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateCharChest returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadGuildRank(int ShardID) { try { UTILS.CustomPVPRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER (ORDER BY ItemPoints DESC), Name,Lvl, ItemPoints FROM {Settings.ShardInfos[ShardID].DBName}.dbo._Guild WITH(NOLOCK) WHERE ItemPoints > 0 ORDER BY ItemPoints DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string GuildName = Convert.ToString(reader[1]); string GuildLevel = Convert.ToString(reader[2]); string Points = Convert.ToString(reader[3]); Rank rank = new Rank { LineNum = linenum, Guild = GuildLevel, Points = Points, ShardID = ShardID }; if (!UTILS.CustomPVPRank.ContainsKey(GuildName)) UTILS.CustomPVPRank.TryAdd(GuildName, rank); else UTILS.CustomPVPRank[GuildName] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadGuildRank returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<long> prod_int64(string query) { long value = 0; try { using (var con = new SqlConnection(connectionstring)) { await con.OpenAsync().ConfigureAwait(false); using (SqlCommand command = new SqlCommand(query, con)) { using (SqlDataReader read = await command.ExecuteReaderAsync().ConfigureAwait(false)) { await read.ReadAsync().ConfigureAwait(false); if (!read.IsDBNull(0)) { value = read.GetInt64(0); } } } con.Close(); } } catch (NullReferenceException) { return 0; } catch (SqlException Ex) { return 0; } return value; } public static async Task<bool> LoadHonorRank(int ShardID) { try { UTILS.CustomHonorRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY CurLevel DESC , ExpOffset DESC), CharName16,CurLevel,ExpOffset FROM {Settings.ShardInfos[ShardID].DBName}.dbo._Char WHERE RefObjID > 2000 ORDER BY CurLevel DESC , ExpOffset DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); long Explevel = Task.Run(async () => await prod_int64($"SELECT Exp_C FROM {Settings.ShardInfos[ShardID].DBName}.dbo._RefLevel where Lvl = {Convert.ToByte(reader[2])}")).Result; string Points = ((Math.Round(100f * Convert.ToInt64(reader[3]) / Explevel))).ToString() + "%"; Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID }; if (!UTILS.CustomHonorRank.ContainsKey(Charname)) UTILS.CustomHonorRank.TryAdd(Charname, rank); else UTILS.CustomHonorRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateHonorRank returned false and failed: {EX}", UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadPVPRank(int ShardID) { try { UTILS.CustomUniqueRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY CurLevel DESC , ExpOffset DESC), CharName16,CurLevel,ExpOffset FROM {Settings.ShardInfos[ShardID].DBName}.dbo._Char WHERE RefObjID <2000 ORDER BY CurLevel DESC , ExpOffset DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); long Explevel = Task.Run(async () => await prod_int64($"SELECT Exp_C FROM {Settings.ShardInfos[ShardID].DBName}.dbo._RefLevel where Lvl = {Convert.ToByte(reader[2])}")).Result; string Points = ((Math.Round(100f * Convert.ToInt64(reader[3]) / Explevel))).ToString() + "%"; Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID }; if (!UTILS.CustomUniqueRank.ContainsKey(Charname)) UTILS.CustomUniqueRank.TryAdd(Charname, rank); else UTILS.CustomUniqueRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdatePVPRank returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadCharRank(int ShardID) { try { UTILS.CustomCharRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER (ORDER BY ItemPoints DESC), CharName16 , GuildName, ItemPoints , ShardID FROM xQc_FILTER.dbo._CharRanking WITH(NOLOCK) WHERE ItemPoints >= 0 AND ShardID = {ShardID} ORDER BY ItemPoints DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); string Points = Convert.ToString(reader[3]); int ShardID5 = Convert.ToInt32(reader[4]); Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID5 }; if (!UTILS.CustomCharRank.ContainsKey(Charname)) UTILS.CustomCharRank.TryAdd(Charname, rank); else UTILS.CustomCharRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateUniqeuRank returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadJobKillsRank(int ShardID) { try { UTILS.CustomJobKillsRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER (ORDER BY JobPVPPoints DESC), CharName16 , GuildName, JobPVPPoints , ShardID FROM xQc_FILTER.dbo._CharRanking WITH(NOLOCK) WHERE JobPVPPoints >= 0 AND ShardID = {ShardID} ORDER BY JobPVPPoints DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); string Points = Convert.ToString(reader[3]); int ShardID6 = Convert.ToInt32(reader[4]); Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID6 }; if (!UTILS.CustomJobKillsRank.ContainsKey(Charname)) UTILS.CustomJobKillsRank.TryAdd(Charname, rank); else UTILS.CustomJobKillsRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateJobKillsRank returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadTraderRank(int ShardID) { try { UTILS.CustomTraderRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER(ORDER BY B.Exp DESC), A.CharName16, B.Level, B.Exp FROM {Settings.ShardInfos[ShardID].DBName}.dbo._CharTrijob B JOIN {Settings.ShardInfos[ShardID].DBName}.dbo._Char A ON A.CharID = B.CharID WHERE B.JobType = 1 ORDER BY B.Exp DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); string Points = Convert.ToString(reader[3]); Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID }; if (!UTILS.CustomTraderRank.ContainsKey(Charname)) UTILS.CustomTraderRank.TryAdd(Charname, rank); else UTILS.CustomTraderRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateTraderRank returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadHunterRank(int ShardID) { try { UTILS.CustomHunterRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER(ORDER BY B.Exp DESC), A.CharName16, B.Level, B.Exp FROM {Settings.ShardInfos[ShardID].DBName}.dbo._CharTrijob B JOIN {Settings.ShardInfos[ShardID].DBName}.dbo._Char A ON A.CharID = B.CharID WHERE B.JobType = 3 ORDER BY B.Exp DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); string Points = Convert.ToString(reader[3]); Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID }; if (!UTILS.CustomHunterRank.ContainsKey(Charname)) UTILS.CustomHunterRank.TryAdd(Charname, rank); else UTILS.CustomHunterRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateHunterRank returned false and failed: {EX}", UTILS.LOG_TYPE.Fatal); ; return false; } } public static async Task<bool> LoadThiefRank(int ShardID) { try { UTILS.CustomThiefRank.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 50 ROW_NUMBER() OVER(ORDER BY B.Exp DESC), A.CharName16, B.Level, B.Exp FROM {Settings.ShardInfos[ShardID].DBName}.dbo._CharTrijob B JOIN {Settings.ShardInfos[ShardID].DBName}.dbo._Char A ON A.CharID = B.CharID WHERE B.JobType = 2 ORDER BY B.Exp DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte linenum = Convert.ToByte(reader[0]); string Charname = Convert.ToString(reader[1]); string Guild = Convert.ToString(reader[2]); string Points = Convert.ToString(reader[3]); Rank rank = new Rank { LineNum = linenum, Guild = Guild, Points = Points, ShardID = ShardID }; if (!UTILS.CustomThiefRank.ContainsKey(Charname)) UTILS.CustomThiefRank.TryAdd(Charname, rank); else UTILS.CustomThiefRank[Charname] = rank; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateThiefRank returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadEventTime() { try { UTILS.EventTimeList.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select ROW_NUMBER() OVER(ORDER BY Datetime,cast(Datetime as time(7)) asc) as ID,* from xQc_FILTER.dbo._EventsSchedule ORDER BY Datetime,cast(Datetime as time(7))", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int ID = Convert.ToInt32(reader[0]); string EventName = Convert.ToString(reader[1]); string Day = Convert.ToString(reader[2]); string Time = Convert.ToString(reader[3]); bool State = Convert.ToBoolean(reader[4]); var myDate1 = Convert.ToDateTime(Time); DateTime myDate2 = DateTime.Now; TimeSpan myDateResult; myDateResult = myDate1 - myDate2; EventTime eventt = new EventTime { Day = Day, Time = Time, State = State, ID = ID }; if (!UTILS.EventTimeList.ContainsKey(EventName) && myDateResult.Seconds > 0 && UTILS.EventTimeList.Count < 10) UTILS.EventTimeList.TryAdd(EventName, eventt); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateEventTime returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadChangeLog() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._ChangeLog", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string info = Convert.ToString(reader[0]); UTILS.ChangeLog.Add(info); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadChangeLog returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> UpdateFWKillsCounter() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 5 * FROM xQc_FILTER.._CounterFW WITH(NOLOCK) ORDER BY TotalKills DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string Guildname = Convert.ToString(reader[0]); int kills = Convert.ToInt32(reader[1]); if (!UTILS.FWKills.ContainsKey(Guildname)) UTILS.FWKills.TryAdd(Guildname, kills); else UTILS.FWKills[Guildname] = kills; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateSURVKillsCounter returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<string> TRUNCATE_FWKILLS() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"truncate table xQc_FILTER.dbo._CounterFW", con)) { await con.OpenAsync(); string x = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"TRUNCATE_FWKILLS opeation failed and returned string.Empty: {EX}", UTILS.LOG_TYPE.Fatal); return string.Empty; } } public static async Task INSERT_INSTANT_TELEPORT(int charid, int worldlayerid, int worldid, int region, float x, float y, float z,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO {Settings.ShardInfos[ShardID].DBName}.dbo._InstantTeleportDelivery VALUES ({charid},{worldlayerid},{await QUERIES.Get_WorldID((ushort)region,ShardID)},{region},{x},{y},{z})", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"INSERT_INSTANT_TELEPORT returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); } } public static async Task INSERT_UNIQUE_BYPOS(int serverid, int worldlayerid, int worldid, int region, float x, float y, float z, int mobtype, float range, int refobjid,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO {Settings.ShardInfos[ShardID].DBName}.dbo._InstantMobSpawnAtPosDelivery VALUES ({serverid},{worldlayerid},{worldid},{region},{x},{y},{z},{mobtype},{range},{refobjid})", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"INSERT_UNIQUE_BYPOS returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); } } public static async Task INSTANT_PVPCAPE(int CharID, byte State,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO {Settings.ShardInfos[ShardID].DBName}.dbo._InstantPvpStateDelivery VALUES ({CharID},{State})", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"INSTANT_PVPCAPE returned false and failed: {EX}"); } } public static async Task<bool> UpdateSURVKillsCounter() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 5 * FROM xQc_FILTER.dbo._CounterSurvival WITH(NOLOCK) ORDER BY TotalKills DESC", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string Charname = Convert.ToString(reader[0]); int kills = Convert.ToInt32(reader[1]); if (!UTILS.SURVKills.ContainsKey(Charname)) UTILS.SURVKills.TryAdd(Charname, kills); else UTILS.SURVKills[Charname] = kills; } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateSURVKillsCounter returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<string> TRUNCATE_SURVKILLS() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"truncate table xQc_FILTER.dbo._CounterSurvival", con)) { await con.OpenAsync(); string x = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"TRUNCATE_SURVKILLS opeation failed and returned string.Empty: {EX}", UTILS.LOG_TYPE.Fatal); return string.Empty; } } public static async Task INSERT_ITEM_CHEST(int CharID, int ItemID, int count, int OptLevel, string From,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO xQc_FILTER.dbo._CharChest VALUES ({CharID},{ItemID},{count},{OptLevel},0,'{From}',{ShardID},GETDATE())", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"INSERT_ITEM_CHEST returned false and failed: {EX}",UTILS.LOG_TYPE.Fatal); } } public static async Task<bool> FilterCommands() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select top 1* from xQc_FILTER.dbo._FilterCommands where IsDone = '0' order by ID asc", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int ID = Convert.ToInt32(reader[0]); byte CommandID = Convert.ToByte(reader[1]); string CommandString = Convert.ToString(reader[2]); string Data1 = Convert.ToString(reader[3]); string Data2 = Convert.ToString(reader[4]); string Data3 = Convert.ToString(reader[5]); try { switch (CommandID) { case 1: //notice notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Notice, Data2); else UTILS.SendNotice(NoticeType.Notice,Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 2: //blue notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Notify, Data2); else UTILS.SendNotice(NoticeType.Notify, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 3: //quest notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Green, Data2); else UTILS.SendNotice(NoticeType.Green, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 4: //yellow notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Yellow, Data2); else UTILS.SendNotice(NoticeType.Yellow, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 5: //Guide notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Guide, Data2); else UTILS.SendNotice(NoticeType.Guide, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 6: //Colored System if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.ColoredSystem, Data2, uint.Parse(Data3.Replace("#", ""), NumberStyles.HexNumber)); else UTILS.SendNotice(NoticeType.ColoredSystem, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key, uint.Parse(Data3.Replace("#", ""), NumberStyles.HexNumber)); break; case 7: //Colored Chat if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.ColoredChat, Data2, uint.Parse(Data3.Replace("#", ""), NumberStyles.HexNumber)); else UTILS.SendNotice(NoticeType.ColoredChat, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key, uint.Parse(Data3.Replace("#", ""), NumberStyles.HexNumber)); break; case 8: //add custom title _CustomTitle Found = new _CustomTitle(); Found = CustomTitleList.Find(x => x.CharName == Data1 && x.ShardID == Convert.ToInt32(Data3)); if (Found == null) { _CustomTitle CustomTitle = new _CustomTitle(); CustomTitle.CharName = Data1; CustomTitle.Titles.TryAdd(Data2, 1); CustomTitle.ShardID = Convert.ToInt32(Data3); CustomTitleList.Add(CustomTitle); } else { foreach(var x in Found.Titles) Found.Titles[x.Key] = 0; Found.Titles.TryAdd(Data2, 1); } Packet CTInfo = new Packet(0x5106); CTInfo.WriteAscii(Data1); CTInfo.WriteAscii(Data2); UTILS.BroadCastToClients(CTInfo, Convert.ToInt32(Data3)); break; case 9: //REMOVE custom title foreach (var CSTitle in CustomTitleList) { if ( CSTitle.CharName == Data1 && CSTitle.ShardID == Convert.ToInt32(Data3)) { var item = CustomTitleList.Single(y => y.CharName == Data1 && y.ShardID == Convert.ToInt32(Data3)); CustomTitleList.Remove(item); var charn = ASYNC_SERVER.AG_CONS.LastOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Value; Packet Info = new Packet(0x5107); Info.WriteAscii(Data1); //1337 title name Info.WriteAscii(charn.CharTitles[Data1]); UTILS.BroadCastToClients(Info, Convert.ToInt32(Data3)); break; } } break; case 11: //remove title color foreach(var x in titlescolors) { if(x.CharName == Data1 && x.ShardID == Convert.ToInt32(Data3)) { var item = titlescolors.Single(y => y.CharName == Data1 && y.ShardID == Convert.ToInt32(Data3)); titlescolors.Remove(item); Packet RtC = new Packet(0x5110); RtC.WriteAscii(Data1); UTILS.BroadCastToClients(RtC, Convert.ToInt32(Data3)); break; } } break; case 12: //add char color _CustomNameColor Custom = new _CustomNameColor(); Custom.CharName = Data1; Custom.Color = uint.Parse(Data2.Replace("#", ""), NumberStyles.HexNumber); Custom.ShardID = Convert.ToInt32(Data3); UTILS.CharnameColorList.Add(Custom); Packet CCInfo = new Packet(0x5112); CCInfo.WriteAscii(Data1); CCInfo.WriteUInt32(uint.Parse(Data2.Replace("#", ""), NumberStyles.HexNumber)); UTILS.BroadCastToClients(CCInfo, Convert.ToInt32(Data3)); break; case 13: //REMOVE char color foreach (var CCL in CharnameColorList) { if(CCL.CharName == Data1 && CCL.ShardID == Convert.ToInt32(Data3)) { var item = CharnameColorList.Single(y => y.CharName == Data1 && y.ShardID == Convert.ToInt32(Data3)); CharnameColorList.Remove(item); Packet Info = new Packet(0x5113); Info.WriteAscii(Data1); UTILS.BroadCastToClients(Info, Convert.ToInt32(Data3)); break; } } break; case 14: //add custom charname rank _CustomNameRank CustomRank = new _CustomNameRank(); CustomRank.CharName = Data1; CustomRank.Rank = Data2; CustomRank.ShardID = Convert.ToInt32(Data3); UTILS.CustomCharnameRankList.Add(CustomRank); Packet CNInfo = new Packet(0x5116); CNInfo.WriteAscii(Data1); CNInfo.WriteAscii(Data2); UTILS.BroadCastToClients(CNInfo, Convert.ToInt32(Data3)); break; case 15: //REMOVE custom charname rank foreach (var CCL in CustomCharnameRankList) { if (CCL.CharName == Data1 && CCL.ShardID == Convert.ToInt32(Data3)) { var item = CustomCharnameRankList.Single(y => y.CharName == Data1 && y.ShardID == Convert.ToInt32(Data3)); CustomCharnameRankList.Remove(item); Packet Info = new Packet(0x5117); Info.WriteAscii(Data1); UTILS.BroadCastToClients(Info, Convert.ToInt32(Data3)); break; } } break; case 16: //Purble notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Purble, Data2); else UTILS.SendNotice(NoticeType.Purble, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 17: //Orange notify if (Data1.ToLower().Contains("all")) UTILS.SendNoticeForAll(NoticeType.Orange, Data2); else UTILS.SendNotice(NoticeType.Orange, Data2, ASYNC_SERVER.AG_CONS.FirstOrDefault(x => x.Value.CHARNAME16_HOLDER.ToLower() == Data1.ToLower()).Key); break; case 18: //add title color var TColor = uint.Parse(Data2.Replace("#", ""), NumberStyles.HexNumber); _CustomTitleColor ctc = UTILS.titlescolors.Find(c => c.CharName == Data1 && c.ShardID == Convert.ToInt32(Data3)); if (ctc != null) ctc.Color = TColor; else { ctc = new _CustomTitleColor(); ctc.CharName = Data1; ctc.Color = TColor; ctc.ShardID = Convert.ToInt32(Data3); } UTILS.titlescolors.Add(ctc); Packet TInfo = new Packet(0x5108); TInfo.WriteUInt32(1); TInfo.WriteAscii(Data1); TInfo.WriteUInt32(TColor); UTILS.BroadCastToClients(TInfo, Convert.ToInt32(Data3)); break; //case 20: // UTILS.SURVIVAL_EVENT_ACTIVE = true; // Task.Factory.StartNew(async () => // { // while (UTILS.SURVIVAL_EVENT_ACTIVE) // { // await UpdateSURVKillsCounter(); // await UTILS.SurvialKillsUpdate(); // await Task.Delay(10000); // } // }); // break; //case 21: // UTILS.SURVIVAL_EVENT_ACTIVE = false; // UTILS.SURVKills.Clear(); // break; case 22: UTILS.FW_EVENT_ACTIVE = true; Task.Factory.StartNew(async () => { while (UTILS.FW_EVENT_ACTIVE) { await UpdateFWKillsCounter(); await UTILS.FWKillsUpdate(); await Task.Delay(10000); } }); break; case 23: UTILS.PVP_EVENT_ACTIVE = false; if (UTILS.PVPactivelist.Contains(Data1)) { UTILS.SendNoticeForAll(NoticeType.Orange, $"[PVP MATCHING] {Data1} has won againt {Data2}"); UTILS.PVPactivelist.Clear(); } break; case 24: UTILS.UNIQUE_EVENT_ACTIVE = false; string charname1 = UTILS.UNIQUEactivelist[0]; string charname2 = UTILS.UNIQUEactivelist[1]; if (charname1 == Data1 || charname2 == Data1) { if (charname1 == Data1) UTILS.SendNoticeForAll(NoticeType.Orange, $"[UNIQUE MATCHING] {Data1} has won againt {charname2}"); else UTILS.SendNoticeForAll(NoticeType.Orange, $"[UNIQUE MATCHING] {Data1} has won againt {charname1}"); int charid1 = await Get_CharID_by_CharName16(charname1,64); int charid2 = await Get_CharID_by_CharName16(charname2,64); await INSERT_INSTANT_TELEPORT(charid1, 1, 1, 25000, 982, 140, 140,64); await INSERT_INSTANT_TELEPORT(charid2, 1, 1, 25000, 982, 140, 140,64); UTILS.UNIQUEactivelist.Clear(); UTILS.IS_UNIQUE_KILLED = true; } break; case 25: //add new character icon foreach(var Ico in CustomIcons) if (Ico.CharName == Data1 && Ico.ShardID == Convert.ToInt32(Data3)) return true; _CharIcon Icon = new _CharIcon(); Icon.CharName = Data1; Icon.IconID = Convert.ToInt32(Data2); Icon.ShardID = Convert.ToInt32(Data3); UTILS.CustomIcons.Add(Icon); Packet icons = new Packet(0x180B); icons.WriteUInt8(1); icons.WriteUInt32(Convert.ToInt32(Data2)); icons.WriteAscii(Data1); UTILS.BroadCastToClients(icons, Convert.ToInt32(Data3)); break; case 26: foreach(var x in CustomIcons) { if(x.CharName == Data1 && x.ShardID == Convert.ToInt32(Data3)) { var item = CustomIcons.Single(y => y.CharName == Data1 && y.ShardID == Convert.ToInt32(Data3)); CustomIcons.Remove(item); Packet icons2 = new Packet(0x190B); icons2.WriteAscii(Data1); UTILS.BroadCastToClients(icons2, Convert.ToInt32(Data3)); break; } } break; } } catch { } DeleteFromFilterCommands(ID); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"FilterCommands returned false and failed: {EX}", UTILS.LOG_TYPE.Fatal); return false; } } private static async void DeleteFromFilterCommands(int ID) { await EXEC_QUERY($"DELETE FROM xQc_FILTER.dbo._FilterCommands WHERE ID={ID}"); } public static async Task<string> EXEC_QUERY(string query) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"{query}", con)) { await con.OpenAsync(); string x = Convert.ToString(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch { return "N/A"; } } public static async Task<bool> LoadCustomNamesRank() { try { UTILS.CustomCharnameRankList.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomNameRank", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string charname = Convert.ToString(reader[0]); string Rank = Convert.ToString(reader[1]); int ShardID = Convert.ToInt32(reader[2]); _CustomNameRank CustomRank = new _CustomNameRank(); CustomRank.CharName = charname; CustomRank.Rank = Rank; CustomRank.ShardID = ShardID; UTILS.CustomCharnameRankList.Add(CustomRank); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateCustomNameRank returned false and failed: {EX}",LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadCharnameColor() { try { UTILS.CharnameColorList.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomNameColor", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string charname = Convert.ToString(reader[0]); string colorcode = Convert.ToString(reader[1]); int ShardID = Convert.ToInt32(reader[2]); uint color = UInt32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber); _CustomNameColor Custom = new _CustomNameColor(); Custom.CharName = charname; Custom.Color = color; Custom.ShardID = ShardID; UTILS.CharnameColorList.Add(Custom); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateCharnameColor returned false and failed: {EX}",LOG_TYPE.Fatal) ; return false; } } public static async Task<bool> LoadCustomNames() { try { UTILS.CustomCharnameList.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomName", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string charname = Convert.ToString(reader[0]); string Title = Convert.ToString(reader[1]); int ShardID = Convert.ToInt32(reader[2]); _CustomName Custom = new _CustomName(); Custom.CharName = charname; Custom.Title = Title; Custom.ShardID = ShardID; UTILS.CustomCharnameList.Add(Custom); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"UpdateCustomTitle returned false and failed: {EX}",LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadIcons() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomIcon", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string CharName = Convert.ToString(reader[0]); int ID = Convert.ToInt32(reader[1]); int ShardID = Convert.ToInt32(reader[2]); _CharIcon Icon = new _CharIcon(); Icon.CharName = CharName; Icon.IconID = ID; Icon.ShardID = ShardID; UTILS.CustomIcons.Add(Icon); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadIcons returned false and failed: {EX}",LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadIconsData() { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._CustomIconData", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { int ID = Convert.ToInt32(reader[0]); string Path = Convert.ToString(reader[1]); if (!UTILS.CustomIconsData.ContainsKey(ID)) UTILS.CustomIconsData.TryAdd(ID, Path); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadIconsData returned false and failed: {EX}",LOG_TYPE.Fatal); return false; } } public static async Task<string> ReturnCharLockPassword(string StrUserID) { try { string result = null; using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select PinCode From xQc_FILTER.dbo._CharLockPin where StrUserID like '%{StrUserID}%';", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { if (!string.IsNullOrEmpty(reader[0].ToString())) result = reader[0].ToString(); } reader.Close(); } con.Close(); return result; } } } catch (Exception EX) { UTILS.WriteLine($"ReturnCharLockPassword returned null and failed: {EX}"); return null; } } public static async Task<int> IS_SET_LOCK(string struserid) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select isSet from xQc_FILTER.dbo._CharLockPin where StrUserID = '{struserid}' ", con)) { await con.OpenAsync(); int x = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"IS_SET_LOCK failed and returned 0: {EX}"); return 0; } } public static async Task SET_LOCK(string struserid, int isset) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE xQc_FILTER.dbo._CharLockPin set isSet = {isset} where StrUserID = '{struserid}'", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"SET_LOCK returned false and failed: {EX}"); } } public static async Task<bool> RemoveCharLock(string StrUserID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Delete From xQc_FILTER.dbo._CharLockPin where StrUserID like '%{StrUserID}%';", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); return true; } } } catch (Exception EX) { UTILS.WriteLine($"RemoveCharLock returned false and failed: {EX}"); return false; } } public static async Task<bool> CreateCharLock(string StrUserID, string password) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"insert into xQc_FILTER.dbo._CharLockPin (StrUserID,PinCode,isSet) values ('{StrUserID}','{password}',1);", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); return true; } } } catch (Exception EX) { UTILS.WriteLine($"CreateCharLock returned false and failed: {EX}"); return false; } } public static async Task<bool> GambeLogs(string CharName16, string Type) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"insert into xQc_FILTER.dbo._LogGamble values ('{CharName16}','{Type}',GETDATE());", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); return true; } } } catch (Exception EX) { UTILS.WriteLine($"GambeLogs returned false and failed: {EX}"); return false; } } public static async Task INSERT_INSTANT_ITEM(string itemcode, int a, int b, int CharID,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO {Settings.ShardInfos[ShardID].DBName}.dbo._InstantItemDelivery VALUES ({CharID},0,'{UTILS.INJECTION_PREFIX(itemcode)}',{a},{b})", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"INSERT INSTANT ITEM returned false and failed: {EX}"); } } public static async Task<bool> RemoveItemChest(int id) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Delete From xQc_FILTER.dbo._CharChest where ID = {id};", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); return true; } } } catch (Exception EX) { UTILS.WriteLine($"RemoveItemChest returned false and failed: {EX}"); return false; } } public static async Task<string> Get_ItemCode128_byid(int id,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT CodeName128 from {Settings.ShardInfos[ShardID].DBName}.dbo._RefObjCommon where ID = {id};", con)) { await con.OpenAsync(); string Basic_Code = (string)await cmd.ExecuteScalarAsync(); con.Close(); return Basic_Code; } } } catch (Exception EX) { UTILS.WriteLine($"Get_ItemCode128_byid returned false and failed: {EX}"); return string.Empty; } } public static async Task<_ItemInfo> Get_ItemInfo_by_Slot(int Slot, int CharID , int ShardID,int ItemID) { try { List<long> MagParams = new List<long>(); _ItemInfo Item = new _ItemInfo(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select I.OptLevel,I.Variance,I.Data,I.MagParamNum,I.MagParam1,I.MagParam2,I.MagParam3,I.MagParam4,I.MagParam5,I.MagParam6,I.MagParam7,I.MagParam8,I.MagParam9,I.MagParam10,I.MagParam11,I.MagParam12,R.TypeID2,R.TypeID3,R.TypeID4,I.ID64 from {Settings.ShardInfos[ShardID].DBName}.dbo._Items I JOIN {Settings.ShardInfos[ShardID].DBName}.dbo._Inventory C ON I.ID64 = C.ItemID JOIN {Settings.ShardInfos[ShardID].DBName}.dbo._RefObjCommon R ON R.ID = {ItemID} WHERE c.Slot = {Slot} and C.CharID = {CharID}", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte Plus = (reader[0] != DBNull.Value) ? Convert.ToByte(reader[0]) : Convert.ToByte(0); ulong Variance = (reader[1] != DBNull.Value) ? Convert.ToUInt64(reader[1]) : Convert.ToUInt64(0); uint Durability = (reader[2] != DBNull.Value) ? Convert.ToUInt32(reader[2]) : Convert.ToUInt32(0); byte MagParamNum = (reader[3] != DBNull.Value) ? Convert.ToByte(reader[3]) : Convert.ToByte(0); MagParams.Add((reader[4] != DBNull.Value) ? Convert.ToInt64(reader[4]) : 0); MagParams.Add((reader[5] != DBNull.Value) ? Convert.ToInt64(reader[5]) : 0); MagParams.Add((reader[6] != DBNull.Value) ? Convert.ToInt64(reader[6]) : 0); MagParams.Add((reader[7] != DBNull.Value) ? Convert.ToInt64(reader[7]) : 0); MagParams.Add((reader[8] != DBNull.Value) ? Convert.ToInt64(reader[8]) : 0); MagParams.Add((reader[9] != DBNull.Value) ? Convert.ToInt64(reader[9]) : 0); MagParams.Add((reader[10] != DBNull.Value) ? Convert.ToInt64(reader[10]) : 0); MagParams.Add((reader[11] != DBNull.Value) ? Convert.ToInt64(reader[11]) : 0); MagParams.Add((reader[12] != DBNull.Value) ? Convert.ToInt64(reader[12]) : 0); MagParams.Add((reader[13] != DBNull.Value) ? Convert.ToInt64(reader[13]) : 0); MagParams.Add((reader[14] != DBNull.Value) ? Convert.ToInt64(reader[14]) : 0); MagParams.Add((reader[15] != DBNull.Value) ? Convert.ToInt64(reader[15]) : 0); int TypeID2 = (reader[16] != DBNull.Value) ? Convert.ToInt32(reader[16]) : Convert.ToInt32(0); int TypeID3 = (reader[17] != DBNull.Value) ? Convert.ToInt32(reader[17]) : Convert.ToInt32(0); int TypeID4 = (reader[18] != DBNull.Value) ? Convert.ToInt32(reader[18]) : Convert.ToInt32(0); long ID64 = (reader[19] != DBNull.Value) ? Convert.ToInt64(reader[19]) : Convert.ToInt64(0); Item.Plus = Plus; Item.Variance = Variance; Item.Durability = Durability; Item.MagParamNum = MagParamNum; Item.MagicOptions = MagParams; Item.TypeID2 = TypeID2; Item.TypeID3 = TypeID3; Item.TypeID4 = TypeID4; Item.ID64 = ID64; } reader.Close(); } } } return Item; } catch (Exception EX) { UTILS.WriteLine($"Get_ItemInfo_by_Slot failed: {EX}"); _ItemInfo Item = new _ItemInfo(); return Item; } } public static async Task<_ItemInfo> Get_BindingInfo_by_Slot(_ItemInfo Item,int ShardID) { try { List<_ItemInfoSocket> Sockets = new List<_ItemInfoSocket>(); List<_ItemInfoAdvance> Advances = new List<_ItemInfoAdvance>(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select bOptType,nSlot,nOptID,nOptLvl,nOptValue,nParam1 from {Settings.ShardInfos[ShardID].DBName}.dbo._BindingOptionWithItem WHERE nItemDBID = {Item.ID64}", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte Type = (reader[0] != DBNull.Value) ? Convert.ToByte(reader[0]) : Convert.ToByte(0); byte nSlot = (reader[1] != DBNull.Value) ? Convert.ToByte(reader[1]) : Convert.ToByte(0); if (Type == 1) { ushort nOptValue = (reader[3] != DBNull.Value) ? Convert.ToUInt16(reader[3]) : Convert.ToUInt16(0); ushort nOptID = (reader[2] != DBNull.Value) ? Convert.ToUInt16(reader[2]) : Convert.ToUInt16(0); uint nParam = (reader[5] != DBNull.Value) ? Convert.ToUInt32(reader[5]) : Convert.ToUInt32(0); _ItemInfoSocket sock = new _ItemInfoSocket(nSlot, nOptID); sock.Value = nOptValue; sock.nParam = nParam; Sockets.Add(sock); } else if(Type ==2) { uint nOptID = (reader[2] != DBNull.Value) ? Convert.ToUInt32(reader[2]) : Convert.ToUInt32(0); uint nOptValue = (reader[4] != DBNull.Value) ? Convert.ToUInt32(reader[4]) : Convert.ToUInt32(0); _ItemInfoAdvance adv = new _ItemInfoAdvance(nSlot, nOptID); adv.Value = nOptValue; Advances.Add(adv); } Item.SocketOptions = Sockets; Item.AdvanceOptions = Advances; } reader.Close(); } } } return Item; } catch (Exception EX) { UTILS.WriteLine($"Get_ItemInfo_by_Slot failed: {EX}"); return Item; } } public static async Task INSERT_XSMB_EVENT(string CharName, long Amount, byte Type, int Num) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"INSERT INTO xQc_FILTER.dbo._XsmbEvent VALUES ('{CharName}',{Amount},{Type},{Num});INSERT INTO xQc_FILTER.dbo._XsmbEventLog VALUES ('{CharName}',{Amount},{Type},{Num},'Chê kÕt qu¶',GETDATE())", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"INSERT_XSMB_EVENT returned false and failed: {EX}"); } } public static async Task<long> Get_Storage_Gold_Amount(string username, int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select Gold from " + Settings.ShardInfos[ShardID].DBName + ".._AccountJID where AccountID = '" + username + "'", con)) { await con.OpenAsync(); long Basic_Code = (long)await cmd.ExecuteScalarAsync(); con.Close(); return Basic_Code; } } } catch (Exception EX) { UTILS.WriteLine($"Get_Storage_Gold_Amount returned false and failed: {EX}"); return 0; } } public static async Task Update_Storage_Gold_Amount(string username, int ShardID , long amount) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE {Settings.ShardInfos[ShardID].DBName}.dbo._AccountJID SET Gold = Gold + {amount} where AccountID = '{username}' ", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"Update_Storage_Gold_Amount returned false and failed: {EX}"); } } public static async Task<bool> LoadXsmbLogs(AGENT_MODULE Session) { try { Session.XsmbLog.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY DateRegistered DESC) as ID , * from xQc_FILTER.dbo._XsmbEventLog where CharName = '{Session.CHARNAME16}';", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte LineID = Convert.ToByte(reader[0]); string CharName = Convert.ToString(reader[1]); long Amount = Convert.ToInt64(reader[2]); byte Type = Convert.ToByte(reader[3]); int Num = Convert.ToInt32(reader[4]); string Status = Convert.ToString(reader[5]); string time = Convert.ToString(reader[6]); _XsmbLog xsmb = new _XsmbLog(); xsmb.LineID = LineID; xsmb.date = time; xsmb.Amount = Amount; xsmb.Num = Num; xsmb.Type = Type; xsmb.status = Status; xsmb.PageID = 1; Session.XsmbLog.Add(xsmb); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadXsmbLogs returned false and failed: {EX}", UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadNapTheLog(AGENT_MODULE Session) { try { Session.XsmbLog.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY TimeTn DESC) as ID , * from xQc_FILTER.dbo._NapTheLog where Username = '{Session.UserName}';", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { byte LineID = Convert.ToByte(reader[0]); string CardType = Convert.ToString(reader[1]); string PaidAM = Convert.ToString(reader[3]); string SeryCard = Convert.ToString(reader[4]); string IDCard = Convert.ToString(reader[5]); string Result = Convert.ToString(reader[6]); string TimeTn = Convert.ToString(reader[7]); _NapTheLog NapThe = new _NapTheLog(); NapThe.CardType = CardType; NapThe.LineID = LineID; NapThe.PageID = 1; NapThe.IDCard = IDCard; NapThe.PaidAm = PaidAM; NapThe.SeryCard = SeryCard; NapThe.Result = Result; NapThe.TimeTn = TimeTn; Session.NapTheLog.Add(NapThe); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadNapTheLog returned false and failed: {EX}", UTILS.LOG_TYPE.Fatal); return false; } } public static async Task<bool> LoadEventsScheduler() { try { UTILS.EventScheduling.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._EventsSchedule", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string EventName = Convert.ToString(reader[0]); string Day = Convert.ToString(reader[1]); string Time = Convert.ToString(reader[2]); var Events = new List<string>(); Events.Add(Day); Events.Add(Time); var testEvents = new KeyValuePair<string, List<string>>(EventName, Events); UTILS.EventScheduling.Add(testEvents); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadEventsScheduler returned false and failed: {EX}"); return false; } } public static async Task Update_Xsmb(string Msg) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE xQc_FILTER.dbo._XsmbEventLog SET Msg = (case when Num in {Msg} then 'Tróng' else 'Trît' end) WHERE Msg = 'Chê kÕt qu¶'", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"Update_Xsmb returned false and failed: {EX}"); } } public static async Task Update_dailyReward(string CharName,int Total,bool one_5, bool six_10, bool eleven_15, bool sixteen_20, bool twentyone_25) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE xQc_FILTER.dbo._DailyReward SET Total = {Total} , one_5 ="+(one_5 ? 1 : 0) + " , six_10 ="+ (six_10 ? 1 : 0) + ", eleven_15 = " +(eleven_15 ? 1 : 0) + ", sixteen_20 = "+(sixteen_20 ? 1 : 0) + ", twentyone_25 = "+(twentyone_25 ? 1 : 0) + ", last_seen = GETDATE() where CharName16 = '{CharName}'", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"Update_dailyReward returned false and failed: {EX}"); } } public static async Task Update_dailyReward(string CharName, int Total) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"UPDATE xQc_FILTER.dbo._DailyReward SET Total = {Total} , last_seen = GETDATE() where CharName16 = '{CharName}'", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"Update_dailyReward returned false and failed: {EX}"); } } public static async Task Insert_dailyReward(string CharName, int Total, bool one_5, bool six_10, bool eleven_15, bool sixteen_20, bool twentyone_25) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Insert into xQc_FILTER.dbo._DailyReward Values('{CharName}',{Total}," + (one_5 ? 1 : 0) + "," + (six_10 ? 1 : 0) + "," + (eleven_15 ? 1 :0)+","+(sixteen_20 ? 1:0)+","+(twentyone_25?1:0)+",GETDATE()) ", con)) { await con.OpenAsync(); await cmd.ExecuteNonQueryAsync(); con.Close(); } } } catch (Exception EX) { UTILS.WriteLine($"Insert_dailyReward returned false and failed: {EX}"); } } public static async Task<bool> LoadDailyReward() { try { UTILS.DailyReward.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._DailyReward", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { string CharName = Convert.ToString(reader[0]); int Total = Convert.ToInt32(reader[1]); bool x1 = Convert.ToBoolean(reader[2]); bool x2 = Convert.ToBoolean(reader[3]); bool x3 = Convert.ToBoolean(reader[4]); bool x4 = Convert.ToBoolean(reader[5]); bool x5 = Convert.ToBoolean(reader[6]); DateTime Time = Convert.ToDateTime(reader[7]); _DailyReward daily = new _DailyReward(); daily.Total = Total; daily.one_5 = x1; daily.six_10 = x2; daily.eleven_15 = x3; daily.sixteen_20 = x4; daily.twentyone_25 = x5; daily.last_seen = Time; if (!UTILS.DailyReward.ContainsKey(CharName)) UTILS.DailyReward.TryAdd(CharName, daily); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadDailyReward returned false and failed: {EX}"); return false; } } public static async Task<bool> LoadDailyRewardItems() { try { UTILS.DailyRewardItems.Clear(); using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select * from xQc_FILTER.dbo._DailyRewardItems", con)) { await con.OpenAsync(); using (SqlDataReader reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { for(int i =0; i < 20;i++) UTILS.DailyRewardItems.Add(Convert.ToInt32(reader[i])); } reader.Close(); } con.Close(); } } return true; } catch (Exception EX) { UTILS.WriteLine($"LoadDailyRewardItems returned false and failed: {EX}"); return false; } } public static async Task<short> Get_Cur_DiedRegion(int CharID,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select DiedRegion from {Settings.ShardInfos[ShardID].DBName}.dbo._Char where CharID = {CharID};", con)) { await con.OpenAsync(); short x = Convert.ToInt16(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"Get_Cur_DiedRegion failed and returned 0: {EX}"); return 0; } } public static async Task<short> Get_Cur_RecallRegion(int CharID,int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"Select TelRegion from {Settings.ShardInfos[ShardID].DBName}.dbo._Char where CharID = {CharID};", con)) { await con.OpenAsync(); short x = Convert.ToInt16(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"Get_Cur_RecallRegion failed and returned 0: {EX}"); return 0; } } public static async Task<int> Get_WorldID(ushort Region , int ShardID) { try { using (SqlConnection con = new SqlConnection(connectionstring)) { using (SqlCommand cmd = new SqlCommand($"select min(WorldID) from {Settings.ShardInfos[ShardID].DBName}.[dbo].[_RefInstance_World_Region] where RegionID = {Region}", con)) { await con.OpenAsync(); int x = Convert.ToInt32(await cmd.ExecuteScalarAsync()); con.Close(); return x; } } } catch (Exception EX) { UTILS.WriteLine($"Get_Cur_RecallRegion failed and returned 0: {EX}"); return 0; } } } }
Editor is loading...