Closed ButCheR-PRO closed 2 months ago
Над этим я буду работать после того, как реализую переговоры. Хотя я не планирую так заморачиваться с логикой, я хочу просто сделать прокачку всех карточек до уровня, указанного в .env
Чтобы не заморачиваться, можно посмотреть как в Хамстере решали это. Лямбдой сортировка соотношением 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 -> покупать самую профитную (сколько добыча на каждый потраченный поинт)
Бро сделай авто улучшение карточек ,это было бы мега круто, спасибо за твой труд!
Чтобы не заморачиваться, можно посмотреть как в Хамстере решали это.
В Хомяке придумали такую логику:
Спасибо за бота . Буду ждать обнову с авто прокачкой карточек
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()
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)
Пожалуйста, имейте терпение, я займусь этим вопросом. Но сейчас тестирую другое обновление, как только я закончу с ним, смогу переключить свое внимание на вопрос со скилами. __ 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.
Начиная с 20 уровня, в меню прокачки карточек, появился новый раздел ИИ, помимо Персональные, Офис, Команда.
Начиная с 20 уровня, в меню прокачки карточек появился новый раздел II, кроме Персональные, Офисы, Команды.
Разве функцию авто прокачка карточек добавили ?
Так и не получается сделать автопрокачку карточек ?
Я еще не начинал, времени свободного мало. Если завтра силы будут, начну.
Прошу прощения, что реализация улучшения навыков затянулась. Мне по работе тоже надо писать код и я устаю, да и времени свободного не так много. Кроме того, некоторые из недавних обновлений бота нужно было сделать именно до прокачки скиллов, чтобы бот был готов к тому, что уровень героя может измениться прямо во время работы. Так что все сделано в нужном порядке. Итак, улучшение навыков готово. Я использовал немного измененный код от @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!
Прошущения, что реализация улучшенных функций затянулась. Мне на работе тоже надо писать, и я устаю, да и свободного времени не так уж и много. Кроме того, в некоторых из недавних обновленных ботов нужно было сделать именно прокачки скиллов, чтобы бот был готов к тому, что уровень героя может меняться прямо во время работы. Так что все сделано в нужном порядке. Итак, улучшение навыков готово . Я использовал немного измененный код от@Ashaxer, так что спасибо ему за то что избавил меня от математики. Пользуйтесь! __ Я извиняюсь за задержку с реализацией функции улучшения навыков. Мне также приходится писать код для работы, и это может быть утомительно, плюс у меня не так много свободного времени. Кроме того, некоторые из последних обновлений бота должны были быть сделаны до реализации улучшений навыков, чтобы гарантировать, что бот сможет обрабатывать изменения уровня героя во время работы. Поэтому все было сделано в правильном порядке.
Теперь функция улучшения навыков готова . Я использовал слегка измененную версию@Ashaxercode, так что спасибо ему за то, что избавил меня от математики. Наслаждайтесь!
Спасибо большое
Как насчет того чтобы добавить логику покупки выгодных карточек, как это сделано в HamsterKombatBot? Добавлять в очередь и сравнивать какую в первую очередь покупать по соотношении доход / цена.