/// <summary> /// 個人が予約しているデータの取得 /// </summary> /// <returns></returns> private ReservationData MessageToUserReservationData() { var splitMessageContent = m_userMessage.Content .Split(new[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries); if (splitMessageContent.Length != 4 || !ulong.TryParse(splitMessageContent[1], out ulong userID) || !(byte.TryParse(splitMessageContent[2], out byte battleLap) && battleLap > 0) || !(byte.TryParse(splitMessageContent[3], out byte bossNumber) && bossNumber <= MaxBossNumber && bossNumber >= MinBossNumber)) { return(null); } var playerData = new MySQLPlayerDataController() .LoadPlayerData(m_userClanData.ServerID, userID); if (playerData == null) { return(null); } return(new MySQLReservationController() .LoadReservationData(playerData) .FirstOrDefault(d => d.BattleLap == battleLap && d.BossNumber == bossNumber)); }
private IEnumerable <DeclarationData> DeclareDataOnSQL(ulong userID) { var userRole = m_userRole; var playerData = new MySQLPlayerDataController().LoadPlayerData( userRole.Guild.Id, userID); var declarationData = new MySQLDeclarationController() .LoadDeclarationData(playerData); return(declarationData); }
/// <summary> /// userID情報からDeclarationDataを作成します。 /// ボス情報はclanDataから読み出して使用します。 /// </summary> /// <param name="userID"></param> /// <returns></returns> private DeclarationData UserToDeclareData(ulong userID) { var userClanData = m_userClanData; var userRole = m_userRole; var playerData = new MySQLPlayerDataController().LoadPlayerData( userRole.Guild.Id, userID); return(new DeclarationData() { PlayerID = playerData.PlayerID, BattleLap = userClanData.BattleLap, BossNumber = userClanData.BossNumber, FinishFlag = false }); }
/// <summary> /// SQLサーバー側とDiscord側のプレイヤーデータ同期 /// </summary> /// <param name="guild"></param> public void UpdatePlayerData(SocketGuild guild) { var playerDataControler = new MySQLPlayerDataController(); // サーバー上のクランメンバー var usersOnDiscord = GetServerClanMember(guild); // テーブル上のプレイヤーデータ var usersOnSQLServer = new MySQLPlayerDataController().LoadPlayerData(guild.Id); #region テーブルにユーザを追加・更新 var createUserData = new List <PlayerData>(); var updateUserData = new List <PlayerData>(); foreach (PlayerData discordUser in usersOnDiscord) { var sameNameFlag = false; var existFlag = false; foreach (PlayerData mySQLUser in usersOnSQLServer) { if (mySQLUser.UserID == discordUser.UserID && mySQLUser.ClanData.ClanRoleID == discordUser.ClanData.ClanRoleID) { existFlag = true; if (mySQLUser.GuildUserName == discordUser.GuildUserName) { sameNameFlag = true; } } } if (!existFlag) { createUserData.Add(discordUser); } else if (!sameNameFlag) { updateUserData.Add(discordUser); } } playerDataControler.CreatePlayerData(createUserData); playerDataControler.UpdatePlayerData(updateUserData);
/// <summary> /// 本戦が終了した際のコード /// </summary> /// <returns></returns> private bool UserFinishBattleCommand() { var userRole = m_userRole; var userClanData = m_userClanData; var userReaction = m_userReaction; // すでに宣言しているか判定 var sqlData = DeclareDataOnSQL(userReaction.UserId) .Count(d => d.FinishFlag == false); if (sqlData != 1) { return(false); } // 宣言終了 var declarationData = UserToDeclareData(userReaction.UserId); declarationData.FinishFlag = true; var result = new MySQLDeclarationController() .UpdateDeclarationData(declarationData); // 予約の削除 var playerData = new MySQLPlayerDataController().LoadPlayerData( userRole.Guild.Id, userReaction.UserId); var mySQLReservationController = new MySQLReservationController(); var reservationData = mySQLReservationController.LoadReservationData(playerData); var finishReservationData = reservationData .FirstOrDefault(d => d.BattleLap == userClanData.BattleLap && d.BossNumber == userClanData.BossNumber); if (finishReservationData != null) { mySQLReservationController.DeleteReservationData(finishReservationData); } return(result); }