diff --git a/README.md b/README.md index f4d2946..ba5e96c 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,8 @@ graph TD TS --> LB[london-b
Storage, media
Docker + systemd] TS --> LA[london-a
Proxmox VE hypervisor] TS --> LC[london-c
Raspberry Pi
Octopus Energy exporter] - TS --> CA[copenhagen-a
Gaming
Minecraft, WoW MaNGOS] + TS --> CA[copenhagen-a
Proxmox VE hypervisor] TS --> NUR[nuremberg-a
Mail, poste.io] - TS --> CC[copenhagen-c
Raspberry Pi
cloudflared, idle] TS -.-> GC[Grafana Cloud
metrics, logs, traces] ``` @@ -35,8 +34,7 @@ DNS (Hetzner DNS for `pez.sh`, managed via Terraform) points directly at a Caddy | london-a | London | Debian 13 / Proxmox VE | Hypervisor (currently runs a Mac VM; platform for future VMs) | | london-c | London | Debian 13 (Raspberry Pi) | Octopus Energy exporter, edge utility box | | nuremberg-a | Hetzner Cloud (Nuremberg) | Debian 13 | Mail server (poste.io) | -| copenhagen-a | Copenhagen | Ubuntu 22.04 | Gaming servers (Minecraft, WoW/MaNGOS) | -| copenhagen-c | Copenhagen | Debian 12 (Raspberry Pi) | cloudflared tunnel, idle/available | +| copenhagen-a | Copenhagen | Debian 12 (Bookworm) / Proxmox VE | Hypervisor (platform for future VMs) | ## Directory Structure diff --git a/ansible/Makefile b/ansible/Makefile index dd3ce8e..4e1bfb4 100644 --- a/ansible/Makefile +++ b/ansible/Makefile @@ -24,7 +24,7 @@ update-linux: docker-status: ansible-playbook playbooks/docker-status.yml -# Reboot a specific host: make reboot HOST=copenhagen-c +# Reboot a specific host: make reboot HOST=london-c reboot: ansible-playbook playbooks/reboot.yml --limit $(HOST) diff --git a/ansible/README.md b/ansible/README.md index 8031b42..d1e133b 100644 --- a/ansible/README.md +++ b/ansible/README.md @@ -42,8 +42,7 @@ The deploy playbook runs in stages, each independently taggable (see `deploy.yml - `docker_hosts`: Docker Compose stacks from `services/` - `nuremberg-a`: poste.io mail (Docker) - `london-b`: `media_stack` + `backup` (rclone to B2) - - `copenhagen-a`: MaNGOS systemd units + MariaDB - - `london-a`: `proxmox_ve` (apt repo, nag patch, CIFS storage) + - `proxmox_hosts` (`london-a`, `copenhagen-a`): `proxmox_ve` (apt repo, nag patch, CIFS storage) - `zfs_hosts`: ZFS scrub scheduling Observability (node_exporter, systemd_exporter, Grafana Alloy) is part of the `common` baseline — every host gets it. @@ -63,7 +62,6 @@ Run a single stage: `ansible-playbook deploy.yml --tags docker` | `systemd_services` | Custom systemd units from `services/` | | `media_stack` | *Arr stack, Plex/Jellyfin, Samba, Syncthing on london-b | | `backup` | rclone-to-B2 cron job on london-b | -| `mariadb` | Native MariaDB (used by MaNGOS on copenhagen-a) | | `proxmox_ve` | PVE no-subscription repo, UI lockdown, CIFS storage | | `zfs` | Weekly scrub cron on ZFS hosts | @@ -75,6 +73,5 @@ Per-host variables in `inventory/host_vars/.yml`. ## Safety Notes - **london-b**: Reboot playbook requires interactive confirmation (critical storage) -- **copenhagen-a**: Reboot includes netplan pre-flight check (static IP verification) - All playbooks use `ignore_unreachable: true` for fleet operations - `--check --diff` is your friend — always dry-run first on production diff --git a/ansible/deploy.yml b/ansible/deploy.yml index 7a5b6c9..5420024 100644 --- a/ansible/deploy.yml +++ b/ansible/deploy.yml @@ -55,15 +55,8 @@ - role: media_stack - role: backup -- name: Gaming servers (copenhagen-a) - hosts: copenhagen-a - tags: [services, gaming] - roles: - - role: systemd_services - - role: mariadb - -- name: Proxmox VE (london-a) - hosts: london-a +- name: Proxmox VE (london-a, copenhagen-a) + hosts: proxmox_hosts tags: [services, proxmox] roles: - role: proxmox_ve diff --git a/ansible/dotfiles/README.md b/ansible/dotfiles/README.md index dbeaaca..073da5f 100644 --- a/ansible/dotfiles/README.md +++ b/ansible/dotfiles/README.md @@ -62,8 +62,7 @@ Most servers run Fish as root shell. Current state captured from live fleet (202 | london-b | fish | Yes (pez@pez.sh) | Partial (fish default, tmux custom) | | nuremberg-a | fish | No | No | | london-a | sh (FreeBSD) | No | No | -| copenhagen-a | fish | No (SpigotMC default) | No | -| copenhagen-c | fish | No | No | +| copenhagen-a | bash (fresh PVE install) | No | No | ## Relationship to upstream diff --git a/ansible/inventory/host_vars/copenhagen-a.yml b/ansible/inventory/host_vars/copenhagen-a.yml index ffe084c..5eb68bf 100644 --- a/ansible/inventory/host_vars/copenhagen-a.yml +++ b/ansible/inventory/host_vars/copenhagen-a.yml @@ -1,24 +1,5 @@ --- -host_role: gaming -host_description: "Gaming servers (Minecraft, WoW/MaNGOS)" +host_role: proxmox-ve +host_description: "Proxmox VE hypervisor" host_location: "Copenhagen" -prometheus_location: copenhagen - -# MaNGOS runs as systemd services, not Docker -# MariaDB is the MaNGOS database backend (character, world, auth DBs) -systemd_services: - - mangos-realmd - - mangos-world - -# Docker Compose services deployed by docker_services role -docker_services: - - minecraft - - smartctl-exporter - -# MaNGOS database backend — installed by apt; config managed by mariadb role -system_packages_services: - - mariadb - -common_ufw_allowed_ports: - - {port: 3724, proto: tcp, comment: "MaNGOS Realmd"} - - {port: 8085, proto: tcp, comment: "MaNGOS World Server"} +ansible_python_interpreter: /usr/bin/python3 diff --git a/ansible/inventory/host_vars/copenhagen-c.yml b/ansible/inventory/host_vars/copenhagen-c.yml deleted file mode 100644 index c9d83ad..0000000 --- a/ansible/inventory/host_vars/copenhagen-c.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -host_role: idle -host_description: "Idle/available" -host_location: "Copenhagen" -prometheus_location: copenhagen diff --git a/ansible/inventory/hosts.ini b/ansible/inventory/hosts.ini index 92e6d0d..f0467b1 100644 --- a/ansible/inventory/hosts.ini +++ b/ansible/inventory/hosts.ini @@ -6,8 +6,7 @@ helsinki-a ansible_host=100.67.6.27 london-a ansible_host=100.122.180.98 london-b ansible_host=100.84.65.101 london-c ansible_host=100.123.72.87 -copenhagen-a ansible_host=100.89.206.60 -copenhagen-c ansible_host=100.115.45.53 +copenhagen-a ansible_host=100.91.240.29 nuremberg-a ansible_host=100.70.180.24 [zfs_hosts] @@ -18,6 +17,9 @@ helsinki-a london-b london-c nuremberg-a + +[proxmox_hosts] +london-a copenhagen-a [all:vars] diff --git a/ansible/playbooks/reboot.yml b/ansible/playbooks/reboot.yml index f165bfb..53e3baa 100644 --- a/ansible/playbooks/reboot.yml +++ b/ansible/playbooks/reboot.yml @@ -2,8 +2,7 @@ # Reboot a specific host and wait for it to come back. # Usage: ansible-playbook playbooks/reboot.yml --limit # -# Safety: copenhagen-a has netplan pre-flight check. -# london-b should NOT be rebooted without manual approval. +# Safety: london-b should NOT be rebooted without manual approval. - name: Reboot host safely hosts: all @@ -29,23 +28,6 @@ msg: "Reboot of london-b was not confirmed." when: inventory_hostname == 'london-b' and london_b_confirm.user_input != 'yes' - - name: Check netplan config (copenhagen-a) - ansible.builtin.command: netplan get all - register: netplan_config - failed_when: false - changed_when: false - when: inventory_hostname == 'copenhagen-a' - - - name: Verify copenhagen-a static IP - ansible.builtin.assert: - that: - - "'192.168.0.251' in netplan_config.stdout" - fail_msg: > - ABORT: copenhagen-a netplan doesn't show expected static IP - 192.168.0.251. Check netplan config before rebooting. - success_msg: "copenhagen-a netplan OK — static IP present." - when: inventory_hostname == 'copenhagen-a' - - name: Reboot ansible.builtin.reboot: reboot_timeout: 300 diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml index 1db7e9b..2edb843 100644 --- a/ansible/roles/common/tasks/main.yml +++ b/ansible/roles/common/tasks/main.yml @@ -131,17 +131,15 @@ # Cloudflare Tunnels were retired in favour of Caddy + Authelia (PESO-134, #56), # which removed cloudflared from ansible config. copenhagen-a was unreachable at # the time, so its cloudflared.service was never actually stopped and is still -# running. Remove it wherever the unit lingers. copenhagen-c legitimately runs a -# hand-configured cloudflared tunnel — never touch it. +# running (it has since been repaved as Proxmox VE, so this is now historical). +# Remove it wherever the unit lingers. - name: Detect lingering cloudflared unit ansible.builtin.stat: path: /etc/systemd/system/cloudflared.service register: common_cloudflared_unit - when: inventory_hostname != 'copenhagen-c' - name: Remove orphaned cloudflared when: - - inventory_hostname != 'copenhagen-c' - common_cloudflared_unit.stat.exists | default(false) block: - name: Stop and disable cloudflared diff --git a/ansible/roles/mariadb/files/bind-local.cnf b/ansible/roles/mariadb/files/bind-local.cnf deleted file mode 100644 index 7f631fe..0000000 --- a/ansible/roles/mariadb/files/bind-local.cnf +++ /dev/null @@ -1,5 +0,0 @@ -[mysqld] -# Restrict MariaDB to loopback only. -# UFW blocks port 3306 externally, but binding to 127.0.0.1 provides -# defense in depth — the socket never reaches the network stack at all. -bind-address = 127.0.0.1 diff --git a/ansible/roles/mariadb/handlers/main.yml b/ansible/roles/mariadb/handlers/main.yml deleted file mode 100644 index a0d9e2b..0000000 --- a/ansible/roles/mariadb/handlers/main.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Restart mariadb - ansible.builtin.systemd: - name: mariadb - state: restarted diff --git a/ansible/roles/mariadb/tasks/main.yml b/ansible/roles/mariadb/tasks/main.yml deleted file mode 100644 index 015c5d4..0000000 --- a/ansible/roles/mariadb/tasks/main.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- name: Deploy MariaDB bind-address config - ansible.builtin.copy: - src: bind-local.cnf - dest: /etc/mysql/mariadb.conf.d/99-bind-local.cnf - owner: root - group: root - mode: '0644' - notify: Restart mariadb diff --git a/ansible/services/README.md b/ansible/services/README.md index c709a94..2b5a2ae 100644 --- a/ansible/services/README.md +++ b/ansible/services/README.md @@ -30,15 +30,13 @@ There is **no** per-host subdirectory — services are named by what they are, a | navidrome | Docker | london-b | Music streaming | | bookshelf | Docker | london-b | Ebook/audiobook manager (Readarr revival) | | slskd | Docker | london-b | Soulseek client | -| smartctl-exporter | Docker | london-b, copenhagen-a | SMART metrics | +| smartctl-exporter | Docker | london-b | SMART metrics | | plex-exporter | Docker | london-b | Plex metrics | | octopus-exporter | Docker | london-c | Octopus Energy metrics | -| minecraft | Docker | copenhagen-a | PaperMC server | | radarr / sonarr / lidarr / prowlarr / whisparr | systemd | london-b | *Arr stack (systemd unit files here) | | transmission | systemd | london-b | Config files (the daemon itself is apt) | | samba / vsftpd | systemd | london-b | File-sharing config | | ollama | systemd | london-b | Custom unit + binary install | -| mangos-realmd / mangos-world / mangos-zero | systemd | copenhagen-a | MaNGOS WoW server | | promtail | systemd | (currently unused; historical) | Log shipper, replaced by Alloy | | status-page | Cron script | helsinki-a | `update-status.sh` writes `/srv/status` | | rc.d | FreeBSD rc.conf | (historical) | Snapshot of london-a's old FreeBSD setup | diff --git a/ansible/services/mangos-realmd/mangos-realmd.service b/ansible/services/mangos-realmd/mangos-realmd.service deleted file mode 100644 index 8c17ac1..0000000 --- a/ansible/services/mangos-realmd/mangos-realmd.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=MaNGOS Zero Realm Server -After=network.target mariadb.service -Requires=mariadb.service - -[Service] -Type=simple -User=mangos -Group=mangos -WorkingDirectory=/home/mangos/mangos/zero/bin -ExecStart=/home/mangos/mangos/zero/bin/realmd -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target \ No newline at end of file diff --git a/ansible/services/mangos-world/mangos-world.service b/ansible/services/mangos-world/mangos-world.service deleted file mode 100644 index 228d277..0000000 --- a/ansible/services/mangos-world/mangos-world.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=MaNGOS Zero World Server -After=network.target mariadb.service mangos-realmd.service -Requires=mariadb.service -Wants=mangos-realmd.service - -[Service] -Type=simple -User=mangos -Group=mangos -WorkingDirectory=/home/mangos/mangos/zero/bin -ExecStart=/home/mangos/mangos/zero/bin/mangosd -Restart=on-failure -RestartSec=10 - -[Install] -WantedBy=multi-user.target diff --git a/ansible/services/mangos-zero/README.md b/ansible/services/mangos-zero/README.md deleted file mode 100644 index 57634a7..0000000 --- a/ansible/services/mangos-zero/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# MaNGOS Zero (Vanilla WoW) - -Classic WoW private server running on **copenhagen-a**. - -## Components - -- **mangosd** — World server (`mangos-world.service`) -- **realmd** — Authentication/realm server (`mangos-realmd.service`) -- **MariaDB** — Database backend (system service) - -## Config Files - -| File | Description | -|------|-------------| -| `etc/mangosd.conf` | World server configuration | -| `etc/realmd.conf` | Realm server configuration | -| `etc/ahbot.conf` | Auction house bot configuration | -| `etc/aiplayerbot.conf` | AI playerbot configuration | - -Config files use `{{ mangos_db_password }}` as a placeholder for the database password. -The actual password is stored in `ansible/group_vars/all/secrets.enc.yaml`. - -## Paths on copenhagen-a - -- Binary: `/home/mangos/mangos/zero/bin/` -- Config: `/home/mangos/mangos/zero/etc/` -- User: `mangos:mangos` - -## Systemd Services - -Service files are in: -- `../mangos-realmd/mangos-realmd.service` -- `../mangos-world/mangos-world.service` diff --git a/ansible/services/mangos-zero/etc/ahbot.conf b/ansible/services/mangos-zero/etc/ahbot.conf deleted file mode 100644 index 9669bf6..0000000 --- a/ansible/services/mangos-zero/etc/ahbot.conf +++ /dev/null @@ -1,265 +0,0 @@ -################################################################################ -# Auction house bot configuration # -################################################################################ - -[AhbotConf] -ConfVersion=2021010100 - -################################################################################ -# AUCTION HOUSE BOT SETTINGS -# -# AuctionHouseBot.CharacterName -# The name of the character that the bot will use to auction -# items in the Alliance, Horde and neutral auction houses. -# Default "" (No owner) -# -# AuctionHouseBot.Seller.Enabled -# Enable or disable sales functionality -# Default 0 (Disabled) -# -# AuctionHouseBot.DEBUG.Seller -# Enable or disable sales debug mode -# Default 0 (Disabled) -# -# AuctionHouseBot.Alliance.Items.Amount.Ratio -# Enable or disable sales on Alliance auction houses -# Default 100 (Enabled with 100% of items) -# -# AuctionHouseBot.Horde.Items.Amount.Ratio -# Enable or disable sales on Horde auction houses -# Default 100 (Enabled with 100% of items) -# -# AuctionHouseBot.Neutral.Items.Amount.Ratio -# Enable or disable sales on neutral auction houses -# Default 100 (Enabled with 100% of items) -# -# AuctionHouseBot.MinTime -# Minimum time for new auctions -# Default 1 (Hour) -# -# AuctionHouseBot.MaxTime -# Maximum time for new auctions -# Default 72 (Hours) -# -# AuctionHouseBot.Items.Vendor -# Offer items sold by vendors as auctions -# Default 0 -# -# AuctionHouseBot.Items.Loot -# Offer lootable/fishable items as auctions -# Default 1 -# -# AuctionHouseBot.Items.Misc -# Offer miscellaneous items as auctions (not recommended) -# Default 0 -# -# AuctionHouseBot.Bind.* -# Indicates which bonding types can be put up for auction -# No - Items that don't bind Default 1 (Allowed) -# Pickup - Items that bind on pickup Default 0 (Not Allowed) -# Equip - Items that bind on equip Default 1 (Allowed) -# Use - Items that bind on use Default 1 (Allowed) -# Quest - Quest Items Default 0 (Not Allowed) -# -# AuctionHouseBot.LockBox.Enabled -# Enable or disable sales of lock boxes -# Default 0 (Disabled) -# -# AuctionHouseBot.ItemsPerCycle.Boost -# Uses to define how many auctions to add per cycle in an uninitialized -# auction table. -# Default 75 -# -# AuctionHouseBot.ItemsPerCycle.Normal -# Uses to define how many auctions to add per cycle in an initialized -# auction table. -# Default 20 -# -# AuctionHouseBot.BuyPrice.Seller -# Enable or disable the use of BuyPrice or SellPrice to determine bid -# pricing -# Default 1 (use SellPrice) -# -# AuctionHouseBot.Alliance.Price.Ratio -# Defines the price ratio for auctions on the Alliance auction houses -# Default 200 -# -# AuctionHouseBot.Horde.Price.Ratio -# Defines the price ratio for auctions on the Horde auction houses -# Default 200 -# -# AuctionHouseBot.Neutral.Price.Ratio -# Defines the price ratio for auctions on the neutral auction houses -# Default 200 -# -# AuctionHouseBot.Items.ItemLevel.* -# Enable or disable listing items below/above this item level -# Default 0 (Disabled) -# -# AuctionHouseBot.Items.ReqLevel.* -# Enable or disable listing items below/above this required level -# Default 0 (Disabled) -# -# AuctionHouseBot.Items.ReqSkill.* -# Enable or disable listing items below/above this skill level -# Default 0 (Disabled) -# -# AuctionHouseBot.Items.Amount.* -# Defines the amount of auctions to be created for each item quality -# Values will be adjusted using faction specific settings (if specified) -# Default 0, 2000, 2500, 1500, 1000, 0, 0 -# (grey, white, green, blue, purple, orange, yellow) -# -# AuctionHouseBot.Class.* -# Defines which item classes can be put up for auction. See pre-defined -# classes in ItemClass.dbc. -# These value are preference values, maximum is 10, minimum is 0. -# Default 6,4,8,8,1,2,0,6,1,1,1,5 -# -# -# ITEM FINE TUNING -# The following are useful for limiting what character levels can benefit -# from the auction house. -# -# AuctionHouseBot.Class.Misc.Mount.ReqLevel.* -# Enable or disable listing mounts below/above this required level -# Default 0 -# -# AuctionHouseBot.Class.Misc.Mount.ReqSkill.* -# Enable or disable listing mounts below/above this skill level -# Default 0 -# -# AuctionHouseBot.Class.TradeGood.ItemLevel.* -# Enable or disable listing trade good items below/above this item level -# Default 0 -# -# AuctionHouseBot.Class.Container.ItemLevel.* -# Enable or disable listing containers below/above this item level -# Default 0 -# -# AuctionHouseBot.forceIncludeItems -# Allows to include items which would normally be ignored by filter -# settings. -# List of ids with delimiter ',' -# Default "" -# -# AuctionHouseBot.forceExcludeItems -# Allows to exclude items which would normally be included by filter -# settings. -# List of ids with delimiter ',' -# Default "" -# -################################################################################ - -AuctionHouseBot.CharacterName = "" -AuctionHouseBot.Seller.Enabled = 1 -AuctionHouseBot.DEBUG.Seller = 0 - -AuctionHouseBot.Alliance.Items.Amount.Ratio = 100 -AuctionHouseBot.Horde.Items.Amount.Ratio = 100 -AuctionHouseBot.Neutral.Items.Amount.Ratio = 100 - -AuctionHouseBot.MinTime = 1 -AuctionHouseBot.MaxTime = 72 - -AuctionHouseBot.Items.Vendor = 0 -AuctionHouseBot.Items.Loot = 1 -AuctionHouseBot.Items.Misc = 0 -AuctionHouseBot.Bind.No = 1 -AuctionHouseBot.Bind.Pickup = 0 -AuctionHouseBot.Bind.Equip = 1 -AuctionHouseBot.Bind.Use = 1 -AuctionHouseBot.Bind.Quest = 0 -AuctionHouseBot.LockBox.Enabled = 0 - -AuctionHouseBot.ItemsPerCycle.Boost = 75 -AuctionHouseBot.ItemsPerCycle.Normal = 20 -AuctionHouseBot.BuyPrice.Seller = 1 -AuctionHouseBot.Alliance.Price.Ratio = 200 -AuctionHouseBot.Horde.Price.Ratio = 200 -AuctionHouseBot.Neutral.Price.Ratio = 200 - -AuctionHouseBot.Items.ItemLevel.Min = 0 -AuctionHouseBot.Items.ItemLevel.Max = 0 -AuctionHouseBot.Items.ReqLevel.Min = 0 -AuctionHouseBot.Items.ReqLevel.Max = 0 -AuctionHouseBot.Items.ReqSkill.Min = 0 -AuctionHouseBot.Items.ReqSkill.Max = 0 - -AuctionHouseBot.Items.Amount.Grey = 0 -AuctionHouseBot.Items.Amount.White = 2000 -AuctionHouseBot.Items.Amount.Green = 2500 -AuctionHouseBot.Items.Amount.Blue = 1500 -AuctionHouseBot.Items.Amount.Purple = 1000 -AuctionHouseBot.Items.Amount.Orange = 0 -AuctionHouseBot.Items.Amount.Yellow = 0 - -AuctionHouseBot.Class.Consumable = 6 -AuctionHouseBot.Class.Container = 4 -AuctionHouseBot.Class.Weapon = 8 -AuctionHouseBot.Class.Armor = 8 -AuctionHouseBot.Class.Reagent = 1 -AuctionHouseBot.Class.Projectile = 2 -AuctionHouseBot.Class.TradeGood = 10 -AuctionHouseBot.Class.Recipe = 6 -AuctionHouseBot.Class.Quiver = 1 -AuctionHouseBot.Class.Quest = 1 -AuctionHouseBot.Class.Key = 1 -AuctionHouseBot.Class.Misc = 5 - -AuctionHouseBot.Class.Misc.Mount.ReqLevel.Min = 0 -AuctionHouseBot.Class.Misc.Mount.ReqLevel.Max = 0 -AuctionHouseBot.Class.Misc.Mount.ReqSkill.Min = 0 -AuctionHouseBot.Class.Misc.Mount.ReqSkill.Max = 0 -AuctionHouseBot.Class.TradeGood.ItemLevel.Min = 0 -AuctionHouseBot.Class.TradeGood.ItemLevel.Max = 0 -AuctionHouseBot.Class.Container.ItemLevel.Min = 0 -AuctionHouseBot.Class.Container.ItemLevel.Max = 0 - -AuctionHouseBot.forceIncludeItems = "" -AuctionHouseBot.forceExcludeItems = "" - -################################################################################ -# Buyer configuration -# -# AuctionHouseBot.Buyer.Enabled -# Enable or disable buyer mode -# Default 0 (Disabled) -# -# AuctionHouseBot.DEBUG.Buyer -# Enable or disable buyer debug mode -# Default 0 (Disabled) -# -# AuctionHouseBot.Buyer.FACTION.Enabled -# Enable or disable buyer mode for a specific faction -# -# AuctionHouseBot.Buyer.BuyPrice -# Enable or disable the use of BuyPrice or SellPrice to determine bid -# pricing -# Default 0 (use SellPrice) -# -# AuctionHouseBot.Buyer.Recheck.Interval -# This specifies the time interval (in minute) between evaluations of -# identical items. -# The lower the value is, the higher the chance for an item to be bought -# Default 20 (20min.) -# -# AuctionHouseBot.Buyer.FACTION.Chance.Ratio -# Determines the chance for buying an item. -# Default 3 (literally 1 chance by 3) -# -################################################################################ -AuctionHouseBot.Buyer.Enabled = 0 -AuctionHouseBot.DEBUG.Buyer = 0 - -AuctionHouseBot.Buyer.Alliance.Enabled = 1 -AuctionHouseBot.Buyer.Horde.Enabled = 1 -AuctionHouseBot.Buyer.Neutral.Enabled = 1 - -AuctionHouseBot.Buyer.BuyPrice = 0 - -AuctionHouseBot.Buyer.Recheck.Interval = 20 - -AuctionHouseBot.Buyer.Alliance.Chance.Ratio = 3 -AuctionHouseBot.Buyer.Horde.Chance.Ratio = 3 -AuctionHouseBot.Buyer.Neutral.Chance.Ratio = 3 diff --git a/ansible/services/mangos-zero/etc/aiplayerbot.conf b/ansible/services/mangos-zero/etc/aiplayerbot.conf deleted file mode 100644 index 2bd0e13..0000000 --- a/ansible/services/mangos-zero/etc/aiplayerbot.conf +++ /dev/null @@ -1,164 +0,0 @@ -########################################## -# MANGOS Ai Playerbot Configuration file # -########################################## - -[AiPlayerbotConf] -ConfVersion=2010102201 - -# Enable or disable AI Playerbot -AiPlayerbot.Enabled = 0 - -# Warrior -AiPlayerbot.RandomClassSpecProbability.1.0 = 20 -AiPlayerbot.RandomClassSpecProbability.1.1 = 30 -AiPlayerbot.RandomClassSpecProbability.1.2 = 50 -# Paladin -AiPlayerbot.RandomClassSpecProbability.2.0 = 20 -AiPlayerbot.RandomClassSpecProbability.2.1 = 50 -AiPlayerbot.RandomClassSpecProbability.2.2 = 30 -# Hunter -AiPlayerbot.RandomClassSpecProbability.3.0 = 25 -AiPlayerbot.RandomClassSpecProbability.3.1 = 50 -AiPlayerbot.RandomClassSpecProbability.3.2 = 25 -# Rogue -AiPlayerbot.RandomClassSpecProbability.4.0 = 40 -AiPlayerbot.RandomClassSpecProbability.4.1 = 50 -AiPlayerbot.RandomClassSpecProbability.4.2 = 10 -# Priest -AiPlayerbot.RandomClassSpecProbability.5.0 = 40 -AiPlayerbot.RandomClassSpecProbability.5.1 = 40 -AiPlayerbot.RandomClassSpecProbability.5.2 = 20 -# Shaman -AiPlayerbot.RandomClassSpecProbability.7.0 = 10 -AiPlayerbot.RandomClassSpecProbability.7.1 = 45 -AiPlayerbot.RandomClassSpecProbability.7.2 = 45 -# Mage -AiPlayerbot.RandomClassSpecProbability.8.0 = 20 -AiPlayerbot.RandomClassSpecProbability.8.1 = 10 -AiPlayerbot.RandomClassSpecProbability.8.2 = 70 -# Warlock -AiPlayerbot.RandomClassSpecProbability.9.0 = 33 -AiPlayerbot.RandomClassSpecProbability.9.1 = 33 -AiPlayerbot.RandomClassSpecProbability.9.2 = 33 -# Druid -AiPlayerbot.RandomClassSpecProbability.11.0 = 10 -AiPlayerbot.RandomClassSpecProbability.11.1 = 45 -AiPlayerbot.RandomClassSpecProbability.11.2 = 45 - -# -# All other parameters are optional but can be changed by uncommenting them here -# - -# Prefix for bot chat commands (e.g. follow, stay) -AiPlayerbot.CommandPrefix = ~ - -# Max AI iterations per tick -#AiPlayerbot.IterationsPerTick = 10 - -# Allow/deny bots from your guild -#AiPlayerbot.AllowGuildBots = 1 - -# Delay between two short-time spells cast -#AiPlayerbot.GlobalCooldown = 500 - -# Max wait time when moving -#AiPlayerbot.MaxWaitForMove = 5000 - -# Delay between two bot actions -#AiPlayerbot.ReactDelay = 100 - -# Distances -#AiPlayerbot.SightDistance = 50.0 -#AiPlayerbot.SpellDistance = 30.0 -#AiPlayerbot.ReactDistance = 150.0 -#AiPlayerbot.GrindDistance = 100.0 -#AiPlayerbot.LootDistance = 20.0 -#AiPlayerbot.FleeDistance = 20.0 -#AiPlayerbot.TooCloseDistance = 7.0 -#AiPlayerbot.MeleeDistance = 1.0 -#AiPlayerbot.FollowDistance = 1.5 -#AiPlayerbot.WhisperDistance = 6000.0 -#AiPlayerbot.ContactDistance = 0.5 - -# Bot can flee for enemy -#AiPlayerbot.FleeingEnabled = 1 - -# Health/Mana levels -#AiPlayerbot.CriticalHealth = 25 -#AiPlayerbot.LowHealth = 45 -#AiPlayerbot.MediumHealth = 65 -#AiPlayerbot.AlmostFullHealth = 85 -#AiPlayerbot.LowMana = 15 -#AiPlayerbot.MediumMana = 40 - -# Enable random bot system -#AiPlayerbot.RandomBotAutologin = 1 - -# Random bot default strategies (applied after defaults) -#AiPlayerbot.RandomBotCombatStrategies = +dps,+attack weak -#AiPlayerbot.RandomBotNonCombatStrategies = +grind,+move random,+loot - -# Create random bot characters automatically -#AiPlayerbot.RandomBotAutoCreate = 1 - -# Random bot count -#AiPlayerbot.MinRandomBots = 50 -#AiPlayerbot.MaxRandomBots = 200 -#AiPlayerbot.RandomBotMinLevel = 1 -#AiPlayerbot.RandomBotMaxLevel = 255 (ignored if more than MaxPlayerLevel mangosd.conf value) - -# Accounts to create for random bots -#AiPlayerbot.RandomBotAccountPrefix = rndbot -#AiPlayerbot.RandomBotAccountCount = 50 - -# Delete all random bot accounts -#AiPlayerbot.DeleteRandomBotAccounts = 0 - -# Maps to teleport random bots -#AiPlayerbot.RandomBotMaps = 0,1,530,571 - -# Change random bot has lower gear -#AiPlayerbot.RandomGearLoweringChance = 0.15 - -# Chance random bot has max level on first randomize -#AiPlayerbot.RandomBotMaxLevelChance = 0.4 - -# Quest items to leave (do not destroy) -#AiPlayerbot.RandomBotQuestItems = 6948,5175,5176,5177,5178 - -# Spells every random bot will learn on randomize (54197 - cold weather flying) -#AiPlayerbot.RandomBotSpellIds = 54197 - -# Enable LFG for random bots -#AiPlayerbot.RandomBotJoinLfg = 1 - -# Level diff between random bots and nearby creatures for random teleports -AiPlayerbot.RandomBotTeleLevel = 3 - -# Intervals -#AiPlayerbot.RandomBotUpdateInterval = 60 -#AiPlayerbot.RandomBotCountChangeMinInterval = 86400 -#AiPlayerbot.RandomBotCountChangeMaxInterval = 259200 -#AiPlayerbot.MinRandomBotInWorldTime = 7200 -#AiPlayerbot.MaxRandomBotInWorldTime = 1209600 -#AiPlayerbot.MinRandomBotRandomizeTime = 7200 -#AiPlayerbot.MaxRandomRandomizeTime = 1209600 -#AiPlayerbot.MinRandomBotsPerInterval = 50 -#AiPlayerbot.MaxRandomBotsPerInterval = 100 -#AiPlayerbot.MinRandomBotsPriceChangeInterval = 7200 -#AiPlayerbot.MaxRandomBotsPriceChangeInterval = 172800 - -# Log on all random bots on start -#AiPlayerbot.RandomBotLoginAtStartup = 1 - -# How far random bots are teleported after death -#AiPlayerbot.RandomBotTeleportDistance = 1000 - -# Debug switches -#AiPlayerbot.SpellDump = 0 -#AiPlayerbot.LogInGroupOnly = 1 -#AiPlayerbot.LogValuesPerTick = 0 -#AiPlayerbot.RandomChangeMultiplier = 1 - -# Command server port, 0 - disabled -#AiPlayerbot.CommandServerPort = 8888 diff --git a/ansible/services/mangos-zero/etc/mangosd.conf b/ansible/services/mangos-zero/etc/mangosd.conf deleted file mode 100644 index 00b2320..0000000 --- a/ansible/services/mangos-zero/etc/mangosd.conf +++ /dev/null @@ -1,1762 +0,0 @@ -################################################################################ -# World server configuration # -################################################################################ - -[MangosdConf] -ConfVersion=2023053000 - -################################################################################ -# CONNECTIONS AND DIRECTORIES -# -# RealmID -# RealmID must match the realmlist inside the realmd database -# -# DataDir -# Data directory setting. -# Important: DataDir needs to be quoted, as it is a string which may contain space characters. -# Example: "/home/mangos/mangos/zero/build/install/share/mangos" -# -# LogsDir -# Logs directory setting. -# Important: Logs dir must exists, or all logs need to be disabled -# Default: "" - no log directory prefix. if used log names aren't absolute paths -# then logs will be stored in the current directory of the running program. -# -# -# LoginDatabaseInfo -# WorldDatabaseInfo -# CharacterDatabaseInfo -# Database connection settings for the world server. -# Default: -# ---MYSQL--- -# hostname;port;username;password;database -# .;somenumber;username;password;database - use named pipes at Windows -# Named pipes: mySQL required adding "enable-named-pipe" to [mysqld] section my.ini -# .;/path/to/unix_socket;username;password;database - use Unix sockets at Unix/Linux -# ---PGSQL--- -# hostname;port;username;password;database -# .;/path/to/unix_socket/DIRECTORY or . for default path;username;password;database - use Unix sockets at Unix/Linux -# -# LoginDatabaseConnections -# WorldDatabaseConnections -# CharacterDatabaseConnections -# Amount of connections to database which will be used for SELECT queries. Maximum 16 connections per database. -# Please, note, for data consistency only one connection for each database is used for transactions and async SELECTs. -# So formula to find out how many connections will be established: -# X = LoginDatabaseConnections + WorldDatabaseConnections + CharacterDatabaseConnections + 1 -# Default: 1 connection for SELECT statements -# -# MaxPingTime -# Settings for maximum database-ping interval (minutes between pings) -# -# WorldServerPort -# Port on which the server will listen -# -# BindIP -# Bind World Server to IP/hostname -# This option is useful for running multiple worldd/realmd instances -# on different IP addresses using default ports. -# DO NOT CHANGE THIS UNLESS YOU _REALLY_ KNOW WHAT YOU'RE DOING -# -################################################################################ - -RealmID = 1 -DataDir = "../etc" -DataDir = "/home/mangos/mangos/zero/gamedata" -LogsDir = "" -LoginDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};realmd" -WorldDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};mangos0" -CharacterDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};character0" -LoginDatabaseConnections = 1 -WorldDatabaseConnections = 1 -CharacterDatabaseConnections = 1 -MaxPingTime = 5 -WorldServerPort = 8085 -BindIP = "0.0.0.0" - -################################################################################ -# PERFORMANCE SETINGS -# -# UseProcessors -# Used processors mask for multi-processors system (Used only at Windows) -# Default: 0 (selected by OS) -# number (bitmask value of selected processors) -# -# ProcessPriority -# Process priority setting (Used only at Windows) -# Default: 1 (HIGH) -# 0 (Normal) -# -# Compression -# Compression level for update packages sent to client (1..9) -# Default: 1 (speed) -# 9 (best compression) -# -# PlayerLimit -# Maximum number of players in the world. Excluding Mods, GM's and Admins -# Default: 100 -# 0 (for infinite players) -# -1 (for Mods, GM's and Admins only) -# -2 (for GM's and Admins only) -# -3 (for Admins only) -# -# SaveRespawnTimeImmediately -# Save respawn time for creatures at death and for gameobjects at use/open -# Default: 1 (save creature/gameobject respawn time without waiting grid unload) -# 0 (save creature/gameobject respawn time at grid unload) -# -# MaxOverspeedPings -# Maximum overspeed ping count before player kick (minimum is 2, 0 used to disable check) -# Default: 2 -# -# GridUnload -# Unload grids (if you have lot memory you can disable it to speed up player move to new grids second time) -# Default: 1 (unload grids) -# 0 (do not unload grids) -# -# LoadAllGridsOnMaps -# Load grids of maps at server startup (if you have lot memory you can try it to have a living world always loaded) -# This also allow ALL creatures on the given maps to update their grid without any player around. -# Default: "" (don't load all grids at startup) -# "mapId1[,mapId2[..]]" (DO load all grids on the given maps- Experimental and very resource consumming) -# -# GridCleanUpDelay -# Grid clean up delay (in milliseconds) -# Default: 300000 (5 min) -# -# MapUpdateInterval -# Map update interval (in milliseconds) -# Default: 100 -# -# MapUpdateThreads -# Number of map update threads to run -# Default: 2 -# -# ChangeWeatherInterval -# Weather update interval (in milliseconds) -# Default: 600000 (10 min) -# -# PlayerSave.Interval -# Player save interval (in milliseconds) -# Default: 900000 (15 min) -# -# PlayerSave.Stats.MinLevel -# Minimum level for saving character stats for external usage in database -# Default: 0 (do not save character stats) -# 1+ (save stats for characters with level 1+) -# -# PlayerSave.Stats.SaveOnlyOnLogout -# Enable/Disable saving of character stats only on logout -# Default: 1 (only save on logout) -# 0 (save on every player save) -# -# vmap.enableLOS -# vmap.enableHeight -# Enable/Disable VMaps support for line of sight and height calculation -# You need to extract the VMaps in order to enable those options -# Default: 1 (enable) -# 0 (disable) -# -# vmap.ignoreSpellIds -# These spells are ignored for LoS calculation -# List of ids with delimiter ',' -# -# vmap.enableIndoorCheck -# Enable/Disable VMap based indoor check to remove outdoor-only auras (mounts etc.). -# Requires VMaps enabled to work. -# Default: 1 (Enabled) -# 0 (Disabled) -# -# DetectPosCollision -# Check final move position, summon position, etc for visible collision with other objects or -# wall (wall only if vmaps are enabled) -# Default: 1 (enable, requires more CPU power) -# 0 (disable, not so nice position selection but will require less CPU power) -# -# TargetPosRecalculateRange -# Max distance from movement target point (+moving unit size) and targeted object (+size) -# after that new target movement point calculated. Max: melee attack range (5), min: contact range (0.5) -# More distance let have better performence, less distance let have more sensitive reaction at target move. -# Default: 1.5 -# -# mmap.enabled -# Enable/Disable pathfinding using mmaps -# Default: 1 (enable) -# 0 (disable) -# -# mmap.ignoreMapIds -# Disable mmap pathfinding on the listed maps. -# List of map ids with delimiter ',' -# -# UpdateUptimeInterval -# Update realm uptime period in minutes (for save data in 'uptime' table). Must be > 0 -# Default: 10 (minutes) -# -# MaxCoreStuckTime -# Periodically check if the process got freezed, if this is the case force crash after the specified -# amount of seconds. Must be > 0. Recommended > 10 secs if you use this. -# Default: 0 (Disabled) -# -# AddonChannel -# Permit/disable the use of the addon channel through the server -# (some client side addons can stop work correctly with disabled addon channel) -# Default: 1 (permit addon channel) -# 0 (do not permit addon channel) -# -# CleanCharacterDB -# Perform character db cleanups on start up -# Default: 1 (Enable) -# 0 (Disabled) -# -# MaxWhoListReturns -# Set the max number of players returned in the /who list and interface (0 means unlimited) -# Default: 49 - (stable) -# -################################################################################ - -UseProcessors = 0 -ProcessPriority = 1 -Compression = 1 -PlayerLimit = 100 -SaveRespawnTimeImmediately = 1 -MaxOverspeedPings = 2 -GridUnload = 1 -LoadAllGridsOnMaps = "" -GridCleanUpDelay = 300000 -MapUpdateInterval = 100 -MapUpdateThreads = 2 -ChangeWeatherInterval = 600000 -PlayerSave.Interval = 900000 -PlayerSave.Stats.MinLevel = 0 -PlayerSave.Stats.SaveOnlyOnLogout = 1 -vmap.enableLOS = 1 -vmap.enableHeight = 1 -vmap.ignoreSpellIds = "7720" -vmap.enableIndoorCheck = 1 -DetectPosCollision = 1 -TargetPosRecalculateRange = 1.5 -mmap.enabled = 1 -mmap.ignoreMapIds = "" -UpdateUptimeInterval = 10 -MaxCoreStuckTime = 0 -AddonChannel = 1 -CleanCharacterDB = 1 -MaxWhoListReturns = 49 - -################################################################################ -# SERVER LOGGING -# -# LogSQL -# Enable logging of GM commands - all SQL code will be written to a log file -# All commands are written to a file: YYYY-MM-DD_logSQL.sql -# If a new day starts (00:00:00), a new file is created - the old file will not be deleted. -# Default: 1 - Write SQL code to logfile -# 0 - Do not log -# -# PidFile -# World daemon PID file -# Default: "" - do not create PID file -# "./worldd.pid" - create PID file (recommended name) -# -# LogLevel -# Server console level of logging -# 0 = Minimum; 1 = Basic&Error; 2 = Detail; 3 = Full/Debug -# Default: 3 -# -# LogTime -# Include time in server console output [hh:mm:ss] -# Default: 0 (no time) -# 1 (print time) -# -# LogFile -# Logfile name -# Default: "world-server.log" -# "" - Empty name disable creating log file -# -# LogTimestamp -# Logfile with timestamp of server start in name -# Default: 0 - no timestamp in name -# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext -# -# LogFileLevel -# Server file level of logging -# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug -# Default: 0 -# -# LogFilter_CreatureMoves -# LogFilter_TransportMoves -# LogFilter_PlayerMoves -# LogFilter_VisibilityChanges -# LogFilter_Weather -# LogFilter_DbStrictedCheck -# LogFilter_SQLText -# LogFilter_Pathfinding -# LogFilter_MapsLoading -# LogFilter_EventAiDev -# Log filters (active by default - meaning: the filter is active, hence the log is not displayed) -# Default: 1 - not include with any log level -# 0 - include in log if log level permit -# -# LogFilter_PeriodicAffects -# LogFilter_AIAndMovegens -# LogFilter_PlayerStats -# LogFilter_Damage -# LogFilter_Combat -# LogFilter_SpellCast -# Log filters (disabled by default, mostly debug only output affected cases) -# Default: 0 - include in log if log level permit -# 1 - not include with any log level -# -# LogWhispers -# Log whispers between players to database, character.character_whispers -# 0 - Don't log anything -# Default: 1 - Only log GM tickets responses and the following conversation until closing the ticket -# 2 - Log all whispers -# -# WorldLogFile -# Packet logging file for the worldserver -# Default: "" - no log file created -# "world.log" - recommended name to create a log file -# -# WorldLogTimestamp -# Logfile with timestamp of server start in name -# Default: 0 - no timestamp in name -# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext -# -# DBErrorLogFile -# Log file of DB errors detected at server run -# Default: "DBErrors.log" -# -# ElunaErrorLogFile -# Log file of Eluna errors detected at server run -# Default: "ElunaErrors.log" -# -# EventAIErrorLogFile -# Log file of EventAI errors detected at server run -# Default: "EventAIErrors.log" -# -# CharLogFile -# Character operations logfile name -# Default: "Char.log" -# "" - Empty name disable creating log file -# -# CharLogTimestamp -# Logfile with timestamp of server start in name -# Default: 0 - no timestamp in name -# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext -# -# CharLogDump -# Write character dump before deleting in Char.log -# For restoration, cut character data from log starting from -# line == START DUMP == to line == END DUMP == (without its) in file and load it using loadpdump command -# Default: 0 - don't include dumping chars to log -# 1 - include dumping chars to log -# -# GmLogFile -# GM Log file of gm commands -# Default: "" (Disable) -# -# GmLogTimestamp -# GM Logfile with timestamp of server start in name -# Default: 0 - no timestamp in name -# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext -# -# GmLogPerAccount -# GM Logfiles with GM account id (Note: logs not created if GmLogFile not set) -# Default: 0 - add gm log data to single log file -# 1 - add gm log data to account specific log files with name -# in form Logname_#ID_YYYY-MM-DD_HH-MM-SS.Ext -# or form Logname_#ID.Ext -# -# RaLogFile -# Log file of RA commands -# Default: "Ra.log" -# "" - Empty name for disable -# -# WardenLogFile -# Log file for warden-related output -# Default: "" - no log file created -# "warden.log" - recommended name to create a log file -# -# LogColors -# Color for messages (format "normal_color details_color debug_color error_color") -# Colors: 0 - BLACK, 1 - RED, 2 - GREEN, 3 - BROWN, 4 - BLUE, 5 - MAGENTA, 6 - CYAN, 7 - GREY, -# 8 - YELLOW, 9 - LRED, 10 - LGREEN, 11 - LBLUE, 12 - LMAGENTA, 13 - LCYAN, 14 - WHITE -# Default: "" - none colors -# Example: "13 7 11 9" -# -################################################################################ - -LogSQL = 1 -PidFile = "" -LogLevel = 3 -LogTime = 0 -LogFile = "world-server.log" -LogTimestamp = 0 -LogFileLevel = 0 -LogFilter_TransportMoves = 1 -LogFilter_CreatureMoves = 1 -LogFilter_VisibilityChanges = 1 -LogFilter_Weather = 1 -LogFilter_DbStrictedCheck = 1 -LogFilter_Pathfinding = 1 -LogFilter_MapsLoading = 1 -LogFilter_EventAiDev = 1 -LogFilter_PeriodicAffects = 0 -LogFilter_PlayerMoves = 1 -LogFilter_SQLText = 1 -LogFilter_AIAndMovegens = 0 -LogFilter_PlayerStats = 0 -LogFilter_Damage = 0 -LogFilter_Combat = 0 -LogFilter_SpellCast = 0 -LogWhispers = 1 -WorldLogFile = "world-packets.log" -WorldLogTimestamp = 0 -DBErrorLogFile = "world-database.log" -ElunaErrorLogFile = "ElunaErrors.log" -EventAIErrorLogFile = "world-eventai.log" -CharLogFile = "world-characters.log" -CharLogTimestamp = 0 -CharLogDump = 0 -GmLogFile = "world-gamemaster.log" -GmLogTimestamp = 0 -GmLogPerAccount = 0 -RaLogFile = "world-remote-access.log" -WardenLogFile = "warden.log" -WardenLogTimestamp = 0 -LogColors = "13 7 11 9" -SD3ErrorLogFile = "scriptdev3-errors.log" - -################################################################################ -# SERVER SETTINGS -# -# GameType -# Server realm style -# 0 = NORMAL; 1 = PVP; 4 = NORMAL; 6 = RP; 8 = RPPVP -# also custom type: 16 FFA_PVP (free for all pvp mode like arena PvP in all zones except rest -# activated places and sanctuaries) -# -# RealmZone -# Server realm zone (set allowed alphabet in character names/etc). See also Strict*Names options. -# -# 1 Development - any language (Default) -# 2 United States - extended-Latin -# 3 Oceanic - extended-Latin -# 4 Latin America - extended-Latin -# 5 Tournament - basic-Latin at create, any at login -# 6 Korea - East-Asian -# 7 Tournament - basic-Latin at create, any at login -# 8 English - extended-Latin -# 9 German - extended-Latin -# 10 French - extended-Latin -# 11 Spanish - extended-Latin -# 12 Russian - Cyrillic -# 13 Tournament - basic-Latin at create, any at login -# 14 Taiwan - East-Asian -# 15 Tournament - basic-Latin at create, any at login -# 16 China - East-Asian -# 17 CN1 - basic-Latin at create, any at login -# 18 CN2 - basic-Latin at create, any at login -# 19 CN3 - basic-Latin at create, any at login -# 20 CN4 - basic-Latin at create, any at login -# 21 CN5 - basic-Latin at create, any at login -# 22 CN6 - basic-Latin at create, any at login -# 23 CN7 - basic-Latin at create, any at login -# 24 CN8 - basic-Latin at create, any at login -# 25 Tournament - basic-Latin at create, any at login -# 26 Test Server - any language -# 27 Tournament - basic-Latin at create, any at login -# 28 QA Server - any language -# 29 CN9 - basic-Latin at create, any at login -# -# DBC.Locale -# DBC Language Settings -# 0 = English; 1 = Korean; 2 = French; 3 = German; 4 = Chinese; 5 = Taiwanese; 6 = Spanish; -# 255 = Auto Detect (Default) -# -# DeclinedNames -# Allow russian clients to set and use declined names -# Default: 0 - do not use declined names, except when the Russian RealmZone is set -# 1 - use declined names -# -# StrictPlayerNames -# Limit player name to language specific symbols set, not allow create characters, and set rename request and disconnect at not allowed symbols name -# Default: 0 disable (but limited server timezone dependent client check) -# 1 basic latin characters (strict) -# 2 realm zone specific (strict). See RealmZone setting. -# Note: In any case if you want correctly see character name at client this client must have apporopriate fonts -# (included in client by default, with active official localization or custom localization fonts in clientdir/Fonts). -# 3 basic latin characters + server timezone specific -# -# StrictCharterNames -# Limit guild team charter names to language specific symbols set, not allow create charters with not allowed symbols in name -# Default: 0 disable -# 1 basic latin characters (strict) -# 2 realm zone specific (strict). See RealmZone setting. -# Note: In any case if you want correctly see character name at client this client must have apporopriate fonts -# (included in client by default, with active official localization or custom localization fonts in clientdir/Fonts). -# 3 basic latin characters + server timezone specific -# -# StrictPetNames -# Limit pet names to language specific symbols set -# Default: 0 disable -# 1 basic latin characters (strict) -# 2 realm zone specific (strict). See RealmZone setting. -# Note: In any case if you want correctly see character name at client this client must have apporopriate fonts -# (included in client by default, with active official localization or custom localization fonts in clientdir/Fonts). -# 3 basic latin characters + server timezone specific -# -# MinPlayerName -# Minimal name length (1..12) -# Default: 2 -# -# MinCharterName -# Minimal name length (1..24) -# Default: 2 -# -# MinPetName -# Minimal name length (1..12) -# Default: 2 -# -# CharactersCreatingDisabled -# Disable characters creating for specific team or any (non-player accounts not affected) -# Default: 0 - enabled -# 1 - disabled only for Alliance -# 2 - disabled only for Horde -# 3 - disabled for both teams -# -# CharactersPerAccount -# Limit numbers of characters per account (at all realms). -# Note: this setting limits the character creating at the _current_ realm base at characters amount at all realms -# Default: 50 -# The number must be >= CharactersPerRealm -# -# CharactersPerRealm -# Limit numbers of characters for account at realm -# Default: 10 (client limitation) -# The number must be between 1 and 10 -# -# SkipCinematics -# Disable in-game script movie at first character's login(allows to prevent buggy intro in case of custom start location coordinates) -# Default: 0 - show intro for each new character -# 1 - show intro only for first character of selected race -# 2 - disable intro in all cases -# -# MaxPlayerLevel -# Max level that can be reached by a player for experience (in range from 1 to 100). -# Change not recommended -# Default: 60 -# -# StartPlayerLevel -# Staring level that have character at creating (in range 1 to MaxPlayerLevel) -# Default: 1 -# -# StartPlayerMoney -# Amount of money that new players will start with. -# If you want to start with one silver, use for example 100 (100 copper = 1 silver) -# Default: 0 -# -# MaxHonorPoints -# Max honor points that player can have. -# Default: 75000 -# -# StartHonorPoints -# Amount of honor that new players will start with -# Default: 0 -# -# MinHonorKills -# Min kills that players must obtain to enter in weekly honor calculation -# Default: 15 -# -# MaintenanceDay -# The day of the week is performed server maintenance ( currently used for Honor distribution ) -# range (0..6): 0 is the first day of the week (normally sunday), 6 is the latest -# Default: 3 (Wednesday in EU) -# -# InstantLogout -# Enable or disable instant logout for security level (0..4) or high (NOT in combat/while dueling/while falling) -# Default: 1 (Mods/GMs/Admins) -# -# MountCost -# The cost in copper of the regular mounts usually purchased at level 40. -# Default: 100000 (10g) -# -# TrainMountCost -# The cost in copper for training the apprentice riding skill for regular mounts usually purchased at level 40. -# Default: 900000 (90g) -# -# MinTrainMountLevel -# The minimal level at which players can train the apprentice riding skill for regular mounts. -# Default: 40 (level 40) -# -# EpicMountCost -# The cost in copper for epic mounts usually purchased at level 60. -# Default: 1000000 (100g) -# -# TrainEpicMountCost -# The cost in copper for training the journeyman riding skill for epic mounts usually purchased at level 60. -# Default: 9000000 (900g) -# -# MinTrainEpicMountLevel -# The minimal level at which players can train the journeyman riding skill for epic mounts. -# Default: 60 (level 60) -# -# AllFlightPaths -# Players will start with all flight paths (Note: ALL flight paths, not only player's team) -# Default: 0 (true) -# 1 (false) -# -# InstantFlightPaths -# Flight paths will take players to their destination instantly, instead of making them wait to fly there. -# Default: 0 (false) -# 1 (true) -# -# AlwaysMaxSkillForLevel -# Players will automatically gain max level dependent (weapon/defense) skill when logging in, leveling up etc. -# Default: 0 (false) -# 1 (true) -# -# ActivateWeather -# Activate weather system -# Default: 1 (true) -# 0 (false) -# -# CastUnstuck -# Allow cast Unstuck spell at .start or client Help option use -# Default: 1 (true) -# 0 (false) -# -# MaxSpellCastsInChain -# Max amount triggered spell casts in chain by one caster, prevent stack overflow crash -# Too Low value will make some correct triggered casts fail -# 0 (no limit) -# Default: 20 -# -# RabbitDay -# Set to Rabbit Day (date in unix time), only the day and month are considered, the year is not important -# Default: 0 (off) -# Suggested: 954547200 (April 1st, 2000) -# -# Instance.IgnoreLevel -# Ignore level requirement to enter instance -# Default: 0 (false) -# 1 (true) -# -# Instance.IgnoreRaid -# Ignore raid requirement to enter instance -# Default: 0 (false) -# 1 (true) -# -# Instance.ResetTimeHour -# The hour of the day (0-23) when the global instance resets occur. -# Default: 4 -# -# Instance.UnloadDelay -# Unload the instance map from memory after some time if no players are inside. -# Default: 1800000 (miliseconds, i.e 30 minutes) -# 0 (instance maps are kept in memory until they are reset) -# -# Quests.LowLevelHideDiff -# Quest level difference to hide for player low level quests: -# if player_level > quest_level + LowLevelQuestsHideDiff then quest "!" mark not show for quest giver -# Default: 4 -# -1 (show all available quests marks) -# -# Quests.HighLevelHideDiff -# Quest level difference to hide for player high level quests: -# if player_level < quest_min_level - HighLevelQuestsHideDiff then quest "!" mark not show for quest giver -# Default: 7 -# -1 (show all available quests marks) -# -# Quests.IgnoreRaid -# Non-raid quests allowed in raids -# Default: 0 (not allowed) -# 1 (allowed) -# -# Guild.PetitionCost -# The cost for guild petition charter (in copper) -# Default: 1000 (10 silver) -# -# Guild.EventLogRecordsCount -# Count of guild event log records stored in guild_eventlog table -# Increase to store more guild events in table, minimum is 100 -# You can set it to very high value to prevent oldest guild events to be rewritten by latest guild events - but it can slow down performance -# Default: 100 -# -# TimerBar.Fatigue.GMLevel -# Disable/enable fatigue for security level (0..4) or high -# Default: 4 (None) -# -# TimerBar.Fatigue.Max -# Fatigue max timer value (in secs) -# Default: 60 (1 minute) -# 0 (instant death) -# -# TimerBar.Breath.GMLevel -# Disable/enable waterbreathing for security level (0..4) or high -# Default: 4 (None) -# -# TimerBar.Breath.Max -# Waterbreathing max timer value (in secs) -# Default: 180 -# 0 (instant underwater breathing damage start) -# -# TimerBar.Fire.GMLevel -# Disable/enable lava fire damage for security level (0..4) or high -# Default: 4 (None) -# -# TimerBar.Fire.Max -# Lava damage delay max timer value (in secs) -# Default: 1 -# 0 (instant in lava damage start) -# -# MaxPrimaryTradeSkill -# Max count that player can learn the primary trade skill. -# Default: 2 -# Max : 10 -# -# MinPetitionSigns -# Min signatures count to creating guild (0..9). -# Default: 9 -# -# MaxGroupXPDistance -# Max distance to creature for group memeber to get XP at creature death. -# Default: 74 -# -# MailDeliveryDelay -# Mail delivery delay time for item sending -# Default: 3600 sec (1 hour) -# -# MassMailer.SendPerTick -# Max amount mail send each tick from mails list scheduled for mass mailer proccesing. -# More mails increase server load but speedup mass mail proccess. Normal tick length: 50 msecs, so 20 ticks in sec and 200 mails in sec by default. -# Default: 10 -# -# PetUnsummonAtMount -# Permanent pet will unsummoned at player mount -# Default: 0 - not unsummon -# 1 - unsummon for any mount -# -# Event.Announce -# Default: 0 (false) -# 1 (true) -# -# BeepAtStart -# Beep at mangosd start finished (mostly work only at Unix/Linux systems) -# Default: 1 (true) -# 0 (false) -# -# ShowProgressBars -# Control show progress bars for load steps at server startup -# Default: 1 (true) -# 0 (false) -# -# WaitAtStartupError -# After startup error report wait or some time before continue (and possible close console window) -# -1 (wait until press) -# Default: 10 (wait 10 seconds before closing) -# 0 (not wait) -# N (>0, wait N secs) -# -# PlayerCommands -# Should player chat be parsed for GM commands. -# Default: 0 (ignore commands) -# 1 (parse commands) -# -# Motd -# Message of the Day. Displayed at worldlogin for every user ('@' for a newline). -# -# AutoBroadcast -# Timer interval (in seconds) for automatic server announcements (autobroadcasts). Zero value means AB is disabled -# 0 (AB is disabled) -# Default: 600 (AB every 10 minutes) -# N (>0, AB every N seconds) -################################################################################ - -GameType = 4 -RealmZone = 1 -DBC.Locale = 255 -DeclinedNames = 0 -StrictPlayerNames = 0 -StrictCharterNames = 0 -StrictPetNames = 0 -MinPlayerName = 2 -MinCharterName = 2 -MinPetName = 2 -CharactersCreatingDisabled = 0 -CharactersPerAccount = 50 -CharactersPerRealm = 10 -SkipCinematics = 0 -MaxPlayerLevel = 60 -StartPlayerLevel = 1 -StartPlayerMoney = 0 -MaxHonorPoints = 75000 -StartHonorPoints = 0 -MinHonorKills = 15 -MaintenanceDay = 3 -InstantLogout = 1 -MountCost = 100000 -TrainMountCost = 900000 -MinTrainMountLevel = 40 -EpicMountCost = 1000000 -TrainEpicMountCost = 9000000 -MinTrainEpicMountLevel = 60 -AllFlightPaths = 0 -InstantFlightPaths = 0 -AlwaysMaxSkillForLevel = 0 -ActivateWeather = 1 -CastUnstuck = 1 -MaxSpellCastsInChain = 20 -RabbitDay = 0 -Instance.IgnoreLevel = 0 -Instance.IgnoreRaid = 0 -Instance.ResetTimeHour = 4 -Instance.UnloadDelay = 1800000 -Quests.LowLevelHideDiff = 4 -Quests.HighLevelHideDiff = 7 -Quests.IgnoreRaid = 0 -Guild.PetitionCost = 1000 -Guild.EventLogRecordsCount = 100 -TimerBar.Fatigue.GMLevel = 4 -TimerBar.Fatigue.Max = 60 -TimerBar.Breath.GMLevel = 4 -TimerBar.Breath.Max = 60 -TimerBar.Fire.GMLevel = 4 -TimerBar.Fire.Max = 1 -MaxPrimaryTradeSkill = 2 -MinPetitionSigns = 9 -MaxGroupXPDistance = 74 -MailDeliveryDelay = 3600 -MassMailer.SendPerTick = 10 -PetUnsummonAtMount = 0 -Event.Announce = 0 -BeepAtStart = 1 -ShowProgressBars = 1 -WaitAtStartupError = 10 -PlayerCommands = 0 -Motd = "Welcome to Mangos Zero" -AutoBroadcast = 0 - -################################################################################ -# PLAYER INTERACTION -# -# AllowTwoSide.Accounts -# Allow accounts to create characters in both teams in any game type. -# Default: 0 (Not allowed) -# 1 (Allowed) -# -# AllowTwoSide.Interaction.Chat -# AllowTwoSide.Interaction.Channel -# AllowTwoSide.Interaction.Group -# AllowTwoSide.Interaction.Guild -# AllowTwoSide.Interaction.Trade -# AllowTwoSide.Interaction.Auction -# AllowTwoSide.Interaction.Mail -# Allow or not common :chat(say,yell); channel(chat); group(join); guild(join); trade with different team; -# merge all auction houses for players from different teams; send mail to different team. -# Default: 0 (Not allowed) -# 1 (Allowed) -# -# AllowTwoSide.WhoList -# Allow show player from both team in who list. -# Default: 0 (Not allowed) -# 1 (Allowed) -# -# AllowTwoSide.AddFriend -# Allow adding friends from other team in friend list. -# Default: 0 (Not allowed) -# 1 (Allowed) -# -# TalentsInspecting -# Allow other players see character talents in inspect dialog (Characters in Gamemaster mode can -# inspect talents always) -# Default: 1 (allow) -# 0 (not allow) -# -################################################################################ - -AllowTwoSide.Accounts = 0 -AllowTwoSide.Interaction.Chat = 0 -AllowTwoSide.Interaction.Channel = 0 -AllowTwoSide.Interaction.Group = 0 -AllowTwoSide.Interaction.Guild = 0 -AllowTwoSide.Interaction.Trade = 0 -AllowTwoSide.Interaction.Auction = 0 -AllowTwoSide.Interaction.Mail = 0 -AllowTwoSide.WhoList = 0 -AllowTwoSide.AddFriend = 0 -TalentsInspecting = 1 - -################################################################################ -# CREATURE AND GAMEOBJECT SETTINGS -# -# ThreatRadius -# Radius for creature to evade after being pulled away from combat start point -# If ThreatRadius is less than creature aggro radius then aggro radius will be used -# Default: 100 yards -# -# Rate.Creature.Aggro -# Aggro radius percent or off. -# Default: 1 - 100% -# 1.5 - 150% -# 0 - off (0%) -# -# CreatureRespawnAggroDelay -# The delay between when a creature spawns and when it can be aggroed by nearby movement. -# Default: 5000 (5s) -# -# CreatureFamilyFleeAssistanceRadius -# Radius which creature will use to seek for a near creature for assistance. Creature will flee to this creature. -# Default: 30 -# 0 - off -# -# CreatureFamilyAssistanceRadius -# Radius which creature will use to call assistance without moving -# Default: 10 -# 0 - off -# -# CreatureFamilyAssistanceDelay -# Reaction time for creature assistance call -# Default: 1500 (1.5s) -# -# CreatureFamilyFleeDelay -# Time during which creature can flee when no assistant found -# Default: 7000 (7s) -# -# WorldBossLevelDiff -# Difference for boss dynamic level with target -# Default: 3 -# -# Corpse.EmptyLootShow -# If target can have loot (or can be skining after loot) but no loot generated still show loot window -# Default: 1 (show) -# 0 (not show) -# -# Corpse.Decay.NORMAL -# Corpse.Decay.RARE -# Corpse.Decay.ELITE -# Corpse.Decay.RAREELITE -# Corpse.Decay.WORLDBOSS -# Seconds until creature corpse will decay without being looted or skinned (not used when creature does not have loot initially) -# Default: 300, 900, 600, 1200, 3600 -# -# Rate.Corpse.Decay.Looted -# Controls how long the creature corpse stays after it had been looted, as a multiplier of its Corpse.Decay.* config. -# Default: 0.5 -# -# Rate.Creature.Normal.Damage -# Rate.Creature.Elite.Elite.Damage -# Rate.Creature.Elite.RAREELITE.Damage -# Rate.Creature.Elite.WORLDBOSS.Damage -# Rate.Creature.Elite.RARE.Damage -# Creature Damage Rates. -# Examples: 2 - creatures will damage 2x, 1.7 - 1.7x. -# -# Rate.Creature.Normal.SpellDamage -# Rate.Creature.Elite.Elite.SpellDamage -# Rate.Creature.Elite.RAREELITE.SpellDamage -# Rate.Creature.Elite.WORLDBOSS.SpellDamag -# Rate.Creature.Elite.RARE.SpellDamage -# Creature Spell Damage Rates. -# Examples: 2 - creatures will damage with spells 2x, 1.7 - 1.7x. -# -# Rate.Creature.Normal.HP -# Rate.Creature.Elite.Elite.HP -# Rate.Creature.Elite.RAREELITE.HP -# Rate.Creature.Elite.WORLDBOSS.HP -# Rate.Creature.Elite.RARE.HP -# Creature Health Ammount Modifier. -# Examples: 2 - creatures have 2x health, 1.7 - 1.7x. -# -# ListenRange.Say -# Distance from player to listen text that creature (or other world object) say -# Default: 40 -# -# ListenRange.TextEmote -# Distance from player to listen textemote that creature (or other world object) say -# Default: 40 -# -# ListenRange.Yell -# Distance from player to listen text that creature (or other world object) yell -# Default: 300 -# -# GuidReserveSize.Creature -# GuidReserveSize.GameObject -# Amount guids reserved for .npc add/.gobject add directly after last used in DB static spawned creature/gameobject guid -# Commands .npc add/.gobject add can be used only for guids from this reserve and required server restart if all guids -# from reserve used before above commands can be used in like case. Less size increase amount guids for dynamic spawns -# in game from other side -# Default: 100 -# -################################################################################ - -ThreatRadius = 100 -Rate.Creature.Aggro = 1 -CreatureRespawnAggroDelay = 5000 -CreatureFamilyFleeAssistanceRadius = 30 -CreatureFamilyAssistanceRadius = 10 -CreatureFamilyAssistanceDelay = 1500 -CreatureFamilyFleeDelay = 7000 -WorldBossLevelDiff = 3 -Corpse.EmptyLootShow = 1 -Corpse.Decay.NORMAL = 300 -Corpse.Decay.RARE = 900 -Corpse.Decay.ELITE = 600 -Corpse.Decay.RAREELITE = 1200 -Corpse.Decay.WORLDBOSS = 3600 -Rate.Corpse.Decay.Looted = 0.5 -Rate.Creature.Elite.Elite.Damage = 0.5 -Rate.Creature.Elite.Elite.HP = 0.5 -Rate.Creature.Elite.Elite.SpellDamage = 0.5 -Rate.Creature.Elite.RARE.Damage = 0.5 -Rate.Creature.Elite.RARE.HP = 0.5 -Rate.Creature.Elite.RARE.SpellDamage = 0.5 -Rate.Creature.Elite.RAREELITE.Damage = 0.5 -Rate.Creature.Elite.RAREELITE.HP = 0.5 -Rate.Creature.Elite.RAREELITE.SpellDamage = 0.5 -Rate.Creature.Elite.WORLDBOSS.Damage = 0.5 -Rate.Creature.Elite.WORLDBOSS.HP = 0.5 -Rate.Creature.Elite.WORLDBOSS.SpellDamage = 0.5 -Rate.Creature.Normal.Damage = 0.5 -Rate.Creature.Normal.HP = 0.5 -Rate.Creature.Normal.SpellDamage = 0.5 - -ListenRange.Say = 40 -ListenRange.TextEmote = 40 -ListenRange.Yell = 300 - -GuidReserveSize.Creature = 100 -GuidReserveSize.GameObject = 100 - -################################################################################ -# CHAT SETTINGS -# -# ChatFakeMessagePreventing -# Chat protection from creating fake messages using a lot spaces (other invisible symbols), -# not applied to addon language messages, but can prevent working old addons -# that use normal languages for sending data to another clients. -# Default: 0 (disable fake messages preventing) -# 1 (enable fake messages preventing) -# -# ChatStrictLinkChecking.Severity -# Check chat messages for ingame links to spells, items, quests, achievements etc. -# Default: 0 (disable link checking) -# 1 (check if only valid pipe commands are used. This prevents posting pictures for example) -# 2 (verifiy that pipe commands are used in a correct order) -# 3 (check if color, entry and name don't contradict each other. For correct work, please assure -# that you have extracted locale DBCs of every language specific client playing on this server.) -# -# ChatStrictLinkChecking.Kick -# Defines, what should be done if a message is considered to contain invalid pipe commands. -# Default: 0 (silently ignore message) -# 1 (kick players who sent invalid formed messages) -# -# ChatFlood.MessageCount -# Chat anti-flood protection, haste message count to activate protection -# Default: 10 -# 0 (disable anti-flood protection) -# -# ChatFlood.MessageDelay -# Chat anti-flood protection, minimum message delay to count message -# Default: 1 (in secs) -# -# ChatFlood.MuteTime -# Chat anti-flood protection, mute time at activation flood protection (not saved) -# Default: 10 (in secs) -# -# Channel.SilentlyGMJoin -# Silently join GM characters (security level > 1) to channels -# Default: 0 (join announcement in normal way) -# 1 (GM join without announcement) -# -################################################################################ - -ChatFakeMessagePreventing = 0 -ChatStrictLinkChecking.Severity = 0 -ChatStrictLinkChecking.Kick = 0 -ChatFlood.MessageCount = 10 -ChatFlood.MessageDelay = 1 -ChatFlood.MuteTime = 10 -Channel.SilentlyGMJoin = 0 - -################################################################################ -# GAME MASTER SETTINGS -# -# GM.LoginState -# GM mode at login -# Default: 2 (last save state) -# 0 (disable) -# 1 (enable) -# -# GM.Visible -# GM visibility at login -# Default: 2 (last save state) -# 0 (invisible) -# 1 (visible) -# -# GM.AcceptTickets -# Is GM accepting tickets from player by default or not. -# Default: 2 (last save state) -# 0 (disable) -# 1 (enable) -# -# GM.TicketListSize -# Number of tickets shown to a GM by .ticket list/onlinelist. -# Default: 30 -# -# GM.TicketOfflineClosing -# Is GM ticket close available for teh offline players or not. -# Default: 0 (false) closing denied -# 1 (true) closing enabled -# -# GM.Chat -# GM chat mode at login -# Default: 2 (last save state) -# 0 (disable) -# 1 (enable) -# -# GM.WhisperingTo -# Is GM accepting whispers from player by default or not. -# Default: 2 (last save state) -# 0 (disable) -# 1 (enable) -# -# GM.InGMList.Level -# Max GM level showed in GM list (if visible) in non-GM state (.gm off) -# 0 (none) -# 1 (only moderators) -# 2 (only gamemasters) -# Default: 3 (anyone) -# -# GM.InWhoList.Level -# Max GM level showed in who list (if visible). -# 0 (only players) -# 1 (only moderators) -# 2 (only gamemasters) -# Default: 3 (anyone) -# -# GM.LogTrade -# Include GM trade and trade slot enchanting operations in GM log if it enable -# Default: 1 (include) -# 0 (not include) -# -# GM.StartLevel -# GM starting level (1-255) -# Default: 1 -# -# GM.LowerSecurity -# Disallow a lower security member to interact with a higher one using commands -# Default: 0 (disable) -# 1 (enable) -# -# GM.InvisibleAura -# A spell that will be cast when a gm uses ".gm visible off" (Must be aura spell) -# Default: 31748 (Spirit Particles, big) -# 0 (Disabled) -# GM.MaxSpeedFactor -# Set the max speed factor whend using commands .mod speed / .mod aspeed etc... -# Only Integer values -# Default: 10 -# -################################################################################ - -GM.LoginState = 2 -GM.Visible = 2 -GM.AcceptTickets = 2 -GM.TicketListSize = 30 -GM.TicketOfflineClosing = 1 -GM.Chat = 2 -GM.WhisperingTo = 2 -GM.InGMList.Level = 3 -GM.InWhoList.Level = 3 -GM.LogTrade = 1 -GM.StartLevel = 1 -GM.LowerSecurity = 0 -GM.InvisibleAura = 31748 -GM.MaxSpeedFactor = 10 - -################################################################################ -# VISIBILITY AND RADIUSES -# -# Visibility.GroupMode -# Group visibility modes -# Default: 0 (standard setting: only members from same group can 100% auto detect invisible player) -# 1 (raid members 100% auto detect invisible player from same raid) -# 2 (players from same team can 100% auto detect invisible player) -# -# Visibility.Distance.Continents -# Visibility.Distance.Instances -# Visibility.Distance.BG -# Visibility distance for different ingame object in different maps. -# Visibility on continents on offy ~90 yards. In BG ~180. For instances default ~120. -# Max limited by active player zone: ~ 333 -# Min limit is max aggro radius (45) * Rate.Creature.Aggro -# -# Visibility.Distance.InFlight -# Visible distance for player in flight -# Min limit is 0 (not show any objects) -# -# Visibility.Distance.Grey.Unit -# Visibility grey distance for creatures/players (fast changing objects) -# addition to appropriate object type Visibility.Distance.* use in case visibility removing to -# object (except corpse around distances) If D is distance and G is grey distance then object -# make visible if distance to it <= D but make non visible if distance > D+G -# Default: 1 (yard) -# -# Visibility.Distance.Grey.Object -# Visibility grey distance for dynobjects/gameobjects/corpses/creature bodies -# Default: 10 (yards) -# -# Visibility.RelocationLowerLimit -# Object's visibility update called, when distance between current object's position and position, -# where visiblity was updated last time, reaches RelocationLoverLimit value -# Default: 10 (yards) -# -# Visibility.AIRelocationNotifyDelay -# Delay time between creature AI reactions on nearby movements -# Default: 1000 (milliseconds) -# -################################################################################ - -Visibility.GroupMode = 0 -Visibility.Distance.Continents = 90 -Visibility.Distance.Instances = 120 -Visibility.Distance.BG = 180 -Visibility.Distance.InFlight = 100 -Visibility.Distance.Grey.Unit = 1 -Visibility.Distance.Grey.Object = 10 -Visibility.RelocationLowerLimit = 10 -Visibility.AIRelocationNotifyDelay = 1000 - -################################################################################ -# SERVER RATES -# -# Rate.Health -# Rate.Mana -# Rate.Rage.Income -# Rate.Rage.Loss -# Rate.Focus -# Rate.Loyalty -# Rate.Energy (Rogue) -# Health and power regeneration and rage income from damage. -# Default: 1 -# -# Rate.Skill.Discovery -# Skill Discovery Rates -# Default: 1 -# -# Rate.Drop.Item.Poor -# Rate.Drop.Item.Normal -# Rate.Drop.Item.Uncommon -# Rate.Drop.Item.Rare -# Rate.Drop.Item.Epic -# Rate.Drop.Item.Legendary -# Rate.Drop.Item.Artifact -# Rate.Drop.Item.Referenced -# Rate.Drop.Money -# Drop rates (items by quality and money) -# Default: 1 -# -# Rate.XP.Kill -# Rate.XP.PetKill -# Rate.XP.Quest -# Rate.XP.Explore -# XP rates -# Default: 1 -# -# Rate.Rest.InGame -# Rate.Rest.Offline.InTavernOrCity -# Rate.Rest.Offline.InWilderness -# Resting points grow rates (1 - normal, 2 - double rate, 0.5 - half rate, etc) from standard values -# -# Rate.Damage.Fall -# Damage after fall rate. (1 - standard, 2 - double damage, 0.5 - half damage, etc) -# -# Rate.Auction.Time -# Rate.Auction.Deposit -# Rate.Auction.Cut -# Auction rates (auction time, deposit get at auction start, auction cut from price at auction end) -# -# Auction.Deposit.Min -# Minimum auction deposit size in copper -# Default: 0 -# -# Rate.Honor -# Honor gain rate -# -# Rate.Mining.Amount -# Rate.Mining.Next -# Mining Rates (Mining.Amount changes minimum/maximum usetimes of a deposit, -# Mining.Next changes chance to have next use of a deposit) -# -# Rate.Mining.Lower -# Spawn percentage of lower mineral base ores -# Rate.Mining.Rare -# Spawn percentage of rare mineral nodes -# Rate.Mining.Darkiron -# Spawn percentage Darkiron in Burning Steppes and Searing Gorge -# Autopooling.Mining.Enable -# Increases server startup can be disabled for testing purposes when fast server restart is demanded -# 0 = Disabled (default) -# 1 = Enabled -# Rate.Mining.Autopooling -# Percentage of spawned mining nodes per zone -# -# Rate.Talent -# Talent Point rates -# Default: 1 -# -# Rate.Reputation.Gain -# Reputation Gain rate -# Default: 1 -# -# Rate.Reputation.LowLevel.Kill -# Reputation Gain form low level kill (grey creture) -# Default: 0.2 -# -# Rate.Reputation.LowLevel.Quest -# Reputation Gain rate -# Default: 1 -# -# Rate.InstanceResetTime -# Multiplier for the number of days in between global raid/heroic instance resets. -# Default: 1 -# -# SkillGain.Crafting -# SkillGain.Defense -# SkillGain.Gathering -# SkillGain.Weapon -# crafting/defense/gathering/weapon skills gain at skill grow (1,2,...) -# Default: 1 -# -# SkillChance.Orange -# SkillChance.Yellow -# SkillChance.Green -# SkillChance.Grey -# Skill chance values (0..100) -# Default: 100-75-25-0 -# -# SkillChance.MiningSteps -# SkillChance.SkinningSteps -# For skinning and Mining chance decrease with skill level. -# Default: 0 - no decrease -# 75 - in 2 times each 75 skill points -# -# SkillFail.Loot.Fishing -# For fishing instead fail provided junk loot -# Default: 0 (disabled) -# 1 (enabled) -# -# SkillFail.Gain.Fishing -# For fishing skill gain possible at fail also -# Default: 0 (disabled) -# 1 (enabled) -# -# SkillFail.Possible.FishingPool -# For fishing pool impossible fail from low skill by default -# Default: 1 (enabled) -# 0 (disabled) -# -# DurabilityLossChance.Damage -# Chance lost one from equiped items durability point at damage apply or receive. -# Default: 0.5 (100/0.5 = 200) Each 200 damage apply one from 19 possible equipped items -# -# DurabilityLossChance.Absorb -# Chance lost one from armor items durability point at damage absorb. -# Default: 0.5 (100/0.5 = 200) Each 200 absorbs apply one from 15 possible armor equipped items -# -# DurabilityLossChance.Parry -# Chance lost weapon durability point at parry. -# Default: 0.05 (100/0.05 = 2000) Each 2000 parry attacks main weapon lost point -# -# DurabilityLossChance.Block -# Chance lost sheild durability point at damage block. -# Default: 0.05 (100/0.05 = 2000) Each 2000 partly or full blocked attacks shield lost point -# -# Death.SicknessLevel -# Starting Character start gain sickness at spirit resurrection (1 min) -# Default: 11 -# -10 - character will have full time (10min) sickness at 1 level -# maxplayerlevel+1 - character will not have sickness at any level -# -# Death.CorpseReclaimDelay.PvP -# Death.CorpseReclaimDelay.PvE -# Enabled/disabled increase corpse reclaim delay at often PvP/PvE deaths -# Default: 1 (enabled) -# 0 (disabled) -# -# Death.Bones.World -# Death.Bones.Battleground -# Enabled/disabled creating bones instead corpse at resurrection (in normal zones/instacnes, or battleground) -# Default: 1 (enabled) -# 0 (disabled) -# -# Death.Ghost.RunSpeed.World -# Death.Ghost.RunSpeed.Battleground -# Modifies the speed of player's ghosts, removed upon reviving, not permanent/saved, in non-BG and BG maps -# Default: 1.0 (normal speed) -# -################################################################################ - -Rate.Health = 1 -Rate.Mana = 1 -Rate.Rage.Income = 1 -Rate.Rage.Loss = 1 -Rate.Focus = 1 -Rate.Loyalty = 1 -Rate.Energy = 1 -Rate.Skill.Discovery = 1 -Rate.Drop.Item.Poor = 1 -Rate.Drop.Item.Normal = 1 -Rate.Drop.Item.Uncommon = 1 -Rate.Drop.Item.Rare = 1 -Rate.Drop.Item.Epic = 1 -Rate.Drop.Item.Legendary = 1 -Rate.Drop.Item.Artifact = 1 -Rate.Drop.Item.Referenced = 1 -Rate.Drop.Money = 1 -Rate.XP.Kill = 1 -Rate.XP.PetKill = 1 -Rate.XP.Quest = 1 -Rate.XP.Explore = 1 -Rate.Rest.InGame = 1 -Rate.Rest.Offline.InTavernOrCity = 1 -Rate.Rest.Offline.InWilderness = 1 -Rate.Damage.Fall = 1 -Rate.Auction.Time = 1 -Rate.Auction.Deposit = 1 -Rate.Auction.Cut = 1 -Auction.Deposit.Min = 0 -Rate.Honor = 1 -Rate.Mining.Amount = 1 -Rate.Mining.Next = 1 -Rate.Mining.Lower = 50 -Rate.Mining.Rare = 20 -Rate.Mining.Darkiron = 10 -Autopooling.Mining.Enable = 0 -Rate.Mining.Autopooling = 90 -Rate.Talent = 1 -Rate.Reputation.Gain = 1 -Rate.Reputation.LowLevel.Kill = 0.2 -Rate.Reputation.LowLevel.Quest = 1 -Rate.InstanceResetTime = 1 - -SkillGain.Crafting = 1 -SkillGain.Defense = 1 -SkillGain.Gathering = 1 -SkillGain.Weapon = 1 - -SkillChance.Orange = 100 -SkillChance.Yellow = 75 -SkillChance.Green = 25 -SkillChance.Grey = 0 -SkillChance.MiningSteps = 0 -SkillChance.SkinningSteps = 0 - -SkillFail.Loot.Fishing = 0 -SkillFail.Gain.Fishing = 0 -SkillFail.Possible.FishingPool = 1 - -DurabilityLossChance.Damage = 0.5 -DurabilityLossChance.Absorb = 0.5 -DurabilityLossChance.Parry = 0.05 -DurabilityLossChance.Block = 0.05 - -Death.SicknessLevel = 11 -Death.CorpseReclaimDelay.PvP = 1 -Death.CorpseReclaimDelay.PvE = 1 -Death.Bones.World = 1 -Death.Bones.Battleground = 1 -Death.Ghost.RunSpeed.World = 1.0 -Death.Ghost.RunSpeed.Battleground = 1.0 - -################################################################################ -# BATTLEGROUND CONFIG -# -# Battleground.CastDeserter -# Cast Deserter spell at player who leave battleground in progress -# Default: 1 (enable) -# 0 (disable) -# -# Battleground.QueueAnnouncer.Join -# Enable queue announcer posting to chat at join -# Default: 0 (not send) -# 1 (send to joined player only) -# 2 (send to all players) -# -# Battleground.QueueAnnouncer.Start -# Enable queue announcer posting to chat at BG start -# Default: 0 (disable) -# 1 (enable) -# -# Battleground.ScoreStatistics -# Enable Battleground scores storage in database. -# Default: 0 - (Disabled) -# 1 - (Enabled) -# -# Battleground.InvitationType -# Set Battleground invitation type -# Default: 0 (normal - invite as much players to bg as possible, don't bother with ballance) -# 1 (Experimental - don't allow to invite much more players of one faction) -# -# Battleground.PrematureFinishTimer -# The time to end the bg if there are less than MinPlayersPerTeam on one side in milliseconds -# Default: 300000 (5 minutes) -# 0 - disable (not recommended) -# -# BattleGround.PremadeGroupWaitForMatch -# The time in which premade group of 1 faction waits in BG Queue for premade group of other faction -# 1800000 (30 minutes) -# Default: 0 - disable premade group matches (group always added to bg team in normal way) -# -################################################################################ - -Battleground.CastDeserter = 1 -Battleground.QueueAnnouncer.Join = 0 -Battleground.QueueAnnouncer.Start = 0 -Battleground.ScoreStatistics = 0 -Battleground.InvitationType = 0 -BattleGround.PrematureFinishTimer = 300000 -BattleGround.PremadeGroupWaitForMatch = 0 - -################################################################################ -# OUTDOOR PVP CONFIG -# -# OutdoorPvp.SIEnabled #Enable Silithus Outdoor pvp -# OutdoorPvp.EPEnabled #Enable Eastern Plaguelands Outdoor pvp -# Default: 1 (enable) -# 0 (disable) -# -################################################################################ - -OutdoorPvp.SIEnabled = 1 -OutdoorPvp.EPEnabled = 1 - -################################################################################ -# NETWORK CONFIG -# -# Network.Threads -# Number of threads for network queue handling, we recommend a minimum of 3, -# additional threads will assist with greater numbers of players. -# Default: 3 -# -# Network.OutKBuff -# The size of the output kernel buffer used ( SO_SNDBUF socket option, tcp manual ). -# Default: -1 (Use system default setting) -# -# Network.OutUBuff -# Userspace buffer for output. This is amount of memory reserved per each connection. -# Default: 65536 -# -# Network.TcpNoDelay: -# TCP Nagle algorithm setting -# Default: 0 (enable Nagle algorithm, less traffic, more latency) -# 1 (TCP_NO_DELAY, disable Nagle algorithm, more traffic but less latency) -# -# Network.KickOnBadPacket -# Kick player on bad packet format. -# Default: 0 - do not kick -# 1 - kick -# -################################################################################ - -Network.Threads = 3 -Network.OutKBuff = -1 -Network.OutUBuff = 65536 -Network.TcpNodelay = 1 -Network.KickOnBadPacket = 0 - -################################################################################ -# CONSOLE, REMOTE ACCESS AND SOAP -# -# Console.Enable -# Enable console -# Default: 1 - on -# 0 - off -# -# Ra.Enable -# Enable remote console -# Default: 0 - off -# 1 - on -# -# Ra.IP -# Default remote console ip address, use 0.0.0.0 for every address -# -# Ra.Port -# Default remote console port -# Default: 3443 -# -# Ra.MinLevel -# Minimum level that's required to login,3 by default -# Default: 3 (Administrator) -# -# Ra.Secure -# Kick client on wrong pass -# 0 - off -# Default: 1 - on -# -# Ra.Stricted -# Not allow execute console level only commands remotly by RA -# 0 - off -# Default: 1 - on -# -# -# SOAP.Enable -# Enable soap service -# Default: 0 - off -# 1 - on -# -# SOAP.IP -# Bound SOAP service ip address, use 0.0.0.0 to access from everywhere -# Default: 127.0.0.1 -# -# SOAP.Port -# SOAP port -# Default: 7878 -# -################################################################################ - -Console.Enable = 0 - -Ra.Enable = 0 -Ra.IP = 0.0.0.0 -Ra.Port = 3443 -Ra.MinLevel = 3 -Ra.Secure = 1 -Ra.Stricted = 1 - -SOAP.Enabled = 0 -SOAP.IP = 127.0.0.1 -SOAP.Port = 7878 - -################################################################################ -# CharDelete.Method -# Character deletion behavior -# Default: 0 - Completely remove the character from the database -# 1 - Unlinking, the character gets unlinked from the account, -# the name gets freed up and appears as deleted ingame -# -# CharDelete.MinLevel -# Character gets deleted by CharDelete.Method=0 when the character -# hasn't the specified level yet. -# Default: 0 - For all characters the specified mode will be used -# 1+ - Only for players which have reached the specified level -# will be deleted by the specified mode. -# the rest will be deleted by CharDelete.Method=0 -# -# CharDelete.KeepDays -# Define the amount of days for which the characters are kept in the database before -# they will be removed -# Default: 30 -# 0 - Don't delete any characters, they stay in the database forever. -# -################################################################################ - -CharDelete.Method = 0 -CharDelete.MinLevel = 0 -CharDelete.KeepDays = 30 - -################################################################################################### -# QUEST TRACKER -# QuestTracker.Enable -# Description: Store data in the database about quest completion and abandonment to help find bugged quests. -# Default: 0 - (Disabled) -# 1 - (Enabled) -# -################################################################################################### - -QuestTracker.Enable= 0 - -################################################################################################### -# WARDEN SETTINGS -# -# Warden.WinEnabled -# Description: Enables Warden checks for Windows clients. -# Default: 1 - (Enabled) -# 0 - (Disabled) -# -# Warden.OSXEnabled -# Description: Enables Warden checks for OSX clients. -# Default: 0 - (Disabled) -# 1 - (Enabled) -# -# Warden.NumMemChecks -# Description: Number of Warden memory checks that are sent to the client each cycle. -# Default: 3 - (Enabled) -# 0 - (Disabled) -# -# Warden.NumOtherChecks -# Description: Number of Warden checks other than memory checks that are added to request -# each checking cycle. -# Default: 7 - (Enabled) -# 0 - (Disabled) -# -# Warden.ClientResponseDelay -# Description: Time (in seconds) before client is getting disconnecting for not responding. -# Default: 600 - (10 Minutes) -# 0 - (Disabled, client won't be kicked) -# -# Warden.ClientCheckHoldOff -# Description: Time (in seconds) to wait before sending the next check request to the client. -# A low number increases traffic and load on client and server side. -# Default: 30 - (30 Seconds) -# 0 - (Send check as soon as possible) -# -# Warden.ClientCheckFailAction -# Description: Default action being taken if a client check failed. Actions can be -# overwritten for each single check via warden_action table in characters -# database. -# Default: 1 - (Kick) -# 0 - (Disabled, Logging only) -# 2 - (Ban) -# -# Warden.BanDuration -# Description: Time (in seconds) an account will be banned if ClientCheckFailAction is set -# to ban. -# Default: 86400 - (24 hours) -# 0 - (Permanent ban) -# -# Warden.DBLogLevel -# Description: The minimal WardenActions value of Warden check to be logged into realmd.warden_log table. -# WardenActions: 0 - log, 1 - kick, 2 - ban -# -# Deafult: 0 - (Logging any failed check) -# 3 - (Disable DB logging) -# -################################################################################################### - -Warden.WinEnabled = 1 -Warden.OSXEnabled = 0 -Warden.NumMemChecks = 3 -Warden.NumOtherChecks = 7 -Warden.ClientResponseDelay = 600 -Warden.ClientCheckHoldOff = 30 -Warden.ClientCheckFailAction = 1 -Warden.BanDuration = 86400 -Warden.DBLogLevel = 0 - -################################################################################################################### -# ELUNA SETTINGS -# -# Eluna.Enabled -# Enable Eluna LuaEngine -# Default: 1 (Enabled) -# 0 (Disabled) -# -# Eluna.TraceBack -# Description: Sets whether to use debug.traceback function on a lua error or not. -# Notice that you can redefine the function. -# Default: false - (use default error output) -# true - (use debug.traceback function) -# -# Eluna.ScriptPath -# Description: Sets the location of the script folder to load scripts from -# The path can be relative or absolute. -# Default: "lua_scripts" -# -################################################################################################################### - -Eluna.Enabled = 1 -Eluna.TraceBack = false -Eluna.ScriptPath = "lua_scripts" diff --git a/ansible/services/mangos-zero/etc/realmd.conf b/ansible/services/mangos-zero/etc/realmd.conf deleted file mode 100644 index b06cee5..0000000 --- a/ansible/services/mangos-zero/etc/realmd.conf +++ /dev/null @@ -1,132 +0,0 @@ -################################################################################ -# Realm list demon configuration # -################################################################################ - -[RealmdConf] -ConfVersion=2021010100 - -################################################################################ -# REALMD SETTINGS -# -# LoginDatabaseInfo -# Connection settings for the realm/authentication database -# Default: hostname;port;username;password;database -# Use named pipes at Windows -# .;somenumber;username;password;database -# -# Use Unix sockets on Unix/Linux -# .;/path/to/unix_socket;username;password;database -# -# LogsDir -# Directory where log files should be written -# The given path has to exist, and be writable for the realm list demon -# Default: "" No log directory prefix, thus log files will be stored in -# the same path where the realm list demon is running -# -# PidFile -# Realm list demon PID file -# Default: "" Do not create a PID file. -# -# MaxPingTime -# Settings for maximum database-ping interval (minutes between pings) -# Default: 30 -# -# RealmServerPort -# Port on which the server will listen -# Default: 3724 -# -# BindIP -# Bind realm list demon to IP/hostname -# DO NOT CHANGE THIS UNLESS YOU _REALLY_ KNOW WHAT YOU'RE DOING -# Default: "0.0.0.0" Listen on all available addresses -# -# LogLevel -# Server console level of logging -# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug -# Default: 0 -# -# LogTime -# Include time in server console output [hh:mm:ss] -# Default: 0 (no time) -# 1 (print time) -# -# LogFile -# Logfile name -# Default: "Realmd.log" -# "" - empty name disable creating log file -# -# LogTimestamp -# Logfile with timestamp of server start in name -# Default: 0 - no timestamp appended -# 1 - append timestamp in form of _YYYY-MM-DD_HH-MM-SS -# -# LogFileLevel -# Server file level of logging -# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug -# Default: 0 -# -# LogColors -# Color for messages (format "normal_color details_color debug_color error_color) -# Colors: 0 - BLACK, 1 - RED, 2 - GREEN, 3 - BROWN, 4 - BLUE, 5 - MAGENTA, 6 - CYAN, 7 - GREY, -# 8 - YELLOW, 9 - LRED, 10 - LGREEN, 11 - LBLUE, 12 - LMAGENTA, 13 - LCYAN, 14 - WHITE -# Default: "" - none colors -# "13 7 11 9" - for example :) -# -# UseProcessors -# Used processors mask for multi-processors system (Used only at Windows) -# Default: 0 (selected by OS) -# number (bitmask value of selected processors) -# -# ProcessPriority -# Process proirity setting (Used only at Windows) -# Default: 1 (HIGH) -# 0 (Normal) -# -# WaitAtStartupError -# After startup error report wait or some time before continue (and possible close console window) -# -1 (wait until press) -# Default: 0 (not wait) -# N (>0, wait N secs) -# -# RealmsStateUpdateDelay -# Realm list Update up delay (updated at realm list request if delay expired). -# Default: 20 -# 0 (Disabled) -# -# WrongPass.MaxCount -# Number of login attemps with wrong password before the account or IP is banned -# Default: 3 (Never ban) -# -# WrongPass.BanTime -# Duration of the ban in seconds (0 means permanent ban) -# Default: 300 -# -# WrongPass.BanType -# Ban the IP or account on which login is attempted -# Default: 0 (Ban IP) -# 1 (Ban Account) -# -################################################################################ -LoginDatabaseInfo = "127.0.0.1;3306;mangos;{{ mangos_db_password }};realmd" -LogsDir = "" -PidFile = "" - -MaxPingTime = 30 -RealmServerPort = 3724 -BindIP = "0.0.0.0" - -LogLevel = 0 -LogTime = 0 -LogFile = "realm-list.log" -LogTimestamp = 0 -LogFileLevel = 0 -LogColors = "13 7 11 9" - -UseProcessors = 0 -ProcessPriority = 1 -WaitAtStartupError = 0 -RealmsStateUpdateDelay = 20 - -WrongPass.MaxCount = 100 -WrongPass.BanTime = 300 -WrongPass.BanType = 0 diff --git a/ansible/services/minecraft/README.md b/ansible/services/minecraft/README.md deleted file mode 100644 index 66b4d68..0000000 --- a/ansible/services/minecraft/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Minecraft - -PaperMC server. - -- **Host:** copenhagen-a -- **Port:** 25565 -- **Memory:** 3GB -- **Data:** Docker volume (`minecraft_minecraftserver`) -- **Java:** OpenJDK 21 (bundled in image) -- **Note:** copenhagen-a also runs a WoW server (MaNGOS Zero) as system services, not Docker diff --git a/ansible/services/minecraft/docker-compose.yml b/ansible/services/minecraft/docker-compose.yml deleted file mode 100644 index 2cd7782..0000000 --- a/ansible/services/minecraft/docker-compose.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -# Minecraft - PaperMC server -# Host: copenhagen-a (100.89.206.60) -# Data: Docker volume (minecraft_minecraftserver) - -services: - minecraft: - image: itzg/minecraft-server:latest - container_name: mcserver - restart: always - ports: - - "25565:25565" - environment: - EULA: true - DIFFICULTY: hard - MEMORYSIZE: 3G - VERSION: 1.21.11 - MOTD: Pez Solutions - - volumes: - - minecraft_data:/data - -volumes: - minecraft_data: - name: minecraft_minecraftserver diff --git a/ansible/services/smartctl-exporter/docker-compose.yml b/ansible/services/smartctl-exporter/docker-compose.yml index 2216246..4c0ae21 100644 --- a/ansible/services/smartctl-exporter/docker-compose.yml +++ b/ansible/services/smartctl-exporter/docker-compose.yml @@ -1,6 +1,6 @@ --- # smartctl-exporter - SMART disk metrics for Prometheus -# Hosts: london-b (100.84.65.101), copenhagen-a (100.89.206.60) +# Hosts: london-b (100.84.65.101) # Access: http://:9633/metrics services: diff --git a/docs/README.md b/docs/README.md index 0823b2a..168288b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -21,5 +21,4 @@ Everything you need to understand how this infrastructure works. | london-b | 100.84.65.101 | London | Storage, media, Docker services | | london-c | 100.123.72.87 | London | Raspberry Pi, Octopus Energy exporter | | nuremberg-a | 100.70.180.24 | Hetzner Cloud (Nuremberg) | Mail (poste.io) | -| copenhagen-a | 100.89.206.60 | Copenhagen | Minecraft, WoW/MaNGOS | -| copenhagen-c | 100.115.45.53 | Copenhagen | Raspberry Pi, cloudflared, idle | +| copenhagen-a | 100.91.240.29 | Copenhagen | Proxmox VE hypervisor | diff --git a/docs/architecture.md b/docs/architecture.md index 65f3a86..dce7cfb 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -21,12 +21,9 @@ graph TD TS --> LA["london-a
Proxmox VE hypervisor
(Debian 13)"] TS --> LC["london-c
Raspberry Pi
Octopus Energy exporter"] TS --> NA["nuremberg-a
Mail
poste.io"] - TS --> CA["copenhagen-a
Gaming
Minecraft / WoW (MaNGOS)"] - TS --> CC["copenhagen-c
Raspberry Pi
cloudflared, idle"] + TS --> CA["copenhagen-a
Proxmox VE hypervisor
(Debian 12)"] TS -.->|Alloy| GC["Grafana Cloud
metrics, logs, traces
synthetic checks"] - - style CC stroke-dasharray: 5 5 ``` ## Traffic Flow diff --git a/docs/getting-started.md b/docs/getting-started.md index 510123e..2929575 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -45,8 +45,7 @@ ssh root@helsinki-a # or ssh root@100.67.6.27 ssh root@london-a # Proxmox VE host ssh root@london-b # storage / media ssh root@london-c # Raspberry Pi -ssh root@copenhagen-a -ssh root@copenhagen-c # Raspberry Pi +ssh root@copenhagen-a # Proxmox VE host ssh root@nuremberg-a ``` @@ -139,8 +138,8 @@ ZFS is set up with 3× RAIDZ1 vdevs of 4 drives each (12 drives total) on the `h ## OS Choice - **Debian (12 or 13)** is the default for new hosts — including the Raspberry Pis. Stable, well-supported by Ansible, predictable. -- **Ubuntu LTS** is on london-b and copenhagen-a (historical — both came up before the Debian standard). -- **Proxmox VE** (Debian Bookworm under the hood) on london-a. +- **Ubuntu LTS** is on london-b (historical — came up before the Debian standard). +- **Proxmox VE** (Debian Bookworm under the hood) on london-a and copenhagen-a. - **No more FreeBSD.** london-a used to run FreeBSD for Prometheus/Grafana; that's all on Grafana Cloud now and london-a is Linux/Proxmox. Alpine has been tried and rejected — the missing GNU binaries / systemd caused enough Ansible headaches to not be worth the size savings. diff --git a/docs/hosts/copenhagen-a.md b/docs/hosts/copenhagen-a.md index 2526035..32d225c 100644 --- a/docs/hosts/copenhagen-a.md +++ b/docs/hosts/copenhagen-a.md @@ -1,15 +1,15 @@ # copenhagen-a -Game servers. Located at my dad's place in Copenhagen as an off-site location. +Proxmox VE hypervisor. Located at my dad's place in Copenhagen as an off-site location — the Copenhagen counterpart to london-a. ## Overview | | | |---|---| | **Location** | Copenhagen | -| **OS** | Ubuntu 22.04 LTS | -| **Tailscale IP** | 100.89.206.60 | -| **Role** | Gaming servers (Minecraft, WoW) | +| **OS** | Debian 12 (Bookworm) with Proxmox VE | +| **Tailscale IP** | 100.91.240.29 | +| **Role** | Hypervisor (Proxmox VE) | | **Form factor** | Lenovo "tiny" desktop (lunchbox-sized) | ## Hardware @@ -20,50 +20,42 @@ Game servers. Located at my dad's place in Copenhagen as an off-site location. | Memory | 16 GB | | Boot disk | 500 GB | -Compact Lenovo desktop — powered by a standard ThinkPad charging brick. Small, quiet, and draws minimal power. +Compact Lenovo desktop — powered by a standard ThinkPad charging brick. Small, quiet, and draws minimal power. Previously ran the gaming servers directly on bare metal; now repaved as a Proxmox VE host. ## Services -### Minecraft +| Service | Port | Status | Notes | +|---------|------|--------|-------| +| Proxmox VE | 8006 | Active | Web UI — reachable via `copenhagen-a.pez.sh` (Caddy) or Tailscale IP | +| Tailscale | — | Active | Mesh networking | +| node_exporter, systemd_exporter, Alloy | — | Active | Observability baseline (Ansible-managed) | -| | | -|---|---| -| Image | `itzg/minecraft-server` | -| Port | 25565 | -| Deployment | Docker | +### Storage -Not proxied through Caddy — accessed directly via Tailscale or the host's public IP. +Proxmox is connected to the same CIFS share on **london-b** (`100.84.65.101 /pve`) used by london-a, for ISO/template/backup storage. The mount is configured by the `proxmox_ve` Ansible role. -### World of Warcraft (MaNGOS Zero) +| Storage ID | Type | Backing | +|---|---|---| +| `local-lvm` | LVM-Thin | Local boot disk | +| `hdd` | CIFS | london-b `/pve` share | -WoW 1.12 (Vanilla) private server using the MaNGOS Zero emulator. Runs natively — not in Docker. +### VMs -| Service | Port | Managed by | -|---------|------|-----------| -| mangos-realmd | 3724 | systemd | -| mangos-world | 8085 | systemd | -| MariaDB | 3306 | systemd (apt-managed) | +No VMs provisioned yet — this is the landing zone for future workloads at the Copenhagen site. -- Runs as the `mangos` user -- Install path: `/home/mangos/mangos/zero/` -- MariaDB hosts the character, world, and auth databases locally -- Both `mangos-realmd` and `mangos-world` start automatically on boot via systemd -- The `mariadb` Ansible role manages package + secrets; the `systemd_services` role drops the unit files (`ansible/services/mangos-realmd/`, `ansible/services/mangos-world/`) +## Ansible -### Other +Part of the `proxmox_hosts` group alongside london-a, sharing the `proxmox_ve` role: -| Service | Port | Deployment | Notes | -|---------|------|-----------|-------| -| smartctl_exporter | 9633 | Docker | Disk SMART metrics scraped by Alloy | -| node_exporter | 9100 | Native | Host metrics | -| systemd_exporter | — | Native | systemd unit metrics | -| Alloy | — | Native | Ships everything to Grafana Cloud | -| Tailscale | — | Native | Mesh networking | +- Swaps the enterprise apt repo for `pve-no-subscription` so updates work without a paid subscription +- Patches `proxmoxlib.js` to suppress the subscription nag dialog +- Restricts the web UI to the `tailscale0` interface via UFW +- Mounts the london-b CIFS storage ## Networking -Connected directly to the ISP router's built-in switch. Symmetrical 500 Mbit connection — more than enough for game servers. +Connected directly to the ISP router's built-in switch. Symmetrical 500 Mbit connection. -## Notes +## History -copenhagen-a has a static public IP, which is needed for game servers that require direct client connections (WoW realm list, Minecraft server list). The reboot playbook (`ansible/playbooks/reboot.yml`) does a netplan pre-flight check before rebooting to make sure the static IP config will come back up cleanly. +copenhagen-a used to run gaming servers directly on bare metal: a Minecraft server (`itzg/minecraft-server`, Docker) and a WoW 1.12 (Vanilla) MaNGOS Zero private server (native systemd + local MariaDB). Both were decommissioned and the host was repaved as Proxmox VE — the Tailscale identity (and IP) changed as part of the reinstall. The old static public IP used for direct game-client connections (Minecraft server list, WoW realm list) is no longer needed since nothing here accepts direct client connections anymore. diff --git a/docs/hosts/copenhagen-c.md b/docs/hosts/copenhagen-c.md deleted file mode 100644 index dbd2d03..0000000 --- a/docs/hosts/copenhagen-c.md +++ /dev/null @@ -1,29 +0,0 @@ -# copenhagen-c - -Raspberry Pi at the Copenhagen site. General-purpose / off-site utility box. - -## Overview - -| | | -|---|---| -| **Location** | Copenhagen | -| **OS** | Debian 12 (Bookworm), aarch64 | -| **Tailscale IP** | 100.115.45.53 | -| **Role** | Idle / cloudflared tunnel | -| **Form factor** | Raspberry Pi (ARM64) | - -## Services - -| Service | Deployment | Notes | -|---------|-----------|-------| -| cloudflared | Native (systemd) | Cloudflare-managed tunnel for ad-hoc exposure of services from this site | -| Tailscale | Native | Mesh networking | -| Alloy | Native | Ships metrics/logs to Grafana Cloud | -| node_exporter | Native | Host metrics | -| Docker / containerd | Native | Available, but no compose services currently scheduled here | - -The cloudflared token is stored directly in the systemd unit (`/etc/systemd/system/cloudflared.service`); the tunnel itself is configured in the Cloudflare dashboard. - -## Notes - -Part of the Copenhagen off-site setup at my dad's place. Otherwise idle — available if I need to spin up something that benefits from a Copenhagen location or just need another always-on box. diff --git a/docs/monitoring.md b/docs/monitoring.md index 6ed56e8..ccf8282 100644 --- a/docs/monitoring.md +++ b/docs/monitoring.md @@ -38,7 +38,7 @@ The `common` role drops a `10-resilience.conf` systemd override onto every host |---|---|---| | node_exporter | All hosts | CPU, memory, disk, network, system uptime | | systemd_exporter | All hosts | Per-unit systemd state | -| smartctl_exporter (Docker) | london-b, copenhagen-a | Disk SMART data | +| smartctl_exporter (Docker) | london-b | Disk SMART data | | prom-plex-exporter (Docker) | london-b | Plex streaming activity | | octopus_exporter (Docker) | london-c | Octopus Energy electricity usage | | Caddy `/metrics` | helsinki-a | HTTP request metrics, upstream health (per host) | diff --git a/docs/networking.md b/docs/networking.md index bff55aa..542c8a8 100644 --- a/docs/networking.md +++ b/docs/networking.md @@ -13,8 +13,7 @@ All inter-server communication uses Tailscale IPs: | london-b | 100.84.65.101 | | london-c | 100.123.72.87 | | nuremberg-a | 100.70.180.24 | -| copenhagen-a | 100.89.206.60 | -| copenhagen-c | 100.115.45.53 | +| copenhagen-a | 100.91.240.29 | ### What Tailscale is used for @@ -43,7 +42,7 @@ A stack of servers at my dad's place — acts as an off-site location. - **Router:** ISP-provided (not my house, can't exactly install a Ubiquiti rack) - **ISP:** Symmetrical 500 Mbit — plenty for what's running there -- **Servers:** copenhagen-a (Lenovo tiny desktop) and copenhagen-c (Raspberry Pi) connected directly to the ISP router's built-in switch +- **Servers:** copenhagen-a (Lenovo tiny desktop, now running Proxmox VE) connected directly to the ISP router's built-in switch ### Helsinki / Nuremberg (Hetzner Cloud) @@ -95,6 +94,7 @@ All subdomains resolve directly to helsinki-a, where Caddy terminates TLS. Hosts | signup.pez.solutions | helsinki-a:/srv/pez-signup (static) | — | | naveen.pez.sh | helsinki-a:/srv/naveen (static) | — | | london-a.pez.sh | london-a:8006 (Proxmox UI) | Proxmox login | +| copenhagen-a.pez.sh | copenhagen-a:8006 (Proxmox UI) | Proxmox login | | jellyfin.pez.sh / .solutions | london-b:8096 | Own auth | | plex.pez.sh / .solutions | london-b:32400 | Own auth | | music.pez.sh | london-b:4533 (Navidrome) | Own auth | @@ -108,7 +108,7 @@ All subdomains resolve directly to helsinki-a, where Caddy terminates TLS. Hosts | soulseek.pez.sh / .solutions | london-b:5030 (slskd) | Authelia | | download.pez.sh / .solutions | london-b:9091 (Transmission) | Authelia | -A few `pez.sh` records bypass Caddy entirely: `mail` points at nuremberg-a, `minecraft` and `wow` point at copenhagen-a's public IP (game clients connect directly), and `public` is a CNAME to a Cloudflare R2 public bucket (`public.r2.dev`). +A few `pez.sh` records bypass Caddy entirely: `mail` points at nuremberg-a, and `public` is a CNAME to a Cloudflare R2 public bucket (`public.r2.dev`). ### Mail DNS diff --git a/docs/services.md b/docs/services.md index 12dfc4c..92cb03b 100644 --- a/docs/services.md +++ b/docs/services.md @@ -95,27 +95,15 @@ poste.io bundles everything — postfix, dovecot, rspamd, webmail — into a sin n8n (workflow automation) binds 5678 to the Tailscale IP only; public access is proxied by Caddy on helsinki-a. It manages its own user auth. -## copenhagen-a — Gaming +## copenhagen-a — Proxmox VE Hypervisor -Game servers. Not publicly exposed via Caddy — accessed directly over the public IP/Tailscale. +Repurposed gaming PC (previously ran Minecraft and a WoW/MaNGOS private server) at the Copenhagen off-site location, now reinstalled as a Proxmox VE hypervisor — the Copenhagen counterpart to london-a. | Service | Port | Deployment | Auth | URL | |---------|------|-----------|------|-----| -| Minecraft (`itzg/minecraft-server`) | 25565 | Docker | — | (direct connection) | -| MaNGOS realmd | 3724 | Native (systemd) | — | (direct connection) | -| MaNGOS world | 8085 | Native (systemd) | — | (direct connection) | -| MariaDB | 3306 | Native (apt) | — | (local, used by MaNGOS) | -| smartctl_exporter | 9633 | Docker | — | (scraped by Alloy → Grafana Cloud) | +| Proxmox VE | 8006 | Native (Debian Bookworm-based PVE) | Proxmox login | copenhagen-a.pez.sh | -MaNGOS Zero is a WoW 1.12 (Vanilla) private server. Runs natively under systemd as the `mangos` user from `/home/mangos/mangos/zero/`. Not containerised — it predates the Docker setup on this host. - -## copenhagen-c — Idle (Raspberry Pi) - -Raspberry Pi running Debian 12 at the Copenhagen site. Mostly idle, but runs a cloudflared tunnel for one-off use. - -| Service | Port | Deployment | Auth | URL | -|---------|------|-----------|------|-----| -| cloudflared | — | Native (systemd) | — | (Cloudflare-managed tunnel) | +The web UI is exposed via Caddy at `copenhagen-a.pez.sh` but is also reachable directly over Tailscale. Proxmox storage is augmented with the same london-b CIFS share used by london-a (configured by the `proxmox_ve` Ansible role). ## Observability Agents diff --git a/terraform/grafana/fleet_collectors.tf b/terraform/grafana/fleet_collectors.tf index 97c07f2..78a415b 100644 --- a/terraform/grafana/fleet_collectors.tf +++ b/terraform/grafana/fleet_collectors.tf @@ -19,6 +19,13 @@ resource "grafana_fleet_management_collector" "london_c" { } } +resource "grafana_fleet_management_collector" "copenhagen_a" { + id = "copenhagen-a" + remote_attributes = { + location = "copenhagen" + } +} + resource "grafana_fleet_management_collector" "helsinki_a" { id = "helsinki-a" remote_attributes = { diff --git a/terraform/hetzner/dns.tf b/terraform/hetzner/dns.tf index 5efc880..f014f9a 100644 --- a/terraform/hetzner/dns.tf +++ b/terraform/hetzner/dns.tf @@ -7,7 +7,6 @@ locals { helsinki_a = hcloud_server.helsinki-a.ipv4_address nuremberg_a = hcloud_server.nuremberg-a.ipv4_address nuremberg_aaaa = hcloud_server.nuremberg-a.ipv6_address - copenhagen = "83.94.248.182" dns_ttl = 300 } @@ -37,15 +36,6 @@ resource "hcloud_zone_rrset" "nuremberg_mail" { records = [{ value = each.value }] } -resource "hcloud_zone_rrset" "A_copenhagen" { - for_each = toset(["minecraft", "wow"]) - zone = hcloud_zone.pezsh.name - name = each.value - type = "A" - ttl = local.dns_ttl - records = [{ value = local.copenhagen }] -} - resource "hcloud_zone_rrset" "CNAME_forms" { zone = hcloud_zone.pezsh.name name = "forms"