Tighten actor cache loading flow
- Clarify client loading status text - Document server-side actor hydration and snapshot recovery - Stop hot reads from forcing repository initialization
This commit is contained in:
parent
cd3e937cdc
commit
3599f802c8
@ -33,7 +33,7 @@ GVAR(ActorRepositoryBaseClass) = compileFinal createHashMapFromArray [
|
|||||||
[SRPC(actor,requestInitActor), [_uid]] call CFUNC(serverEvent);
|
[SRPC(actor,requestInitActor), [_uid]] call CFUNC(serverEvent);
|
||||||
_self set ["lastSave", time];
|
_self set ["lastSave", time];
|
||||||
|
|
||||||
systemChat format ["Actor loaded for %1", name player];
|
systemChat format ["Loading actor for %1", name player];
|
||||||
diag_log "[FORGE:Client:Actor] Actor Repository Initialized!";
|
diag_log "[FORGE:Client:Actor] Actor Repository Initialized!";
|
||||||
}],
|
}],
|
||||||
["save", compileFinal {
|
["save", compileFinal {
|
||||||
|
|||||||
@ -4,8 +4,6 @@ PREP_RECOMPILE_START;
|
|||||||
#include "XEH_PREP.hpp"
|
#include "XEH_PREP.hpp"
|
||||||
PREP_RECOMPILE_END;
|
PREP_RECOMPILE_END;
|
||||||
|
|
||||||
// private _category = [QUOTE(MOD_NAME), LLSTRING(displayName)];
|
|
||||||
|
|
||||||
[QGVAR(requestInitActor), {
|
[QGVAR(requestInitActor), {
|
||||||
params [["_uid", "", [""]]];
|
params [["_uid", "", [""]]];
|
||||||
|
|
||||||
|
|||||||
@ -154,6 +154,8 @@ GVAR(ActorBaseStore) = compileFinal createHashMapFromArray [
|
|||||||
|
|
||||||
if (_uid isEqualTo "") exitWith { createHashMap };
|
if (_uid isEqualTo "") exitWith { createHashMap };
|
||||||
if (_initialize) then {
|
if (_initialize) then {
|
||||||
|
// Missing actors should be created explicitly from a server snapshot
|
||||||
|
// before the hot cache is initialized.
|
||||||
private _ensureResult = _self call ["ensurePersistentActor", [_uid]];
|
private _ensureResult = _self call ["ensurePersistentActor", [_uid]];
|
||||||
if !(_ensureResult isEqualType true && { _ensureResult }) exitWith { createHashMap };
|
if !(_ensureResult isEqualType true && { _ensureResult }) exitWith { createHashMap };
|
||||||
};
|
};
|
||||||
@ -207,6 +209,8 @@ GVAR(ActorBaseStore) = compileFinal createHashMapFromArray [
|
|||||||
createHashMap
|
createHashMap
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Hot actor reads can still surface older partial records. Repair them
|
||||||
|
// from the live player snapshot when possible and persist the result.
|
||||||
private _hydratedActor = GVAR(ActorModel) call ["migrate", [+_actor]];
|
private _hydratedActor = GVAR(ActorModel) call ["migrate", [+_actor]];
|
||||||
private _defaults = GVAR(ActorModel) call ["defaults", []];
|
private _defaults = GVAR(ActorModel) call ["defaults", []];
|
||||||
private _player = [_uid] call EFUNC(common,getPlayer);
|
private _player = [_uid] call EFUNC(common,getPlayer);
|
||||||
@ -338,9 +342,6 @@ GVAR(ActorBaseStore) = compileFinal createHashMapFromArray [
|
|||||||
params [["_uid", "", [""]], ["_field", "", [""]]];
|
params [["_uid", "", [""]], ["_field", "", [""]]];
|
||||||
|
|
||||||
private _actor = _self call ["loadHotActor", [_uid, false]];
|
private _actor = _self call ["loadHotActor", [_uid, false]];
|
||||||
if (_actor isEqualTo createHashMap) then {
|
|
||||||
_actor = _self call ["loadHotActor", [_uid, true]];
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_field isEqualTo "") exitWith { _actor };
|
if (_field isEqualTo "") exitWith { _actor };
|
||||||
_actor getOrDefault [_field, nil]
|
_actor getOrDefault [_field, nil]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user