Zelenogorec Posted January 14, 2014 Author Share Posted January 14, 2014 По просьбам, добавил файл с описанием содержания tankrange.xc в редакции evil_rrock. @ Quote Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 14, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
freeman440 Posted January 14, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 15, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
freeman440 Posted January 15, 2014 Share Posted January 15, 2014 я ведь в своём посте приложил minimapCircles.xc а нельзя чтобы он выглядел с комментариями? @ Quote Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 15, 2014 Share Posted January 15, 2014 а нельзя чтобы он выглядел с комментариями?К сожалению, мод пилил не я и условия выполнения данного скрипта тоже. И я не могу с полной уверенностью сказать, возможно-ли вообще подобное, так как не умею в кодинг. @ Quote Link to comment Short link Share on other sites More sharing options...
Zelenogorec Posted January 15, 2014 Author Share Posted January 15, 2014 На сколько я знаю, коментарии в конфиге недопустимы. Они удалятся при первом запуске. По крайней мере, так было при 1.6, после я не пробовал. Но скорее так и осталось. @ Quote Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 15, 2014 Share Posted January 15, 2014 На сколько я знаю, коментарии в конфиге недопустимы. Они удалятся при первом запуске. По крайней мере, так было при 1.6, после я не пробовал. Но скорее так и осталось. ну какгбэ лочично. в противном случае, автор бы выложил tankrange.xc с коментариями, а не в том виде, что сейчас @ Quote Link to comment Short link Share on other sites More sharing options...
Zelenogorec Posted January 15, 2014 Author Share Posted January 15, 2014 Добавил Инструкцию по настройке квадрата отрисовки на миникарте. @ Quote Link to comment Short link Share on other sites More sharing options...
Dimitro Posted January 15, 2014 Share Posted January 15, 2014 ну какгбэ лочично. в противном случае, автор бы выложил tankrange.xc с коментариями, а не в том виде, что сейчас Да но то что прописывается по дефолту, находится в скрипте "pyc" Можно же его изменить, что бы по дефолту конфиг писался с коментами. @ Quote Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 15, 2014 Share Posted January 15, 2014 (edited) Да но то что прописывается по дефолту, находится в скрипте "pyc" Можно же его изменить, что бы по дефолту конфиг писался с коментами. К сожалению, мод пилил не я и условия выполнения данного скрипта тоже. И я не могу с полной уверенностью сказать, возможно-ли вообще подобное, так как не умею в кодинг. ключевые слова "не умею в кодинг" а автор не считает нужным это делать. Edited January 15, 2014 by evil_rrock @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted January 15, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
Dimitro Posted January 16, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted January 16, 2014 Share Posted January 16, 2014 (edited) @Dimitro, насколько я понимаю, это алгоритм, который удаляет комменты из блока текста читаемого файла, чтобы потом передать текст в json-парсер и чтобы тот не тупил, похоже json-парсер в питоне не умеет сам игнорировать комменты. К записи этот код отношения то не имеет. В принципе можно в конце алгоритма записи сделать повторное открытие xc-файла, найти в нем нужные строки и дописать комменты, это не сложно, но так ли уж нужно это? Edited January 16, 2014 by StranikS_Scan @ Quote Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 16, 2014 Share Posted January 16, 2014 (edited) deleted Edited January 16, 2014 by evil_rrock @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted January 16, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
Slava7572 Posted January 16, 2014 Share Posted January 16, 2014 Ничего не понял,сделал по инструкции,естественно ничего не заработало Пока не поставил tankrange.xc в папку с конфигом.Это не соответствует руководству,да и вряд ли сам скрипт работать будет таким способом. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
BornToKill_ Posted January 16, 2014 Share Posted January 16, 2014 , tankrange.xc уже сам не создается, если ты об этом. @ Quote Link to comment Short link Share on other sites More sharing options...
Slava7572 Posted January 16, 2014 Share 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 Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted January 16, 2014 Share 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 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.