Skip to main content

OpenTTD Client Library

Project description

PyTTD - Python OpenTTD Client Library

PyPI version Python versions License: MIT

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 Done -
Commands Done Might have missed something
Game state Done Might have missed something
Save file parsing In Progress Game data and companies work
High level functions In Progress 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 game
  • client.disconnect() - Clean disconnect from server
  • client.is_connected() - Check connection status

Game Information

  • client.get_game_info() - Game state information
  • client.get_map_info() - Map size and terrain data
  • client.get_economic_status() - Economic indicators

Company Management

  • client.get_companies() - List all companies
  • client.get_our_company() - Our company information
  • client.get_company_finances() - Financial data
  • client.get_company_performance() - Performance metrics

Financial Operations

  • client.increase_loan(amount) - Increase company loan
  • client.decrease_loan(amount) - Decrease company loan
  • client.give_money(amount, company) - Transfer money
  • client.can_afford(amount) - Check affordability

Company Customization

  • client.rename_company(name) - Change company name
  • client.rename_president(name) - Change manager name
  • client.set_company_colour(scheme, primary, colour) - Change colors

Communication

  • client.send_chat(message) - Send public chat message
  • client.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

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

pyttd-1.3.0.tar.gz (73.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyttd-1.3.0-py3-none-any.whl (57.9 kB view details)

Uploaded Python 3

File details

Details for the file pyttd-1.3.0.tar.gz.

File metadata

  • Download URL: pyttd-1.3.0.tar.gz
  • Upload date:
  • Size: 73.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyttd-1.3.0.tar.gz
Algorithm Hash digest
SHA256 986aea8ae2853df9ad20526e671bd4550a25097fb385e47732cc25ded3234f80
MD5 1c2fc257359b4d4c4d32f6fa07690574
BLAKE2b-256 510037c18f8481629bfe2ba5becfe8187ca0f0c9ad2172e4bb110c53fc401b93

See more details on using hashes here.

File details

Details for the file pyttd-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: pyttd-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 57.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyttd-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 61ad048c477a64180b8298a6fdc4b68ce162110f83746b84c591e70f1c01c318
MD5 bdda72f3c8fee45220d67f5f6a9f1ee0
BLAKE2b-256 4012e8ccfae8ff6ce23350b20d0a52712bb35ed677c579c77e0ea2218910fe3a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page