Hawk1983x Posted May 9, 2017 Share Posted May 9, 2017 (edited) Hawk1983x, прикрепи конфиг battleMessages.xc. вот правда там ничего особенного battleMessages.xc Edited May 9, 2017 by Hawk1983x @ Quote Link to comment Short link Share on other sites More sharing options...
Kotyarko_O Posted May 9, 2017 Author Share Posted May 9, 2017 (edited) @Hawk1983x, ошибку с форматом, на которую ты дал ссылку выше, не воспроизвёл. И с твоими конфигами у меня ничего не дублировалось. Но заметил ошибки, связанные с неизвестностью информации о вражеской технике (особенность режима боя). Её исправил, но версию в шапке пока не буду заменять (нет возможности нормально потестить), прикреплю сюда. Попробуй: battleMessages.rar Edited May 9, 2017 by Kotyarko_O @ Quote Link to comment Short link Share on other sites More sharing options...
Hawk1983x Posted May 9, 2017 Share Posted May 9, 2017 Kotyarko_O, с этим скриптом у меня тоже перестало двоиться в реплее. Спасибо! @ Quote Link to comment Short link Share on other sites More sharing options...
Ragnarocek Posted June 12, 2017 Share Posted June 12, 2017 (edited) deleted Edited June 13, 2017 by Ragnarocek @ Quote Link to comment Short link Share on other sites More sharing options...
DKRUBEN Posted September 16, 2017 Share Posted September 16, 2017 its possible anyone update this macro? @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted September 16, 2017 Share Posted September 16, 2017 its possible anyone update this macro? Опишите, что не работает. @ Quote Link to comment Short link Share on other sites More sharing options...
DKRUBEN Posted September 16, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
ktulho Posted September 17, 2017 Share Posted September 17, 2017 @DKRUBEN, прикрепите папку res_mods\configs\xvm\ @ Quote Link to comment Short link Share on other sites More sharing options...
DKRUBEN Posted September 17, 2017 Share Posted September 17, 2017 @DKRUBEN, прикрепите папку res_mods\configs\xvm\ http://www.mediafire.com/file/lm17hgwfrufmt79/res_mods.7z all settings in settings.xc @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted September 17, 2017 Share Posted September 17, 2017 @DKRUBEN, Установка аддона: В @xvm.xc добавить ссылку на конфиг аддона: "battleMessages": ${"battleMessages.xc":"battleMessages"} Содержимое архива раcпаковать в "res_mods": battleMessages.rar * Обратите внимание, что внутри архива, для примера, имя папки конфигов было взято стандартное - "default". * Соответственно, если у вас папка конфигов имеет уникальное имя, вам нужно скопировать конфиг battleMessages.xc, находящийся в папке "default" загруженного архива, в свою папку конфигов. В @xvm.xc добавить ссылку на конфиг аддона: 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Kaeptn Posted October 24, 2017 Share Posted October 24, 2017 ktulho, could you fix this spam by any chance? 1 1 @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted October 25, 2017 Share Posted October 25, 2017 @Kaeptn Attach the logs and the replay. @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted October 25, 2017 Share Posted October 25, 2017 @ktulho , спамер хочет убрать свой же спам, интересно. От поставил какой то мод который чат засирает, ему клиент отправляет сообщение об ограничении времени на отправку сообщения в 0.5 секунд. Если я не ошибаюсь на реплее эти предупреждения не выводятся. @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted October 25, 2017 Share Posted October 25, 2017 1 минуту назад, night_dragon_on сказал: От поставил какой то мод который чат засирает, Поэтому нужны логи. @ Quote Link to comment Short link Share on other sites More sharing options...
Kaeptn Posted October 30, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
DKRUBEN Posted October 31, 2017 Share 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 Link to comment Short link Share on other sites More sharing options...
SicFunzler Posted November 14, 2017 Share Posted November 14, 2017 Update battleMessages pls or have anybody a File that WORK ! ! ! MFG SicFunzler @ Quote Link to comment Short link Share on other sites More sharing options...
SEREGA_SF Posted November 16, 2017 Share Posted November 16, 2017 В 24.01.2017 в 20:23, Kotyarko_O сказал: Я не стал вводить возможность прокликивать квадрат. Ведь в конфиге есть параметр "helpMeCommand", отправляющий команду "Нужна помощь!". И, как все знают, эта команда отображается соответствующей анимацией поверх своего маркера на миникарте. В другом моде у меня к примеру настроено так: "Засвет в А1. Внимание на квадрат А1" и на миникарте моргает квадрат. (т.е. все сообщение занимает одну строку). У тебя так понимаю будет сообщение о засвете и на второй строке будет сообщение "Нужна помощь"? @ Quote Link to comment Short link Share on other sites More sharing options...
SicFunzler Posted November 16, 2017 Share Posted November 16, 2017 pls have a config and a py THX MFG SicFunzler @ Quote Link to comment Short link Share on other sites More sharing options...
DKRUBEN Posted November 17, 2017 Share 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 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.