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)