empire-core 0.17.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- empire_core-0.17.0/.github/workflows/ci.yml +48 -0
- empire_core-0.17.0/.github/workflows/publish.yml +79 -0
- empire_core-0.17.0/.gitignore +138 -0
- empire_core-0.17.0/.pre-commit-config.yaml +23 -0
- empire_core-0.17.0/CHANGELOG.md +354 -0
- empire_core-0.17.0/CONTRIBUTING.md +434 -0
- empire_core-0.17.0/PKG-INFO +197 -0
- empire_core-0.17.0/README.md +168 -0
- empire_core-0.17.0/accounts.json.template +6 -0
- empire_core-0.17.0/docs/ACTION_COMMANDS.md +301 -0
- empire_core-0.17.0/docs/FEATURE_COMPARISON.md +51 -0
- empire_core-0.17.0/docs/FEATURE_PARITY.md +126 -0
- empire_core-0.17.0/docs/GAME_MECHANICS.md +566 -0
- empire_core-0.17.0/docs/PYGGE_COMPARISON.md +185 -0
- empire_core-0.17.0/docs/design/action_commands.md +68 -0
- empire_core-0.17.0/docs/design/architecture.md +50 -0
- empire_core-0.17.0/docs/design/deep_dive_findings.md +166 -0
- empire_core-0.17.0/docs/design/events.md +61 -0
- empire_core-0.17.0/docs/design/game_bundle_analysis.md +70 -0
- empire_core-0.17.0/docs/design/protocol.md +62 -0
- empire_core-0.17.0/docs/design/response_validation.md +114 -0
- empire_core-0.17.0/docs/design/state_management.md +64 -0
- empire_core-0.17.0/examples/_archive/battle_report_analyzer.py +162 -0
- empire_core-0.17.0/examples/_archive/demo.py +95 -0
- empire_core-0.17.0/examples/_archive/detailed_state_demo.py +135 -0
- empire_core-0.17.0/examples/_archive/map_persistence_demo.py +96 -0
- empire_core-0.17.0/examples/_archive/movement_tracker.py +222 -0
- empire_core-0.17.0/examples/_archive/quest_monitor.py +135 -0
- empire_core-0.17.0/examples/_archive/resource_monitor_bot.py +103 -0
- empire_core-0.17.0/examples/_archive/simple_farm_bot.py +119 -0
- empire_core-0.17.0/examples/_archive/world_mapper.py +133 -0
- empire_core-0.17.0/examples/debug_packets.py +118 -0
- empire_core-0.17.0/examples/test_client.py +85 -0
- empire_core-0.17.0/pyproject.toml +101 -0
- empire_core-0.17.0/pytest.ini +6 -0
- empire_core-0.17.0/src/empire_core/__init__.py +36 -0
- empire_core-0.17.0/src/empire_core/_archive/actions.py +511 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/__init__.py +24 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/alliance_tools.py +266 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/battle_reports.py +196 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/building_queue.py +242 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/defense_manager.py +124 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/map_scanner.py +370 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/multi_account.py +296 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/quest_automation.py +94 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/resource_manager.py +380 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/target_finder.py +153 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/tasks.py +224 -0
- empire_core-0.17.0/src/empire_core/_archive/automation/unit_production.py +719 -0
- empire_core-0.17.0/src/empire_core/_archive/cli.py +68 -0
- empire_core-0.17.0/src/empire_core/_archive/client_async.py +469 -0
- empire_core-0.17.0/src/empire_core/_archive/commands.py +201 -0
- empire_core-0.17.0/src/empire_core/_archive/connection_async.py +228 -0
- empire_core-0.17.0/src/empire_core/_archive/defense.py +156 -0
- empire_core-0.17.0/src/empire_core/_archive/events/__init__.py +35 -0
- empire_core-0.17.0/src/empire_core/_archive/events/base.py +153 -0
- empire_core-0.17.0/src/empire_core/_archive/events/manager.py +85 -0
- empire_core-0.17.0/src/empire_core/accounts.py +190 -0
- empire_core-0.17.0/src/empire_core/client/__init__.py +0 -0
- empire_core-0.17.0/src/empire_core/client/client.py +752 -0
- empire_core-0.17.0/src/empire_core/config.py +87 -0
- empire_core-0.17.0/src/empire_core/exceptions.py +42 -0
- empire_core-0.17.0/src/empire_core/network/__init__.py +0 -0
- empire_core-0.17.0/src/empire_core/network/connection.py +378 -0
- empire_core-0.17.0/src/empire_core/protocol/__init__.py +0 -0
- empire_core-0.17.0/src/empire_core/protocol/models/__init__.py +389 -0
- empire_core-0.17.0/src/empire_core/protocol/models/alliance.py +568 -0
- empire_core-0.17.0/src/empire_core/protocol/models/army.py +444 -0
- empire_core-0.17.0/src/empire_core/protocol/models/attack.py +229 -0
- empire_core-0.17.0/src/empire_core/protocol/models/auth.py +216 -0
- empire_core-0.17.0/src/empire_core/protocol/models/base.py +404 -0
- empire_core-0.17.0/src/empire_core/protocol/models/building.py +455 -0
- empire_core-0.17.0/src/empire_core/protocol/models/castle.py +317 -0
- empire_core-0.17.0/src/empire_core/protocol/models/chat.py +150 -0
- empire_core-0.17.0/src/empire_core/protocol/models/defense.py +300 -0
- empire_core-0.17.0/src/empire_core/protocol/models/map.py +409 -0
- empire_core-0.17.0/src/empire_core/protocol/models/player.py +219 -0
- empire_core-0.17.0/src/empire_core/protocol/models/search.py +96 -0
- empire_core-0.17.0/src/empire_core/protocol/packet.py +104 -0
- empire_core-0.17.0/src/empire_core/services/__init__.py +31 -0
- empire_core-0.17.0/src/empire_core/services/alliance.py +405 -0
- empire_core-0.17.0/src/empire_core/services/base.py +107 -0
- empire_core-0.17.0/src/empire_core/services/castle.py +221 -0
- empire_core-0.17.0/src/empire_core/state/__init__.py +0 -0
- empire_core-0.17.0/src/empire_core/state/manager.py +408 -0
- empire_core-0.17.0/src/empire_core/state/models.py +215 -0
- empire_core-0.17.0/src/empire_core/state/quest_models.py +60 -0
- empire_core-0.17.0/src/empire_core/state/report_models.py +115 -0
- empire_core-0.17.0/src/empire_core/state/unit_models.py +75 -0
- empire_core-0.17.0/src/empire_core/state/world_models.py +274 -0
- empire_core-0.17.0/src/empire_core/storage/__init__.py +1 -0
- empire_core-0.17.0/src/empire_core/storage/database.py +237 -0
- empire_core-0.17.0/src/empire_core/utils/__init__.py +0 -0
- empire_core-0.17.0/src/empire_core/utils/battle_sim.py +172 -0
- empire_core-0.17.0/src/empire_core/utils/calculations.py +170 -0
- empire_core-0.17.0/src/empire_core/utils/crypto.py +8 -0
- empire_core-0.17.0/src/empire_core/utils/decorators.py +69 -0
- empire_core-0.17.0/src/empire_core/utils/enums.py +111 -0
- empire_core-0.17.0/src/empire_core/utils/helpers.py +252 -0
- empire_core-0.17.0/src/empire_core/utils/response_awaiter.py +153 -0
- empire_core-0.17.0/src/empire_core/utils/troops.py +93 -0
- empire_core-0.17.0/tests/_archive/manual_network_test.py +114 -0
- empire_core-0.17.0/tests/_archive/manual_state_population_test.py +59 -0
- empire_core-0.17.0/tests/_archive/real_network_test.py +46 -0
- empire_core-0.17.0/tests/_archive/test_account_pool.py +59 -0
- empire_core-0.17.0/tests/_archive/test_actions.py +103 -0
- empire_core-0.17.0/tests/_archive/test_events.py +48 -0
- empire_core-0.17.0/tests/_archive/test_handshake.py +93 -0
- empire_core-0.17.0/tests/test_response_awaiter.py +146 -0
- empire_core-0.17.0/uv.lock +2053 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [master]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
lint:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
|
|
13
|
+
- name: Install uv
|
|
14
|
+
uses: astral-sh/setup-uv@v4
|
|
15
|
+
with:
|
|
16
|
+
version: "latest"
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
run: uv python install 3.12
|
|
20
|
+
|
|
21
|
+
- name: Install dependencies
|
|
22
|
+
run: uv sync --extra dev
|
|
23
|
+
|
|
24
|
+
- name: Run pre-commit
|
|
25
|
+
uses: pre-commit/action@v3.0.1
|
|
26
|
+
|
|
27
|
+
test:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
strategy:
|
|
30
|
+
matrix:
|
|
31
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
32
|
+
name: test (${{ matrix.python-version }})
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v4
|
|
35
|
+
|
|
36
|
+
- name: Install uv
|
|
37
|
+
uses: astral-sh/setup-uv@v4
|
|
38
|
+
with:
|
|
39
|
+
version: "latest"
|
|
40
|
+
|
|
41
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
42
|
+
run: uv python install ${{ matrix.python-version }}
|
|
43
|
+
|
|
44
|
+
- name: Install dependencies
|
|
45
|
+
run: uv sync --extra dev
|
|
46
|
+
|
|
47
|
+
- name: Run tests
|
|
48
|
+
run: uv run pytest -v
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
name: Semantic Release
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
concurrency: release
|
|
13
|
+
permissions:
|
|
14
|
+
contents: write
|
|
15
|
+
id-token: write
|
|
16
|
+
outputs:
|
|
17
|
+
released: ${{ steps.release.outputs.released }}
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0
|
|
22
|
+
token: ${{ secrets.RELEASE_TOKEN }}
|
|
23
|
+
|
|
24
|
+
- name: Configure Git
|
|
25
|
+
run: |
|
|
26
|
+
git config user.name "github-actions[bot]"
|
|
27
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
28
|
+
|
|
29
|
+
- name: Install uv
|
|
30
|
+
uses: astral-sh/setup-uv@v4
|
|
31
|
+
with:
|
|
32
|
+
version: "latest"
|
|
33
|
+
|
|
34
|
+
- name: Set up Python
|
|
35
|
+
run: uv python install 3.12
|
|
36
|
+
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --extra dev
|
|
39
|
+
|
|
40
|
+
- name: Semantic Release
|
|
41
|
+
id: release
|
|
42
|
+
env:
|
|
43
|
+
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
|
44
|
+
run: |
|
|
45
|
+
output=$(uv run semantic-release version 2>&1) || true
|
|
46
|
+
echo "$output"
|
|
47
|
+
if echo "$output" | grep -q "No release will be made"; then
|
|
48
|
+
echo "released=false" >> $GITHUB_OUTPUT
|
|
49
|
+
elif [ -d "dist" ] && [ "$(ls -A dist)" ]; then
|
|
50
|
+
echo "released=true" >> $GITHUB_OUTPUT
|
|
51
|
+
else
|
|
52
|
+
echo "released=false" >> $GITHUB_OUTPUT
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
- name: Upload dist artifacts
|
|
56
|
+
if: steps.release.outputs.released == 'true'
|
|
57
|
+
uses: actions/upload-artifact@v4
|
|
58
|
+
with:
|
|
59
|
+
name: dist
|
|
60
|
+
path: dist/
|
|
61
|
+
retention-days: 1
|
|
62
|
+
|
|
63
|
+
publish:
|
|
64
|
+
name: Publish to PyPI
|
|
65
|
+
needs: release
|
|
66
|
+
if: needs.release.outputs.released == 'true'
|
|
67
|
+
runs-on: ubuntu-latest
|
|
68
|
+
environment: pypi
|
|
69
|
+
permissions:
|
|
70
|
+
id-token: write
|
|
71
|
+
steps:
|
|
72
|
+
- name: Download dist artifacts
|
|
73
|
+
uses: actions/download-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: dist
|
|
76
|
+
path: dist/
|
|
77
|
+
|
|
78
|
+
- name: Upload to PyPI
|
|
79
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
.installed.cfg
|
|
25
|
+
*.egg
|
|
26
|
+
|
|
27
|
+
# PyInstaller
|
|
28
|
+
# Usually these files are written by a python script from a template
|
|
29
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
30
|
+
*.manifest
|
|
31
|
+
*.spec
|
|
32
|
+
|
|
33
|
+
# Installer logs
|
|
34
|
+
pip-log.txt
|
|
35
|
+
pip-delete-this-directory.txt
|
|
36
|
+
|
|
37
|
+
# Unit test / coverage reports
|
|
38
|
+
htmlcov/
|
|
39
|
+
.tox/
|
|
40
|
+
.nox/
|
|
41
|
+
.coverage
|
|
42
|
+
.coverage.*
|
|
43
|
+
.cache
|
|
44
|
+
nosetests.xml
|
|
45
|
+
coverage.xml
|
|
46
|
+
*.cover
|
|
47
|
+
*.py,cover
|
|
48
|
+
.hypothesis/
|
|
49
|
+
.pytest_cache/
|
|
50
|
+
|
|
51
|
+
# Translations
|
|
52
|
+
*.mo
|
|
53
|
+
*.pot
|
|
54
|
+
|
|
55
|
+
# Django stuff:
|
|
56
|
+
*.log
|
|
57
|
+
local_settings.py
|
|
58
|
+
db.sqlite3
|
|
59
|
+
db.sqlite3-journal
|
|
60
|
+
|
|
61
|
+
# Flask stuff:
|
|
62
|
+
instance/
|
|
63
|
+
.webassets-cache
|
|
64
|
+
|
|
65
|
+
# Scrapy stuff:
|
|
66
|
+
.scrapy
|
|
67
|
+
|
|
68
|
+
# Sphinx documentation
|
|
69
|
+
docs/_build/
|
|
70
|
+
|
|
71
|
+
# PyBuilder
|
|
72
|
+
target/
|
|
73
|
+
|
|
74
|
+
# Jupyter Notebook
|
|
75
|
+
.ipynb_checkpoints
|
|
76
|
+
|
|
77
|
+
# IPython
|
|
78
|
+
profile_default/
|
|
79
|
+
ipython_config.py
|
|
80
|
+
|
|
81
|
+
# pyenv
|
|
82
|
+
.python-version
|
|
83
|
+
|
|
84
|
+
# pipenv
|
|
85
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
86
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
87
|
+
# with no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
88
|
+
# install all needed dependencies.
|
|
89
|
+
#Pipfile.lock
|
|
90
|
+
|
|
91
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
92
|
+
__pypackages__/
|
|
93
|
+
|
|
94
|
+
# Celery stuff
|
|
95
|
+
celerybeat-schedule
|
|
96
|
+
celerybeat.pid
|
|
97
|
+
|
|
98
|
+
# SageMath parsed files
|
|
99
|
+
*.sage.py
|
|
100
|
+
|
|
101
|
+
# Environments
|
|
102
|
+
.env
|
|
103
|
+
.venv
|
|
104
|
+
env/
|
|
105
|
+
venv/
|
|
106
|
+
ENV/
|
|
107
|
+
env.bak/
|
|
108
|
+
venv.bak/
|
|
109
|
+
|
|
110
|
+
# Spyder project settings
|
|
111
|
+
.spyderproject
|
|
112
|
+
.spyproject
|
|
113
|
+
|
|
114
|
+
# Rope project settings
|
|
115
|
+
.ropeproject
|
|
116
|
+
|
|
117
|
+
# mkdocs documentation
|
|
118
|
+
/site
|
|
119
|
+
|
|
120
|
+
# mypy
|
|
121
|
+
.mypy_cache/
|
|
122
|
+
.dmypy.json
|
|
123
|
+
dmypy.json
|
|
124
|
+
|
|
125
|
+
# Pyre type checker
|
|
126
|
+
.pyre/
|
|
127
|
+
|
|
128
|
+
# Editors
|
|
129
|
+
.vscode/
|
|
130
|
+
.idea/
|
|
131
|
+
*.swp
|
|
132
|
+
*.swo
|
|
133
|
+
|
|
134
|
+
# Config
|
|
135
|
+
accounts.json
|
|
136
|
+
*.db
|
|
137
|
+
*.db-shm
|
|
138
|
+
*.db-wal
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Pre-commit configuration for EmpireCore
|
|
2
|
+
repos:
|
|
3
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
4
|
+
rev: v0.1.14
|
|
5
|
+
hooks:
|
|
6
|
+
- id: ruff
|
|
7
|
+
args: [ --fix ]
|
|
8
|
+
- id: ruff-format
|
|
9
|
+
|
|
10
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
11
|
+
rev: v1.8.0
|
|
12
|
+
hooks:
|
|
13
|
+
- id: mypy
|
|
14
|
+
additional_dependencies: [ pydantic, aiohttp, python-dotenv, typer, sqlmodel, aiosqlite, sqlalchemy, types-tabulate, types-requests, requests ]
|
|
15
|
+
args: [ --config-file=pyproject.toml ]
|
|
16
|
+
exclude: "_archive/"
|
|
17
|
+
|
|
18
|
+
- repo: https://github.com/compilerla/conventional-pre-commit
|
|
19
|
+
rev: v3.1.0
|
|
20
|
+
hooks:
|
|
21
|
+
- id: conventional-pre-commit
|
|
22
|
+
stages: [ commit-msg ]
|
|
23
|
+
args: []
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
<!-- version list -->
|
|
4
|
+
|
|
5
|
+
## v0.17.0 (2026-01-11)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Add alliance search (hgh command)
|
|
10
|
+
([`9629811`](https://github.com/eschnitzler/EmpireCore/commit/9629811bf3a334d872dfafb83f045e3b9ed5967f))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## v0.16.0 (2026-01-11)
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Revert version for semantic-release
|
|
18
|
+
([`8e8e35f`](https://github.com/eschnitzler/EmpireCore/commit/8e8e35fa9e947d66d633c834f28b410d7fa2b70d))
|
|
19
|
+
|
|
20
|
+
- Rewrite scan_kingdom with sequential request/response
|
|
21
|
+
([`37fc924`](https://github.com/eschnitzler/EmpireCore/commit/37fc924709b48a26ab8fce7fef624d619d76c291))
|
|
22
|
+
|
|
23
|
+
- Wait for gbd packet after login to populate player state
|
|
24
|
+
([`3057b5e`](https://github.com/eschnitzler/EmpireCore/commit/3057b5ee6fa9b0315ab4d4fa76ed832691d65e25))
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
- Add Kingdom enum and alliance tracking support
|
|
29
|
+
([`0b6a4d4`](https://github.com/eschnitzler/EmpireCore/commit/0b6a4d49484df1f8072e7d2b1f202386ac712ac3))
|
|
30
|
+
|
|
31
|
+
- Add scan_kingdom with BFS wave expansion
|
|
32
|
+
([`d14af84`](https://github.com/eschnitzler/EmpireCore/commit/d14af846b739cd99497f7840f06ca165ceda90a6))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## v0.15.0 (2026-01-11)
|
|
36
|
+
|
|
37
|
+
### Features
|
|
38
|
+
|
|
39
|
+
- Expose raw commander data in movements
|
|
40
|
+
([`f461d49`](https://github.com/eschnitzler/EmpireCore/commit/f461d49790b9477a033c04bc89cf295c1464795a))
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## v0.14.0 (2026-01-10)
|
|
44
|
+
|
|
45
|
+
### Features
|
|
46
|
+
|
|
47
|
+
- Dispatch on_incoming_attack callback for movement updates
|
|
48
|
+
([`db39eda`](https://github.com/eschnitzler/EmpireCore/commit/db39eda257edda791d94b6102b098ab9544f7765))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## v0.13.0 (2026-01-10)
|
|
52
|
+
|
|
53
|
+
### Features
|
|
54
|
+
|
|
55
|
+
- Add activity_tier property to AllianceMember for tiered offline status
|
|
56
|
+
([`cd67fae`](https://github.com/eschnitzler/EmpireCore/commit/cd67fae55bfa78bc81fc7b92a7202975b3fb071b))
|
|
57
|
+
|
|
58
|
+
### Breaking Changes
|
|
59
|
+
|
|
60
|
+
- _online property replaced with _activity_tier
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## v0.11.0 (2026-01-08)
|
|
64
|
+
|
|
65
|
+
### Features
|
|
66
|
+
|
|
67
|
+
- Add no_cache option to get_member() for fresh data
|
|
68
|
+
([`ba26735`](https://github.com/eschnitzler/EmpireCore/commit/ba2673566585be33bc9134e6c526d9752704c6e5))
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## v0.10.1 (2026-01-08)
|
|
72
|
+
|
|
73
|
+
### Refactoring
|
|
74
|
+
|
|
75
|
+
- Rename get_my_* to get_local_* for consistency
|
|
76
|
+
([`75caebd`](https://github.com/eschnitzler/EmpireCore/commit/75caebdceeb62578ff97af013600d9959df72107))
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## v0.10.0 (2026-01-08)
|
|
80
|
+
|
|
81
|
+
### Features
|
|
82
|
+
|
|
83
|
+
- Add convenience methods for local player's alliance data
|
|
84
|
+
([`0de1e9a`](https://github.com/eschnitzler/EmpireCore/commit/0de1e9a25bbeb104ce1cbd4d6290c647ea297b46))
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
## v0.9.0 (2026-01-08)
|
|
88
|
+
|
|
89
|
+
### Features
|
|
90
|
+
|
|
91
|
+
- Add alliance info command (ain) with member online status
|
|
92
|
+
([`fcc9977`](https://github.com/eschnitzler/EmpireCore/commit/fcc9977580d05144cd8ff8e4a818a3a8f8caf710))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## v0.8.0 (2026-01-06)
|
|
96
|
+
|
|
97
|
+
### Features
|
|
98
|
+
|
|
99
|
+
- Add on_movement_arrived callback and change recall/arrived to pass MID only
|
|
100
|
+
([`6e8084d`](https://github.com/eschnitzler/EmpireCore/commit/6e8084dc949596a3813004179476635c6e4086c2))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## v0.7.3 (2026-01-06)
|
|
104
|
+
|
|
105
|
+
### Bug Fixes
|
|
106
|
+
|
|
107
|
+
- Don't remove movements in gam handler, wait for arrival/recall packets
|
|
108
|
+
([`0b5d49f`](https://github.com/eschnitzler/EmpireCore/commit/0b5d49f5ba2cc52860544fe2e463475046dca88a))
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
## v0.7.2 (2026-01-06)
|
|
112
|
+
|
|
113
|
+
### Bug Fixes
|
|
114
|
+
|
|
115
|
+
- Use mrm packet for recall detection, not maa
|
|
116
|
+
([`6c8c461`](https://github.com/eschnitzler/EmpireCore/commit/6c8c46101bb65fe995725b17da1b99568087f951))
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
## v0.7.1 (2026-01-06)
|
|
120
|
+
|
|
121
|
+
### Bug Fixes
|
|
122
|
+
|
|
123
|
+
- Detect recalls via maa packet instead of gam comparison
|
|
124
|
+
([`82ed870`](https://github.com/eschnitzler/EmpireCore/commit/82ed8708b6aae0134e4c65ef2d62d4d1fea93e3e))
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
## v0.7.0 (2026-01-06)
|
|
128
|
+
|
|
129
|
+
### Features
|
|
130
|
+
|
|
131
|
+
- Add estimated_size field to Movement for non-visible armies
|
|
132
|
+
([`23fed4d`](https://github.com/eschnitzler/EmpireCore/commit/23fed4d0a10c33bcb1ab1244327dba767f3d1647))
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
## v0.6.6 (2026-01-06)
|
|
136
|
+
|
|
137
|
+
### Bug Fixes
|
|
138
|
+
|
|
139
|
+
- Handle GS as int and SA as int in gam/gal packets
|
|
140
|
+
([`51855ae`](https://github.com/eschnitzler/EmpireCore/commit/51855ae13f34bc8390e45f96889a73df4e9a2ca3))
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
## v0.6.5 (2026-01-06)
|
|
144
|
+
|
|
145
|
+
### Bug Fixes
|
|
146
|
+
|
|
147
|
+
- Coerce SA field to string in Alliance model
|
|
148
|
+
([`b6b23aa`](https://github.com/eschnitzler/EmpireCore/commit/b6b23aa459ff2e0d0fb223a3dba5e4c5eb8a5b80))
|
|
149
|
+
|
|
150
|
+
### Chores
|
|
151
|
+
|
|
152
|
+
- Add info-level logging for SDI debugging
|
|
153
|
+
([`faf9564`](https://github.com/eschnitzler/EmpireCore/commit/faf95645810ef7be1d7673439e60669da00b18e3))
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
## v0.6.4 (2026-01-06)
|
|
157
|
+
|
|
158
|
+
### Bug Fixes
|
|
159
|
+
|
|
160
|
+
- Handle lli packet for alliance info + add debug logging
|
|
161
|
+
([`7cdb545`](https://github.com/eschnitzler/EmpireCore/commit/7cdb545bfbf870a92c162c62ebe899481f1ef339))
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
## v0.6.3 (2026-01-06)
|
|
165
|
+
|
|
166
|
+
### Bug Fixes
|
|
167
|
+
|
|
168
|
+
- Dispatch callbacks in thread pool to avoid blocking receive loop
|
|
169
|
+
([`a30562f`](https://github.com/eschnitzler/EmpireCore/commit/a30562f172d409bae74ba1cd645bbfa780bfa9d7))
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
## v0.6.2 (2026-01-06)
|
|
173
|
+
|
|
174
|
+
### Bug Fixes
|
|
175
|
+
|
|
176
|
+
- Get_max_defense returns yard_limit only (includes support capacity)
|
|
177
|
+
([`22c9fdc`](https://github.com/eschnitzler/EmpireCore/commit/22c9fdc7788cf920b6cbab63355e43331a1ba774))
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
## v0.6.1 (2026-01-06)
|
|
181
|
+
|
|
182
|
+
### Bug Fixes
|
|
183
|
+
|
|
184
|
+
- Correct castle coordinate parsing from lli response
|
|
185
|
+
([`db057d1`](https://github.com/eschnitzler/EmpireCore/commit/db057d10cbfd4a5692c5731b8963945c4245bbe6))
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
## v0.6.0 (2026-01-05)
|
|
189
|
+
|
|
190
|
+
### Features
|
|
191
|
+
|
|
192
|
+
- Add defense capacity limits (yard_limit, wall_limit) to SDI response
|
|
193
|
+
([`ec886df`](https://github.com/eschnitzler/EmpireCore/commit/ec886dfbfd588a90dd4b9f82b653acfc38c05a47))
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
## v0.5.0 (2026-01-05)
|
|
197
|
+
|
|
198
|
+
### Features
|
|
199
|
+
|
|
200
|
+
- Add SDI (Support Defense Info) command for querying alliance castle defense
|
|
201
|
+
([`abcc58d`](https://github.com/eschnitzler/EmpireCore/commit/abcc58d4855849991bbb923e98d9525216be487b))
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
## v0.4.5 (2026-01-05)
|
|
205
|
+
|
|
206
|
+
### Bug Fixes
|
|
207
|
+
|
|
208
|
+
- Extract GA units from wrapper level, not inside UM
|
|
209
|
+
([`d645968`](https://github.com/eschnitzler/EmpireCore/commit/d6459687b1e1c43cc5c49156ec6ed06d914ca107))
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
## v0.4.4 (2026-01-05)
|
|
213
|
+
|
|
214
|
+
### Bug Fixes
|
|
215
|
+
|
|
216
|
+
- Parse GA (Garrison Army) units from movement wrapper
|
|
217
|
+
([`83ff404`](https://github.com/eschnitzler/EmpireCore/commit/83ff40424ad583c324d8790616cac5e81de25eb4))
|
|
218
|
+
|
|
219
|
+
### Chores
|
|
220
|
+
|
|
221
|
+
- Bump version to 0.4.4
|
|
222
|
+
([`6f14f68`](https://github.com/eschnitzler/EmpireCore/commit/6f14f6867546550751cdad4df0073df3176d253b))
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
## v0.4.2 (2026-01-05)
|
|
226
|
+
|
|
227
|
+
### Bug Fixes
|
|
228
|
+
|
|
229
|
+
- Include T=0 as attack movement type
|
|
230
|
+
([`1b4b219`](https://github.com/eschnitzler/EmpireCore/commit/1b4b219add109c7500a6124cbf9b7c828ea2ddce))
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
## v0.4.1 (2026-01-05)
|
|
234
|
+
|
|
235
|
+
### Bug Fixes
|
|
236
|
+
|
|
237
|
+
- Trigger attack callback for all attacks, not just incoming
|
|
238
|
+
([`0592812`](https://github.com/eschnitzler/EmpireCore/commit/0592812aecd74fff39ddc37e152dc9fe60c39c68))
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
## v0.4.0 (2026-01-04)
|
|
242
|
+
|
|
243
|
+
### Bug Fixes
|
|
244
|
+
|
|
245
|
+
- Use dynamic version from package metadata
|
|
246
|
+
([`c09a706`](https://github.com/eschnitzler/EmpireCore/commit/c09a70661bc1f110a260bf599aa22b781b2bc0d6))
|
|
247
|
+
|
|
248
|
+
### Features
|
|
249
|
+
|
|
250
|
+
- Add troop filtering, alliance names, and recall detection
|
|
251
|
+
([`803ac07`](https://github.com/eschnitzler/EmpireCore/commit/803ac079a682528dc6339e0efd8d2d8cf021c26c))
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
## v0.3.1 (2026-01-04)
|
|
255
|
+
|
|
256
|
+
### Bug Fixes
|
|
257
|
+
|
|
258
|
+
- Use dynamic version from package metadata ([#4](https://github.com/eschnitzler/EmpireCore/pull/4),
|
|
259
|
+
[`4efe3d5`](https://github.com/eschnitzler/EmpireCore/commit/4efe3d51cbc0d8fc0b2ae69190205ed3c9b3434f))
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
## v0.3.0 (2026-01-04)
|
|
263
|
+
|
|
264
|
+
### Bug Fixes
|
|
265
|
+
|
|
266
|
+
- **cd**: Pass built artifacts from release job to publish job
|
|
267
|
+
([#3](https://github.com/eschnitzler/EmpireCore/pull/3),
|
|
268
|
+
[`615483d`](https://github.com/eschnitzler/EmpireCore/commit/615483d71c6a879f6f06b8f7036ef58fbf3542d6))
|
|
269
|
+
|
|
270
|
+
- **cd**: Trigger release on push to master instead of CI workflow_run
|
|
271
|
+
([#3](https://github.com/eschnitzler/EmpireCore/pull/3),
|
|
272
|
+
[`615483d`](https://github.com/eschnitzler/EmpireCore/commit/615483d71c6a879f6f06b8f7036ef58fbf3542d6))
|
|
273
|
+
|
|
274
|
+
- **cd**: Use no-commit mode for semantic-release to work with branch protection
|
|
275
|
+
([#3](https://github.com/eschnitzler/EmpireCore/pull/3),
|
|
276
|
+
[`615483d`](https://github.com/eschnitzler/EmpireCore/commit/615483d71c6a879f6f06b8f7036ef58fbf3542d6))
|
|
277
|
+
|
|
278
|
+
- **cd**: Use RELEASE_TOKEN PAT for semantic-release
|
|
279
|
+
([#3](https://github.com/eschnitzler/EmpireCore/pull/3),
|
|
280
|
+
[`615483d`](https://github.com/eschnitzler/EmpireCore/commit/615483d71c6a879f6f06b8f7036ef58fbf3542d6))
|
|
281
|
+
|
|
282
|
+
- **ci**: Align job names with branch protection rules
|
|
283
|
+
([#2](https://github.com/eschnitzler/EmpireCore/pull/2),
|
|
284
|
+
[`0957f15`](https://github.com/eschnitzler/EmpireCore/commit/0957f15ed3580334f88d3019504b8dfcd11d8ad6))
|
|
285
|
+
|
|
286
|
+
- **ci**: Only run CI on pull requests ([#3](https://github.com/eschnitzler/EmpireCore/pull/3),
|
|
287
|
+
[`615483d`](https://github.com/eschnitzler/EmpireCore/commit/615483d71c6a879f6f06b8f7036ef58fbf3542d6))
|
|
288
|
+
|
|
289
|
+
- **ci**: Only run CI on pull requests, not on merge to master
|
|
290
|
+
([#3](https://github.com/eschnitzler/EmpireCore/pull/3),
|
|
291
|
+
[`615483d`](https://github.com/eschnitzler/EmpireCore/commit/615483d71c6a879f6f06b8f7036ef58fbf3542d6))
|
|
292
|
+
|
|
293
|
+
### Chores
|
|
294
|
+
|
|
295
|
+
- Remove stale documentation and empty test ([#2](https://github.com/eschnitzler/EmpireCore/pull/2),
|
|
296
|
+
[`0957f15`](https://github.com/eschnitzler/EmpireCore/commit/0957f15ed3580334f88d3019504b8dfcd11d8ad6))
|
|
297
|
+
|
|
298
|
+
### Features
|
|
299
|
+
|
|
300
|
+
- Add protocol models and service layer ([#2](https://github.com/eschnitzler/EmpireCore/pull/2),
|
|
301
|
+
[`0957f15`](https://github.com/eschnitzler/EmpireCore/commit/0957f15ed3580334f88d3019504b8dfcd11d8ad6))
|
|
302
|
+
|
|
303
|
+
- Add service layer with auto-registration ([#2](https://github.com/eschnitzler/EmpireCore/pull/2),
|
|
304
|
+
[`0957f15`](https://github.com/eschnitzler/EmpireCore/commit/0957f15ed3580334f88d3019504b8dfcd11d8ad6))
|
|
305
|
+
|
|
306
|
+
- **protocol**: Add Pydantic models for GGE protocol commands
|
|
307
|
+
([#2](https://github.com/eschnitzler/EmpireCore/pull/2),
|
|
308
|
+
[`0957f15`](https://github.com/eschnitzler/EmpireCore/commit/0957f15ed3580334f88d3019504b8dfcd11d8ad6))
|
|
309
|
+
|
|
310
|
+
### Performance Improvements
|
|
311
|
+
|
|
312
|
+
- Optimize packet dispatch for high message volume
|
|
313
|
+
([#2](https://github.com/eschnitzler/EmpireCore/pull/2),
|
|
314
|
+
[`0957f15`](https://github.com/eschnitzler/EmpireCore/commit/0957f15ed3580334f88d3019504b8dfcd11d8ad6))
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
## v0.2.1 (2026-01-04)
|
|
318
|
+
|
|
319
|
+
### Bug Fixes
|
|
320
|
+
|
|
321
|
+
- Ensure publish job gets latest version after semantic-release bump
|
|
322
|
+
([`272e3c3`](https://github.com/eschnitzler/EmpireCore/commit/272e3c3f38694da164af65b39d30f75a7dc582b0))
|
|
323
|
+
|
|
324
|
+
- Exclude _archive from pytest collection
|
|
325
|
+
([`2ba8b8c`](https://github.com/eschnitzler/EmpireCore/commit/2ba8b8cce5f51f8939831c2eb393c3ce56a19528))
|
|
326
|
+
|
|
327
|
+
- Require env vars for credentials in examples
|
|
328
|
+
([`cf005e3`](https://github.com/eschnitzler/EmpireCore/commit/cf005e34c179455abce766130cfcb50f5ecea8c2))
|
|
329
|
+
|
|
330
|
+
- Resolve CI failures by archiving old async code and fixing type errors
|
|
331
|
+
([`a514161`](https://github.com/eschnitzler/EmpireCore/commit/a51416187e9b59b87eead37f2a988d5b6fb369b9))
|
|
332
|
+
|
|
333
|
+
### Code Style
|
|
334
|
+
|
|
335
|
+
- Auto-fix ruff lint errors
|
|
336
|
+
([`3483e3e`](https://github.com/eschnitzler/EmpireCore/commit/3483e3e56e514ecb047ab8c1560658568c9fa7c7))
|
|
337
|
+
|
|
338
|
+
### Refactoring
|
|
339
|
+
|
|
340
|
+
- Replace async architecture with sync + threading
|
|
341
|
+
([`67315c6`](https://github.com/eschnitzler/EmpireCore/commit/67315c6699d580305cafe8cc5e165039ccb3cc4b))
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
## v0.2.0 (2025-12-31)
|
|
345
|
+
|
|
346
|
+
### Features
|
|
347
|
+
|
|
348
|
+
- Add send_support and get_bookmarks actions for troop birding
|
|
349
|
+
([`5a14466`](https://github.com/eschnitzler/EmpireCore/commit/5a1446660d5d112aec7c1866f15a514551907451))
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
## v0.1.0 (2025-12-29)
|
|
353
|
+
|
|
354
|
+
- Initial Release
|