implemented weather events (just supernova to start)
This commit is contained in:
parent
b9be2a481f
commit
4b3921695d
|
@ -146,6 +146,7 @@ def save_league(league):
|
||||||
state_dic = {
|
state_dic = {
|
||||||
"season" : league.season,
|
"season" : league.season,
|
||||||
"day" : league.day,
|
"day" : league.day,
|
||||||
|
"last_weather_event" : league.last_weather_event_day,
|
||||||
"constraints" : league.constraints,
|
"constraints" : league.constraints,
|
||||||
"game_length" : league.game_length,
|
"game_length" : league.game_length,
|
||||||
"series_length" : league.series_length,
|
"series_length" : league.series_length,
|
||||||
|
|
25
leagues.py
25
leagues.py
|
@ -18,6 +18,9 @@ class league_structure(object):
|
||||||
self.autoplay = -1
|
self.autoplay = -1
|
||||||
self.champion = None
|
self.champion = None
|
||||||
self.weather_forecast = {}
|
self.weather_forecast = {}
|
||||||
|
self.weather_override = None #set to a weather for league-wide weather effects
|
||||||
|
self.last_weather_event_day = 0
|
||||||
|
self.weather_event_duration = 0
|
||||||
|
|
||||||
def setup(self, league_dic, division_games = 1, inter_division_games = 1, inter_league_games = 1, games_per_hour = 2):
|
def setup(self, league_dic, division_games = 1, inter_division_games = 1, inter_league_games = 1, games_per_hour = 2):
|
||||||
self.league = league_dic # { subleague name : { division name : [team object] } }
|
self.league = league_dic # { subleague name : { division name : [team object] } }
|
||||||
|
@ -466,7 +469,23 @@ class league_structure(object):
|
||||||
return this_embed
|
return this_embed
|
||||||
|
|
||||||
def get_weather_now(self, team_name):
|
def get_weather_now(self, team_name):
|
||||||
return all_weathers()[self.weather_forecast[team_name][self.day - 1]]
|
if self.weather_override is None or self.weather_event_duration <= 0: #if no override set or if past event expired
|
||||||
|
return all_weathers()[self.weather_forecast[team_name][self.day - 1]]
|
||||||
|
else:
|
||||||
|
if self.weather_event_duration == 1 and random.random() < 0.1: #once per weather event, roll for forecast regen
|
||||||
|
self.new_weathers_midseason(team_name)
|
||||||
|
return self.weather_override
|
||||||
|
|
||||||
|
def weather_event_check(self): #2 for new event, 1 for continued event, 0 for no event
|
||||||
|
if self.day - self.last_weather_event_day > 12: #arbitrary cooldown between weather events
|
||||||
|
if random.random() < 0.1: #10% chance for weather event?
|
||||||
|
self.weather_override = all_weathers()["Supernova"]
|
||||||
|
self.last_weather_event_day = self.day
|
||||||
|
self.weather_event_duration = random.randint(self.weather_override.duration_range[0], self.weather_override.duration_range[1])
|
||||||
|
return 2
|
||||||
|
else:
|
||||||
|
self.weather_event_duration -= 1
|
||||||
|
return 1 if self.weather_event_duration > 0 else 0
|
||||||
|
|
||||||
|
|
||||||
class tournament(object):
|
class tournament(object):
|
||||||
|
@ -621,4 +640,8 @@ def load_league_file(league_name):
|
||||||
for this_team in this_league.teams_in_league(): #give them all fresh forecasts starting at current day
|
for this_team in this_league.teams_in_league(): #give them all fresh forecasts starting at current day
|
||||||
this_league.new_weathers_midseason(this_team.name)
|
this_league.new_weathers_midseason(this_team.name)
|
||||||
save_league(this_league)
|
save_league(this_league)
|
||||||
|
try:
|
||||||
|
this_league.last_weather_event_day = state_dic["last_weather_event"]
|
||||||
|
except:
|
||||||
|
this_league.last_weather_event_day = 0
|
||||||
return this_league
|
return this_league
|
|
@ -2146,6 +2146,8 @@ async def start_league_day(channel, league, partial = False):
|
||||||
else:
|
else:
|
||||||
game_length = league.game_length
|
game_length = league.game_length
|
||||||
|
|
||||||
|
weather_check_result = league.weather_event_check()
|
||||||
|
|
||||||
for pair in games_to_start:
|
for pair in games_to_start:
|
||||||
if pair[0] is not None and pair[1] is not None:
|
if pair[0] is not None and pair[1] is not None:
|
||||||
away = get_team_fuzzy_search(pair[0])
|
away = get_team_fuzzy_search(pair[0])
|
||||||
|
@ -2171,6 +2173,11 @@ async def start_league_day(channel, league, partial = False):
|
||||||
|
|
||||||
ext = "?league=" + urllib.parse.quote_plus(league.name)
|
ext = "?league=" + urllib.parse.quote_plus(league.name)
|
||||||
|
|
||||||
|
if weather_check_result == 2:
|
||||||
|
await channel.send(f"The entire league is struck by a {league.weather_override.emoji} {league.weather_override.name}! The games must go on.")
|
||||||
|
elif weather_check_result == 1:
|
||||||
|
await channel.send(f"The {league.weather_override.emoji} {league.weather_override.name} continues to afflict the league.")
|
||||||
|
|
||||||
if league.last_series_check(): #if finals
|
if league.last_series_check(): #if finals
|
||||||
await channel.send(f"The final series of the {league.name} regular season is starting now, at {config()['simmadome_url']+ext}")
|
await channel.send(f"The final series of the {league.name} regular season is starting now, at {config()['simmadome_url']+ext}")
|
||||||
last = True
|
last = True
|
||||||
|
@ -2270,6 +2277,11 @@ async def league_day_watcher(channel, league, games_list, filter_url, last = Fal
|
||||||
leagues.save_league(league)
|
leagues.save_league(league)
|
||||||
active_standings[league] = await channel.send(embed=league.standings_embed())
|
active_standings[league] = await channel.send(embed=league.standings_embed())
|
||||||
await channel.send(f"The day {league.day} games for the {league.name} will start in {math.ceil(wait_seconds/60)} minutes.")
|
await channel.send(f"The day {league.day} games for the {league.name} will start in {math.ceil(wait_seconds/60)} minutes.")
|
||||||
|
weather_check_result = league.weather_event_check()
|
||||||
|
if weather_check_result == 2:
|
||||||
|
await channel.send(f"The entire league is struck by a {league.weather_override.emoji} {league.weather_override.name}! The games must go on.")
|
||||||
|
elif weather_check_result == 1:
|
||||||
|
await channel.send(f"The {league.weather_override.emoji} {league.weather_override.name} continues to afflict the league.")
|
||||||
await asyncio.sleep(wait_seconds)
|
await asyncio.sleep(wait_seconds)
|
||||||
await channel.send(f"A {league.name} series is continuing now at {filter_url}")
|
await channel.send(f"A {league.name} series is continuing now at {filter_url}")
|
||||||
games_list = await continue_league_series(league, queued_games, games_list, series_results, missed)
|
games_list = await continue_league_series(league, queued_games, games_list, series_results, missed)
|
||||||
|
|
Loading…
Reference in a new issue