Support persistent residents with normal resurrection and closer companions
Core tests / core (push) Successful in 2m54s

This commit is contained in:
Codex
2026-09-24 05:33:45 +12:00
parent 0731774457
commit 64e2796a74
11 changed files with 85 additions and 16 deletions
+11 -2
View File
@@ -1,6 +1,13 @@
-- Persistent hardcore retirement. The native random-bot manager fills vacancies
-- from its factory-created, unused starting-level reserve; identities are never reset.
-- Install only after deploy/playable/install-lifecycle.py has seeded the registry.
-- The persisted mode is synchronized from dashboard settings by operations-agent.
AuthDBExecute("CREATE TABLE IF NOT EXISTS azerothai_realm_rules (id TINYINT PRIMARY KEY,hardcore TINYINT NOT NULL)")
AuthDBExecute("INSERT IGNORE INTO azerothai_realm_rules VALUES (1,1)")
function AzerothAIHardcoreEnabled()
local q=AuthDBQuery("SELECT hardcore FROM azerothai_realm_rules WHERE id=1")
return not q or q:GetUInt32(0)~=0
end
local residents = {}
local ready = false
local vetoAt = {}
@@ -68,6 +75,7 @@ local function identity(player)
end
local function recordDeath(player)
if not AzerothAIHardcoreEnabled() then return end
local row,guid=identity(player)
if not row or row.state=="dead" or row.state=="blocked" then return end
row.state="dead"
@@ -77,6 +85,7 @@ local function recordDeath(player)
end
local function enforce()
local hardcore=AzerothAIHardcoreEnabled()
if not ready then reload() end
-- The dashboard may receive a verified death from an older transport backlog
-- after this process seeded its registry. Import terminal states only; never
@@ -114,7 +123,7 @@ local function enforce()
for _,player in pairs(players) do
local guid=player:GetGUIDLow()
local row=residents[guid]
if row and row.state=="active" and row.account==player:GetAccountId() and row.name==player:GetName() and not player:IsDead() then
if row and row.state=="active" and row.account==player:GetAccountId() and row.name==player:GetName() and (not hardcore or not player:IsDead()) then
returning[#returning+1]={player=player,row=row,guid=guid}
end
end
@@ -203,4 +212,4 @@ end,1000,0)
reload()
enforce()
PrintInfo("[AzerothAI] Persistent hardcore retirement and reserve replacement enabled")
PrintInfo("[AzerothAI] Persistent residents and faction cap enabled; hardcore="..tostring(AzerothAIHardcoreEnabled()))