TravianZ Patcher 48dde68baa feat(l10n): translate manual unit pages (FR/RO)
Localize the 51 in-game manual unit detail pages (Templates/Manual/1*.tpl,
typ=1) so they render in the player's language instead of English, continuing
the manual l10n started in the building pages PR.

What changed:
- 51 unit pages (Romans/Teutons/Gauls/Nature/Natars) now use translation
  constants for every hardcoded string: tribe tags -> TRIBE1..5, the stat
  labels (attack value, defence vs infantry/cavalry, Velocity, fields/hour,
  Can carry, Duration of training), the unit descriptions, the NPC reference
  notes and the "forward" nav.
- 48 new constants added to en/fr/ro:
  * 7 shared stat labels (MANUAL_ATTACK_VALUE, MANUAL_DEF_INFANTRY,
    MANUAL_DEF_CAVALRY, MANUAL_VELOCITY, MANUAL_FIELDS_HOUR, MANUAL_CAN_CARRY,
    MANUAL_TRAINING_DURATION)
  * 2 NPC reference notes (MANUAL_NPC_NATARS, MANUAL_NPC_NATURE)
  * 1 templated Nature-animal blurb (MANUAL_UDESC_ANIMAL_EXP, used via
    printf with the animal name + xp value, so the 10 animal pages share it)
  * 38 unit descriptions (MANUAL_UDESC_*). Identical descriptions are shared:
    settlers (110/120/130) and rams (117/127) reuse one constant each.
- Reuses constants already present upstream and in the building pages branch:
  TRIBE1..5, LEVEL, FORWARD, CROP_CONSUMPTION, PREREQUISITES, UPKEEP, DURATION,
  RESOURCES, U1..U50.

English render is unchanged: the English constant values are the existing page
text extracted verbatim (whitespace-collapsed). it/zh are intentionally left to
fall back to English via the en.php fallback wired up earlier.

Scope note: this builds on the manual building-pages l10n branch (reuses
CROP_CONSUMPTION). The 17 "new features" pages (typ=11/13) are out of scope and
will be a follow-up PR. RO strings are functional but would benefit from a
native review.
2026-06-10 13:48:02 +02:00
2026-06-09 15:15:27 +03:00
2026-05-28 12:25:28 +03:00
2026-05-28 12:25:28 +03:00
2026-05-07 08:24:40 +03:00
2026-06-09 15:15:27 +03:00
2026-06-09 15:15:27 +03:00
2025-11-12 21:29:11 +03:00
2013-06-16 10:38:34 +03:00
2026-04-28 10:19:50 +03:00
2026-05-25 10:23:39 +03:00
2013-06-16 10:38:34 +03:00
2026-04-28 10:19:50 +03:00
2026-04-28 10:19:50 +03:00
2026-04-28 10:19:50 +03:00
2026-04-28 10:19:50 +03:00
2026-04-28 10:19:50 +03:00
2026-04-28 10:19:50 +03:00
2026-04-28 10:19:50 +03:00
2026-04-29 15:20:55 +03:00
2017-11-20 13:55:58 +02:00
2017-11-21 02:03:54 +01:00
2026-06-02 12:58:20 +03:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2013-06-16 10:38:34 +03:00
2020-07-25 09:33:56 -04:00
2026-04-29 15:20:55 +03:00
2017-11-21 01:53:26 +01:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2017-11-20 13:53:34 +02:00
2026-04-29 15:20:55 +03:00
2026-05-25 10:23:39 +03:00
2013-06-16 10:38:34 +03:00
2013-06-16 10:38:34 +03:00
2013-06-16 10:38:34 +03:00
2026-04-29 15:20:55 +03:00
2017-11-03 15:52:29 +01:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2024-10-09 17:48:39 +03:00
2026-04-29 15:20:55 +03:00
2026-06-09 15:15:27 +03:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2026-04-29 15:20:55 +03:00
2026-06-02 12:04:31 +03:00
2013-06-16 10:38:34 +03:00
2026-04-29 15:20:55 +03:00
2025-10-24 23:27:04 +03:00
2026-04-29 15:20:55 +03:00
2026-06-04 09:39:44 +03:00

TravianZ

Maintenance GitHub Release GitHub contributors license

TravianZ is an open-source browser strategy game inspired by classic Travian-like gameplay.

This repository currently targets modern local/server setups with PHP 8.x and MariaDB.

Project Status

  • Version line: v9 (Incremental Refactor)
  • Stability: playable and actively maintained
  • Migration note: this is not a drop-in upgrade over older 8.3.4 deployments

If you are upgrading from an older installation, do a fresh install and migrate data carefully.

Quick Start (Docker)

git clone https://github.com/Shadowss/TravianZ.git
cd TravianZ
cp .env.example .env
docker compose up -d

Then open:

  • http://localhost:8080/install

Detailed container guide: DOCKER_README.md

System Requirements

Recommended:

  • PHP 8.3+
  • MariaDB latest stable (or MySQL-compatible server)
  • Apache or Nginx with PHP support
  • Linux server with enough CPU/RAM for your expected player count

Notes:

  • The game is query-heavy by design (legacy architecture), so shared hosting can become a bottleneck quickly.
  • For medium/large servers, prefer dedicated or well-sized VPS infrastructure.

Installation (Web Installer)

  1. Start services (Docker) or prepare your web+DB stack.
  2. Open http://your-host/install.
  3. Fill database settings:
  • Host: db (Docker) or your DB host
  • Port: usually 3306
  • DB/User/Password from your environment
  1. Complete installer steps:
  • DB structure
  • World data
  • Croppers build
  1. After success, access the game root.

Environment Configuration

Use .env (copy from .env.example) to manage deployment values.

Main keys:

  • MARIADB_ROOT_PASSWORD
  • MARIADB_DATABASE
  • MARIADB_USER
  • MARIADB_PASSWORD
  • DB_HOST
  • DB_PORT

Legacy compatibility keys (MYSQL_*) are still supported and can inherit MariaDB values.

Admin Panel

Admin entrypoint:

  • http://your-host/Admin/admin.php

Recent improvements include:

  • Full incremental refactored GameEngine and Templates folder
  • Added cache on Database.php and Automation.php and other important files
  • Dynamic table prefix support in map tile queries

Security: IP bans & reverse proxies

The admin Ban page can ban by IP address in addition to per-account bans (Admin/admin.php?p=ban -> Ban IP Address). A banned IP receives an "Access blocked" page on every game page. Admins and Multihunters are never affected, and the admin panel itself is always reachable (no self-lockout). IPv4 and IPv6 are supported.

Configuration (GameEngine/config.php)

Constant Default Purpose
BAN_IP_ENABLED true Master switch for IP-ban enforcement.
IP_TRUSTED_PROXIES "" Comma-separated proxy IPs/CIDRs allowed to set the forwarded header.
IP_FORWARDED_HEADER "HTTP_X_FORWARDED_FOR" $_SERVER key read for the real client IP when behind a trusted proxy.

Security model: only REMOTE_ADDR (the direct peer) is trusted by default — it cannot be spoofed. Forwarded headers are honoured only when REMOTE_ADDR is in IP_TRUSTED_PROXIES. This prevents a visitor from bypassing a ban with a forged X-Forwarded-For header.

Deployment scenarios

1. Direct access (no proxy) — default, nothing to do:

define("IP_TRUSTED_PROXIES", "");

2. Behind a reverse proxy (Nginx, Nginx Proxy Manager / NPMplus, Traefik, Caddy, …):

// your proxy's address, or a CIDR (e.g. 10.0.0.0/8 / 172.16.0.0/12 for a Docker bridge network)
define("IP_TRUSTED_PROXIES", "10.0.0.1");
define("IP_FORWARDED_HEADER", "HTTP_X_FORWARDED_FOR");

The proxy must forward the client IP. Prefer overwriting the header with the real peer rather than appending a client-supplied value (non-spoofable). Nginx example:

proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;

3. Behind Cloudflare:

define("IP_TRUSTED_PROXIES", "<your origin proxy or the Cloudflare IP ranges>");
define("IP_FORWARDED_HEADER", "HTTP_CF_CONNECTING_IP");

⚠️ Important: behind a proxy, if IP_TRUSTED_PROXIES is left empty, every visitor is seen with the proxy's IP — a single IP ban would then block everyone. Always set it to your proxy's address.

Verify

Check the resolved IP in the admin Unified Admin Log (a login entry shows the client IP), or temporarily print $_SERVER['REMOTE_ADDR'] and the forwarded header: REMOTE_ADDR should be your proxy, and the forwarded header should carry the real client IP.

Performance Notes

For large worlds (for example 400x400), generation tasks can be expensive.

Recent optimizations include:

  • world data generation tuning for bulk operations
  • croppers generation batching and progress streaming
  • safer DB/session handling during installer workflows

For production-like loads, monitor:

  • DB CPU and slow queries
  • PHP-FPM/Apache worker limits
  • disk I/O during installer and reset operations

Troubleshooting

Common checks:

  1. If installer cannot connect to DB:
  • verify DB_HOST, port, user and password
  • in Docker, host should be db, not localhost
  1. If permissions fail during install:
  • ensure web user can write required runtime files/folders
  1. If pages show warnings after PHP upgrade:
  • ensure latest code is deployed
  • clear opcode/cache and retry

For container-specific troubleshooting, see DOCKER_README.md.

Development

Useful commands:

# Start stack
docker compose up -d

# Logs
docker compose logs -f web

# Validate PHP files
find . -name '*.php' -not -path './var/*' -print0 | xargs -0 -n1 php -l

Repository references:

Community and Support

Credits

Thanks to the original and current maintainers, contributors, testers, and the TravianZ community.

Special acknowledgement to all legacy authors and maintainers who kept this project alive through multiple iterations.

License

This project is licensed under the terms described in LICENSE.

Languages
PHP 44.8%
Go Template 43.4%
CSS 8%
JavaScript 3.5%
HTML 0.2%