Пример #1
0
def getActiveMods(
    uimods=None
):  # returns a list of ModInfo's containing information of the mods
    """uimods:
        None - return all active mods
        True - only return active UI Mods
        False - only return active non-UI Mods
    """
    active_mods = []
    try:
        if not os.path.exists(PREFSFILENAME):
            logger.info("No game.prefs file found")
            return []

        l = luaparser.luaParser(PREFSFILENAME)
        l.loweringKeys = False
        modlist = l.parse({"active_mods": "active_mods"},
                          {"active_mods": {}})["active_mods"]
        if l.error:
            logger.info("Error in reading the game.prefs file")
            return []
        uids = [uid for uid, b in modlist.items() if b == 'true']
        #logger.debug("Active mods detected: %s" % str(uids))

        allmods = []
        for m in installedMods:
            if ((uimods == True and m.ui_only)
                    or (uimods == False and not m.ui_only) or uimods == None):
                allmods.append(m)
        active_mods = [m for m in allmods if m.uid in uids]
        #logger.debug("Allmods uids: %s\n\nActive mods uids: %s\n" % (", ".join([mod.uid for mod in allmods]), ", ".join([mod.uid for mod in allmods])))
        return active_mods
    except:
        return []
Пример #2
0
def getModInfoFromZip(zfile):
    """get the mod info from a zip file"""
    if zfile in modCache:
        return modCache[zfile]

    r = None
    if zipfile.is_zipfile(os.path.join(MODFOLDER, zfile)):
        zip = zipfile.ZipFile(os.path.join(MODFOLDER, zfile), "r",
                              zipfile.ZIP_DEFLATED)
        if zip.testzip() is None:
            for member in zip.namelist():
                filename = os.path.basename(member)
                if not filename:
                    continue
                if filename == "mod_info.lua":
                    modinfofile = luaparser.luaParser("mod_info.lua")
                    modinfofile.iszip = True
                    modinfofile.zip = zip
                    r = getModInfo(modinfofile)
    if r is None:
        logger.debug("mod_info.lua not found in zip file %s" % zfile)
        return None
    f, info = r
    if f.error:
        logger.debug("Error in parsing mod_info.lua in %s" % zfile)
        return None
    m = ModInfo(**info)
    m.setFolder(zfile)
    m.update()
    modCache[zfile] = m
    return m
Пример #3
0
def getActiveMods(uimods=None):  # returns a list of ModInfo's containing information of the mods
    """uimods:
        None - return all active mods
        True - only return active UI Mods
        False - only return active non-UI Mods
    """
    active_mods = []
    try:
        if not os.path.exists(PREFSFILENAME):
            logger.info("No game.prefs file found")
            return []

        l = luaparser.luaParser(PREFSFILENAME)
        l.loweringKeys = False
        modlist = l.parse({"active_mods": "active_mods"}, {"active_mods": {}})["active_mods"]
        if l.error:
            logger.info("Error in reading the game.prefs file")
            return []
        uids = [uid for uid, b in modlist.items() if b == "true"]
        # logger.debug("Active mods detected: %s" % str(uids))

        allmods = []
        for m in installedMods:
            if (uimods == True and m.ui_only) or (uimods == False and not m.ui_only) or uimods == None:
                allmods.append(m)
        active_mods = [m for m in allmods if m.uid in uids]
        # logger.debug("Allmods uids: %s\n\nActive mods uids: %s\n" % (", ".join([mod.uid for mod in allmods]), ", ".join([mod.uid for mod in allmods])))
        return active_mods
    except:
        return []
Пример #4
0
def getModInfoFromZip(zfile):
    """get the mod info from a zip file"""
    if zfile in modCache:
        return modCache[zfile]

    r = None
    if zipfile.is_zipfile(os.path.join(MODFOLDER, zfile)):
        zip = zipfile.ZipFile(os.path.join(MODFOLDER, zfile), "r", zipfile.ZIP_DEFLATED)
        if zip.testzip() == None:
            for member in zip.namelist():
                filename = os.path.basename(member)
                if not filename:
                    continue
                if filename == "mod_info.lua":
                    modinfofile = luaparser.luaParser("mod_info.lua")
                    modinfofile.iszip = True
                    modinfofile.zip = zip
                    r = getModInfo(modinfofile)
    if r == None:
        logger.debug("mod_info.lua not found in zip file %s" % zfile)
        return None
    f, info = r
    if f.error:
        logger.debug("Error in parsing mod_info.lua in %s" % zfile)
        return None
    m = ModInfo(**info)
    print zfile
    m.setFolder(zfile)
    m.update()
    modCache[zfile] = m
    return m
Пример #5
0
 def uploadMap(self):
     
     mapDir = QtGui.QFileDialog.getExistingDirectory (self.client, "Select the map directory to upload", maps.getUserMapsFolder(),  QtGui.QFileDialog.ShowDirsOnly)
     logger.debug("Uploading map from: " + mapDir)
     if mapDir != "" :
         if maps.isMapFolderValid(mapDir) :
             os.chmod(mapDir, S_IWRITE)
             mapName = os.path.basename(mapDir)
             zipName = mapName.lower()+".zip" 
             
             scenariolua = luaparser.luaParser(os.path.join(mapDir,maps.getScenarioFile(mapDir)))
             scenarioInfos = scenariolua.parse({'scenarioinfo>name':'name', 'size':'map_size', 'description':'description', 'count:armies':'max_players','map_version':'version','type':'map_type','teams>0>name':'battle_type'}, {'version':'1'})
             
             if scenariolua.error:
                 logger.debug("There were " + str(scenariolua.errors) + " errors and " + str(scenariolua.warnings) + " warnings.")
                 logger.debug(scenariolua.errorMsg)
                 QtGui.QMessageBox.critical(self.client, "Lua parsing error", scenariolua.errorMsg + "\nMap uploading cancelled.")
             else:
                 if scenariolua.warning:
                     uploadmap = QtGui.QMessageBox.question(self.client, "Lua parsing warning", scenariolua.errorMsg + "\nDo you want to upload the map?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
                 else:
                     uploadmap = QtGui.QMessageBox.Yes
                 if uploadmap == QtGui.QMessageBox.Yes:
                     savelua = luaparser.luaParser(os.path.join(mapDir,maps.getSaveFile(mapDir)))
                     saveInfos = savelua.parse({'markers>mass*>position':'mass:__parent__', 'markers>hydro*>position':'hydro:__parent__', 'markers>army*>position':'army:__parent__'})
                     if savelua.error or savelua.warning:
                        logger.debug("There were " + str(scenariolua.errors) + " errors and " + str(scenariolua.warnings) + " warnings.")
                        logger.debug(scenariolua.errorMsg)
                     
                     self.__preparePositions(saveInfos, scenarioInfos["map_size"])
                     
                     tmpFile = maps.processMapFolderForUpload(mapDir, saveInfos)
                     if not tmpFile:
                         QtGui.QMessageBox.critical(self.client, "Map uploading error", "Couldn't make previews for " + mapName + "\nMap uploading cancelled.")
                         return None
                     
                     qfile = QtCore.QFile(tmpFile.name)
                     self.client.writeToServer("UPLOAD_MAP", zipName, scenarioInfos, qfile)
             
                     #removing temporary files
                     qfile.remove()
         else :
             QtGui.QMessageBox.information(self.client,"Map selection",
                     "This folder doesn't contain valid map datas.")
Пример #6
0
    def uploadMap(self):
        mapDir = QtGui.QFileDialog.getExistingDirectory(
            self.client, "Select the map directory to upload",
            maps.getUserMapsFolder(), QtGui.QFileDialog.ShowDirsOnly)
        logger.debug("Uploading map from: " + mapDir)
        if mapDir != "":
            if maps.isMapFolderValid(mapDir):
                os.chmod(mapDir, S_IWRITE)
                mapName = os.path.basename(mapDir)
                zipName = mapName.lower() + ".zip"

                scenariolua = luaparser.luaParser(
                    os.path.join(mapDir, maps.getScenarioFile(mapDir)))
                scenarioInfos = scenariolua.parse(
                    {
                        'scenarioinfo>name': 'name',
                        'size': 'map_size',
                        'description': 'description',
                        'count:armies': 'max_players',
                        'map_version': 'version',
                        'type': 'map_type',
                        'teams>0>name': 'battle_type'
                    }, {'version': '1'})

                if scenariolua.error:
                    logger.debug("There were " + str(scenariolua.errors) +
                                 " errors and " + str(scenariolua.warnings) +
                                 " warnings.")
                    logger.debug(scenariolua.errorMsg)
                    QtGui.QMessageBox.critical(
                        self.client, "Lua parsing error",
                        scenariolua.errorMsg + "\nMap uploading cancelled.")
                else:
                    if scenariolua.warning:
                        uploadmap = QtGui.QMessageBox.question(
                            self.client, "Lua parsing warning",
                            scenariolua.errorMsg +
                            "\nDo you want to upload the map?",
                            QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
                    else:
                        uploadmap = QtGui.QMessageBox.Yes
                    if uploadmap == QtGui.QMessageBox.Yes:
                        savelua = luaparser.luaParser(
                            os.path.join(mapDir, maps.getSaveFile(mapDir)))
                        saveInfos = savelua.parse({
                            'markers>mass*>position':
                            'mass:__parent__',
                            'markers>hydro*>position':
                            'hydro:__parent__',
                            'markers>army*>position':
                            'army:__parent__'
                        })
                        if savelua.error or savelua.warning:
                            logger.debug("There were " +
                                         str(scenariolua.errors) +
                                         " errors and " +
                                         str(scenariolua.warnings) +
                                         " warnings.")
                            logger.debug(scenariolua.errorMsg)

                        self.__preparePositions(saveInfos,
                                                scenarioInfos["map_size"])

                        tmpFile = maps.processMapFolderForUpload(
                            mapDir, saveInfos)
                        if not tmpFile:
                            QtGui.QMessageBox.critical(
                                self.client, "Map uploading error",
                                "Couldn't make previews for " + mapName +
                                "\nMap uploading cancelled.")
                            return None

                        qfile = QtCore.QFile(tmpFile.name)
                        self.client.writeToServer("UPLOAD_MAP", zipName,
                                                  scenarioInfos, qfile)

                        #removing temporary files
                        qfile.remove()
            else:
                QtGui.QMessageBox.information(
                    self.client, "Map selection",
                    "This folder doesn't contain valid map data.")
Пример #7
0
def parseModInfo(folder):
    if not isModFolderValid(folder):
        return None
    modinfofile = luaparser.luaParser(os.path.join(folder, "mod_info.lua"))
    return getModInfo(modinfofile)
Пример #8
0
def parseModInfo(folder):
    if not isModFolderValid(folder):
        return None
    modinfofile = luaparser.luaParser(os.path.join(folder, "mod_info.lua"))
    return getModInfo(modinfofile)