Advertisement
Guest User

Untitled

a guest
Dec 5th, 2015
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.39 KB | None | 0 0
  1. #region
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using AzureSharp.HabboHotel.Achievements;
  8. using AzureSharp.HabboHotel.Catalogs;
  9. using AzureSharp.HabboHotel.Groups.Structs;
  10. using AzureSharp.HabboHotel.Items;
  11. using AzureSharp.HabboHotel.Pets;
  12. using AzureSharp.HabboHotel.RoomBots;
  13. using AzureSharp.HabboHotel.Rooms;
  14. using AzureSharp.HabboHotel.Users.Authenticator;
  15. using AzureSharp.HabboHotel.Users.Badges;
  16. using AzureSharp.HabboHotel.Users.Inventory;
  17. using AzureSharp.HabboHotel.Users.Messenger;
  18. using AzureSharp.HabboHotel.Users.Relationships;
  19. using AzureSharp.HabboHotel.Users.Subscriptions;
  20. using log4net;
  21.  
  22. #endregion
  23.  
  24. namespace AzureSharp.HabboHotel.Users.UserDataManagement
  25. {
  26. /// <summary>
  27. /// Class UserDataFactory.
  28. /// </summary>
  29. internal class UserDataFactory
  30. {
  31. /// <summary>
  32. /// Gets the user data.
  33. /// </summary>
  34. /// <param name="sessionTicket">The session ticket.</param>
  35. /// <param name="ip">The ip.</param>
  36. /// <param name="errorCode">The error code.</param>
  37. /// <returns>UserData.</returns>
  38. /// <exception cref="UserDataNotFoundException"></exception>
  39. internal static UserData GetUserData(string sessionTicket, out uint errorCode)
  40. {
  41. uint userid = 0, miniMailCount = 0;
  42. errorCode = 1;
  43.  
  44. DataTable groupsTable;
  45. DataRow dataRow;
  46. DataTable achievementsTable;
  47. DataTable talentsTable;
  48. DataRow statsTable;
  49. DataTable favoritesTable;
  50. DataTable ignoresTable;
  51. DataTable tagsTable;
  52. DataRow subscriptionsRow;
  53. DataTable badgesTable;
  54. DataTable itemsTable;
  55. DataTable effectsTable;
  56. DataTable pollsTable;
  57. DataTable friendsTable;
  58. DataTable friendsRequestsTable;
  59. DataTable myRoomsTable;
  60. DataTable petsTable;
  61. DataTable questsTable;
  62. DataTable botsTable;
  63. DataTable relationShipsTable;
  64.  
  65. try
  66. {
  67. using (var queryReactor = AzureEmulator.GetDatabaseManager().GetQueryReactor())
  68. {
  69. queryReactor.SetQuery("SELECT * FROM users WHERE auth_ticket = @ticket");
  70. queryReactor.AddParameter("ticket", sessionTicket);
  71. dataRow = queryReactor.GetRow();
  72. if (dataRow == null)
  73. return null;
  74.  
  75. errorCode = 0;
  76. userid = Convert.ToUInt32(dataRow["id"]);
  77.  
  78. queryReactor.RunFastQuery(string.Format("UPDATE users SET online = '1' WHERE id = '{0}'", userid));
  79. if (AzureEmulator.GetGame().GetClientManager().GetClientByUserId(userid) != null)
  80. AzureEmulator.GetGame().GetClientManager().GetClientByUserId(userid).Disconnect("User connected in other place");
  81.  
  82. queryReactor.SetQuery(string.Format("SELECT `group`, `level`, progress FROM users_achievements WHERE userid = {0}", Convert.ToUInt32(userid)));
  83. achievementsTable = queryReactor.GetTable();
  84.  
  85. queryReactor.SetQuery(string.Format("SELECT talent_id, talent_state FROM users_talents WHERE userid = {0}", Convert.ToUInt32(userid)));
  86. talentsTable = queryReactor.GetTable();
  87.  
  88. queryReactor.SetQuery(string.Format("SELECT COUNT(*) FROM users_stats WHERE id = {0}", Convert.ToUInt32(userid)));
  89. if (int.Parse(queryReactor.GetString()) == 0)
  90. queryReactor.RunFastQuery(string.Format("INSERT INTO users_stats (id) VALUES ({0})", Convert.ToUInt32(userid)));
  91.  
  92. queryReactor.SetQuery(string.Format("SELECT room_id FROM users_favorites WHERE user_id = {0}", Convert.ToUInt32(userid)));
  93. favoritesTable = queryReactor.GetTable();
  94.  
  95. queryReactor.SetQuery(string.Format("SELECT ignore_id FROM users_ignores WHERE user_id = {0}", Convert.ToUInt32(userid)));
  96. ignoresTable = queryReactor.GetTable();
  97.  
  98. queryReactor.SetQuery(string.Format("SELECT tag FROM users_tags WHERE user_id = {0}", Convert.ToUInt32(userid)));
  99. tagsTable = queryReactor.GetTable();
  100.  
  101. queryReactor.SetQuery(string.Format("SELECT subscription_id, timestamp_activated, timestamp_expire, timestamp_lastgift FROM users_subscriptions WHERE user_id = {0} AND timestamp_expire > UNIX_TIMESTAMP() ORDER BY subscription_id DESC LIMIT 1", Convert.ToUInt32(userid)));
  102. subscriptionsRow = queryReactor.GetRow();
  103.  
  104. queryReactor.SetQuery(string.Format("SELECT * FROM users_badges WHERE user_id = {0}", Convert.ToUInt32(userid)));
  105. badgesTable = queryReactor.GetTable();
  106.  
  107. queryReactor.SetQuery(string.Format("SELECT `items_rooms`.* , COALESCE(`items_groups`.`group_id`, 0) AS group_id FROM `items_rooms` LEFT OUTER JOIN `items_groups` ON `items_rooms`.`id` = `items_groups`.`id` WHERE room_id='0' AND user_id={0} LIMIT 8000", Convert.ToUInt32(userid)));
  108. itemsTable = queryReactor.GetTable();
  109.  
  110. queryReactor.SetQuery(string.Format("SELECT * FROM users_effects WHERE user_id = {0}", Convert.ToUInt32(userid)));
  111. effectsTable = queryReactor.GetTable();
  112.  
  113. queryReactor.SetQuery(string.Format("SELECT poll_id FROM users_polls WHERE user_id = {0} GROUP BY poll_id;", Convert.ToUInt32(userid)));
  114. pollsTable = queryReactor.GetTable();
  115.  
  116. queryReactor.SetQuery(string.Format("SELECT users.id,users.username,users.motto,users.look,users.last_online,users.hide_inroom,users.hide_online FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_one_id WHERE messenger_friendships.user_two_id = {0} UNION ALL SELECT users.id,users.username,users.motto,users.look,users.last_online,users.hide_inroom,users.hide_online FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_two_id WHERE messenger_friendships.user_one_id = {0}", Convert.ToUInt32(userid)));
  117. friendsTable = queryReactor.GetTable();
  118.  
  119. queryReactor.SetQuery(string.Format("SELECT * FROM users_stats WHERE id = {0}", Convert.ToUInt32(userid)));
  120. statsTable = queryReactor.GetRow();
  121.  
  122. queryReactor.SetQuery(string.Format("SELECT messenger_requests.from_id,messenger_requests.to_id,users.Username FROM users JOIN messenger_requests ON users.id = messenger_requests.from_id WHERE messenger_requests.to_id = {0}", Convert.ToUInt32(userid)));
  123. friendsRequestsTable = queryReactor.GetTable();
  124.  
  125. queryReactor.SetQuery("SELECT * FROM rooms_data WHERE owner = @name LIMIT 150");
  126. queryReactor.AddParameter("name", dataRow["username"]);
  127. myRoomsTable = queryReactor.GetTable();
  128.  
  129. queryReactor.SetQuery(string.Format("SELECT * FROM bots WHERE user_id = {0} AND room_id = 0 AND ai_type='pet'", Convert.ToUInt32(userid)));
  130. petsTable = queryReactor.GetTable();
  131.  
  132. queryReactor.SetQuery(string.Format("SELECT quest_id, progress FROM users_quests_data WHERE user_id = {0}", Convert.ToUInt32(userid)));
  133. questsTable = queryReactor.GetTable();
  134.  
  135. queryReactor.SetQuery(string.Format("SELECT * FROM bots WHERE user_id = {0} AND room_id=0 AND ai_type='generic'", Convert.ToUInt32(userid)));
  136. botsTable = queryReactor.GetTable();
  137.  
  138. queryReactor.SetQuery(string.Format("SELECT group_id,rank,date_join FROM groups_members WHERE user_id = {0}", Convert.ToUInt32(userid)));
  139. groupsTable = queryReactor.GetTable();
  140.  
  141. queryReactor.SetQuery(string.Format("UPDATE users_info SET login_timestamp = '{1}' WHERE user_id = {0}", Convert.ToUInt32(userid), AzureEmulator.GetUnixTimeStamp()));
  142. queryReactor.RunQuery();
  143.  
  144. queryReactor.SetQuery(string.Format("SELECT * FROM users_relationships WHERE user_id = {0}", Convert.ToUInt32(userid)));
  145. relationShipsTable = queryReactor.GetTable();
  146.  
  147. //queryReactor.SetQuery(string.Format("SELECT Count( IsReaded ) FROM xdrcms_minimail WHERE InBin = 0 AND IsReaded = 0 AND SenderId != {0} AND OwnerId = {0}", Convert.ToUInt32(userid)));
  148. //miniMailCount = (uint)queryReactor.GetInteger();
  149.  
  150. queryReactor.RunFastQuery(string.Format("UPDATE users SET online='1' WHERE id = {0} LIMIT 1", Convert.ToUInt32(userid)));
  151. }
  152.  
  153. var achievements = new Dictionary<string, UserAchievement>();
  154. foreach (DataRow row in achievementsTable.Rows)
  155. {
  156. var text = (string)row["group"];
  157. var level = (int)row["level"];
  158. var progress = (int)row["progress"];
  159. var value = new UserAchievement(text, level, progress);
  160. achievements.Add(text, value);
  161. }
  162.  
  163. var talents = new Dictionary<int, UserTalent>();
  164. foreach (DataRow row in talentsTable.Rows)
  165. {
  166. var num2 = (int)row["talent_id"];
  167. var state = (int)row["talent_state"];
  168. var value2 = new UserTalent(num2, state);
  169. talents.Add(num2, value2);
  170. }
  171.  
  172. var favorites = (from DataRow row in favoritesTable.Rows select (uint)row["room_id"]).ToList();
  173. var ignoreUsers = (from DataRow row in ignoresTable.Rows select (uint)row["ignore_id"]).ToList();
  174. var tags = (from DataRow row in tagsTable.Rows select row["tag"].ToString().Replace(" ", "")).ToList();
  175. var inventoryBots =
  176. (from DataRow row2 in botsTable.Rows select BotManager.GenerateBotFromRow(row2)).ToDictionary(
  177. roomBot => roomBot.BotId);
  178. var badges =
  179. (from DataRow dataRow8 in badgesTable.Rows
  180. select new Badge((string)dataRow8["badge_id"], (int)dataRow8["badge_slot"])).ToList();
  181.  
  182. Subscription subscriptions = null;
  183. if (subscriptionsRow != null)
  184. subscriptions = new Subscription((int)subscriptionsRow["subscription_id"],
  185. (int)subscriptionsRow["timestamp_activated"], (int)subscriptionsRow["timestamp_expire"],
  186. (int)subscriptionsRow["timestamp_lastgift"]);
  187.  
  188. var items = new List<UserItem>();
  189. foreach (DataRow row in itemsTable.Rows)
  190. {
  191. var id = Convert.ToUInt32(row[0]);
  192. var itemId = Convert.ToUInt32(row[3]);
  193.  
  194. if (!AzureEmulator.GetGame().GetItemManager().ContainsItem(itemId))
  195. continue;
  196.  
  197. var extraData = !DBNull.Value.Equals(row[4]) ? (string)row[4] : string.Empty;
  198.  
  199. var group = Convert.ToInt32(row["group_id"]);
  200. var songCode = (string)row["songcode"];
  201. items.Add(new UserItem(id, itemId, extraData, group, songCode));
  202. }
  203.  
  204. var effects = (from DataRow row in effectsTable.Rows
  205. let effectId = (int)row["effect_id"]
  206. let totalDuration = (int)row["total_duration"]
  207. let activated = AzureEmulator.EnumToBool((string)row["is_activated"])
  208. let activateTimestamp = (double)row["activated_stamp"]
  209. let type = Convert.ToInt16(row["type"])
  210. select new AvatarEffect(effectId, totalDuration, activated, activateTimestamp, type)).ToList();
  211.  
  212. var pollSuggested = new HashSet<uint>();
  213. foreach (uint pId in from DataRow row in pollsTable.Rows select (uint)row["poll_id"])
  214. pollSuggested.Add(pId);
  215.  
  216. var friends = new Dictionary<uint, MessengerBuddy>();
  217. var limit = (friendsTable.Rows.Count - 700);
  218.  
  219. if (limit > 0)
  220. using (var queryreactor2 = AzureEmulator.GetDatabaseManager().GetQueryReactor())
  221. {
  222. queryreactor2.RunFastQuery(string.Concat("DELETE FROM messenger_friendships WHERE user_one_id=", userid, " OR user_two_id=", userid, " LIMIT ", limit));
  223. queryreactor2.SetQuery(string.Concat("SELECT users.id,users.username,users.motto,users.look,users.last_online,users.hide_inroom,users.hide_online FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_one_id WHERE messenger_friendships.user_two_id = ", userid, " UNION ALL SELECT users.id,users.username,users.motto,users.look,users.last_online,users.hide_inroom,users.hide_online FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_two_id WHERE messenger_friendships.user_one_id = ", userid));
  224. friendsTable = queryreactor2.GetTable();
  225. }
  226.  
  227. foreach (DataRow row in friendsTable.Rows)
  228. {
  229. var num4 = Convert.ToUInt32(row["id"]);
  230. var pUsername = (string)row["username"];
  231. var pLook = (string)row["look"];
  232. var pMotto = (string)row["motto"];
  233. var pLastOnline = Convert.ToInt32(row["last_online"]);
  234. var pAppearOffline = AzureEmulator.EnumToBool(row["hide_online"].ToString());
  235. var pHideInroom = AzureEmulator.EnumToBool(row["hide_inroom"].ToString());
  236. if (num4 != userid && !friends.ContainsKey(num4))
  237. friends.Add(num4,
  238. new MessengerBuddy(num4, pUsername, pLook, pMotto, pLastOnline, pAppearOffline, pHideInroom));
  239. }
  240.  
  241. var friendsRequests = new Dictionary<uint, MessengerRequest>();
  242. foreach (DataRow row in friendsRequestsTable.Rows)
  243. {
  244. var num5 = Convert.ToUInt32(row["from_id"]);
  245. var num6 = Convert.ToUInt32(row["to_id"]);
  246. string pUsername2 = row["username"].ToString();
  247. string pUsername = row["username"].ToString();
  248. if (num5 != userid)
  249. if (!friendsRequests.ContainsKey(num5))
  250. friendsRequests.Add(num5, new MessengerRequest(userid, num5, pUsername2, pUsername));
  251. else if (!friendsRequests.ContainsKey(num6))
  252. friendsRequests.Add(num6, new MessengerRequest(userid, num6, pUsername2, pUsername));
  253. }
  254.  
  255. var myRooms = new HashSet<RoomData>();
  256. foreach (DataRow row in myRoomsTable.Rows)
  257. {
  258. var roomId = Convert.ToUInt32(row["id"]);
  259. myRooms.Add(AzureEmulator.GetGame().GetRoomManager().FetchRoomData(roomId, row));
  260. }
  261.  
  262. var pets = new Dictionary<uint, Pet>();
  263. foreach (DataRow row in petsTable.Rows)
  264. using (var queryreactor3 = AzureEmulator.GetDatabaseManager().GetQueryReactor())
  265. {
  266. queryreactor3.SetQuery(string.Format("SELECT * FROM pets_data WHERE id={0} LIMIT 1", row[0]));
  267. var row3 = queryreactor3.GetRow();
  268. if (row3 == null)
  269. continue;
  270. var pet = Catalog.GeneratePetFromRow(row, row3);
  271. pets.Add(pet.PetId, pet);
  272. }
  273.  
  274. var quests = new Dictionary<uint, int>();
  275. foreach (DataRow row in questsTable.Rows)
  276. {
  277. var key = Convert.ToUInt32(row["quest_id"]);
  278. var value3 = (int)row["progress"];
  279. if (quests.ContainsKey(key))
  280. quests.Remove(key);
  281. quests.Add(key, value3);
  282. }
  283.  
  284. var groups = new List<GroupUser>();
  285. foreach (DataRow row in groupsTable.Rows)
  286. groups.Add(new GroupUser(userid, (int)row["group_id"], (int)row["rank"], (int)row["date_join"]));
  287.  
  288. var relationShips = relationShipsTable.Rows.Cast<DataRow>()
  289. .ToDictionary(row => (int)row[0],
  290. row => new Relationship((int)row[0], (int)row[2], Convert.ToInt32(row[3].ToString())));
  291.  
  292. var user = HabboFactory.GenerateHabbo(dataRow, statsTable, groups);
  293. //dataRow = null;
  294. //achievementsTable = null;
  295. //favoritesTable = null;
  296. //ignoresTable = null;
  297. //tagsTable = null;
  298. //subscriptionsRow = null;
  299. //badgesTable = null;
  300. //itemsTable = null;
  301. //effectsTable = null;
  302. //friendsTable = null;
  303. //friendsRequestsTable = null;
  304. //myRoomsTable = null;
  305. //petsTable = null;
  306. //botsTable = null;
  307. //relationShipsTable = null;
  308. //pollsTable = null;
  309.  
  310. errorCode = 0;
  311. if (user.HasFuse("staff_chat"))
  312. {
  313. friends.Add(0, new MessengerBuddy(0, "Staff Chat", "hr-831-45.fa-1206-91.sh-290-1331.ha-3129-100.hd-180-2.cc-3039-73.ch-3215-92.lg-270-73", string.Empty, 0, false, true));
  314. }
  315.  
  316. return new UserData(userid, achievements, talents, favorites, ignoreUsers, tags, subscriptions, badges,
  317. items, effects, friends, friendsRequests, myRooms, pets, quests, user, inventoryBots, relationShips,
  318. pollSuggested, miniMailCount);
  319. }
  320. catch (Exception e)
  321. {
  322. errorCode = 1;
  323. // Writer.Writer.LogException(e.ToString());
  324. return null;
  325. }
  326. }
  327.  
  328. /// <summary>
  329. /// Gets the user data.
  330. /// </summary>
  331. /// <param name="userId">The user identifier.</param>
  332. /// <returns>UserData.</returns>
  333. internal static UserData GetUserData(int userId)
  334. {
  335. DataRow dataRow;
  336. uint num;
  337. DataRow row;
  338. DataTable table;
  339. using (var queryReactor = AzureEmulator.GetDatabaseManager().GetQueryReactor())
  340. {
  341. queryReactor.SetQuery(string.Format("SELECT * FROM users WHERE id = '{0}'", userId));
  342. dataRow = queryReactor.GetRow();
  343. AzureEmulator.GetGame().GetClientManager().LogClonesOut(Convert.ToUInt32(userId));
  344. if (dataRow == null)
  345. return null;
  346. num = Convert.ToUInt32(dataRow["id"]);
  347. if (AzureEmulator.GetGame().GetClientManager().GetClientByUserId(num) != null)
  348. return null;
  349. queryReactor.SetQuery(string.Format("SELECT group_id,rank,date_join FROM groups_members WHERE user_id={0}", userId));
  350. queryReactor.GetTable();
  351. queryReactor.SetQuery(string.Format("SELECT * FROM users_stats WHERE id={0} LIMIT 1", num));
  352. row = queryReactor.GetRow();
  353.  
  354. if (row == null)
  355. {
  356.  
  357. }
  358. queryReactor.SetQuery("SELECT * FROM users_relationships WHERE user_id=@id");
  359. queryReactor.AddParameter("id", num);
  360. table = queryReactor.GetTable();
  361. }
  362. var achievements = new Dictionary<string, UserAchievement>();
  363. var talents = new Dictionary<int, UserTalent>();
  364. var favouritedRooms = new List<uint>();
  365. var ignores = new List<uint>();
  366. var tags = new List<string>();
  367. var badges = new List<Badge>();
  368. var inventory = new List<UserItem>();
  369. var effects = new List<AvatarEffect>();
  370. var friends = new Dictionary<uint, MessengerBuddy>();
  371. var requests = new Dictionary<uint, MessengerRequest>();
  372. var rooms = new HashSet<RoomData>();
  373. var pets = new Dictionary<uint, Pet>();
  374. var quests = new Dictionary<uint, int>();
  375. var bots = new Dictionary<uint, RoomBot>();
  376. var group = new List<GroupUser>();
  377. var pollData = new HashSet<uint>();
  378. var dictionary = table.Rows.Cast<DataRow>()
  379. .ToDictionary(dataRow2 => (int)dataRow2[0],
  380. dataRow2 =>
  381. new Relationship((int)dataRow2[0], (int)dataRow2[2], Convert.ToInt32(dataRow2[3].ToString())));
  382. var user = HabboFactory.GenerateHabbo(dataRow, row, group);
  383. dataRow = null;
  384.  
  385. return new UserData(num, achievements, talents, favouritedRooms, ignores, tags, null, badges, inventory,
  386. effects, friends, requests, rooms, pets, quests, user, bots, dictionary, pollData, 0);
  387. }
  388. }
  389. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement