Hawk1983x 203 #389885 Posted May 9, 2017 (edited) Hawk1983x, прикрепи конфиг battleMessages.xc. вот правда там ничего особенного battleMessages.xc Edited May 9, 2017 by Hawk1983x Quote Share this post Link to post Short link Share on other sites
Kotyarko_O 1,906 #389898 Posted May 9, 2017 (edited) @Hawk1983x, ошибку с форматом, на которую ты дал ссылку выше, не воспроизвёл. И с твоими конфигами у меня ничего не дублировалось. Но заметил ошибки, связанные с неизвестностью информации о вражеской технике (особенность режима боя). Её исправил, но версию в шапке пока не буду заменять (нет возможности нормально потестить), прикреплю сюда. Попробуй: battleMessages.rar Edited May 9, 2017 by Kotyarko_O Quote Share this post Link to post Short link Share on other sites
Hawk1983x 203 #389901 Posted May 9, 2017 Kotyarko_O, с этим скриптом у меня тоже перестало двоиться в реплее. Спасибо! Quote Share this post Link to post Short link Share on other sites
Ragnarocek 17 #395013 Posted June 12, 2017 (edited) deleted Edited June 13, 2017 by Ragnarocek Quote Share this post Link to post Short link Share on other sites
DKRUBEN 19 #404399 Posted September 16, 2017 its possible anyone update this macro? Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #404401 Posted September 16, 2017 its possible anyone update this macro? Опишите, что не работает. Quote Share this post Link to post Short link Share on other sites
DKRUBEN 19 #404402 Posted September 16, 2017 Опишите, что не работает. не отображает сообщения. py: import game ##import BigWorld from math import ceil from xfw import registerEvent from xvm_main.python import config from xvm_main.python.xvm import l10n from Avatar import PlayerAvatar from items import vehicles from Vehicle import Vehicle from messenger import MessengerEntry from gui.app_loader import g_appLoader from gui.Scaleform.framework import ViewTypes from gui.Scaleform.daapi.view.battle.shared.markers2d.plugins import VehicleMarkerPlugin from gui.Scaleform.daapi.view.battle.shared.indicators import SixthSenseIndicator from gui.battle_control.controllers.chat_cmd_ctrl import CHAT_COMMANDS from gui.shared.gui_items.Vehicle import VEHICLE_CLASS_NAME player = None battleMessagesConfig = config.get('battleMessages', { 'teamDamage': {'enabled': False}, 'enemyArtyCooldown': {'enabled': False}, 'iAmSpotted': {'enabled': False} }) def getSquarePosition(): def clamp(val, vmin, vmax): if val < vmin: return vmin if val > vmax: return vmax return val def pos2name(pos): sqr = 'KJHGFEDCBA' line = '1234567890' return '{}{}'.format(sqr[int(pos[1]) - 1], line[int(pos[0]) - 1]) boundingBox = player.arena.arenaType.boundingBox position = BigWorld.entities[player.playerVehicleID].position positionRect = (position[0], position[2]) bottomLeft, upperRight = boundingBox spaceSize = upperRight - bottomLeft relPos = positionRect - bottomLeft relPos[0] = clamp(relPos[0], 0.1, spaceSize[0]) relPos[1] = clamp(relPos[1], 0.1, spaceSize[1]) return pos2name((ceil(relPos[0] / spaceSize[0] * 10), ceil(relPos[1] / spaceSize[1] * 10))) #ENEMYARTYSCOOLDOWN def showEnemyArtyCooldown(self, attacker): if (not self.isPlayerVehicle) or (not hasattr(attacker['vehicleType'], 'type')): return message = battleMessagesConfig['enemyArtyCooldown']['format'] if vehicles.getVehicleClass(attacker['vehicleType'].type.compactDescr) == VEHICLE_CLASS_NAME.SPG: if player.team != attacker['team']: message = message.replace('{{arty-tank}}', attacker['vehicleType'].type.shortUserString) message = message.replace('{{arty-name}}', attacker['name']) player.guiSessionProvider.shared.chatCommands.proto.arenaChat.broadcast(message, 0) #IAMSPOTTED def iAmSpotted(): def sosCommand(): player.guiSessionProvider.shared.chatCommands.handleChatCommand(CHAT_COMMANDS.SOS) alive_allies = {id:data for id, data in player.arena.vehicles.items() if data['team'] == player.team and data['isAlive']} if (2 < len(alive_allies) < int(battleMessagesConfig['iAmSpotted']['showWhenLess'])) or (int(battleMessagesConfig['iAmSpotted']['showWhenLess']) == 0): message = battleMessagesConfig['iAmSpotted']['format'] message = message.replace('{{position}}', getSquarePosition()) if len(message) > 0: player.guiSessionProvider.shared.chatCommands.proto.arenaChat.broadcast(message, 0) if battleMessagesConfig['iAmSpotted']['helpMeCommand']: BigWorld.callback(0.5, sosCommand) #TEAMDAMAGE vehiclesHP = {} damageReasons = { 0: 'shot', 1: 'fire', 2: 'ramming', 3: 'world_collision', 4: 'death_zone', 5: 'drowning' } def showTeamDamage(message): messageIn = battleMessagesConfig['teamDamage']['messageIn'] if messageIn == 'chat': MessengerEntry.g_instance.gui.addClientMessage(message) elif messageIn == 'killog': ctrl = g_appLoader.getDefBattleApp() if ctrl is not None: battle_page = ctrl.containerManager.getContainer(ViewTypes.VIEW).getView() battle_page.components['battlePlayerMessages'].as_showRedMessageS(None, message) @registerEvent(PlayerAvatar, '_PlayerAvatar__startGUI') def __startGUI(self): global player, vehiclesHP player = BigWorld.player() arenaVehicles = player.arena.vehicles for key in arenaVehicles.keys(): vehicle = arenaVehicles.get(key) if vehicle['vehicleType']: vehiclesHP[key] = vehicle['vehicleType'].maxHealth @registerEvent(PlayerAvatar, '_PlayerAvatar__destroyGUI') def __destroyGUI(self): global player, vehiclesHP player = None vehiclesHP = {} @registerEvent(VehicleMarkerPlugin, '_VehicleMarkerPlugin__onVehicleMarkerAdded') def __onVehicleMarkerAdded(self, vProxy, vInfo, guiProps): global vehiclesHP vehiclesHP.update({vProxy.id: vProxy.health}) def teamDamage_onHealthChanged(self, newHealth, attackerID, attackReasonID): attacker = player.arena.vehicles.get(attackerID) if None in [player, attacker]: return message = battleMessagesConfig['teamDamage']['format'] enabledFor = battleMessagesConfig['teamDamage']['enabledFor'] damage = vehiclesHP.get(self.id, 0) - max(0, newHealth) if player.team == attacker['team'] == self.publicInfo.team and self.id != attackerID: message = message.replace('{{damage}}', str(damage)) message = message.replace('{{damage-reason}}', l10n(damageReasons[attackReasonID])) message = message.replace('{{victim-name}}', self.publicInfo.name) message = message.replace('{{victim-vehicle}}', self.typeDescriptor.type.shortUserString) message = message.replace('{{attacker-name}}', attacker['name']) message = message.replace('{{attacker-vehicle}}', attacker['vehicleType'].type.shortUserString) if enabledFor == 'all': showTeamDamage(message) elif enabledFor == 'player' and (self.publicInfo.name == player.name or attacker['name'] == player.name): showTeamDamage(message) elif enabledFor == 'ally' and self.publicInfo.name != player.name and attacker['name'] != player.name: showTeamDamage(message) vehiclesHP.update({self.id: newHealth}) # @registerEvent(Vehicle, 'onHealthChanged') def onHealthChanged(self, newHealth, attackerID, attackReasonID): if battleMessagesConfig['teamDamage']['enabled']: teamDamage_onHealthChanged(self, newHealth, attackerID, attackReasonID) @registerEvent(Vehicle, 'showDamageFromShot') def showDamageFromShot(self, attackerID, points, effectsIndex, damageFactor): if battleMessagesConfig['enemyArtyCooldown']['enabled']: showEnemyArtyCooldown(self, player.arena.vehicles.get(attackerID)) @registerEvent(Vehicle, 'showDamageFromExplosion') def showDamageFromExplosion(self, attackerID, center, effectsIndex, damageFactor): if battleMessagesConfig['enemyArtyCooldown']['enabled']: showEnemyArtyCooldown(self, player.arena.vehicles.get(attackerID)) @registerEvent(SixthSenseIndicator, '_SixthSenseIndicator__show') def _SixthSenseIndicator__show(self): if battleMessagesConfig['iAmSpotted']['enabled'] and player.isVehicleAlive: iAmSpotted() xc { "def": { "battleMessages": { "enemyArtyCooldown": { "enabled": true, "format": "Arty {{arty-tank}} ({{arty-name}}) Shoot me >:0 " }, "iAmSpotted": { "enabled": true, "showWhenLess": 6, "helpMeCommand": true, "format": "I'm Spotted in {{position}} :(!" }, "teamDamage": { "enabled": tue, "enabledFor": "all", "messageIn": "chat", "format": "<font color='#00EAFF'>{{attacker-name}} ({{attacker-vehicle}})</font> Damaged in ally {{victim-name}} ({{victim-vehicle}}) <font color='#FFDD33'>{{damage}} hp </font>!" } } } } Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #404420 Posted September 17, 2017 @DKRUBEN, прикрепите папку res_mods\configs\xvm\ Quote Share this post Link to post Short link Share on other sites
DKRUBEN 19 #404428 Posted September 17, 2017 @DKRUBEN, прикрепите папку res_mods\configs\xvm\ http://www.mediafire.com/file/lm17hgwfrufmt79/res_mods.7z all settings in settings.xc Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #404445 Posted September 17, 2017 @DKRUBEN, Установка аддона: В @xvm.xc добавить ссылку на конфиг аддона: "battleMessages": ${"battleMessages.xc":"battleMessages"} Содержимое архива раcпаковать в "res_mods": battleMessages.rar * Обратите внимание, что внутри архива, для примера, имя папки конфигов было взято стандартное - "default". * Соответственно, если у вас папка конфигов имеет уникальное имя, вам нужно скопировать конфиг battleMessages.xc, находящийся в папке "default" загруженного архива, в свою папку конфигов. В @xvm.xc добавить ссылку на конфиг аддона: 1 Quote Share this post Link to post Short link Share on other sites
Kaeptn 24 #408692 Posted October 24, 2017 ktulho, could you fix this spam by any chance? 1 1 Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #408722 Posted October 25, 2017 @Kaeptn Attach the logs and the replay. Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #408737 Posted October 25, 2017 @ktulho , спамер хочет убрать свой же спам, интересно. От поставил какой то мод который чат засирает, ему клиент отправляет сообщение об ограничении времени на отправку сообщения в 0.5 секунд. Если я не ошибаюсь на реплее эти предупреждения не выводятся. Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #408738 Posted October 25, 2017 1 минуту назад, night_dragon_on сказал: От поставил какой то мод который чат засирает, Поэтому нужны логи. Quote Share this post Link to post Short link Share on other sites
Kaeptn 24 #409691 Posted October 30, 2017 can't provide any logs or replay, sorry - i've already removed it from my config. i'm also quite sure that there was no error or anything related to the script. script seem to send it's messages multiple times instead of once, which triggers the built in antispam. in case of the team damage message, it fills up the entire screen with the same message. 1 Quote Share this post Link to post Short link Share on other sites
DKRUBEN 19 #409851 Posted October 31, 2017 В 30/10/2017 в 20:20, Kaeptn сказал: can't provide any logs or replay, sorry - i've already removed it from my config. i'm also quite sure that there was no error or anything related to the script. script seem to send it's messages multiple times instead of once, which triggers the built in antispam. in case of the team damage message, it fills up the entire screen with the same message. same probleme here Quote Share this post Link to post Short link Share on other sites
SicFunzler 57 #411708 Posted November 14, 2017 Update battleMessages pls or have anybody a File that WORK ! ! ! MFG SicFunzler Quote Share this post Link to post Short link Share on other sites
SEREGA_SF 611 #411953 Posted November 16, 2017 В 24.01.2017 в 20:23, Kotyarko_O сказал: Я не стал вводить возможность прокликивать квадрат. Ведь в конфиге есть параметр "helpMeCommand", отправляющий команду "Нужна помощь!". И, как все знают, эта команда отображается соответствующей анимацией поверх своего маркера на миникарте. В другом моде у меня к примеру настроено так: "Засвет в А1. Внимание на квадрат А1" и на миникарте моргает квадрат. (т.е. все сообщение занимает одну строку). У тебя так понимаю будет сообщение о засвете и на второй строке будет сообщение "Нужна помощь"? Quote Share this post Link to post Short link Share on other sites
SicFunzler 57 #412025 Posted November 16, 2017 pls have a config and a py THX MFG SicFunzler Quote Share this post Link to post Short link Share on other sites
DKRUBEN 19 #412046 Posted November 17, 2017 py: well work for me import BigWorld from math import ceil from xfw import * #New Line #from xfw import registerEvent """need fix""" from xvm_main.python import config from xvm_main.python.xvm import l10n from Avatar import PlayerAvatar from items import vehicles from Vehicle import Vehicle from messenger import MessengerEntry from gui.app_loader import g_appLoader from gui.Scaleform.framework import ViewTypes from gui.Scaleform.daapi.view.battle.shared.markers2d.plugins import VehicleMarkerPlugin from gui.Scaleform.daapi.view.battle.shared.indicators import SixthSenseIndicator from gui.battle_control.controllers.chat_cmd_ctrl import CHAT_COMMANDS from gui.shared.gui_items.Vehicle import VEHICLE_CLASS_NAME player = None battleMessagesConfig = config.get('battleMessages', { 'teamDamage': {'enabled': False}, 'enemyArtyCooldown': {'enabled': False}, 'iAmSpotted': {'enabled': False} }) def getSquarePosition(): def clamp(val, vmin, vmax): if val < vmin: return vmin if val > vmax: return vmax return val def pos2name(pos): sqr = 'KJHGFEDCBA' line = '1234567890' return '{}{}'.format(sqr[int(pos[1]) - 1], line[int(pos[0]) - 1]) boundingBox = player.arena.arenaType.boundingBox position = BigWorld.entities[player.playerVehicleID].position positionRect = (position[0], position[2]) bottomLeft, upperRight = boundingBox spaceSize = upperRight - bottomLeft relPos = positionRect - bottomLeft relPos[0] = clamp(relPos[0], 0.1, spaceSize[0]) relPos[1] = clamp(relPos[1], 0.1, spaceSize[1]) return pos2name((ceil(relPos[0] / spaceSize[0] * 10), ceil(relPos[1] / spaceSize[1] * 10))) #ENEMYARTYSCOOLDOWN def showEnemyArtyCooldown(self, attackerID): if not self.isPlayerVehicle: return message = battleMessagesConfig['enemyArtyCooldown']['format'] attacker = player.arena.vehicles.get(attackerID) if vehicles.getVehicleClass(attacker['vehicleType'].type.compactDescr) == VEHICLE_CLASS_NAME.SPG: if player.team != attacker['team']: message = message.replace('{{arty-tank}}', attacker['vehicleType'].type.shortUserString) message = message.replace('{{arty-name}}', attacker['name']) player.guiSessionProvider.shared.chatCommands.proto.arenaChat.broadcast(message, 0) #IAMSPOTTED def IAmSpotted(): def SOSCommand(): player.guiSessionProvider.shared.chatCommands.handleChatCommand(CHAT_COMMANDS.SOS) alive_allies = {id:data for id, data in player.arena.vehicles.items() if data['team'] == player.team and data['isAlive']} if (2 < len(alive_allies) < int(battleMessagesConfig['iAmSpotted']['showWhenLess'])) or (int(battleMessagesConfig['iAmSpotted']['showWhenLess']) == 0): message = battleMessagesConfig['iAmSpotted']['format'] message = message.replace('{{position}}', getSquarePosition()) if len(message) > 0: player.guiSessionProvider.shared.chatCommands.proto.arenaChat.broadcast(message, 0) if battleMessagesConfig['iAmSpotted']['helpMeCommand']: BigWorld.callback(0.5, SOSCommand) #TEAMDAMAGE vehiclesHP = {} damageReasons = { 0: 'shot', 1: 'fire', 2: 'ramming', 3: 'world_collision', 4: 'death_zone', 5: 'drowning' } def showTeamDamage(message): messageIn = battleMessagesConfig['teamDamage']['messageIn'] if messageIn == 'chat': MessengerEntry.g_instance.gui.addClientMessage(message) elif messageIn == 'killog': ctrl = g_appLoader.getDefBattleApp() if ctrl is not None: battle_page = ctrl.containerManager.getContainer(ViewTypes.VIEW).getView() battle_page.components['battlePlayerMessages'].as_showRedMessageS(None, message) @registerEvent(PlayerAvatar, '_PlayerAvatar__startGUI') def __startGUI(self): global player, vehiclesHP player = BigWorld.player() arenaVehicles = player.arena.vehicles for key in arenaVehicles.keys(): vehicle = arenaVehicles.get(key) if vehicle['vehicleType']: vehiclesHP[key] = vehicle['vehicleType'].maxHealth @registerEvent(PlayerAvatar, '_PlayerAvatar__destroyGUI') def __destroyGUI(self): global player, vehiclesHP player = None vehiclesHP = {} @registerEvent(VehicleMarkerPlugin, '_VehicleMarkerPlugin__onVehicleMarkerAdded') def __onVehicleMarkerAdded(self, vProxy, vInfo, guiProps): global vehiclesHP vehiclesHP.update({vProxy.id: vProxy.health}) def teamDamage_onHealthChanged(self, newHealth, attackerID, attackReasonID): if player is None: return message = battleMessagesConfig['teamDamage']['format'] enabledFor = battleMessagesConfig['teamDamage']['enabledFor'] damage = vehiclesHP.get(self.id, 0) - max(0, newHealth) attacker = player.arena.vehicles.get(attackerID) if player.team == attacker['team'] == self.publicInfo.team and self.id != attackerID: message = message.replace('{{damage}}', str(damage)) message = message.replace('{{damage-reason}}', l10n(damageReasons[attackReasonID])) message = message.replace('{{victim-name}}', self.publicInfo.name) message = message.replace('{{victim-vehicle}}', self.typeDescriptor.type.shortUserString) message = message.replace('{{attacker-name}}', attacker['name']) message = message.replace('{{attacker-vehicle}}', attacker['vehicleType'].type.shortUserString) if enabledFor == 'all': showTeamDamage(message) elif enabledFor == 'player' and (self.publicInfo.name == player.name or attacker['name'] == player.name): showTeamDamage(message) elif enabledFor == 'ally' and self.publicInfo.name != player.name and attacker['name'] != player.name: showTeamDamage(message) vehiclesHP.update({self.id: newHealth}) # @registerEvent(Vehicle, 'onHealthChanged') def onHealthChanged(self, newHealth, attackerID, attackReasonID): if battleMessagesConfig['teamDamage']['enabled']: teamDamage_onHealthChanged(self, newHealth, attackerID, attackReasonID) @registerEvent(Vehicle, 'showDamageFromShot') def showDamageFromShot(self, attackerID, points, effectsIndex, damageFactor): if battleMessagesConfig['enemyArtyCooldown']['enabled']: showEnemyArtyCooldown(self, attackerID) @registerEvent(Vehicle, 'showDamageFromExplosion') def showDamageFromExplosion(self, attackerID, center, effectsIndex, damageFactor): if battleMessagesConfig['enemyArtyCooldown']['enabled']: showEnemyArtyCooldown(self, attackerID) @registerEvent(SixthSenseIndicator, '_SixthSenseIndicator__show') def _SixthSenseIndicator__show(self): if battleMessagesConfig['iAmSpotted']['enabled'] and player.isVehicleAlive: IAmSpotted() Quote Share this post Link to post Short link Share on other sites