Chiamala come
addon:GetConditionHealthForecast(unit, healthTarget, percentage, mode, cache)
Disponibile direttamente tramite addon; non serve alcuna dipendenza.
Cosa fa
Stima il tempo necessario per raggiungere la salute selezionata. Memorizza in cache per passaggio di valutazione le osservazioni native complete dell'identità e quelle scalari pigre, mentre fornitore, cronologia, finestra, orologio e previsione restano in tempo reale. Se il bersaglio coincide esattamente restituisce zero prima di elaborare la cronologia. Preserva il risultato false intenzionale di nessuna stima e quello zero inizializzato per tassi nulli o opposti; dati richiesti non validi, overflow o esaurimento del lavoro di 4096 unità risultano non disponibili. Non modifica mai la cronologia e non inventa stime parziali.
Argomenti
| Nome | Tipo | Cosa fa |
|---|---|---|
self | RMAddon | Istanza dell'addon Rotation Master (implicita nelle chiamate con due punti). |
unit | string | Identificativo unità selezionato, invariato nelle osservazioni. |
healthTarget | number | Salute bersaglio assoluta (un valore negativo indica un deficit) o frazione percentuale. |
percentage | boolean | True seleziona la salute bersaglio in percentuale e dati del fornitore facoltativi appena letti. |
mode | any | noheals seleziona solo i danni; nodmg seleziona solo le cure; altri valori leggibili selezionano entrambi. |
cache | table | nil | Cache delle osservazioni native del passaggio di valutazione; con nil esegue nuove query. |
Valori restituiti
| 1 | number | boolean | nil | Tempo stimato finito, zero incluso, false per assenza accertata/nessuna stima, oppure nil se non disponibile. |
|---|---|---|
| 2 | string | nil | Motivo di indisponibilità di osservazione, cronologia, limite di lavoro o aritmetica. |
Edizioni
Le funzioni di supporto integrate sono registrate su ogni edizione. Ciò che cambia è l'API di gioco che leggono; dove ne manca una, la funzione di supporto ripiega su un'alternativa o restituisce nil con un motivo.
Non legge direttamente alcuna API di gioco.
Valori segreti (Retail e Forever)
Su Retail e Forever il gioco fornisce agli addon valori segreti. Questa funzione di supporto controlla ciò che legge (addon.Platform:CanReadValue) e restituisce nil con un motivo come restricted-value invece di un valore segreto che non può confrontare. Considera nil come non disponibile, non come false.
Come la chiama l'addon
- Tempo prima della salute (evaluate)
local eta,reason=addon:GetConditionHealthForecast(value.unit,value.health,false,value.mode,cache) - Tempo prima della percentuale di salute (evaluate)
local eta,reason=addon:GetConditionHealthForecast(value.unit,value.health,true,value.mode,cache)
Dipendenze
finite→Core.health_forecast_conditions.finitenativeValue→Core.health_forecast_conditions.nativeValuereadField→Core.health_forecast_conditions.readField
Sorgente
Core/health_forecast_conditions.lua, riga 78. Nel gioco è in sola lettura; Duplica crea una copia modificabile.
Core.health_forecast_conditions.GetConditionHealthForecast(self, unit, healthTarget, percentage, mode, cache)
local platform=self.Platform
local policy=platform:GetCombatDataPolicy()
if policy~='probe' and policy~='restricted' then return nil,'unsupported-policy' end
if not platform:CanReadValue(unit) or not platform:CanReadValue(percentage) or not platform:CanReadValue(cache) then return nil,'restricted-value' end
if type(unit)~='string' or unit=='' or type(percentage)~='boolean' then return nil,'invalid-health-forecast-query' end
if cache~=nil and type(cache)~='table' then return nil,'invalid-health-forecast-cache' end
if type(platform.GetHealthForecastIdentityObservation)~='function' then return nil,'missing-api' end
local guid,identityReason=addon.Functions.cache.getCached(cache,platform.GetHealthForecastIdentityObservation,platform,unit)
if not platform:CanReadValue(guid) then return nil,'restricted-value' end
if guid==nil then return nil,identityReason or 'unit-guid-unavailable' end
if guid==false then return false end
if type(guid)~='string' or guid=='' then return nil,'invalid-health-forecast-identity' end
local current,maximum
if percentage then
if type(platform.GetHealthForecastProviderObservation)~='function' then return nil,'missing-api' end
local provider,why=platform:GetHealthForecastProviderObservation(unit)
if not platform:CanReadValue(provider) then return nil,'restricted-value' end
if provider==nil then return nil,why or 'health-provider-unavailable' end
current,why=readField(platform,provider,'current')
if why then return nil,why end
maximum,why=readField(platform,provider,'maximum')
if why then return nil,why end
if current==nil or current==false then current,why=nativeValue(self,unit,'current',cache);if current==nil then return nil,why end end
if maximum==nil or maximum==false then maximum,why=nativeValue(self,unit,'maximum',cache);if maximum==nil then return nil,why end end
else
local why;current,why=nativeValue(self,unit,'current',cache)
if current==nil then return nil,why end
end
local valid,reason=finite(platform,current)
if not valid then return nil,reason end
if current<0 then return nil,'invalid-health-forecast-number' end
valid,reason=finite(platform,healthTarget)
if not valid then return nil,reason end
local target=healthTarget
if percentage then
valid,reason=finite(platform,maximum)
if not valid then return nil,reason end
if maximum<0 then return nil,'invalid-health-forecast-number' end
target=maximum*healthTarget
elseif healthTarget<0 then
local why;maximum,why=nativeValue(self,unit,'maximum',cache)
if maximum==nil then return nil,why end
target=target+maximum
end
valid,reason=finite(platform,target)
if not valid then return nil,reason end
if current==target then return 0 end
local history,why=readField(platform,self.damageHistory,guid)
if why then return nil,why end
if history==nil or history==false then return false end
if type(history)~='table' then return nil,'invalid-forecast-history' end
if not platform:CanReadValue(mode) then return nil,'restricted-value' end
local noheals,nodmg=mode=='noheals',mode=='nodmg'
local profile,profileReason=readField(platform,self.db,'profile')
if profileReason then return nil,profileReason end
local window,windowReason=readField(platform,profile,'damage_history')
if windowReason then return nil,windowReason end
valid,reason=finite(platform,window)
if not valid then return nil,reason end
if type(platform.GetHealthForecastTimeObservation)~='function' then return nil,'missing-api' end
local now,timeReason=platform:GetHealthForecastTimeObservation()
if not platform:CanReadValue(now) then return nil,'restricted-value' end
if now==nil then return nil,timeReason or 'forecast-time-unavailable' end
valid,reason=finite(platform,now)
if not valid then return nil,reason end
local functions=self.Functions.forecast
if type(functions)~='table' or type(functions.calculate)~='function' then return nil,'forecast-kernel-unavailable' end
local ok,rate,seconds,forecastReason=pcall(functions.calculate,platform,history,window,noheals,nodmg,now)
if not ok then return nil,'forecast-kernel-error' end
if not platform:CanReadValue(forecastReason) then return nil,'restricted-value' end
if forecastReason~=nil then return nil,forecastReason end
if not platform:CanReadValue(rate) then return nil,'restricted-value' end
if rate==nil or rate==false then return false end
valid,reason=finite(platform,rate)
if not valid then return nil,reason end
valid,reason=finite(platform,seconds)
if not valid then return nil,reason end
if seconds<=2 then return false end
local eta=0
local distance,divisor
if rate<0 and target<current then distance=current-target;divisor=-rate
elseif rate>0 and target>current then distance=target-current;divisor=rate end
if distance~=nil then
valid,reason=finite(platform,distance)
if not valid then return nil,reason end
eta=distance/divisor
end
valid,reason=finite(platform,eta)
if not valid then return nil,reason end
return eta