Support persistent residents with normal resurrection and closer companions
Core tests / core (push) Successful in 2m54s
Core tests / core (push) Successful in 2m54s
This commit is contained in:
@@ -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()))
|
||||
|
||||
Reference in New Issue
Block a user