vampire heals up to 200 (g_startingHealth 200, bonus 0); plain README rewrite

QL caps vampiric healing at max health, which comes from g_startingHealth.
With 100 + 100 bonus you spawn at 200 but can never heal back above 100.
200 + 0 spawns at 200, heals to 200, decays to 100 (measured on a test server).
README rewritten for Linux servers and home PCs; file layout moved to HOW-IT-WORKS.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
esefandClaude Opus 5.5 committed 2026-10-15 21:52:21 +03:00
1 parent acf625d72b
commit 266cc20b76
6 files changed
+104 -78

No files matched your search

+1 -1
View File
@@ -24,7 +24,7 @@ Everything below is run from the repo folder on the server machine.
## LG training bot: `./lgbot`
A bot that only plays LG, built to practise against: it strafes on the ground like a duelist (uneven left/right holds, fake direction changes), keeps LG range, pushes in when it's ahead on health and backs off when it's low, and never jumps or crouches. It shoots back. Aim and movement are separate, so "poor aim, best movement" is fine.
A bot that only uses the LG, for practice: it strafes left and right on the ground with uneven timing and occasional fake direction changes, keeps LG range, can push in when it's ahead on health and back off when it's low, and never jumps or crouches. It shoots back. Aim and movement are set separately, so "poor aim, best movement" is possible. Its movement is rule-based and still looks mechanical next to a real player; work on that is ongoing.
```
$ ./lgbot
+25 -2
View File
@@ -1,6 +1,6 @@
# How it works (and why)
Notes for anyone changing this setup. Each point below was hit while building it.
Notes for anyone changing this setup: what each part does and which alternatives were tried.
## Permanent warmup instead of a match
@@ -31,7 +31,11 @@ minqlx is started with only our plugins (`qlx_plugins "nowarmuptext,welcome,lgbo
## Vampiric, measured
`g_vampiricDamage 1` heals exactly 1:1. Measured with `g_debugVampiricDamage 1` and two bots: an LG hit does 6 damage and the attacker gains 6. When both players hit each other at the same time, neither health changes. Spawning with 200 HP (`g_startingHealthBonus 100`) means health above 100 decays ~1/s, which is where the "I'm losing health" feeling comes from. `lgvamp100` removes it. (The stock `_training` factory uses 0.75.)
`g_vampiricDamage 1` heals 1:1. Measured with `g_debugVampiricDamage 1` and two bots: an LG hit does 6 damage and the attacker gains 6. When both players hit each other at the same time, neither health changes. (The stock `_training` factory uses 0.75.)
Vampire healing stops at the player's max health, and QL sets max health from `g_startingHealth`. So the 200 HP modes use `g_startingHealth 200` with `g_startingHealthBonus 0`: you spawn with 200 and vampire heals up to 200. Health above 100 decays 1 per second down to 100 (measured on a test server). The obvious alternative, `g_startingHealth 100` plus `g_startingHealthBonus 100`, also spawns you at 200, but caps vampire at 100: players noticed they never healed back above 100. That was this repo's setting until 2026-10 and is what the SEA preset uses; x76 heals above 100.
`lgvamp100` uses 100 and 0: vampire up to 100, no decay. There is no separate cvar for a vampire cap (the game module's only vampire cvars are `g_vampiricDamage` and `g_debugVampiricDamage`).
## Antilag
@@ -47,6 +51,25 @@ Two more places the password shows up: `home/baseq3/zmqpass.txt` (QL writes it o
With `sv_master 0`, QL ignores `getstatus`, `getinfo` and Steam A2S queries (`sv_serverType` doesn't change that). So the health check (`tools/qlq.py`) uses the connect handshake: send `getchallenge` and the reply is `print "No Steam auth token."`. That works for listed and unlisted servers. Player info comes from RCON `status`, where bots have the address `bot`; that's how the daily restart can tell whether a human is on.
## Files
```
setup.sh install / re-run / --update
.env.example settings template (.env is yours, not in git)
docker-compose.yml the container; Dockerfile = Debian + 32-bit libs + Python 3.11 + SteamCMD
rcon server console
lgbot training bot setup (runs tools/lgbot_setup.py in the container)
home/baseq3/ server.cfg (shared), scripts/lgvamp.factories (game modes),
scripts/lgbot.bot + botfiles/bots/lgbot_*.c (training bot aim);
local.cfg, secrets.cfg, mappool_lg.txt are generated from .env on each start
home/minqlx-plugins/ nowarmuptext.py (hides warmup text), welcome.py, lgbot.py (training bot movement)
tools/ mkcfg.sh (.env -> cfg), qlrcon.py (RCON client), qlq.py (health check),
lgbot_setup.py, lgbot_rec.py (recording analyzer), tests (python -m unittest in tools/)
scripts/ watchdog.sh, daily-restart.sh, backup.sh, install-cron.sh
```
Not in git (setup creates them): `server/` (game files, ~1.1 GB), `minqlx-build/`, `steamcmd-home/`, `secrets/`, `logs/`, `backups/`.
## Small things
- SteamCMD needs `+@sSteamCmdForcePlatformType linux`, or it fails with "Missing configuration".
+2 -2
View File
@@ -13,7 +13,7 @@ Your server admin gives you the address. If the server is listed, it also shows
## How it works
- You spawn with the **lightning gun** (and gauntlet), infinite ammo and 200 HP (100 HP on `lgvamp100` servers).
- **Vampiric:** every point of damage you deal heals you by the same amount. Health above 100 slowly decays (~1 HP per second).
- **Vampiric:** every point of damage you deal heals you by the same amount, up to your spawn health. Health above 100 drops by 1 per second.
- **No knockback, no items, no fall or self damage.**
- The server **stays in warmup on purpose.** There's no match to ready up for (F3 does nothing) and no scoreboard reset. Pair up with someone and duel, and switch partners whenever you like.
- **Antilag** (most servers): your hits register where you saw the enemy, up to about 240 ms ping. On `lgvamp_nolag` servers you have to lead your shots by your ping.
@@ -38,4 +38,4 @@ These are client-side; type them in the console, or put them in `baseq3/autoexec
## Practice tips
- The [x76 strafe-aim guide](https://x76.gg/wiki/strafe-aim-guide/) covers the technique LG duels are about: keep the mouse steady, track by strafing with the keyboard and correct small amounts with the mouse.
- Practice alone: ask an admin for **lgbot** (`./lgbot` on the server). It strafes like an LG duelist instead of jumping around, and its aim and movement are set separately, so you can train tracking against hard movement while it barely hits you, or the other way round.
- Practice alone: ask the admin for **lgbot** (`./lgbot` on the server). It only uses the LG and strafes on the ground instead of jumping around. Its aim and movement levels are set separately, so you can practise tracking against fast movement while it barely hits you, or the other way round.