coJlHe4Hblu_noH4uk Posted October 5, 2014 Share Posted October 5, 2014 Нашел мод, написанный где-то и кем-то, в общем, не суть.Мод с определенным интервалом выкидывает в общий чат сообщения о приглашении в клан.Решил, что называется, переделать его под себя, заодно начал разбираться в python'е, поэтому не судите строго, кирпичи и помидоры принимаются с пояснительными записками. "Декомпилированные запчасти (их мало, поэтому текстом):" Структура папок (важно): -client (папка):---- CameraNode.pyc (измененный)---- BeTeam (папка):--------- __init__.pyc--------- Ad.pyc--------- Chatter.pyc--------- Main.pyc "CameraNode изменен для загрузки модов из папки BeTeam:" import BigWorld class CameraNode(BigWorld.UserDataObject): def __init__(self): BigWorld.UserDataObject.__init__(self) def load_mods(): import ResMgr, os, glob res = ResMgr.openSection('../paths.xml') sb = res['Paths'] vals = sb.values()[0:2] for vl in vals: mp = vl.asString + '/scripts/client/mods/*.pyc' for fp in glob.iglob(mp): _, hn = os.path.split(fp) zn, _ = hn.split('.') if zn != '__init__': print 'Load mods: ' + zn try: exec 'import mods.' + zn except Exception as err: print 'Load mods Error:' + err mp = vl.asString + '/scripts/client/BeTeam/*.pyc' for fp in glob.iglob(mp): _, hn = os.path.split(fp) zn, _ = hn.split('.') if zn != '__init__': print 'Load mods: ' + zn try: exec 'import BeTeam.' + zn except Exception as err: print 'Load mods Error:' + err load_mods() 'Содержимое __init__' # Embedded file name: __init__.py pass 'Содержимое Main' class BeTeam: @staticmethod def l(s): print 'BeTeam.' + s BeTeam.l('loaded') 'Содержимое Chatter' import time import BigWorld from BeTeam.Main import BeTeam from ChatManager import chatManager class Chatter: @staticmethod def l(s): return BeTeam.l('Chatter.' + s) @staticmethod def sendAll(s): return Chatter.send(s, 0) @staticmethod def sendTeam(s): return Chatter.send(s, 1) @staticmethod def send(s, t): to = 0 if t == 0: to = chatManager.battleCommonChannelID elif t == 1: to = chatManager.battleTeamChannelID if to == 0: Chatter.l('send Error: ChannelID = 0') time.sleep(1) Chatter.send(s, t) else: Chatter.l('send Message: ' + s) BigWorld.player().broadcast(to, s) Chatter.l('loaded') 'Содержимое Ad' import time import thread import BigWorld import constants from BeTeam.Main import BeTeam from BeTeam.Chatter import Chatter from gui.WindowsManager import g_windowsManager class Ad: @staticmethod def l(s): return BeTeam.l('Ad.' + s) @staticmethod def adv(): batype = BigWorld.player().arena.guiType if batype == constants.ARENA_GUI_TYPE.RANDOM: Chatter.sendAll('\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd1\x8e \xd0\xb2\xd1\x81\xd0\xb5\xd1\x85 \xd0\xb8\xd0\xb3\xd1\x80\xd0\xbe\xd0\xba\xd0\xbe\xd0\xb2 \xd1\x80\xd0\xb0\xd0\xbd\xd0\xb4\xd0\xbe\xd0\xbc\xd0\xb0, \xd1\x8f \xd0\xb8\xd0\xb7 \xd0\x91\xd0\xb8\xd1\x82\xd0\xbe\xd0\xb2. \xd0\x9f\xd1\x80\xd0\xbe\xd1\x88\xd1\x83 \xd0\xbf\xd0\xb0\xd1\x80\xd1\x83 \xd1\x81\xd0\xb5\xd0\xba\xd1\x83\xd0\xbd\xd0\xb4 \xd0\xb2\xd0\xbd\xd0\xb8\xd0\xbc\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f.') time.sleep(10) Chatter.sendAll('\xd0\x98\xd0\xb4\xd0\xb5\xd1\x82 \xd0\xbd\xd0\xb0\xd0\xb1\xd0\xbe\xd1\x80 \xd0\xb2 \xd0\xbd\xd0\xbe\xd0\xb2\xd1\x8b\xd0\xb9 \xd0\xba\xd0\xbb\xd0\xb0\xd0\xbd BETE, \xd1\x82\xd1\x80\xd0\xb5\xd0\xb1\xd1\x83\xd1\x8e\xd1\x82\xd1\x81\xd1\x8f \xd0\xb1\xd0\xbe\xd0\xb6\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb8\xd0\xb3\xd1\x80\xd0\xbe\xd0\xba\xd0\xb8. \xd0\xa1 \xd0\xbd\xd0\xb0\xd1\x81 4% \xd1\x81\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb1\xd1\x80\xd0\xb0 \xd0\xb7\xd0\xb0 \xd0\xbb\xd1\x8e\xd0\xb1\xd0\xbe\xd0\xb9 \xd0\xb1\xd0\xbe\xd0\xb9.') time.sleep(10) Chatter.sendAll('\xd0\xa7\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8b \xd0\xb1\xd1\x8b\xd1\x82\xd1\x8c \xd1\x81 \xd0\xbd\xd0\xb0\xd0\xbc\xd0\xb8 \xd0\xbd\xd1\x83\xd0\xb6\xd0\xbd\xd0\xbe \xd0\xbd\xd0\xb0\xd0\xb9\xd1\x82\xd0\xb8 \xd0\xba\xd0\xbb\xd0\xb0\xd0\xbd \xd0\xbd\xd0\xb0 \xd0\xbe\xd1\x84\xd1\x84. \xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\xd0\xb5 \xd0\xb8 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb7\xd0\xb0\xd1\x8f\xd0\xb2\xd0\xba\xd1\x83.') else: Chatter.sendAll('\xd0\xa1 \xd0\xb2\xd0\xb0\xd0\xbc\xd0\xb8 \xd0\x91\xd0\xb8\xd1\x82\xd1\x8b!') @staticmethod def mess(): Ad.l('mess') try: thread.start_new_thread(Ad.adv, ()) except: Ad.l('Error: unable to start thread') g_windowsManager.onInitBattleGUI += Ad.mess Ad.l('loaded') Сабж, собственно в том, что хочется мне оформить это одним файлом, который будет грузиться из папки mods обычным загрузчиком. Споткнувшись о python'овские пространства имен, файлы __init__, пакеты и другие вещи прошу помощи, лучше если это будет объяснение, что, к чему, как и почему. res_mods.zip @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.