Ejemplo n.º 1
0
class AutoSSA:
    def __init__(self, root, AmuletPositions, HealthLocation, MOUSE_OPTION,
                 ItemsPath):
        self.AutoSSA = GUI('AutoSSA', 'Module: Auto SSA')
        self.AutoSSA.DefaultWindow('AutoAmulet', [306, 397], [1.2, 2.29])
        self.Setter = GUISetter("AmuletLoader")
        self.SendToClient = Hotkey(MOUSE_OPTION)
        self.ThreadManager = ThreadManager("ThreadAutoAmulet")

        def SetAutoAmulet():
            global EnabledAutoSSA
            if not EnabledAutoSSA:
                EnabledAutoSSA = True
                ButtonEnabled.configure(text='AutoSSA: ON',
                                        relief=SUNKEN,
                                        bg=rgb((158, 46, 34)))
                print("AutoSSA: ON")
                global Amulet
                Amulet = NameAmulet.get()
                Checking()
                CheckingButtons()
                time.sleep(0.03)
                if not ThreadStarted:
                    self.ThreadManager.NewThread(ScanAutoAmulet)
                else:
                    self.ThreadManager.UnPauseThread()
            else:
                EnabledAutoSSA = False
                ButtonEnabled.configure(text='AutoSSA: OFF',
                                        relief=RAISED,
                                        bg=rgb((127, 17, 8)))
                print("AutoSSA: OFF")
                Checking()
                CheckingButtons()
                self.ThreadManager.PauseThread()

        def ScanAutoAmulet():
            global Amulet
            Amulet = NameAmulet.get()
            if CheckLifeBellowThan.get():
                BellowThan = LifeBellowThan.get()
                from Modules.AutoHeal import EnabledAutoHeal
                if EnabledAutoHeal:
                    while EnabledAutoSSA and EnabledAutoHeal:
                        NoHasAmulet = ScanAmulet(AmuletPositions, Amulet,
                                                 Amulets[Amulet]["Precision"])

                        from Modules.AutoHeal import Life
                        if NoHasAmulet and Life <= BellowThan:
                            Execute()
                else:
                    from Engine.ScanStages import ScanStages
                    while EnabledAutoSSA:
                        Life = ScanStages('Life From AutoAmulet').ScanStages(
                            HealthLocation, LifeColor, LifeColorFull)

                        if Life is None:
                            Life = 0

                        NoHasAmulet = ScanAmulet(AmuletPositions, Amulet,
                                                 Amulets[Amulet]["Precision"])

                        if NoHasAmulet and Life < BellowThan:
                            Execute()
            elif not CheckLifeBellowThan.get():
                while EnabledAutoSSA:
                    NoHasAmulet = ScanAmulet(AmuletPositions, Amulet,
                                             Amulets[Amulet]["Precision"])

                    if NoHasAmulet:
                        Execute()

        def Execute():
            if RadioButton.get() == 0:
                self.SendToClient.Press(HotkeyAmulet.get())
                print("Pressed ", HotkeyAmulet.get(),
                      " To Reallocated Your Amulet")
                time.sleep(1)
            elif RadioButton.get() == 1:
                try:
                    X = int(TextEntryX.get())
                    Y = int(TextEntryY.get())
                except:
                    X = None
                    Y = None
                    print("Error To Get Type Of Position")
                    time.sleep(1)
                if X and Y is not None:
                    if X < WidthScreen and Y < HeightScreen:
                        if MOUSE_OPTION == 1:
                            MousePosition = self.SendToClient.Position()
                        else:
                            MousePosition = [0, 0]

                        self.SendToClient.DragTo(
                            [X, Y],
                            [AmuletPositions[0] + 16, AmuletPositions[1] + 16])

                        if MOUSE_OPTION == 1:
                            self.SendToClient.MoveTo(MousePosition[0],
                                                     MousePosition[1])

                        print("Amulet Reallocated On: X =",
                              AmuletPositions[0] + 16, "Y =",
                              AmuletPositions[1] + 16, "From: X =", X, "Y =",
                              Y)
                        time.sleep(0.3)
                    else:
                        print("Lower Resolution Than Entered")
                        time.sleep(1)

        def Recapture():
            global WaitingForClick, Amulet
            WaitingForClick = True
            Amulet = NameAmulet.get()
            AutoSSAWindow = pygetwindow.getWindowsWithTitle(
                "Module: Auto SSA")[0]
            TibiaAuto = pygetwindow.getWindowsWithTitle("TibiaAuto V12")[0]
            AutoSSAWindowX = self.AutoSSA.PositionOfWindow('X')
            AutoSSAWindowY = self.AutoSSA.PositionOfWindow('Y')
            time.sleep(0.1)
            TibiaAuto.minimize()
            AutoSSAWindow.minimize()
            Invisible = GUI('InvisibleWindow', 'InvisibleWindow')
            Invisible.InvisibleWindow('Recapture')
            while WaitingForClick:
                X, Y = GetPosition()
                if keyboard.is_pressed("c"):
                    sX, sY = GetPosition()
                    time.sleep(0.03)
                    from Core.HookWindow import SaveImage
                    SaveImage(ItemsPath + 'Amulets/' + Amulet + '.png',
                              Region=(sX - 6, sY - 28, sX + 6, sY - 16))
                    WaitingForClick = False
                    Invisible.destroyWindow()
                    TibiaAuto.maximize()
                    time.sleep(0.04)
                    AutoSSAWindow.maximize()
                    AutoSSAWindow.moveTo(AutoSSAWindowX, AutoSSAWindowY)
                    break
                Invisible.UpdateWindow(X, Y)

        def AddNewAmulet():
            print('Option In Development...')

        def CheckClick():
            Checking()

        def ReturnGetPosition():
            global WaitingForClick
            WaitingForClick = True
            AutoSSAWindow = pygetwindow.getWindowsWithTitle(
                "Module: Auto SSA")[0]
            TibiaAuto = pygetwindow.getWindowsWithTitle("TibiaAuto V12")[0]
            AutoSSAWindowX = self.AutoSSA.PositionOfWindow('X')
            AutoSSAWindowY = self.AutoSSA.PositionOfWindow('Y')
            time.sleep(0.1)
            TibiaAuto.minimize()
            AutoSSAWindow.minimize()
            Invisible = GUI('InvisibleWindow', 'InvisibleWindow')
            Invisible.InvisibleWindow('GetPosition')
            while WaitingForClick:
                X, Y = GetPosition()
                if keyboard.is_pressed("c"):
                    X, Y = GetPosition()
                    WaitingForClick = False
                    print(f"Your Click Is Located In: [X: {X}, Y: {Y}]")
                    TextEntryX.set(X)
                    TextEntryY.set(Y)
                    Invisible.destroyWindow()
                    TibiaAuto.maximize()
                    time.sleep(0.08)
                    AutoSSAWindow.maximize()
                    AutoSSAWindow.moveTo(AutoSSAWindowX, AutoSSAWindowY)
                    break
                Invisible.UpdateWindow(X, Y)

        def ValidateEntryX(*args):
            s = TextEntryX.get()
            if len(s) > MaxLen:
                if not s[-1].isdigit():
                    TextEntryX.set(s[:-1])
                else:
                    TextEntryX.set(s[:MaxLen])

        def ValidateEntryY(*args):
            s = TextEntryY.get()
            if len(s) > MaxLen:
                if not s[-1].isdigit():
                    TextEntryY.set(s[:-1])
                else:
                    TextEntryY.set(s[:MaxLen])

        WidthScreen, HeightScreen = pyautogui.size()

        VarCheckPrint, InitiatedCheckPrint = self.Setter.Variables.Bool(
            'CheckPrint')
        VarCheckBuff, InitiatedCheckBuff = self.Setter.Variables.Bool(
            'CheckBuff')

        RadioButton, InitiatedRadioButton = self.Setter.Variables.Int(
            'RadioButton')

        NameAmulet, InitiatedNameAmulet = self.Setter.Variables.Str(
            'NameAmulet')
        HotkeyAmulet, InitiatedHotkeyAmulet = self.Setter.Variables.Str(
            'HotkeyAmulet')

        TextEntryX, InitiatedTextEntryX = self.Setter.Variables.Str(
            'TextEntryX')
        TextEntryY, InitiatedTextEntryY = self.Setter.Variables.Str(
            'TextEntryY')

        CheckLifeBellowThan, InitiatedLifeBellowThan = self.Setter.Variables.Bool(
            'LifeBellowThan')
        LifeBellowThan, InitiatedBellowThan = self.Setter.Variables.Int(
            'BellowThan')

        def CheckingGUI(Init, Get, Name):
            if Get != Init:
                GUIChanges.append((Name, Get))

        def Destroy():
            CheckingGUI(InitiatedCheckPrint, VarCheckPrint.get(), 'CheckPrint')
            CheckingGUI(InitiatedCheckBuff, VarCheckBuff.get(), 'CheckBuff')
            CheckingGUI(InitiatedRadioButton, RadioButton.get(), 'RadioButton')
            CheckingGUI(InitiatedNameAmulet, NameAmulet.get(), 'NameAmulet')
            CheckingGUI(InitiatedHotkeyAmulet, HotkeyAmulet.get(),
                        'HotkeyAmulet')
            CheckingGUI(InitiatedTextEntryX, TextEntryX.get(), 'TextEntryX')
            CheckingGUI(InitiatedTextEntryY, TextEntryY.get(), 'TextEntryY')
            CheckingGUI(InitiatedLifeBellowThan, CheckLifeBellowThan.get(),
                        'LifeBellowThan')
            CheckingGUI(InitiatedBellowThan, LifeBellowThan.get(),
                        'BellowThan')

            if len(GUIChanges) != 0:
                for EachChange in range(len(GUIChanges)):
                    self.Setter.SetVariables.SetVar(GUIChanges[EachChange][0],
                                                    GUIChanges[EachChange][1])

            self.AutoSSA.destroyWindow()

        self.AutoSSA.addButton('Ok', Destroy, [73, 21], [115, 365])

        global EnabledAutoSSA
        if not EnabledAutoSSA:
            ButtonEnabled = self.AutoSSA.addButton('AutoSSA: OFF',
                                                   SetAutoAmulet, [287, 23],
                                                   [11, 336])
        else:
            ButtonEnabled = self.AutoSSA.addButton('AutoSSA: ON',
                                                   SetAutoAmulet, [287, 23],
                                                   [11, 336])
            ButtonEnabled.configure(relief=SUNKEN, bg=rgb((158, 46, 34)))

        CheckPrint = self.AutoSSA.addCheck(VarCheckPrint, [11, 285],
                                           InitiatedCheckPrint,
                                           "Print on Tibia's screen")
        CheckPrint.configure(bg=rgb((114, 94, 48)),
                             activebackground=rgb((114, 94, 48)),
                             selectcolor=rgb((114, 94, 48)))
        CheckBuff = self.AutoSSA.addCheck(VarCheckBuff, [11, 305],
                                          InitiatedCheckBuff, "Don't Buff")
        CheckBuff.configure(bg=rgb((114, 94, 48)),
                            activebackground=rgb((114, 94, 48)),
                            selectcolor=rgb((114, 94, 48)))

        BackImage = 'images/Fundo.png'
        Back = self.AutoSSA.openImage(BackImage, [150, 45])

        AmuletImages = []
        AmuletName = []
        for NameOfCurrentAmulet in Amulets:
            CurrentAmuletName = ItemsPath + 'Amulets/' + NameOfCurrentAmulet + '.png'
            CurrentAmuletImage = self.AutoSSA.openImage(
                CurrentAmuletName, [64, 64])

            AmuletImages.append(CurrentAmuletImage)
            AmuletName.append(NameOfCurrentAmulet)

        ImgLabel = self.AutoSSA.addLabel('Image To Search', [16, 22])

        def UpdateImg():
            for XAmulet in Amulets:
                if NameAmulet.get() == XAmulet:
                    self.AutoSSA.addImage(
                        AmuletImages[AmuletName.index(XAmulet)], [28, 43])

            global Amulet
            Amulet = NameAmulet.get()

        UpdateImg()

        WidthScreen, HeightScreen = self.SendToClient.MainWindowSize()

        AmuletLabel = self.AutoSSA.addLabel('Select Name Of Amulet', [135, 55])
        OptionNameAmulet = self.AutoSSA.addOption(NameAmulet,
                                                  Amulets, [120, 80],
                                                  width=21)

        ButtonAddNewAmulet = self.AutoSSA.addButton('Add New Amulet',
                                                    AddNewAmulet, [167, 24],
                                                    [120, 115])

        ButtonRecapture = self.AutoSSA.addButton('Recapture', Recapture,
                                                 [88, 24], [22, 115])

        DescLabel = self.AutoSSA.addLabel('', [150, 140])

        RButton1 = self.AutoSSA.addRadio('Hotkey', RadioButton, 0, [22, 155],
                                         CheckClick)
        RButton2 = self.AutoSSA.addRadio('Position', RadioButton, 1, [22, 175],
                                         CheckClick)

        CheckBoxLifeBellowThan = self.AutoSSA.addCheck(
            CheckLifeBellowThan, [60, 210], InitiatedLifeBellowThan,
            'Use Only If Life Is Bellow Than')
        LabelLifeBellowThan = self.AutoSSA.addLabel('Life <= ', [90, 245])
        PercentageLifeBellowThan = self.AutoSSA.addOption(
            LifeBellowThan, Percentage, [140, 240])

        def Checking():
            global FoundedImg, Amulet
            if RadioButton.get() == 0:
                DescLabel.configure(text='Hotkey To Press')
                self.AutoSSA.addImage(Back, [130, 165])
                FoundedImg = False
                HotkeyOption = self.AutoSSA.addOption(
                    HotkeyAmulet, self.SendToClient.Hotkeys, [145, 170], 10)
                if EnabledAutoSSA:
                    HotkeyOption.configure(state='disabled')
                else:
                    HotkeyOption.configure(state='normal')
            elif RadioButton.get() == 1:
                DescLabel.configure(text='Position To Search')
                self.AutoSSA.addImage(Back, [120, 165])
                FoundedImg = False

                ButtonGetPosition = self.AutoSSA.addButton(
                    'GetPosition', ReturnGetPosition, [80, 29], [195, 173])

                LabelX = self.AutoSSA.addLabel('X:', [135, 165])
                EntryX = self.AutoSSA.addEntry([150, 165], TextEntryX, width=4)
                TextEntryX.trace("w", ValidateEntryX)
                LabelY = self.AutoSSA.addLabel('Y:', [135, 185])
                EntryY = self.AutoSSA.addEntry([150, 185], TextEntryY, width=4)
                TextEntryY.trace("w", ValidateEntryY)
                if EnabledAutoSSA:
                    ButtonGetPosition.configure(state='disabled')

                    LabelX.configure(state='disabled')
                    EntryX.configure(state='disabled')
                    LabelY.configure(state='disabled')
                    EntryY.configure(state='disabled')
                else:
                    ButtonGetPosition.configure(state='normal')

                    LabelX.configure(state='normal')
                    EntryX.configure(state='normal')
                    LabelY.configure(state='normal')
                    EntryY.configure(state='normal')
            if not CheckLifeBellowThan.get():
                LabelLifeBellowThan.configure(state='disabled')
                PercentageLifeBellowThan.configure(state='disabled')
            elif CheckLifeBellowThan.get():
                LabelLifeBellowThan.configure(state='normal')
                PercentageLifeBellowThan.configure(state='normal')

        def CheckingButtons():
            if EnabledAutoSSA:
                Disable(CheckPrint)
                Disable(CheckBuff)

                Disable(DescLabel)
                Disable(ImgLabel)
                Disable(ButtonRecapture)
                Disable(ButtonAddNewAmulet)

                Disable(RButton1)
                Disable(RButton2)
                Disable(AmuletLabel)
                Disable(OptionNameAmulet)

                Disable(CheckBoxLifeBellowThan)
                Disable(LabelLifeBellowThan)
                Disable(PercentageLifeBellowThan)
            else:
                Enable(CheckPrint)
                Enable(CheckBuff)

                Enable(DescLabel)
                Enable(ImgLabel)
                Enable(ButtonRecapture)
                Enable(ButtonAddNewAmulet)

                Enable(RButton1)
                Enable(RButton2)
                Enable(AmuletLabel)
                Enable(OptionNameAmulet)

                Enable(CheckBoxLifeBellowThan)

                if not CheckLifeBellowThan.get():
                    Disable(LabelLifeBellowThan)
                    Disable(PercentageLifeBellowThan)
                elif CheckLifeBellowThan.get():
                    Enable(LabelLifeBellowThan)
                    Enable(PercentageLifeBellowThan)
            ExecGUITrigger()

        def ConstantVerify():
            if not EnabledAutoSSA:
                if not CheckLifeBellowThan.get():
                    Disable(LabelLifeBellowThan)
                    Disable(PercentageLifeBellowThan)
                elif CheckLifeBellowThan.get():
                    Enable(LabelLifeBellowThan)
                    Enable(PercentageLifeBellowThan)

                if NameAmulet.get() != Amulet:
                    UpdateImg()

                ExecGUITrigger()

            self.AutoSSA.After(200, ConstantVerify)

        Checking()
        CheckingButtons()

        ConstantVerify()

        self.AutoSSA.Protocol(Destroy)
        self.AutoSSA.loop()
Ejemplo n.º 2
0
class ChooseConfig:
    def __init__(self, CharName):
        self.ChooseConfig = GUI('ChooseConfig', 'Choose You Config')
        self.ChooseConfig.MainWindow('Config', [414, 202], [2, 2.36])
        '''
            This Is The Main Function If The ChooseConfig...
            
            He Is Called When The Player Click On 'Load' Or 'Create' Button.
        '''
        def CreateDefaultJson():
            ScriptToLoad = NameCreateJson.get()
            '''
                When This Function Is Called, He Take A Name From EntryBox, 
                To Do Some Checks In The File.
                
                If The File Already Exist, He Just Throw You For Root Window
                Because You Already Configure Your File.
                
                Else He Create One File With The Name Getted And Starts The Configuration
            '''

            if os.path.isfile('Scripts/' + ScriptToLoad + '.json'):
                with open('Scripts/' + ScriptToLoad + '.json',
                          'r') as LoadsJson:
                    data = json.load(LoadsJson)

                time.sleep(.5)

                print('')
                print('Your Configure Stats:', data['Stats'])

                if data['MouseOption'] != MouseMode.get():
                    data['MouseOption'] = MouseMode.get()
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                pyautogui.PAUSE = 0.005

                if data['Stats']:
                    print("\nOpening TibiaAuto...")
                    self.ChooseConfig.destroyWindow()
                    time.sleep(0.1)
                    root(CharName, ScriptToLoad)
                else:
                    os.remove('Scripts/' + ScriptToLoad + '.json')
                    CreateDefaultJson()
            else:
                '''
                    Here, He Copy The Base To Default Configuration,
                    
                    After The Copy, He Starts The Search For Configurations,
                    You Can See The Progress On Console,
                    If You Dont Have Any Error, It Takes, Usually Around 4 or 5 seconds
                    For Complete The Configuration
                    
                    I recommended You, If You Dont Have Any Errors In The Configuration,
                    Save Your Configuration File In Other Folder, Because If You
                    Download Another Actualization In The Github, You Can Throw The 
                    Files, To Not Have Configure Again.
                '''

                print('Coping Default Json')
                start_configuration = time.time()
                Directory = os.getcwd()

                shutil.copyfile(
                    Directory + '\\Scripts' + '\\Json.json',
                    os.path.join(Directory + '\\Scripts' + '\\' +
                                 NameCreateJson.get() + '.json'))

                TibiaAuto = pygetwindow.getWindowsWithTitle(
                    "Choose You Config")[0]
                TibiaAuto.minimize()

                pyautogui.PAUSE = 0.005

                time.sleep(.8)

                with open('Scripts/' + ScriptToLoad + '.json',
                          'r') as LoadedJson:
                    data = json.load(LoadedJson)

                time.sleep(.5)
                time.sleep(.5)

                try:
                    HealthLocation = GetHealthPosition()
                    print('')
                    print(
                        f"Health Location [X: {HealthLocation[0]} Y: {HealthLocation[1]}]"
                    )
                    data['Positions']['LifePosition'][0]['x'] = HealthLocation[
                        0]
                    data['Positions']['LifePosition'][0]['y'] = HealthLocation[
                        1]
                    data['Positions']['LifePosition'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('Helth Position Error')
                    data['Positions']['LifePosition'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    ManaLocation = GetManaPosition()
                    print('')
                    print(
                        f"Mana Location [X: {ManaLocation[0]} Y: {ManaLocation[1]}]"
                    )
                    print('')
                    data['Positions']['ManaPosition'][0]['x'] = ManaLocation[0]
                    data['Positions']['ManaPosition'][0]['y'] = ManaLocation[1]
                    data['Positions']['ManaPosition'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('Mana Position Error')
                    data['Positions']['ManaPosition'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    BattlePositions[0], BattlePositions[1], BattlePositions[
                        2], BattlePositions[3] = GetBattlePosition()
                    print(
                        f"Battle Location [X: {BattlePositions[0]} Y: {BattlePositions[1]}]"
                    )
                    data['Positions']['BattlePosition'][0][
                        'x'] = BattlePositions[0]
                    data['Positions']['BattlePosition'][0][
                        'y'] = BattlePositions[1]
                    data['Positions']['BattlePosition'][0]['Stats'] = True
                    time.sleep(.4)
                    data['Boxes']['BattleBox'][0]['x'] = int(
                        BattlePositions[0])
                    data['Boxes']['BattleBox'][0]['y'] = int(
                        BattlePositions[1])
                    data['Boxes']['BattleBox'][0]['w'] = int(
                        BattlePositions[2])
                    data['Boxes']['BattleBox'][0]['h'] = int(
                        BattlePositions[3])
                    data['Boxes']['BattleBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('Battle Position Error')
                    data['Positions']['BattlePosition'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    StatsPositions[0], StatsPositions[1], StatsPositions[
                        2], StatsPositions[3] = GetStatsPosition()
                    print('')
                    print(
                        f"Status Bar Start [X: {StatsPositions[0]}, Y: {StatsPositions[1]}]"
                    )
                    print(
                        f"Status Bar End [X: {StatsPositions[2]}, Y: {StatsPositions[3]}]"
                    )
                    print('')
                    time.sleep(.2)
                    data['Boxes']['StatusBarBox'][0]['x'] = int(
                        StatsPositions[0])
                    data['Boxes']['StatusBarBox'][0]['y'] = int(
                        StatsPositions[1])
                    data['Boxes']['StatusBarBox'][0]['w'] = int(
                        StatsPositions[2])
                    data['Boxes']['StatusBarBox'][0]['h'] = int(
                        StatsPositions[3])
                    data['Boxes']['StatusBarBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('Status Bar Error')
                    data['Boxes']['StatusBarBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    RingPositions[0], RingPositions[1] = StatsPositions[
                        0], StatsPositions[1] - 58
                    RingPositions[2] = RingPositions[0] + ItemsSquare - 1
                    RingPositions[3] = RingPositions[1] + ItemsSquare - 1
                    print(
                        f"Ring's Square Start [X: {RingPositions[0]}, Y: {RingPositions[1]}]"
                    )
                    print(
                        f"Ring's Square End [X: {RingPositions[2]}, Y: {RingPositions[3]}]"
                    )
                    print('')
                    time.sleep(.2)
                    data['Boxes']['RingBox'][0]['x'] = int(RingPositions[0])
                    data['Boxes']['RingBox'][0]['y'] = int(RingPositions[1])
                    data['Boxes']['RingBox'][0]['w'] = int(RingPositions[2])
                    data['Boxes']['RingBox'][0]['h'] = int(RingPositions[3])
                    data['Boxes']['RingBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('RingPosition Error')
                    data['Boxes']['RingBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    AmuletPositions[0], AmuletPositions[1] = StatsPositions[
                        0], StatsPositions[1] - 130
                    AmuletPositions[2] = AmuletPositions[0] + ItemsSquare - 1
                    AmuletPositions[3] = AmuletPositions[1] + ItemsSquare - 1
                    print(
                        f"Amulet's Square Start [X: {AmuletPositions[0]}, Y: {AmuletPositions[1]}]"
                    )
                    print(
                        f"Amulet's Square End [X: {AmuletPositions[2]}, Y: {AmuletPositions[3]}]"
                    )
                    print('')
                    time.sleep(.2)
                    data['Boxes']['AmuletBox'][0]['x'] = int(
                        AmuletPositions[0])
                    data['Boxes']['AmuletBox'][0]['y'] = int(
                        AmuletPositions[1])
                    data['Boxes']['AmuletBox'][0]['w'] = int(
                        AmuletPositions[2])
                    data['Boxes']['AmuletBox'][0]['h'] = int(
                        AmuletPositions[3])
                    data['Boxes']['AmuletBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('AmuletPosition Error')
                    data['Boxes']['AmuletBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    MapPositions[0], MapPositions[1], MapPositions[
                        2], MapPositions[3] = GetMapPosition()
                    time.sleep(.2)
                    data['Boxes']['MapBox'][0]['x'] = int(MapPositions[0])
                    data['Boxes']['MapBox'][0]['y'] = int(MapPositions[1])
                    data['Boxes']['MapBox'][0]['w'] = int(MapPositions[2])
                    data['Boxes']['MapBox'][0]['h'] = int(MapPositions[3])
                    data['Boxes']['MapBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('MapPosition Error')
                    data['Boxes']['MapBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                try:
                    Player[0], Player[1], GameWindow[0], GameWindow[
                        1], GameWindow[2], GameWindow[3] = GetPlayerPosition()
                    print('')
                    print(f"Player Position [X: {Player[0]}, Y: {Player[1]}]")
                    print('')
                    print(
                        f"Game Window Start [X: {GameWindow[0]}, Y: {GameWindow[1]}]"
                    )
                    print(
                        f"Game Window End [X: {GameWindow[2]}, Y: {GameWindow[3]}]"
                    )
                    print('')
                    time.sleep(.2)
                    data['Positions']['PlayerPosition'][0]['x'] = Player[0]
                    data['Positions']['PlayerPosition'][0]['y'] = Player[1]
                    data['Positions']['PlayerPosition'][0]['Stats'] = True
                    data['Boxes']['GameWindowBox'][0]['x'] = int(GameWindow[0])
                    data['Boxes']['GameWindowBox'][0]['y'] = int(GameWindow[1])
                    data['Boxes']['GameWindowBox'][0]['w'] = int(GameWindow[2])
                    data['Boxes']['GameWindowBox'][0]['h'] = int(GameWindow[3])
                    data['Boxes']['GameWindowBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('Player Position Error')
                    data['Positions']['PlayerPosition'][0]['Stats'] = False
                    data['Boxes']['GameWindowBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                    pass

                try:
                    SQMs[0], SQMs[1], SQMs[2], SQMs[3], SQMs[4], SQMs[5], SQMs[
                        6], SQMs[7], SQMs[8], SQMs[9], SQMs[10], SQMs[
                            11], SQMs[12], SQMs[13], SQMs[14], SQMs[15], SQMs[
                                16], SQMs[17] = SetSQMs()
                    time.sleep(0.1)
                    print(f"1° SQM Location [X: {SQMs[0]}, Y: {SQMs[1]}]")
                    print(f"2° SQM Location [X: {SQMs[2]}, Y: {SQMs[3]}]")
                    print(f"3° SQM Location [X: {SQMs[4]}, Y: {SQMs[5]}]")
                    print(f"4° SQM Location [X: {SQMs[6]}, Y: {SQMs[7]}]")
                    print(f"5° SQM Location [X: {SQMs[8]}, Y: {SQMs[9]}]")
                    print(f"6° SQM Location [X: {SQMs[10]}, Y: {SQMs[11]}]")
                    print(f"7° SQM Location [X: {SQMs[12]}, Y: {SQMs[13]}]")
                    print(f"8° SQM Location [X: {SQMs[14]}, Y: {SQMs[15]}]")
                    print(f"9° SQM Location [X: {SQMs[16]}, Y: {SQMs[17]}]")
                    time.sleep(.4)
                    data['SQM']['SQM1'][0]['x'] = int(SQMs[0])
                    data['SQM']['SQM1'][0]['y'] = int(SQMs[1])
                    data['SQM']['SQM1'][0]['Stats'] = True
                    data['SQM']['SQM2'][0]['x'] = int(SQMs[2])
                    data['SQM']['SQM2'][0]['y'] = int(SQMs[3])
                    data['SQM']['SQM2'][0]['Stats'] = True
                    data['SQM']['SQM3'][0]['x'] = int(SQMs[4])
                    data['SQM']['SQM3'][0]['y'] = int(SQMs[5])
                    data['SQM']['SQM3'][0]['Stats'] = True
                    data['SQM']['SQM4'][0]['x'] = int(SQMs[6])
                    data['SQM']['SQM4'][0]['y'] = int(SQMs[7])
                    data['SQM']['SQM4'][0]['Stats'] = True
                    data['SQM']['SQM5'][0]['x'] = int(SQMs[8])
                    data['SQM']['SQM5'][0]['y'] = int(SQMs[9])
                    data['SQM']['SQM5'][0]['Stats'] = True
                    data['SQM']['SQM6'][0]['x'] = int(SQMs[10])
                    data['SQM']['SQM6'][0]['y'] = int(SQMs[11])
                    data['SQM']['SQM6'][0]['Stats'] = True
                    data['SQM']['SQM7'][0]['x'] = int(SQMs[12])
                    data['SQM']['SQM7'][0]['y'] = int(SQMs[13])
                    data['SQM']['SQM7'][0]['Stats'] = True
                    data['SQM']['SQM8'][0]['x'] = int(SQMs[14])
                    data['SQM']['SQM8'][0]['y'] = int(SQMs[15])
                    data['SQM']['SQM8'][0]['Stats'] = True
                    data['SQM']['SQM9'][0]['x'] = int(SQMs[16])
                    data['SQM']['SQM9'][0]['y'] = int(SQMs[17])
                    data['SQM']['SQM9'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Errno:
                    print('SQMs Error')
                    data['SQM']['SQM1'][0]['Stats'] = False
                    data['SQM']['SQM2'][0]['Stats'] = False
                    data['SQM']['SQM3'][0]['Stats'] = False
                    data['SQM']['SQM4'][0]['Stats'] = False
                    data['SQM']['SQM5'][0]['Stats'] = False
                    data['SQM']['SQM6'][0]['Stats'] = False
                    data['SQM']['SQM7'][0]['Stats'] = False
                    data['SQM']['SQM8'][0]['Stats'] = False
                    data['SQM']['SQM9'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json',
                              'w') as wJson:
                        json.dump(data, wJson, indent=4)

                data['Stats'] = True
                with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                    json.dump(data, wJson, indent=4)

                data['MouseOption'] = MouseMode.get()
                with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                    json.dump(data, wJson, indent=4)

                if CheckAuto.get():
                    with open('Scripts/Loads.json', 'r') as LoaderJson:
                        data2 = json.load(LoaderJson)

                    data2['Auto'] = True
                    data2['ScriptName'] = ScriptToLoad
                    with open('Scripts/Loads.json', 'w') as wwJson:
                        json.dump(data2, wwJson, indent=4)

                end_configuration = time.time() - start_configuration
                print('')
                print(f"Your Setup Time Is: {end_configuration:.2f} Seconds")
                print('')

                print("Opening TibiaAuto...\n")

                time.sleep(.3)
                self.ChooseConfig.destroyWindow()
                time.sleep(.1)
                ScriptToLoad = NameCreateJson.get()
                '''
                    If Dont Have Any Error, He Throw You For The Root Window, In The 'Modules'
                    In the 'Root.py' File.
                '''

                root(CharName, ScriptToLoad)

        # region Valiables

        NameCreateJson = tk.StringVar()
        NameCreateJson.set('NewConfig')
        CheckAuto = tk.BooleanVar()
        CheckAuto.set(True)
        MouseMode = tk.IntVar()
        MouseMode.set(1)
        HookMode = tk.IntVar()
        HookMode.set(1)

        # endregion

        # region Buttons

        if os.path.isfile('Scripts/' + NameCreateJson.get() + '.json'):
            with open('Scripts/' + NameCreateJson.get() + '.json',
                      'r') as LoadsJson:
                data = json.load(LoadsJson)
            if data['Stats']:
                self.ChooseConfig.addButton('Load', CreateDefaultJson,
                                            [75, 23], [310, 166])
            else:
                self.ChooseConfig.addButton('Create', CreateDefaultJson,
                                            [75, 23], [310, 166])
        else:
            self.ChooseConfig.addButton('Create', CreateDefaultJson, [75, 23],
                                        [310, 166])

        self.ChooseConfig.addEntry([165, 35], NameCreateJson, 28)

        self.ChooseConfig.addLabel('Name Of The Json Conf', [24, 35])

        LabelSelectOP1 = self.ChooseConfig.addLabel(
            'Select Your Mouse And Keyboard Option', [30, 76])
        LabelSelectOP1.configure(bg=rgb((114, 94, 48)), fg='black')

        RadioMouseMoviment = self.ChooseConfig.addRadio(
            '{Global} Movement Mouse On Focused Window', MouseMode, 1,
            [10, 95])
        RadioMouseMoviment.configure(bg=rgb((114, 94, 48)),
                                     activebackground=rgb((114, 94, 48)),
                                     selectcolor=rgb((114, 94, 48)))
        RadioSenderMouse = self.ChooseConfig.addRadio(
            "{OTServer} Send Mouse Events To Tibia's Window", MouseMode, 0,
            [10, 114])
        RadioSenderMouse.configure(bg=rgb((114, 94, 48)),
                                   activebackground=rgb((114, 94, 48)),
                                   selectcolor=rgb((114, 94, 48)))

        LabelSelectOP2 = self.ChooseConfig.addLabel('Select Your Hook Mode',
                                                    [30, 136])
        LabelSelectOP2.configure(bg=rgb((114, 94, 48)), fg='black')

        RadioHookWindow = self.ChooseConfig.addRadio(
            "{Global} Hook Directly OBS Screen", HookMode, 1, [10, 155])
        RadioHookWindow.configure(bg=rgb((114, 94, 48)),
                                  activebackground=rgb((114, 94, 48)),
                                  selectcolor=rgb((114, 94, 48)))

        # endregion

        self.ChooseConfig.loop()
Ejemplo n.º 3
0
class ChooseConfig:
    def __init__(self, CharName):
        self.ChooseConfig = GUI('ChooseConfig', 'Choose You Config')
        self.ChooseConfig.MainWindow('Config', [414, 202], [2, 2.36])

        '''
            This Is The Main Function If The ChooseConfig...
            
            He Is Called When The Player Click On 'Load' Or 'Create' Button.
        '''

        def CreateDefaultJson():
            ScriptToLoad = NameCreateJson.get()

            '''
                When This Function Is Called, He Take A Name From EntryBox, 
                To Do Some Checks In The File.
                
                If The File Already Exist, He Just Throw You For Root Window
                Because You Already Configure Your File.
                
                Else He Create One File With The Name Getted And Starts The Configuration
            '''

            if os.path.isfile('Scripts/' + ScriptToLoad + '.json'):
                with open('Scripts/' + ScriptToLoad + '.json', 'r') as LoadsJson:
                    data = json.load(LoadsJson)

                time.sleep(.5)

                print('')
                print('Your Configure Stats:', data['Stats'])

                if data['MouseOption'] != MouseMode.get():
                    data['MouseOption'] = MouseMode.get()
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                pyautogui.PAUSE = 0.005

                if data['Stats']:
                    print("\nOpening TibiaAuto...")
                    self.ChooseConfig.destroyWindow()
                    time.sleep(0.1)
                    root(CharName, ScriptToLoad)
                else:
                    os.remove('Scripts/' + ScriptToLoad + '.json')
                    CreateDefaultJson()
            else:

                '''
                    Here, He Copy The Base To Default Configuration,
                    
                    After The Copy, He Starts The Search For Configurations,
                    You Can See The Progress On Console,
                    If You Dont Have Any Error, It Takes, Usually Around 4 or 5 seconds
                    For Complete The Configuration
                    
                    I recommended You, If You Dont Have Any Errors In The Configuration,
                    Save Your Configuration File In Other Folder, Because If You
                    Download Another Actualization In The Github, You Can Throw The 
                    Files, To Not Have Configure Again.
                '''

                print('Coping Default Json')
                start_configuration = time.time()
                Directory = os.getcwd()

                shutil.copyfile(Directory + '\\Scripts' + '\\Json.json',
                                os.path.join(Directory + '\\Scripts' + '\\' + NameCreateJson.get() + '.json'))

                TibiaAuto = pygetwindow.getWindowsWithTitle("Choose You Config")[0]
                TibiaAuto.minimize()

                pyautogui.PAUSE = 0.005

                time.sleep(.8)

                with open('Scripts/' + ScriptToLoad + '.json', 'r') as LoadedJson:
                    data = json.load(LoadedJson)

                time.sleep(.5)
                time.sleep(.5)

                try:
                    HealthLocation = GetHealthPosition()
                    print('')
                    print(f"Health Location [X: {HealthLocation[0]} Y: {HealthLocation[1]}]")
                    data['Positions']['LifePosition'][0]['x'] = HealthLocation[0]
                    data['Positions']['LifePosition'][0]['y'] = HealthLocation[1]
                    data['Positions']['LifePosition'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('Helth Position Error')
                    data['Positions']['LifePosition'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("LifePosition")

                    pass

                try:
                    ManaLocation = GetManaPosition()
                    print('')
                    print(f"Mana Location [X: {ManaLocation[0]} Y: {ManaLocation[1]}]")
                    print('')
                    data['Positions']['ManaPosition'][0]['x'] = ManaLocation[0]
                    data['Positions']['ManaPosition'][0]['y'] = ManaLocation[1]
                    data['Positions']['ManaPosition'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('Mana Position Error')
                    data['Positions']['ManaPosition'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("ManaPosition")

                    pass

                try:
                    BattlePositions[0], BattlePositions[1], BattlePositions[2], BattlePositions[3] = GetBattlePosition()
                    if BattlePositions[0] and BattlePositions[1] and BattlePositions[2] and BattlePositions[3] != 0:
                        print(f"Battle Location [X: {BattlePositions[0]} Y: {BattlePositions[1]}]")
                        data['Positions']['BattlePosition'][0]['x'] = BattlePositions[0]
                        data['Positions']['BattlePosition'][0]['y'] = BattlePositions[1]
                        data['Positions']['BattlePosition'][0]['Stats'] = True
                        time.sleep(.4)
                        data['Boxes']['BattleBox'][0]['x'] = int(BattlePositions[0])
                        data['Boxes']['BattleBox'][0]['y'] = int(BattlePositions[1])
                        data['Boxes']['BattleBox'][0]['w'] = int(BattlePositions[2])
                        data['Boxes']['BattleBox'][0]['h'] = int(BattlePositions[3])
                        data['Boxes']['BattleBox'][0]['Stats'] = True
                        with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                            json.dump(data, wJson, indent=4)
                    else:
                        raise Exception
                except Exception:
                    print('Battle Position Error')
                    data['Positions']['BattlePosition'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("BattlePosition")

                    pass

                try:
                    StatsPositions[0], StatsPositions[1], StatsPositions[2], StatsPositions[3] = GetStatsPosition()
                    print('')
                    print(f"Status Bar Start [X: {StatsPositions[0]}, Y: {StatsPositions[1]}]")
                    print(f"Status Bar End [X: {StatsPositions[2]}, Y: {StatsPositions[3]}]")
                    print('')
                    time.sleep(.2)
                    data['Boxes']['StatusBarBox'][0]['x'] = int(StatsPositions[0])
                    data['Boxes']['StatusBarBox'][0]['y'] = int(StatsPositions[1])
                    data['Boxes']['StatusBarBox'][0]['w'] = int(StatsPositions[2])
                    data['Boxes']['StatusBarBox'][0]['h'] = int(StatsPositions[3])
                    data['Boxes']['StatusBarBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('Status Bar Error')
                    data['Boxes']['StatusBarBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("StatusBarBox")

                    pass

                try:
                    RingPositions[0], RingPositions[1] = StatsPositions[0], StatsPositions[1] - 58
                    RingPositions[2] = RingPositions[0] + ItemsSquare - 1
                    RingPositions[3] = RingPositions[1] + ItemsSquare - 1
                    print(f"Ring's Square Start [X: {RingPositions[0]}, Y: {RingPositions[1]}]")
                    print(f"Ring's Square End [X: {RingPositions[2]}, Y: {RingPositions[3]}]")
                    print('')
                    time.sleep(.2)
                    data['Boxes']['RingBox'][0]['x'] = int(RingPositions[0])
                    data['Boxes']['RingBox'][0]['y'] = int(RingPositions[1])
                    data['Boxes']['RingBox'][0]['w'] = int(RingPositions[2])
                    data['Boxes']['RingBox'][0]['h'] = int(RingPositions[3])
                    data['Boxes']['RingBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('RingPosition Error')
                    data['Boxes']['RingBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("RingBox")

                    pass

                try:
                    AmuletPositions[0], AmuletPositions[1] = StatsPositions[0], StatsPositions[1] - 130
                    AmuletPositions[2] = AmuletPositions[0] + ItemsSquare - 1
                    AmuletPositions[3] = AmuletPositions[1] + ItemsSquare - 1
                    print(f"Amulet's Square Start [X: {AmuletPositions[0]}, Y: {AmuletPositions[1]}]")
                    print(f"Amulet's Square End [X: {AmuletPositions[2]}, Y: {AmuletPositions[3]}]")
                    print('')
                    time.sleep(.2)
                    data['Boxes']['AmuletBox'][0]['x'] = int(AmuletPositions[0])
                    data['Boxes']['AmuletBox'][0]['y'] = int(AmuletPositions[1])
                    data['Boxes']['AmuletBox'][0]['w'] = int(AmuletPositions[2])
                    data['Boxes']['AmuletBox'][0]['h'] = int(AmuletPositions[3])
                    data['Boxes']['AmuletBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('AmuletPosition Error')
                    data['Boxes']['AmuletBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("AmuletBox")

                    pass

                try:
                    MapPositions[0], MapPositions[1], MapPositions[2], MapPositions[3] = GetMapPosition()
                    time.sleep(.2)
                    data['Boxes']['MapBox'][0]['x'] = int(MapPositions[0])
                    data['Boxes']['MapBox'][0]['y'] = int(MapPositions[1])
                    data['Boxes']['MapBox'][0]['w'] = int(MapPositions[2])
                    data['Boxes']['MapBox'][0]['h'] = int(MapPositions[3])
                    data['Boxes']['MapBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('MapPosition Error')
                    data['Boxes']['MapBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("MapBox")

                    pass

                try:
                    Player[0], Player[1], GameWindow[0], GameWindow[1], GameWindow[2], GameWindow[
                        3] = GetPlayerPosition()
                    print('')
                    print(f"Player Position [X: {Player[0]}, Y: {Player[1]}]")
                    print('')
                    print(f"Game Window Start [X: {GameWindow[0]}, Y: {GameWindow[1]}]")
                    print(f"Game Window End [X: {GameWindow[2]}, Y: {GameWindow[3]}]")
                    print('')
                    time.sleep(.2)
                    data['Positions']['PlayerPosition'][0]['x'] = Player[0]
                    data['Positions']['PlayerPosition'][0]['y'] = Player[1]
                    data['Positions']['PlayerPosition'][0]['Stats'] = True
                    data['Boxes']['GameWindowBox'][0]['x'] = int(GameWindow[0])
                    data['Boxes']['GameWindowBox'][0]['y'] = int(GameWindow[1])
                    data['Boxes']['GameWindowBox'][0]['w'] = int(GameWindow[2])
                    data['Boxes']['GameWindowBox'][0]['h'] = int(GameWindow[3])
                    data['Boxes']['GameWindowBox'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('Player Position Error')
                    data['Positions']['PlayerPosition'][0]['Stats'] = False
                    data['Boxes']['GameWindowBox'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("PlayerPosition")
                    NumberOfExcepts.append("GameWindowBox")

                    pass

                try:
                    SQMs[0], SQMs[1], SQMs[2], SQMs[3], SQMs[4], SQMs[5], SQMs[6], SQMs[7], SQMs[8], SQMs[9], SQMs[10], \
                    SQMs[
                        11], SQMs[12], SQMs[13], SQMs[14], SQMs[15], SQMs[16], SQMs[17] = SetSQMs()
                    time.sleep(0.1)
                    print(f"1° SQM Location [X: {SQMs[0]}, Y: {SQMs[1]}]")
                    print(f"2° SQM Location [X: {SQMs[2]}, Y: {SQMs[3]}]")
                    print(f"3° SQM Location [X: {SQMs[4]}, Y: {SQMs[5]}]")
                    print(f"4° SQM Location [X: {SQMs[6]}, Y: {SQMs[7]}]")
                    print(f"5° SQM Location [X: {SQMs[8]}, Y: {SQMs[9]}]")
                    print(f"6° SQM Location [X: {SQMs[10]}, Y: {SQMs[11]}]")
                    print(f"7° SQM Location [X: {SQMs[12]}, Y: {SQMs[13]}]")
                    print(f"8° SQM Location [X: {SQMs[14]}, Y: {SQMs[15]}]")
                    print(f"9° SQM Location [X: {SQMs[16]}, Y: {SQMs[17]}]")
                    time.sleep(.4)
                    data['SQM']['SQM1'][0]['x'] = int(SQMs[0])
                    data['SQM']['SQM1'][0]['y'] = int(SQMs[1])
                    data['SQM']['SQM1'][0]['Stats'] = True
                    data['SQM']['SQM2'][0]['x'] = int(SQMs[2])
                    data['SQM']['SQM2'][0]['y'] = int(SQMs[3])
                    data['SQM']['SQM2'][0]['Stats'] = True
                    data['SQM']['SQM3'][0]['x'] = int(SQMs[4])
                    data['SQM']['SQM3'][0]['y'] = int(SQMs[5])
                    data['SQM']['SQM3'][0]['Stats'] = True
                    data['SQM']['SQM4'][0]['x'] = int(SQMs[6])
                    data['SQM']['SQM4'][0]['y'] = int(SQMs[7])
                    data['SQM']['SQM4'][0]['Stats'] = True
                    data['SQM']['SQM5'][0]['x'] = int(SQMs[8])
                    data['SQM']['SQM5'][0]['y'] = int(SQMs[9])
                    data['SQM']['SQM5'][0]['Stats'] = True
                    data['SQM']['SQM6'][0]['x'] = int(SQMs[10])
                    data['SQM']['SQM6'][0]['y'] = int(SQMs[11])
                    data['SQM']['SQM6'][0]['Stats'] = True
                    data['SQM']['SQM7'][0]['x'] = int(SQMs[12])
                    data['SQM']['SQM7'][0]['y'] = int(SQMs[13])
                    data['SQM']['SQM7'][0]['Stats'] = True
                    data['SQM']['SQM8'][0]['x'] = int(SQMs[14])
                    data['SQM']['SQM8'][0]['y'] = int(SQMs[15])
                    data['SQM']['SQM8'][0]['Stats'] = True
                    data['SQM']['SQM9'][0]['x'] = int(SQMs[16])
                    data['SQM']['SQM9'][0]['y'] = int(SQMs[17])
                    data['SQM']['SQM9'][0]['Stats'] = True
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)
                except Exception:
                    print('SQMs Error')
                    data['SQM']['SQM1'][0]['Stats'] = False
                    data['SQM']['SQM2'][0]['Stats'] = False
                    data['SQM']['SQM3'][0]['Stats'] = False
                    data['SQM']['SQM4'][0]['Stats'] = False
                    data['SQM']['SQM5'][0]['Stats'] = False
                    data['SQM']['SQM6'][0]['Stats'] = False
                    data['SQM']['SQM7'][0]['Stats'] = False
                    data['SQM']['SQM8'][0]['Stats'] = False
                    data['SQM']['SQM9'][0]['Stats'] = False
                    with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                        json.dump(data, wJson, indent=4)

                    NumberOfExcepts.append("SQM'sPositionError")

                    pass

                data['MouseOption'] = MouseMode.get()
                with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                    json.dump(data, wJson, indent=4)

                data['ItemsMode'] = ItemsMode.get()
                with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                    json.dump(data, wJson, indent=4)

                # Paths Setter
                from Conf.Constants import MainPath, ChestsPath, CavebotScriptsPath, ContainersNamePath

                data['Paths']['MainPath'] = MainPath

                if ItemsMode.get() == "Frames":
                    from Conf.Constants import FramesItemsPath

                    data['Paths']['ItemsPath'] = FramesItemsPath
                elif ItemsMode.get() == "Corners":
                    from Conf.Constants import CornersItemsPath

                    data['Paths']['ItemsPath'] = CornersItemsPath
                elif ItemsMode.get() == "None":
                    from Conf.Constants import NoneItemsPath

                    data['Paths']['ItemsPath'] = NoneItemsPath

                data['Paths']['ChestsPath'] = ChestsPath
                data['Paths']['ContainersNamePath'] = ContainersNamePath
                data['Paths']['CavebotScriptsPath'] = CavebotScriptsPath
                with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                    json.dump(data, wJson, indent=4)

                if len(NumberOfExcepts) != 0:
                    print("\nSome Errors Occurred... Opening The Manual Config.")

                    print("Unfortunately, You Will Have To Manually Configure The Following Errors:\n")

                    time.sleep(.3)
                    self.ChooseConfig.destroyWindow()
                    time.sleep(.1)

                    def ManualConfig(ErrorName):
                        ManualConfiguration = GUI('ManualConfiguration', 'Manual Configuration')
                        ManualConfiguration.MainWindow('Config', [414, 202], [2, 2.36])

                        def Solving():
                            ManualConfiguration.destroyWindow()
                            return True

                        '''LabelError = ManualConfiguration.addLabel("Solving Manually: " + ErrorName, [85, 31])
                        LabelError.configure(font=24)'''

                        ManualConfiguration.addMinimalLabel("One Error Was Occured In: " + ErrorName, [35, 31], 10)
                        ManualConfiguration.addMinimalLabel("... But This Option Is In Development.", [35, 51])

                        ManualConfiguration.addButton('Ok', Solving, [75, 23], [310, 166])

                        ManualConfiguration.Protocol(Solving)
                        ManualConfiguration.loop()

                    for i in range(len(NumberOfExcepts)):
                        print("Error[" + str(i + 1) + "] =", NumberOfExcepts[i])

                    for i in range(len(NumberOfExcepts)):
                        ManualConfig(NumberOfExcepts[i])

                    print("\nExiting Of The Program... Please Solve The Errors")

                    exit(1)

                data['Stats'] = True
                with open('Scripts/' + ScriptToLoad + '.json', 'w') as wJson:
                    json.dump(data, wJson, indent=4)

                if CheckAuto.get():
                    with open('Scripts/Loads.json', 'r') as LoaderJson:
                        data2 = json.load(LoaderJson)

                    data2['Auto'] = True
                    data2['ScriptName'] = ScriptToLoad
                    with open('Scripts/Loads.json', 'w') as wwJson:
                        json.dump(data2, wwJson, indent=4)

                end_configuration = time.time() - start_configuration
                print('')
                print(f"Your Setup Time Is: {end_configuration:.2f} Seconds")
                print('')

                print("Opening TibiaAuto...\n")

                time.sleep(.3)
                self.ChooseConfig.destroyWindow()
                time.sleep(.1)
                ScriptToLoad = NameCreateJson.get()

                '''
                    If Dont Have Any Error, He Throw You For The Root Window, In The 'Modules'
                    In the 'Root.py' File.
                '''

                root(CharName, ScriptToLoad)

        # region Valiables

        NameCreateJson = tk.StringVar()
        NameCreateJson.set('NewConfig')
        CheckAuto = tk.BooleanVar()
        CheckAuto.set(True)
        MouseMode = tk.IntVar()
        MouseMode.set(1)
        HookMode = tk.IntVar()
        HookMode.set(1)
        ItemsMode = tk.StringVar()
        ItemsMode.set("Frames")

        # endregion

        # region Buttons

        if os.path.isfile('Scripts/' + NameCreateJson.get() + '.json'):
            with open('Scripts/' + NameCreateJson.get() + '.json', 'r') as LoadsJson:
                data = json.load(LoadsJson)
            if data['Stats']:
                self.ChooseConfig.addButton('Load', CreateDefaultJson, [75, 23], [310, 166])
            else:
                self.ChooseConfig.addButton('Create', CreateDefaultJson, [75, 23], [310, 166])
        else:
            self.ChooseConfig.addButton('Create', CreateDefaultJson, [75, 23], [310, 166])

        self.ChooseConfig.addEntry([165, 35], NameCreateJson, 28)

        self.ChooseConfig.addLabel('Name Of The Json Conf', [24, 35])

        LabelSelectOP1 = self.ChooseConfig.addLabel('Select Your Mouse And Keyboard Option', [30, 76])
        LabelSelectOP1.configure(bg=rgb((114, 94, 48)), fg='black')

        RadioMouseMoviment = self.ChooseConfig.addRadio('{Global} Movement Mouse On Focused Window', MouseMode, 1,
                                                        [10, 95])
        RadioMouseMoviment.configure(bg=rgb((114, 94, 48)), activebackground=rgb((114, 94, 48)),
                                     selectcolor=rgb((114, 94, 48)))
        RadioSenderMouse = self.ChooseConfig.addRadio("{OTServer} Send Mouse Events To Tibia's Window", MouseMode, 0,
                                                      [10, 114])
        RadioSenderMouse.configure(bg=rgb((114, 94, 48)), activebackground=rgb((114, 94, 48)),
                                   selectcolor=rgb((114, 94, 48)))

        LabelSelectOP2 = self.ChooseConfig.addLabel('Select Your Hook Mode', [30, 136])
        LabelSelectOP2.configure(bg=rgb((114, 94, 48)), fg='black')

        RadioHookWindow = self.ChooseConfig.addRadio("{Global} Hook Directly OBS Screen", HookMode, 1, [10, 155])
        RadioHookWindow.configure(bg=rgb((114, 94, 48)), activebackground=rgb((114, 94, 48)),
                                  selectcolor=rgb((114, 94, 48)))

        LabelSelectOP3 = self.ChooseConfig.addLabel('Select The Items Mode', [280, 76])
        LabelSelectOP3.configure(bg=rgb((114, 94, 48)), fg='black')

        RadioFrames = self.ChooseConfig.addRadio('Frames', ItemsMode, "Frames",
                                                 [310, 95])
        RadioFrames.configure(bg=rgb((114, 94, 48)), activebackground=rgb((114, 94, 48)),
                              selectcolor=rgb((114, 94, 48)))
        RadioCorners = self.ChooseConfig.addRadio("Corners", ItemsMode, "Corners",
                                                  [310, 114])
        RadioCorners.configure(bg=rgb((114, 94, 48)), activebackground=rgb((114, 94, 48)),
                               selectcolor=rgb((114, 94, 48)))
        RadioNone = self.ChooseConfig.addRadio("None", ItemsMode, "None",
                                               [310, 133])
        RadioNone.configure(bg=rgb((114, 94, 48)), activebackground=rgb((114, 94, 48)),
                            selectcolor=rgb((114, 94, 48)))

        # endregion

        self.ChooseConfig.loop()
Ejemplo n.º 4
0
class AutoRing:
    def __init__(self, root, RingPositions, HealthLocation, MOUSE_OPTION):
        self.AutoRing = GUI('AutoRing', 'Module: Auto Ring')
        self.AutoRing.DefaultWindow('AutoRing', [306, 397], [1.2, 2.29])
        self.Setter = GUISetter("RingLoader")
        self.SendToClient = Hotkey(MOUSE_OPTION)
        self.ThreadManager = ThreadManager("ThreadAutoRing")

        def SetAutoRing():
            global EnabledAutoRing
            if not EnabledAutoRing:
                EnabledAutoRing = True
                ButtonEnabled.configure(text='AutoRing: ON',
                                        relief=SUNKEN,
                                        bg=rgb((158, 46, 34)))
                print("AutoRing: ON")
                global Ring
                Ring = NameRing.get()
                Checking()
                CheckingButtons()
                time.sleep(0.03)
                if not ThreadStarted:
                    self.ThreadManager.NewThread(ScanAutoRing)
                else:
                    self.ThreadManager.UnPauseThread()
            else:
                EnabledAutoRing = False
                print('AutoRing: OFF')
                ButtonEnabled.configure(text='AutoRing: OFF',
                                        relief=RAISED,
                                        bg=rgb((127, 17, 8)))
                Checking()
                CheckingButtons()
                self.ThreadManager.PauseThread()

        def ScanAutoRing():
            if CheckLifeBellowThan.get():
                BellowThan = LifeBellowThan.get()
                from Modules.AutoHeal import EnabledAutoHeal
                if EnabledAutoHeal:
                    while EnabledAutoRing and EnabledAutoHeal:
                        try:
                            NoHasRing = ScanRing(RingPositions)
                        except Exception:
                            NoHasRing = False
                            pass

                        from Modules.AutoHeal import Life
                        if NoHasRing and Life <= BellowThan:
                            Execute()
                else:
                    from Engine.ScanStages import ScanStages
                    while EnabledAutoRing:
                        try:
                            Life = ScanStages('Life From AutoRing').ScanStages(
                                HealthLocation, LifeColor, LifeColorFull)
                        except Exception:
                            Life = 100
                            pass

                        if Life is None:
                            Life = 0
                        try:
                            NoHasRing = ScanRing(RingPositions)
                        except Exception:
                            NoHasRing = False
                            pass

                        if NoHasRing and Life < BellowThan:
                            Execute()
            else:
                while EnabledAutoRing:
                    try:
                        NoHasRing = ScanRing(RingPositions)
                    except Exception:
                        NoHasRing = False
                        pass

                    if NoHasRing:
                        Execute()

        def Execute():
            if RadioButton.get() == 0:
                self.SendToClient.Press(HotkeyRing.get())
                print("Pressed ", HotkeyRing.get(),
                      " To Reallocated Your Ring")
                time.sleep(1)
            elif RadioButton.get() == 1:
                try:
                    X = int(TextEntryX.get())
                    Y = int(TextEntryY.get())
                except:
                    X = None
                    Y = None
                    print("Error To Get Type Of Position")
                    time.sleep(1)
                if X and Y is not None:
                    if X < WidthScreen and Y < HeightScreen:
                        MousePosition = pyautogui.position()
                        pyautogui.moveTo(X, Y)
                        pyautogui.mouseDown(button='left')
                        pyautogui.moveTo(RingPositions[0] + 16,
                                         RingPositions[1] + 16)
                        pyautogui.mouseUp(button='left')
                        pyautogui.moveTo(MousePosition)
                        print("Ring Reallocated On: X =",
                              RingPositions[0] + 16, "Y =",
                              RingPositions[1] + 16, "From: X =", X, "Y =", Y)
                        time.sleep(0.3)
                    else:
                        print("Lower Resolution Than Entered")
                        time.sleep(1)

        def Recapture():
            global WaitingForClick, Ring
            WaitingForClick = True
            Ring = NameRing.get()
            AutoRingWindow = pygetwindow.getWindowsWithTitle(
                "Module: Auto Ring")[0]
            TibiaAuto = pygetwindow.getWindowsWithTitle("TibiaAuto V12")[0]
            RootWindowX = root.winfo_x()
            RootWindowY = root.winfo_y()
            AutoRingWindowX = self.AutoRing.PositionOfWindow('X')
            AutoRingWindowY = self.AutoRing.PositionOfWindow('Y')
            time.sleep(0.1)
            TibiaAuto.minimize()
            AutoRingWindow.minimize()
            Invisible = GUI('InvisibleWindow', 'InvisibleWindow')
            Invisible.InvisibleWindow('Recapture')
            while WaitingForClick:
                X, Y = GetPosition()
                if keyboard.is_pressed("c"):
                    sX, sY = GetPosition()
                    time.sleep(0.03)
                    pyautogui.screenshot('images/Rings/' + Ring + '.png',
                                         region=(sX - 5, sY - 5, 12, 12))
                    WaitingForClick = False
                    Invisible.destroyWindow()
                    TibiaAuto.maximize()
                    TibiaAuto.moveTo(RootWindowX, RootWindowY)
                    time.sleep(0.04)
                    AutoRingWindow.maximize()
                    AutoRingWindow.moveTo(AutoRingWindowX, AutoRingWindowY)
                    break
                Invisible.UpdateWindow(X, Y)

        def AddNewAmulet():
            print('....')

        def CheckClick():
            Checking()

        def ReturnGetPosition():
            global WaitingForClick
            WaitingForClick = True
            AutoRingWindow = pygetwindow.getWindowsWithTitle(
                "Module: Auto Ring")[0]
            TibiaAuto = pygetwindow.getWindowsWithTitle("TibiaAuto V12")[0]
            RootWindowX = root.winfo_x()
            RootWindowY = root.winfo_y()
            AutoRingWindowX = self.AutoRing.PositionOfWindow('X')
            AutoRingWindowY = self.AutoRing.PositionOfWindow('Y')
            time.sleep(0.1)
            TibiaAuto.minimize()
            AutoRingWindow.minimize()
            Invisible = GUI('InvisibleWindow', 'InvisibleWindow')
            Invisible.InvisibleWindow('GetPosition')
            while WaitingForClick:
                X, Y = GetPosition()
                if keyboard.is_pressed("c"):
                    X, Y = GetPosition()
                    WaitingForClick = False
                    print(f"Your Click Is Located In: [X: {X}, Y: {Y}]")
                    TextEntryX.set(X)
                    TextEntryY.set(Y)
                    Invisible.destroyWindow()
                    TibiaAuto.maximize()
                    TibiaAuto.moveTo(RootWindowX, RootWindowY)
                    time.sleep(0.08)
                    AutoRingWindow.maximize()
                    AutoRingWindow.moveTo(AutoRingWindowX, AutoRingWindowY)
                    break
                Invisible.UpdateWindow(X, Y)

        def ValidateEntryX(*args):
            s = TextEntryX.get()
            if len(s) > MaxLen:
                if not s[-1].isdigit():
                    TextEntryX.set(s[:-1])
                else:
                    TextEntryX.set(s[:MaxLen])

        def ValidateEntryY(*args):
            s = TextEntryY.get()
            if len(s) > MaxLen:
                if not s[-1].isdigit():
                    TextEntryY.set(s[:-1])
                else:
                    TextEntryY.set(s[:MaxLen])

        WidthScreen, HeightScreen = pyautogui.size()

        VarCheckPrint, InitiatedCheckPrint = self.Setter.Variables.Bool(
            'CheckPrint')
        VarCheckBuff, InitiatedCheckBuff = self.Setter.Variables.Bool(
            'CheckBuff')

        RadioButton, InitiatedRadioButton = self.Setter.Variables.Int(
            'RadioButton')

        NameRing, InitiatedNameRing = self.Setter.Variables.Str('NameRing')
        HotkeyRing, InitiatedHotkeyRing = self.Setter.Variables.Str(
            'HotkeyRing')

        TextEntryX, InitiatedTextEntryX = self.Setter.Variables.Str(
            'TextEntryX')
        TextEntryY, InitiatedTextEntryY = self.Setter.Variables.Str(
            'TextEntryY')

        CheckLifeBellowThan, InitiatedLifeBellowThan = self.Setter.Variables.Bool(
            'LifeBellowThan')
        LifeBellowThan, InitiatedBellowThan = self.Setter.Variables.Int(
            'BellowThan')

        def CheckingGUI(Init, Get, Name):
            if Get != Init:
                GUIChanges.append((Name, Get))

        def Destroy():
            CheckingGUI(InitiatedCheckPrint, VarCheckPrint.get(), 'CheckPrint')
            CheckingGUI(InitiatedCheckBuff, VarCheckBuff.get(), 'CheckBuff')
            CheckingGUI(InitiatedRadioButton, RadioButton.get(), 'RadioButton')
            CheckingGUI(InitiatedNameRing, NameRing.get(), 'NameRing')
            CheckingGUI(InitiatedHotkeyRing, HotkeyRing.get(), 'HotkeyRing')
            CheckingGUI(InitiatedTextEntryX, TextEntryX.get(), 'TextEntryX')
            CheckingGUI(InitiatedTextEntryY, TextEntryY.get(), 'TextEntryY')
            CheckingGUI(InitiatedLifeBellowThan, CheckLifeBellowThan.get(),
                        'LifeBellowThan')
            CheckingGUI(InitiatedBellowThan, LifeBellowThan.get(),
                        'BellowThan')

            if len(GUIChanges) != 0:
                for EachChange in range(len(GUIChanges)):
                    self.Setter.SetVariables.SetVar(GUIChanges[EachChange][0],
                                                    GUIChanges[EachChange][1])

            self.AutoRing.destroyWindow()

        self.AutoRing.addButton('Ok', Destroy, [73, 21], [115, 365])

        global EnabledAutoRing
        if not EnabledAutoRing:
            ButtonEnabled = self.AutoRing.addButton('AutoRing: OFF',
                                                    SetAutoRing, [287, 23],
                                                    [11, 336])
        else:
            ButtonEnabled = self.AutoRing.addButton('AutoRing: ON',
                                                    SetAutoRing, [287, 23],
                                                    [11, 336])
            ButtonEnabled.configure(relief=SUNKEN, bg=rgb((158, 46, 34)))

        CheckPrint = self.AutoRing.addCheck(VarCheckPrint, [11, 285],
                                            InitiatedCheckPrint,
                                            "Print on Tibia's screen")
        CheckPrint.configure(bg=rgb((114, 94, 48)),
                             activebackground=rgb((114, 94, 48)),
                             selectcolor=rgb((114, 94, 48)))
        CheckBuff = self.AutoRing.addCheck(VarCheckBuff, [11, 305],
                                           InitiatedCheckBuff, "Don't Buff")
        CheckBuff.configure(bg=rgb((114, 94, 48)),
                            activebackground=rgb((114, 94, 48)),
                            selectcolor=rgb((114, 94, 48)))

        BackImage = 'images/Fundo.png'
        Back = self.AutoRing.openImage(BackImage, [150, 45])

        RingImg = 'images/Rings/MightRing.png'
        ImageID = self.AutoRing.openImage(RingImg, [64, 64])

        ImgLabel = self.AutoRing.addLabel('Image To Search', [16, 22])
        self.AutoRing.addImage(ImageID, [28, 43])

        RingLabel = self.AutoRing.addLabel('Select Name Of Ring', [135, 55])
        OptionNameRing = self.AutoRing.addOption(NameRing,
                                                 Rings, [120, 80],
                                                 width=21)

        ButtonAddNewRing = self.AutoRing.addButton('Add New Ring',
                                                   AddNewAmulet, [167, 24],
                                                   [120, 115])

        ButtonRecapture = self.AutoRing.addButton('Recapture', Recapture,
                                                  [88, 24], [22, 115])

        DescLabel = self.AutoRing.addLabel('', [150, 140])

        RButton1 = self.AutoRing.addRadio('Hotkey', RadioButton, 0, [22, 155],
                                          CheckClick)
        RButton2 = self.AutoRing.addRadio('Position', RadioButton, 1,
                                          [22, 175], CheckClick)

        CheckBoxLifeBellowThan = self.AutoRing.addCheck(
            CheckLifeBellowThan, [60, 210], InitiatedLifeBellowThan,
            'Use Only If Life Is Bellow Than')
        LabelLifeBellowThan = self.AutoRing.addLabel('Life <= ', [90, 245])
        PercentageLifeBellowThan = self.AutoRing.addOption(
            LifeBellowThan, Percentage, [140, 240])

        def Checking():
            global FoundedImg, Ring
            if RadioButton.get() == 0:
                DescLabel.configure(text='Hotkey To Press')
                self.AutoRing.addImage(Back, [130, 165])
                FoundedImg = False
                HotkeyOption = self.AutoRing.addOption(
                    HotkeyRing, self.SendToClient.Hotkeys, [145, 170], 10)
                if EnabledAutoRing:
                    Disable(HotkeyOption)
                else:
                    Enable(HotkeyOption)
            elif RadioButton.get() == 1:
                DescLabel.configure(text='Position To Search')
                self.AutoRing.addImage(Back, [120, 165])
                FoundedImg = False

                ButtonGetPosition = self.AutoRing.addButton(
                    'GetPosition', ReturnGetPosition, [80, 29], [195, 173])

                LabelX = self.AutoRing.addLabel('X:', [135, 165])
                EntryX = self.AutoRing.addEntry([150, 165],
                                                TextEntryX,
                                                width=4)
                TextEntryX.trace("w", ValidateEntryX)
                LabelY = self.AutoRing.addLabel('Y:', [135, 185])
                EntryY = self.AutoRing.addEntry([150, 185],
                                                TextEntryY,
                                                width=4)
                TextEntryY.trace("w", ValidateEntryY)
                if EnabledAutoRing:
                    Disable(ButtonGetPosition)

                    Disable(LabelX)
                    Disable(EntryX)
                    Disable(LabelY)
                    Disable(EntryY)
                else:
                    Enable(ButtonGetPosition)

                    Enable(LabelX)
                    Enable(EntryX)
                    Enable(LabelY)
                    Enable(EntryY)
            if not CheckLifeBellowThan.get():
                Disable(LabelLifeBellowThan)
                Disable(PercentageLifeBellowThan)
            elif CheckLifeBellowThan.get():
                Enable(LabelLifeBellowThan)
                Enable(PercentageLifeBellowThan)
            ExecGUITrigger()

        def CheckingButtons():
            if EnabledAutoRing:
                Disable(CheckPrint)
                Disable(CheckBuff)

                Disable(DescLabel)
                Disable(ImgLabel)
                Disable(ButtonRecapture)
                Disable(ButtonAddNewRing)

                Disable(RButton1)
                Disable(RButton2)
                Disable(RingLabel)
                Disable(OptionNameRing)

                Disable(CheckBoxLifeBellowThan)
                Disable(LabelLifeBellowThan)
                Disable(PercentageLifeBellowThan)
            else:
                Enable(CheckPrint)
                Enable(CheckBuff)

                Enable(DescLabel)
                Enable(ImgLabel)
                Enable(ButtonRecapture)
                Enable(ButtonAddNewRing)

                Enable(RButton1)
                Enable(RButton2)
                Enable(RingLabel)
                Enable(OptionNameRing)

                Enable(CheckBoxLifeBellowThan)

                if not CheckLifeBellowThan.get():
                    Disable(LabelLifeBellowThan)
                    Disable(PercentageLifeBellowThan)
                elif CheckLifeBellowThan.get():
                    Enable(LabelLifeBellowThan)
                    Enable(PercentageLifeBellowThan)
            ExecGUITrigger()

        def ConstantVerify():
            if not EnabledAutoRing:
                if not CheckLifeBellowThan.get():
                    Disable(LabelLifeBellowThan)
                    Disable(PercentageLifeBellowThan)
                elif CheckLifeBellowThan.get():
                    Enable(LabelLifeBellowThan)
                    Enable(PercentageLifeBellowThan)
                ExecGUITrigger()

            self.AutoRing.After(1, ConstantVerify)

        Checking()
        CheckingButtons()

        ConstantVerify()

        self.AutoRing.Protocol(Destroy)
        self.AutoRing.loop()