def calculateXTE(vehCD, dmg_per_battle, frg_per_battle): data = _getData(vehCD) if data is None or data['td'] == data['ad'] or data['tf'] == data['af']: vdata = vehinfo.getVehicleInfoData(vehCD) if vdata is None: debug('NOTE: No vehicle info for vehicle id = {}'.format(vehCD)) else: debug('NOTE: No xte data for vehicle [{}] {}'.format(vehCD, vdata['key'])) return -1 # constants CD = 3.0 CF = 1.0 # input avgD = float(data['ad']) topD = float(data['td']) avgF = float(data['af']) topF = float(data['tf']) # calculation dD = dmg_per_battle - avgD dF = frg_per_battle - avgF minD = avgD * 0.4 minF = avgF * 0.4 d = max(0, 1 + dD / (topD - avgD) if dmg_per_battle >= avgD else 1 + dD / (avgD - minD)) f = max(0, 1 + dF / (topF - avgF) if frg_per_battle >= avgF else 1 + dF / (avgF - minF)) t = (d * CD + f * CF) / (CD + CF) * 1000.0 # calculate XVM Scale return next((i for i,v in enumerate(data['x']) if v > t), 100)
def _calculateVehicleValues(self, stat, v): vehId = v['id'] vData = vehinfo.getVehicleInfoData(vehId) if vData is None: return #log(vData['key']) #log(vData) # tank rating if 'b' not in v or 'w' not in v or v['b'] <= 0: v['winrate'] = stat['winrate'] else: Tr = float(v['w']) / float(v['b']) * 100.0 if v['b'] > 100: v['winrate'] = Tr else: Or = float(stat['winrate']) Tb = float(v['b']) / 100.0 Tl = float(min(vData['level'], 4)) / 4.0 v['winrate'] = Or - (Or - Tr) * Tb * Tl if 'b' not in v or v['b'] <= 0: return vb = float(v['b']) if 'dmg' in v and v['dmg'] > 0: v['db'] = float(v['dmg']) / vb v['dv'] = float(v['dmg']) / vb / vData['hpTop'] if 'frg' in v and v['frg'] > 0: v['fb'] = float(v['frg']) / vb if 'spo' in v and v['spo'] > 0: v['sb'] = float(v['spo']) / vb
def onXvmCommand(self, proxy, id, cmd, *args): try: #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args)) if (cmd not in NO_LOG_COMMANDS): debug("cmd=" + str(cmd) + " args=" + json.dumps(args)) res = None if cmd == COMMAND_LOG: log(*args) elif cmd == COMMAND_PING: ping(proxy) elif cmd == COMMAND_GETMODS: res = self.getMods() elif cmd == COMMAND_GETSCREENSIZE: res = json.dumps(list(GUI.screenResolution())) elif cmd == COMMAND_GETGAMEREGION: res = region elif cmd == COMMAND_GETLANGUAGE: res = language elif cmd == COMMAND_GETVEHICLEINFODATA: res = getVehicleInfoData() elif cmd == COMMAND_LOADBATTLESTAT: getBattleStat(proxy, args) elif cmd == COMMAND_LOADUSERDATA: getUserData(proxy, args) elif cmd == COMMAND_LOAD_SETTINGS: pass # TODO elif cmd == COMMAND_SAVE_SETTINGS: pass # TODO else: err("unknown command: " + str(cmd)) proxy.movie.invoke(('xvm.respond', [id, res])) except Exception, ex: err(traceback.format_exc(ex))
def onXvmCommand(self, proxy, id, cmd, *args): try: #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args)) if (cmd not in NO_LOG_COMMANDS): debug("cmd=" + str(cmd) + " args=" + json.dumps(args)) res = None if cmd == COMMAND_LOG: log(*args) elif cmd == COMMAND_PING: #return ping(proxy) elif cmd == COMMAND_GETMODS: #return res = self.getMods() elif cmd == COMMAND_GETSCREENSIZE: #return res = json.dumps(list(GUI.screenResolution())) elif cmd == COMMAND_GETGAMEREGION: #return res = region elif cmd == COMMAND_GETLANGUAGE: #return res = language elif cmd == COMMAND_GETVEHICLEINFODATA: #return res = getVehicleInfoData() elif cmd == COMMAND_GETWN8EXPECTEDDATA: res = getWN8ExpectedData() elif cmd == COMMAND_GETXVMSTATTOKENDATA: res = json.dumps(getXvmStatTokenData()) elif cmd == COMMAND_LOADBATTLESTAT: #return getBattleStat(proxy, args) elif cmd == COMMAND_LOADBATTLERESULTSSTAT: getBattleResultsStat(proxy, args) elif cmd == COMMAND_LOADUSERDATA: getUserData(proxy, args) elif cmd == COMMAND_GETDOSSIER: getDossier(proxy, args) elif cmd == COMMAND_OPEN_URL: if len(args[0]) and args[0].lower().startswith( 'http://www.modxvm.com'): BigWorld.wg_openWebBrowser(args[0]) elif cmd == COMMAND_LOAD_SETTINGS: pass # TODO elif cmd == COMMAND_SAVE_SETTINGS: pass # TODO elif cmd == COMMAND_TEST: runTest(args) else: err("unknown command: " + str(cmd)) proxy.movie.invoke(('xvm.respond', [id, res])) except Exception, ex: err(traceback.format_exc())
def onXvmCommand(self, proxy, id, cmd, *args): try: #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args)) if (cmd not in NO_LOG_COMMANDS): debug("cmd=" + str(cmd) + " args=" + json.dumps(args)) res = None if cmd == COMMAND_LOG: log(*args) elif cmd == COMMAND_PING: #return ping(proxy) elif cmd == COMMAND_GETMODS: #return res = self.getMods() elif cmd == COMMAND_GETSCREENSIZE: #return res = json.dumps(list(GUI.screenResolution())) elif cmd == COMMAND_GETGAMEREGION: #return res = region elif cmd == COMMAND_GETLANGUAGE: #return res = language elif cmd == COMMAND_GETVEHICLEINFODATA: #return res = getVehicleInfoData() elif cmd == COMMAND_LOADBATTLESTAT: #return getBattleStat(proxy, args) elif cmd == COMMAND_LOADBATTLERESULTSSTAT: getBattleResultsStat(proxy, args) elif cmd == COMMAND_LOADUSERDATA: getUserData(proxy, args) elif cmd == COMMAND_GETDOSSIER: getDossier(proxy, args) elif cmd == COMMAND_LOAD_SETTINGS: pass # TODO elif cmd == COMMAND_SAVE_SETTINGS: pass # TODO elif cmd == COMMAND_TEST: runTest(args) else: err("unknown command: " + str(cmd)) proxy.movie.invoke(('xvm.respond', [id, res])) except Exception, ex: err(traceback.format_exc(ex))
def calculateXTE(vehCD, dmg_per_battle, frg_per_battle): data = _getData(vehCD) if data is None or data['td'] == data['ad'] or data['tf'] == data['af']: vdata = vehinfo.getVehicleInfoData(vehCD) if vdata is None: debug('NOTE: No vehicle info for vehicle id = {}'.format(vehCD)) else: debug('NOTE: No xte data for vehicle [{}] {}'.format( vehCD, vdata['key'])) return -1 # constants CD = 3.0 CF = 1.0 # input avgD = float(data['ad']) topD = float(data['td']) avgF = float(data['af']) topF = float(data['tf']) # calculation dD = dmg_per_battle - avgD dF = frg_per_battle - avgF minD = avgD * 0.4 minF = avgF * 0.4 d = max( 0, 1 + dD / (topD - avgD) if dmg_per_battle >= avgD else 1 + dD / (avgD - minD)) f = max( 0, 1 + dF / (topF - avgF) if frg_per_battle >= avgF else 1 + dF / (avgF - minF)) t = (d * CD + f * CF) / (CD + CF) * 1000.0 # calculate XVM Scale return next((i for i, v in enumerate(data['x']) if v > t), 100)
def getDossier(self, battlesType, accountDBID=None, vehCD=0): self._battlesType = battlesType if accountDBID == 0: accountDBID = None if accountDBID is not None: accountDBID = int(accountDBID) if vehCD is None: vehCD = 0 else: vehCD = int(vehCD) cache_key = "{}:{}:{}".format( battlesType, 0 if accountDBID is None else accountDBID, vehCD) if vehCD == 0: # account dossier dossier = self.itemsCache.items.getAccountDossier(accountDBID) cache_item = self._cache.get(cache_key, None) if cache_item is not None and cache_item[ 'totalBattles'] == dossier.getTotalStats().getBattlesCount( ): return cache_item res = self.__prepareAccountResult(accountDBID, dossier) self._cache[cache_key] = res return res # vehicle dossier vehicle = self.itemsCache.items.getItemByCD(vehCD) outfit = vehicle.getOutfit(SeasonType.SUMMER) summer_camo = outfit is not None and bool( outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItem()) outfit = vehicle.getOutfit(SeasonType.WINTER) winter_camo = outfit is not None and bool( outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItem()) outfit = vehicle.getOutfit(SeasonType.DESERT) desert_camo = outfit is not None and bool( outfit.hull.slotFor(GUI_ITEM_TYPE.CAMOUFLAGE).getItem()) if self.__isVehicleDossierLoaded(accountDBID, vehCD): dossier = self.itemsCache.items.getVehicleDossier( vehCD, accountDBID) totalBattles = dossier.getTotalStats().getBattlesCount() randomBattles = dossier.getRandomStats().getBattlesCount() else: dossier = _DummyDossier() totalBattles = 0 randomBattles = 0 cache_item = self._cache.get(cache_key, None) if cache_item is not None and cache_item[ 'totalBattles'] == totalBattles: self.__updateCamouflageResult(cache_item, summer_camo, winter_camo, desert_camo) return cache_item rankCount = None rankSteps = None rankStepsTotal = None if self.rankedController.isAvailable(): vdata = vehinfo.getVehicleInfoData(vehCD) if vdata['level'] == 10: #log(vdata['key']) ranks = self.rankedController.getAllRanksChain(vehicle) currentRank = self.rankedController.getCurrentRank(vehicle) if isinstance(currentRank, VehicleRank): rankCount = currentRank.getSerialID() currentRankID = currentRank.getID() nextRank = ranks[ currentRankID + 1] if currentRankID < len(ranks) - 1 else currentRank if isinstance(nextRank, VehicleRank): progress = nextRank.getProgress() if progress is not None: rankSteps = len( nextRank.getProgress().getAcquiredSteps()) rankStepsTotal = len(nextRank.getProgress().getSteps()) xpVehs = self.itemsCache.items.stats.vehiclesXPs earnedXP = xpVehs.get(vehCD, 0) freeXP = self.itemsCache.items.stats.actualFreeXP #log('vehCD: {0} pVehXp: {1}'.format(vehCD, earnedXP)) xpToElite = 0 unlocks = self.itemsCache.items.stats.unlocks _, nID, invID = vehicles.parseIntCompactDescr(vehCD) vType = vehicles.g_cache.vehicle(nID, invID) for data in vType.unlocksDescrs: if data[1] not in unlocks: xpToElite += data[0] # xTDB, xTE, WTR, xWTR xtdb = -1 xte = -1 wtr = -1 xwtr = -1 if randomBattles > 0: stats = self.__getStatsBlock(dossier) dmg = stats.getDamageDealt() frg = stats.getFragsCount() if dmg >= 0 and frg >= 0: curdmg = float(dmg) / randomBattles curfrg = float(frg) / randomBattles xtdb = vehinfo.calculateXTDB(vehCD, curdmg) xte = vehinfo.calculateXTE(vehCD, curdmg, curfrg) #TODO: how to get WTR value from dossier? #wtr = stats.getWTR() #if wtr is None: # wtr = -1 #else: # xwtr = vehinfo.calculateXvmScale('wtr', wtr) res = self.__prepareVehicleResult(accountDBID, vehCD, dossier, xtdb, xte, wtr, xwtr, earnedXP, freeXP, xpToElite, rankCount, rankSteps, rankStepsTotal) self.__updateCamouflageResult(res, summer_camo, winter_camo, desert_camo) self._cache[cache_key] = res return res
def onXvmCommand(self, proxy, id, cmd, *args): try: #debug("id=" + str(id) + " cmd=" + str(cmd) + " args=" + json.dumps(args)) if (cmd not in NO_LOG_COMMANDS): debug("cmd=" + str(cmd) + " args=" + json.dumps(args)) res = None if cmd == COMMAND_LOG: log(*args) elif cmd == COMMAND_LOAD_FILE: fn = os.path.join(XVM_DIR, args[0]) res = load_file(fn) if os.path.exists(fn) else None elif cmd == COMMAND_SET_CONFIG: log('setConfig') self.config_str = args[0] self.config = json.loads(self.config_str) elif cmd == COMMAND_GET_CONFIG: res = self.config_str elif cmd == COMMAND_PING: #return ping(proxy) elif cmd == COMMAND_GETMODS: #return res = self.getMods() elif cmd == COMMAND_GETSCREENSIZE: #return res = json.dumps(list(GUI.screenResolution())) elif cmd == COMMAND_GETGAMEREGION: #return res = region elif cmd == COMMAND_GETLANGUAGE: #return res = language elif cmd == COMMAND_GETVEHICLEINFODATA: #return res = getVehicleInfoData() elif cmd == COMMAND_GETWN8EXPECTEDDATA: res = getWN8ExpectedData() elif cmd == COMMAND_GETXVMSTATTOKENDATA: res = json.dumps(getXvmStatTokenData()) elif cmd == COMMAND_LOADBATTLESTAT: getBattleStat(proxy, args) elif cmd == COMMAND_LOADBATTLERESULTSSTAT: getBattleResultsStat(proxy, args) elif cmd == COMMAND_LOADUSERDATA: getUserData(proxy, args) elif cmd == COMMAND_GETDOSSIER: getDossier(proxy, args) elif cmd == COMMAND_OPEN_URL: if len(args[0]) and args[0].lower().startswith('http://www.modxvm.com'): utils.openWebBrowser(args[0], False) elif cmd == COMMAND_LOAD_SETTINGS: pass # TODO elif cmd == COMMAND_SAVE_SETTINGS: pass # TODO elif cmd == COMMAND_TEST: runTest(args) else: err("unknown command: " + str(cmd)) proxy.movie.invoke(('xvm.respond', [id, res])) except Exception, ex: err(traceback.format_exc())