from core.chat_blob import ChatBlob from core.command_param_types import Int from core.db import DB from core.decorators import instance, command from core.text import Text @instance() class ResearchController: def inject(self, registry): self.db: DB = registry.get_instance("db") self.text: Text = registry.get_instance("text") self.util = registry.get_instance("util") def pre_start(self): self.db.load_sql_file(self.module_dir + "/sql/" + "research.sql", pre_optimized=True) self.db.create_view("research") @command(command="research", params=[Int("research_level")], access_level="member", description="Show information about a specific research level") def research_command(self, _, research_level): if research_level > 10 or research_level < 1: return "Research level must be between 1 and 10." row = self.db.query_single("SELECT * FROM research WHERE level = ?", [research_level]) capsk = int(row.sk * 0.1) blob = f"You must be level {row.levelcap:d} to research " \ f"Research Level {research_level:d}.\n" blob += f"You need {self.util.format_number(row.sk)} SK to reach " \ f"Research Level {research_level:d} per research line.\n\n" blob += f"This equals {self.util.format_number(row.sk * 1000)} XP.\n\n" blob += f"Your research will cap at {self.util.format_number(capsk * 1000)} XP or " \ f"{self.util.format_number(capsk)} SK." return ChatBlob("Research Level %d" % research_level, blob) @command(command="research", params=[Int("research_level"), Int("research_level")], access_level="member", description="Show the amount of SK needed from one research level to another") def research_span_command(self, _, research_level1, research_level2): if research_level1 > 10 or research_level1 < 1 or research_level2 > 10 or research_level2 < 1: return "Research level must be between 1 and 10." elif research_level1 == research_level2: return "You must specify different research levels." if research_level1 > research_level2: # swap researches so the lower is research_level1 and higher is research_level2 research_level1, research_level2 = research_level2, research_level1 row = self.db.query_single("SELECT SUM(sk) AS total_sk, MAX(levelcap) AS levelcap FROM research " "WHERE level > ? AND level <= ?", [research_level1, research_level2]) blob = f"You must be Level {row.levelcap:d} to reach " \ f"Research Level {research_level2:d}.\n" blob += f"It takes {self.util.format_number(row.total_sk)} SK to go from " \ f"Research Level {research_level1:d} to " \ f"Research Level {research_level2:d} per research line.\n\n" blob += f"This equals {self.util.format_number(row.total_sk * 1000)} XP." return ChatBlob(f"Research Levels {research_level1:d} - {research_level2:d}", blob)