# -*- coding: utf8 -*- # # Copyright (C) 2014 Evol Online # Author: Andrei Karas (4144) import re from code.configutils import writeIntField, writeStartBlock, writeEndBlock, writeStartScript, writeEndScript, writeStrField, writeSubField from code.fileutils import readFile def convertItemDb(): srcFile = "oldserverdata/db/item_db.txt" dstFile = "newserverdata/db/re/item_db.conf" constsFile = "newserverdata/db/const.txt" fieldsSplit = re.compile(",") scriptsSplit = re.compile("{") items = dict() with open(srcFile, "r") as r: with open(dstFile, "w") as w: with open(constsFile, "a") as c: c.write("// items\n"); tpl = readFile("templates/item_db.tpl") w.write(tpl) for line in r: if len(line) < 2 or line[0] == "#" or line[0:2] == "//": continue rows = fieldsSplit.split(line) if len(rows) < 5 or rows[0] == "0": continue sz = len(rows) if sz > 19: sz = 19 for f in xrange(0, sz): rows[f] = rows[f].strip() if rows[4] == "2": rows[4] = "0" rows[3] = str(int(rows[3]) | 4) items[rows[1]] = rows[0] w.write("{\n") c.write("{0}\t{1}\n".format(rows[1], rows[0])) writeIntField(w, "Id", rows[0]) writeStrField(w, "AegisName", rows[1]) writeStrField(w, "Name", rows[2]) writeIntField(w, "Type", rows[4]) writeIntField(w, "Buy", rows[5]) writeIntField(w, "Sell", rows[6]) writeIntField(w, "Weight", rows[7]) writeIntField(w, "Atk", rows[8]) writeIntField(w, "Matk", "0") writeIntField(w, "Def", rows[9]) writeIntField(w, "Range", rows[10]) writeIntField(w, "Slots", "0") writeIntField(w, "Job", "0xFFFFFFFF") writeIntField(w, "Upper", "0x3F") writeIntField(w, "Gender", rows[13]) writeIntField(w, "Loc", rows[14]) writeIntField(w, "WeaponLv", rows[15]) writeIntField(w, "EquipLv", rows[16]) writeIntField(w, "Refine", "false") if rows[14] == "2": writeIntField(w, "View", "1") else: writeIntField(w, "View", rows[0]) writeIntField(w, "BindOnEquip", "false") writeIntField(w, "BuyingStore", "false") writeIntField(w, "Delay", "0") trade = int(rows[3]) if trade != 0: writeStartBlock(w, "Trade") if trade & 1 == 1: writeSubField(w, "nodrop", "true") if trade & 2 == 2: writeSubField(w, "notrade", "true") if trade & 4 == 4: writeSubField(w, "nodelonuse", "true") if trade & 8 == 8: writeSubField(w, "nostorage", "true") if trade & 256 == 256: writeSubField(w, "nogstorage", "true") if trade & 512 == 512: writeSubField(w, "noselltonpc", "true") if trade != 0: writeEndBlock(w) writeIntField(w, "Sprite", "0") scripts = "" for f in xrange(sz, len(rows)): scripts = scripts + ", " + rows[f] rows = scriptsSplit.split(scripts) cnt = len(rows) if cnt > 1: text = rows[1].strip() if len(text) > 1: text = text[:-2] if text != "": writeStartScript(w, "Script") w.write(" {0}\n".format(text)) writeEndScript(w) w.write("},\n") w.write(")\n") return items