From ff25ac618e82a498b8e8de6f2be95b6ceace0cd6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 31 Aug 2025 04:18:09 +0300 Subject: [PATCH] warrior makro --- .idea/.gitignore | 3 + .idea/inspectionProfiles/Project_Default.xml | 42 ++++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/vcs.xml | 6 + img/kalkan.png | Bin 0 -> 1241 bytes img/restore.png | Bin 0 -> 1059 bytes kalkan.png | Bin 0 -> 1241 bytes main.py | 196 +++++++++++++++ main.ui | 97 ++++++++ main1.py | 103 ++++++++ main2.py | 231 ++++++++++++++++++ restore.png | Bin 0 -> 1283 bytes ui_main.py | 65 +++++ 14 files changed, 753 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 img/kalkan.png create mode 100644 img/restore.png create mode 100644 kalkan.png create mode 100644 main.py create mode 100644 main.ui create mode 100644 main1.py create mode 100644 main2.py create mode 100644 restore.png create mode 100644 ui_main.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..a63cb3e --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,42 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..38e6557 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/img/kalkan.png b/img/kalkan.png new file mode 100644 index 0000000000000000000000000000000000000000..4f50fbbfee8c7fd1a3fd9142aefc53f7e4e2b0f0 GIT binary patch literal 1241 zcmV;~1Sb25P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1a3)0K~y+TJ(O8* z97Pm`zg}nWp2g!eK}l?!6*-AX-~k~4Mgo+FNIdWx_!s#}yz@X1LP7|T5($KYoj6WB zc2Doktu~@tUDH!tb?Tmb&pldW$;mY2($%0{{K%LjDYjv7^XdxUe)A>w?rbrf zc^sY`@#6I{rl)f->T^2iGU>-Wf7L~o^@gD%ptUT=`Tx=g{g9UH@M!NL@88{^Zo6d3 zn3-oXoA;Q^Bjy8-L6VX9bNVBXXZs!IXCakJ5j|6o|G{QyhQA0{Zn}K^*+bfm2D6#Q z!E`_`SP&-X7Lk~F-BZPy4wn`*1X)s;0Y*JU9f(=e7O6EcY~j#G49a$xAXoC2m{viESC+H!+J zxyaU5n~(Rt;L+p9+`e~@v}Um1f6GyS&Un0_f3^^iITa(8q$Q*Rno2EnHKc+Vh7nD- z#^tRIR+}p{T#IV0!BXQI?)omROSjm$xl6TLWAf&dmxqVEI_@w$o#Ta4hcFRfNuglr zspLV0t;v0DtxmmE=KkFsKKbk`%9SdaU6Ay|3_Axn&I*_78zfppR!xaRA3uS~Y(Xka zlT?5ul~O1PS!Ogz!TRckMB-rDDK~EIaQ(sO^4=o$M*RKkcYgipN2b#m#YRzb35zoi ztsvo8b`F*Yr$99+RU*OUVv&DMzL%^NrnD9t8L!hY%}VOI6gX%u1ctx2A6N|Qd(~F^!x94 z`t%3-!yeOlER-WsDPaHDV|?bTJYrd5L0MX1W5GS?Gep0rpc6}?o4P4kc!fjXq8LJyXG`1Su8zYux&P1 zD^v?*Nq7y%)p4p8r+z?q9*RRvm`!vFsfia&c{7-*I_FlGQ=Zo5&B|T zfwZ3LTUp?0;zUg=r*uAxnTWq8QAC_78HwQKR#eqmO{#tYs-jjpl{u$TR=t%sKpe&L zC<{}@pd9DIXcfJDQue6m6hPjNO6BTN2gsa~m8QYJS)vJ$pHBGk00000NkvXXu0mjf D@?}gb literal 0 HcmV?d00001 diff --git a/img/restore.png b/img/restore.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b86a34e465f19c2435fa3db637ad391218458d GIT binary patch literal 1059 zcmV+;1l;?HP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1Gq^{`s=%(R(2YdcT4UpS;02ZQ0ZX*}9={9xnZ36Kau0+xtJ zybTDdW0B6IEypLbuPD@we`-i%ejn(8-;@w- z(miRoUJ_li8ue@V7CcF?Gr57d#%~VNQjor74$hV5q52t21PUZTVlm$v1$qDYt=qRd z&>^Z2OxlTj?$=!xPS;Xf>!Eix{8=4r;RY?VCt)H?1f&Yp2E7&DhNFJ}Ni1L^@%n1Y z3W2w?r5JLex}lGtedi^IdL;y9)ZA5TsjVce;mgmomc8K8z+m-`##oQq>=}n?f`PqC~w)KtP5T=JF zkx>Nt3TE~#_&wnUkbPd5a#4?!PooGtn1u%_0oCD_=e`AJLSJjh<3^IT5M+OP$;Gg# z`|_xtoao6#bCA3F$;)kY32KoTxKsf9H>B)BTFz5*_W`Un_~$@7!X|Y;zBjv;y_`YR zBK#-OIVj0}Y4Ek|{AIejAI;w=S`v*%Bpmn&A2Jrv@002ovPDHLkV1j9%@go2L literal 0 HcmV?d00001 diff --git a/kalkan.png b/kalkan.png new file mode 100644 index 0000000000000000000000000000000000000000..4f50fbbfee8c7fd1a3fd9142aefc53f7e4e2b0f0 GIT binary patch literal 1241 zcmV;~1Sb25P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1a3)0K~y+TJ(O8* z97Pm`zg}nWp2g!eK}l?!6*-AX-~k~4Mgo+FNIdWx_!s#}yz@X1LP7|T5($KYoj6WB zc2Doktu~@tUDH!tb?Tmb&pldW$;mY2($%0{{K%LjDYjv7^XdxUe)A>w?rbrf zc^sY`@#6I{rl)f->T^2iGU>-Wf7L~o^@gD%ptUT=`Tx=g{g9UH@M!NL@88{^Zo6d3 zn3-oXoA;Q^Bjy8-L6VX9bNVBXXZs!IXCakJ5j|6o|G{QyhQA0{Zn}K^*+bfm2D6#Q z!E`_`SP&-X7Lk~F-BZPy4wn`*1X)s;0Y*JU9f(=e7O6EcY~j#G49a$xAXoC2m{viESC+H!+J zxyaU5n~(Rt;L+p9+`e~@v}Um1f6GyS&Un0_f3^^iITa(8q$Q*Rno2EnHKc+Vh7nD- z#^tRIR+}p{T#IV0!BXQI?)omROSjm$xl6TLWAf&dmxqVEI_@w$o#Ta4hcFRfNuglr zspLV0t;v0DtxmmE=KkFsKKbk`%9SdaU6Ay|3_Axn&I*_78zfppR!xaRA3uS~Y(Xka zlT?5ul~O1PS!Ogz!TRckMB-rDDK~EIaQ(sO^4=o$M*RKkcYgipN2b#m#YRzb35zoi ztsvo8b`F*Yr$99+RU*OUVv&DMzL%^NrnD9t8L!hY%}VOI6gX%u1ctx2A6N|Qd(~F^!x94 z`t%3-!yeOlER-WsDPaHDV|?bTJYrd5L0MX1W5GS?Gep0rpc6}?o4P4kc!fjXq8LJyXG`1Su8zYux&P1 zD^v?*Nq7y%)p4p8r+z?q9*RRvm`!vFsfia&c{7-*I_FlGQ=Zo5&B|T zfwZ3LTUp?0;zUg=r*uAxnTWq8QAC_78HwQKR#eqmO{#tYs-jjpl{u$TR=t%sKpe&L zC<{}@pd9DIXcfJDQue6m6hPjNO6BTN2gsa~m8QYJS)vJ$pHBGk00000NkvXXu0mjf D@?}gb literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..d666130 --- /dev/null +++ b/main.py @@ -0,0 +1,196 @@ +from PySide6.QtWidgets import QApplication, QMainWindow +from PySide6.QtCore import QThread, Signal, QObject +import keyboard +import sys +import time +import os +import ctypes +import pyautogui +from python_imagesearch.imagesearch import imagesearch +import random +from ui_main import Ui_MainWindow + + +MOUSEEVENTF_LEFTDOWN = 0x0002 +MOUSEEVENTF_LEFTUP = 0x0004 +MOUSEEVENTF_RIGHTDOWN = 0x0008 +MOUSEEVENTF_RIGHTUP = 0x0010 + +def get_resource_path(relative_path): + if hasattr(sys, '_MEIPASS'): + return os.path.join(sys._MEIPASS, relative_path) + return os.path.join(os.path.abspath("."), relative_path) + +class MacroWorker(QObject): + finished = Signal() + status_update = Signal(str) + + def __init__(self, macros): + super().__init__() + self.macros = macros + self.running = True + # kalkanimg = self.base_path = get_resource_path(os.path.join("img", "kalkan.png")) + # restimg = self.base_path = get_resource_path(os.path.join("img", "restore.png")) + + def run(self): + try: + while self.running: + for macro_name, macro_data in self.macros.items(): + if macro_data['enabled']: + self.execute_macro(macro_name) + time.sleep(0.1) # Makrolar arası bekleme + except Exception as e: + self.status_update.emit(f"Hata: {str(e)}") + finally: + self.finished.emit() + + def execute_macro(self, macro_name): + actions = self.macros[macro_name]['actions'] + self.status_update.emit(f"{macro_name} çalıştırılıyor...") + + for action in actions: + if not self.running: + break + + if action['type'] == 'press': + keyboard.press(action['key']) + elif action['type'] == 'release': + keyboard.release(action['key']) + elif action['type'] == 'delay': + time.sleep(action['duration']) + + def stop(self): + self.running = False + + +class MainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + # Makro tanımları + self.macros = { + 'Atak': { + 'enabled': False, + 'actions': [ + {'type': 'press', 'key': 'r'}, + {'type': 'delay', 'duration': 0.1}, + {'type': 'release', 'key': 'r'}, + {'type': 'press', 'key': 'r'}, + {'type': 'delay', 'duration': 0.1}, + {'type': 'release', 'key': 'r'}, + {'type': 'press', 'key': '2'}, + {'type': 'delay', 'duration': 0.1}, + {'type': 'release', 'key': '2'} + ] + }, + 'Kalkan Tak': { + 'enabled': False, + 'actions': [ + { + 'type': 'conditional_image_search', + 'image': 'kalkan.png', + 'region': (150, 411, 130, 86), + 'precision': 0.8, + 'if_found': [ + {'type': 'mouse_move', 'x': 'found_x', 'y': 'found_y+60'}, + {'type': 'mouse_rclick'}], + 'if_not_found': [] + } + ] + }, + 'Restore Sil': { + 'enabled': False, + 'actions': [ + { + 'type': 'conditional_image_search', + 'image': 'restore.png', + 'region': (719, 456, 489, 118), + 'precision': 0.5, + 'if_found': [ + {'type': 'mouse_move', 'x': 'found_x', 'y': 'found_y'}, + {'type': 'mouse_doubleclick'}], + 'if_not_found': [] + } + ] + }, + 'Kılıç Sil': { + 'enabled': False, + 'actions': [ + {'type': 'press', 'key': 'f4'}, + {'type': 'delay', 'duration': 0.1}, + {'type': 'release', 'key': 'f4'} + ] + } + } + + # Thread ve worker için değişkenler + self.thread = None + self.worker = None + + # UI bağlantıları + self.ui.btn_baslat.clicked.connect(self.toggle_macro) + self.ui.chk_atak.stateChanged.connect(lambda: self.update_macro_state('Atak', self.ui.chk_atak)) + self.ui.chk_kalkan.stateChanged.connect(lambda: self.update_macro_state('Kalkan Tak', self.ui.chk_kalkan)) + self.ui.chk_restore.stateChanged.connect(lambda: self.update_macro_state('Restore Sil', self.ui.chk_restore)) + self.ui.chk_kilic.stateChanged.connect(lambda: self.update_macro_state('Kılıç Sil', self.ui.chk_kilic)) + + # Başlangıç durumu + self.macro_running = False + + def update_macro_state(self, macro_name, checkbox): + self.macros[macro_name]['enabled'] = checkbox.isChecked() + + def toggle_macro(self): + if self.macro_running: + self.stop_macro() + self.ui.btn_baslat.setText("Makro Başlat") + else: + self.start_macro() + self.ui.btn_baslat.setText("Makro Durdur") + + def start_macro(self): + if not any(macro['enabled'] for macro in self.macros.values()): + self.ui.statusbar.showMessage("En az bir makro seçmelisiniz!", 3000) + return + + self.macro_running = True + + # Thread ve worker oluştur + self.thread = QThread() + self.worker = MacroWorker(self.macros) + self.worker.moveToThread(self.thread) + + # Signal-slot bağlantıları + self.thread.started.connect(self.worker.run) + self.worker.finished.connect(self.thread.quit) + self.worker.finished.connect(self.worker.deleteLater) + self.thread.finished.connect(self.thread.deleteLater) + self.worker.status_update.connect(self.update_status) + + # Thread'i başlat + self.thread.start() + + self.ui.statusbar.showMessage("Makro çalışıyor...") + + def stop_macro(self): + if self.worker: + self.worker.stop() + self.macro_running = False + self.ui.statusbar.showMessage("Makro durduruldu", 3000) + + def update_status(self, message): + self.ui.statusbar.showMessage(message, 1000) + + def closeEvent(self, event): + if self.macro_running: + self.stop_macro() + event.accept() + + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = MainWindow() + window.show() + sys.exit(app.exec()) \ No newline at end of file diff --git a/main.ui b/main.ui new file mode 100644 index 0000000..53b4ee1 --- /dev/null +++ b/main.ui @@ -0,0 +1,97 @@ + + + MainWindow + + + + 0 + 0 + 283 + 156 + + + + Discord + + + + + + 10 + 40 + 111 + 20 + + + + Kalkan Tak + + + + + + 10 + 60 + 111 + 20 + + + + Restore Sil + + + + + + 10 + 80 + 111 + 20 + + + + Kılıç Sil + + + + + + 10 + 20 + 111 + 20 + + + + Atak + + + + + + 160 + 40 + 91 + 41 + + + + Makro Başlat + + + + + + + 0 + 0 + 283 + 22 + + + + + + + + diff --git a/main1.py b/main1.py new file mode 100644 index 0000000..04b483c --- /dev/null +++ b/main1.py @@ -0,0 +1,103 @@ +import pyautogui +import keyboard +import time +from python_imagesearch.imagesearch import imagesearch + + +class MacroManager: + def __init__(self): + self.macros = { + 'Atak': {'enabled': False, 'func': self.atak_macro}, + 'Kalkan Tak': {'enabled': False, 'func': self.kalkan_tak_macro}, + 'Restore Sil': {'enabled': False, 'func': self.restore_sil_macro}, + 'Kılıç Sil': {'enabled': False, 'func': self.kilic_sil_macro} + } + self.running = False + + # MAKRO FONKSİYONLARI + def atak_macro(self): + """R tuşuna 2 kez basıp 2 tuşuna basar""" + keyboard.press('r') + time.sleep(0.1) + keyboard.release('r') + keyboard.press('r') + time.sleep(0.1) + keyboard.release('r') + keyboard.press('2') + time.sleep(0.1) + keyboard.release('2') + + def kalkan_tak_macro(self): + try: + pos = imagesearch(image_path) + if pos[0] == -1: + return # Hiçbir şey yapma + + # Görsel bulundu, işlemleri yap + pyautogui.moveTo(pos[0], pos[1]+60, duration=0.5) + pyautogui.rclick() + + except Exception as e: + print(f"Hata oluştu ama işleme devam ediliyor: {e}") + # Hata durumunda da hiçbir şey yapmıyoruz + + # Kullanım: + safe_image_operation("kalkan.png") + + def restore_sil_macro(self): + """F3 tuşuna basarak restore siler""" + keyboard.press('f3') + time.sleep(0.1) + keyboard.release('f3') + + def kilic_sil_macro(self): + """F4 tuşuna basarak kılıç siler""" + keyboard.press('f4') + time.sleep(0.1) + keyboard.release('f4') + + + + # MAKRO YÖNETİM FONKSİYONLARI + def toggle_macro(self, macro_name): + """Makroyu aktif/pasif yapar""" + if macro_name in self.macros: + self.macros[macro_name]['enabled'] = not self.macros[macro_name]['enabled'] + status = "aktif" if self.macros[macro_name]['enabled'] else "pasif" + print(f"{macro_name} makrosu {status} hale getirildi") + + def run_macros(self): + """Aktif makroları çalıştırır""" + try: + while self.running: + for macro_name, macro_data in self.macros.items(): + if macro_data['enabled']: + macro_data['func']() # İlgili makro fonksiyonunu çağır + time.sleep(0.05) # CPU kullanımını azaltmak için + except Exception as e: + print(f"Hata oluştu: {str(e)}") + + def start(self): + """Makro sistemini başlatır""" + self.running = True + self.run_macros() + + def stop(self): + """Makro sistemini durdurur""" + self.running = False + + +# KULLANIM ÖRNEĞİ +if __name__ == "__main__": + manager = MacroManager() + + # Makroları aktifleştirme + manager.toggle_macro('Atak') + manager.toggle_macro('Düşman Bul ve Saldır') + + try: + print("Makrolar çalışıyor... (Durdurmak için CTRL+C)") + manager.start() + except KeyboardInterrupt: + manager.stop() + print("Makrolar durduruldu") \ No newline at end of file diff --git a/main2.py b/main2.py new file mode 100644 index 0000000..a9c7226 --- /dev/null +++ b/main2.py @@ -0,0 +1,231 @@ +import sys +import os +import keyboard +import pyautogui +import time +import ctypes +from python_imagesearch.imagesearch import imagesearch +from PySide6.QtWidgets import QApplication, QMainWindow +from PySide6.QtCore import QThread, Signal, QObject +from ui_main import Ui_MainWindow + +MOUSEEVENTF_LEFTDOWN = 0x0002 +MOUSEEVENTF_LEFTUP = 0x0004 +MOUSEEVENTF_RIGHTDOWN = 0x0008 +MOUSEEVENTF_RIGHTUP = 0x0010 + +def get_resource_path(relative_path): + """ Resimlere erişmek için doğru yolu oluşturur """ + try: + base_path = sys._MEIPASS # PyInstaller için + except Exception: + base_path = os.path.abspath(".") + + return os.path.join(base_path, relative_path) + + +class MacroWorker(QObject): + finished = Signal() + status_update = Signal(str) + + def __init__(self, macro_manager): + super().__init__() + self.macro_manager = macro_manager + self.running = True + + def run(self): + try: + while self.running: + self.macro_manager.run_macros() + time.sleep(0.05) + except Exception as e: + self.status_update.emit(f"Hata: {str(e)}") + finally: + self.finished.emit() + + +class MacroManager: + def __init__(self): + self.macros = { + 'Atak': {'enabled': False, 'func': self.atak_macro}, + 'Kalkan Tak': {'enabled': False, 'func': self.kalkan_tak_macro}, + 'Restore Sil': {'enabled': False, 'func': self.restore_sil_macro}, + 'Kılıç Sil': {'enabled': False, 'func': self.kilic_sil_macro} + } + + # Resim yollarını tanımla + self.image_paths = { + 'kalkan': get_resource_path(os.path.join("img", "kalkan.png")), + 'restore': get_resource_path(os.path.join("img", "restore.png")) + # Diğer resimler buraya eklenebilir + } + + # MAKRO FONKSİYONLARI + @staticmethod + def atak_macro(): + keyboard.press('r') + time.sleep(0.1) + keyboard.release('r') + time.sleep(0.5) + keyboard.press('r') + time.sleep(0.1) + keyboard.release('r') + time.sleep(0.5) + keyboard.press('2') + time.sleep(0.1) + keyboard.release('2') + + def kalkan_tak_macro(self): + """F tuşuna basıldığında bir kez çalışacak kalkan takma fonksiyonu""" + try: + # F tuşunun basılı olup olmadığını kontrol et + if not keyboard.is_pressed('f'): + return + + # Resmi ara + pos = imagesearch(self.image_paths['kalkan']) + if pos[0] == -1: + return # Görsel bulunamazsa hiçbir şey yapma + + # Görsel bulundu, işlemleri yap + pyautogui.moveTo(pos[0], pos[1] + 60, duration=0.1) + rclick(pos[0], pos[1] + 60) + + # Tuş bırakılana kadar bekle (tekrar tetiklenmesini önle) + while keyboard.is_pressed('f'): + time.sleep(0.01) + + except Exception as e: + print(f"Kalkan takma hatası: {e}") + + def restore_sil_macro(self): + """Ekranda restore görselini bulunca duble click (seri iki sol tıklama) yapar""" + try: + # Resim yolunu kontrol et + if 'restore' not in self.image_paths: + print("Restore resim yolu tanımlı değil!") + return + + # Resmi ara + pos = imagesearch(self.image_paths['restore']) + if pos[0] == -1: + return # Görsel bulunamazsa hiçbir şey yapma + + # Görsel bulundu, işlemleri yap + x, y = pos[0], pos[1] + + # Duble click için fareyi konuma getir + ctypes.windll.user32.SetCursorPos(x + 5, y + 5) + + # DUBLE CLICK (hızlı ardışık iki sol tıklama) + for _ in range(2): + ctypes.windll.user32.mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) + ctypes.windll.user32.mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) + time.sleep(0.03) # Çok kısa bekleme ile gerçekçi duble click + + except Exception as e: + print(f"Restore silme hatası: {e}") + + + + @staticmethod + def kilic_sil_macro(): + keyboard.press('f4') + time.sleep(0.1) + keyboard.release('f4') + + def run_macros(self): + for macro_name, macro_data in self.macros.items(): + if macro_data['enabled']: + macro_data['func']() + + +class MainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + self.macro_manager = MacroManager() + self.worker = None + self.thread = None + + # UI bağlantıları + self.ui.chk_atak.stateChanged.connect( + lambda: self.toggle_macro('Atak', self.ui.chk_atak)) + self.ui.chk_kalkan.stateChanged.connect( + lambda: self.toggle_macro('Kalkan Tak', self.ui.chk_kalkan)) + self.ui.chk_restore.stateChanged.connect( + lambda: self.toggle_macro('Restore Sil', self.ui.chk_restore)) + self.ui.chk_kilic.stateChanged.connect( + lambda: self.toggle_macro('Kılıç Sil', self.ui.chk_kilic)) + + self.ui.btn_baslat.clicked.connect(self.toggle_macro_execution) + + def toggle_macro(self, macro_name, checkbox): + self.macro_manager.macros[macro_name]['enabled'] = checkbox.isChecked() + + def toggle_macro_execution(self): + if self.worker and self.worker.running: + self.stop_macros() + self.ui.btn_baslat.setText("Makro Başlat") + else: + self.start_macros() + self.ui.btn_baslat.setText("Makro Durdur") + + def start_macros(self): + self.thread = QThread() + self.worker = MacroWorker(self.macro_manager) + self.worker.moveToThread(self.thread) + + self.thread.started.connect(self.worker.run) + self.worker.finished.connect(self.thread.quit) + self.worker.finished.connect(self.worker.deleteLater) + self.thread.finished.connect(self.thread.deleteLater) + self.worker.status_update.connect( + lambda msg: self.ui.statusbar.showMessage(msg, 2000)) + + self.thread.start() + + def stop_macros(self): + if self.worker: + self.worker.running = False + + def closeEvent(self, event): + self.stop_macros() + event.accept() + +def click(x, y): + ctypes.windll.user32.SetCursorPos(x, y) + ctypes.windll.user32.mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) + time.sleep(0.3) + ctypes.windll.user32.mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) + + +def rclick(x, y): + ctypes.windll.user32.SetCursorPos(x, y) + ctypes.windll.user32.mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) + time.sleep(0.3) + ctypes.windll.user32.mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0) + + +def double_click(x, y): + """Belirtilen konuma hızlı ardışık iki sol tıklama yapar""" + ctypes.windll.user32.SetCursorPos(x, y) + for _ in range(2): + ctypes.windll.user32.mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) + ctypes.windll.user32.mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) + time.sleep(0.03) # Gerçekçi duble click için + + +if __name__ == "__main__": + # Resim klasörünün varlığını kontrol et + img_dir = os.path.join(os.path.dirname(__file__), "img") + if not os.path.exists(img_dir): + os.makedirs(img_dir) + print(f"'img' klasörü oluşturuldu: {img_dir}") + + app = QApplication(sys.argv) + window = MainWindow() + window.show() + sys.exit(app.exec()) diff --git a/restore.png b/restore.png new file mode 100644 index 0000000000000000000000000000000000000000..f37ffc72a064d93c346bc7d57e9b1fb9626b191d GIT binary patch literal 1283 zcmV+e1^oJnP)P0015c1^@s6+3dC300001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1ei%gK~zXfWtJ~^ zBR3Gm$4QBysNqt>Ei~M~KnEVQVWABJd$cU3WoH`JrN_=RtV<0=&D`I6(ypC!zHe62 z{ClI3H1_Q6*T2`uIbwiCDHU!sT3~S@Y^vEOl8NNRNKCR~N!B!uHH&t4jbV^!#Ci?4 z1weGdSUNc=5pz*ZB-6Huwrith-s3YIdrgRguIm6v>#L1-n*t!}2`nQ4)SxX92Eej_ z?noGG{IrLo1OPfI0S&}pCyy~-zIq3nl}u2g`1_qC2zXY&xg)LGW#lwB#{$7T0o>ra zil3(;`ktU4XYBE57w84X8h(t$^Q!@tIKB%2W3o+Y!A{#a&*yO=n%3cg*xLx^J&()yDk&XUso7uuU;XIcF!aXksAPw^b9*%Z2Yl z$EPRgyOPo^90A1I!3ZSM`H<{y4NkgtMaaRY249R}WiLO?b#q!qSvGvu`1|r{hq@5R zbuog9TaoLn#OFbZfrC4pPQhTC{av8*@V+{MJi0?3a zce2i|3=d@n$wQClbb!m@w?z9Bv4BSsnBDmZNC%t0?>+k9d;G^(HWY}qC8A6g3IJMf zHnD;C+imo6hE4=J9*@4R37Mps^(T_8VhW@t@o;M=We{z4J9gX|VBkTi!~)trJ;nCr zC0-c!`@LNX)K}sOsHOrmh-}2#BDCJ@&}9H#JX#K)=m7Vx{dhRg7zVC5o#G3nMi&S_ zm(b-R7Zwe|HCHZEHU*eyEl@^E;9GY`2bBtYB{q=`9nNk`I5PLaC+guFlydaCKP_!W z)G;at7H&q zN77lZcc3`yj{G{C&eGejt1p-W4(gngs>FquD3~%;N%WR@JC6MJ16v%A*sI%03W!Tf zd)Mx=s=`g2#T!3bB0VNs5MWA}wE;^>1eW*PqGxBpBfQb%R0+qH#299=`KN#!20!KXl4e<7FhPA?xNl5{4rcNwdZuAh|x6yG^}%4gD5n$~xG2YPEOA}Iu-?pd># z9KM21L8{Kl$rrY*bQ(txJ0P&JoM0XJ*cv8>3hK3nI!-{9N06#7ATDtgPHasb^{LJd zFmg4rnonI$qls2uCPLxD5!^jz+>O`?K$=@eaFxWZLpwtzwjSN5-AnGa!d#RkNH-vz ziyW;hgV&Pt^J}&q_U&VaU-Egv7L*S=sS&C}dDU`c7+EAaLHtXqB*xO&zL0#SvTTe4 zxj_~xuXWOo0Jf7*3F=dTd?Y3r@bhe7T<(*qbZhk*u#ifXa7(jYah8oUrIRY4%6iMF z>X1uUMNkQTD_4mqq)=Om8Hs3^l%Maehq0LR>Dp+$A6Cs^sgt$&1(Pv002ovPDHLkV1iD^OF{qu literal 0 HcmV?d00001 diff --git a/ui_main.py b/ui_main.py new file mode 100644 index 0000000..297a1d9 --- /dev/null +++ b/ui_main.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'mainGZHzyo.ui' +## +## Created by: Qt User Interface Compiler version 6.4.3 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QApplication, QCheckBox, QMainWindow, QMenuBar, + QPushButton, QSizePolicy, QStatusBar, QWidget) + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + if not MainWindow.objectName(): + MainWindow.setObjectName(u"MainWindow") + MainWindow.resize(283, 156) + self.centralwidget = QWidget(MainWindow) + self.centralwidget.setObjectName(u"centralwidget") + self.chk_kalkan = QCheckBox(self.centralwidget) + self.chk_kalkan.setObjectName(u"chk_kalkan") + self.chk_kalkan.setGeometry(QRect(10, 40, 111, 20)) + self.chk_restore = QCheckBox(self.centralwidget) + self.chk_restore.setObjectName(u"chk_restore") + self.chk_restore.setGeometry(QRect(10, 60, 111, 20)) + self.chk_kilic = QCheckBox(self.centralwidget) + self.chk_kilic.setObjectName(u"chk_kilic") + self.chk_kilic.setGeometry(QRect(10, 80, 111, 20)) + self.chk_atak = QCheckBox(self.centralwidget) + self.chk_atak.setObjectName(u"chk_atak") + self.chk_atak.setGeometry(QRect(10, 20, 111, 20)) + self.btn_baslat = QPushButton(self.centralwidget) + self.btn_baslat.setObjectName(u"btn_baslat") + self.btn_baslat.setGeometry(QRect(160, 40, 91, 41)) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QMenuBar(MainWindow) + self.menubar.setObjectName(u"menubar") + self.menubar.setGeometry(QRect(0, 0, 283, 22)) + MainWindow.setMenuBar(self.menubar) + self.statusbar = QStatusBar(MainWindow) + self.statusbar.setObjectName(u"statusbar") + MainWindow.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow) + + QMetaObject.connectSlotsByName(MainWindow) + # setupUi + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Discord", None)) + self.chk_kalkan.setText(QCoreApplication.translate("MainWindow", u"Kalkan Tak", None)) + self.chk_restore.setText(QCoreApplication.translate("MainWindow", u"Restore Sil", None)) + self.chk_kilic.setText(QCoreApplication.translate("MainWindow", u"K\u0131l\u0131\u00e7 Sil", None)) + self.chk_atak.setText(QCoreApplication.translate("MainWindow", u"Atak", None)) + self.btn_baslat.setText(QCoreApplication.translate("MainWindow", u"Makro Ba\u015flat", None)) + # retranslateUi +