sech_92 Posted November 5, 2013 Share Posted November 5, 2013 вы вообще видите в какой теме обсуждаете? Для этого мода есть отдельная тема в другом разделе. Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 5, 2013 Share Posted November 5, 2013 (edited) вы вообще видите в какой теме обсуждаете? Для этого мода есть отдельная тема в другом разделе. Действительно компот какой-то.... Надо вернуться к названию темы. Вот я писал ранее Надо за расчетный ТО брать ТО наиболее глазастого танка противника из живых на данный момент, затем рассчитывать две величины 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 November 5, 2013 by StranikS_Scan 1 @ Link to comment Short link Share on other sites More sharing options...
Dimitro Posted November 5, 2013 Share Posted November 5, 2013 Я переделал мод... теперь он пишет круги прямо в minimapCircles.xc. И как он определяет, в какой папке лежит МОЙ minimapCircles.xc Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 И как он определяет, в какой папке лежит МОЙ minimapCircles.xc я посмотрел в скрипте, путь по умолчанию следующий res_mods\xvm\configs Link to comment Short link Share on other sites More sharing options...
XXX_MUTANT Posted November 5, 2013 Share Posted November 5, 2013 (edited) Вы вообще этот мод знаете? Вы тоже понимаете что пишете? Чем отличается обзор в покое от обзора в движении? Ок... выключается труба... тогда чем отличается обзор в покое от обзора с трубой? Понимаю. 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 November 5, 2013 by SuperXcool Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 (edited) По скриптам питона тут есть отдельная тема... я понимаю, что хочется сделать и разобраться самому...и это похвально. Можете бросить мне свой скрипт, я соберу. Но у меня вопрос... я сам не на много дальше ушел в изучении питона, но зачем было изначально плодить новые файлы? Зачем это надо, если скрипт этот лишь использует возможности самого 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 November 5, 2013 by evil_rrock Link to comment Short link Share on other sites More sharing options...
XXX_MUTANT Posted November 5, 2013 Share Posted November 5, 2013 я посмотрел в скрипте, путь по умолчанию следующий res_mods\xvm\configs Все верно. А общепринятый путь для конфига res_mods\xvm\configs\название папки\а в ней уже minimapCircles.xc и все остальное Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 5, 2013 Share Posted November 5, 2013 Я в питоне не бум-бум, не мой это язык :)))), но вопрос, а там разве нельзя считать sample.xc, выдрать имя папки с активным конфигом и его приконкатенировать к пути res_mods\xvm\configs ? Или можно но сложно? Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 Я в питоне не бум-бум, не мой это язык :)))), но вопрос, а там разве нельзя считать sample.xc, выдрать имя папки с активным конфигом и его приконкатенировать к пути res_mods\xvm\configs ? Или можно но сложно? помоему элементарно реализуемо. Link to comment Short link Share on other sites More sharing options...
Yusha Posted November 5, 2013 Share Posted November 5, 2013 (edited) Понимаю. 1.Покой бывает с трубой и без. 2.А если и с трубой, то первые 3сек труба не действует. Думаю теперь и ты начнешь понимать! Ему этого не понять. Если ты сам внутри скрипта не пропишеш путь к папке с названием твоего конфига. И этот скрипт будет работать у других только при условии если они тоже так папку обзовут)) Чем покой без трубы (до 3 сек) отличается от движения по обзору танка? Так понятнее? Я в питоне не бум-бум, не мой это язык :)))), но вопрос, а там разве нельзя считать sample.xc, выдрать имя папки с активным конфигом и его приконкатенировать к пути res_mods\xvm\configs ? Или можно но сложно? Это элементарно делается... но может быть одна заковырка... при извлечении этих данных автоматом скрипт может стать чувствительным к русским символам в пути... прецеденты были. Edited November 5, 2013 by Yusha Link to comment Short link Share on other sites More sharing options...
XXX_MUTANT Posted November 5, 2013 Share Posted November 5, 2013 (edited) Чем покой без трубы (до 3 сек) отличается от движения по обзору танка? Так понятнее? Что за придирки? Если ПМС -ношпа поможет!=) Я переделал мод... теперь он пишет круги прямо в minimapCircles.xc.А где мод? Я тоже хочу, чтоб и у меня писало в res_mods\xvm\configs\моя папка\minimapCircles.xc --------------------- Вот еслиб кто прикрутил к currentvehicle.py currentvehicle.cfg в котором каждый смог указать путь к файлу и название какое душе угодно. и + true/false на остальное. Edited November 5, 2013 by SuperXcool 1 @ Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 Вот еслиб кто прикрутил к currentvehicle.py currentvehicle.cfg в котором каждый смог указать путь к файлу и название какое душе угодно. и + true/false на остальное. мне почему-то кажется, что это не реально, так как работа с питоновским скриптом, подразумевает декомпиляцию и компиляцию. Link to comment Short link Share on other sites More sharing options...
sech_92 Posted November 5, 2013 Share Posted November 5, 2013 мне почему-то кажется, что это не реально как пример приведу сессионную статистику от Dellux. Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 как пример приведу сессионную статистику от Dellux. я могу быть не прав. но помоему файл цфг, не затрагивает питоновский скрипт. он подтягивает к скрипту, цвета и прочую лабуду из конфига xvm, на сколько я понял. здесь же ситуёвина принципиально иная. где скрипт создаёт файл по определённому пути и эта функция вшита в скрипт, и изменить это можно только декомпиляцией-компиляцией. на истинность высказывания своего не претендую Link to comment Short link Share on other sites More sharing options...
Yusha Posted November 5, 2013 Share Posted November 5, 2013 Что за придирки? Если ПМС -ношпа поможет!=) Т.е. ответить не можете? Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 (edited) Т.е. ответить не можете? не могли бы глянуть, всё ли у меня верно вышло? http://www.koreanrandom.com/forum/topic/6127-как-и-чем-декомпилироватькомпилировать-питон/?p=122688 если конечно не затруднит реализовал создания файла minimapCircles.xc по пути res_mods\xvm\configs Edited November 5, 2013 by evil_rrock Link to comment Short link Share on other sites More sharing options...
XXX_MUTANT Posted November 5, 2013 Share Posted November 5, 2013 (edited) мне почему-то кажется, что это не реально, так как работа с питоновским скриптом, подразумевает декомпиляцию и компиляцию. Вот внутри два декомпилированых скрипта из этой темы, от разных авторов, вот только что дальше с ними делать?(( не могли бы глянуть, всё ли у меня верно вышло? 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 November 5, 2013 by SuperXcool Link to comment Short link Share on other sites More sharing options...
Yusha Posted November 5, 2013 Share Posted November 5, 2013 (edited) не могли бы глянуть, всё ли у меня верно вышло? http://www.koreanrandom.com/forum/topic/6127-как-и-чем-декомпилироватькомпилировать-питон/?p=122688 если конечно не затруднит реализовал создания файла minimapCircles.xc по пути res_mods\xvm\configs Написал способ проще SuperXcool, Вы мне разницу напишите в обзоре между " чем покой без трубы (до 3 сек) отличается от движения" или все таки признаете, что отличий в обзоре в этом случае нет? я могу быть не прав. но помоему файл цфг, не затрагивает питоновский скрипт. он подтягивает к скрипту, цвета и прочую лабуду из конфига xvm, на сколько я понял. здесь же ситуёвина принципиально иная. где скрипт создаёт файл по определённому пути и эта функция вшита в скрипт, и изменить это можно только декомпиляцией-компиляцией. на истинность высказывания своего не претендую не верно... скрипт может часть кода брать с внешнего файла... только это может быть чревато... лучше не трогать. Да и зачем? Собрать / разобрать ... дело 5 минут Edited November 5, 2013 by Yusha Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 5, 2013 Share Posted November 5, 2013 (edited) SuperXcool, Вы мне разницу напишите в обзоре между " чем покой без трубы (до 3 сек) отличается от движения" или все таки признаете, что отличий в обзоре в этом случае нет? В классической теории разницы нет :)))) Но вот если сюда наложить механизм сбора инфы сервером о засвете, в виде расходящихся лучшей от обзорных точек с увеличивающимся таймаутом, который если память не изменяет на дистанции до 400 метров около 2 сек, то ... мы получим что у движущегося танка радиус засвета будет меньше чем у стоячего, причем примерно вот на такую величину: ТО-V1*2, где ТО - мой теоретический обзор, V1 - моя скорость, м/с. Например, если я имею ТО=380 м и двигаюсь со скоростью 50 км/ч к противнику, который без маски стоит в поле, то я его скорее всего увижу в круге между 352...380, м. В то время как приближаясь к нему с почти 0 скоростью, я понятно дело увижу его при 380 м. Edited November 5, 2013 by StranikS_Scan Link to comment Short link Share on other sites More sharing options...
evil_rrock Posted November 5, 2013 Share Posted November 5, 2013 (edited) Написал способ проще Спасибо огромное, добрый человек! Теперь чисто ламерский вопросик. Между тем вариантом, до которого я допёр своими куцыми мозгами и вашим, есть ли критичность на выхлопе? Но Ваш способ мне больше понравился =) P.S. единственно что, выдаёт ошибку при выходе из клиента, с просьбой отправить отчёт мелкомягким, а в остальном, всё работает исправно Edited November 5, 2013 by evil_rrock Link to comment Short link Share on other sites More sharing options...
Recommended Posts