diff --git a/core/igncore.py b/core/igncore.py
index f9ee44a..87ac610 100644
--- a/core/igncore.py
+++ b/core/igncore.py
@@ -48,7 +48,7 @@ class IgnCore:
self.last_timer_event = 0
self.start_time = int(time.time())
self.major_version = "IGNCore v2.9"
- self.minor_version = "5"
+ self.minor_version = "6"
self.incoming_queue = FifoQueue()
self.mass_message_queue = None
self.conns = DictObject()
diff --git a/modules/orgbot/org/org_roster_controller.py b/modules/orgbot/org/org_roster_controller.py
index b9b6774..d42f267 100644
--- a/modules/orgbot/org/org_roster_controller.py
+++ b/modules/orgbot/org/org_roster_controller.py
@@ -204,6 +204,9 @@ class OrgRosterController:
if not ext_msg:
self.logger.error(f"--UKN-- {_} -- {event_data}")
return
+ if [ext_msg.category_id, ext_msg.instance_id] == [508, 176308692]:
+ self.logger.info(f"AS/OS DETECTED -- {ext_msg}")
+
if [ext_msg.category_id, ext_msg.instance_id] == self.LEFT_ORG:
log = True
self.process_org_msg(ext_msg.params[0], self.MODE_REM_MANUAL, ext_msg)
diff --git a/modules/standard/news/worldboss_controller.py b/modules/standard/news/worldboss_controller.py
index 2c18085..aa94c31 100644
--- a/modules/standard/news/worldboss_controller.py
+++ b/modules/standard/news/worldboss_controller.py
@@ -65,8 +65,10 @@ class TimerObj:
return 3 * 60 * 60
elif self.name in ["T.A.M.", "Zaal The Immortal"]:
return 6 * 60 * 60
- elif self.name in ["Abmouth Indomitus"]:
- return 0
+ # elif self.name in ["Abmouth Indomitus"]:
+ # return 0
+ # No respawn timer?
+ return 0
@instance()
@@ -93,20 +95,24 @@ class WorldBossController:
self.setting_service.register(self.module_name, 'timer_spam', False, BooleanSettingType(),
"should timers be spammed")
self.command_alias_service.add_alias("tara", "wb tara")
- self.command_alias_service.add_alias("gaunt", "wb gaunt")
+ self.command_alias_service.add_alias("gaunt", "wb viza")
self.command_alias_service.add_alias("loren", "wb loren")
self.command_alias_service.add_alias("reaper", "wb reaper")
- def spam_timer(self, time, mob, msg):
+ def spam_timer(self, time, mob, msg, next=None):
self.send_warn(msg)
- self.jobs.pop(mob, 0)
+ self.jobs.pop(mob.name, 0)
+ if next == "spawn":
+ if mob.get_respawn_timer() != 0:
+ i = self.job_scheduler.scheduled_job(self.spam_timer, mob.time + mob.get_respawn_timer(), mob=mob.name,
+ msg=f"{mob.name} should spawn soon.")
+ self.jobs[mob.name] = i
@event(WebsocketRelayController.WS_RELAY, "save most current local_timers")
def get_timer(self, _, data):
# print(data)
if data.type != "timer":
return
- local = {}
for x in data.payload:
found = False
for y in self.timer_data:
@@ -115,17 +121,15 @@ class WorldBossController:
found = True
if not found:
self.timer_data.append(TimerObj(x))
- # print("-"*50)
for x in self.timer_data:
x: TimerObj
- # print(x.__str__())
if x.alive_immortal(True):
x.spam = x.getTime()
job = self.jobs.pop(x.name, None)
if job:
self.job_scheduler.cancel_job(job)
self.send_warn(f"{x.name} has spawned.")
- i = self.job_scheduler.scheduled_job(self.spam_timer, x.time-1, mob=x.name, msg=f"{x.name} is now mortal.")
+ i = self.job_scheduler.scheduled_job(self.spam_timer, x.time-1, mob=x, msg=f"{x.name} is now mortal.", next="spawn")
self.jobs[x.name] = i
elif x.alive_mortal(True):
x.spam = x.getTime()
@@ -134,9 +138,12 @@ class WorldBossController:
self.job_scheduler.cancel_job(job)
self.send_warn(f"{x.name} is now mortal.")
if x.get_respawn_timer() != 0:
- i = self.job_scheduler.scheduled_job(self.spam_timer, x.time+x.get_respawn_timer(), mob=x.name, msg=f"{x.name} should spawn soon.")
+ i = self.job_scheduler.scheduled_job(self.spam_timer, x.time+x.get_respawn_timer(), mob=x, msg=f"{x.name} should spawn soon.")
self.jobs[x.name] = i
- # print("-"*50)
+ elif (x.time + 60) < x.getTime() < (x.time + x.get_respawn_timer()):
+ i = self.job_scheduler.scheduled_job(self.spam_timer, x.time + x.get_respawn_timer(), mob=x,
+ msg=f"{x.name} should spawn soon.")
+ self.jobs[x.name] = i
def send_warn(self, msg):
self.relay_hub.send_message("timers", None, f"[WB] {msg}", f"[WB] {msg}")
@@ -147,81 +154,47 @@ class WorldBossController:
return duration - alert - 1
return duration
+ def getWorldbossName(self, name):
+ name = name.lower()
+ for x in self.timer_data:
+ x.name: str
+ if x.name.lower().__contains__(name):
+ return x.name
+
+ return None
+ # if name in ["tara", "tarasque"]:
+ # return "Tarasque"
+ # elif name in ["lw", "loren", "warr", "loren warr"]:
+ # return "Loren Warr"
+ # elif name in ["thr", "reaper", "hollow reaper", "the hollow reaper"]:
+ # return "The Hollow Reaper"
+
@command(command="wb", params=[Any("worldboss", is_optional=True)],
description="Displays the next worldboss spawns", access_level="member")
def show_worldboss(self, request, boss: str):
- return ChatBlob("Next Worldboss spawns", self.getWBTimer())
-
- @command(command="wb", params=[Const("settings")],
- description="Worldboss Settings", access_level="moderator", sub_command="mod")
- def wb_settings_cmd(self, request, boss: str):
- pass
-
- def show_user(self, timer):
- timer = self.getWBTimer(timer)
- if not timer:
- return "No timers cached; please try again later."
- if timer.spawn < timer.getTime() < timer.time:
- return f"{timer.name} :: mortal in {self.util.format_time(timer.time-timer.spawn)}"
- elif timer.time < timer.getTime():
- rt = timer.get_respawn_timer()
-
- return f"{timer.name} :: spawn in {self.util.format_time(timer.time + timer.get_respawn_timer())}"
+ if boss:
+ boss = self.getWorldbossName(boss)
+ if boss:
+ return self.getWBTimer(boss)
+ return ChatBlob("Next Worldboss spawns", ""+self.getWBTimer())
def getWBTimer(self, name=None) -> Union[TimerObj, list[TimerObj]]:
if not name:
blob = ""
- for x in self.timer_data:
- x: TimerObj
- if x.alive_immortal():
- blob += f" {x.name} :: mortal in {self.util.format_time(x.time - x.getTime())}\n"
- else:
- rt = x.get_respawn_timer()
- if rt != 0:
- if (x.time + rt) < x.getTime() < (x.time + 2 * rt):
- blob += f" {x.name} :: should have spawned {self.util.format_time(abs(x.getTime() - (x.time + rt)))} ago\n"
- continue
- blob += f" {x.name} :: spawn in {self.util.format_time(x.time + rt - x.getTime())}\n"
+ for x in sorted(self.timer_data, key=lambda y: y.name):
+ msg = self.formatMessage(x)
+ blob += (msg + "\n") if msg else ""
return blob
for x in self.timer_data:
if x.name == name:
- return x
-
- def timer_alert(self, t, timer):
- pass
- # if self.setting_service.get_value("timer_spam") == "0":
- # return
- # for row in self.timer_data:
- # if row["name"] == timer.name:
- # timer = self.get_spawn(row)
- # if not timer.at:
- # return
- # alert_duration = self.get_next_alert(timer.at - time.time())
- # if timer.at - time.time() < 1:
- # if timer.type == "mortal":
- # self.send_warn(f"{timer.name} :: is now mortal")
- # self.jobs = [x for x in self.jobs if x['name'] != timer.name]
- # elif timer.type == "spawn":
- # self.send_warn(f"{timer.name} :: has just spawned")
- # self.jobs = [x for x in self.jobs if x['name'] != timer.name]
- # else:
- # if timer.type == "mortal":
- # self.send_warn(f"{timer.name} :: mortal in {self.util.format_time(timer.time)}")
- # elif timer.type == "spawn":
- # if alert_duration > 60 * 2:
- # self.send_warn(
- # f"{timer.name} :: spawn in {self.util.format_time(timer.time)}")
- # for row in self.timer_data:
- # if row["name"] == timer.name:
- # timer = self.get_spawn(row)
- # job_id = self.job_scheduler.scheduled_job(self.timer_alert, time.time() + alert_duration, timer)
- # for job in self.jobs:
- # if job['name'] == timer.name:
- # job['id'] = job_id
- # return
- # self.jobs.append({'name': timer.name, 'id': job_id})
-
- # @setting('alert_times', '[480 * 60, 360 * 60, 240 * 60, 120 * 60, 60 * 60, 60 * 15, 60 * 5, 60 * 3, 60 * 2, 60, 30, 15, 5, 0]', 'Worldboss timer spam messages (ETA and actual)')
- # def alert_times(self):
- # return TextSettingType(['[480 * 60, 360 * 60, 240 * 60, 120 * 60, 60 * 60, 60 * 15, 60 * 5, 60 * 3, 60 * 2, 60, 30, 15, 5, 0]'])
+ return self.formatMessage(x).strip()
+ def formatMessage(self, x: TimerObj):
+ if x.alive_immortal():
+ return f" {x.name} :: mortal in {self.util.format_time(x.time - x.getTime())}"
+ else:
+ rt = x.get_respawn_timer()
+ if rt != 0:
+ if (x.time + rt) < x.getTime() < (x.time + 2 * rt):
+ return f" {x.name} :: should have spawned {self.util.format_time(abs(x.getTime() - (x.time + rt)))} ago"
+ return f" {x.name} :: spawn in {self.util.format_time(x.time + rt - x.getTime())}"
diff --git a/modules/standard/timers/timer_controller.py b/modules/standard/timers/timer_controller.py
index ef840aa..478c27b 100644
--- a/modules/standard/timers/timer_controller.py
+++ b/modules/standard/timers/timer_controller.py
@@ -70,13 +70,6 @@ class TimerController:
t = int(time.time())
count = 0
- def getmsg(message):
- message = "" + message + "\n" if message != "No timers cached; please try again later." else ""
- nn = 0
- if message != "":
- nn = 1
- return message, nn
-
data = self.db.query("SELECT t.*, p.name AS char_name FROM timer t "
"LEFT JOIN player p ON t.char_id = p.char_id "
"ORDER BY t.finished_at")
@@ -85,8 +78,8 @@ class TimerController:
blob += "\n"
blob += self.worldboss.getWBTimer()
x: TimerObj = None
- count += len([x for x in self.worldboss.timer_data if (x.time+x.get_respawn_timer()) < x.getTime()])
- blob += "\n\n\n"
+ count += len([x for x in self.worldboss.timer_data if (x.time+x.get_respawn_timer()) > x.getTime()])
+ blob += "\n\n"
for timer in data:
repeats = ""
if timer.repeating_every > 0: