Ejemplo n.º 1
0
 def handle(self, call):
     call_data = call.data.split('_')
     try:
         fight = dynamic_dicts.fight_dict[call_data[2]]
         unit = fight.units_dict[int(call_data[1])]
     except KeyError:
         return self.handler.game_error(call)
     if unit.controller.message_id == call.message.message_id and unit.active:
         action = action_dict[call_data[3]](unit,
                                            fight,
                                            info=call_data,
                                            call=call)
         availability = action.available()
         if not availability:
             error_text = action.error_text()
             self.handler.error(error_text, call)
             return False
         unit.active = False
         action.act()
     else:
         bot_methods.err(
             'Ошибка обработки запроса к ActionHandler. Controller_id={}, message_id={}, unit_active={}'
             .format(unit.controller.chat_id, call.message.message_id,
                     unit.active))
         return self.handler.actor_error(call)
Ejemplo n.º 2
0
    def process_fight_results(self, results):
        bot_methods.err('Processing fight results...')
        if not any(unit_dict['name'] ==
                   self.dungeon.party.leader.unit_dict['name']
                   for unit_dict in results['winners']):

            def get_exit_keyboard(mmbr):
                keyboard = form_keyboard(
                    DungeonButton('Покинуть карту',
                                  mmbr,
                                  'menu',
                                  'defeat',
                                  named=True))
                return keyboard

            self.dungeon.party.send_message(
                'Вы проиграли!', reply_markup_func=get_exit_keyboard)
        else:
            for member in self.dungeon.party.members:
                member.occupied = False
                member.unit_dict = [
                    unit_dict for unit_dict in results['winners']
                    if unit_dict['name'] == member.unit_dict['name']
                ][0]
                member.inventory.update()
            loot = results['loot'] + self.loot
            experience = sum([
                units.units_dict[mob].experience for mob in self.mobs.mob_units
                if self.mobs is not None
            ])
            self.dungeon.party.experience += experience
            self.dungeon.party.distribute_loot(loot)
            self.victory()
Ejemplo n.º 3
0
 def visualize(self):
     map_string = ''
     for x in range(0, self.width):
         for y in range(0, self.height):
             map_string += self.location_matrix[(x, y)].emote + ' '
         map_string += '\n'
     bot_methods.err(map_string)
Ejemplo n.º 4
0
 def occupied(self):
     if any([member.occupied for member in self.members]):
         for member in self.members:
             bot_methods.err('Занятость {}: {}'.format(
                 member.name, member.occupied))
         return True
     return False
Ejemplo n.º 5
0
def action(call):
    if call.data == 'test':
        bot_methods.answer_callback_query(call, '89296052405', alert=True)
    try:
        call_handler.handle(call)
    except Exception as e:
        import traceback
        bot_methods.err(traceback.format_exc())
Ejemplo n.º 6
0
 def str(self, lang):
     string_data = get_string(self, lang)
     try:
         tuple_string = text_generation.generate_unique_text(
             string_data[self.string])
         return self.format(tuple_string, lang)
     except TypeError:
         bot_methods.err(str((self.string, self.table, self.row)))
Ejemplo n.º 7
0
 def add_user(self, user_id):
     session.add(self.pyosession.user_class(user_id, self.chat_id))
     try:
         session.commit()
     except Exception as e:
         import traceback
         bot_methods.err(traceback.format_exc())
         session.rollback()
         pass
Ejemplo n.º 8
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     if action == 'attack':
         self.state = 'attacked'
         self.reset_message('text_2',
                            image=self.mob_image,
                            keyboard_func=False)
         self.fight()
Ejemplo n.º 9
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     if action == 'map':
         bot_methods.bot.edit_message_reply_markup(
             chat_id=call.from_user.id, message_id=call.message.message_id)
         for member in self.dungeon.party.members:
             member.occupied = False
     self.dungeon.update_map(new=True)
Ejemplo n.º 10
0
 def send_string(self):
     self.string_tuple.construct()
     if self.string_tuple.active:
         for listener in self.listeners:
             bot_methods.err(listener.unit.name)
             listener.send_message(self.string_tuple[listener.lang])
             time.sleep(0.5)
         if self.public and self.chat_id not in self.listeners:
             self.send_message(self.string_tuple[self.lang])
     self.string_tuple.clear()
Ejemplo n.º 11
0
 def run_fight(self, *args, first_turn=None):
     # В качестве аргумента должны быть переданы словари команд в виде
     # [team={chat_id: unit_dict} or team={(ai_class, n):unit_dict}].
     try:
         fight = fight_main.Fight(chat_id=self.chat_id)
         fight.form_teams(args)
         results = fight.run(first_turn=first_turn)
         return results
     except Exception as e:
         import traceback
         bot_methods.err(traceback.format_exc())
Ejemplo n.º 12
0
 def event_fight(self, first_turn=None):
     try:
         for member in self.dungeon.party.members:
             member.occupied = True
         results = self.dungeon.run_fight(self.dungeon.party.join_fight(),
                                          self.mob_team,
                                          first_turn=first_turn)
         self.process_fight_results(results)
     except Exception:
         import traceback
         bot_methods.err(traceback.format_exc())
Ejemplo n.º 13
0
def run_fight(*args, chat_id=None):
    # В качестве аргумента должны быть переданы словари команд в виде
    # [team={chat_id:(name, unit_dict)} or team={ai_class:(ai_class.name, unit_dict)}].
    try:
        fight = Fight(chat_id=chat_id)
        fight.form_teams(*args)
        results = fight.run()
        return results
    except Exception as e:
        import traceback
        bot_methods.err(traceback.format_exc())
Ejemplo n.º 14
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     if action == 'map':
         bot_methods.bot.edit_message_reply_markup(
             chat_id=call.from_user.id, message_id=call.message.message_id)
         for member in self.dungeon.party.members:
             member.occupied = False
         self.dungeon.update_map(new=True)
     elif action == 'sneak':
         if engine.roll_chance(50):
             self.state = 'sneaked'
             for member in self.dungeon.party.members:
                 member.delete_message()
             self.dungeon.party.send_message(
                 self.get_lang_tuple('text_1'),
                 image=self.image,
                 reply_markup=self.get_action_keyboard())
         else:
             self.state = 'attacked'
             for member in self.dungeon.party.members:
                 member.delete_message()
             image = create_dungeon_image(
                 './files/images/backgrounds/dark_forest.jpg',
                 self.mobs.get_image_tuples())
             self.fight(first_turn='mobs')
     elif action == 'leave':
         for member in self.dungeon.party.members:
             member.delete_message()
             member.occupied = False
         self.dungeon.party.send_message(self.get_lang_tuple('text_3'),
                                         image=self.image)
         self.dungeon.update_map(new=True)
     elif action == 'attack':
         self.state = 'attacked'
         for member in self.dungeon.party.members:
             member.delete_message()
         image = create_dungeon_image(
             'D:\YandexDisk\Veganwars\Veganwars\\files\images\\backgrounds\dark_forest.jpg',
             self.mobs.get_image_tuples())
         self.dungeon.party.send_message(self.get_lang_tuple('text_2'),
                                         image=image)
         self.fight()
     elif action == 'sneak_attack':
         self.state = 'attacked'
         for member in self.dungeon.party.members:
             member.delete_message()
         image = create_dungeon_image(
             'D:\YandexDisk\Veganwars\Veganwars\\files\images\\backgrounds\dark_forest.jpg',
             self.mobs.get_image_tuples())
         self.dungeon.party.send_message(self.get_lang_tuple('text_2'),
                                         image=image)
         self.fight(first_turn='party')
Ejemplo n.º 15
0
 def handle(self, call):
     call_split = call.data.split('_')
     bot_methods.err(call_split)
     call_type = call_split[0]
     if call_type == 'switch':
         try:
             dynamic_dicts.lobby_list[call.message.chat.id].change_team(
                 call.from_user.id)
         except KeyError:
             pass
     else:
         type_handler = self.type_dicts[call_type]
         type_handler.handle(call)
Ejemplo n.º 16
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     if action == 'attack':
         self.state = 'attacked'
         self.reset_message('text_2',
                            image=self.image_file,
                            keyboard_func=False)
         self.fight()
     elif action == 'map':
         self.reset_message('text_3',
                            image=self.image_file,
                            keyboard_func=False)
         for member in self.dungeon.party.members:
             member.occupied = False
         self.dungeon.update_map(new=True)
Ejemplo n.º 17
0
 def handle(self, call):
     bot_methods.err(call.data)
     call_data = call.data.split('_')
     action = call_data[2]
     try:
         party = dynamic_dicts.dungeons[call.message.chat.id].party
         member = party.member_dict[call.from_user.id]
     except KeyError:
         return False
     # Перемещение группы
     if action == 'move':
         party.move_handler(call)
     # Действия с инвентарем
     elif action == 'item':
         member.inventory.handler(call)
     elif action == 'menu':
         member.menu_handler(call)
     elif action == 'location':
         party.current_location.handler(call)
Ejemplo n.º 18
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     if action == 'map':
         bot_methods.bot.edit_message_reply_markup(
             chat_id=call.from_user.id, message_id=call.message.message_id)
         for member in self.dungeon.party.members:
             member.occupied = False
         self.dungeon.update_map(new=True)
     elif action == 'scout':
         self.state = 'scouted'
         self.dungeon.party.exhaust()
         self.reset_message('text_1',
                            image=self.mob_image,
                            short_member_ui=True)
     elif action == 'rush':
         self.state = 'rushed'
         self.reset_message('text_2',
                            image=self.mob_image,
                            keyboard_func=False)
         self.fight(first_turn='mobs')
     elif action == 'attack':
         self.state = 'attacked'
         self.reset_message('text_5',
                            image=self.mob_image,
                            keyboard_func=False)
         self.fight()
     elif action == 'back':
         self.reset_message('text_6',
                            image=self.mob_image,
                            keyboard_func=False)
         for member in self.dungeon.party.members:
             member.occupied = False
         self.dungeon.party.move(self.entrance_location,
                                 new_map=True,
                                 exhaust=False,
                                 events=False)
Ejemplo n.º 19
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     if action == 'map':
         bot_methods.bot.edit_message_reply_markup(
             chat_id=call.from_user.id, message_id=call.message.message_id)
         for member in self.dungeon.party.members:
             member.occupied = False
         self.dungeon.update_map(new=True)
     elif action == 'scout':
         self.state = 'scouted'
         self.reset_message(self.image, 'text_1')
     elif action == 'rush':
         self.state = 'rushed'
         image = create_dungeon_image(
             'D:\YandexDisk\Veganwars\Veganwars\\files\images\\backgrounds\dark_forest.jpg',
             self.mobs.get_image_tuples())
         self.reset_message(image, 'text_2', keyboard_func=None)
         self.fight()
     elif action == 'victory':
         self.state = 'scouted'
         self.reset_message(self.image, 'text_1')
Ejemplo n.º 20
0
def action(call):
    try:
        call_handler.handle(call)
    except Exception as e:
        import traceback
        bot_methods.err(traceback.format_exc())
Ejemplo n.º 21
0
 def victory(self):
     bot_methods.err(str(self.continue_func))
     self.continue_func(**self.kwargs)
Ejemplo n.º 22
0
 def start_fight(self):
     try:
         self.lobby.run()
     except Exception:
         import traceback
         bot_methods.err(traceback.format_exc())
Ejemplo n.º 23
0
 def handler(self, call):
     bot_methods.err(call.data)
     data = call.data.split('_')
     action = data[3]
     self.get_action_dict()[action](call)
Ejemplo n.º 24
0
def start(message):
    bot_methods.err(message)
    if message.chat.id < 0:
        chat = chat_main.pyossession.get_chat(message.chat.id)
        chat.ask_attack(message.from_user.id)
Ejemplo n.º 25
0
def start(message):
    bot_methods.err(message.photo[0].file_id)
Ejemplo n.º 26
0
def start(message):

    if message.from_user.id == config.admin_id:
        bot_methods.err(message.for_error)
Ejemplo n.º 27
0
def start(message):

    if message.from_user.id == config.admin_id:
        bot_methods.err(message.chat.id)
        bot.send_message(config.admin_id, message.text)