Jump to content
Korean Random
slavon23

Маскировка, обзор, обнаружение. Динамические круги на миникарте/minimap

Recommended Posts

вы вообще видите в какой теме обсуждаете? Для этого мода есть отдельная тема в другом разделе.

 

Действительно компот какой-то.... Надо вернуться к названию темы.

 

Вот я писал ранее

Надо за расчетный ТО брать ТО наиболее глазастого танка противника из живых на данный момент, затем рассчитывать две величины 1.1TO и 1.25TO, после чего вычитать из этого нашу маскировку и получать два рабочих круга: боевой и засадный.

Для примера, который выше, пусть я стою на хэлкате со 100% экипажем без перок и модулей, тогда получаем:

- ТОmax = 380 м

- коэфф. незаметности (по метериалам темы "Маскировка"): Kn=0.2114

- боевой круг засвета: 1.1*380-0.2114*(1.1*380-50) = 340 м

- засадный круг засвета: 1.25*380-0.2114*(1.25*380-50) = 385 м

 

А когда останутся в бою только хомячки и ТОmax упадет до 360 м, то боевой и засадный круги станут равными: 323 м и 365 м

 

Единственное что смущает это то, что для расчета коэф. незаметности нужно чтобы XVM считывал перед боем комплектацию машины и чуть не забыл, а также он должен детектировать стоите вы или нет. Хотя и в этом случае мы теряем из расчета кустовой коэффицент. Но его ни как не учесть, если только еще 2 круга добавить и сделать из миникарты радугу :))))

 

 

Может кто возьмётся сделать это, на базе возможностей XVM Tank Minimap Ranges, допил конечно потребуется, считывание состава противника и расчет его лучшего ТО и расчет своей маски по формуле из темы о маскировке.

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Я переделал мод... теперь он пишет круги прямо в minimapCircles.xc.

 

И как он определяет, в какой папке лежит МОЙ minimapCircles.xc

Share this post


Link to post

Short link
Share on other sites

И как он определяет, в какой папке лежит МОЙ minimapCircles.xc

я посмотрел в скрипте, путь по умолчанию следующий res_mods\xvm\configs

Share this post


Link to post

Short link
Share on other sites

Вы вообще этот мод знаете?

 

Вы тоже понимаете что пишете?

 

Чем отличается обзор в покое от обзора в движении? Ок... выключается труба... тогда чем отличается обзор в покое от обзора с трубой?

Понимаю.

1.Покой бывает с трубой и без.

2.А если и с трубой, то первые 3сек труба не действует.

Думаю теперь и ты начнешь понимать!

И как он определяет, в какой папке лежит МОЙ minimapCircles.xc

Ему этого не понять. Если ты сам внутри скрипта не пропишеш путь к папке с названием твоего конфига.



xvm_configuration_file = os.getcwd() + os.sep + 'res_mods' + os.sep + 'xvm' + os.sep + 'configs'
+ os.sep + 'моя папка' + os.sep + 'minimapCircles.xc'

И этот скрипт будет работать у других только при условии если они тоже так папку обзовут))

Edited by SuperXcool

Share this post


Link to post

Short link
Share on other sites

По скриптам питона тут есть отдельная тема... я понимаю, что хочется сделать и разобраться самому...и это похвально. Можете бросить мне свой скрипт, я соберу. Но у меня вопрос... я сам не на много дальше ушел в изучении питона, но зачем было изначально плодить новые файлы? Зачем это надо, если скрипт этот лишь использует возможности самого XVM? Почему не писать данные по кругам сразу в minimapCircles.xc? Тогда и в фале minimap.xc ничего менять не придется! Ну это мои мысли... я так и сделал... все шикарно работает. 

По поводу скриптов питона и отдельной темы, как раз сам поковырявшись в ней и сподвигся так сказать на манипуляции с питоном. http://www.koreanrandom.com/forum/topic/6127-как-и-чем-декомпилироватькомпилировать-питон/?p=112679

Теперь о лишних файлах в конфиге xvm, я так скажу. Мне абсолютно без разницы какой файл создаётся питоновским скриптом. Но.

Протестировав два различный скрипта, Ваш собственно и скрипт "kashbessm" я предпочёл, чтобы на карте отображались круги, в том числе и свыше максимально допустимого обзора, с учётом модулей. Вы там выше в теме обсуждали это, надо, или не надо. Не будем вступать в полемику. Мне, надо =) такая вот прихоть.

И небыло бы моей писанины, если-бы у господина "kashbessm", файлик tankrange.xc создавался в нужной мне директории.

Но вот возникло то, что ваш скрипт, граммотно делает то, что создаёт конфиг файл minimapCircles.xc вместо лишнего tankrange.xc, но скрипт "kashbessm" пишет нужные мне круги. Теперь вторая часть марлезонского балета, вот собственно сорец который не собирается моими кривыми ручёнками, которые управляются в свою очередь куцыми мозгами.  https://www.dropbox.com/s/p4nbfpgllputt4w/currentvehicle_01.rar в нём я изменил  путь создания файла tankrange.xc.

 

 

P.S. А будет ли работать, если в скрипте поменять только эту строчку

xvm_configuration_file = os.getcwd() + os.sep + 'res_mods' + os.sep + 'xvm' + os.sep + 'configs' + os.sep + 'tankrange.xc'

на вот такую строчку

xvm_configuration_file = os.getcwd() + os.sep + 'res_mods' + os.sep + 'xvm' + os.sep + 'configs' + os.sep + 'minimapCircles.xc'
Edited by evil_rrock

Share this post


Link to post

Short link
Share on other sites

я посмотрел в скрипте, путь по умолчанию следующий res_mods\xvm\configs

Все верно. А общепринятый путь для конфига res_mods\xvm\configs\название папки\а в ней уже minimapCircles.xc и все остальное

Share this post


Link to post

Short link
Share on other sites

Я в питоне не бум-бум, не мой это язык :)))), но вопрос, а там разве нельзя считать sample.xc, выдрать имя папки с активным конфигом и его приконкатенировать к пути res_mods\xvm\configs ? Или можно но сложно?

Share this post


Link to post

Short link
Share on other sites

Я в питоне не бум-бум, не мой это язык :)))), но вопрос, а там разве нельзя считать sample.xc, выдрать имя папки с активным конфигом и его приконкатенировать к пути res_mods\xvm\configs ? Или можно но сложно?

помоему элементарно реализуемо.

Share this post


Link to post

Short link
Share on other sites

Понимаю.

1.Покой бывает с трубой и без.

2.А если и с трубой, то первые 3сек труба не действует.

Думаю теперь и ты начнешь понимать!

Ему этого не понять. Если ты сам внутри скрипта не пропишеш путь к папке с названием твоего конфига. И этот скрипт будет работать у других только при условии если они тоже так папку обзовут))

Чем покой без трубы (до 3 сек) отличается от движения по обзору танка? Так понятнее?

Я в питоне не бум-бум, не мой это язык :)))), но вопрос, а там разве нельзя считать sample.xc, выдрать имя папки с активным конфигом и его приконкатенировать к пути res_mods\xvm\configs ? Или можно но сложно?

Это элементарно делается... но может быть одна заковырка... при извлечении этих данных автоматом скрипт может стать чувствительным к русским символам в пути... прецеденты были.

Edited by Yusha

Share this post


Link to post

Short link
Share on other sites

Чем покой без трубы (до 3 сек) отличается от движения по обзору танка? Так понятнее?

 

Что за придирки? Если ПМС -ношпа поможет!=)

Я переделал мод... теперь он пишет круги прямо в minimapCircles.xc.

А где мод? Я тоже хочу, чтоб и у меня писало в res_mods\xvm\configs\моя папка\minimapCircles.xc

---------------------

 

Вот еслиб кто прикрутил к currentvehicle.py currentvehicle.cfg в котором каждый смог указать путь к файлу и название какое душе угодно. и + true/false на остальное.

Edited by SuperXcool
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Вот еслиб кто прикрутил к currentvehicle.py currentvehicle.cfg в котором каждый смог указать путь к файлу и название какое душе угодно. и + true/false на остальное.

мне почему-то кажется, что это не реально, так как работа с питоновским скриптом, подразумевает декомпиляцию и компиляцию.

Share this post


Link to post

Short link
Share on other sites

как пример приведу сессионную статистику от Dellux.

я могу быть не прав. но помоему файл цфг, не затрагивает питоновский скрипт. он подтягивает к скрипту, цвета и прочую лабуду из конфига xvm, на сколько я понял.

здесь же ситуёвина принципиально иная. где скрипт создаёт файл по определённому пути и эта функция вшита в скрипт, и изменить это можно только декомпиляцией-компиляцией. на истинность высказывания своего не претендую

Share this post


Link to post

Short link
Share on other sites

Что за придирки? Если ПМС -ношпа поможет!=)

Т.е. ответить не можете?

Share this post


Link to post

Short link
Share on other sites

Т.е. ответить не можете?

не могли бы глянуть, всё ли у меня верно вышло? http://www.koreanrandom.com/forum/topic/6127-как-и-чем-декомпилироватькомпилировать-питон/?p=122688

если конечно не затруднит

реализовал создания файла minimapCircles.xc по пути res_mods\xvm\configs

Edited by evil_rrock

Share this post


Link to post

Short link
Share on other sites

мне почему-то кажется, что это не реально, так как работа с питоновским скриптом, подразумевает декомпиляцию и компиляцию.

Вот внутри два декомпилированых скрипта из этой темы, от разных авторов, вот только что дальше с ними  делать?((

не могли бы глянуть, всё ли у меня верно вышло? http://www.koreanrandom.com/forum/topic/6127-как-и-чем-декомпилироватькомпилировать-питон/?p=122688

если конечно не затруднит

реализовал создания файла minimapCircles.xc по пути res_mods\xvm\configs

Notepad ошибку выдал:

 
# 2013.11.05 17:41:16 Финляндия (зима)
# Embedded file name: currentvehicle.py
import BigWorld
from Event import Event
from items import vehicles
from helpers import isPlayerAccount
from adisp import async, process
from account_helpers.AccountSettings import AccountSettings, CURRENT_VEHICLE
from gui.ClientUpdateManager import g_clientUpdateManager
from gui import prb_control
from gui.shared import g_itemsCache, REQ_CRITERIA
from gui.shared.utils.HangarSpace import g_hangarSpace
from gui.shared.gui_items import GUI_ITEM_TYPE
from gui.shared.gui_items.Vehicle import Vehicle
from gui.Scaleform.locale.MENU import MENU
from gui.Scaleform.Waiting import Waiting
import io, os, json, codecs, math
from items import tankmen
from debug_utils import *

class _CurrentVehicle():
    __module__ = __name__

    def __init__(self):
        self.__vehInvID = 0
        self.__changeCallbackID = None
        self.onChanged = Event()
        self.onChangeStarted = Event()
        self.__crew = {}
        return None
        return None

    def init(self):
        g_clientUpdateManager.addCallbacks({'inventory': self.onInventoryUpdate,
         'cache.vehsLock': self.onLocksUpdate})
        prbVehicle = self.__checkPrebattleLockedVehicle()
        storedVehInvID = AccountSettings.getFavorites(CURRENT_VEHICLE)
        self.selectVehicle(prbVehicle or storedVehInvID)

    def destroy(self):
        self.__vehInvID = 0
        self.__clearChangeCallback()
        self.onChanged.clear()
        self.onChangeStarted.clear()
        g_clientUpdateManager.removeObjectCallbacks(self)
        g_hangarSpace.removeVehicle()
        self.selectNoVehicle()

    def onInventoryUpdate--- This code section failed: ---

0	LOAD_FAST         'invDiff'
3	LOAD_ATTR         'get'
6	LOAD_GLOBAL       'GUI_ITEM_TYPE'
9	LOAD_ATTR         'VEHICLE'
12	BUILD_MAP         None
15	CALL_FUNCTION_2   None
18	STORE_FAST        'vehsDiff'

21	LOAD_GLOBAL       'False'
24	STORE_FAST        'isVehicleSold'

27	LOAD_GLOBAL       'False'
30	STORE_FAST        'isVehicleDescrChanged'

33	LOAD_CONST        'compDescr'
36	LOAD_FAST         'vehsDiff'
39	COMPARE_OP        'in'
42	JUMP_IF_FALSE     '61'
45	LOAD_DEREF        'self'
48	LOAD_ATTR         '__vehInvID'
51	LOAD_FAST         'vehsDiff'
54	LOAD_CONST        'compDescr'
57	BINARY_SUBSCR     None
58	COMPARE_OP        'in'
61	JUMP_IF_FALSE     '97'

64	LOAD_FAST         'vehsDiff'
67	LOAD_CONST        'compDescr'
70	BINARY_SUBSCR     None
71	LOAD_DEREF        'self'
74	LOAD_ATTR         '__vehInvID'
77	BINARY_SUBSCR     None
78	LOAD_GLOBAL       'None'
81	COMPARE_OP        'is'
84	STORE_FAST        'isVehicleSold'

87	LOAD_FAST         'isVehicleSold'
90	UNARY_NOT         None
91	STORE_FAST        'isVehicleDescrChanged'
94	JUMP_FORWARD      '97'
97_0	COME_FROM         '94'

97	LOAD_FAST         'isVehicleSold'
100	JUMP_IF_TRUE      '115'
103	LOAD_DEREF        'self'
106	LOAD_ATTR         '__vehInvID'
109	LOAD_CONST        0
112	COMPARE_OP        '=='
115	JUMP_IF_FALSE     '131'

118	LOAD_DEREF        'self'
121	LOAD_ATTR         'selectVehicle'
124	CALL_FUNCTION_0   None
127	POP_TOP           None
128	JUMP_FORWARD      '290'

131	LOAD_CONST        'repair'
134	LOAD_FAST         'vehsDiff'
137	COMPARE_OP        'in'
140	JUMP_IF_FALSE     '290'

143	LOAD_DEREF        'self'
146	LOAD_ATTR         '__vehInvID'
149	LOAD_FAST         'vehsDiff'
152	LOAD_CONST        'repair'
155	BINARY_SUBSCR     None
156	COMPARE_OP        'in'
159	STORE_FAST        'isRepaired'

162	LOAD_GLOBAL       'GUI_ITEM_TYPE'
165	LOAD_ATTR         'TURRET'
168	LOAD_FAST         'invDiff'
171	COMPARE_OP        'not in'
174	JUMP_IF_FALSE     '265'

177	LOAD_GLOBAL       'GUI_ITEM_TYPE'
180	LOAD_ATTR         'GUN'
183	LOAD_FAST         'invDiff'
186	COMPARE_OP        'in'
189	STORE_FAST        'isComponentsChanged'

192	LOAD_GLOBAL       'len'
195	LOAD_GLOBAL       'filter'
198	LOAD_CLOSURE      'self'
204	LOAD_CONST        '<code_object <lambda.0>>'
207	MAKE_CLOSURE_0    None
210	LOAD_FAST         'vehsDiff'
213	LOAD_ATTR         'itervalues'
216	CALL_FUNCTION_0   None
219	CALL_FUNCTION_2   None
222	CALL_FUNCTION_1   None
225	LOAD_CONST        0
228	COMPARE_OP        '>'
231	STORE_FAST        'isVehicleChanged'

234	LOAD_FAST         'isComponentsChanged'
237	JUMP_IF_TRUE      '249'
240	LOAD_FAST         'isRepaired'
243	JUMP_IF_TRUE      '249'
246	LOAD_FAST         'isVehicleDescrChanged'
249	JUMP_IF_FALSE     '261'
252	LOAD_DEREF        'self'
255	LOAD_ATTR         'refreshModel'
258	CALL_FUNCTION_0   None
261	POP_TOP           None
262	JUMP_FORWARD      '265'
265_0	COME_FROM         '262'

265	LOAD_FAST         'isVehicleChanged'
268	JUMP_IF_TRUE      '274'
271	LOAD_FAST         'isRepaired'
274	JUMP_IF_FALSE     '286'
277	LOAD_DEREF        'self'
280	LOAD_ATTR         'onChanged'
283	CALL_FUNCTION_0   None
286	POP_TOP           None
287	JUMP_FORWARD      '290'
290_0	COME_FROM         '128'
290_1	COME_FROM         '287'

290	LOAD_DEREF        'self'
293	LOAD_ATTR         'isPresent'
296	CALL_FUNCTION_0   None
299	JUMP_IF_FALSE     '315'

302	LOAD_DEREF        'self'
305	LOAD_ATTR         '__updateViewRange'
308	CALL_FUNCTION_0   None
311	POP_TOP           None
312	JUMP_FORWARD      '315'
315_0	COME_FROM         '312'

315	LOAD_CONST        None
318	RETURN_VALUE      None
319	LOAD_CONST        None
322	RETURN_VALUE      None

Syntax error at or near `LOAD_FAST' token at offset 210

    def onLocksUpdate(self, locksDiff):
        if self.__vehInvID in locksDiff:
            self.refreshModel()

    def refreshModel(self):
        if self.isPresent():
            self.isInHangar() and self.item.modelState and g_hangarSpace.updateVehicle(self.item)
        else:
            g_hangarSpace.removeVehicle()

    @property
    def invID(self):
        return self.__vehInvID

    @property
    def item(self):
        if self.__vehInvID > 0:
            return g_itemsCache.items.getVehicle(self.__vehInvID)
        else:
            return None
            return None
        return None

    def isPresent(self):
        return self.item is not None
        return None

    def isBroken(self):
        return self.isPresent() and self.item.isBroken

    def isDisabledInRoaming(self):
        return self.isPresent() and self.item.isDisabledInRoaming

    def isLocked(self):
        return self.isPresent() and self.item.isLocked

    def isClanLock(self):
        return self.isPresent() and self.item.clanLock > 0

    def isCrewFull(self):
        return self.isPresent() and self.item.isCrewFull

    def isInBattle(self):
        return self.isPresent() and self.item.isInBattle

    def isInHangar(self):
        return self.isPresent() and not self.item.isInBattle

    def isAwaitingBattle(self):
        return self.isPresent() and self.item.isAwaitingBattle

    def isAlive(self):
        return self.isPresent() and self.item.isAlive

    def isReadyToPrebattle(self):
        return self.isPresent() and self.item.isReadyToPrebattle

    def isReadyToFight(self):
        return self.isPresent() and self.item.isReadyToFight

    def isAutoLoadFull(self):
        if self.isPresent() and self.item.isAutoLoad:
            for shell in self.item.shells:
                if shell.count != shell.defaultCount:
                    return False

        return True

    def isAutoEquipFull(self):
        if self.isPresent():
            return self.item.isAutoEquip and self.item.eqs == self.item.eqsLayout
        return True

    def selectVehicle(self, vehInvID = 0):
        vehicle = g_itemsCache.items.getVehicle(vehInvID)
        if vehicle is None:
            invVehs = g_itemsCache.items.getVehicles(criteria=REQ_CRITERIA.INVENTORY)
            if len(invVehs):
                vehInvID = sorted(invVehs.itervalues())[0].invID
            else:
                vehInvID = 0
        self.__selectVehicle(vehInvID)
        return None
        return None

    def selectNoVehicle(self):
        self.__selectVehicle(0)

    def getHangarMessage(self):
        if self.isPresent():
            state, stateLvl = self.item.getState()
            return ('#menu:currentVehicleStatus/' + state, stateLvl)
        return (MENU.CURRENTVEHICLESTATUS_NOTPRESENT, Vehicle.VEHICLE_STATE_LEVEL.CRITICAL)

    def __selectVehicle(self, vehInvID):
        if vehInvID != self.__vehInvID:
            Waiting.show('updateCurrentVehicle', isSingle=True)
            self.onChangeStarted()
            self.__vehInvID = vehInvID
            AccountSettings.setFavorites(CURRENT_VEHICLE, vehInvID)
            self.refreshModel()
            if not self.__changeCallbackID:
                self.__changeCallbackID = BigWorld.callback(0.1, self.__changeDone)
        if self.isPresent():
            self.__updateViewRange()

    def __updateViewRange(self):
        xvm_conf = {}
        xvm_configuration_file = os.getcwd() + os.sep + 'res_mods' + os.sep + 'xvm' + os.sep + 'configs' + os.sep + 'minimapCircles.xc'
        if not os.path.exists(xvm_configuration_file):
            LOG_NOTE('Configuration file missing (' + xvm_configuration_file + '). Creating.')
        else:
            data = ''
            blockComment = False
            f = codecs.open(xvm_configuration_file, 'r', '"utf-8-sig"')
            for line in f.read().split('\n'):
                line = line.strip()
                if line != '':
                    comment = line.find('/*')
                    if comment != -1:
                        if comment == 0:
                            blockComment = True
                            continue
                        comment = line.find('*/')
                        if comment != -1:
                            blockComment = False
                            continue
                        if blockComment == True:
                            continue
                        comment = line.find('//')
                        if comment != -1 and comment == 0:
                            continue
                        position = 0
                        for i in range(0, line.count('//')):
                            comment = line.find('//', position + 2)
                            if comment != -1:
                                colon = line.find(':')
                                startSpeach = line.find('"', colon + 1)
                                if startSpeach > comment:
                                    line = line[:comment].strip()
                                endSpeach = line.find('"', startSpeach + 1)
                                if comment > endSpeach:
                                    line = line[:comment].strip()
                            position += comment

                        line != '' and data += line + '\n'

            f.close()
            xvm_conf = json.loads(data)
        if 'tankrange' not in xvm_conf:
            xvm_conf['tankrange'] = {}
        if 'logging' not in xvm_conf['tankrange']:
            xvm_conf['tankrange']['logging'] = True
        if 'ignore_artillery' not in xvm_conf['tankrange']:
            xvm_conf['tankrange']['ignore_artillery'] = False
        if 'circle_view' not in xvm_conf['tankrange']:
            xvm_conf['tankrange']['circle_view'] = {'enabled': True,
             'color': '0xFFFFFF',
             'alpha': 50,
             'thickness': 0.5,
             'filled': False}
        if 'circle_binocular' not in xvm_conf['tankrange']:
            xvm_conf['tankrange']['circle_binocular'] = {'enabled': True,
             'color': '0xFFFFFF',
             'alpha': 50,
             'thickness': 0.5,
             'filled': False}
        if 'circle_artillery' not in xvm_conf['tankrange']:
            xvm_conf['tankrange']['circle_artillery'] = {'enabled': True,
             'color': '0xFF0000',
             'alpha': 50,
             'thickness': 0.5,
             'filled': False}
        if 'filled' not in xvm_conf['tankrange']['circle_view']:
            xvm_conf['tankrange']['circle_view']['filled'] = False
        if 'filled' not in xvm_conf['tankrange']['circle_binocular']:
            xvm_conf['tankrange']['circle_binocular']['filled'] = False
        if 'filled' not in xvm_conf['tankrange']['circle_artillery']:
            xvm_conf['tankrange']['circle_artillery']['filled'] = False
        if 'circles' not in xvm_conf:
            xvm_conf['circles'] = {'enabled': True}
        if 'major' not in xvm_conf['circles']:
            xvm_conf['circles']['major'] = [{'enabled': False,
              'distance': 445,
              'thickness': 0.75,
              'alpha': 45,
              'color': '0xFFCC66'}, {'enabled': False,
              'distance': 50,
              'thickness': 1.0,
              'alpha': 100,
              'color': '0xFFFFFF'}]
        if 'special' not in xvm_conf['circles']:
            xvm_conf['circles']['special'] = {}
        tank_name = g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.type.name.split(':')[1].lower().replace('-', '_')
        if xvm_conf['tankrange']['logging']:
            LOG_NOTE('Tank Name: ', tank_name)
        remaining = []
        for tank_data in xvm_conf['circles']['special']:
            if tank_data.keys()[0] != tank_name:
                remaining.append(tank_data)

        xvm_conf['circles']['special'] = remaining
        if xvm_conf['tankrange']['ignore_artillery']:
            if 'SPG' in g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.type.tags:
                f = codecs.open(xvm_configuration_file, 'w', '"utf-8-sig"')
                f.write(unicode(json.dumps(xvm_conf, ensure_ascii=False, indent=2)))
                f.close()
                if xvm_conf['tankrange']['logging']:
                    LOG_NOTE('Ignoring ' + vehicle_type + ' tank.')
                return
            view_distance = g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.turret['circularVisionRadius']
            if xvm_conf['tankrange']['logging']:
                LOG_NOTE('Base View Range: ', view_distance)
            ventilation = self.__isOptionalEquipped('improvedVentilation')
            if xvm_conf['tankrange']['logging']:
                if ventilation:
                    LOG_NOTE('Ventilation Found')
                consumable = self.__isConsumableEquipped('ration')
                if xvm_conf['tankrange']['logging']:
                    if consumable:
                        LOG_NOTE('Premium Consumable Found')
                    self.__updateCrew()
                    brothers_in_arms = True
                    if len(self.__crew) == 0:
                        brothers_in_arms = False
                    else:
                        for name, data in self.__crew.iteritems():
                            if 'brotherhood' not in data['skill']:
                                brothers_in_arms = False

                    if xvm_conf['tankrange']['logging']:
                        if brothers_in_arms:
                            LOG_NOTE('BIA Found')
                        commander_skill = 0
                        if 'commander' in self.__crew:
                            commander_skill = self.__crew['commander']['level']
                            if brothers_in_arms == True:
                                commander_skill += 5
                            if ventilation == True:
                                commander_skill += 5
                            if consumable == True:
                                commander_skill += 10
                            if xvm_conf['tankrange']['logging']:
                                LOG_NOTE('Commander Skill: ', commander_skill)
                        other_bonus = 1.0
                        for name, data in self.__crew.iteritems():
                            if 'commander_eagleEye' in data['skill']:
                                other_bonus *= 1.0 + 0.0002 * data['skill']['commander_eagleEye']
                                if xvm_conf['tankrange']['logging']:
                                    LOG_NOTE('Recon Bonus: ', 1.0 + 0.0002 * data['skill']['commander_eagleEye'])
                            if 'radioman_finder' in data['skill']:
                                other_bonus *= 1.0 + 0.0002 * data['skill']['radioman_finder']
                                if xvm_conf['tankrange']['logging']:
                                    LOG_NOTE('Situational Awareness Bonus: ', 1.0 + 0.0003 * data['skill']['radioman_finder'])

                        binoculars = self.__isOptionalEquipped('stereoscope')
                        if xvm_conf['tankrange']['logging']:
                            if binoculars:
                                LOG_NOTE('Binoculars Found')
                            coated_optics = self.__isOptionalEquipped('coatedOptics')
                            if xvm_conf['tankrange']['logging']:
                                if coated_optics:
                                    LOG_NOTE('Coated Optics Found')
                                view_distance = view_distance / 0.875 * (0.00375 * commander_skill + 0.5) * other_bonus
                                if xvm_conf['tankrange']['logging']:
                                    LOG_NOTE('Other Bonus:', other_bonus)
                                    LOG_NOTE('Final View Range: ', view_distance)
                                if xvm_conf['tankrange']['circle_binocular']['enabled']:
                                    if binoculars:
                                        binocular_distance = view_distance * 1.25
                                        not xvm_conf['tankrange']['circle_binocular']['filled'] and xvm_conf['circles']['special'].append({tank_name: {'$ref': {'path': 'tankrange.circle_binocular'},
                                                     'distance': binocular_distance}})
                                    else:
                                        xvm_conf['circles']['special'].append({tank_name: {'$ref': {'path': 'tankrange.circle_binocular'},
                                                     'thickness': binocular_distance * 0.25 - 14,
                                                     'distance': binocular_distance * 0.5}})
                                view_distance = coated_optics == True and min(view_distance * 1.1, 500)
                            xvm_conf['tankrange']['circle_view']['enabled'] and not xvm_conf['tankrange']['circle_view']['filled'] and xvm_conf['circles']['special'].append({tank_name: {'$ref': {'path': 'tankrange.circle_view'},
                                         'distance': view_distance}})
                        else:
                            xvm_conf['circles']['special'].append({tank_name: {'$ref': {'path': 'tankrange.circle_view'},
                                         'thickness': view_distance * 0.25 - 14,
                                         'distance': view_distance * 0.5}})
                    artillery_range = xvm_conf['tankrange']['circle_artillery']['enabled'] and 'SPG' in g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.type.tags and 0
                    for shell in g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.gun['shots']:
                        artillery_range = max(artillery_range, round(math.pow(shell['speed'], 2) / shell['gravity']))

                    xvm_conf['tankrange']['logging'] and LOG_NOTE('Calculated Firing Range:', artillery_range)
                not xvm_conf['tankrange']['circle_artillery']['filled'] and xvm_conf['circles']['special'].append({tank_name: {'$ref': {'path': 'tankrange.circle_artillery'},
                             'distance': artillery_range}})
            else:
                xvm_conf['circles']['special'].append({tank_name: {'$ref': {'path': 'tankrange.circle_artillery'},
                             'thickness': artillery_range * 0.25 - 14,
                             'distance': artillery_range * 0.5}})
        f = codecs.open(xvm_configuration_file, 'w', '"utf-8-sig"')
        f.write(unicode(json.dumps(xvm_conf, ensure_ascii=False, indent=2, sort_keys=True)))
        f.close()

    @process
    def __updateCrew(self):
        from gui.shared.utils.requesters import Requester
        self.__crew.clear()
        barracks = yield Requester('tankman').getFromInventory()
        for tankman in barracks:
            for crewman in self.item.crew:
                if crewman[1] is not None:
                    if crewman[1].invID == tankman.inventoryId:
                        crew_member = {'level': tankman.descriptor.roleLevel,
                         'skill': {}}
                        skills = []
                        for skill_name in tankman.descriptor.skills:
                            skills.append({'name': skill_name,
                             'level': 100})

                        skills[-1]['level'] = len(skills) != 0 and tankman.descriptor.lastSkillLevel
                    for skill in skills:
                        crew_member['skill'][skill['name']] = skill['level']

                    self.__crew[tankman.descriptor.role] = crew_member

        return None
        return None

    def __isOptionalEquipped(self, optional_name):
        for item in self.item.descriptor.optionalDevices:
            if item is not None:
                return optional_name in item.name and True

        return False
        return None

    def __isConsumableEquipped(self, consumable_name):
        from gui.shared.utils.requesters import VehicleItemsRequester
        for item in self.item.eqsLayout:
            if item is not None:
                return consumable_name in item.descriptor.name and True

        return False
        return None

    def __changeDone(self):
        self.__clearChangeCallback()
        if isPlayerAccount():
            self.onChanged()
        Waiting.hide('updateCurrentVehicle')

    def __clearChangeCallback(self):
        if self.__changeCallbackID is not None:
            BigWorld.cancelCallback(self.__changeCallbackID)
            self.__changeCallbackID = None
        return None
        return None

    def __checkPrebattleLockedVehicle(self):
        clientPrb = prb_control.getClientPrebattle()
        if clientPrb is not None:
            rosters = prb_control.getPrebattleRosters(prebattle=clientPrb)
            for rId, roster in rosters.iteritems():
                if BigWorld.player().id in roster:
                    vehCompDescr = roster[BigWorld.player().id].get('vehCompDescr', '')
                    if len(vehCompDescr):
                        vehDescr = vehicles.VehicleDescr(vehCompDescr)
                        vehicle = g_itemsCache.items.getItemByCD(vehDescr.type.compactDescr)
                        if vehicle is not None:
                            return vehicle.invID

        return 0
        return None

    def __repr__(self):
        return 'CurrentVehicle(%s)' % str(self.item)


g_currentVehicle = _CurrentVehicle()# decompiled 0 files: 0 okay, 1 failed, 0 verify failed
# 2013.11.05 17:41:17 Финляндия (зима)

decompiled.rar

Edited by SuperXcool

Share this post


Link to post

Short link
Share on other sites

не могли бы глянуть, всё ли у меня верно вышло? http://www.koreanrandom.com/forum/topic/6127-как-и-чем-декомпилироватькомпилировать-питон/?p=122688

если конечно не затруднит

реализовал создания файла minimapCircles.xc по пути res_mods\xvm\configs

Написал способ проще

 

SuperXcool, Вы мне разницу напишите в обзоре между " чем покой без трубы (до 3 сек) отличается от движения" или все таки признаете, что отличий в обзоре в этом случае нет?

я могу быть не прав. но помоему файл цфг, не затрагивает питоновский скрипт. он подтягивает к скрипту, цвета и прочую лабуду из конфига xvm, на сколько я понял.

здесь же ситуёвина принципиально иная. где скрипт создаёт файл по определённому пути и эта функция вшита в скрипт, и изменить это можно только декомпиляцией-компиляцией. на истинность высказывания своего не претендую

не верно... скрипт может часть кода брать с внешнего файла... только это может быть чревато... лучше не трогать.

Да и зачем? Собрать / разобрать ... дело 5 минут

Edited by Yusha

Share this post


Link to post

Short link
Share on other sites

SuperXcool, Вы мне разницу напишите в обзоре между " чем покой без трубы (до 3 сек) отличается от движения" или все таки признаете, что отличий в обзоре в этом случае нет?

 

В классической теории разницы нет :))))

 

Но вот если сюда наложить механизм сбора инфы сервером о засвете, в виде расходящихся лучшей от обзорных точек с увеличивающимся таймаутом, который если память не изменяет на дистанции до 400 метров около 2 сек, то ... мы получим что у движущегося танка радиус засвета будет меньше чем у стоячего, причем примерно вот на такую величину: ТО-V1*2, где ТО - мой теоретический обзор, V1 - моя скорость, м/с. Например, если я имею ТО=380 м и двигаюсь со скоростью 50 км/ч к противнику, который без маски стоит в поле, то я его скорее всего увижу в круге между 352...380, м. В то время как приближаясь к нему с почти 0 скоростью, я понятно дело увижу его при 380 м.

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Написал способ проще

Спасибо огромное, добрый человек!

Теперь чисто ламерский вопросик. Между тем вариантом, до которого я допёр своими куцыми мозгами и вашим, есть ли критичность на выхлопе?

Но Ваш способ мне больше понравился =)

 

P.S. единственно что, выдаёт ошибку при выходе из клиента, с просьбой отправить отчёт мелкомягким, а в остальном, всё работает исправно

Edited by evil_rrock

Share this post


Link to post

Short link
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...