Jump to content
Korean Random
kharlashkin

Помогите с XML

Recommended Posts

Доброе время суток всему форумному сообществу!

 

Для модов тактильной обратной связи, динамического управления камеры, динамического газа и прочих логично добавить редактирование коэффициентов/назначение клавиш без декомпиляции/компиляции модов, а через xml-файлик.

 

Будьте добры, дайте пример или ссылку на реализацию.

Share this post


Link to post

Short link
Share on other sites

Попробуй в 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')

Share this post


Link to post

Short link
Share on other sites

 

Как бэ я поэтому и прошу ссылки потому как можно "закопаться" в таком мон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 by yaotzinv

Share this post


Link to post

Short link
Share on other sites

смотрите первоисточник.

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 by kharlashkin

Share this post


Link to post

Short link
Share on other sites

вот пример с моего мода, как раз то что вам надо.

 

 

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>

Edited by yaotzinv
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Ну вот по аналогии с вышеприведённым примером и можно написать как-то так:

...
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 by MakcT40
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

вот пример с моего мода, как раз то что вам надо.

 

 

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:

Упс, уже всё написали раньше меня. :)

 

Вот это то что нужно, вечером буду пробовать!

Share this post


Link to post

Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...