From 5a8a0a39209aef0dca24f44c6b0de7868b9d6c77 Mon Sep 17 00:00:00 2001 From: Eriks K Date: Thu, 9 Jul 2020 17:42:15 +0300 Subject: [PATCH] mavericks --- erepublik/__init__.py | 1 - erepublik/citizen.py | 57 ++++++++++++++++++++++++++----------------- erepublik/utils.py | 9 +++---- set_commit_id.sh | 5 ---- 4 files changed, 38 insertions(+), 34 deletions(-) delete mode 100755 set_commit_id.sh diff --git a/erepublik/__init__.py b/erepublik/__init__.py index 24ceb22..aaa9188 100644 --- a/erepublik/__init__.py +++ b/erepublik/__init__.py @@ -5,7 +5,6 @@ __author__ = """Eriks Karls""" __email__ = 'eriks@72.lv' __version__ = '0.20.3.6' -__commit_id__ = "ffbbd25" from erepublik import classes, utils, constants from erepublik.citizen import Citizen diff --git a/erepublik/citizen.py b/erepublik/citizen.py index 2eacbe1..4172ce8 100644 --- a/erepublik/citizen.py +++ b/erepublik/citizen.py @@ -22,12 +22,13 @@ class BaseCitizen(access_points.CitizenAPI): ot_points: int = 0 food: Dict[str, int] = {"q1": 0, "q2": 0, "q3": 0, "q4": 0, "q5": 0, "q6": 0, "q7": 0, "total": 0} - eb_normal = 0 - eb_double = 0 - eb_small = 0 - division = 0 + eb_normal: int = 0 + eb_double: int = 0 + eb_small: int = 0 + division: int = 0 + maverick: bool = False - eday = 0 + eday: int = 0 config: classes.Config = None energy: classes.Energy = None @@ -40,12 +41,10 @@ class BaseCitizen(access_points.CitizenAPI): r: Response = None name: str = "Not logged in!" logged_in: bool = False - commit_id: str = "" restricted_ip: bool = False def __init__(self, email: str = "", password: str = ""): super().__init__() - self.commit_id = utils.COMMIT_ID self.config = classes.Config() self.energy = classes.Energy() self.details = classes.Details() @@ -210,11 +209,12 @@ class BaseCitizen(access_points.CitizenAPI): self.details.xp = citizen.get("currentExperiencePoints", 0) self.details.daily_task_done = citizen.get("dailyTasksDone", False) self.details.daily_task_reward = citizen.get("hasReward", False) + self.maverick = citizen.get("canSwitchDivisions", False) if citizen.get("dailyOrderDone", False) and not citizen.get("hasDailyOrderReward", False): self._post_military_group_missions() self.details.next_pp.sort() - for skill in citizen.get("mySkills", {}).values(): + for skill in citizen.get("terrainSkills", {}).values(): self.details.mayhem_skills.update({int(skill["terrain_id"]): int(skill["skill_points"])}) if citizen.get('party', []): @@ -380,9 +380,9 @@ class BaseCitizen(access_points.CitizenAPI): def report_error(self, msg: str = "", is_warning: bool = False): if is_warning: - utils.process_warning(msg, self.name, sys.exc_info(), self, self.commit_id) + utils.process_warning(msg, self.name, sys.exc_info(), self) else: - utils.process_error(msg, self.name, sys.exc_info(), self, self.commit_id, None) + utils.process_error(msg, self.name, sys.exc_info(), self, None, None) def sleep(self, seconds: int): if seconds < 0: @@ -1491,16 +1491,18 @@ class CitizenMilitary(CitizenTravel): for battle in reversed(self.sorted_battles(True, True)): for division in battle.div.values(): if not division.terrain: - if division.is_air: + if division.is_air and self.config.air: medal = self.get_battle_round_data(division)[ self.details.citizenship == division.battle.defender.id] if not medal and division.battle.start: return division else: air_divs.append((division, medal.get('1').get('raw_value'))) - else: - medal = self.get_battle_round_data(division)[ - self.details.citizenship == division.battle.defender.id] + elif self.config.ground: + if not division.div == self.division and not self.maverick: + continue + division_medals = self.get_battle_round_data(division) + medal = division_medals[self.details.citizenship == division.battle.defender.country] if not medal and division.battle.start: return division else: @@ -1531,7 +1533,7 @@ class CitizenMilitary(CitizenTravel): if self.config.air and div.is_air: battle_zone = div break - elif self.config.ground and not div.is_air and div.div == self.division: + elif self.config.ground and not div.is_air and (div.div == self.division or self.maverick): battle_zone = div break else: @@ -1572,11 +1574,11 @@ class CitizenMilitary(CitizenTravel): if not self.travel_to_battle(battle, countries_to_travel): break - self.change_division(battle, battle_zone) - self.set_default_weapon(battle, battle_zone) - self.fight(battle, battle_zone, side) - self.travel_to_residence() - break + if self.change_division(battle, battle_zone): + self.set_default_weapon(battle, battle_zone) + self.fight(battle, battle_zone, side) + self.travel_to_residence() + break def fight(self, battle: classes.Battle, division: classes.BattleDivision, side: classes.BattleSide = None, count: int = None) -> int: """Fight in a battle. @@ -1607,6 +1609,8 @@ class CitizenMilitary(CitizenTravel): if count is None: count = self.should_fight()[0] + self.write_log(f"Fighting in battle for {battle.region_name} on {side} side\n{battle}\n{str(division)}") + total_damage = 0 total_hits = 0 while ok_to_fight and error_count < 10 and count > 0: @@ -1647,6 +1651,9 @@ class CitizenMilitary(CitizenTravel): pass elif r_json.get("message") == "NOT_ENOUGH_WEAPONS": self.set_default_weapon(battle, division) + elif r_json.get("message") == "Cannot activate a zone with a non-native division": + self.write_log("Wrong division!!") + return 0, 10, 0 elif r_json.get("message") == "FIGHT_DISABLED": self._post_main_profile_update('options', params='{"optionName":"enable_web_deploy","optionValue":"off"}') @@ -1714,7 +1721,7 @@ class CitizenMilitary(CitizenTravel): self._report_action("MILITARY_BOMB", f"Deployed {deployed_count} bombs in battle {battle.id}") return deployed_count - def change_division(self, battle: classes.Battle, division: classes.BattleDivision): + def change_division(self, battle: classes.Battle, division: classes.BattleDivision) -> bool: """Change division. :param battle: Battle @@ -1723,8 +1730,12 @@ class CitizenMilitary(CitizenTravel): :type division: BattleDivision :return: """ - self._post_main_battlefield_change_division(battle.id, division.id) - self._report_action("MILITARY_DIV_SWITCH", f"Switched to d{division.div} in battle {battle.id}") + resp = self._post_main_battlefield_change_division(battle.id, division.id) + if resp.json().get('error'): + self.write_log(resp.json().get('message')) + return False + self._report_action("MILITARY_DIV_SWITCH", f"Switched to d{division.div} in battle {battle.id}", kwargs=resp.json()) + return True def get_ground_hit_dmg_value(self, rang: int = None, strength: float = None, elite: bool = None, ne: bool = False, booster_50: bool = False, booster_100: bool = False, tp: bool = True) -> Decimal: diff --git a/erepublik/utils.py b/erepublik/utils.py index 1ecd22b..a2a00c8 100644 --- a/erepublik/utils.py +++ b/erepublik/utils.py @@ -13,14 +13,14 @@ from typing import Any, List, Mapping, Optional, Union import requests -from . import __commit_id__, __version__, constants +from . import __version__, constants try: import simplejson as json except ImportError: import json -__all__ = ['COMMIT_ID', 'VERSION', 'calculate_hit', 'caught_error', 'date_from_eday', 'eday_from_date', +__all__ = ['VERSION', 'calculate_hit', 'caught_error', 'date_from_eday', 'eday_from_date', 'get_air_hit_dmg_value', 'get_file', 'get_ground_hit_dmg_value', 'get_sleep_seconds', 'good_timedelta', 'interactive_sleep', 'json', 'localize_dt', 'localize_timestamp', 'normalize_html_json', 'now', 'process_error', 'process_warning', 'send_email', 'silent_sleep', 'slugify', 'write_file', @@ -30,7 +30,6 @@ if not sys.version_info >= (3, 7): raise AssertionError('This script requires Python version 3.7 and higher\n' 'But Your version is v{}.{}.{}'.format(*sys.version_info)) -COMMIT_ID: str = __commit_id__ VERSION: str = __version__ @@ -238,7 +237,7 @@ def normalize_html_json(js: str) -> str: def caught_error(e: Exception): - process_error(str(e), "Unclassified", sys.exc_info(), None, COMMIT_ID, False) + process_error(str(e), "Unclassified", sys.exc_info(), interactive=False) def process_error(log_info: str, name: str, exc_info: tuple, citizen=None, commit_id: str = None, @@ -260,7 +259,7 @@ def process_error(log_info: str, name: str, exc_info: tuple, citizen=None, commi """ type_, value_, traceback_ = exc_info content = [log_info] - content += [f"eRepublik version {VERSION}, commit id {COMMIT_ID}"] + content += [f"eRepublik version {VERSION}"] if commit_id: content += [f"Commit id {commit_id}"] content += [str(value_), str(type_), ''.join(traceback.format_tb(traceback_))] diff --git a/set_commit_id.sh b/set_commit_id.sh deleted file mode 100755 index 39ed3cc..0000000 --- a/set_commit_id.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -commit=$(git log -1 --pretty=format:%h) -sed -i.bak -E "s|__commit_id__ = \".+\"|__commit_id__ = \"${commit}\"|g" erepublik/__init__.py -rm erepublik/__init__.py.bak