kharlashkin 239 Posted October 21, 2014 Доброе время суток всему форумному сообществу! Для модов тактильной обратной связи, динамического управления камеры, динамического газа и прочих логично добавить редактирование коэффициентов/назначение клавиш без декомпиляции/компиляции модов, а через xml-файлик. Будьте добры, дайте пример или ссылку на реализацию. Quote Share this post Link to post Short link Share on other sites
Uti-Puti 344 #224268 Posted October 21, 2014 Попробуй в XVM подсмотреть, там есть замена клавиш на зум миникарты. 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #224271 Posted October 21, 2014 Попробуй в XVM подсмотреть, там есть замена клавиш на зум миникарты. Как бэ я поэтому и прошу ссылки потому как можно "закопаться" в таком монcтре как XVM :) Вроде нашел в в другом месте буду пробовать: ds = ResMgr.openSection('scripts/client/mods/XYZ.xml') if ds is not None: self.IndicatorX = ds.readInt('xPos') self.IndicatorY = ds.readInt('yPos') else: LOG_NOTE('unable to open XYZ.xml') Quote Share this post Link to post Short link Share on other sites
yaotzinv 145 #224272 Posted October 21, 2014 (edited) Как бэ я поэтому и прошу ссылки потому как можно "закопаться" в таком монcтре как XVM :) Вроде нашел в в другом месте буду пробовать: ds = ResMgr.openSection('scripts/client/mods/XYZ.xml') if ds is not None: self.IndicatorX = ds.readInt('xPos') self.IndicatorY = ds.readInt('yPos') else: LOG_NOTE('unable to open XYZ.xml') смотрите первоисточник. http://uaolymp.tk/static/client/doc/ResMgr.html 'методы' def child( self, index ):def childName( self, index ): def cleanName( self ): def copy( self, source ): def copyToZip( self ): def createSection( self, sectionPath ): def createSectionFromString( self, string ): def deleteSection( self, section ): def has_key( self, key ): def isNameClean( self ): def items( self ): def keys( self ): def readBlob( self, sectionName, defaultVal ): def readBool( self, sectionName, defaultVal ): def readFloat( self, sectionName, defaultVal ): def readFloats( self, sectionName ): def readInt( self, sectionName, defaultVal ): def readInt64( self, sectionName, defaultVal ): def readInts( self, sectionName ): def readMatrix( self, sectionName, defaultVal ): def readString( self, sectionName, defaultVal ): def readStrings( self, sectionName ): def readVector2( self, sectionName, defaultVal ): def readVector2s( self, sectionName ): def readVector3( self, sectionName, defaultVal ): def readVector3s( self, sectionName ): def readVector4( self, sectionName, defaultVal ): def readVector4s( self, sectionName ): def readWideString( self, sectionName, defaultVal ): def readWideStrings( self, sectionName ): def save( self ): def values( self ): def write( self, sectionName, value ): def writeBlob( self, sectionName, text ): def writeBool( self, sectionName, val ): def writeFloat( self, sectionName, val ): def writeFloats( self, sectionName, values ): def writeInt( self, sectionName, val ): def writeInt64( self, sectionName, val ): def writeInts( self, sectionName, values ): def writeMatrix( self, sectionName, val ): def writeString( self, sectionName, text ): def writeStrings( self, sectionName, values ): def writeVector2( self, sectionName, val ): def writeVector2s( self, sectionName, values ): def writeVector3( self, sectionName, val ): def writeVector3s( self, sectionName, values ): def writeVector4( self, sectionName, val ): def writeVector4s( self, sectionName, values ): def writeWideString( self, sectionName, text ): def writeWideStrings( self, sectionName, values ): Edited October 21, 2014 by yaotzinv Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #224288 Posted October 21, 2014 (edited) смотрите первоисточник. http://uaolymp.tk/static/client/doc/ResMgr.html И опять меня "НЯЯЯ" мордой ап землю;) Документация это очень хорошо, но я чего прошу ж все таки: from Avatar import PlayerAvatar, _CRUISE_CONTROL_MODE import Keys from debug_utils import * old_handleKey = PlayerAvatar.handleKey def new_handleKey(self, isDown, key, mods): old_handleKey(self, isDown, key, mods) if not self.userSeesWorld(): return False else: try: if isDown: if key == Keys.KEY_H: self._PlayerAvatar__cruiseControlMode = _CRUISE_CONTROL_MODE.FWD25 self.moveVehicle(self.makeVehicleMovementCommandByKeys(), isDown) self._PlayerAvatar__updateCruiseControlPanel() return True elif key == Keys.KEY_H: self._PlayerAvatar__cruiseControlMode = _CRUISE_CONTROL_MODE.NONE self.moveVehicle(self.makeVehicleMovementCommandByKeys(), isDown) self._PlayerAvatar__updateCruiseControlPanel() return True except Exception: LOG_CURRENT_EXCEPTION() return True return False PlayerAvatar.handleKey = new_handleKey Вот нужно добавить, чтобы эта самая клавиша "H" бралась из xml. <XYZ.xml> <KEY_CCM_FWD25>KEY_H</KEY_CCM_FWD25> </XYZ.xml> Как то так... P.S. Может я немного резковато выразился, но имелось ввиду, что у меня нет ни времени ни желания изучать многостраничную документацию. Хочется просто пример, переделав который я получу желаемое. Edited October 21, 2014 by kharlashkin Quote Share this post Link to post Short link Share on other sites
yaotzinv 145 #224292 Posted October 21, 2014 (edited) вот пример с моего мода, как раз то что вам надо. from debug_utils import LOG_ERROR, LOG_DEBUG, LOG_NOTE #глобальные переменныеbutton_key_setXYZ=Keys.KEY_MOUSE2 def load_XML_settings(): global button_key_setXYZ #переменная кнопки установки координат XYZ import ResMgr xmlfile = ResMgr.openSection("coordinatesXYZ.xml") if xmlfile is not None:#загружаю данные с хмл файла LOG_NOTE("загружаю coordinatesXYZ.xml ...") button_key_setXYZ = xmlfile.readInt('button_key_setXYZ') #кнопка маркера else: button_key_setXYZ = Keys.KEY_MOUSE2 #кнопка маркера LOG_ERROR("нет файла coordinatesXYZ.xml куда ты его бля засунул???? load default settings...")######################################################################################мод #загрузить настройки xmlload_XML_settings() -------------------------------------------------------------------- coordinatesXYZ.xml <coordinatesXYZ.xml> <button_key_setXYZ>258</button_key_setXYZ></coordinatesXYZ.xml> Edited October 21, 2014 by yaotzinv 1 Quote Share this post Link to post Short link Share on other sites
MakcT40 331 #224293 Posted October 21, 2014 (edited) Ну вот по аналогии с вышеприведённым примером и можно написать как-то так: ... old_handleKey = PlayerAvatar.handleKey ### key_fwd25 = Keys.KEY_H from ResMgr import openSection ds = openSection('scripts/client/mods/XYZ.xml') if ds is not None: if ds has_key('KEY_CCM_FWD25'): key_fwd25 = getattr(Keys, ds.readString('KEY_CCM_FWD25')) ### ... И далее в тексте заменить Keys.KEY_H на переменную key_fwd25. Add: Упс, уже всё написали раньше меня. :) Edited October 21, 2014 by MakcT40 1 Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #224295 Posted October 21, 2014 вот пример с моего мода, как раз то что вам надо. from debug_utils import LOG_ERROR, LOG_DEBUG, LOG_NOTE #глобальные переменные button_key_setXYZ=Keys.KEY_MOUSE2 def load_XML_settings(): global button_key_setXYZ #переменная кнопки установки координат XYZ import ResMgr xmlfile = ResMgr.openSection("coordinatesXYZ.xml") if xmlfile is not None:#загружаю данные с хмл файла LOG_NOTE("загружаю coordinatesXYZ.xml ...") button_key_setXYZ = xmlfile.readInt('button_key_setXYZ') #кнопка маркера else: button_key_setXYZ = Keys.KEY_MOUSE2 #кнопка маркера LOG_ERROR("нет файла coordinatesXYZ.xml куда ты его бля засунул???? load default settings...") ######################################################################################мод #загрузить настройки xml load_XML_settings() -------------------------------------------------------------------- coordinatesXYZ.xml <coordinatesXYZ.xml> <button_key_setXYZ>258</button_key_setXYZ> </coordinatesXYZ.xml> Ну вот по аналогии с вышеприведённым примером и можно написать как-то так: ... old_handleKey = PlayerAvatar.handleKey ### key_fwd25 = Keys.KEY_H from ResMgr import openSection ds = openSection('scripts/client/mods/XYZ.xml') if ds is not None: if ds has_key('KEY_CCM_FWD25'): key_fwd25 = getattr(Keys, ds.readString('KEY_CCM_FWD25')) ### ... И далее в тексте заменить Keys.KEY_H на переменную key_fwd25. Add: Упс, уже всё написали раньше меня. :) Вот это то что нужно, вечером буду пробовать! Quote Share this post Link to post Short link Share on other sites
kharlashkin 239 #224503 Posted October 22, 2014 симпатично получается;) тест: Quote Share this post Link to post Short link Share on other sites