def export_image(self): """内部画像を出力する""" if not hasattr(self, "image"): return "" # 画像保存ディレクトリ if self.xmltype == "Summary": imgdir = self.get_dir() elif self.xmltype == "BeastCard" and self.summoneffect: imgdir = self.get_imgdir() if not imgdir: root = self.get_root() name = util.check_filename(root.name) imgdir = util.join_paths(self.get_dir(), "Material", root.xmltype, name) imgdir = util.check_duplicate(imgdir) self.set_imgdir(imgdir) elif self.xmltype in ("Adventurer", "SkillCard", "ItemCard", "BeastCard", "CastCard"): name = util.check_filename(self.name) imgdir = util.join_paths(self.get_dir(), "Material", self.xmltype, name) imgdir = util.check_duplicate(imgdir) self.set_imgdir(imgdir) else: imgdir = util.join_paths(self.get_dir(), "Material", self.xmltype) # 画像保存 if self.image: # 画像パス if self.xmltype == "Summary": path = util.join_paths(imgdir, self.xmltype + ".bmp") else: name = util.check_filename(self.name) + ".bmp" path = util.join_paths(imgdir, name) # 画像出力 path = util.check_duplicate(path) if not os.path.isdir(imgdir): os.makedirs(imgdir) f = open(path, "wb") f.write(self.image) f.close() # 最後に参照パスを返す path = path.replace(self.get_dir() + "/", "", 1) return util.repl_escapechar(path) else: return ""
def convert(self): if not self.datalist: self.load() self.curnum = 0 # 宿データをxmlに変換 for data in self.datalist: self.message = u"%s を変換中" % (os.path.basename(data.fpath)) self.curnum += 1 try: data.create_xml(self.dir) except: s = os.path.basename(data.fpath) s = u"%s は変換できませんでした。\n" % (s) self.write_errorlog(s) # その他のファイルを宿ディレクトリにコピー for path in self.otherfiles: self.message = u"%s をコピー中" % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) if not os.access(dst, os.R_OK|os.W_OK|os.X_OK): os.chmod(dst, stat.S_IWRITE|stat.S_IREAD) # ディレクトリを宿ディレクトリにコピー for path in self.otherdirs: self.message = u"%s をコピー中" % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copytree(path, dst) if not os.access(dst, os.R_OK|os.W_OK|os.X_OK): os.chmod(dst, stat.S_IWRITE|stat.S_IREAD) # 存在しないディレクトリを作成 dnames = ("Adventurer", "Album", "BeastCard", "ItemCard", "SkillCard", "Party") for dname in dnames: path = util.join_paths(self.dir, dname) if not os.path.isdir(path): os.makedirs(path) self.curnum = self.maxnum return self.dir
def convert(self): if not self.datalist: self.load() self.curnum = 0 # シナリオファイルをxmlに変換 for data in self.datalist: self.message = u"%s を変換中..." % (os.path.basename(data.fpath)) self.curnum += 1 try: data.create_xml(self.dir) except Exception: cw.util.print_ex() s = os.path.basename(data.fpath) s = u"%s は変換できませんでした。\n" % (s) self.write_errorlog(s) # 素材ファイルをMaterialディレクトリにコピー materialdir = util.join_paths(self.dir, "Material") if not os.path.isdir(materialdir): os.makedirs(materialdir) for path in self.materials: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(materialdir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) # その他のファイルをシナリオディレクトリにコピー for path in self.otherfiles: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) # ディレクトリをシナリオディレクトリにコピー for path in self.otherdirs: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copytree(path, dst) self.curnum = self.maxnum return self.dir
def convert(self): if not self.datalist: self.load() self.curnum = 0 # シナリオファイルをxmlに変換 for data in self.datalist: self.message = u"%s を変換中" % (os.path.basename(data.fpath)) self.curnum += 1 try: data.create_xml(self.dir) except: s = os.path.basename(data.fpath) s = u"%s は変換できませんでした。\n" % (s) self.write_errorlog(s) # 素材ファイルをMaterialディレクトリにコピー materialdir = util.join_paths(self.dir, "Material") if not os.path.isdir(materialdir): os.makedirs(materialdir) for path in self.materials: self.message = u"%s をコピー中" % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(materialdir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) # その他のファイルをシナリオディレクトリにコピー for path in self.otherfiles: self.message = u"%s をコピー中" % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) # ディレクトリをシナリオディレクトリにコピー for path in self.otherdirs: self.message = u"%s をコピー中" % (os.path.basename(path)) self.curnum += 1 dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copytree(path, dst) self.curnum = self.maxnum return self.dir
def create_xml(self, dpath): """XMLファイルを作成する。 dpath: XMLを作成するディレクトリ """ # 保存ディレクトリ設定 self.set_dir(dpath) # xml文字列取得 xmltext = '<?xml version="1.0" encoding="UTF-8"?>\n' xmltext += self.get_xmltext(0) # xmlファイルパス if self.xmltype in ("Summary", "Environment"): path = util.join_paths(self.get_dir(), self.xmltype + ".xml") else: name = util.check_filename(self.name) + ".xml" # シナリオデータは先頭にidを付与 if not self.is_yadodata(): name = str(self.id).zfill(2) + "_" + name path = util.join_paths(self.get_dir(), self.xmltype, name) # xml出力 path = util.check_duplicate(path) if not os.path.isdir(os.path.dirname(path)): os.makedirs(os.path.dirname(path)) f = open(path, "wb") f.write(xmltext.encode("utf-8")) f.close()
def __init__(self, path, dstpath, skintype=""): self.name = os.path.basename(path) self.path = path self.dir = util.join_paths(dstpath, os.path.basename(path)) self.dir = util.check_duplicate(self.dir) self.skintype = skintype # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 # 読み込んだデータリスト self.datalist = [] self.wyd = None self.wchs = [] self.wcps = [] self.wrms = [] self.wpls = [] self.wpts = [] self.nowadventuringparties = [] # エラーログ self.errorlog = "" # pathにあるファイル・ディレクトリを # (宿ファイル,シナリオファイル,その他のファイル,ディレクトリ)に種類分け。 exts_yado = set(["wch", "wcp", "wpl", "wpt", "wrm", "whs"]) exts_sce = set(["wsm", "wid", "wcl"]) exts_ignore = set(["wck", "wci", "wcb"]) self.yadofiles = [] self.cardfiles = [] self.otherfiles = [] self.otherdirs = [] self.environmentpath = None for name in os.listdir(self.path): path = util.join_paths(self.path, name) if os.path.isfile(path): ext = cw.util.splitext(name)[1].lstrip(".").lower() if name == "Environment.wyd" and not self.environmentpath: self.environmentpath = path self.yadofiles.append(path) elif ext in exts_yado: self.yadofiles.append(path) elif ext in exts_sce: self.cardfiles.append(path) elif not ext in exts_ignore: self.otherfiles.append(path) else: self.otherdirs.append(path)
def __init__(self, path, dstpath, skintype=""): self.name = os.path.basename(path) self.path = path self.dir = util.join_paths(dstpath, os.path.basename(path)) self.dir = util.check_duplicate(self.dir) self.skintype = skintype # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 # 読み込んだデータリスト self.datalist = [] self.wyd = None self.wchs = [] self.wcps = [] self.wrms = [] self.wpls = [] self.wpts = [] # エラーログ self.errorlog = "" # pathにあるファイル・ディレクトリを # (宿ファイル,シナリオファイル,その他のファイル,ディレクトリ)に種類分け。 exts_yado = set(["wch", "wcp", "wpl", "wpt", "wrm"]) exts_sce = set(["wsm", "wid"]) self.yadofiles = [] self.cardfiles = [] self.otherfiles = [] self.otherdirs = [] self.environmentpath = None for name in os.listdir(self.path): path = util.join_paths(self.path, name) if os.path.isfile(path): ext = os.path.splitext(name)[1].lstrip(".").lower() if name == "Environment.wyd" and not self.environmentpath: self.environmentpath = path self.yadofiles.append(path) elif ext in exts_yado: self.yadofiles.append(path) elif ext in exts_sce: self.cardfiles.append(path) else: self.otherfiles.append(path) else: self.otherdirs.append(path)
def __init__(self, ydata, dstpath, targetengine): self.ydata = ydata self.targetengine = targetengine self.name = self.ydata.name self.dir = util.join_paths(dstpath, util.check_filename(self.name)) self.dir = util.check_duplicate(self.dir) # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 self.maxnum += len(ydata.storehouse) self.maxnum += len(ydata.standbys) self.maxnum += len(ydata.partys) * 2 self.maxnum += len(ydata.album) # エラーログ self.errorlog = ""
def __init__(self, path, dstdir, skintype): """カードワースのシナリオを読み込み、XMLファイルに変換するクラス。 path: カードワースシナリオフォルダのパス。 dstdir: 変換先ディレクトリ。 skintype: スキンタイプ。 """ self.name = os.path.basename(path) self.path = path self.dir = util.join_paths(dstdir, os.path.basename(self.path)) self.dir = util.check_duplicate(self.dir) self.skintype = skintype # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 # 読み込んだデータリスト self.datalist = [] # エラーログ self.errorlog = "" # pathにあるファイル・ディレクトリを # (シナリオファイル,素材ファイル,その他ファイル, ディレクトリ)に分ける。 exts_mat = set(["bmp", "jpg", "jpeg", "wav", "wave", "mid", "midi", "jpdc", "jpy1", "jptx"]) self.cwfiles = [] self.materials = [] self.otherfiles = [] self.otherdirs = [] self.summarypath = None for name in os.listdir(self.path): path = util.join_paths(self.path, name) if os.path.isfile(path): ext = os.path.splitext(name)[1].lstrip(".").lower() if name == "Summary.wsm" and not self.summarypath: self.summarypath = path self.cwfiles.append(path) elif ext == "wid": self.cwfiles.append(path) elif ext in exts_mat: self.materials.append(path) else: self.otherfiles.append(path) else: self.otherdirs.append(path)
def convert(self): if not self.datalist: self.load() self.curnum_n = 0 self.curnum = 50 # 宿データをxmlに変換 if not os.path.isdir(self.dir): os.makedirs(self.dir) yadodb = cw.yadodb.YadoDB(self.dir) for data in self.datalist: data.yadodb = yadodb self.message = u"%s を変換中..." % (os.path.basename(data.fpath)) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) try: fpath = data.create_xml(self.dir) if isinstance(data, party.Party) and\ self.wyd.partyname == cw.util.splitext(os.path.basename(data.fpath))[0]: fpath = cw.util.relpath(fpath, self.dir) fpath = cw.util.join_paths(fpath) self.wyd.cwpypartyname = fpath if hasattr(data, "errorcards"): for errcard in data.errorcards: s = errcard.fname s = u"%s は読込できませんでした。\n" % (s) self.write_errorlog(s) except Exception: cw.util.print_ex() s = os.path.basename(data.fpath) s = u"%s は変換できませんでした。\n" % (s) self.write_errorlog(s) # 冒険中情報を変換 for partyinfo, partymembers in self.nowadventuringparties: self.message = u"%s の冒険中情報を変換中..." % (partyinfo.name) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) try: self.create_log(partyinfo, partymembers) except Exception: cw.util.print_ex() s = partyinfo.name s = u"%s の冒険中情報は変換できませんでした。\n" % (s) self.write_errorlog(s) yadodb.commit() yadodb.close() # その他のファイルを宿ディレクトリにコピー for path in self.otherfiles: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copy2(path, dst) if not os.access(dst, os.R_OK | os.W_OK | os.X_OK): os.chmod(dst, stat.S_IWRITE | stat.S_IREAD) # ディレクトリを宿ディレクトリにコピー for path in self.otherdirs: self.message = u"%s をコピー中..." % (os.path.basename(path)) self.curnum_n += 1 self.curnum = min(99, 50 + self.curnum_n * 50 / self.maxnum) dst = util.join_paths(self.dir, os.path.basename(path)) dst = util.check_duplicate(dst) shutil.copytree(path, dst) if not os.access(dst, os.R_OK | os.W_OK | os.X_OK): os.chmod(dst, stat.S_IWRITE | stat.S_IREAD) # 存在しないディレクトリを作成 dnames = ("Adventurer", "Album", "BeastCard", "ItemCard", "SkillCard", "Party") for dname in dnames: path = util.join_paths(self.dir, dname) if not os.path.isdir(path): os.makedirs(path) self.curnum = 100 return self.dir
def create_fpath(name, ext): fpath = util.join_paths(self.dir, util.check_filename(name) + ext) fpath = util.check_duplicate(fpath) return fpath
def __init__(self, path, dstdir, skintype, materialdir="Material", image_export=True): """カードワースのシナリオを読み込み、XMLファイルに変換するクラス。 path: カードワースシナリオフォルダのパス。 dstdir: 変換先ディレクトリ。 skintype: スキンタイプ。 """ self.name = os.path.basename(path) self.path = path self.dir = util.join_paths(dstdir, os.path.basename(self.path)) self.dir = util.check_duplicate(self.dir) self.skintype = skintype self.materialdir = materialdir self.image_export = image_export # progress dialog data self.message = "" self.curnum = 0 self.maxnum = 1 # 読み込んだデータリスト self.datalist = [] # エラーログ self.errorlog = "" # pathにあるファイル・ディレクトリを # (シナリオファイル,素材ファイル,その他ファイル, ディレクトリ)に分ける。 exts_mat = set([ "bmp", "jpg", "jpeg", "wav", "wave", "mid", "midi", "jpdc", "jpy1", "jptx" ]) self.cwfiles = [] self.materials = [] self.otherfiles = [] self.otherdirs = [] self.summarypath = None # 互換性マーク self.versionhint = None self.hasmodeini = False if self.path == "": return for name in os.listdir(self.path): path = util.join_paths(self.path, name) if os.path.isfile(path): ext = cw.util.splitext(name)[1].lstrip(".").lower() if name.lower() == "summary.wsm" and not self.summarypath: self.summarypath = path self.cwfiles.append(path) elif ext == "wid": self.cwfiles.append(path) elif ext in exts_mat: self.materials.append(path) elif name.lower() == "mode.ini": self.read_modeini(path) else: self.otherfiles.append(path) else: self.otherdirs.append(path) if self.summarypath: self.versionhint = cw.cwpy.sct.merge_versionhints( self.versionhint, cw.cwpy.sct.get_versionhint(fpath=self.summarypath))