// AutoClick 활성 여부 체크 private void AutoClickCheck() { if (isAutoClick) { TimerAutoClick.Start(); } else { TimerAutoClick.Stop(); } }
private void MainForm_Load(object sender, EventArgs e) { // SubMenu 비활성화 PanelKakaoSubMenu.Visible = false; PanelOptionSubMenu.Visible = false; // 타이머 설정 TimerAutoClick.Interval = 500; TimerAutoClick.Stop(); TimerFormRect.Interval = 50; TimerFormRect.Stop(); TimerClientInit.Interval = 500; TimerClientInit.Start(); // 프로세스(롤 클라이언트) 종료 이벤트 riotClientManager.LeagueClosed += () => { // 크로스 쓰레드 방지 this.Invoke((MethodInvoker) delegate { //Console.WriteLine("클라이언트 종료"); // 타이머 설정 TimerClientInit.Start(); TimerFormRect.Stop(); // 프로그램 옵션 변수 초기화 OptionDataInit(); // 클라이언트 변수 초기화 GlobalClientData.clientProcess = null; riotClientManager.isClientConnect = false; riotClientManager.currentSummonerName = null; // 마우스 폼 이동 이벤트 this.PanelStateLayer.MouseDown += new MouseEventHandler(this.PanelStateLayer_MouseDown); this.PanelStateLayer.MouseMove += new MouseEventHandler(this.PanelStateLayer_MouseMove); // UI 변경 LabelClientConnect.Text = "클라이언트 연결 끊김"; LabelClientConnect.ForeColor = Color.DarkRed; }); }; // 첫 실행시 오토클릭 활성화 BtnAutoClick_Click(sender, e); }
// 게임 시작 이벤트 private void GameClientStartEvent() { // 게임 클라이언트 찾기 GlobalClientData.gameClientProcess = Process.GetProcessesByName(GlobalClientData.GAME_CLIENT_NAME)[0]; GlobalClientData.gameClientProcess.EnableRaisingEvents = true; GlobalClientData.gameClientProcess.Exited += GameClientProcess_Exited; // 로그인 상태면 게임 시작 메시지 보내기 if (GlobalState.isLogin) { kakaoTalkManager.UsingApiEvent(KakaoTalkManager.HttpMethod.Post, GlobalApiEndPoint.KAKAO_URL_SEND_GAMESTARTMESSAGE); } // AutoClick 중지 TimerAutoClick.Stop(); }
// 타이머 시작 private void BtnAutoClick_Click(object sender, EventArgs e) { if (TimerAutoClick.Enabled.Equals(true)) { //Console.WriteLine("Timer STOP"); isAutoClick = false; TimerAutoClick.Stop(); BtnAutoClick.Height -= 20; BtnAutoClick.BackColor = Color.Transparent; BtnAutoClick.IconChar = FontAwesome.Sharp.IconChar.EyeSlash; } else { //Console.WriteLine("Timer START"); isAutoClick = true; TimerAutoClick.Start(); BtnAutoClick.Height += 20; BtnAutoClick.BackColor = Color.DarkGreen; BtnAutoClick.IconChar = FontAwesome.Sharp.IconChar.Eye; } }
// 자동 클릭 타이머 private async void TimerAutoClick_Tick(object sender, EventArgs e) { // 클라이언트가 연결 되지 않았으면 리턴 if (riotClientManager.isClientConnect != true) { //Console.WriteLine("AutoClick : 클라이언트 연결 끊김"); return; } // AutoClick 로직 try { //Console.WriteLine("AutoClick"); // 현제 매칭 상태 찾기 using (var jResult = await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Get, GlobalApiEndPoint.LOBBY_MATCHMAKING_STATE)) { string sResult = JsonConvert.DeserializeObject(await jResult.Content.ReadAsStringAsync()).ToString(); //Console.WriteLine($"게임 상태 : {sResult}"); switch (sResult) { case "Reconnect": case "None": case "Lobby": case "Matchmaking": // 매칭 데이터 변수 초기화 if (matchingUserData.userSummonerDictionary.Count > 0) { //Console.WriteLine("Event : userSummonerDictionary 초기화!"); matchingUserData.userSummonerDictionary.Clear(); } // 각 옵션 bool 변수 초기화 if (isAccept || isSendMessage || isPickMessage || isAutoRune || isMultiSearch) { //Console.WriteLine("Event : 상태 초기화!"); OptionDataInit(); } break; case "ReadyCheck": // 수락 상태 전이면~ if (!isAccept) { //Console.WriteLine("Event : 수락 버튼 누르기!"); // 매칭 딜레이 옵션 if (GlobalState.isAcceptDelay) { TimerAutoClick.Stop(); Thread.Sleep(9900); TimerAutoClick.Start(); } // 수락 버튼 클릭 await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Post, GlobalApiEndPoint.MATCHMAKING_CLICK); // 수락 체크 isAccept = true; } break; case "ChampSelect": // 로그인 상태 && 매칭 정보 메시지를 보내지 않았다면 if (GlobalState.isLogin && !isSendMessage) { //Console.WriteLine("Event : 매칭 정보 메시지 보내기!"); // 매칭 완료 메시지 보내기 kakaoTalkManager.UsingApiEvent(KakaoTalkManager.HttpMethod.Post, GlobalApiEndPoint.KAKAO_URL_SEND_MATCHINGMESSAGE); // 딕셔너리 초기화가 됐을 때 if (matchingUserData.userSummonerDictionary.Count == 0) { await MatchMakingDataSetting(); var messageJson = kakaoTalkManager.SendMessageJsonData(); // 기본 메시지 Json 얻기 // 보낼 메시지 내용 입력 messageJson.Add("text", $"매칭 타입 : {matchingUserData.queueType}\n" + $"진영 : {matchingUserData.myTeam}\n" + $"라인 : {matchingUserData.userSelectLines[matchingUserData.myPickCount]}\n" + $"픽 순서 : {matchingUserData.myPickCount + 1}픽"); // 매칭 데이터 메시지 보내기 kakaoTalkManager.UsingApiEvent(KakaoTalkManager.HttpMethod.Post, GlobalApiEndPoint.KAKAO_URL_SEND_PICKTURNMESSAGE, messageJson); } isSendMessage = true; } // 멀티 서치 else if (GlobalState.isMultiSearch && !isMultiSearch) { //Console.WriteLine("Event : 멀티 서치!"); // 멀티 서치 체크 isMultiSearch = true; // op.gg 멀티 서치 url string localPath = "https://www.op.gg/multi/query="; // 매칭 데이터가 null 이면~ if (matchingUserData.userSummonerDictionary.Count == 0) { //Console.WriteLine("Event : 멀티 서치 하기전 딕셔너리 초기화!"); await MatchMakingDataSetting(); } // 매칭 데이터의 소환사 아이다 값만 추출 foreach (var item in matchingUserData.userSummonerDictionary.Values) { //Console.WriteLine(item); localPath += item + "%2C"; } // 멀티 서치 홈페이지 실행 Process.Start(localPath); } // 픽 순서 체크 else if (GlobalState.isLogin && GlobalState.isPickTurn && !isPickMessage) { //Console.WriteLine("Event : 픽 시간 보내기!"); CurrentPickCheck(); } // 룬 설정 else if (GlobalState.isAutoRune && !isAutoRune) { //Console.WriteLine("Event : 오토 룬 설정"); // 현재 픽한 챔피언 요청 (챔피언 별 Int값으로 return) var message = await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Get, GlobalApiEndPoint.CHAMPSELECT_CURRENT_DATA); var championNum = Convert.ToInt32(await message.Content.ReadAsStringAsync()); // 0 = 봇, 을 제외한 if (championNum > 0) { //Console.WriteLine("Event : 오토 룬 설정중....!"); isAutoRune = true; // 챔피언 Json파일에서 현재 챔피언 추출 var champion = ChampionData.ChampionJsonData[championNum.ToString()]; matchingUserData.currentChampion = champion.ToString(); // 크롤링할 페이지 URL string opggUrl = "https://www.op.gg/champion/" + champion + "/statistics/"; // 크롤링 데이터 얻기 var json = riotRuneManager.GetRuneDataSetting(opggUrl); // 데이터를 얻었다면~ if (json != null) { // 룬 데이터 설정 json.Add("name", champion); // 현재 접속된 소환사 룬 페이지 데이터 얻기 (룬 페이지가 없거나, 룬 페이지가 꽉 찼을 때 예외 처리) var currentRuneMessage = await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Get, GlobalApiEndPoint.RUNE_PAGE_PAGES); var currentRune = JArray.Parse(await currentRuneMessage.Content.ReadAsStringAsync()); var currentId = currentRune[0]["id"].ToString(); // 룬 페이지 지우기 (54~51 롤 기본 룬 페이지) if (Convert.ToInt32(currentId) > 54) { await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Delete, GlobalApiEndPoint.RUNE_PAGE_PAGES + "/" + currentId); } // 1초 중지 Thread.Sleep(1000); // 룬 페이지 업데이트 await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Post, GlobalApiEndPoint.RUNE_PAGE_PAGES, json); } else { status = new StatusDisplay($"{champion}룬 설정중 오류가 발생했습니다...!", StatusDisplay.enumType.Error); } } } // 챔피언 스왑 판별 else if (isAutoRune) { //Console.WriteLine("Event : 스왑 판별"); // 현재 챔피언 데이터 얻기 var message1 = await riotClientManager.UsingApiEventHttpMessage(HttpMethod.Get, GlobalApiEndPoint.CHAMPSELECT_CURRENT_DATA); var championNum1 = Convert.ToInt32(await message1.Content.ReadAsStringAsync()); var champion = ChampionData.ChampionJsonData[championNum1.ToString()]; // 현재 챔피언이 이전과 동일한지 판별 if (!champion.ToString().Equals(matchingUserData.currentChampion)) { isAutoRune = false; } } break; case "InProgress": Console.WriteLine("Event : 게임 시작"); GameClientStartEvent(); break; } } } catch { } }