Error main ( <module> ) from org.sikuli.basics.proxies import Vision
this is my full list of code for the error/ project please help
error
[error] script [ autosplitter ] stopped with error in line 93
[error] ImportError ( No module named proxies )
[error] --- Traceback --- error source first
line: module ( function ) statement
93: main ( <module> ) from org.sikuli.
[error] --- Traceback --- end --------------
#######
# SikuliX Speedrun AutoSplitter by klayveR (reddit.
# Version 1.1.6
# 07/20/2016
#
# Thanks to Titandrake for inspiration: https:/
# Visit https:/
#######
### SCRIPT SETTINGS ###
#######
# gameRegion: The region that the script should scan for pattern matches. Use the GUI Region feature to select your game window
# Usage: Region(x, y, width, height) or simply use GUI feature, replace the whole Region(...) if you do that (Should look like this: https:/
gameRegion = Region(
# splitPatterns: Patterns (pictures) that the script will look for to make a split, must be in correct order of splits, seperated by comma
# Use Take Screenshot/Insert Image GUI features to add pictures (Should look like this: https:/
# Examples: ["split1.png", "split2.png"]
splitPatterns = ["Kulu-ya-ku.PNG"]
# splitNames (optional): If you want to show split names in the console, add names to splitNames, seperate by comma. Leave empty if you don't need this
# Important: The splitNames array must have the same amount of elements as the splitPatterns array
# Examples: ["Segment 1", "Segment 2"]
splitNames = []
# splitScanRate: How often per second the script should scan the game region, is used for every split
# Higher scanrate equals more checks per second, but more checks will eat a lot of cpu power
# Anything higher than 100 will result in continuous checking in most cases
splitScanRate = 25
# minSimilarity: If the pattern matches the region by this value or higher, the split key will be pressed
# Reduce value if splits aren't firing, increase if you get false matches
minSimilarity = 0.7
# USING THIS OVERRIDES THE splitScanRate VALUE - LEAVE EMPTY IF YOU DON'T NEED THIS
# scanRates (optional): In case you need different scan rates for multiple splits, add a scan rate for each split you have, seperate by comma
# This is sometimes necessary in case there is a harder to recognize pattern for certain splits or maybe you want a more accurate detection on the last split
# Important: The scanRates array must have the same amount of elements as the splitPatterns array
# Examples: [15, 50]
scanRates = []
# USING THIS OVERRIDES THE minSimilarity VALUE - LEAVE EMPTY IF YOU DON'T NEED THIS
# minSimilarities (optional): In case you need different minimal similarity values for multiple splits, add a decimal percentage for each split you have, seperate by comma
# This can be used to get more reliable results based on the type of pattern
# Important: The minSimilarities array must have the same amount of elements as the splitPatterns array
# Examples: [0.8, 0.5]
minSimilarities = []
# scanAccuracy: A lower value means that the scans are faster, but more inaccurate. Try what works best for you, this changes based on the power of your computer
# Low value for faster processing, increase value if you get false matches
scanAccuracy = 6
# Key configuration: Keys that you are using to make a split/start, reset, unsplit and skip in LiveSplit, SikuliX Key Constants: http://
# Examples: Key.NUM0, "5", Key.F5
splitKey = Key.NUM1
resetKey = Key.NUM2
unsplitKey = Key.NUM3
skipKey = Key.NUM4
# startTimerAt: If you use the "Start Timer at" feature in LiveSplit, edit this value accordingly
startTimerAt = 0
# splitDelay: The time in seconds the script should wait before searching for the next pattern after it successfully found the previous split pattern
# skipDelay: The time in seconds the script should wait before searching for the next pattern after skipping a split
# finishDelay: The time in seconds the script should wait after you finished a run
# Important: During the skip and split delay the script is not able to recognize if you press the reset/skip/unsplit keys!
splitDelay = 3
skipDelay = 1
finishDelay = 5
# logRuns: If you want to log your runs, set this to True
logRuns = True
logRunsFile = "runs.log"
# timeNormalisation: If you notice a consistent delay (which is often caused by huge gameRegions, consider changing that first)
# in your splits, you can change this to a value, which will then be subtracted from the recorded time
# Notice: This does NOT affect LiveSplits time, only the log and console times of this script!
timeNormalisation = 0.00
#######
### SCRIPT SETTINGS END ###
#######
#######
### DONT TOUCH CODE BELOW UNLESS YOU KNOW WHAT YOU'RE DOING ###
#######
import os
import os.path
import sys
import time
from org.sikuli.natives import Vision
# Sikuli settings
Vision.
Settings.TypeDelay = 0
Settings.ActionLogs = False
Settings.InfoLogs = False
Settings.DebugLogs = False
# Variables
fileName = os.path.
fileNameNoExt = fileName.
splitCount = len(splitPatterns)
splitNameCount = len(splitNames)
scanRateCount = len(scanRates)
minSimilarities
showSplitNames = False
variableScanRates = False
variableMinSimi
currentlyDelaying = False
allStrings = ""
lastRunTime = 0.0
lastRunTimeMilli = ".00"
startTime = 0.0
longestName = 0
canRun = True
runCount = 0
splitsFound = []
currentSplit = 0
currentSplitRegion = gameRegion
###############
### CONSOLE ###
###############
# Clear windows terminal
# If this causes errors, please remove this line below as well as all clear() function calls in this script
clear = lambda: os.system('cls')
def printStrings(
clear()
print allStrings
return
def printString(str, allStrings, br = True, refresh = True):
if allStrings == "":
allStrings = str
else:
if br == True:
else:
if refresh == True: printStrings(
return allStrings
def printRemainingS
for i in range(split + 1, splitCount):
if showSplitNames == False:
print "Split " + str(i + 1)
else:
print splitNames[i]
def logRun(str):
tempStr = str.split(
str = "------
file = open(logRunsFile, "a+")
if os.stat(
else:
file.close()
return
#######
### CMD FILE CREATION ###
#######
if not os.path.
file = open(fileNameNoExt + "_start.cmd", "w")
file.
file.close()
popup("It looks like this is the first time you are starting this script. " + fileNameNoExt + "_start.cmd has been created in your SikuliX directory,\nI recommend to use that to start the Speedrun Autosplitter script in the future in order to see the console and to easily close the script.\n\nThe script will now exit.\nPlease restart it by double-clicking " + fileNameNoExt + "_start.cmd.", "First launch")
exit()
#######
### SETTINGS CHECK ###
#######
# Check if it's possible to even start a run, there must be at least one split
if splitCount == 0:
popup("You need to add at least one split pattern, modify splitPatterns in the script\n\nThe script will now exit.", "Error")
exit()
# Check if split name count match split count, catch errors
if splitNameCount > 0:
if splitNameCount == splitCount:
longestName = 0
for name in splitNames:
if len(name) > longestName: longestName = len(name)
else:
longestName = 7
if splitCount > 9: longestName = 8
# Check if scan rates count match split count, catch errors
if scanRateCount > 0:
if scanRateCount == splitCount:
else:
# Check if minimum similarity values count match split count, catch errors
if minSimilarities
if minSimilarities
else:
#######
### RUN FUNCTIONS ###
#######
# Initialize run
def initRun():
global allStrings
global runCount
global canRun
canRun = True
runCount += 1
allStrings = ""
# Scan rates
if variableScanRates == False:
allStrings = printString(
else:
allStrings = printString(
# Min. similarities
if variableMinSimi
allStrings = printString(
else:
allStrings = printString(
# Split count
allStrings = printString(
allStrings = printString(
# Write everything to console
allStrings = printString("", allStrings, False)
# If ahkSupprt enabled, delete leftover textfiles from previous runs and wait for the user to press the start key
# If not enabled, run starts immediately
allStrings = printString("\nRUN #" + str(runCount) + " (Last run: " + time.strftime(
print "Press your split key to start the run"
return
# Start run
def startRun(event):
# New run
global allStrings
global canRun
global startTime
global currentSplit
global splitsFound
global lastRunTime
global lastRunTimeMilli
if canRun == True:
if startTimerAt < 0:
else:
splitsFound = []
canRun = False
lastRunTime = startTime
allStrings = printString(
for i in range(0, longestName - 7 + 3): allStrings = printString(" ", allStrings, False, False)
allStrings = printString("Time Segment Time", allStrings, False, False)
allStrings = printString(
for i in range(0, longestName - 7 + 2): allStrings = printString("-", allStrings, False, False)
allStrings = printString(" ------------- ------------", allStrings, False, True)
# End run
def finishRun():
# New run
global allStrings
if len(splitsFound) == splitCount:
allStrings = printString("\nRun finished in " + time.strftime(
# Log run
if logRuns == True: logRun(allStrings)
time.
initRun()
# Recognized pattern callback
def foundSplit(event):
global splitsFound
global allStrings
global currentlyDelaying
global lastRunTime
global lastRunTimeMilli
if event.getPatter
# Time difference calculation
newTime = float("
if len(newTimeMilli) == 2: newTimeMilli = newTimeMilli + "0"
segmentTime = float("
if len(segmentTime
lastRunTime = newTime + startTime
# Show final split time in console
if showSplitNames == False:
for i in range(0, longestName - 7 + len(str(
else:
for i in range(0, longestName - len(splitNames[
allStrings = printString(
if currentSplit < splitCount - 1:
else:
# Next split
def nextSplit(index):
global splitsFound
global currentSplit
global currentSplitRegion
global currentlyDelaying
pattern = splitPatterns[
currentSplit = index
currentlyDe
currentScanRate = splitScanRate
currentMinS
# Set correct scanrate
if variableScanRates == True:
else:
# Set correct min. similarity
if variableMinSimi
else:
region = Region(gameRegion)
currentSpli
region.
region.
printString
# Show information about current split
if showSplitNames == False:
print "Split " + str(index + 1) + " -> " + str(currentScan
else:
print splitNames[index] + " -> " + str(currentScan
printRemain
# Reset run
def resetRun(event):
if (canRun == False) and (currentlyDelaying == False):
initRun()
# Unsplit split
def unsplitSplit(
global splitsFound
global allStrings
if (canRun == False) and (currentlyDelaying == False):
if len(splitsFound) > 0:
if showSplitNames == False:
else:
if currentSplit - 1 in splitsFound: splitsFound.
# Skip split
def skipSplit(event):
global splitsFound
global allStrings
global currentlyDelaying
global lastRunTime
global lastRunTimeMilli
if (canRun == False) and (currentlyDelaying == False):
# Time difference calculation
newTime = float("
if len(newTimeMilli) == 2: newTimeMilli = newTimeMilli + "0"
if showSplitNames == False:
for i in range(0, longestName - 7 + len(str(
else:
for i in range(0, longestName - len(splitNames[
allStrings = printString(
if currentSplit < splitCount - 1:
else:
###############
### HOTKEYS ###
###############
Env.addHotkey(
Env.addHotkey(
Env.addHotkey(
Env.addHotkey(
#######
### INITIALIZE FIRST RUN ###
#######
initRun()
# Run script forever
while True:
time.
Question information
- Language:
- English Edit question
- Status:
- Answered
- For:
- SikuliX Edit question
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
Can you help with this problem?
Provide an answer of your own, or ask Helena for more information if necessary.