def gen_scavenge_captcha(n=0, user_data=None): captcha_length = math.ceil(n / 3) return ewutils.generate_captcha(length=captcha_length, user_data=user_data)
def create_mining_event(cmd): randomn = random.random() time_now = int(time.time()) user_data = EwUser(member=cmd.message.author) mine_district_data = EwDistrict(district=user_data.poi, id_server=user_data.id_server) life_states = [ewcfg.life_state_enlisted, ewcfg.life_state_juvenile] num_miners = len( mine_district_data.get_players_in_district(life_states=life_states, ignore_offline=True)) common_event_chance = 0.7 # 7/10 uncommon_event_chance = 0.3 # 3/10 rare_event_chance = 0.1 / num_miners # 1/10 for 1 miner, 1/20 for 2 miners, etc. common_event_triggered = False uncommon_event_triggered = False rare_event_triggered = False # This might seem a bit confusing, so let's run through an example. # The random number is 0.91, and the number of valid miners is 2. # 0.91 < (0.6 + 0.05), condition not met # 0.91 < (0.9 + 0.05), condition met, uncommon event used if randomn < common_event_chance: # + (0.1 - rare_event_chance)): common_event_triggered = True else: # randomn < (common_event_chance + uncommon_event_chance + (0.1 - rare_event_chance)): uncommon_event_triggered = True # else: # rare_event_triggered = True # common event if common_event_triggered: randomn = random.random() # 4x glob of slime if randomn < 0.5: event_props = {} event_props['id_user'] = cmd.message.author.id event_props['poi'] = user_data.poi event_props['channel'] = cmd.message.channel.name return bknd_worldevent.create_world_event( id_server=cmd.guild.id, event_type=ewcfg.event_type_slimeglob, time_activate=time_now, event_props=event_props) # 30 seconds slimefrenzy else: event_props = {} event_props['id_user'] = cmd.message.author.id event_props['poi'] = user_data.poi event_props['channel'] = cmd.message.channel.name return bknd_worldevent.create_world_event( id_server=cmd.guild.id, event_type=ewcfg.event_type_slimefrenzy, time_activate=time_now, time_expir=time_now + 30, event_props=event_props) # uncommon event elif uncommon_event_triggered: randomn = random.random() # gap into the void if randomn < 0.05: event_props = {} event_props['id_user'] = cmd.message.author.id event_props['poi'] = user_data.poi event_props['channel'] = cmd.message.channel.name return bknd_worldevent.create_world_event( id_server=cmd.guild.id, event_type=ewcfg.event_type_voidhole, time_activate=time_now, time_expir=time_now + 10, event_props=event_props) # mine shaft collapse elif randomn < 0.5: event_props = {} event_props['id_user'] = cmd.message.author.id event_props['poi'] = user_data.poi event_props['captcha'] = ewutils.generate_captcha( length=8, user_data=user_data) event_props['channel'] = cmd.message.channel.name return bknd_worldevent.create_world_event( id_server=cmd.guild.id, event_type=ewcfg.event_type_minecollapse, time_activate=time_now, event_props=event_props) # 10 second poudrin frenzy else: if bknd_item.check_inv_capacity(user_data=user_data, item_type=ewcfg.it_item): event_props = {} event_props['id_user'] = cmd.message.author.id event_props['poi'] = user_data.poi event_props['channel'] = cmd.message.channel.name return bknd_worldevent.create_world_event( id_server=cmd.guild.id, event_type=ewcfg.event_type_poudrinfrenzy, time_activate=time_now, time_expir=time_now + 5, event_props=event_props) """