OpenTTD Client Library
Project description
PyTTD - Python OpenTTD Client Library
Finally, a Python client library for connecting to OpenTTD servers as a player, issuing commands, observing game state and parsing maps! Create bots, manage companies, and interact with OpenTTD games programmatically with real-time data and without admin port access.
Features
| Feature | Status | Remarks |
|---|---|---|
| Multiplayer protocol | - | |
| Commands | Might have missed something | |
| Game state | Might have missed something | |
| Save file parsing | Game data and companies work | |
| High level functions | Helpers for common high-level tasks |
Requirements
- Python: 3.11 or higher
- OpenTTD Server: Tested with 14.1
Installation
From PyPI (Recommended)
pip install pyttd
From Source
git clone https://github.com/mssc89/pyttd.git
cd pyttd
pip install -e .
Quick Start
from pyttd import OpenTTDClient
# Connect to OpenTTD server
client = OpenTTDClient("127.0.0.1", 3979, player_name="MyBot")
client.connect()
# Get real-time game information
game_info = client.get_game_info()
print(f"Game Year: {game_info['current_year']}")
print(f"Companies: {game_info['companies']}/{game_info['companies_max']}")
print(f"Clients: {game_info['clients']}/{game_info['clients_max']}")
# Company management
if client.get_our_company():
finances = client.get_company_finances()
print(f"Money: £{finances['money']:,}")
print(f"Loan: £{finances['loan']:,}")
# Take a loan and send a status message
client.increase_loan(50000)
client.send_chat("Bot taking loan for expansion!")
# Clean disconnect
client.disconnect()
Save File Parsing
PyTTD includes a save file parser module that can extract detailed game data from OpenTTD save files.
from pyttd import load_save_file
# Parse a save file
game_data = load_save_file("path/to/savefile.sav")
# Access parsed data
print(f"Save version: {game_data['meta']['save_version']}")
print(f"Map size: {game_data['statistics']['map_size']}")
print(f"Companies: {game_data['statistics']['companies_count']}")
# Company information with financial data
for company in game_data['companies']:
print(f"{company['name']}: £{company['money']:,} (AI: {company['is_ai']})")
# Game date and economy
date = game_data['game']['date']['calendar_date']
print(f"Game date: {date['year']}-{date['month']}-{date['day']}")
economy = game_data['game']['economy']
print(f"Interest rate: {economy['interest_rate']}%")
Examples
Data Monitor
python examples/data_display.py
Displays all available real-time game state information.
Chat Bot
python examples/chat_bot.py
Basic example showing connection, company creation, and chat interaction.
Company Manager
python examples/manager_bot.py
Demonstrates company management features and financial tracking.
Financial Manager
python examples/finance_bot.py
Interactive financial management with chat-based commands.
Save File Parser
python examples/save_file_parser.py path/to/savefile.sav
Parse OpenTTD save files to extract game data including companies, map information, and economic data. All in a clean JSON file!
API Reference
OpenTTDClient
The main client class for connecting to OpenTTD servers.
client = OpenTTDClient(
server="127.0.0.1", # Server IP address
port=3979, # Server port
player_name="MyBot", # Your bot's name
company_name="MyCompany" # Company name (auto-created)
)
Connection Methods
client.connect()- Connect to server and join gameclient.disconnect()- Clean disconnect from serverclient.is_connected()- Check connection status
Game Information
client.get_game_info()- Game state informationclient.get_map_info()- Map size and terrain dataclient.get_economic_status()- Economic indicators
Company Management
client.get_companies()- List all companiesclient.get_our_company()- Our company informationclient.get_company_finances()- Financial dataclient.get_company_performance()- Performance metrics
Financial Operations
client.increase_loan(amount)- Increase company loanclient.decrease_loan(amount)- Decrease company loanclient.give_money(amount, company)- Transfer moneyclient.can_afford(amount)- Check affordability
Company Customization
client.rename_company(name)- Change company nameclient.rename_president(name)- Change manager nameclient.set_company_colour(scheme, primary, colour)- Change colors
Communication
client.send_chat(message)- Send public chat messageclient.send_chat_to_company(message, company_id)- Company chat
Maps
TODO: describe it here
Development
Setting up Development Environment
git clone https://github.com/mssc89/pyttd.git
cd pyttd
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Code formatting
black pyttd/
flake8 pyttd/
# Type checking
mypy pyttd/
Support
- GitHub Issues: Report bugs or request features
- Documentation: Full API documentation
- Examples: Comprehensive examples
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyttd-1.2.0.tar.gz.
File metadata
- Download URL: pyttd-1.2.0.tar.gz
- Upload date:
- Size: 56.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a5b48c66dc9059ed2dcade64beb62a3df125f6360822d181243b98ca6c32bb56
|
|
| MD5 |
c13eec694adc47bcfe4a7e7bd4d2e089
|
|
| BLAKE2b-256 |
f0e986d3279bf7686f62490e35d0ff8516eca6b77b68a6dc1c3967396c30c68f
|
File details
Details for the file pyttd-1.2.0-py3-none-any.whl.
File metadata
- Download URL: pyttd-1.2.0-py3-none-any.whl
- Upload date:
- Size: 47.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aed91354212cbf41dbf63281308535f48374ed340040181c1e19279c0bd7117c
|
|
| MD5 |
f6167cb869982dd880026944485d264d
|
|
| BLAKE2b-256 |
fa256e44a6ab6ea950c3271a66c299bbc66b153307a091511210c9535bf2ea52
|