internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = new ServerMessage(913); Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels return Message; }
/// <summary> /// Composes the specified achievement. /// </summary> /// <param name="Achievement">The achievement.</param> /// <param name="TargetLevel">The target level.</param> /// <param name="TargetLevelData">The target level data.</param> /// <param name="TotalLevels">The total levels.</param> /// <param name="UserData">The user data.</param> /// <returns>ServerMessage.</returns> internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AchievementProgressMessageComposer")); serverMessage.AppendInteger(Achievement.Id); serverMessage.AppendInteger(TargetLevel); serverMessage.AppendString(string.Format("{0}{1}", Achievement.GroupName, TargetLevel)); serverMessage.AppendInteger(TargetLevelData.Requirement); serverMessage.AppendInteger(TargetLevelData.Requirement); serverMessage.AppendInteger(TargetLevelData.RewardPixels); serverMessage.AppendInteger(0); serverMessage.AppendInteger(UserData != null ? UserData.Progress : 0); serverMessage.AppendBool(UserData != null && UserData.Level >= TotalLevels); serverMessage.AppendString(Achievement.Category); serverMessage.AppendString(string.Empty); serverMessage.AppendInteger(TotalLevels); serverMessage.AppendInteger(0); return serverMessage; }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage serverMessage = new ServerMessage(Outgoing.AchievementProgressMessageComposer); serverMessage.AppendUInt(Achievement.Id); serverMessage.AppendInt32(TargetLevel); serverMessage.AppendString(Achievement.GroupName + TargetLevel); serverMessage.AppendInt32(TargetLevelData.Requirement); serverMessage.AppendInt32(TargetLevelData.Requirement); serverMessage.AppendInt32(TargetLevelData.RewardPixels); serverMessage.AppendInt32(0); serverMessage.AppendInt32(UserData != null ? UserData.Progress : 0); serverMessage.AppendBoolean(UserData != null && UserData.Level >= TotalLevels); serverMessage.AppendString(Achievement.Category); serverMessage.AppendString(string.Empty); serverMessage.AppendInt32(TotalLevels); serverMessage.AppendInt32(0); return serverMessage; }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = PacketHandelingManager.GetRecycledItem(OutputCode.AchievementEvent); Message.AddUInt32(Achievement.Id); // Unknown (ID?) Message.AddInt32(TargetLevel); // Target level Message.AddString(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AddInt32(TargetLevelData.Requirement); // Progress req/target Message.AddInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AddInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AddInt32(0); // ? Message.AddInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AddBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AddString(Achievement.Category); // Category Message.AddString(String.Empty); Message.AddInt32(TotalLevels); // Total amount of levels Message.AddInt32(0); // Total amount of levels return Message; }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { //I,I,S,I,I,I,I,I,B,S,S,I,I ServerMessage Message = new ServerMessage(Outgoing.AchievementProgress); Message.AppendInt32(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendString(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.Requirement); // Reward in Pixels Message.AppendInt32(TargetLevelData.RewardPixels); // Reward Ach Score Message.AppendInt32(0); // ? Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendString(Achievement.Category); // Category Message.AppendString(String.Empty); Message.AppendInt32(TotalLevels); // Total amount of levels Message.AppendInt32(0); return Message; }
/// <summary> /// Progresses the user achievement. /// </summary> /// <param name="session">The session.</param> /// <param name="achievementGroup">The achievement group.</param> /// <param name="progressAmount">The progress amount.</param> /// <param name="fromZero">if set to <c>true</c> [from zero].</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool ProgressUserAchievement(GameClient session, string achievementGroup, uint progressAmount, bool fromZero = false) { if (Achievements.ContainsKey(achievementGroup) && session?.GetHabbo() != null) { Achievement achievement = Achievements[achievementGroup]; Habbo user = session.GetHabbo(); // Get UserAchievementData, if the user doesn't has the Achievement, create a new. UserAchievement userAchievement = user.Achievements.ContainsKey(achievementGroup) ? user.GetAchievementData(achievementGroup) : new UserAchievement(achievementGroup, 0, 0); // If is a New Achievement is fromZero if (!user.Achievements.ContainsKey(achievementGroup)) { fromZero = true; } // If user hasn't the Achievement, after created the new, Must add in Collections. if (!user.Achievements.ContainsKey(achievementGroup)) { user.Achievements.Add(achievementGroup, userAchievement); } // Get Achievement userAchievement = user.Achievements[achievementGroup]; // Total Levels from this Achievement uint achievementLevelsCount = (uint)achievement.Levels.Count; // Get User Achievement Level uint achievementCurrentLevel = userAchievement.Level; // Get User Achievement Progress uint achievementCurrentProgress = userAchievement.Progress; // If the next Level is the last level must set to Levels.Count (Ex: 38 Levels => .Count = 37 (Max Level in the Array, but .Count 37 == 38, Soo need put Level - 1) uint achievementNextLevel = achievementCurrentLevel + 1 > achievementLevelsCount ? achievementLevelsCount : achievementCurrentLevel + 1; // Set Achievement Progress uint achievementProgress = achievementCurrentProgress + progressAmount; // If he has already the Max, something is wrong. if (achievementCurrentLevel == achievementLevelsCount) { return(false); } // Get Next Level Data AchievementLevel achievementNextLevelData = achievement.Levels[achievementNextLevel]; // if progress isn't sufficient or, isn't new Achievement if (achievementProgress < achievementNextLevelData.Requirement || achievementCurrentLevel >= 1) { fromZero = false; } // If progress is sufficient to next level, or is new Achievement if (achievementProgress >= achievementNextLevelData.Requirement || (achievementCurrentLevel < 1)) { fromZero = true; } // if is a new level (but level isn't 0) if (achievementProgress >= achievementNextLevelData.Requirement) { achievementProgress = 0; } // If is new Level if (fromZero) { // Set Level userAchievement.SetLevel(achievementNextLevel); // Set Progress userAchievement.SetProgress(achievementProgress); // Give Reward Points user.AchievementPoints += achievementNextLevelData.RewardPoints; user.NotifyNewPixels(achievementNextLevelData.RewardPixels); user.ActivityPoints += achievementNextLevelData.RewardPixels; // Update Points Balance user.UpdateActivityPointsBalance(); // Remove old Badge - (Is not problem if is First Level Badge, because if the user hasn't the badg, simply, will not remove. user.GetBadgeComponent().RemoveBadge(Convert.ToString($"{achievementGroup}{achievementNextLevel - 1}"), session); // Give new Badge user.GetBadgeComponent().GiveBadge($"{achievementGroup}{achievementNextLevel}", true, session); // Update in Database using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor()) queryReactor.RunFastQuery($"REPLACE INTO users_achievements VALUES ('{user.Id}', '{achievementGroup}', '{achievementNextLevel}', '{achievementProgress}')"); // Send Unlocked Composer session.SendMessage(AchievementUnlockedComposer.Compose(achievement, achievementNextLevel, achievementNextLevelData.RewardPoints, achievementNextLevelData.RewardPixels)); // Send Score Composer session.SendMessage(AchievementScoreUpdateComposer.Compose(user.AchievementPoints)); // Send Progress Composer session.SendMessage(AchievementProgressComposer.Compose(achievement, achievementNextLevel, achievementNextLevelData, achievementLevelsCount, userAchievement)); // Set Talent if (Yupi.GetGame().GetTalentManager().Talents.Values.Any(talent => talent.AchievementGroup == achievementGroup)) { Yupi.GetGame().GetTalentManager().CompleteUserTalent(session, Yupi.GetGame().GetTalentManager().GetTalentData(achievementGroup)); } } else { // Get Current Level Data AchievementLevel achievementCurrentLevelData = achievement.Levels[achievementCurrentLevel]; // It's the Same Level userAchievement.SetLevel(achievementCurrentLevel); // But increase Progress userAchievement.SetProgress(achievementProgress); // Update in Database using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor()) queryReactor.RunFastQuery($"REPLACE INTO users_achievements VALUES ('{user.Id}', '{achievementGroup}', '{achievementCurrentLevel}', '{achievementProgress}')"); // Compose Current Data session.SendMessage(AchievementProgressComposer.Compose(achievement, achievementCurrentLevel, achievementCurrentLevelData, achievementLevelsCount, userAchievement)); } // Send User New Data GameClientMessageHandler messageHandler = session.GetMessageHandler(); messageHandler.GetResponse().Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); messageHandler.GetResponse().AppendInteger(-1); messageHandler.GetResponse().AppendString(user.Look); messageHandler.GetResponse().AppendString(user.Gender.ToLower()); messageHandler.GetResponse().AppendString(user.Motto); messageHandler.GetResponse().AppendInteger(user.AchievementPoints); messageHandler.SendResponse(); return(true); } return(false); }
/// <summary> /// Composes the specified achievement. /// </summary> /// <param name="Achievement">The achievement.</param> /// <param name="TargetLevel">The target level.</param> /// <param name="TargetLevelData">The target level data.</param> /// <param name="TotalLevels">The total levels.</param> /// <param name="UserData">The user data.</param> /// <returns>ServerMessage.</returns> internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AchievementProgressMessageComposer")); serverMessage.AppendInteger(Achievement.Id); serverMessage.AppendInteger(TargetLevel); serverMessage.AppendString(string.Format("{0}{1}", Achievement.GroupName, TargetLevel)); serverMessage.AppendInteger(TargetLevelData.Requirement); serverMessage.AppendInteger(TargetLevelData.Requirement); serverMessage.AppendInteger(TargetLevelData.RewardPixels); serverMessage.AppendInteger(0); serverMessage.AppendInteger(UserData != null ? UserData.Progress : 0); serverMessage.AppendBool(UserData != null && UserData.Level >= TotalLevels); serverMessage.AppendString(Achievement.Category); serverMessage.AppendString(string.Empty); serverMessage.AppendInteger(TotalLevels); serverMessage.AppendInteger(0); return(serverMessage); }
public void RemoveUserAchievement(UserAchievement UserAchievement) { _repositoryWrapper.UserAchievement.RemoveUserAchievement(UserAchievement); // _logger.WriteInfo($"Removed user with id: {user.Id}."); }
/// <summary> /// Composes the specified achievement. /// </summary> /// <param name="achievement">The achievement.</param> /// <param name="targetLevel">The target level.</param> /// <param name="targetLevelData">The target level data.</param> /// <param name="totalLevels">The total levels.</param> /// <param name="userData">The user data.</param> /// <returns>ServerMessage.</returns> internal static ServerMessage Compose(Achievement achievement, uint targetLevel, AchievementLevel targetLevelData, uint totalLevels, UserAchievement userData) { ServerMessage serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("AchievementProgressMessageComposer")); serverMessage.AppendInteger(achievement.Id); serverMessage.AppendInteger(targetLevel); serverMessage.AppendString($"{achievement.GroupName}{targetLevel}"); serverMessage.AppendInteger(targetLevelData.Requirement); serverMessage.AppendInteger(targetLevelData.Requirement); serverMessage.AppendInteger(targetLevelData.RewardPixels); serverMessage.AppendInteger(0); serverMessage.AppendInteger(userData.Progress); serverMessage.AppendBool(userData.Level >= totalLevels); serverMessage.AppendString(achievement.Category); serverMessage.AppendString(string.Empty); serverMessage.AppendInteger(totalLevels); serverMessage.AppendInteger(0); return(serverMessage); }
public static UserData GetUserData(string sessionTicket, string ip, string machineid) { try { int userId; DataRow dUserInfo; DataRow row2; DataTable Achievement; DataTable Favorites; DataTable RoomRights; DataTable Badges; DataTable FrienShips; DataTable Requests; DataTable Quests; DataTable GroupMemberships; bool ChangeName = false; using (IQueryAdapter queryreactor = ButterflyEnvironment.GetDatabaseManager().GetQueryReactor()) { queryreactor.SetQuery("SELECT * FROM users WHERE auth_ticket = @sso LIMIT 1"); queryreactor.AddParameter("sso", sessionTicket); dUserInfo = queryreactor.GetRow(); if (dUserInfo == null) { return((UserData)null); } queryreactor.SetQuery("SELECT id FROM bans WHERE expire > @nowtime AND ((bantype = 'user' AND value = @username) OR (bantype = 'ip' AND value = @IP1) OR (bantype = 'ip' AND value = @IP2) OR (bantype = 'machine' AND value = @machineid)) LIMIT 1"); queryreactor.AddParameter("nowtime", ButterflyEnvironment.GetUnixTimestamp()); queryreactor.AddParameter("username", dUserInfo["username"]); queryreactor.AddParameter("IP1", ip); queryreactor.AddParameter("IP2", dUserInfo["ip_last"]); queryreactor.AddParameter("machineid", machineid); DataRow IsBanned = queryreactor.GetRow(); if (IsBanned != null) { return((UserData)null); } userId = Convert.ToInt32(dUserInfo["id"]); string username = (string)dUserInfo["username"]; if (ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(userId) != null) { ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(userId).Disconnect(); return((UserData)null); } string LastDailyCredits = (string)dUserInfo["lastdailycredits"]; string DateAujourdhui = DateTime.Today.ToString("MM/dd"); if (LastDailyCredits != DateAujourdhui) { queryreactor.RunQuery(string.Concat(new object[4] { "UPDATE users SET credits = credits + 3000, lastdailycredits = '", DateAujourdhui, "' WHERE id = ", userId })); dUserInfo["credits"] = ((int)dUserInfo["credits"] + 3000); if (Convert.ToInt32(dUserInfo["rank"]) == 1) { queryreactor.RunQuery("UPDATE user_stats SET dailyrespectpoints = 3, DailyPetRespectPoints = 3 WHERE id = '" + userId + "' LIMIT 1"); } else { queryreactor.RunQuery("UPDATE user_stats SET dailyrespectpoints = 10, DailyPetRespectPoints = 10 WHERE id = '" + userId + "' LIMIT 1"); } ChangeName = true; } queryreactor.SetQuery("SELECT * FROM user_stats WHERE id = '" + userId + "';"); row2 = queryreactor.GetRow(); if (row2 == null) { queryreactor.RunQuery("INSERT INTO user_stats (id) VALUES ('" + userId + "')"); queryreactor.SetQuery("SELECT * FROM user_stats WHERE id = '" + userId + "';"); row2 = queryreactor.GetRow(); } queryreactor.SetQuery("SELECT * FROM user_achievement WHERE userid = '" + userId + "';"); Achievement = queryreactor.GetTable(); queryreactor.SetQuery("SELECT room_id FROM user_favorites WHERE user_id = '" + userId + "';"); Favorites = queryreactor.GetTable(); queryreactor.SetQuery("SELECT room_id FROM room_rights WHERE user_id = '" + userId + "';"); RoomRights = queryreactor.GetTable(); queryreactor.SetQuery("SELECT * FROM user_badges WHERE user_id = '" + userId + "';"); Badges = queryreactor.GetTable(); queryreactor.SetQuery("SELECT users.id,users.username,messenger_friendships.relation FROM users JOIN messenger_friendships ON users.id = messenger_friendships.user_two_id WHERE messenger_friendships.user_one_id = '" + userId + "'"); FrienShips = queryreactor.GetTable(); queryreactor.SetQuery("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 = '" + userId + "'"); Requests = queryreactor.GetTable(); queryreactor.SetQuery("SELECT * FROM user_quests WHERE user_id = '" + userId + "';"); Quests = queryreactor.GetTable(); queryreactor.SetQuery("SELECT group_id FROM group_memberships WHERE user_id = '" + userId + "';"); GroupMemberships = queryreactor.GetTable(); queryreactor.RunQuery("UPDATE users SET online = '1', auth_ticket = '' WHERE id = '" + userId + "';"); } Dictionary <string, UserAchievement> achievements = new Dictionary <string, UserAchievement>(); foreach (DataRow dataRow in Achievement.Rows) { string str = (string)dataRow["group"]; int level = (int)dataRow["level"]; int progress = (int)dataRow["progress"]; UserAchievement userAchievement = new UserAchievement(str, level, progress); achievements.Add(str, userAchievement); } if (!achievements.ContainsKey("ACH_CameraPhotoCount")) { UserAchievement userAchievement = new UserAchievement("ACH_CameraPhotoCount", 10, 0); achievements.Add("ACH_CameraPhotoCount", userAchievement); } List <int> RoomRightsList = new List <int>(); foreach (DataRow dataRow in RoomRights.Rows) { int num3 = Convert.ToInt32(dataRow["room_id"]); RoomRightsList.Add(num3); } List <int> favouritedRooms = new List <int>(); foreach (DataRow dataRow in Favorites.Rows) { int num3 = Convert.ToInt32(dataRow["room_id"]); favouritedRooms.Add(num3); } List <Badge> badges = new List <Badge>(); foreach (DataRow dataRow in Badges.Rows) { string Code = (string)dataRow["badge_id"]; int Slot = (int)dataRow["badge_slot"]; badges.Add(new Badge(Code, Slot)); } Dictionary <int, Relationship> Relationships = new Dictionary <int, Relationship>(); Dictionary <int, MessengerBuddy> friends = new Dictionary <int, MessengerBuddy>(); foreach (DataRow dataRow in FrienShips.Rows) { int num3 = Convert.ToInt32(dataRow["id"]); string pUsername = (string)dataRow["username"]; string pLook = "";//(string)dataRow["look"]; int Relation = Convert.ToInt32(dataRow["relation"]); if (num3 != userId) { if (!friends.ContainsKey(num3)) { friends.Add(num3, new MessengerBuddy(num3, pUsername, pLook, Relation)); if (Relation != 0) { Relationships.Add(num3, new Relationship(num3, Relation)); } } } } Dictionary <int, MessengerRequest> requests = new Dictionary <int, MessengerRequest>(); foreach (DataRow dataRow in Requests.Rows) { int num3 = Convert.ToInt32(dataRow["from_id"]); int num4 = Convert.ToInt32(dataRow["to_id"]); string pUsername = (string)dataRow["username"]; if (num3 != userId) { if (!requests.ContainsKey(num3)) { requests.Add(num3, new MessengerRequest(userId, num3, pUsername)); } } else if (!requests.ContainsKey(num4)) { requests.Add(num4, new MessengerRequest(userId, num4, pUsername)); } } Dictionary <int, int> quests = new Dictionary <int, int>(); foreach (DataRow dataRow in Quests.Rows) { int key = Convert.ToInt32(dataRow["quest_id"]); int num3 = (int)dataRow["progress"]; quests.Add(key, num3); } List <int> MyGroups = new List <int>(); foreach (DataRow dRow in GroupMemberships.Rows) { MyGroups.Add((int)dRow["group_id"]); } Habbo user = GenerateHabbo(dUserInfo, row2, ChangeName); return(new UserData(userId, achievements, favouritedRooms, badges, friends, requests, quests, MyGroups, user, Relationships, RoomRightsList)); } catch (Exception ex) { Console.WriteLine(ex); return(null); } }
internal static UserData GetUserData(string sessionTicket, string ip, out byte errorCode) { DataRow dUserInfo; DataTable dAchievements; DataTable dFavouriteRooms; DataTable dIgnores; DataTable dTags; DataTable dSubscriptions; DataTable dBadges; DataTable dInventory; DataTable dEffects; DataTable dFriends; DataTable dRequests; DataTable dRooms; DataTable dPets; DataTable dQuests; //DataTable dSongs; DataRow dGroups = null; UInt32 userID; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (PiciEnvironment.useSSO) { dbClient.setQuery("SELECT * FROM users WHERE auth_ticket = @sso " + "AND ip_last = @ipaddress "); } else { dbClient.setQuery("SELECT * FROM users WHERE auth_ticket = @sso " + "AND ip_last = @ipaddress "); } dbClient.addParameter("sso", sessionTicket); dbClient.addParameter("ipaddress", ip); dUserInfo = dbClient.getRow(); if (dUserInfo == null) { errorCode = 1; return(null); //Logging.LogException("No user found. Debug data: [" + sessionTicket + "], [" + ip + "]"); //thRow new UserDataNotFoundException(string.Format("No user found with ip {0} and sso {1}. Use SSO: {2} ", ip, sessionTicket, PiciEnvironment.useSSO.ToString())); } userID = Convert.ToUInt32(dUserInfo["id"]); if (PiciEnvironment.GetGame().GetClientManager().GetClientByUserID(userID) != null) { errorCode = 2; return(null); } string creditsTimestamp = (string)dUserInfo["lastdailycredits"]; string todayTimestamp = DateTime.Today.ToString("MM/dd"); if (creditsTimestamp != todayTimestamp) { dbClient.runFastQuery("UPDATE users SET credits = credits + 3000, daily_respect_points = 3, lastdailycredits = '" + todayTimestamp + "' WHERE id = " + userID); dUserInfo["credits"] = (int)dUserInfo["credits"] + 3000; } dbClient.setQuery("SELECT * FROM user_achievement WHERE userid = " + userID); dAchievements = dbClient.getTable(); dbClient.setQuery("SELECT room_id FROM user_favorites WHERE user_id = " + userID); dFavouriteRooms = dbClient.getTable(); dbClient.setQuery("SELECT ignore_id FROM user_ignores WHERE user_id = " + userID); dIgnores = dbClient.getTable(); dbClient.setQuery("SELECT tag FROM user_tags WHERE user_id = " + userID); dTags = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_subscriptions WHERE user_id = " + userID); dSubscriptions = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_badges WHERE user_id = " + userID); dBadges = dbClient.getTable(); if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) { dbClient.setQuery("CALL getuseritems(" + userID + ")"); } else { dbClient.setQuery("EXECUTE getuseritems " + userID + ""); } dInventory = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_effects WHERE user_id = " + userID); dEffects = dbClient.getTable(); dbClient.setQuery("SELECT users.id,users.username,users.motto,users.look,users.last_online " + "FROM users " + "JOIN messenger_friendships " + "ON users.id = messenger_friendships.sender " + "WHERE messenger_friendships.receiver = " + userID + " " + "UNION ALL " + "SELECT users.id,users.username,users.motto,users.look,users.last_online " + "FROM users " + "JOIN messenger_friendships " + "ON users.id = messenger_friendships.receiver " + "WHERE messenger_friendships.sender = " + userID); dFriends = dbClient.getTable(); dbClient.setQuery("SELECT messenger_requests.sender,messenger_requests.receiver,users.username " + "FROM users " + "JOIN messenger_requests " + "ON users.id = messenger_requests.sender " + "WHERE messenger_requests.receiver = " + userID); dRequests = dbClient.getTable(); dbClient.setQuery("SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE owner = @name"); dbClient.addParameter("name", (string)dUserInfo["username"]); dRooms = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_pets WHERE user_id = " + userID + " AND room_id = 0"); dPets = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_quests WHERE user_id = " + userID + ""); dQuests = dbClient.getTable(); if (PiciEnvironment.groupsEnabled) { dbClient.setQuery("SELECT groups_memberships.*, groups_details.* FROM groups_memberships " + "LEFT JOIN groups_details " + "ON groups_memberships.groupid = groups_details.id " + "WHERE groups_memberships.userid = " + userID + " AND groups_memberships.is_current = '1'"); dGroups = dbClient.getRow(); } //dbClient.setQuery("SELECT item_id, song_id FROM user_items_songs WHERE user_id = " + userID); //dSongs = dbClient.getTable(); /* dbClient.setQuery("UPDATE users SET ip_last = @ip WHERE id = " + userID + " LIMIT 1; " + * "UPDATE user_info SET login_timestamp = '" + PiciEnvironment.GetUnixTimestamp() + "' WHERE user_id = " + userID + " LIMIT 1; " + * "REPLACE INTO user_online VALUES (" + userID + "); " + * "DELETE FROM user_tickets WHERE userid = " + userID + ";");*/ dbClient.setQuery("UPDATE users SET ip_last = @ip WHERE id = " + userID + "; " + "UPDATE user_info SET login_timestamp = '" + PiciEnvironment.GetUnixTimestamp() + "' WHERE user_id = " + userID + " ; " + ""); dbClient.addParameter("ip", ip); dbClient.runQuery(); if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) { dbClient.runFastQuery("REPLACE INTO user_online VALUES (" + userID + ")"); } else { dbClient.runFastQuery("IF NOT EXISTS (SELECT userid FROM user_online WHERE userid = " + userID + ") " + "INSERT INTO user_online VALUES (" + userID + ")"); } } Dictionary <string, UserAchievement> achievements = new Dictionary <string, UserAchievement>(); string achievementGroup; int achievementLevel; int achievementProgress; foreach (DataRow dRow in dAchievements.Rows) { achievementGroup = (string)dRow["group"]; achievementLevel = (int)dRow["level"]; achievementProgress = (int)dRow["progress"]; UserAchievement achievement = new UserAchievement(achievementGroup, achievementLevel, achievementProgress); achievements.Add(achievementGroup, achievement); } List <uint> favouritedRooms = new List <uint>(); uint favoritedRoomID; foreach (DataRow dRow in dFavouriteRooms.Rows) { favoritedRoomID = Convert.ToUInt32(dRow["room_id"]); favouritedRooms.Add(favoritedRoomID); } List <uint> ignores = new List <uint>(); uint ignoredUserID; foreach (DataRow dRow in dIgnores.Rows) { ignoredUserID = Convert.ToUInt32(dRow["ignore_id"]); ignores.Add(ignoredUserID); } List <string> tags = new List <string>(); string tag; foreach (DataRow dRow in dTags.Rows) { tag = (string)dRow["tag"]; tags.Add(tag); } Dictionary <string, Subscription> subscriptions = new Dictionary <string, Subscription>(); string subscriptionID; int expireTimestamp; foreach (DataRow dRow in dSubscriptions.Rows) { subscriptionID = (string)dRow["subscription_id"]; expireTimestamp = (int)dRow["timestamp_expire"]; subscriptions.Add(subscriptionID, new Subscription(subscriptionID, expireTimestamp)); } List <Badge> badges = new List <Badge>(); string badgeID; int slotID; foreach (DataRow dRow in dBadges.Rows) { badgeID = (string)dRow["badge_id"]; slotID = (int)dRow["badge_slot"]; badges.Add(new Badge(badgeID, slotID)); } List <UserItem> inventory = new List <UserItem>(); uint itemID; uint baseItem; string extraData; foreach (DataRow dRow in dInventory.Rows) { itemID = Convert.ToUInt32(dRow[0]); baseItem = Convert.ToUInt32(dRow[1]); if (!DBNull.Value.Equals(dRow[2])) { extraData = (string)dRow[2]; } else { extraData = string.Empty; } inventory.Add(new UserItem(itemID, baseItem, extraData)); } List <AvatarEffect> effects = new List <AvatarEffect>(); int effectID; int duration; bool isActivated; double activatedTimeStamp; foreach (DataRow dRow in dEffects.Rows) { effectID = (int)dRow["effect_id"]; duration = (int)dRow["total_duration"]; isActivated = PiciEnvironment.EnumToBool((string)dRow["is_activated"]); activatedTimeStamp = (double)dRow["activated_stamp"]; effects.Add(new AvatarEffect(effectID, duration, isActivated, activatedTimeStamp)); } Dictionary <uint, MessengerBuddy> friends = new Dictionary <uint, MessengerBuddy>(); string username = (string)dUserInfo["username"]; UInt32 friendID; string friendName; string friendLook; string friendMotto; string friendLastOnline; foreach (DataRow dRow in dFriends.Rows) { friendID = Convert.ToUInt32(dRow["id"]); friendName = (string)dRow["username"]; friendLook = (string)dRow["look"]; friendMotto = (string)dRow["motto"]; friendLastOnline = (string)dRow["last_online"]; if (friendID == userID) { continue; } if (!friends.ContainsKey(friendID)) { friends.Add(friendID, new MessengerBuddy(friendID, friendName, friendLook, friendMotto, friendLastOnline)); } } Dictionary <uint, MessengerRequest> requests = new Dictionary <uint, MessengerRequest>(); uint receiverID; uint senderID; string requestUsername; foreach (DataRow dRow in dRequests.Rows) { receiverID = Convert.ToUInt32(dRow["sender"]); senderID = Convert.ToUInt32(dRow["receiver"]); requestUsername = (string)dRow["username"]; if (receiverID != userID) { if (!requests.ContainsKey(receiverID)) { requests.Add(receiverID, new MessengerRequest(userID, receiverID, requestUsername)); } } else { if (!requests.ContainsKey(senderID)) { requests.Add(senderID, new MessengerRequest(userID, senderID, requestUsername)); } } } List <RoomData> rooms = new List <RoomData>(); uint roomID; foreach (DataRow dRow in dRooms.Rows) { roomID = Convert.ToUInt32(dRow["id"]); rooms.Add(PiciEnvironment.GetGame().GetRoomManager().FetchRoomData(roomID, dRow)); } Dictionary <uint, Pet> pets = new Dictionary <uint, Pet>(); Pet pet; foreach (DataRow dRow in dPets.Rows) { pet = Catalog.GeneratePetFromRow(dRow); pets.Add(pet.PetId, pet); } Dictionary <uint, int> quests = new Dictionary <uint, int>(); uint questId; int progress; foreach (DataRow dRow in dQuests.Rows) { questId = Convert.ToUInt32(dRow["quest_id"]); progress = (int)dRow["progress"]; quests.Add(questId, progress); } Hashtable songs = new Hashtable(); //uint songItemID; //uint songID; //foreach (DataRow dRow in dSongs.Rows) //{ // songItemID = (uint)dRow[0]; // songID = (uint)dRow[1]; // SongItem song = new SongItem(songItemID, songID); // songs.Add(songItemID, song); //} Habbo user = HabboFactory.GenerateHabbo(dUserInfo, dGroups); dUserInfo = null; dAchievements = null; dFavouriteRooms = null; dIgnores = null; dTags = null; dSubscriptions = null; dBadges = null; dInventory = null; dEffects = null; dFriends = null; dRequests = null; dRooms = null; dPets = null; errorCode = 0; return(new UserData(userID, achievements, favouritedRooms, ignores, tags, subscriptions, badges, inventory, effects, friends, requests, rooms, pets, quests, songs, user)); }
public AchievementProgressedComposer(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) : base(ServerPacketHeader.AchievementProgressedMessageComposer) { WriteInteger(Achievement.Id); WriteInteger(TargetLevel); WriteString(Achievement.GroupName + TargetLevel); WriteInteger(0); WriteInteger(TargetLevelData.Requirement); WriteInteger(TargetLevelData.RewardPixels); WriteInteger(0); WriteInteger(UserData != null ? UserData.Progress : 0); WriteBoolean(UserData != null && UserData.Level >= TotalLevels); WriteString(Achievement.Category); WriteString(string.Empty); WriteInteger(TotalLevels); WriteInteger(0); }
internal static UserData GetUserData(string sessionTicket, string ip, out byte errorCode) { DataRow dUserInfo; DataTable dAchievements; DataTable dFavouriteRooms; DataTable dIgnores; DataTable dTags; DataTable dSubscriptions; DataTable dBadges; DataTable dInventory; DataTable dEffects; DataTable dFriends; DataTable dRequests; DataTable dRooms; DataTable dPets; DataTable dBots; DataTable dQuests; //DataTable dSongs; int userID; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT * " + "FROM users " + "WHERE auth_ticket = @sso "); dbClient.addParameter("sso", sessionTicket); //dbClient.addParameter("ipaddress", ip); dUserInfo = dbClient.getRow(); if (dUserInfo == null) { errorCode = 1; return(null); //Logging.LogException("No user found. Debug data: [" + sessionTicket + "], [" + ip + "]"); //throw new UserDataNotFoundException(string.Format("No user found with ip {0} and sso {1}. Use SSO: {2} ", ip, sessionTicket, FirewindEnvironment.useSSO.ToString())); } userID = Convert.ToInt32(dUserInfo["id"]); if (FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(userID) != null) { errorCode = 2; return(null); } string creditsTimestamp = (string)dUserInfo["lastdailycredits"]; string todayTimestamp = DateTime.Today.ToString("MM/dd"); if (creditsTimestamp != todayTimestamp) { dbClient.runFastQuery( "UPDATE users SET credits = credits + 3000, daily_respect_points = 3, lastdailycredits = '" + todayTimestamp + "' WHERE id = " + userID); dUserInfo["credits"] = (int)dUserInfo["credits"] + 3000; } dbClient.setQuery("SELECT * FROM user_achievement WHERE userid = " + userID); dAchievements = dbClient.getTable(); dbClient.setQuery("SELECT room_id FROM user_favorites WHERE user_id = " + userID); dFavouriteRooms = dbClient.getTable(); dbClient.setQuery("SELECT ignore_id FROM user_ignores WHERE user_id = " + userID); dIgnores = dbClient.getTable(); dbClient.setQuery("SELECT tag FROM user_tags WHERE user_id = " + userID); dTags = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_subscriptions WHERE user_id = " + userID); dSubscriptions = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_badges WHERE user_id = " + userID); dBadges = dbClient.getTable(); dbClient.setQuery("CALL getuseritems(" + userID + ")"); dInventory = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_effects WHERE user_id = " + userID); dEffects = dbClient.getTable(); dbClient.setQuery("SELECT users.id,users.username,users.motto,users.look,users.last_online " + "FROM users " + "JOIN messenger_friendships " + "ON users.id = messenger_friendships.sender " + "WHERE messenger_friendships.receiver = " + userID + " " + "UNION ALL " + "SELECT users.id,users.username,users.motto,users.look,users.last_online " + "FROM users " + "JOIN messenger_friendships " + "ON users.id = messenger_friendships.receiver " + "WHERE messenger_friendships.sender = " + userID); dFriends = dbClient.getTable(); dbClient.setQuery("SELECT messenger_requests.sender,messenger_requests.receiver,users.username " + "FROM users " + "JOIN messenger_requests " + "ON users.id = messenger_requests.sender " + "WHERE messenger_requests.receiver = " + userID); dRequests = dbClient.getTable(); dbClient.setQuery( "SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE owner = @name"); dbClient.addParameter("name", (string)dUserInfo["username"]); dRooms = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_pets WHERE user_id = " + userID + " AND room_id = 0"); dPets = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_bots WHERE user_id = " + userID + ""); dBots = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_quests WHERE user_id = " + userID + ""); dQuests = dbClient.getTable(); //dbClient.setQuery("SELECT item_id, song_id FROM user_items_songs WHERE user_id = " + userID); //dSongs = dbClient.getTable(); /* dbClient.setQuery("UPDATE users SET ip_last = @ip WHERE id = " + userID + " LIMIT 1; " + * "UPDATE user_info SET login_timestamp = '" + FirewindEnvironment.GetUnixTimestamp() + "' WHERE user_id = " + userID + " LIMIT 1; " + * "REPLACE INTO user_online VALUES (" + userID + "); " + * "DELETE FROM user_tickets WHERE userid = " + userID + ";");*/ dbClient.setQuery("UPDATE users SET ip_last = @ip WHERE id = " + userID + "; " + "UPDATE user_info SET login_timestamp = '" + FirewindEnvironment.GetUnixTimestamp() + "' WHERE user_id = " + userID + " ; " + ""); dbClient.addParameter("ip", ip); dbClient.runQuery(); dbClient.runFastQuery("REPLACE INTO user_online VALUES (" + userID + ")"); } Dictionary <string, UserAchievement> achievements = new Dictionary <string, UserAchievement>(); string achievementGroup; int achievementLevel; int achievementProgress; foreach (DataRow dRow in dAchievements.Rows) { achievementGroup = (string)dRow["group"]; achievementLevel = (int)dRow["level"]; achievementProgress = (int)dRow["progress"]; UserAchievement achievement = new UserAchievement(achievementGroup, achievementLevel, achievementProgress); achievements.Add(achievementGroup, achievement); } List <uint> favouritedRooms = new List <uint>(); uint favoritedRoomID; foreach (DataRow dRow in dFavouriteRooms.Rows) { favoritedRoomID = Convert.ToUInt32(dRow["room_id"]); favouritedRooms.Add(favoritedRoomID); } List <int> ignores = new List <int>(); int ignoredUserID; foreach (DataRow dRow in dIgnores.Rows) { ignoredUserID = Convert.ToInt32(dRow["ignore_id"]); ignores.Add(ignoredUserID); } List <string> tags = new List <string>(); string tag; foreach (DataRow dRow in dTags.Rows) { tag = (string)dRow["tag"]; tags.Add(tag); } Dictionary <string, Subscription> subscriptions = new Dictionary <string, Subscription>(); string subscriptionID; int expireTimestamp; foreach (DataRow dRow in dSubscriptions.Rows) { subscriptionID = (string)dRow["subscription_id"]; expireTimestamp = (int)dRow["timestamp_expire"]; subscriptions.Add(subscriptionID, new Subscription(subscriptionID, expireTimestamp)); } List <Badge> badges = new List <Badge>(); string badgeID; int slotID; foreach (DataRow dRow in dBadges.Rows) { badgeID = (string)dRow["badge_id"]; slotID = (int)dRow["badge_slot"]; badges.Add(new Badge(badgeID, slotID)); } List <UserItem> inventory = new List <UserItem>(); uint itemID; uint baseItem; int dataType; string extradata; int extra; foreach (DataRow Row in dInventory.Rows) { itemID = Convert.ToUInt32(Row[0]); baseItem = Convert.ToUInt32(Row[1]); IRoomItemData data; if (DBNull.Value.Equals(Row[2])) { data = new StringData(""); extra = 0; } else { dataType = Convert.ToInt32(Row[2]); extradata = (string)Row[3]; extra = Convert.ToInt32(Row[4]); switch (dataType) { case 0: data = new StringData(extradata); break; case 1: data = new MapStuffData(); break; case 2: data = new StringArrayStuffData(); break; case 3: data = new StringIntData(); break; default: data = new StringData(extradata); break; } try { data.Parse(extradata); } catch { Logging.LogException(string.Format("Error in furni data! Item ID: \"{0}\" and data: \"{1}\"", itemID, extradata.Replace(Convert.ToChar(1).ToString(), "[1]"))); } } inventory.Add(new UserItem(itemID, baseItem, data, extra)); } List <AvatarEffect> effects = new List <AvatarEffect>(); int effectID; int duration; bool isActivated; double activatedTimeStamp; foreach (DataRow dRow in dEffects.Rows) { effectID = (int)dRow["effect_id"]; duration = (int)dRow["total_duration"]; isActivated = Convert.ToInt32(dRow["is_activated"]) == 1; activatedTimeStamp = (double)dRow["activated_stamp"]; effects.Add(new AvatarEffect(effectID, duration, isActivated, activatedTimeStamp)); } Dictionary <int, MessengerBuddy> friends = new Dictionary <int, MessengerBuddy>(); string username = (string)dUserInfo["username"]; int friendID; string friendName; string friendLook; string friendMotto; string friendLastOnline; foreach (DataRow dRow in dFriends.Rows) { friendID = Convert.ToInt32(dRow["id"]); friendName = (string)dRow["username"]; friendLook = (string)dRow["look"]; friendMotto = (string)dRow["motto"]; friendLastOnline = Convert.ToString(dRow["last_online"]); if (friendID == userID) { continue; } if (!friends.ContainsKey(friendID)) { friends.Add(friendID, new MessengerBuddy(friendID, friendName, friendLook, friendMotto, friendLastOnline)); } } Dictionary <int, MessengerRequest> requests = new Dictionary <int, MessengerRequest>(); int receiverID; int senderID; string requestUsername; foreach (DataRow dRow in dRequests.Rows) { receiverID = Convert.ToInt32(dRow["sender"]); senderID = Convert.ToInt32(dRow["receiver"]); requestUsername = (string)dRow["username"]; if (receiverID != userID) { if (!requests.ContainsKey(receiverID)) { requests.Add(receiverID, new MessengerRequest(userID, receiverID, requestUsername)); } } else { if (!requests.ContainsKey(senderID)) { requests.Add(senderID, new MessengerRequest(userID, senderID, requestUsername)); } } } List <RoomData> rooms = new List <RoomData>(); uint roomID; foreach (DataRow dRow in dRooms.Rows) { roomID = Convert.ToUInt32(dRow["id"]); rooms.Add(FirewindEnvironment.GetGame().GetRoomManager().FetchRoomData(roomID, dRow)); } Dictionary <uint, Pet> pets = new Dictionary <uint, Pet>(); Pet pet; foreach (DataRow dRow in dPets.Rows) { pet = Catalog.GeneratePetFromRow(dRow); pets.Add(pet.PetId, pet); } Dictionary <int, RentableBot> bots = new Dictionary <int, RentableBot>(); RentableBot bot; foreach (DataRow row in dBots.Rows) { bot = new RentableBot(); bot.OwnerID = Convert.ToInt32(row["user_id"]); bot.ID = Convert.ToInt32(row["id"]); bot.Name = Convert.ToString(row["name"]); bot.Gender = Convert.ToChar(row["gender"]); bot.Figure = Convert.ToString(row["figure"]); bot.Motto = "1 week SpyBot"; bot.TimeLeft = 604800; // 1 week bots.Add(bot.ID, bot); } Dictionary <uint, int> quests = new Dictionary <uint, int>(); uint questId; int progress; foreach (DataRow dRow in dQuests.Rows) { questId = Convert.ToUInt32(dRow["quest_id"]); progress = (int)dRow["progress"]; quests.Add(questId, progress); } Hashtable songs = new Hashtable(); //uint songItemID; //uint songID; //foreach (DataRow dRow in dSongs.Rows) //{ // songItemID = (uint)dRow[0]; // songID = (uint)dRow[1]; // SongItem song = new SongItem(songItemID, songID); // songs.Add(songItemID, song); //} Habbo user = HabboFactory.GenerateHabbo(dUserInfo); dUserInfo = null; dAchievements = null; dFavouriteRooms = null; dIgnores = null; dTags = null; dSubscriptions = null; dBadges = null; dInventory = null; dEffects = null; dFriends = null; dRequests = null; dRooms = null; dPets = null; errorCode = 0; return(new UserData(userID, achievements, favouritedRooms, ignores, tags, subscriptions, badges, inventory, effects, friends, requests, rooms, pets, quests, songs, user, bots)); }
/// <summary> /// Tries the progress habbo club achievements. /// </summary> /// <param name="session">The session.</param> internal void TryProgressHabboClubAchievements(GameClient session) { if (session.GetHabbo() == null || !session.GetHabbo().GetSubscriptionManager().HasSubscription) { return; } if (session.GetHabbo().Achievements.ContainsKey("ACH_VipHC")) { UserAchievement clubAch = session.GetHabbo().GetAchievementData("ACH_VipHC"); if (clubAch.Level == 5) { return; } Subscription subscription = session.GetHabbo().GetSubscriptionManager().GetSubscription(); int sinceActivation = Yupi.GetUnixTimeStamp() - subscription.ActivateTime; if (sinceActivation < 31556926) { return; } if (sinceActivation >= 31556926) { ProgressUserAchievement(session, "ACH_VipHC", 1); ProgressUserAchievement(session, "ACH_BasicClub", 1); } if (sinceActivation >= 63113851) { ProgressUserAchievement(session, "ACH_VipHC", 1); ProgressUserAchievement(session, "ACH_BasicClub", 1); } if (sinceActivation >= 94670777) { ProgressUserAchievement(session, "ACH_VipHC", 1); ProgressUserAchievement(session, "ACH_BasicClub", 1); } if (sinceActivation >= 126227704) { ProgressUserAchievement(session, "ACH_VipHC", 1); ProgressUserAchievement(session, "ACH_BasicClub", 1); } if (sinceActivation >= 157784630) { ProgressUserAchievement(session, "ACH_VipHC", 1); ProgressUserAchievement(session, "ACH_BasicClub", 1); } return; } ProgressUserAchievement(session, "ACH_VipHC", 1, true); ProgressUserAchievement(session, "ACH_BasicClub", 1, true); }
public void ApiNameMigration() { UserAchievement[] communityAchievements; Data.Achievement[] dataAchievements; using (SteamRepository repository = new SteamRepository()) { Dictionary <string, ICollection <UserAchievement> > userCommunityAchievements; using ( SteamCommunityManager communityManager = new SteamCommunityManager(new WebClientWrapper(), new SteamProfileXmlParser(), new GameXmlParser(), new AchievementXmlParser())) { string[] invalidUserProfiles = new[] { "0", "/zero_x9", "-vaka-", "inv4d3r", "barakitten", "76561198032315004", "120gb" }; var gameUsersQuery = from userAchievement in repository.UserAchievements where userAchievement.Achievement.ApiName.Length == 0 && !invalidUserProfiles.Contains(userAchievement.User.SteamUserId) group userAchievement by userAchievement.Achievement.GameId into g select new { GameId = g.Key, SteamUserId = g.Min(ua => ua.User.SteamUserId) }; Dictionary <int, string> gameUsers = gameUsersQuery.OrderBy(s => s.GameId) .ToDictionary(s => s.GameId, s => s.SteamUserId); Debug.WriteLine(String.Join(", ", gameUsers.Keys)); userCommunityAchievements = new Dictionary <string, ICollection <UserAchievement> >(); foreach (string user in gameUsers.Values.Distinct().OrderBy(v => v)) { try { ICollection <UserAchievement> userAchievements = communityManager.GetAchievements(user); userCommunityAchievements.Add(user, userAchievements); } catch (Exception ex) { Debug.WriteLine("GetAchievements failed for user " + user + "."); Debug.WriteLine(ex); if (ex.InnerException != null) { Debug.WriteLine(ex.InnerException); } } } } communityAchievements = userCommunityAchievements.Values.SelectMany(v => v.Select(ua => ua)).OrderBy(ua => ua.Game.Id) .OrderBy(ua => ua.AchievementApiName).Distinct().ToArray(); Serialize("CommunityAchievements.xml", communityAchievements); dataAchievements = repository.Achievements.ToArray(); foreach (Data.Achievement dataAchievement in dataAchievements) { UserAchievement achievement = communityAchievements .Where(a => a.Game.Id == dataAchievement.GameId && a.Name.ToUpper() == dataAchievement.Name.ToUpper() && a.Description.ToUpper() == dataAchievement.Description.ToUpper()) .FirstOrDefault(); if (achievement != null) { dataAchievement.ApiName = achievement.AchievementApiName; //Debug.WriteLine("Id: {0}, GameId: {1}, Name: {2}, ApiName: {3}", // dataAchievement.Id, dataAchievement.GameId, // dataAchievement.Name, dataAchievement.ApiName); } } Serialize("UpdatedApiNameAchievements.xml", dataAchievements.ToArray()); ChangeSet changeSet = repository.Context.GetChangeSet(); Debug.WriteLine(changeSet); repository.SubmitChanges(); } //Assert.That(changeSet.Updates, Is.Not.Empty); Debug.WriteLine("Total Data Achievements: " + dataAchievements.Length); Debug.WriteLine("Total Community Achievements: " + communityAchievements.Length); }
/// <summary> /// Progresses the user achievement. /// </summary> /// <param name="session">The session.</param> /// <param name="achievementGroup">The achievement group.</param> /// <param name="progressAmount">The progress amount.</param> /// <param name="fromZero">if set to <c>true</c> [from zero].</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> internal bool ProgressUserAchievement(GameClient session, string achievementGroup, int progressAmount, bool fromZero = false) { if (Achievements.ContainsKey(achievementGroup) && session?.GetHabbo() != null) { var achievement = Achievements[achievementGroup]; var user = session.GetHabbo(); var userAchievement = user.GetAchievementData(achievementGroup); if (userAchievement == null) { userAchievement = new UserAchievement(achievementGroup, 0, 0); user.Achievements.Add(achievementGroup, userAchievement.Value); } var count = achievement.Levels.Count; if (userAchievement.Value.Level == count) return false; var acount = (userAchievement.Value.Level + 1); if (acount > count) acount = count; var targetLevelData = achievement.Levels[acount]; var achievementColoc = session.GetHabbo().GetAchievementData(achievementGroup); if ((achievementColoc != null) && (fromZero)) fromZero = false; var progress = (fromZero) ? progressAmount : ((userAchievement.Value.Progress + progressAmount)); var achievementLevel = userAchievement.Value.Level; var levelEndCheck = achievementLevel + 1; if (levelEndCheck > count) levelEndCheck = count; if (progress >= targetLevelData.Requirement) { achievementLevel++; levelEndCheck++; progress = 0; var userBadgeComponent = user.GetBadgeComponent(); if (acount != 1) userBadgeComponent.RemoveBadge(Convert.ToString($"{achievementGroup}{acount - 1}"), session); userBadgeComponent.GiveBadge($"{achievementGroup}{acount}", true, session); if (levelEndCheck > count) levelEndCheck = count; user.ActivityPoints += targetLevelData.RewardPixels; user.NotifyNewPixels(targetLevelData.RewardPixels); user.UpdateActivityPointsBalance(); session.SendMessage(AchievementUnlockedComposer.Compose(achievement, acount, targetLevelData.RewardPoints, targetLevelData.RewardPixels)); using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery(string.Concat("REPLACE INTO users_achievements VALUES (", user.Id, ", @group, ", achievementLevel, ", ", progress, ")")); queryReactor.AddParameter("group", achievementGroup); queryReactor.RunQuery(); } userAchievement.Value.SetLevel(achievementLevel); userAchievement.Value.SetProgress(progress); user.AchievementPoints += targetLevelData.RewardPoints; user.NotifyNewPixels(targetLevelData.RewardPixels); user.ActivityPoints += targetLevelData.RewardPixels; user.UpdateActivityPointsBalance(); session.SendMessage(AchievementScoreUpdateComposer.Compose(user.AchievementPoints)); UserAchievement? achievementData = user.GetAchievementData(achievementGroup); if (achievementData != null) session.SendMessage(AchievementProgressComposer.Compose(achievement, levelEndCheck, achievement.Levels[levelEndCheck], count, achievementData.Value)); Talent talent; if (Azure.GetGame().GetTalentManager().TryGetTalent(achievementGroup, out talent)) Azure.GetGame().GetTalentManager().CompleteUserTalent(session, talent); return true; } userAchievement.Value.SetLevel(achievementLevel); userAchievement.Value.SetProgress(progress); using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor()) { queryreactor2.SetQuery(string.Concat("REPLACE INTO users_achievements VALUES (", session.GetHabbo().Id, ", @group, ", achievementLevel, ", ", progress, ")")); queryreactor2.AddParameter("group", achievementGroup); queryreactor2.RunQuery(); } var messageHandler = session.GetMessageHandler(); if (messageHandler != null) { UserAchievement? achievementData = user.GetAchievementData(achievementGroup); if (achievementData != null) session.SendMessage(AchievementProgressComposer.Compose(achievement, acount, targetLevelData, count, achievementData.Value)); messageHandler.GetResponse().Init(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer")); messageHandler.GetResponse().AppendInteger(-1); messageHandler.GetResponse().AppendString(user.Look); messageHandler.GetResponse().AppendString(user.Gender.ToLower()); messageHandler.GetResponse().AppendString(user.Motto); messageHandler.GetResponse().AppendInteger(user.AchievementPoints); messageHandler.SendResponse(); return true; } } return false; }
public AchievementProgressedComposer(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) : base(ServerPacketHeader.AchievementProgressedMessageComposer) { base.WriteInteger(Achievement.Id); // Unknown (ID?) base.WriteInteger(TargetLevel); // Target level base.WriteString(Achievement.GroupName + TargetLevel); // Target name/desc/badge base.WriteInteger(1); // Progress req/target base.WriteInteger(TargetLevelData.Requirement); // Reward in Pixels base.WriteInteger(TargetLevelData.RewardPixels); // Reward Ach Score base.WriteInteger(0); // ? base.WriteInteger(UserData != null ? UserData.Progress : 0); // Current progress base.WriteBoolean(UserData != null ? (UserData.Level >= TotalLevels) : true); // Set 100% completed(??) base.WriteString(Achievement.Category); // Category base.WriteString(string.Empty); base.WriteInteger(TotalLevels); // Total amount of levels base.WriteInteger(0); }
public TalentTrackComposer(GameClient session, string trackType, List <Talent> talents) : base(ServerPacketHeader.TalentTrackMessageComposer) { WriteString(trackType); WriteInteger(talents.Count); int failLevel = -1; foreach (Talent current in talents) { WriteInteger(current.Level); int nm = failLevel == -1 ? 1 : 0; // TODO What does this mean? WriteInteger(nm); List <Talent> children = CloudServer.GetGame().GetTalentManager().GetTalents(trackType, current.Id); WriteInteger(children.Count); foreach (Talent child in children) { UserAchievement achievment = session.GetHabbo().GetAchievementData(child.AchievementGroup); if (child.GetAchievement() == null) { throw new NullReferenceException( string.Format("The following talent achievement can't be found: {0}", child.AchievementGroup)); } // TODO Refactor What does num mean?! var num = (failLevel != -1 && failLevel < child.Level) ? 0 : (session.GetHabbo().GetAchievementData(child.AchievementGroup) == null) ? 1 : (session.GetHabbo().GetAchievementData(child.AchievementGroup).Level >= child.AchievementLevel) ? 2 : 1; WriteInteger(child.GetAchievement().Id); WriteInteger(0); // TODO Magic constant WriteString(child.AchievementGroup + child.AchievementLevel); WriteInteger(num); WriteInteger(achievment != null ? achievment.Progress : 0); WriteInteger(child.GetAchievement() == null ? 0 : child.GetAchievement().Levels[child.AchievementLevel].Requirement); if (num != 2 && failLevel == -1) { failLevel = child.Level; } } WriteInteger(0); // TODO Magic constant // TODO Type should be enum? if (current.Type == "citizenship" && current.Level == 4) { WriteInteger(2); WriteString("HABBO_CLUB_VIP_7_DAYS"); WriteInteger(7); WriteString(current.Prize); // TODO Hardcoded stuff WriteInteger(0); } else { WriteInteger(1); WriteString(current.Prize); WriteInteger(0); } } }