scripts: extend vps-paragon-diagnostics for rune/RP DBC and binary parity
- Binary sha256 + revision-like strings for dev vs VPS compare - worldserver.conf Rate.RunicPower and mod_paragon.conf Paragon.* keys - MySQL: chrclasses_dbc 6/12, spell_dbc sample, spellrunecost join - FRACTURED_SPELL_IDS override for custom spell spot-checks Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
# FRACTURED_SYSTEMD_UNITS — space-separated units to try (default: "fractured-world worldserver ac-worldserver")
|
# FRACTURED_SYSTEMD_UNITS — space-separated units to try (default: "fractured-world worldserver ac-worldserver")
|
||||||
# FRACTURED_MYSQL — prefix to invoke mysql, e.g. 'mysql -uacore -h127.0.0.1' (password via ~/.my.cnf or -p)
|
# FRACTURED_MYSQL — prefix to invoke mysql, e.g. 'mysql -uacore -h127.0.0.1' (password via ~/.my.cnf or -p)
|
||||||
# If unset, SQL blocks are printed for manual copy-paste only.
|
# If unset, SQL blocks are printed for manual copy-paste only.
|
||||||
|
# FRACTURED_SPELL_IDS — space-separated spell IDs for spell_dbc spot-check (defaults to common DK rune spenders)
|
||||||
#
|
#
|
||||||
# Paste the full script output to your maintainer (redact any paths/passwords you consider sensitive).
|
# Paste the full script output to your maintainer (redact any paths/passwords you consider sensitive).
|
||||||
|
|
||||||
@@ -133,19 +134,47 @@ else
|
|||||||
echo "(skipped — no binary)"
|
echo "(skipped — no binary)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
sub "1D — binary fingerprint (compare sha256 across dev vs VPS)"
|
||||||
|
if [[ -n "$WS" && -f "$WS" ]]; then
|
||||||
|
if command -v sha256sum >/dev/null 2>&1; then
|
||||||
|
sha256sum "$WS"
|
||||||
|
elif command -v shasum >/dev/null 2>&1; then
|
||||||
|
shasum -a 256 "$WS"
|
||||||
|
else
|
||||||
|
echo "(no sha256sum — install coreutils)"
|
||||||
|
fi
|
||||||
|
echo "Embedded revision / version strings (first matches):"
|
||||||
|
strings "$WS" 2>/dev/null | grep -iE 'azerothcore|revision|git|commit|build.*20[0-9]{2}' | head -25 || echo "(none matched)"
|
||||||
|
else
|
||||||
|
echo "(skipped — no binary)"
|
||||||
|
fi
|
||||||
|
|
||||||
CONF="${FRACTURED_WORLDSERVER_CONF:-}"
|
CONF="${FRACTURED_WORLDSERVER_CONF:-}"
|
||||||
if [[ -z "$CONF" && -n "$WS" ]]; then
|
if [[ -z "$CONF" && -n "$WS" ]]; then
|
||||||
CONF=$(guess_worldserver_conf "$WS")
|
CONF=$(guess_worldserver_conf "$WS")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sub "2B — worldserver.conf updater / source (first match)"
|
sub "2B — worldserver.conf (updater / source / rates / paragon)"
|
||||||
if [[ -n "$CONF" && -f "$CONF" ]]; then
|
if [[ -n "$CONF" && -f "$CONF" ]]; then
|
||||||
echo "Using conf: $CONF"
|
echo "Using conf: $CONF"
|
||||||
grep -E '^SourceDirectory|^Updates\.EnableDatabases|^Updates\.AutoSetup|^[[:space:]]*SourceDirectory|^[[:space:]]*Updates\.EnableDatabases|^[[:space:]]*Updates\.AutoSetup' "$CONF" 2>/dev/null || echo "(no matching lines or unreadable)"
|
grep -E '^SourceDirectory|^Updates\.EnableDatabases|^Updates\.AutoSetup|^[[:space:]]*SourceDirectory|^[[:space:]]*Updates\.EnableDatabases|^[[:space:]]*Updates\.AutoSetup' "$CONF" 2>/dev/null || echo "(no matching lines or unreadable)"
|
||||||
|
echo "--- Rate.RunicPower (if set) ---"
|
||||||
|
grep -iE '^Rate\.RunicPower|^[[:space:]]*Rate\.RunicPower' "$CONF" 2>/dev/null || echo "(not set — server uses default)"
|
||||||
|
echo "--- Paragon.* module options (if any) ---"
|
||||||
|
grep -iE '^Paragon\.|^[[:space:]]*Paragon\.' "$CONF" 2>/dev/null || echo "(no Paragon.* keys in worldserver.conf — check etc/modules/mod_paragon.conf)"
|
||||||
else
|
else
|
||||||
echo "WARN: worldserver.conf not found. Set FRACTURED_WORLDSERVER_CONF=/path/to/worldserver.conf"
|
echo "WARN: worldserver.conf not found. Set FRACTURED_WORLDSERVER_CONF=/path/to/worldserver.conf"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$WS" && -f "$WS" ]]; then
|
||||||
|
ETCGuess=$(readlink -f "$(dirname "$WS")/../etc" 2>/dev/null || true)
|
||||||
|
MPC="$ETCGuess/modules/mod_paragon.conf"
|
||||||
|
if [[ -f "$MPC" ]]; then
|
||||||
|
sub "2B2 — mod_paragon.conf Paragon.* toggles (non-comment)"
|
||||||
|
grep -E '^Paragon\.' "$MPC" 2>/dev/null | head -40 || echo "(no uncommented Paragon.* lines)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
sub "2A — path-like strings from binary (candidate source roots)"
|
sub "2A — path-like strings from binary (candidate source roots)"
|
||||||
if [[ -n "$WS" && -f "$WS" ]]; then
|
if [[ -n "$WS" && -f "$WS" ]]; then
|
||||||
binary_strings_paths "$WS" || true
|
binary_strings_paths "$WS" || true
|
||||||
@@ -203,12 +232,41 @@ if [[ -n "${FRACTURED_MYSQL:-}" ]]; then
|
|||||||
$FRACTURED_MYSQL acore_world -e "$SQL_WORLD" || echo "(mysql failed for acore_world)"
|
$FRACTURED_MYSQL acore_world -e "$SQL_WORLD" || echo "(mysql failed for acore_world)"
|
||||||
echo "--- acore_characters ---"
|
echo "--- acore_characters ---"
|
||||||
$FRACTURED_MYSQL acore_characters -e "$SQL_CHAR" || echo "(mysql failed for acore_characters)"
|
$FRACTURED_MYSQL acore_characters -e "$SQL_CHAR" || echo "(mysql failed for acore_characters)"
|
||||||
|
|
||||||
|
sub "DATABASE — DBC parity for runes / Paragon (acore_world)"
|
||||||
|
# Common DK rune spenders (WotLK). Override: export FRACTURED_SPELL_IDS='45477 45462'
|
||||||
|
SPELL_IDS="${FRACTURED_SPELL_IDS:-45477 45462 49923 55050 56815}"
|
||||||
|
IDS_CSV=$(echo "$SPELL_IDS" | tr ' ' ',')
|
||||||
|
echo "--- spell_dbc table size (world DB overrides; 0 rows = all spells from disk DBC only) ---"
|
||||||
|
$FRACTURED_MYSQL acore_world -e "SELECT COUNT(*) AS spell_dbc_rows FROM spell_dbc;" 2>/dev/null || echo "(spell_dbc missing or no access)"
|
||||||
|
echo "--- chrclasses_dbc class 12 (DisplayPower: 0=mana, 5=POWER_RUNE in AC) ---"
|
||||||
|
$FRACTURED_MYSQL acore_world -e "
|
||||||
|
SELECT ID, DisplayPower, Name_Lang_enUS FROM chrclasses_dbc WHERE ID IN (6,12);
|
||||||
|
" 2>/dev/null || echo "(query failed — chrclasses_dbc missing?)"
|
||||||
|
echo "--- spell_dbc sample (PowerType 5 = rune for server checks) ---"
|
||||||
|
$FRACTURED_MYSQL acore_world -e "
|
||||||
|
SELECT ID, PowerType, ManaCost, RuneCostID FROM spell_dbc WHERE ID IN ($IDS_CSV);
|
||||||
|
" 2>/dev/null || echo "(query failed — spell_dbc missing or wrong schema)"
|
||||||
|
echo "--- spellrunecost_dbc for RuneCostIDs from those spells ---"
|
||||||
|
$FRACTURED_MYSQL acore_world -e "
|
||||||
|
SELECT s.ID AS spell_id, s.RuneCostID, r.Blood, r.Unholy, r.Frost, r.RunicPower
|
||||||
|
FROM spell_dbc s
|
||||||
|
LEFT JOIN spellrunecost_dbc r ON r.ID = s.RuneCostID
|
||||||
|
WHERE s.ID IN ($IDS_CSV);
|
||||||
|
" 2>/dev/null || echo "(join failed — check spellrunecost_dbc)"
|
||||||
|
echo "Compare this block to a known-good dev DB: mismatched PowerType/RuneCostID on the same spell_id = data drift."
|
||||||
else
|
else
|
||||||
echo "FRACTURED_MYSQL not set — run manually (example: export FRACTURED_MYSQL='mysql -uUSER -hHOST')"
|
echo "FRACTURED_MYSQL not set — run manually (example: export FRACTURED_MYSQL='mysql -uUSER -hHOST')"
|
||||||
echo "acore_world:"
|
echo "acore_world:"
|
||||||
echo "$SQL_WORLD"
|
echo "$SQL_WORLD"
|
||||||
echo "acore_characters:"
|
echo "acore_characters:"
|
||||||
echo "$SQL_CHAR"
|
echo "$SQL_CHAR"
|
||||||
|
echo ""
|
||||||
|
echo "Optional DBC parity (acore_world) — run after connecting:"
|
||||||
|
echo " SELECT ID, DisplayPower, Name_Lang_enUS FROM chrclasses_dbc WHERE ID IN (6,12);"
|
||||||
|
echo " SELECT ID, PowerType, ManaCost, RuneCostID FROM spell_dbc WHERE ID IN (45477,45462,49923,55050,56815);"
|
||||||
|
echo " SELECT s.ID, s.RuneCostID, r.Blood, r.Unholy, r.Frost, r.RunicPower FROM spell_dbc s"
|
||||||
|
echo " LEFT JOIN spellrunecost_dbc r ON r.ID = s.RuneCostID WHERE s.ID IN (45477,45462,49923,55050,56815);"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sub "mod_paragon.conf vs .dist (install etc)"
|
sub "mod_paragon.conf vs .dist (install etc)"
|
||||||
@@ -233,8 +291,9 @@ fi
|
|||||||
|
|
||||||
hr
|
hr
|
||||||
echo "DELIVERABLE for maintainer:"
|
echo "DELIVERABLE for maintainer:"
|
||||||
echo "1) Paste sections 1A, 1B, 1C above."
|
echo "1) Paste 1A–1D (binary mtime, git HEAD, strings, sha256 + revision strings)."
|
||||||
echo "2) Paste DATABASE query results (or run SQL manually if FRACTURED_MYSQL was unset)."
|
echo "2) Paste DATABASE blocks: updates + DBC parity (chrclasses 12, spell_dbc, spellrunecost join)."
|
||||||
echo "3) Paste 2A path strings + 2D listings (or MISSING lines)."
|
echo "3) Paste 2A path strings + 2D listings (or MISSING lines)."
|
||||||
echo "4) Add ONE sentence: exact in-game symptom for testers."
|
echo "4) From dev: same 1D sha256 of worldserver OR same SQL block — proves binary/data parity."
|
||||||
|
echo "5) ONE sentence: exact in-game symptom."
|
||||||
echo "Done."
|
echo "Done."
|
||||||
|
|||||||
Reference in New Issue
Block a user