import time from core.decorators import instance, event from core.igncore import IgnCore from core.logger import Logger from core.message_hub_service import MessageHubService from core.text import Text, MLStripper from core.util import Util from modules.standard.helpbot.playfield_controller import PlayfieldController from modules.standard.tower.tower_attack_controller import TowerAttackController from modules.standard.tower.tower_controller import TowerController from modules.standard.tower.tower_events import TowerEventController @instance() class TowerSpamController: SOURCE = "TowerInfo" def __init__(self): self.logger = Logger(__name__) def inject(self, registry): self.bot: IgnCore = registry.get_instance("bot") self.db = registry.get_instance("db") self.text: Text = registry.get_instance("text") self.util: Util = registry.get_instance("util") self.tower: TowerEventController = registry.get_instance("tower_controller") self.tc: TowerController = registry.get_instance("tower_controller") self.tac: TowerAttackController = registry.get_instance("tower_attack_controller") self.playfield_controller: PlayfieldController = registry.get_instance("playfield_controller") self.msg_hub: MessageHubService = registry.get_instance("message_hub_service") def pre_start(self): self.msg_hub.register_message_source(self.SOURCE) @event(event_type=TowerEventController.TOWER_ATTACK_EVENT, description="NW Warnings, for attacks") def tower_attack_event(self, _, event_data): t = int(time.time()) site_number = self.tac.find_closest_site_number(event_data.location.playfield.id, event_data.location.x_coord, event_data.location.y_coord) # self.logger.info("ATTK ") # self.logger.info(event_data) # self.logger.info(" site: ") # [11.11.2021 04:35:58] INFO :: modules.standard.tower.tower_spam_controller -> ATTK | # [11.11.2021 04:35:58] INFO :: modules.standard.tower.tower_spam_controller -> {'attacker': {'char_id': 984112, 'name': 'Flexiblex', 'first_name': '', 'last_name': '', 'leve| # l': 117, 'breed': 'Opifex', 'gender': 'Female', 'faction': 'Omni', 'profession': 'Meta-Physicist', 'profession_title': 'ArchPriest', 'ai_rank': 'Adept', 'ai_level': 13, 'or| # g_id': 9655, 'org_name': 'Northern Star', 'org_rank_name': 'Unit Leader', 'org_rank_id': 4, 'dimension': 5, 'head_id': 40240, 'pvp_rating': 1503, 'pvp_title': 'Rookie', 'so| # urce': 'people.anarchy-online.com', 'last_updated': 1636601503, 'cache_age': 3855}, 'defender': {'faction': 'Omni', 'org_name': 'Weyland Yutani'}, 'location': {'playfield':| # {'id': 795, 'long_name': 'The Longest Road', 'short_name': 'TLR', 'dungeon': 0}, 'x_coord': 526, 'y_coord': 538}} | # [11.11.2021 04:35:58] INFO :: modules.standard.tower.tower_spam_controller -> site: | # [11.11.2021 04:35:58] INFO :: modules.standard.tower.tower_spam_controller -> 7 # self.logger.info(site_number) self.send_nw( f"[NW] {self.text.get_formatted_faction(event_data.attacker.faction, event_data.attacker.org_name)} " f"[{self.text.get_formatted_faction(event_data.attacker.faction, event_data.attacker.name)} ({event_data.attacker.level}/{event_data.attacker.ai_level})" f" -> {self.util.get_profession(event_data.attacker.profession)}] " f"attacked {self.text.get_formatted_faction(event_data.defender.faction, event_data.defender.org_name)} " f"at {event_data.location.playfield.short_name} x{site_number}") @event(event_type=TowerEventController.TOWER_VICTORY_EVENT, description="Send NW warnings") def tower_victory_event(self, _, event_data): t = int(time.time()) row = None if event_data.type == "attack": row = self.tac.get_last_attack(event_data.winner.faction, event_data.winner.org_name, event_data.loser.faction, event_data.loser.org_name, event_data.location.playfield.id, t) # self.logger.info("ATTK_VICT ") # self.logger.info(event_data) # self.logger.info("ATTK_VICT ") # self.logger.info(row) self.send_nw( f"[NW] {self.text.get_formatted_faction(event_data.winner.faction, event_data.winner.org_name)} " f"won against {self.text.get_formatted_faction(event_data.loser.faction, event_data.loser.org_name)} at {event_data.location.playfield.short_name} x{row.site}") elif event_data.type == "terminated": row = self.tac.find_similar_attacks(event_data.loser.faction, event_data.loser.org_name, event_data.location.playfield.id, t) # VICTORY {'type': 'terminated', 'winner': {'faction': '', 'org_name': ''}, 'loser': {'faction': 'Omni', 'org_name': 'Do you smell the scared boxes'}, 'location': {'playfield # ': {'id': 795, 'long_name': 'The Longest Road', 'short_name': 'TLR', 'dungeon': 0}}} if row: # self.logger.info("ATTK_TERM ") # self.logger.info(event_data) # self.logger.info("TERMINATED ") # self.logger.info(row) self.send_nw(f"[NW] Site terminated in {event_data.location.playfield.long_name}: " f"{self.text.get_formatted_faction(event_data.loser.faction, event_data.loser.org_name)} at {event_data.location.playfield.short_name} x{row.site}") else: raise Exception("Unknown victory event type: '%s'" % event_data.type) def send_nw(self, message): stripper = MLStripper() stripper.feed(message) clean = stripper.get_data() self.msg_hub.send_message(self.SOURCE, None, clean, message)