Zelenogorec 168 #145515 Posted January 14, 2014 По просьбам, добавил файл с описанием содержания tankrange.xc в редакции evil_rrock. Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #145517 Posted January 14, 2014 (edited) @evil_rrock, а можно переделать скрипт так, чтобы он не стирал красоту из конфига? потому что при запуске все комментарии удаляются и конфиг становится "унылым и серым" сам скрипт ничего в настройках конфига не меняет, только вписывает технику в minimapCircles.xc приведённый мною конфиг, всего лишь пример, какая строка, за что отвечает и что настраивает. за основу взят дефолтный, в котором не настроено ничего. для того чтобы круги заиграли всеми цветами, надо взять свой minimapCircles.xc и править ручками, в удобном редакторе, например notepad++ в шапке темы есть инструмент для подбора цветов, в моём посте есть очень подробное описание, где и что настраивается в конфиге. По просьбам, добавил файл с описанием содержания tankrange.xc в редакции evil_rrock. мой маленький труд не пропал даром. но есть вопрос в тему. оригинальный скрипт выдаёт системные сообщения о дальности засвета при снятии и монтаже оборудования? если да то всё ОК. если нет, то параметр "notify_changes": там неуместен Добавлено позднее Завтра сам проверю. Добаслено 15.01.2014 проверил. параметр нужен Edited January 15, 2014 by evil_rrock Quote Share this post Link to post Short link Share on other sites
freeman440 1 #145623 Posted January 14, 2014 сам скрипт ничего в настройках конфига не меняет, только вписывает технику в minimapCircles.xc приведённый мною конфиг, всего лишь пример, какая строка, за что отвечает и что настраивает. за основу взят дефолтный, в котором не настроено ничего. я все понимаю, но при первом же запуске игры конфиг становится такого плана: { "circles": { "enabled": true, "major": [ { "alpha": 65, "color": "0xFF8000", "distance": 445, "enabled": true, "thickness": 0.75 }, { "alpha": 40, "color": "0xFFFFFF", "distance": 50, "enabled": true, "thickness": 1.0 } ], "special": [ { "france-AMX50_Foch": { "$ref": { "path": "tankrange.circle_view" }, "distance": 444.15228000000008 } }, { "usa-M18_Hellcat": { "$ref": { "path": "tankrange.circle_view" }, "distance": 407.00000000000006 } }, { "usa-T32": { "$ref": { "path": "tankrange.circle_view" }, "distance": 408.57142857142861 } }, { "japan-Chi_Ha": { "$ref": { "path": "tankrange.circle_binocular" }, "distance": 426.73242857142861 } }, { "japan-Chi_Ha": { "$ref": { "path": "tankrange.circle_view" }, "distance": 341.38594285714288 } }, { "germany-JagdTiger": { "$ref": { "path": "tankrange.circle_view" }, "distance": 454.18597714285721 } }, { "ussr-Object_704": { "$ref": { "path": "tankrange.circle_view" }, "distance": 413.46574285714286 } }, { "uk-GB75_AT7": { "$ref": { "path": "tankrange.circle_binocular" }, "distance": 450.10192500000005 } }, { "uk-GB75_AT7": { "$ref": { "path": "tankrange.circle_view" }, "distance": 360.08154000000002 } } ] }, "tankrange": { "circle_artillery": { "alpha": 50, "color": "0xFF0000", "enabled": true, "filled": false, "thickness": 0.5 }, "circle_binocular": { "alpha": 60, "color": "0x008DFF", "enabled": true, "filled": false, "thickness": 0.69999999999999996 }, "circle_shell": { "alpha": 60, "color": "0xFF00DC", "enabled": true, "filled": false, "thickness": 0.59999999999999998 }, "circle_view": { "alpha": 70, "color": "0x00EFFF", "enabled": true, "filled": false, "thickness": 0.69999999999999996 }, "ignore_artillery": false, "logging": false, "notify_changes": true, "spotting_limit": false } } хотя до запуска выглядит вот так: { // отображение всех окружностей на карте "circles": { "enabled": true, // true - вкл., false - выкл. "major": [ { // окружность максимальной дальности засвета в игре "alpha": 65, //яркость окружности "color": "0xFF8000", // цвет окружности "distance": 445, // дистанция "enabled": true, // true - вкл., false - выкл. "thickness": 0.75 //толщина линии }, { // окружность ренгена "alpha": 40, //яркость окружности "color": "0xFFFFFF", // цвет окружности "distance": 50, // дистанция "enabled": true, // true - вкл., false - выкл. "thickness": 1.0 //толщина линии } ], "special": [] }, // блоки настройки параметров динамических окружностей "tankrange": { // окружность в случае артиллерии "circle_artillery": { "alpha": 50, //яркость окружности "color": "0xFF0000", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.5 //толщина линии }, // динамическая окружность с учётом трубы, прокачанности экипажа, перков и доп. пайка. просветлённая оптика не учитывается "circle_binocular": { "alpha": 60, //яркость окружности "color": "0x008DFF", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.7 //толщина линии }, // динамическая окружность с учётом просветлённой оптики или её отсутствия, прокачки экипажа, перков и доп. пайка "circle_view": { "alpha": 70, //яркость окружности "color": "0x00EFFF", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.7 //толщина линии }, // окружность дальности эффективной стрельбы для лоу левельных пулемётчиков "circle_shell": { "alpha": 60, //яркость окружности "color": "0xFF00DC", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.6 //толщина линии }, //не показывать окружность в случае артилерии "ignore_artillery": false, // true - вкл., false выкл. // включение ограничения окружностей, превышающих 445 метров. "spotting_limit": false, //сохранение лога в файл "logging": false, // true - вкл., false - выкл. // системное уведомление о расстоянии обзора, при снятии, или монтаже оборудования, доп. пайков и при изучении перков экипажа на улучшение видимости. "notify_changes": true // true - вкл., false - выкл. } } Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #145670 Posted January 15, 2014 я все понимаю, но при первом же запуске игры конфиг становится такого плана: { "circles": { "enabled": true, "major": [ { "alpha": 65, "color": "0xFF8000", "distance": 445, "enabled": true, "thickness": 0.75 }, { "alpha": 40, "color": "0xFFFFFF", "distance": 50, "enabled": true, "thickness": 1.0 } ], "special": [ { "france-AMX50_Foch": { "$ref": { "path": "tankrange.circle_view" }, "distance": 444.15228000000008 } }, { "usa-M18_Hellcat": { "$ref": { "path": "tankrange.circle_view" }, "distance": 407.00000000000006 } }, { "usa-T32": { "$ref": { "path": "tankrange.circle_view" }, "distance": 408.57142857142861 } }, { "japan-Chi_Ha": { "$ref": { "path": "tankrange.circle_binocular" }, "distance": 426.73242857142861 } }, { "japan-Chi_Ha": { "$ref": { "path": "tankrange.circle_view" }, "distance": 341.38594285714288 } }, { "germany-JagdTiger": { "$ref": { "path": "tankrange.circle_view" }, "distance": 454.18597714285721 } }, { "ussr-Object_704": { "$ref": { "path": "tankrange.circle_view" }, "distance": 413.46574285714286 } }, { "uk-GB75_AT7": { "$ref": { "path": "tankrange.circle_binocular" }, "distance": 450.10192500000005 } }, { "uk-GB75_AT7": { "$ref": { "path": "tankrange.circle_view" }, "distance": 360.08154000000002 } } ] }, "tankrange": { "circle_artillery": { "alpha": 50, "color": "0xFF0000", "enabled": true, "filled": false, "thickness": 0.5 }, "circle_binocular": { "alpha": 60, "color": "0x008DFF", "enabled": true, "filled": false, "thickness": 0.69999999999999996 }, "circle_shell": { "alpha": 60, "color": "0xFF00DC", "enabled": true, "filled": false, "thickness": 0.59999999999999998 }, "circle_view": { "alpha": 70, "color": "0x00EFFF", "enabled": true, "filled": false, "thickness": 0.69999999999999996 }, "ignore_artillery": false, "logging": false, "notify_changes": true, "spotting_limit": false } } хотя до запуска выглядит вот так: { // отображение всех окружностей на карте "circles": { "enabled": true, // true - вкл., false - выкл. "major": [ { // окружность максимальной дальности засвета в игре "alpha": 65, //яркость окружности "color": "0xFF8000", // цвет окружности "distance": 445, // дистанция "enabled": true, // true - вкл., false - выкл. "thickness": 0.75 //толщина линии }, { // окружность ренгена "alpha": 40, //яркость окружности "color": "0xFFFFFF", // цвет окружности "distance": 50, // дистанция "enabled": true, // true - вкл., false - выкл. "thickness": 1.0 //толщина линии } ], "special": [] }, // блоки настройки параметров динамических окружностей "tankrange": { // окружность в случае артиллерии "circle_artillery": { "alpha": 50, //яркость окружности "color": "0xFF0000", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.5 //толщина линии }, // динамическая окружность с учётом трубы, прокачанности экипажа, перков и доп. пайка. просветлённая оптика не учитывается "circle_binocular": { "alpha": 60, //яркость окружности "color": "0x008DFF", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.7 //толщина линии }, // динамическая окружность с учётом просветлённой оптики или её отсутствия, прокачки экипажа, перков и доп. пайка "circle_view": { "alpha": 70, //яркость окружности "color": "0x00EFFF", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.7 //толщина линии }, // окружность дальности эффективной стрельбы для лоу левельных пулемётчиков "circle_shell": { "alpha": 60, //яркость окружности "color": "0xFF00DC", // цвет окружности "enabled": true, // true - вкл., false - выкл. "filled": false, // заполнение окружности цветом, true - вкл., false - выкл. "thickness": 0.6 //толщина линии }, //не показывать окружность в случае артилерии "ignore_artillery": false, // true - вкл., false выкл. // включение ограничения окружностей, превышающих 445 метров. "spotting_limit": false, //сохранение лога в файл "logging": false, // true - вкл., false - выкл. // системное уведомление о расстоянии обзора, при снятии, или монтаже оборудования, доп. пайков и при изучении перков экипажа на улучшение видимости. "notify_changes": true // true - вкл., false - выкл. } } а надо, что бы до запуска, выглядел так { "circles": { "enabled": true, "major": [ { "alpha": 45, "color": "0xFFCC66", "distance": 445, "enabled": false, "thickness": 0.75 }, { "alpha": 100, "color": "0xFFFFFF", "distance": 50, "enabled": false, "thickness": 1.0 } ], "special": [] }, "tankrange": { "circle_artillery": { "alpha": 50, "color": "0xFF0000", "enabled": true, "filled": false, "thickness": 0.5 }, "circle_binocular": { "alpha": 50, "color": "0xFFFFFF", "enabled": true, "filled": false, "thickness": 0.5 }, "circle_view": { "alpha": 50, "color": "0xFFFFFF", "enabled": true, "filled": false, "thickness": 0.5 }, "circle_shell": { "alpha": 50, "color": "0x00FF00", "enabled": true, "filled": false, "thickness": 0.5 }, "ignore_artillery": true, "logging": false, "notify_changes": true, "spotting_limit": true } } я ведь в своём посте приложил minimapCircles.xc вот тут он лежит Quote Share this post Link to post Short link Share on other sites
freeman440 1 #145684 Posted January 15, 2014 я ведь в своём посте приложил minimapCircles.xc а нельзя чтобы он выглядел с комментариями? Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #145687 Posted January 15, 2014 а нельзя чтобы он выглядел с комментариями?К сожалению, мод пилил не я и условия выполнения данного скрипта тоже. И я не могу с полной уверенностью сказать, возможно-ли вообще подобное, так как не умею в кодинг. Quote Share this post Link to post Short link Share on other sites
Zelenogorec 168 #145745 Posted January 15, 2014 На сколько я знаю, коментарии в конфиге недопустимы. Они удалятся при первом запуске. По крайней мере, так было при 1.6, после я не пробовал. Но скорее так и осталось. Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #145748 Posted January 15, 2014 На сколько я знаю, коментарии в конфиге недопустимы. Они удалятся при первом запуске. По крайней мере, так было при 1.6, после я не пробовал. Но скорее так и осталось. ну какгбэ лочично. в противном случае, автор бы выложил tankrange.xc с коментариями, а не в том виде, что сейчас Quote Share this post Link to post Short link Share on other sites
Zelenogorec 168 #145848 Posted January 15, 2014 Добавил Инструкцию по настройке квадрата отрисовки на миникарте. Quote Share this post Link to post Short link Share on other sites
Dimitro 22 #145875 Posted January 15, 2014 ну какгбэ лочично. в противном случае, автор бы выложил tankrange.xc с коментариями, а не в том виде, что сейчас Да но то что прописывается по дефолту, находится в скрипте "pyc" Можно же его изменить, что бы по дефолту конфиг писался с коментами. Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #145877 Posted January 15, 2014 (edited) Да но то что прописывается по дефолту, находится в скрипте "pyc" Можно же его изменить, что бы по дефолту конфиг писался с коментами. К сожалению, мод пилил не я и условия выполнения данного скрипта тоже. И я не могу с полной уверенностью сказать, возможно-ли вообще подобное, так как не умею в кодинг. ключевые слова "не умею в кодинг" а автор не считает нужным это делать. Edited January 15, 2014 by evil_rrock Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #145886 Posted January 15, 2014 (edited) Вот декомпиленный исходник, мода который в первом посте выложен. 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(): def __init__(self): self.__vehInvID = 0 self.__changeCallbackID = None self.onChanged = Event() self.onChangeStarted = Event() self.__crew = {} return 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(self, invDiff): vehsDiff = invDiff.get(GUI_ITEM_TYPE.VEHICLE, {}) isVehicleSold = False isVehicleDescrChanged = False if 'compDescr' in vehsDiff and self.__vehInvID in vehsDiff['compDescr']: isVehicleSold = vehsDiff['compDescr'][self.__vehInvID] is None isVehicleDescrChanged = not isVehicleSold if isVehicleSold or self.__vehInvID == 0: self.selectVehicle() else: isRepaired = False if 'repair' in vehsDiff: isRepaired = self.__vehInvID in vehsDiff['repair'] if GUI_ITEM_TYPE.GUN not in invDiff: isComponentsChanged = GUI_ITEM_TYPE.TURRET in invDiff isVehicleChanged = len(filter(lambda hive: self.__vehInvID in hive, vehsDiff.itervalues())) > 0 if isComponentsChanged or isRepaired or isVehicleDescrChanged: self.refreshModel() (isVehicleChanged or isRepaired) and self.onChanged() if self.isPresent(): self.__updateViewRange() return def onLocksUpdate(self, locksDiff): if self.__vehInvID in locksDiff: self.refreshModel() def refreshModel(self): if self.isPresent() and self.isInHangar() and self.item.modelState: 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 def isPresent(self): return self.item is not 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() and self.item.isAutoEquip: return 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 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: return 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 + 'tankrange.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 and 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 if line != '': data += line + '\n' f.close() xvm_conf = json.loads(data) if not xvm_conf['tankrange'].has_key('spotting_limit'): xvm_conf['tankrange']['spotting_limit'] = True tank_name = g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.type.name.replace(':', '-') if xvm_conf['tankrange']['logging']: LOG_NOTE('Tank Name: ', tank_name) if not self.isCrewFull(): if xvm_conf['tankrange']['logging']: LOG_NOTE('no full crew') return 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'] and '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'] and ventilation: LOG_NOTE('Ventilation Found') consumable = False if self.__isConsumableEquipped('ration'): consumable = True if self.__isConsumableEquipped('chocolate'): consumable = True if self.__isConsumableEquipped('cocacola'): consumable = True if self.__isConsumableEquipped('hotCoffee'): consumable = True if xvm_conf['tankrange']['logging'] and 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'] and 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'] and binoculars: LOG_NOTE('Binoculars Found') coated_optics = self.__isOptionalEquipped('coatedOptics') if xvm_conf['tankrange']['logging'] and 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'] and binoculars: binocular_distance = view_distance * 1.25 if xvm_conf['tankrange']['spotting_limit']: binocular_distance = min(445, binocular_distance) if not xvm_conf['tankrange']['circle_binocular']['filled']: 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}}) if coated_optics == True: view_distance = min(view_distance * 1.1, 500) if xvm_conf['tankrange']['circle_view']['enabled']: if xvm_conf['tankrange']['spotting_limit']: view_distance = min(445, view_distance) if not xvm_conf['tankrange']['circle_view']['filled']: 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}}) if xvm_conf['tankrange']['circle_artillery']['enabled'] and 'SPG' in g_itemsCache.items.getVehicle(self.__vehInvID).descriptor.type.tags: artillery_range = 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'])) if xvm_conf['tankrange']['logging']: LOG_NOTE('Calculated Firing Range:', artillery_range) if not xvm_conf['tankrange']['circle_artillery']['filled']: 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 and 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}) if len(skills) != 0: skills[-1]['level'] = tankman.descriptor.lastSkillLevel for skill in skills: crew_member['skill'][skill['name']] = skill['level'] self.__crew[tankman.descriptor.role] = crew_member return def __isOptionalEquipped(self, optional_name): for item in self.item.descriptor.optionalDevices: if item is not None and optional_name in item.name: return True return False def __isConsumableEquipped(self, consumable_name): from gui.shared.utils.requesters import VehicleItemsRequester for item in self.item.eqsLayout: if item is not None and consumable_name in item.descriptor.name: return True return False 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 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 def __repr__(self): return 'CurrentVehicle(%s)' % str(self.item) g_currentVehicle = _CurrentVehicle() Нельзя сделать то что вы просите, т.е. нельзя добавить запись комментов, т.к. информация о каждом танке формируется в виде json-объекта, который потом записывается в файл встроенными функциями. .... f = codecs.open(xvm_configuration_file, 'w', '"utf-8-sig"') f.write(unicode(json.dumps(xvm_conf, ensure_ascii=False, indent=2))) f.close() .... Дописывать комменты просто некуда, весь процесс автоматизирован :))) Edited January 15, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
Dimitro 22 #145963 Posted January 16, 2014 (edited) Не, у него есть блок в скрипте который отвечает за комменты. Но, что то он неправильно пашет. Идет проверка на "есть файл" "нету файла"Потом идет проверка на комментарии 'кусок кода' # Load configuration xvm_configuration_file = os.getcwd() + os.sep + 'res_mods' + os.sep + 'xvm' + os.sep + 'tankrange.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 != "": # Start of block comment comment = line.find("/*") if comment != -1 and comment == 0: blockComment = True continue # End of block comment comment = line.find("*/") if comment != -1: blockComment = False continue # Block Comment if blockComment == True: continue # Start of line comment comment = line.find("//") if comment != -1 and comment == 0: continue # Remove end of line comments 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 if line != "": data += line + '\n' f.close() Edited January 16, 2014 by Dimitro Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #145964 Posted January 16, 2014 (edited) @Dimitro, насколько я понимаю, это алгоритм, который удаляет комменты из блока текста читаемого файла, чтобы потом передать текст в json-парсер и чтобы тот не тупил, похоже json-парсер в питоне не умеет сам игнорировать комменты. К записи этот код отношения то не имеет. В принципе можно в конце алгоритма записи сделать повторное открытие xc-файла, найти в нем нужные строки и дописать комменты, это не сложно, но так ли уж нужно это? Edited January 16, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #145965 Posted January 16, 2014 (edited) deleted Edited January 16, 2014 by evil_rrock Quote Share this post Link to post Short link Share on other sites
StranikS_Scan 4,210 #145968 Posted January 16, 2014 (edited) Алгоритм прост как два рубля: - открывается xc-файл - читается по строчно - если в строках есть комменты их удаляют - получающийся блок текста скармливают json-парсеру - он анализирует его- - после этого работаем с объектной json-структурой - меняем ее или не меняем или создаем новую, смотря какой танк выбран и чего у него есть - просим json-парсер преобразовать объектную структуру в блок текста****** - записываем блок текста в xc-файл. Думаю можно после **** в блоке текста дописать комменты и всё. Вместо вот этой строки f.write(unicode(json.dumps(xvm_conf, ensure_ascii=False, indent=2))) сделать data=json.dumps(xvm_conf, ensure_ascii=False, indent=2) .... <всталяем комменты в нужных местах data> .... f.write(unicode(data)) А вообще ребята кто со строками в питоне умеет работать, напишите просто алгоритм, который открывает xc-файл и дописывает в нужные места комменты. А потом его можно просто вставить в то место что я указал выше. f = open('tankrange.xc', 'r') data = f.read() f.close() ... <находим нужные места в data и вставляем комменты> ... f = open('tankrange.xc', 'w') f.write(data) f.close() Я бы сам сделал, но питон не мой язык, не охота копаться, может кто быстрее сделает. Edited January 16, 2014 by StranikS_Scan Quote Share this post Link to post Short link Share on other sites
Slava7572 1,685 #146056 Posted January 16, 2014 Ничего не понял,сделал по инструкции,естественно ничего не заработало Пока не поставил tankrange.xc в папку с конфигом.Это не соответствует руководству,да и вряд ли сам скрипт работать будет таким способом. 1 Quote Share this post Link to post Short link Share on other sites
BornToKill_ 110 #146063 Posted January 16, 2014 , tankrange.xc уже сам не создается, если ты об этом. Quote Share this post Link to post Short link Share on other sites
Slava7572 1,685 #146064 Posted January 16, 2014 , tankrange.xc уже сам не создается, если ты об этом. Это я видел.Он работает из (т.е. в него записывается инфа и пр.) C:\Games\World_of_Tanks\res_mods\xvm,но в этом случае ломается основной конфиг и происходит...см.скрин выше.Только когда закидываешь tankrange.xc в папку с конфигом(в моем случае это:C:\Games\World_of_Tanks\res_mods\xvm\configs\Slava7572.),только тогда работает сам XVM. Quote Share this post Link to post Short link Share on other sites
evil_rrock 227 #146065 Posted January 16, 2014 (edited) Это я видел.Он работает из (т.е. в него записывается инфа и пр.) C:\Games\World_of_Tanks\res_mods\xvm,но в этом случае ломается основной конфиг и происходит...см.скрин выше.Только когда закидываешь tankrange.xc в папку с конфигом(в моем случае это:C:\Games\World_of_Tanks\res_mods\xvm\configs\Slava7572.),только тогда работает сам XVM. вот немного оригинальный способ потанцевать с бубном http://www.koreanrandom.com/forum/topic/8279-0810-xvm-tank-minimap-ranges-забугорный-мод/?p=138630 но возможно наведёт на нужную мысль P.S. tankrange.xc должен жить тут \res_mods\xvm предусмотрено скриптом. в minimap.xc надо внести изменения в блоке // Круги на миникарте. "circles": ${"minimapCircles.xc":"circles"}, заменить на "circles": ${"../tankrange.xc":"circles"}, P.P.S. ещё как вариант, если конфиг раздельный, могу под ваш путь конфига изменить скрипт который будет напрямую работать с minimapCircles.xc Edited January 16, 2014 by evil_rrock Quote Share this post Link to post Short link Share on other sites