Initial commit: UI-Quellcode (root + uiscript)
Enthaelt die editierbaren Python-UI-Skripte (root/, uiscript/) des EterNexus-Clients, u.a. die Aenderungen fuer aktivierbare Items (constinfo.py: IS_ACTIVATABLE_ITEM/IS_MOUNT_SEAL, uiinventory.py: RefreshBagSlotWindow). Kompilierte Pack-Dateien (.epk/.eix) sowie Binaries/DLLs/Locale-Assets sind bewusst nicht Teil dieses Repos.
This commit is contained in:
+296
@@ -0,0 +1,296 @@
|
||||
import sys
|
||||
import app
|
||||
import dbg
|
||||
|
||||
sys.path.append("lib")
|
||||
|
||||
class TraceFile:
|
||||
def write(self, msg):
|
||||
dbg.Trace(msg)
|
||||
|
||||
class TraceErrorFile:
|
||||
def write(self, msg):
|
||||
dbg.TraceError(msg)
|
||||
dbg.RegisterExceptionString(msg)
|
||||
|
||||
class LogBoxFile:
|
||||
def __init__(self):
|
||||
self.stderrSave = sys.stderr
|
||||
self.msg = ""
|
||||
|
||||
def __del__(self):
|
||||
self.restore()
|
||||
|
||||
def restore(self):
|
||||
sys.stderr = self.stderrSave
|
||||
|
||||
def write(self, msg):
|
||||
self.msg = self.msg + msg
|
||||
|
||||
def show(self):
|
||||
dbg.LogBox(self.msg,"Error")
|
||||
|
||||
sys.stdout = TraceFile()
|
||||
sys.stderr = TraceErrorFile()
|
||||
|
||||
#
|
||||
# pack file support (must move to system.py, systemrelease.pyc)
|
||||
#
|
||||
|
||||
import marshal
|
||||
import imp
|
||||
import pack
|
||||
|
||||
class pack_file_iterator(object):
|
||||
def __init__(self, packfile):
|
||||
self.pack_file = packfile
|
||||
|
||||
def next(self):
|
||||
tmp = self.pack_file.readline()
|
||||
if tmp:
|
||||
return tmp
|
||||
raise StopIteration
|
||||
|
||||
_chr = __builtins__.chr
|
||||
|
||||
class pack_file(object):
|
||||
|
||||
def __init__(self, filename, mode = 'rb'):
|
||||
assert mode in ('r', 'rb')
|
||||
if not pack.Exist(filename):
|
||||
raise IOError, 'No file or directory'
|
||||
self.data = pack.Get(filename)
|
||||
if mode == 'r':
|
||||
self.data=_chr(10).join(self.data.split(_chr(13)+_chr(10)))
|
||||
|
||||
def __iter__(self):
|
||||
return pack_file_iterator(self)
|
||||
|
||||
def read(self, len = None):
|
||||
if not self.data:
|
||||
return ''
|
||||
if len:
|
||||
tmp = self.data[:len]
|
||||
self.data = self.data[len:]
|
||||
return tmp
|
||||
else:
|
||||
tmp = self.data
|
||||
self.data = ''
|
||||
return tmp
|
||||
|
||||
def readline(self):
|
||||
return self.read(self.data.find(_chr(10))+1)
|
||||
|
||||
def readlines(self):
|
||||
return [x for x in self]
|
||||
|
||||
__builtins__.pack_open = pack_open = pack_file
|
||||
|
||||
_ModuleType = type(sys)
|
||||
|
||||
old_import = __import__
|
||||
def _process_result(code, fqname):
|
||||
# did get_code() return an actual module? (rather than a code object)
|
||||
is_module = isinstance(code, _ModuleType)
|
||||
|
||||
# use the returned module, or create a new one to exec code into
|
||||
if is_module:
|
||||
module = code
|
||||
else:
|
||||
module = imp.new_module(fqname)
|
||||
|
||||
# insert additional values into the module (before executing the code)
|
||||
#module.__dict__.update(values)
|
||||
|
||||
# the module is almost ready... make it visible
|
||||
sys.modules[fqname] = module
|
||||
|
||||
# execute the code within the module's namespace
|
||||
if not is_module:
|
||||
exec code in module.__dict__
|
||||
|
||||
# fetch from sys.modules instead of returning module directly.
|
||||
# also make module's __name__ agree with fqname, in case
|
||||
# the "exec code in module.__dict__" played games on us.
|
||||
module = sys.modules[fqname]
|
||||
module.__name__ = fqname
|
||||
return module
|
||||
|
||||
module_do = lambda x:None
|
||||
|
||||
def __pack_import(name,globals=None,locals=None,fromlist=None):
|
||||
if name in sys.modules:
|
||||
return sys.modules[name]
|
||||
|
||||
filename = name + '.py'
|
||||
|
||||
if pack.Exist(filename):
|
||||
dbg.Trace('importing from pack %s\\n' % name)
|
||||
|
||||
newmodule = _process_result(compile(pack_file(filename,'r').read(),filename,'exec'),name)
|
||||
|
||||
module_do(newmodule)
|
||||
return newmodule
|
||||
#return imp.load_module(name, pack_file(filename,'r'),filename,('.py','r',imp.PY_SOURCE))
|
||||
else:
|
||||
dbg.Trace('importing from lib %s\\n' % name)
|
||||
return old_import(name,globals,locals,fromlist)
|
||||
|
||||
def splitext(p):
|
||||
root, ext = '', ''
|
||||
for c in p:
|
||||
if c in ['/']:
|
||||
root, ext = root + ext + c, ''
|
||||
elif c == '.':
|
||||
if ext:
|
||||
root, ext = root + ext, c
|
||||
else:
|
||||
ext = c
|
||||
elif ext:
|
||||
ext = ext + c
|
||||
else:
|
||||
root = root + c
|
||||
return root, ext
|
||||
|
||||
class PythonExecutioner:
|
||||
|
||||
def Run(kPESelf, sFileName, kDict):
|
||||
if kPESelf.__IsCompiledFile__(sFileName):
|
||||
kCode=kPESelf.__LoadCompiledFile__(sFileName)
|
||||
else:
|
||||
kCode=kPESelf.__LoadTextFile__(sFileName)
|
||||
|
||||
exec(kCode, kDict)
|
||||
|
||||
def __IsCompiledFile__(kPESelf, sFileName):
|
||||
|
||||
sBase, sExt = splitext(sFileName)
|
||||
sExt=sExt.lower()
|
||||
|
||||
if sExt==".pyc" or sExt==".pyo":
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def __LoadTextFile__(kPESelf, sFileName):
|
||||
sText=pack_open(sFileName,'r').read()
|
||||
return compile(sText, sFileName, "exec")
|
||||
|
||||
def __LoadCompiledFile__(kPESelf, sFileName):
|
||||
kFile=pack_open(sFileName)
|
||||
|
||||
if kFile.read(4)!=imp.get_magic():
|
||||
raise
|
||||
|
||||
kFile.read(4)
|
||||
|
||||
kData=kFile.read()
|
||||
return marshal.loads(kData)
|
||||
|
||||
def execfile(fileName, dict):
|
||||
kPE=PythonExecutioner()
|
||||
kPE.Run(fileName, dict)
|
||||
|
||||
def exec_add_module_do(mod):
|
||||
global execfile
|
||||
mod.__dict__['execfile'] = execfile
|
||||
|
||||
import __builtin__
|
||||
__builtin__.__import__ = __pack_import
|
||||
module_do = exec_add_module_do
|
||||
|
||||
"""
|
||||
#
|
||||
# PSYCO installation (must move to system.py, systemrelease.pyc)
|
||||
#
|
||||
try:
|
||||
import psyco
|
||||
#from psyco.classes import *
|
||||
|
||||
def bind_me(bindable_list):
|
||||
try:
|
||||
for x in bindable_list:
|
||||
try:
|
||||
psyco.bind(x)
|
||||
except:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
_prev_psyco_old_module_do = module_do
|
||||
def module_bind(module):
|
||||
_prev_psyco_old_module_do(module)
|
||||
#print 'start binding' + str(module)
|
||||
try:
|
||||
psyco.bind(module)
|
||||
except:
|
||||
pass
|
||||
for x in module.__dict__.itervalues():
|
||||
try:
|
||||
psyco.bind(x)
|
||||
except:
|
||||
pass
|
||||
#print 'end binding'
|
||||
|
||||
dbg.Trace("PSYCO installed\\n")
|
||||
|
||||
except Exception, msg:
|
||||
bind_me = lambda x:None
|
||||
dbg.Trace("No PSYCO support : %s\\n" % msg)
|
||||
"""
|
||||
|
||||
def GetExceptionString(excTitle):
|
||||
(excType, excMsg, excTraceBack)=sys.exc_info()
|
||||
excText=""
|
||||
excText+=_chr(10)
|
||||
|
||||
import traceback
|
||||
traceLineList=traceback.extract_tb(excTraceBack)
|
||||
|
||||
for traceLine in traceLineList:
|
||||
if traceLine[3]:
|
||||
excText+="%s(line:%d) %s - %s" % (traceLine[0], traceLine[1], traceLine[2], traceLine[3])
|
||||
else:
|
||||
excText+="%s(line:%d) %s" % (traceLine[0], traceLine[1], traceLine[2])
|
||||
|
||||
excText+=_chr(10)
|
||||
|
||||
excText+=_chr(10)
|
||||
excText+="%s - %s:%s" % (excTitle, excType, excMsg)
|
||||
excText+=_chr(10)
|
||||
|
||||
return excText
|
||||
|
||||
def ShowException(excTitle):
|
||||
excText=GetExceptionString(excTitle)
|
||||
dbg.TraceError(excText)
|
||||
app.Abort()
|
||||
|
||||
return 0
|
||||
|
||||
def RunMainScript(name):
|
||||
try:
|
||||
execfile(name, __main__.__dict__)
|
||||
except RuntimeError, msg:
|
||||
msg = str(msg)
|
||||
|
||||
import locale
|
||||
if locale.error:
|
||||
msg = locale.error.get(msg, msg)
|
||||
|
||||
dbg.LogBox(msg)
|
||||
app.Abort()
|
||||
|
||||
except:
|
||||
msg = GetExceptionString("Run")
|
||||
dbg.LogBox(msg)
|
||||
app.Abort()
|
||||
|
||||
import debugInfo
|
||||
debugInfo.SetDebugMode(__DEBUG__)
|
||||
|
||||
loginMark = "-cs"
|
||||
|
||||
app.__COMMAND_LINE__ = __COMMAND_LINE__
|
||||
RunMainScript("prototype.py")
|
||||
|
||||
Reference in New Issue
Block a user