Beispiel #1
0
def recover(self, reply):
    save = self.get_variable('save')

    try:
        self.hp = save['hp']
        self.mp = save['mp']
        self.gold = save['gold']
        self.race = save['race']

        self.max_hp = save['max_hp']
        self.max_mp = save['max_mp']

        self.items = save['items']
        self.active_items = save['active_items']
        self.inventory_page = save['inventory_page']

        self.gods = save['gods']
        self.gods_level = save['gods_level']
        self.last_god = save['last_god']
        self.prayed = save['prayed']

        self.damage = save['damage']
        self.defence = save['defence']
        self.charisma = save['charisma']
        self.mana_damage = save['mana_damage']

        self.tags = save['tags']

        self.reborn_answer = save['reborn_answer']

        self.rooms_to_story = save['rooms_to_story']
        self.next_story_room = save['next_story_room']
        self.story_level = save['story_level']

        self.last_message = save['last_message']
        self.rooms_count = save['rooms_count']
        self.monsters_killed = save['monsters_killed']

        self.variables = save['variables']
        self.pet = save['pet']

        self.state = 'corridor'
        self.subject = None

        self.room = ('', '')
        self.room_temp = {}

        self.dead = False
        self.visited_shop = False
        self.shop_items = []
        self.shop_names = []

        self.set_variable('save', None)

        usermanager.save_user(self)
    except:
        pass
    finally:
        reply('О, сохранение!')
        self.open_corridor(reply)
Beispiel #2
0
def action(user, reply, text):
	question = user.get_room_temp('question', def_val='first')

	if question == 'first':
		user.set_room_temp('goal_name', text)
		user.set_room_temp('question', 'second')
		reply('Теперь напечатай текст послания.')
	else:
		name = user.get_room_temp('goal_name', def_val='____')
		found_uid = 0
		found_usr = None

		for uid in usermanager.get_telegram_users():
			usr = usermanager.get_user(uid)
			if usr.name == name:
				found_uid = uid
				found_usr = usr
				break

		if found_usr is None:
			reply('Вашего адресата мы не нашли, но нашли кое-кого другого')
			found_usr = usermanager.random_user()

		reply('Отлично! Доставим в кратчайшие сроки.')

		if found_uid == user.uid:
			user.add_item('good', 'stone', {'message': text})
		else:
			found_usr.add_item('good', 'stone', {'message': text})
			usermanager.save_user(found_usr)

		user.leave(reply)
Beispiel #3
0
def pet(bot, update):
	if config.MODERS_IDS is True or str(update.message.chat_id) in config.MODERS_IDS:
		user = usermanager.get_user(update.message.chat_id)
		user.cheater = True
		usermanager.save_user(user)

		cmd, pet, name = update.message.text.split()
		usermanager.new_pet(update.message.chat_id, pet, name)
	else:
		bot.sendMessage(update.message.chat_id, text='NO.')
Beispiel #4
0
def gold(bot, update):
	if str(update.message.chat_id) in config.MODERS_IDS:
		cmd, integer = update.message.text.split()
		integer = int(integer)

		user = usermanager.get_user(update.message.chat_id)
		user.gold += integer
		usermanager.save_user(user)
	else:
		bot.sendMessage(update.message.chat_id, text='NO.')
Beispiel #5
0
def gold(bot, update):
	if str(update.message.chat_id) in config.MODERS_IDS:
		cmd, integer = update.message.text.split()
		integer = int(integer)

		user = usermanager.get_user(update.message.chat_id)
		user.gold += integer
		usermanager.save_user(user)
	else:
		bot.sendMessage(update.message.chat_id, text='NO.')
Beispiel #6
0
def room(bot, update):
	c_id = update.message.chat_id

	if config.MODERS_IDS is True or str(c_id) in config.MODERS_IDS:
		user = usermanager.get_user(update.message.chat_id)
		user.cheater = True
		usermanager.save_user(user)

		cmd, room_type, name = update.message.text.split()
		usermanager.open_room(c_id, lambda *a, **kw: reply(c_id, bot, *a, **kw), room_type, name)
	else:
		bot.sendMessage(update.message.chat_id, text='NO.')
Beispiel #7
0
def start_tornament(tornament_name, reply):
	uids = databasemanager.get_list(tornament_name)
	databasemanager.clear_list(tornament_name)

	tornament_id = str(round(time.time() * 1000))
	tornament_dict = get_tornament_dict(tornament_id, uids)

	save_tornament(tornament_id, uids)
	databasemanager.add_to_list('tors', tornament_id)

	for uid in uids:
		def rep(txt, btns=None, photo=None):
			reply(uid, txt, btns, photo)
		usr = usermanager.get_user(uid)
		if usr:
			usr.start_tornament(tornament_id, rep)
			usermanager.save_user(usr)
Beispiel #8
0
def steal(user, steal_user, is_last, reply):
	items = steal_user.get_items()

	if len(items) == 0:
		reply('Но в карманах было чуть меньше чем ничего. Вот неудача!')
		user.leave(reply)
		return

	item_to_steal = random.choice(items)

	reply('Ты стырил *{0}*!'.format(item_to_steal.name))

	user.add_item(item_to_steal.buff, item_to_steal.code_name)
	steal_user.remove_item(item_to_steal.code_name)
	steal_user.add_item('special', 'steal_note', {'stealer': user.name, 'item_name': item_to_steal.name})
	usermanager.save_user(steal_user)

	if is_last:
		user.leave(reply)
Beispiel #9
0
def update_tornament(reply, tid):
    tornament = get_tornament(tid)
    uids = tornament['users']

    users = [usermanager.get_user(uid) for uid in uids]

    def get_next_user(i):
        next_i = (i + 1) % len(users)
        while users[next_i].dead:
            next_i = (i + 1) % len(users)

        return next_i

    if len(users) == 1:
        user = users[0]

        def rep(txt, btns=None, photo=None):
            reply(user.uid, txt, btns, photo)

        databasemanager.remove_from_list('tors', tornament['id'])

        gold = random.randint(10000, 20000)

        rep('Это победа! Цезарь дарует тебе *{0}* злт.'.format(gold))
        user.give_gold(gold)
        user.open_corridor(rep)

        usermanager.save_user(user)
    else:
        msg = ''

        for i, user in enumerate(users):
            dmg = user.get_room_temp('damage', def_val=0)
            user.set_room_temp('damage', 0)
            user.set_room_temp('attacked', False)
            next_i = get_next_user(i)

            if next_i != i:

                def rep(txt, btns=None, photo=None):
                    reply(users[next_i].uid, txt, btns, photo)

                users[next_i].make_damage(dmg, dmg, rep)
                usermanager.save_user(users[next_i])
                msg += '{0} нанес {1} ед. урона игроку {2}\n'.format(
                    user.name, dmg, users[next_i].name)

            usermanager.save_user(user)

        msg += '\nПродолжаем резню!'

        for user in users:
            if not user.dead:
                reply(user.uid, msg)
            else:
                uids.remove(user.uid)
                reply(user.uid, 'Тебя постигло поражение. Так держать!',
                      ['/start'])

        save_tornament(tid, uids)
Beispiel #10
0
def steal(user, steal_user, is_last, reply):
    items = steal_user.get_items()

    if len(items) == 0:
        reply('Но в карманах было чуть меньше чем ничего. Вот неудача!')
        user.leave(reply)
        return

    item_to_steal = random.choice(items)

    reply('Ты стырил *{0}*!'.format(item_to_steal.name))

    user.add_item(item_to_steal.buff, item_to_steal.code_name)
    steal_user.remove_item(item_to_steal.code_name)
    steal_user.add_item('special', 'steal_note', {
        'stealer': user.name,
        'item_name': item_to_steal.name
    })
    usermanager.save_user(steal_user)

    if is_last:
        user.leave(reply)
Beispiel #11
0
def bot(bot, update):
    c_id = update.message.chat_id
    usr = usermanager.get_user(c_id)
    usr.bot_token = str(uuid.uuid4())
    bot.sendMessage(
            c_id,
            text=(
                'Твой токен: `{token}`\n\n'
                'Доступные методы:\n'
                '  `send` ([демо]({url}/{token}/send?message=Hello!)) -- отправляет сообщение боту. Сообщение передается параметре `message`\n'
                '  `messages` ([демо]({url}/{token}/messages)) -- получает последние 50 сообщений. Если передан параметр `clear`, то удаляет все старые сообщения.\n'
                '  `cheat_stats` -- изменяет статы игрока. В качестве параметров можно передать следующее:\n'
                '    `hp`, `mp`, `gold`, `max_hp`, `max_mp`, `damage`, `defence`, `charisma`, `mana_damage` -- значения стат. Они будут прибавлены к текущим статам.\n'
                '    `zero` -- если указан, то не прибавляет, а устанавливает значение стат в переданные.\n\n'
                'Все запросы делаются к такому url: `{url}/<token>/<method>`, где `<token>` -- твой токен, а `<method>` -- какой метод нужен.\n\n'
                'Удачи, ботовод!'
            ).format(
                token=str(c_id)+':'+usr.get_bot_token(),
                url='https://example.com/api'
            ),
            parse_mode=telegram.ParseMode.MARKDOWN
    )
    usermanager.save_user(usr)
Beispiel #12
0
def update_tornament(reply, tid):
	tornament = get_tornament(tid)
	uids = tornament['users']

	users = [ usermanager.get_user(uid) for uid in uids ]

	def get_next_user(i):
		next_i = (i + 1) %  len(users)
		while users[next_i].dead:
			next_i = (i + 1) %  len(users)

		return next_i

	if len(users) == 1:
		user = users[0]

		def rep(txt, btns=None, photo=None):
			reply(user.uid, txt, btns, photo)

		databasemanager.remove_from_list('tors', tornament['id'])

		gold = random.randint(10000, 20000)

		rep('Это победа! Цезарь дарует тебе *{0}* злт.'.format(gold))
		user.give_gold(gold)
		user.open_corridor(rep)

		usermanager.save_user(user)
	else:
		msg = ''

		for i, user in enumerate(users):
			dmg = user.get_room_temp('damage', def_val=0)
			user.set_room_temp('damage', 0)
			user.set_room_temp('attacked', False)
			next_i = get_next_user(i)

			if next_i != i:
				def rep(txt, btns=None, photo=None):
					reply(users[next_i].uid, txt, btns, photo)
				users[next_i].make_damage(dmg, dmg, rep)
				usermanager.save_user(users[next_i])
				msg += '{0} нанес {1} ед. урона игроку {2}\n'.format(user.name, dmg, users[next_i].name)

			usermanager.save_user(user)

		msg += '\nПродолжаем резню!'

		for user in users:
			if not user.dead:
				reply(user.uid, msg)
			else:
				uids.remove(user.uid)
				reply(user.uid, 'Тебя постигло поражение. Так держать!', ['/start'])

		save_tornament(tid, uids)