def doVJ():
    if dailyVJ:
        initVJ()

        counter = -1

        if SCLib.GetVar("CurStep") == "StartingVJ":
            print("Starting Vanishing Journey")
            acceptVJ()
        elif SCLib.GetVar("CurStep") == "DoingVJ":
            counter = 0
            for q in vjQuests:
                if q.IsActive():
                    counter += 1

                if SCLib.GetVar("CurQuest") == None or SCLib.GetVar(
                        "CurQuest") == q.quest:
                    q.DoQuest()
            if counter == 0:
                SCLib.UpdateVar("CurStep", "FinishedVJ")
        elif SCLib.GetVar("CurStep") == "FinishedVJ":
            print("Finishing VJ")
            if not Quest.CheckCompleteDemand(34129, vjNPC):
                Quest.CompleteQuest(34129, vjNPC)

            vjSymbol = Inventory.FindItemByID(1712001)
            if not useSymbol(vjSymbol):
                print("Finished VJ")
                SCLib.UpdateVar("CurDaily", "ChuChu")
                SCLib.UpdateVar("CurStep", "InitChuChu")

    else:
        print("Skipping VJ")
        SCLib.UpdateVar("CurDaily", "ChuChu")
        SCLib.UpdateVar("CurStep", "InitChuChu")
def doDD():
    if dailyDD:
        if SCLib.GetVar("CurStep") == "InitDD":
            initDD()
        elif SCLib.GetVar("CurStep") == "StartingDD":
            startDD()
    else:
        SCLib.UpdateVar("CurDaily", "SS")
        SCLib.UpdateVar("CurStep", "InitSS")
Exemple #3
0
def checkSScoin():
    if Inventory.GetItemCount(4310235) == (SCLib.GetVar("SpiritCoin"+CharName)+30)\
    or Inventory.GetItemCount(4310235) == (SCLib.GetVar("SpiritCoin"+CharName)+60):
        print("You earned daily cap for spirit coin")
        print("Finished Spirit Savior Daily")
        RestoreSetting()
        SCLib.UpdateVar("SpiritDone" + CharName, True)

        return True
    else:
        return False
def useSymbol(symbol):
    if symbol.valid and SCLib.GetVar("SymbolCount") < symbolMaxTries:
        oPacket = Packet.COutPacket(SCLib.PacketHeader["Symbols"])
        oPacket.Encode4(0x00000000)
        oPacket.Encode4(symbol.pos)  #inv slot
        oPacket.Encode4(0xFFFFF9BB)  #???
        Packet.SendPacket(oPacket)
        SCLib.UpdateVar("SymbolCount", SCLib.GetVar("SymbolCount") + 1)
        return True
    else:
        SCLib.UpdateVar("SymbolCount", 0)
        return False
def doSS():
    if dailySS:
        if SCLib.GetVar("CurStep") == "InitSS":
            initSS()
        elif SCLib.GetVar("CurStep") == "StartingSS":
            startSS()
        elif SCLib.GetVar("CurStep") == "RunSS":
            runSS()
        elif SCLib.GetVar("CurStep") == "FinishingSS":
            finishSS()
    else:
        SCLib.UpdateVar("CurDaily", "Return")
        SCLib.UpdateVar("RetryCount", 0)
def startSS():
    if inSS():
        SCLib.UpdateVar("CurStep", "RunSS")
    else:
        if SCLib.GetVar("RetryCount") < 3 and SCLib.GetVar(
                "CurSSRuns") < totalRuns:
            print("Failed to enter SS... Retrying")
            SCLib.UpdateVar("RetryCount", SCLib.GetVar("RetryCount") + 1)
            SCLib.UpdateVar("CurStep", "InitSS")
        else:
            print("Finished SS")
            SCLib.UpdateVar("CurDaily", "Return")
            SCLib.UpdateVar("RetryCount", 0)
def doChuChu():
    if dailyChuChu:
        InitRecipes()

        if SCLib.GetVar("CurStep") == "InitChuChu":
            initChuChu()
        elif SCLib.GetVar("CurStep") == "StartingChuChu":
            startChuChu()
        elif SCLib.GetVar("CurStep") == "DoingChuChu":
            doingChuChu()
        elif SCLib.GetVar("CurStep") == "FinishedChuChu":
            finishChuChu()
    else:
        SCLib.UpdateVar("CurDaily", "DD")
        SCLib.UpdateVar("CurStep", "InitDD")
def finishChuChu():
    chuchuSymbol = Inventory.FindItemByID(1712002)
    if not useSymbol(chuchuSymbol):
        if SCLib.GetVar("UsingWhitelist"):
            Terminal.SetPushButton("Whitelist", True)
        SCLib.UpdateVar("CurDaily", "DD")
        SCLib.UpdateVar("CurStep", "StartingDD")
def GetCoin(npc):
    print("Receiving coins from", npc)
    retry=0
    while SCLib.GetVar("DDCoin") == Inventory.GetItemCount(4310227) and retry<3:
        Character.TalkToNpc(npc)
        time.sleep(3)
        retry+=1
def startChuChu():
    if Field.GetID() != ccStartingMap:
        SCLib.UpdateVar("CurStep", "InitChuChu")
    else:
        retryCount = SCLib.GetVar("RetryCount")

        if retryCount > 3:
            SCLib.UpdateVar("RetryCount", 0)
            print("Finished ChuChu")
            SCLib.UpdateVar("CurStep", "FinishedChuChu")
            SunCat.UnhookChuChu()
        else:
            Npc.ClearSelection()
            Npc.RegisterSelection("Enter <Hungry Muto>")
            if chuChuHardMode:
                Npc.RegisterSelection("Hard")
            else:
                Npc.RegisterSelection("Normal")
            Character.TalkToNpc(ccNpc)
            time.sleep(5)

            if Field.GetID() == ccStartingMap:
                print("Failed to enter ChuChu, creating a new party...")
                leaveParty()
                createParty()
                SCLib.UpdateVar("RetryCount", retryCount + 1)
                time.sleep(1)
            elif Field.GetID() in hungryMutoMaps:
                print("Starting ChuChuPQ!")
                SCLib.UpdateVar("CurStep", "DoingChuChu")
def acceptVJ():
    curMap = Field.GetID()
    if curMap != vjMap:
        Terminal.Rush(vjMap)
        return

    if Terminal.GetCheckBox("Kami Vac"):
        Terminal.SetCheckBox("Kami Vac", False)

    Terminal.SetCheckBox("Auto NPC", True)
    SunCat.Teleport(-1941, 60)
    time.sleep(0.1)
    if Quest.GetQuestState(34128) != 2:
        Quest.StartQuest(34128, vjNPC)
        time.sleep(1.5)
        Quest.CompleteQuest(34128, vjNPC)
    #Quest.StartQuest(34128, vjNPC)

    Npc.ClearSelection()
    #Npc.RegisterSelection("[Daily Quest] Vanishing Journey")
    Npc.RegisterSelection("Those are all")
    time.sleep(3)
    Quest.StartQuest(34129, vjNPC)
    time.sleep(3)
    #Character.TalkToNpc(vjNPC)
    #time.sleep(1)

    if SCLib.GetVar("UsingKami"):
        Terminal.SetCheckBox("Kami Vac", True)

    SCLib.UpdateVar("CurStep", "DoingVJ")
Exemple #12
0
def ChangeChannels():
    if CurrentChannel == 20:
        if fieldID == LastMapID:
            print("Changing Channel to 1")
            time.sleep(0.5)
            Terminal.ChangeChannel(1)
            time.sleep(3)
            print("Resetting back to first map")
            SCLib.UpdateVar("MapNumber", 0)
            time.sleep(3)
        else:
            print("Changing channel to 1")
            time.sleep(0.5)
            Terminal.ChangeChannel(1)
            time.sleep(3)
            SCLib.UpdateVar("MapNumber", SCLib.GetVar("MapNumber") + 1)
            print("Changing map to {0}".format(SCLib.GetVar("MapNumber")))
    else:
        print("Changing channel to {0}".format(NewChannel))
        time.sleep(0.5)
        Terminal.ChangeChannel(NewChannel)
        time.sleep(3)
def startDD():
    if Field.GetID() >= ddMap and Field.GetID() <= ddMapEnd:
        curStage = SunCat.GetDDStage()
        if curStage >= ddExitLevel:
            SunCat.StopTP()
            retreatDD()
            time.sleep(4)
        else:
            boxFound = False
            for box in ddPurpleBoxes:
                curBox = Field.FindMob(box)
                if curBox.valid:
                    boxFound = True
                    if SCLib.GetVar("UsingSI"):
                        Terminal.SetCheckBox("Skill Injection", True)
                    SunCat.KamiTP(curBox.x + kamiOffsetX,
                                  curBox.y + kamiOffsetY)
                    break
        if boxFound == False:
            Terminal.SetCheckBox("Skill Injection", False)
            SunCat.KamiTP(ddRestX, ddRestY)
    elif Field.GetID() == ddExitMap:
        SunCat.StopTP()
        #SunCat.UnfilterMobs()
        Character.TalkToNpc(ddNpc)
    else:
        if SCLib.GetVar("RetryCount") < 3:
            print("Failed to enter DD... Retrying")
            SCLib.UpdateVar("RetryCount", SCLib.GetVar("RetryCount") + 1)
            SCLib.UpdateVar("CurStep", "InitDD")
        else:
            print("Finished DD")
            SunCat.UnhookDD()
            SCLib.UpdateVar("CurStep", "InitSS")
            SCLib.UpdateVar("CurDaily", "SS")
            SCLib.UpdateVar("RetryCount", 0)
    def DoQuest(self):
        if Quest.GetQuestState(self.quest) == 1:
            curMap = Field.GetID()
            SCLib.UpdateVar("CurQuest", self.quest)
            if Quest.CheckCompleteDemand(self.quest, self.npc):
                if curMap != self.killmap:
                    Terminal.Rush(self.killmap)
            else:
                if curMap != self.completemap:
                    Terminal.Rush(self.completemap)
                else:
                    if Terminal.GetCheckBox("Kami Vac"):
                        Terminal.SetCheckBox("Kami Vac", False)

                    SunCat.Teleport(self.npcx, self.npcy)
                    time.sleep(1)
                    Quest.CompleteQuest(self.quest, self.npc)
                    time.sleep(2)
                    if SCLib.GetVar("UsingKami"):
                        Terminal.SetCheckBox("Kami Vac", True)

                    SCLib.UpdateVar("CurQuest", None)
def runSS():
    for i in range(roundsPerRun):
        killCount = 0

        mobsKilled = []

        while killCount < 5:
            if not GameState.IsInGame() or not inSS():
                print("Not in SS!")
                break

            curMob = None

            for mobID in ssMobArray:
                mob = Field.FindMob(mobID)
                if mob.valid and mob not in mobsKilled:
                    curMob = mob
                    mobsKilled.append(mob)
                    break

            if curMob is not None:
                SunCat.KamiTP(curMob.x, curMob.y)
                time.sleep(killTime)
                Key.Press(npcChatKey)
                time.sleep(0.2)
                Key.Press(npcChatKey)
                time.sleep(waitTime)
                killCount += 1
            else:
                print("No mobs left!")
                time.sleep(
                    3)  #Wait for mobs to respawn - this should never be hit

        SunCat.KamiTP(ssBaseX, ssBaseY)
        time.sleep(roundWaitTime)

    SCLib.UpdateVar("CurSSRuns", SCLib.GetVar("CurSSRuns") + 1)
    SCLib.UpdateVar("CurStep", "FinishingSS")
print("Starting Arcane River AiO script")

import os, sys, Character, GameState, Field, DataType, time, Npc, Packet, Terminal, Context, Inventory, Key, Quest, Party
if not any("SunCat" in s for s in sys.path):
	sys.path.append(os.getcwd() + "\SunCat")

try:
	import SunCat, SCLib, SCHotkey
except:
	print("Couldn't find SunCat module")
##########################
# Initial setup
##########################

SCLib.StartVars()
if SCLib.GetVar("ChuchuDone") is None:
    SCLib.PersistVar("ChuchuDone", False)
if SCLib.GetVar("DreamDone") is None:
    SCLib.PersistVar("DreamDone", False)
if SCLib.GetVar("SpiritDone") is None:
    SCLib.PersistVar("SpiritDone", False)
if SCLib.GetVar("DDCoinDone") is None:
    SCLib.PersistVar("DDCoinDone", False)
if SCLib.GetVar("DDCoin") is None:
    SCLib.PersistVar("DDCoin", Inventory.GetItemCount(4310227))
if SCLib.GetVar("SpiritCoin") is None:
    SCLib.PersistVar("SpiritCoin", Inventory.GetItemCount(4310235))
if SCLib.GetVar("defaultEva") is None:
    SCLib.PersistVar("defaultEva", Terminal.GetComboBox("HackingOpt"))
    
options = ['General FMA', 'Full Map Attack', 'Grenade Kami', 'Mob Falldown', 'Kami Vac', 'bot/kanna_kami', 'bot/si_no_wait', 'Skill Injection', 'Auto Attack']
def RestoreSetting():
    print("restore terminal setting")
    for option in options:
        Terminal.SetCheckBox(option, SCLib.GetVar(option))
Exemple #18
0
###Expand the list for easier changes :)

#########################################################################################################################################
#																																		#
#												Do not change anything below this line!													#
#																																		#
#########################################################################################################################################

SCLib.PersistVar("noReactorInMap", False)
SCLib.PersistVar("MapNumber", 0)
SCLib.PersistVar("TeleportAttempt", 0)
SCLib.PersistVar("HarvestAttempt", 0)
SCLib.PersistVar("TeleportCount", 0)
SCLib.StartVars(20)
HasLooted = SCLib.GetVar("noReactorInMap")
TeleportAttempt = SCLib.GetVar("TeleportAttempt")
HarvestAttempt = SCLib.GetVar("HarvestAttempt")
fieldID = Field.GetID()
pos = Character.GetPos()
CurrentChannel = GameState.GetChannel()
NewChannel = CurrentChannel + 1


def ChangeChannels():
    if CurrentChannel == 20:
        if fieldID == LastMapID:
            print("Changing Channel to 1")
            time.sleep(0.5)
            Terminal.ChangeChannel(1)
            time.sleep(3)
Exemple #19
0
except:
    print("Couldn't find SunCat module")

# Initial setup
leader = False
if usingParty and Party.IsInParty():
    if Party.GetPartyBossID() == Character.GetID():
        leader = True

if usingParty and len(Party.GetPartyMembers()) <= 1:
    usingParty = False

# Suncat Variables
SCLib.StartVars()
CharName = Character.GetName()
if SCLib.GetVar("DailyDate" + CharName) is None:
    print("Initialize variables for {0}".format(CharName))
    SCLib.PersistVar("DailyDate" + CharName, time.gmtime().tm_mday)
    SCLib.PersistVar("VJDone" + CharName, False)
    SCLib.PersistVar("ChuchuDone" + CharName, False)
    SCLib.PersistVar("DreamDone" + CharName, False)
    SCLib.PersistVar("SpiritDone" + CharName, False)
    SCLib.PersistVar("DDCoinDone" + CharName, False)
    SCLib.PersistVar("MorassDone" + CharName, False)
    SCLib.PersistVar("ChuchuRun" + CharName, 0)
    SCLib.PersistVar("DreamRun" + CharName, 0)
    SCLib.PersistVar("SpiritRun" + CharName, 0)
    SCLib.PersistVar("ChuchuSymbol" + CharName, 0)
    SCLib.PersistVar("DDCoin" + CharName, Inventory.GetItemCount(4310227))
    SCLib.PersistVar("SpiritCoin" + CharName, Inventory.GetItemCount(4310235))
    SCLib.PersistVar("defaultEva" + CharName,
            initSS()
        elif SCLib.GetVar("CurStep") == "StartingSS":
            startSS()
        elif SCLib.GetVar("CurStep") == "RunSS":
            runSS()
        elif SCLib.GetVar("CurStep") == "FinishingSS":
            finishSS()
    else:
        SCLib.UpdateVar("CurDaily", "Return")
        SCLib.UpdateVar("RetryCount", 0)


if not Terminal.IsRushing():
    if SCLib.CheckVersion(22):
        initVars()
        curDaily = SCLib.GetVar("CurDaily")
        if GameState.IsInGame():
            if curDaily == "VJ":
                doVJ()
            elif curDaily == "ChuChu":
                doChuChu()
            elif curDaily == "DD":
                doDD()
            elif curDaily == "SS":
                doSS()
            elif curDaily == "Return":
                SCLib.UpdateVar("CurDaily", None)
                SCLib.UpdateVar("CurStep", "StartingVJ")
                print("Done! Back to botting...")
                if SCLib.GetVar("UsingKami"):
                    Terminal.SetCheckBox("Kami Vac", True)
Exemple #21
0
import Quest
import time
import GameState
import Terminal

if not any("SunCat" in s for s in sys.path):
    sys.path.append(os.getcwd() + "/SunCat")

try:
    import SunCat, SCLib, SCHotkey
except:
    print("Couldn't find SunCat module")

SCLib.StartVars()
###persist variables
if SCLib.GetVar("QuestDone") is None:
    SCLib.PersistVar("QuestDone", False)

preq = Quest.GetQuestState(55610)
quest = Quest.GetQuestState(52743)
#CompleteQuest(55612, 9330600)
#CompleteQuest(52743, 9201269)
#CompleteQuest(52743, 9330277)
quest_number = 52743
quest_npc = 9201269
quest_npc2 = 9330277
grove_of_the_spirit_tree = 450005000
#print(SCLib.GetVar("QuestDone"))
if GameState.IsInGame() and SCLib.GetVar("QuestDone") == False:
    if SCLib.GetVar("QuestDone") == False:
        Quest.StartQuest(quest_number, quest_npc)
Exemple #22
0
mossy_tree_forest = "Mossy Tree Forest (Lv.115-124)"
sky_forest = "Sky Forest Training Center (Lv.120-129)"
secret_pirate = "Secret Pirate Hideout (Lv.125-134)"
other_world = "Otherworld Battleground (Lv.135-144)"
dangerous_forest = "Dangerously Isolated Forest (Lv.140-149)"
forbidden_time = "Forbidden Time (Lv.145-154)"
clandestine_ruins = "Clandestine Ruins (Lv.150-159)"
ruined_city = "Ruined City"
leopard_portal = (493, 92)
tiger_portal = (661, 92)

buy_ticket_header = 0x0508
recv = 0x0684
collide_header = 0x00FE
KannaJobs = [4200, 4210, 4211, 4212]
if SCLib.GetVar("MPDone") is None:
    SCLib.PersistVar("MPDone", False)
if SCLib.GetVar("DoingMP") is None:
    SCLib.PersistVar("DoingMP", False)
if SCLib.GetVar("retry_count") is None:
    SCLib.PersistVar("retry_count", 0)
SCLib.StartVars(100)


def KillPersistVarThred():
    print("Stopping vars")
    SCLib.StopVars()
    time.sleep(1)


SCHotkey.RegisterKeyEvent(HotKey, KillPersistVarThred)  #F9
Exemple #23
0
 def ToggleOn(self):
     CheckBox("Skill Injection", SCLib.GetVar("Skill Injection" + CharName))
     CheckBox("Auto Attack", SCLib.GetVar("Auto Attack" + CharName))
def RestoreEvasion():
    Terminal.SetComboBox("HackingOpt", SCLib.GetVar("defaultEva"))
def KillHorntail(bossDifficulty):

    SCLib.PersistVar("HasSpawned", False)
    SCLib.PersistVar("NowLockedVar", False)
    HasSpawned = SCLib.GetVar("HasSpawned")
    NowLockedVar = SCLib.GetVar("NowLockedVar")
    SCLib.StartVars()
    if bossDifficulty == 0:
        HorntailEasy = True
        HorntailNormal = False
        HorntailChaos = False
    elif bossDifficulty == 1:
        HorntailEasy = False
        HorntailNormal = True
        HorntailChaos = False
    else:
        HorntailEasy = False
        HorntailNormal = False
        HorntailChaos = True

    HorntailPreQuest = Quest.GetQuestState(7313)
    if HorntailPreQuest == 0:
        print(
            "Horntail Prequest not started or done, Starting quest before entery"
        )
        if Field.GetID() != CaveOfLifeEntrance1:
            Terminal.Rush(CaveOfLifeEntrance1)
        else:
            Quest.StartQuest(7313, 2081006)
            print("Horntail Prequest started")
    else:
        #ToggleKami(False)
        print("Doing Horntail")
        if HorntailEasy:
            print("Easy")
            if Field.GetID() != HorntailsCaveEasy:
                if Field.GetID() != TheCaveOfTrialEasy2:
                    if Field.GetID() != TheCaveOfTrialEasy1:
                        if Field.GetID() != EntranceToHorntailsCave:
                            GotoHorntail()
                        else:
                            if not NowLockedVar:
                                Npc.ClearSelection()
                                Npc.RegisterSelection(
                                    "Easy Mode (Level 130 or above)")
                                time.sleep(1)
                                Character.TalkToNpc(2083004)
                                time.sleep(1)
                            else:
                                print(
                                    "Seems like you diddnt finish your last attempt and are locked. Continueing other bosses"
                                )
                                SCLib.UpdateVar("KillHorntail", False)
                                ResetNowLockedFunction()
                    else:
                        NowLockedFunction()
                        boss = Field.FindMob(HorntailsLeftHeadEasy)
                        if boss.valid:
                            ToggleKami(False)

                            if Character.GetPos().x != 522:
                                Character.Teleport(522, -40)
                            print("Horntails left head still alive standby")
                        else:
                            ToggleFaceLeft(True)
                            ToggleKami(False)

                            if Character.GetPos().x != 840:
                                Character.Teleport(840, -165)
                            else:
                                Character.EnterPortal()
                else:
                    boss = Field.FindMob(HorntailsRightHeadEasy)
                    if boss.valid:
                        ToggleKami(False)
                        ToggleAttack(True)
                        if Character.GetPos().x != 9:
                            Character.Teleport(9, -40)
                        print("Horntails right head still alive standby")
                    else:
                        ToggleFaceLeft(False)
                        ToggleKami(False)

                        if Character.GetPos().x != -307:
                            Character.Teleport(-307, -165)
                        else:
                            Character.EnterPortal()
            else:
                boss = Field.FindMob(EasyHorntail)
                if boss.valid:
                    ToggleAttack(True)

                    DidSpawn()
                    ToggleKami(True)
                    print("Horntail still alive Standby")
                else:
                    if HasSpawned:
                        ToggleKami(False)
                        ToggleLoot(True)
                        print(
                            "Horntail Easy Is dead waiting 10 sec before continueing"
                        )
                        time.sleep(10)
                        Character.TalkToNpc(2083002)
                        time.sleep(1)
                        SCLib.UpdateVar("KillHorntail", False)
                        ToggleLoot(False)
                        ResetSpawn()
                        ResetNowLockedFunction()
                    else:
                        ToggleKami(False)
                        ToggleAttack(False)

                        crystal = Field.FindReactor(2401300)
                        if crystal.valid:
                            if Character.GetPos().x != 540:
                                Character.Teleport(540, 15)
                            else:
                                Character.BasicAttack()
                                time.sleep(2)
        elif HorntailNormal:
            print("Normal")
            if Field.GetID() not in HorntailsCaveNormal:
                if Field.GetID() not in TheCaveOfTrialNormal2:
                    if Field.GetID() not in TheCaveOfTrialNormal1:
                        if Field.GetID() != EntranceToHorntailsCave:
                            GotoHorntail()
                        else:
                            if not NowLockedVar:
                                Npc.ClearSelection()
                                Npc.RegisterSelection(
                                    "Normal Mode (Level 130 or above)")
                                time.sleep(1)
                                Character.TalkToNpc(2083004)
                                time.sleep(1)
                            else:
                                print(
                                    "Seems like you diddnt finish your last attempt and are locked. Continueing other bosses"
                                )
                                SCLib.UpdateVar("KillHorntail", False)
                                ResetNowLockedFunction()
                    else:
                        NowLockedFunction()
                        boss = Field.FindMob(HorntailsLeftHeadNormal)
                        if boss.valid:
                            ToggleKami(False)
                            ToggleAttack(True)
                            if Character.GetPos().x != 522:
                                Character.Teleport(522, -40)
                            print("Horntails left head still alive standby")
                        else:
                            ToggleFaceLeft(True)
                            ToggleKami(False)

                            if Character.GetPos().x != 840:
                                Character.Teleport(840, -165)
                            else:
                                Character.EnterPortal()
                else:
                    boss = Field.FindMob(HorntailsRightHeadNormal)
                    if boss.valid:
                        ToggleKami(False)

                        if Character.GetPos().x != 9:
                            Character.Teleport(9, -40)
                        print("Horntails right head still alive standby")
                    else:
                        ToggleFaceLeft(False)
                        ToggleKami(False)

                        if Character.GetPos().x != -307:
                            Character.Teleport(-307, -165)
                        else:
                            Character.EnterPortal()
            else:
                boss = Field.FindMob(NormalHorntail)
                if boss.valid:
                    ToggleAttack(True)
                    ToggleKami(True)

                    DidSpawn()
                    print("Horntail Normal still alive Standby")
                else:
                    if HasSpawned:
                        ToggleKami(False)
                        ToggleLoot(True)
                        print(
                            "Horntail Normal Is dead waiting 10 sec before continueing"
                        )
                        time.sleep(10)
                        Character.TalkToNpc(2083002)
                        time.sleep(1)
                        ToggleLoot(False)
                        SCLib.UpdateVar("KillHorntail", False)
                        ResetSpawn()
                        ResetNowLockedFunction()
                    else:
                        ToggleAttack(False)
                        ToggleKami(False)

                        crystal = Field.FindReactor(2401000)
                        if crystal.valid:
                            if Character.GetPos().x != 540:
                                Character.Teleport(540, 15)
                            else:
                                Character.BasicAttack()
                                time.sleep(2)
        elif HorntailChaos:
            print("Chaos")
            if Field.GetID() not in ChaosHorntailsCave:
                if Field.GetID() not in TheCaveOfTrialChaos2:
                    if Field.GetID() not in TheCaveOfTrialChaos1:
                        if Field.GetID() != EntranceToHorntailsCave:
                            GotoHorntail()
                        else:
                            if not NowLockedVar:
                                Npc.ClearSelection()
                                Npc.RegisterSelection(
                                    "Chaos Mode (Level 135 or above)")
                                time.sleep(1)
                                Character.TalkToNpc(2083004)
                                time.sleep(1)
                            else:
                                print(
                                    "Seems like you diddnt finish your last attempt and are locked. Continueing other bosses"
                                )
                                SCLib.UpdateVar("KillHorntail", False)
                                ResetNowLockedFunction()
                    else:
                        NowLockedFunction()
                        boss = Field.FindMob(ChaosHorntailsLeftHead)
                        if boss.valid:
                            ToggleKami(False)
                            ToggleAttack(True)
                            while Character.GetPos().x not in range(500, 570):
                                Character.AMoveX(522)
                            print("Horntails left head still alive standby")
                        else:
                            ToggleFaceLeft(True)
                            ToggleKami(False)

                            if Character.GetPos().x != 840:
                                Character.Teleport(840, -165)
                            else:
                                Character.EnterPortal()
                else:
                    boss = Field.FindMob(ChaosHorntailsRightHead)
                    if boss.valid:
                        ToggleKami(False)
                        ToggleAttack(True)
                        while Character.GetPos().x not in range(-40, 40):
                            Character.AMoveX(9)
                        print("Horntails right head still alive standby")
                    else:
                        ToggleFaceLeft(False)
                        ToggleKami(False)

                        if Character.GetPos().x != -307:
                            Character.Teleport(-307, -165)
                        else:
                            Character.EnterPortal()
            else:
                boss = Field.FindMob(ChaosHorntail)
                boss1 = Field.FindMob(ChaosHorntail1)
                boss2 = Field.FindMob(ChaosHorntail2)
                boss3 = Field.FindMob(ChaosHorntail3)
                boss4 = Field.FindMob(ChaosHorntail4)
                if boss.valid or boss1.valid or boss2.valid or boss3.valid or boss4.valid:
                    ToggleAttack(True)

                    #ToggleKami(True)
                    DidSpawn()
                    while Character.GetPos().x not in range(140, 220):
                        Character.AMoveX(183)
                    print("Horntail still alive, Standby")
                else:
                    if HasSpawned:
                        ToggleKami(False)
                        ToggleLoot(False)
                        #print("Horntail Is dead waiting 10 sec before continueing")
                        print("Looting")
                        Terminal.SetCheckBox("Auto Loot", True)
                        MoveToXLocation(Field.GetRect().left)
                        time.sleep(1.5)
                        MoveToXLocation(Field.GetRect().right)
                        time.sleep(1.5)
                        MoveToXLocation(Field.GetRect().left)
                        time.sleep(1.5)
                        MoveToXLocation(Field.GetRect().right)
                        time.sleep(1.5)
                        MoveToXLocation(Field.GetRect().left)
                        time.sleep(1.5)
                        #time.sleep(10)
                        Character.TalkToNpc(2083002)
                        time.sleep(1)
                        SCLib.UpdateVar("KillHorntail", False)
                        ToggleLoot(False)
                        ResetSpawn()
                        ResetNowLockedFunction()
                    else:
                        ToggleAttack(False)
                        ToggleKami(False)

                        crystal = Field.FindReactor(2401100)
                        if crystal.valid:
                            if Character.GetPos().x != 540:
                                Character.Teleport(540, 15)
                            else:
                                Character.BasicAttack()
                                time.sleep(2)
quest22 = Quest.GetQuestState(58967)
quest23 = Quest.GetQuestState(58968)

herb_header = 0x03E3
#Key to restart pers. variables
HotKey = 0x7A


def TP_EnterPortal(x, y):
    Character.Teleport(x, y)
    time.sleep(1)
    Character.EnterPortal()


SCLib.StartVars()
if SCLib.GetVar("HuntDone") is None:
    SCLib.PersistVar("HuntDone", False)

SCHotkey.StartHotkeys(100)


def KillPersistVarThred():
    SCLib.StopVars()
    time.sleep(1)


SCHotkey.RegisterKeyEvent(HotKey, KillPersistVarThred)  #F11
#SunCat.StopTP()
print("Starting kanna ring script")
Terminal.SetCheckBox("Kami Loot", False)
Terminal.SetCheckBox("Auto Loot", False)