Skip to content
This repository has been archived by the owner on Sep 8, 2024. It is now read-only.

Улучшение навыков / Skill Improvement #2

Closed
ButCheR-PRO opened this issue Jul 23, 2024 · 14 comments
Closed

Улучшение навыков / Skill Improvement #2

ButCheR-PRO opened this issue Jul 23, 2024 · 14 comments
Labels
enhancement New feature or request

Comments

@ButCheR-PRO
Copy link

Как насчет того чтобы добавить логику покупки выгодных карточек, как это сделано в HamsterKombatBot?
Добавлять в очередь и сравнивать какую в первую очередь покупать по соотношении доход / цена.

@Alexell
Copy link
Owner

Alexell commented Jul 23, 2024

Над этим я буду работать после того, как реализую переговоры. Хотя я не планирую так заморачиваться с логикой, я хочу просто сделать прокачку всех карточек до уровня, указанного в .env

@zv09
Copy link

zv09 commented Jul 24, 2024

Чтобы не заморачиваться, можно посмотреть как в Хамстере решали это.
Лямбдой сортировка соотношением PpH к Стоимости апгрейда. В ту или иную сторону:

def sorted_by_profit(prepared):
    return sorted(prepared, key=lambda x: x["profitPerHourDelta"], reverse=True)


def sorted_by_profitness(prepared):
    return sorted(prepared, key=lambda x: x['profitPerHourDelta'] / x['price'], reverse=True)


def sorted_by_price(prepared):
    return sorted(prepared, key=lambda x: x["price"], reverse=False)


def sorted_by_payback(prepared):
    return sorted(prepared, key=lambda x: x['price'] / x['profitPerHourDelta'], reverse=False)
        - price -> покупать самую дешевую
        - payback -> покупать ту, что быстрей всего окупится
        - profit -> покупать самую прибыльну
        - profitness -> покупать самую профитную (сколько добыча на каждый потраченный поинт)

@Alexell Alexell added the enhancement New feature or request label Jul 24, 2024
@Deftus
Copy link

Deftus commented Jul 24, 2024

Бро сделай авто улучшение карточек ,это было бы мега круто, спасибо за твой труд!

@ButCheR-PRO
Copy link
Author

Чтобы не заморачиваться, можно посмотреть как в Хамстере решали это.

В Хомяке придумали такую логику:

  1. [Предложения] Логика автопокупки карт. Круто улучшения купил shamhi/HamsterKombatBot#142

@BigNeam
Copy link

BigNeam commented Jul 25, 2024

Спасибо за бота . Буду ждать обнову с авто прокачкой карточек

@Ashaxer
Copy link
Contributor

Ashaxer commented Jul 25, 2024

Google Translated
Я пытался написать код, но облажался. но я написал логику покупки наиболее выгодных карт.
логика расчета прибыли и цен взята из самих игровых кодов.
Оцените это
Как правило, вы можете найти прибыльную покупку, передавkill_entity и target_level в get_price() или get_profit().

I tried to write the code but I fd up. but I wrote a logic to buy most profitable cards.
the logic for calculating the profits and prices are from the game codes itself.
Checkout this
Generally you can find the profit buy passing skill_entity and target_level to get_price() or get_profit()

@BigNeam
Copy link

BigNeam commented Jul 26, 2024

Google Translate Я писал код, но облажался. Но я написал логику покупки наиболее выгодных карт. логика расчета прибыли и цен взята из собственных кодов игровых автоматов. Оцените это. Как правило, вы можете найти прибыльную покупку, передавkill_entity и target_level в get_price() или get_profit().

Я пытался написать код, но у меня ничего не вышло. но я написал логику для покупки самых прибыльных карт. логика для расчета прибыли и цен взята из самих кодов игры. Проверьте это. Обычно вы можете найти прибыльную покупку, передавая skill_entity и target_level в get_price() или get_profit()

Посмотри это , возможно что-то получится
async def run(self, proxy: str | None) -> None:
proxy_conn = ProxyConnector().from_url(proxy) if proxy else None

async with aiohttp.ClientSession(headers=headers, connector=proxy_conn) as http_client:
    self.http_client = http_client
    if proxy:
        await self.check_proxy(proxy=proxy)

    self.authorized = False
    while True:
        if self.errors >= config.ERRORS_BEFORE_STOP:
            log.error(f"{self.session_name} | Bot stopped (too many errors)")
            break
        try:
            if not self.authorized:
                login_data = await self.get_tg_web_data(proxy=proxy)
                if await self.login(json_data=login_data):
                    log.success(f"{self.session_name} | Login successful")
                    self.authorized = True
                    self.http_client.headers['Api-Key'] = self.api_key
                    self.dbs = await self.get_dbs()
                    full_profile = await self.get_profile(full=True)
                    if self.user_id is None: self.user_id = int(full_profile['data']['profile']['id'])
                    self.balance = int(full_profile['data']['hero']['money'])
                    offline_bonus = int(full_profile['data']['hero']['offlineBonus'])
                    if offline_bonus > 0:
                        if await self.get_offline_bonus():
                            log.success(f"{self.session_name} | Offline bonus claimed: +{offline_bonus}")
                    else:
                        log.info(f"{self.session_name} | Offline bonus not available")
                else:
                    continue

            profile = await self.get_profile(full=False)
            self.balance = int(profile['data']['hero']['money'])
            log.info(f"{self.session_name} | Level: {profile['data']['hero']['level']} | "
                            f"Balance: {self.balance} | "
                            f"Money per hour: {profile['data']['hero']['moneyPerHour']}")

            daily_rewards = full_profile['data']['dailyRewards']
            daily_index = None
            for day, status in daily_rewards.items():
                if status == 'canTake':
                    daily_index = day
                    break
            if daily_index is not None:
                log.info(f"{self.session_name} | Daily reward available")
                daily_claimed = await self.daily_reward(index=daily_index)
                if daily_claimed:
                    log.success(f"{self.session_name} | Daily reward claimed")
                    self.errors = 0
            else:
                log.info(f"{self.session_name} | Daily reward not available")

            unrewarded_quests = [quest['key'] for quest in full_profile['data']['quests'] if not quest['isRewarded']]
            if unrewarded_quests:
                log.info(f"{self.session_name} | Quest rewards available")
                for quest in unrewarded_quests:
                    if await self.quest_reward(quest=quest):
                        log.success(f"{self.session_name} | Reward for quest {quest} claimed")

            await self.daily_quests()

            unrewarded_friends = [int(friend['id']) for friend in full_profile['data']['friends'] if friend['bonusToTake'] > 0]
            if unrewarded_friends:
                log.info(f"{self.session_name} | Reward for friends available")
                for friend in unrewarded_friends:
                    if await self.friend_reward(friend=friend):
                        log.success(f"{self.session_name} | Reward for friend {friend} claimed")

            if config.TAPS_ENABLED:
                per_tap = profile['data']['hero']['earns']['task']['moneyPerTap']
                max_energy = profile['data']['hero']['earns']['task']['limit']
                energy = profile['data']['hero']['earns']['task']['energy']
                if energy == max_energy:
                    await self.perform_taps(per_tap=per_tap, energy=energy)

            if config.PVP_ENABLED:
                if self.dbs:
                    league_data = None
                    for league in self.dbs['dbNegotiationsLeague']:
                        if league['key'] == config.PVP_LEAGUE:
                            league_data = league
                            break;

                    if league_data is not None:
                        if int(profile['data']['hero']['level']) >= int(league_data['requiredLevel']):
                            self.strategies = [strategy['key'] for strategy in self.dbs['dbNegotiationsStrategy']]
                            if config.PVP_STRATEGY == 'random' or config.PVP_STRATEGY in self.strategies:
                                await self.perform_pvp(league=league_data, strategy=config.PVP_STRATEGY, count=config.PVP_COUNT)
                            else:
                                config.PVP_ENABLED = False
                                log.warning(f"{self.session_name} | PVP_STRATEGY param is invalid. PvP negotiations disabled.")
                        else:
                            config.PVP_ENABLED = False
                            log.warning(f"{self.session_name} | Your level is too low for the {config.PVP_LEAGUE} league. PvP negotiations disabled.")
                    else:
                        config.PVP_ENABLED = False
                        log.warning(f"{self.session_name} | PVP_LEAGUE param is invalid. PvP negotiations disabled.")
                else:
                    log.warning(f"{self.session_name} | Database is missing. PvP negotiations will be skipped this time.")

            # Автопрокачка карточек
            can_upgrade, best_skill = await self.calculate_best_purchase(full_profile, profile, self.dbs, full_profile, time.time(), time.time())
            if can_upgrade:
                if await self.upgrade_card(card_id=best_skill['key']):
                    log.success(f"{self.session_name} | Card {best_skill['key']} upgraded to level {best_skill['newlevel']}")

            profile = await self.get_profile(full=False)
            self.balance = int(profile['data']['hero']['money'])
            log.info(f"{self.session_name} | Level: {profile['data']['hero']['level']} | "
                            f"Balance: {self.balance} | "
                            f"Money per hour: {profile['data']['hero']['moneyPerHour']}")

            log.info(f"{self.session_name} | Sleep 1 hour")
            await asyncio.sleep(3600)
            self.authorized = False

        except RuntimeError as error:
            raise error
        except Exception as error:
            log.error(f"{self.session_name} | Unknown error: {error}")
            await asyncio.sleep(delay=3)

@Alexell
Copy link
Owner

Alexell commented Jul 26, 2024

Пожалуйста, имейте терпение, я займусь этим вопросом. Но сейчас тестирую другое обновление, как только я закончу с ним, смогу переключить свое внимание на вопрос со скилами.
__
Please be patient, I will look into this issue. I am currently testing another update, once I am done with that I will be able to shift my attention to the skills issue.

@Ashaxer It is not necessary to translate, you can write in English.

This was referenced Jul 26, 2024
@ButCheR-PRO
Copy link
Author

ButCheR-PRO commented Aug 1, 2024

Начиная с 20 уровня, в меню прокачки карточек, появился новый раздел ИИ, помимо Персональные, Офис, Команда.
musk1

@BigNeam
Copy link

BigNeam commented Aug 1, 2024

Начиная с 20 уровня, в меню прокачки карточек появился новый раздел II, кроме Персональные, Офисы, Команды. мускус1

Разве функцию авто прокачка карточек добавили ?

@BigNeam
Copy link

BigNeam commented Aug 3, 2024

Так и не получается сделать автопрокачку карточек ?

@Alexell
Copy link
Owner

Alexell commented Aug 3, 2024

Я еще не начинал, времени свободного мало. Если завтра силы будут, начну.

Repository owner deleted a comment from BigNeam Aug 4, 2024
@Alexell
Copy link
Owner

Alexell commented Aug 4, 2024

Прошу прощения, что реализация улучшения навыков затянулась. Мне по работе тоже надо писать код и я устаю, да и времени свободного не так много. Кроме того, некоторые из недавних обновлений бота нужно было сделать именно до прокачки скиллов, чтобы бот был готов к тому, что уровень героя может измениться прямо во время работы. Так что все сделано в нужном порядке.
Итак, улучшение навыков готово. Я использовал немного измененный код от @Ashaxer, так что спасибо ему за то что избавил меня от математики. Пользуйтесь!
__
I apologize for the delay in implementing the skill upgrade feature. I have to write code for work as well, and it can be tiring, plus I don't have much free time. Additionally, some of the recent updates to the bot had to be done before implementing the skill upgrades to ensure the bot could handle changes in the hero's level during operation. So everything was done in the correct order.

Now, the skill upgrade feature is ready. I used a slightly modified version of @Ashaxer code, so thanks to him for sparing me from the math. Enjoy!

@BigNeam
Copy link

BigNeam commented Aug 4, 2024

Прошущения, что реализация улучшенных функций затянулась. Мне на работе тоже надо писать, и я устаю, да и свободного времени не так уж и много. Кроме того, в некоторых из недавних обновленных ботов нужно было сделать именно прокачки скиллов, чтобы бот был готов к тому, что уровень героя может меняться прямо во время работы. Так что все сделано в нужном порядке. Итак, улучшение навыков готово . Я использовал немного измененный код от@Ashaxer, так что спасибо ему за то что избавил меня от математики. Пользуйтесь! __ Я извиняюсь за задержку с реализацией функции улучшения навыков. Мне также приходится писать код для работы, и это может быть утомительно, плюс у меня не так много свободного времени. Кроме того, некоторые из последних обновлений бота должны были быть сделаны до реализации улучшений навыков, чтобы гарантировать, что бот сможет обрабатывать изменения уровня героя во время работы. Поэтому все было сделано в правильном порядке.

Теперь функция улучшения навыков готова . Я использовал слегка измененную версию@Ashaxercode, так что спасибо ему за то, что избавил меня от математики. Наслаждайтесь!

Спасибо большое

@Alexell Alexell changed the title Автопокупка карточек Улучшение навыков / Skill Improvement Aug 5, 2024
@Alexell Alexell closed this as completed Aug 8, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

6 participants