public void TargetMail_SearchResults(NetworkConnection target, string searchResults) { if (mail == null) { mail = FindObjectOfType <UCE_UI_SendMail>(); } List <MailSearch> results = new List <MailSearch>(); if (!string.IsNullOrEmpty(searchResults)) { string[] tmp = searchResults.Split('&'); for (int i = 0; i < tmp.Length; i++) { string[] tmp2 = tmp[i].Split('|'); MailSearch res = new MailSearch(); res.name = tmp2[0]; int.TryParse(tmp2[1], out res.level); res.guild = tmp2[2]; results.Add(res); } } if (mail != null) { mail.UpdateSearchResults(results); } }
// ----------------------------------------------------------------------------------- // // ----------------------------------------------------------------------------------- public List <MailSearch> Mail_SearchForCharacter(string name, string selfPlayer) { List <MailSearch> result = new List <MailSearch>(); var table = connection.Query <characters>($@"SELECT `name`, level FROM characters LEFT JOIN character_guild ON character=name WHERE name LIKE '%' || '{name}' || '%' AND name <> '{selfPlayer} ' ORDER BY CASE WHEN name='{name}' THEN 0 ELSE INSTR(LOWER(name), LOWER('{name}')) END, name LIMIT 30" ); foreach (var row in table) { MailSearch res = new MailSearch(); res.name = row.name; res.level = row.level; res.guild = ""; result.Add(res); } return(result); }
// ----------------------------------------------------------------------------------- // // ----------------------------------------------------------------------------------- public List <MailSearch> Mail_SearchForCharacter(string name, string selfPlayer) { List <MailSearch> result = new List <MailSearch>(); #if _MYSQL && _SERVER var table = ExecuteReaderMySql(@"SELECT `name` , level FROM `characters` WHERE name=@search", new MySqlParameter("@search", name)); foreach (var row in table) { MailSearch res = new MailSearch(); res.name = (string)row[0]; res.level = Convert.ToInt32((int)row[1]); res.guild = ""; result.Add(res); } #elif _SQLITE && _SERVER /** * Order by here is setup in such a way that: * exact matches appear first * followed by names where the search string is closer to the front of the name */ var table = connection.Query <characters>(string.Concat(@"SELECT `name`, level FROM characters LEFT JOIN character_guild ON character=name WHERE name LIKE '%' || ? || '%' " + "AND name <> ? " + "ORDER BY CASE " + "WHEN name=? " + "THEN 0 " + " ELSE INSTR(LOWER(name), LOWER(?)) " + "END, name LIMIT 30", name, selfPlayer, name, name)); foreach (var row in table) { MailSearch res = new MailSearch(); res.name = row.name; res.level = row.level; res.guild = ""; result.Add(res); } #endif return(result); }
// ----------------------------------------------------------------------------------- // // ----------------------------------------------------------------------------------- public List <MailSearch> Mail_SearchForCharacter(string name, string selfPlayer) { List <MailSearch> result = new List <MailSearch>(); #if _MYSQL var table = ExecuteReaderMySql(@"SELECT `name` , level FROM `characters` WHERE name=@search", new MySqlParameter("@search", name)); foreach (var row in table) { MailSearch res = new MailSearch(); res.name = (string)row[0]; res.level = Convert.ToInt32((int)row[1]); res.guild = ""; result.Add(res); } #elif _SQLITE /** * Order by here is setup in such a way that: * exact matches appear first * followed by names where the search string is closer to the front of the name */ var table = ExecuteReader(@"SELECT `name`, level FROM characters LEFT JOIN character_guild ON character=name WHERE name LIKE '%' || @search || '%' AND name <> @self ORDER BY CASE WHEN name=@search THEN 0 ELSE INSTR(LOWER(name), LOWER(@search)) END, name LIMIT 30" , new SqliteParameter("@search", name), new SqliteParameter("@self", selfPlayer)); foreach (var row in table) { MailSearch res = new MailSearch(); res.name = (string)row[0]; res.level = Convert.ToInt32((long)row[1]); res.guild = ""; result.Add(res); } #endif return(result); }