diff --git a/arma/client/addons/actor/functions/fnc_initRepository.sqf b/arma/client/addons/actor/functions/fnc_initRepository.sqf index 71cdd8a..12a2b4d 100644 --- a/arma/client/addons/actor/functions/fnc_initRepository.sqf +++ b/arma/client/addons/actor/functions/fnc_initRepository.sqf @@ -33,7 +33,7 @@ GVAR(ActorRepositoryBaseClass) = compileFinal createHashMapFromArray [ [SRPC(actor,requestInitActor), [_uid]] call CFUNC(serverEvent); _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!"; }], ["save", compileFinal { diff --git a/arma/server/addons/actor/XEH_preInit.sqf b/arma/server/addons/actor/XEH_preInit.sqf index d47f97b..4fff430 100644 --- a/arma/server/addons/actor/XEH_preInit.sqf +++ b/arma/server/addons/actor/XEH_preInit.sqf @@ -4,8 +4,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; -// private _category = [QUOTE(MOD_NAME), LLSTRING(displayName)]; - [QGVAR(requestInitActor), { params [["_uid", "", [""]]]; diff --git a/arma/server/addons/actor/functions/fnc_initActorStore.sqf b/arma/server/addons/actor/functions/fnc_initActorStore.sqf index d48a960..2f19cc5 100644 --- a/arma/server/addons/actor/functions/fnc_initActorStore.sqf +++ b/arma/server/addons/actor/functions/fnc_initActorStore.sqf @@ -154,6 +154,8 @@ GVAR(ActorBaseStore) = compileFinal createHashMapFromArray [ if (_uid isEqualTo "") exitWith { createHashMap }; 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]]; if !(_ensureResult isEqualType true && { _ensureResult }) exitWith { createHashMap }; }; @@ -207,6 +209,8 @@ GVAR(ActorBaseStore) = compileFinal createHashMapFromArray [ 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 _defaults = GVAR(ActorModel) call ["defaults", []]; private _player = [_uid] call EFUNC(common,getPlayer); @@ -338,9 +342,6 @@ GVAR(ActorBaseStore) = compileFinal createHashMapFromArray [ params [["_uid", "", [""]], ["_field", "", [""]]]; private _actor = _self call ["loadHotActor", [_uid, false]]; - if (_actor isEqualTo createHashMap) then { - _actor = _self call ["loadHotActor", [_uid, true]]; - }; if (_field isEqualTo "") exitWith { _actor }; _actor getOrDefault [_field, nil]