58 protected ref array<SCR_WorkshopItem>
m_aDependent =
new array<SCR_WorkshopItem>;
64 protected string m_sId;
134 bool myRating, myRatingSet;
138 if (description.Length() > 32)
140 description = description.Substring(0, 32);
141 description = description +
" <truncated>";
145 if (summary.Length() > 32)
147 summary = summary.Substring(0, 32);
148 summary = summary +
" <truncated>";
179 _print(
string.Format(
" MyRating: %1", myRating));
180 _print(
string.Format(
" MyRatingSet: %1", myRatingSet));
183 _print(
string.Format(
" Description: %1", description));
184 _print(
string.Format(
" Summary: %1", summary));
199 _print(
string.Format(
" Dependencies: %1", dependencies.Count()));
200 foreach (SCR_WorkshopItem dep : dependencies)
202 _print(
string.Format(
" - %1, Offline: %2, Update Available: %3", dep.GetName(), dep.GetOffline(), dep.GetUpdateAvailable()));
214 #ifdef WORKSHOP_DEBUG
240 array<ref SCR_WorkshopItem> dependencies =
new array<ref SCR_WorkshopItem>;
246 dependencies.Insert(a);
255 array<ref SCR_WorkshopItem> dependent =
new array<ref SCR_WorkshopItem>;
277 return rev.GetVersion();
284 array<string> versions =
new array<string>;
291 versions.Insert(rev.GetVersion());
305 string targetClientVersion =
"1.0.0";
306 string addonClientVersion =
m_Item.GetActiveRevision().GetGameVersion();
308 array<string> targetNumbers = {};
309 targetClientVersion.Split(
".", targetNumbers,
false);
311 array<string> addonNumbers = {};
312 addonClientVersion.Split(
".", addonNumbers,
false);
314 for (
int i = 0, count = targetNumbers.Count(); i < count; i++)
316 int targetNumber = targetNumbers[i].ToInt();
317 int addonNumber = addonNumbers[i].ToInt();
319 if (targetNumber > addonNumber)
335 #ifdef WORKSHOP_DEBUG
336 _print(
"WorkshopItem.Rate(%1)", newRating);
339 m_Item.Rate(newRating, null);
341 #ifdef WORKSHOP_DEBUG
342 _print(
"OnChanged: SetMyRating()");
357 #ifdef WORKSHOP_DEBUG
358 _print(
"WorkshopItem.ResetRating()");
363 #ifdef WORKSHOP_DEBUG
364 _print(
"OnChanged: ResetMyRating()");
384 Debug.Error(
"SCR_WorkshopItem: Missing item to change favorite state!");
400 #ifdef WORKSHOP_DEBUG
401 _print(
"OnChanged: SetFavourite()");
409 return m_Item.IsFavorite();
442 #ifdef WORKSHOP_DEBUG
443 _print(
"OnChanged: Subscribe()");
463 #ifdef WORKSHOP_DEBUG
464 _print(
"OnChanged: SetEnabled()");
483 if (!missing.IsEmpty())
492 if (dep.GetOffline() && dep.GetEnabled() != enable)
494 dep.SetEnabled(enable);
508 return m_Item.IsEnabled();
527 int accessState =
m_Item.GetAccessState();
551 return author.IsBlocked();
580 Debug.Error(
"SCR_WorkshopItem: Missing item to delete!");
585 if (!
m_Item.GetPendingDownload() && !
m_Item.GetActiveRevision())
587 Debug.Error(
"SCR_WorkshopItem: Attempt to delete item which is not downloaded!");
593 #ifdef WORKSHOP_DEBUG
594 _print(
"OnChanged: DeleteLocally()");
606 m_Item.DeleteDownloadProgress();
639 return author.Name();
650 return m_Item.GetLatestRevision() &&
m_Item.GetLatestRevision().GetBackendEnv() ==
GetGame().GetBackendApi().GetBackendEnv();
661 return m_Item.GetActiveRevision();
673 return m_Item.GetActiveRevision();
689 return Revision.AreEqual(ActiveV, RequiredV);
697 return m_Item.GetActiveRevision().IsCorrupted();
710 return m_Item.Thumbnail();
716 array<BackendImage> gallery = {};
731 return m_Item.Description();
749 return m_Item.RatingCount();
768 Debug.Error(
"SCR_WorkshopItem: Dependency or WorkshopItem are not set!");
778 m_OnChanged.Invoke();
793 return m_Item.AverageRating();
805 targetRevision = null;
811 progress =
m_Item.GetProgress();
833 bool rawUpdateAvailable =
false;
836 Debug.Error(
"GetUpdateAvailable() was called on null item.");
841 rawUpdateAvailable = rev && !rev.IsDownloaded();
845 return rawUpdateAvailable || updateAvailableByVersions;
918 if (dependencies.IsEmpty())
919 return new array<ref SCR_WorkshopItem>;
930 return m_Item.GetTimeSinceLastPlay();
939 return m_Item.GetTimeSinceFirstDownload();
951 bool latestRevision = (targetRevision == null);
963 if (isDownloadRunning)
993 #ifdef WORKSHOP_DEBUG
995 _print(
string.Format(
"Download: %1", targetRevision.GetVersion()));
997 _print(
string.Format(
"Download: the latest one"));
1000 bool running =
false;
1010 #ifdef WORKSHOP_DEBUG
1011 _print(
"DownloadLatestVersion()");
1017 bool running =
false;
1043 #ifdef WORKSHOP_DEBUG
1044 _print(
"DownloadDependenciesLatest()");
1175 reportDescription =
string.Empty;
1179 reportType =
m_Item.GetReportType();
1180 reportDescription =
m_Item.GetReportDescription();
1239 if (r.GetVersion() == version)
1257 Debug.Error(
"SCR_WorkshopItem: Item is null!");
1264 Debug.Error(
"SCR_WorkshopItem: Item is present but LatestRevision is null!");
1280 #ifdef WORKSHOP_DEBUG
1281 _print(
"Callback_AskDetails_OnGetAsset()");
1290 #ifdef WORKSHOP_DEBUG
1291 _print(
"Callback_AskDetails_OnGetAsset(): Received no revisions",
LogLevel.ERROR);
1296 #ifdef WORKSHOP_DEBUG
1297 _print(
"Callback_AskDetails_OnGetAsset(): Received revisions:");
1299 foreach (
string ver : versions)
1301 _print(
string.Format(
"Callback_AskDetails_OnGetAsset(): %1", ver));
1333 m_OnGetAsset.Invoke(
this);
1335 #ifdef WORKSHOP_DEBUG
1336 _print(
"OnChanged: Callback_AskDetails_OnGetAsset");
1347 if (callback.GetRestResult() ==
ERestResult.EREST_ERROR_TIMEOUT)
1349 #ifdef WORKSHOP_DEBUG
1350 _print(
"Callback_AskDetails_OnTimeout()");
1353 m_OnTimeout.Invoke(
this);
1360 m_OnGetAsset.Invoke(
this);
1371 #ifdef WORKSHOP_DEBUG
1372 _print(
"Callback_LoadDependencies_OnSuccess()");
1381 #ifdef WORKSHOP_DEBUG
1382 _print(
"Callback_LoadDependencies_OnError()");
1385 if (cb.GetRestResult() ==
ERestResult.EREST_ERROR_TIMEOUT)
1387 m_OnTimeout.Invoke(
this);
1391 m_OnError.Invoke(
this);
1401 #ifdef WORKSHOP_DEBUG
1402 _print(
"Callback_LoadScenarios_OnSuccess()");
1411 #ifdef WORKSHOP_DEBUG
1412 _print(
"Callback_LoadScenarios_OnError()");
1415 if (cb.GetRestResult() ==
ERestResult.EREST_ERROR_TIMEOUT)
1417 m_OnTimeout.Invoke(
this);
1421 m_OnError.Invoke(
this);
1430 m_OnMyReportLoaded.Invoke(
this);
1436 m_OnMyReportLoadError.Invoke(
this);
1452 #ifdef WORKSHOP_DEBUG
1454 _print(
string.Format(
"WorkshopItem was missing, but was loaded: %1",
m_Item.Name()));
1466 array<Revision> revisionsTemp =
new array<Revision>;
1467 m_Item.GetRevisions(revisionsTemp);
1472 if (revisionsTemp.IsEmpty())
1474 #ifdef WORKSHOP_DEBUG
1476 _print(
string.Format(
"Revisions are not loaded yet. Revision array is empty."));
1496 #ifdef WORKSHOP_DEBUG
1498 _print(
"TryLoadDependencies()");
1504 array<WorkshopItem> dependencies =
new array<WorkshopItem>;
1510 m_OnDependenciesLoaded.Invoke(
this);
1526 m_OnDependenciesLoaded.Invoke(
this);
1534 #ifdef WORKSHOP_DEBUG
1536 _print(
"TryLoadScenarios()");
1547 #ifdef WORKSHOP_DEBUG
1548 _print(
string.Format(
"TryLoadScenarios(): Received %1 scenarios",
m_aMissions.Count()));
1549 _print(
"OnChanged: Callback_AskDetails_OnGetScenarios");
1554 m_OnScenariosLoaded.Invoke(
this);
1610 #ifdef WORKSHOP_DEBUG
1611 _print(
string.Format(
"Internal_StartDownload(): %1, %2", targetRevision.GetVersion(), callback));
1617 #ifdef WORKSHOP_DEBUG
1618 _print(
"Internal_StartDownload(): UGC privileges were not checked or false!");
1624 #ifdef WORKSHOP_DEBUG
1625 _print(
"Internal_StartDownload(): Calling WorkshopItem.Download ...");
1632 Debug.Error(
"SCR_WorkshopItem: Cannot download because Item and Dependency are missing!");
1640 Debug.Error(
"SCR_WorkshopItem: Cannot download because Item was not cached!");
1646 m_Item.Download(callback, targetRevision);
1654 #ifdef WORKSHOP_DEBUG
1655 _print(
"Internal_CancelDownload()");
1660 Debug.Error(
"SCR_WorkshopItem: Cannot cancel download because Item is missing!");
1675 m_OnCanceled.Invoke(
this);
1681 m_OnError.Invoke(
this);
1682 m_OnCanceled.Invoke(
this);
1737 #ifdef WORKSHOP_DEBUG
1738 _print(
string.Format(
"Internal_Report(): %1, %2, %3", eReport, sMessage, callback));
1744 m_Item.Report(eReport, sMessage, callback);
1746 #ifdef WORKSHOP_DEBUG
1747 _print(
"OnChanged: Internal_Report()");
1759 #ifdef WORKSHOP_DEBUG
1760 _print(
string.Format(
"Internal_CancelReport(): %1", callback));
1766 m_Item.CancelReport(callback);
1768 #ifdef WORKSHOP_DEBUG
1769 _print(
"OnChanged: Internal_CancelReport()");
1780 #ifdef WORKSHOP_DEBUG
1781 _print(
string.Format(
"Internal_AddAuthorBlock(): %1", callback));
1791 author.AddBlock(callback);
1793 #ifdef WORKSHOP_DEBUG
1794 _print(
"OnChanged: Internal_AddAuthorBlock()");
1805 #ifdef WORKSHOP_DEBUG
1806 _print(
string.Format(
"Internal_RemoveAuthorBlock(): %1", callback));
1816 author.RemoveBlock(callback);
1818 #ifdef WORKSHOP_DEBUG
1819 _print(
"OnChanged: Internal_RemoveAuthorBlock()");
1851 newProgress =
m_Item.GetProgress();
1865 #ifdef WORKSHOP_DEBUG
1866 _print(
"OnChanged: Internal_Update: Download Is Completed");
1871 m_OnDownloadComplete.Invoke(
this);
1876 #ifdef WORKSHOP_DEBUG
1877 _print(
"OnChanged: Internal_Update: Download was canceled, unregistering");
1886 #ifdef WORKSHOP_DEBUG
1887 _print(
"OnChanged: Internal_Update: Download has failed, unregistering");
1905 #ifdef WORKSHOP_DEBUG
1906 _print(
"OnChanged: Internal_Update: Report Action Was Completed");
1910 m_OnReportStateChanged.Invoke(
this,
true);
1923 #ifdef WORKSHOP_DEBUG
1924 _print(
"OnChanged: Internal_Update: Cancel report Action Was Completed");
1928 m_OnReportStateChanged.Invoke(
this,
false);
1938 #ifdef WORKSHOP_DEBUG
1939 _print(
"OnChanged: Internal_Update: Dependency action is completed, unregistering");
1949 #ifdef WORKSHOP_DEBUG
1950 _print(
"OnChanged: Internal_Update: Dependency action is canceled, unregistering");
1959 #ifdef WORKSHOP_DEBUG
1960 _print(
"OnChanged: Internal_Update: Dependency action has failed, unregistering");
1976 m_OnOfflineStateChanged.Invoke(
this, offlineNew);
1983 int accessState =
m_Item.GetAccessState();
1986 #ifdef WORKSHOP_DEBUG
1987 _print(
"OnChanged: Internal_Update: Access state has changed");
1998 #ifdef WORKSHOP_DEBUG
2002 m_OnChanged.Invoke(
this);
2010 #ifdef WORKSHOP_DEBUG
2011 _print(
string.Format(
"Invoking OnChanged: ID: %1, Name: %2, for dependent: %3, %4",
GetId(),
GetName(), i.GetId(), i.GetName()));
2013 i.m_OnChanged.Invoke(i);
2033 #ifdef WORKSHOP_DEBUG
2034 _print(
"OnChanged: Internal_Update: Add author block action Was Completed");
2038 m_OnReportStateChanged.Invoke(
this,
true);
2052 #ifdef WORKSHOP_DEBUG
2053 _print(
"OnChanged: Internal_Update: Add author block action Was Completed");
2057 m_OnReportStateChanged.Invoke(
this,
false);
2098 return m_Item.GetProgress();
2111 return rev.IsProcessing();
2124 return rev.GetProcessingProgress();
2143 if (
m_Item.GetLatestRevision() &&
m_Item.GetLatestRevision().GetBackendEnv() ==
GetGame().GetBackendApi().GetBackendEnv())
2216 #ifdef WORKSHOP_DEBUG
2217 _print(
string.Format(
"NEW for WorkshopItem: ID: %1, Name: %2",
m_Item.Id(),
m_Item.Name()));
2225 #ifdef WORKSHOP_DEBUG
2231 Print(
"Can't be set!");
2235 #ifdef WORKSHOP_DEBUG
2242 void ~SCR_WorkshopItem()
2244 #ifdef WORKSHOP_DEBUG
2255 dependency.UnregisterDependent(
this);
2263 void Internal_UpdateObjects(WorkshopItem item, Dependency dependency)
2265 #ifdef WORKSHOP_DEBUG
2266 _print(
string.Format(
"Internal_UpdateObjects: %1, %2", item, dependency));
2283 void Internal_OnAddonsChecked()
2300 SCR_WorkshopItem wrapper =
new SCR_WorkshopItem(item, null);
2309 SCR_WorkshopItem wrapper =
new SCR_WorkshopItem(null, dependency);
2324 if (pendingDownload)
2342 Print(
string.Format(
"[SCR_AddonManager] %1", str), logLevel);
2348 Print(
string.Format(
"[SCR_AddonManager] %1 %2",
this, str), logLevel);
2354 string addonEnv =
"unknown due to missing item";
2356 addonEnv =
m_Item.GetBackendEnv();
2358 string CurrentEnv =
GetGame().GetBackendApi().GetBackendEnv();
ArmaReforgerScripted GetGame()
SCR_AddonListDialog m_Dependency
Dialog which is used when an addon is disabled but some dependent addons depend on it.
enum SCR_EServicePointType BROKEN
func ScriptInvokerMissionWorkshopItemMethod
ScriptInvokerBase< ScriptInvokerMissionWorkshopItemMethod > ScriptInvokerMissionWorkshopItem
static int CountItemsBasic(array< ref SCR_WorkshopItem > items, EWorkshopItemQuery query, bool returnOnFirstMatch=false)
SCR_WorkshopItem Register(WorkshopItem item)
Returns a SCR_WorkshopItem. If it's not registered, creates a new one and registers it.
static bool GetAddonEnabledExternally(SCR_WorkshopItem item)
Returns true if addon was enabled through external configuration (CLI or other).
static array< ref SCR_WorkshopItem > SelectItemsBasic(array< ref SCR_WorkshopItem > items, EWorkshopItemQuery query)
static int CountItemsAnd(array< ref SCR_WorkshopItem > items, EWorkshopItemQuery query, bool returnOnFirstMatch=false)
Counts items which match query. All flags must match.
void Internal_OnNewDownload(SCR_WorkshopItem item, SCR_WorkshopItemActionDownload action)
Called by SCR_WorkshopItem when it starts a new download.
bool GetUgcPrivilege()
Returns immediate value of UserPrivilege.USER_GEN_CONTENT.
static SCR_AddonManager GetInstance()
Action for blocking author.
Action for canceling report of an item.
Composite action which includes multiple subactions.
Action for downloading latest dependencies. Doesn't download this addon, but only downloads dependenc...
Action for removing author mod content blocking.
Action for reporting an item.
array< ref SCR_WorkshopItem > GetLoadedDependencies()
array< string > GetVersions()
Returns array of versions.
void Internal_OnChanged()
Called by actions when some change happens.
void SetItemTargetRevision(Revision revision)
Revision GetCurrentLocalRevision()
Returns the revision which we currently have on the local storage.
void LoadReport()
Loads report of current user from backend. Subscribe to m_OnMyReportLoaded to get result.
ref SCR_WorkshopItemActionCancelReport m_ActionCancelReport
void TryLoadRevisions(bool log=true)
float Internal_GetDownloadProgress()
string GetLatestVersion()
void OnCancelDownloadResponse(BackendCallback callback)
ref SCR_WorkshopItemActionComposite m_ActionDependency
array< ref SCR_WorkshopItem > GetLatestDependencies()
Returns array of dependencies.
void UpdateAuthorBlock()
Check state of action to add and remove author block in update.
bool Internal_GetCanBeUnregistered()
void RegisterDependency(SCR_WorkshopItem item)
ref BackendCallback m_CallbackLoadGallery
int GetTimeSinceLastPlay()
Revision FindRevision(string version)
Finds revision object by string version.
bool Internal_AddAuthorBlock(BackendCallback callback)
void OnFavouriteSuccess()
void LogState()
Logs all properties of the object into console.
void TryLoadItemFromDependency()
ref BackendCallback m_CallbackLoadDependencies
Revision GetLatestRevision()
void SetFavourite(bool favourite)
void UpdateStateFromWorkshopItem()
bool Internal_GetIsProcessing()
bool GetLoaded()
True when addon is loaded by engine. It means that the game is already running with this mod.
ref BackendCallback m_ComputeCallback
void Callback_LoadDependencies_OnSuccess()
bool GetOffline()
True when we have the item on our local storage.
bool GetEnabledAndAnyDependencyDisabled()
Returns true if any dependency is offline and disabled.
array< ref SCR_WorkshopItem > GetOutdatedDependencies()
Returns dependencies which can be updated.
bool PauseDownload()
Pauses current download, if possible.
void Callback_LoadMyReport_OnError()
SCR_WorkshopItemActionDownload DownloadLatestVersion()
void GetScenarios(array< MissionWorkshopItem > scenarios)
Returns array of scenarios.
SCR_WorkshopItemActionReport Report(EWorkshopReportType eReport, string sMessage)
bool Internal_CancelReport(BackendCallback callback)
void Callback_AskDetails_OnGetAsset()
void Internal_LoadDetails()
Creates a callback object, requests workshop API to load details.
ref array< MissionWorkshopItem > m_aMissions
EWorkshopItemProblem GetHighestPriorityProblem()
bool GetAnyDependencyUpdateAvailable()
ref Revision m_LatestRevision
SCR_WorkshopItemActionDownloadDependenciesLatest DownloadDependenciesLatest(array< ref SCR_WorkshopItem > dependencies)
bool IsDownloadedVersionCompatible()
Returns true if downloaded revision was uploded after 1.0.
array< ref SCR_WorkshopItem > GetDependentAddons()
Returns array of dependendent addons.
bool Internal_CancelDownload()
bool Internal_StartDownload(notnull Revision targetRevision, BackendCallback callback)
bool m_bWaitingLoadDetails
void GetDownloadState(out bool inProgress, out bool paused, out float progress, out Revision targetRevision)
Returns state of the download process.
void Callback_LoadMyReport_OnSuccess()
BackendImage GetThumbnail()
void UnregisterDependent(SCR_WorkshopItem item)
bool GetUpdateAvailable()
Returns true when we have an old version offline, and the new version.
void GetMyRating(out bool ratingSet, out bool rating)
ref SCR_WorkshopItemCallback_AskDetails m_CallbackAskDetails
void SetSubscribed(bool subscribe)
ref SCR_WorkshopItemActionReport m_ActionReport
SCR_WorkshopItemActionComposite GetDependencyCompositeAction()
Returns the current composite action performed for dependencies of this addon.
void SetEnabled(bool enable)
ref BackendCallback m_CallbackRequestFavourite
void Callback_AskDetails_OnError(BackendCallback callback)
void DeleteDownloadProgress()
float GetTargetRevisionPatchSize()
SCR_WorkshopItemActionCancelReport CancelReport()
Sends a cancel report about this workshop item.
void LoadDetails()
Loads details from backend, or if they are already loaded, calls the callbacks immediately.
void TryLoadScenarios(bool log=true)
bool Internal_RemoveAuthorBlock(BackendCallback callback)
WorkshopItem Internal_GetWorkshopItem()
Returns true when it can be unregistered bu addon manager.
bool GetRestricted()
Returns true when item is restricted for any reason (blocked or reported).
SCR_WorkshopItemActionDownload Download(notnull Revision targetRevision)
bool m_bFavouriteRequesting
void RegisterDependent(SCR_WorkshopItem item)
static void _sprint(string str, LogLevel logLevel=LogLevel.DEBUG)
void OnPatchComputedFailed()
ref BackendCallback m_CallbackLoadScenarios
float m_fTargetRevisionPatchSize
SCR_WorkshopItemActionRemoveAuthorBlock RemoveAuthorBlock()
Add block for workshop author and all author mods.
bool Internal_GetUpdateAvailable()
void Internal_Update(float timeSlice)
Called each frame by Addon Manager.
array< BackendImage > GetGallery()
void Callback_LoadScenarios_OnSuccess()
SCR_WorkshopItemActionDownload RetryDownload(Revision targetRevision)
void OnCancelDownloadError(BackendCallback callback)
ref array< SCR_WorkshopItem > m_aDependent
void SetDependenciesEnabled(bool enable)
Enables/disables all downloaded dependencies.
bool ResumeDownload()
Resumes current download, if it's already started.
static SCR_WorkshopItem Internal_CreateFromWorkshopItem(WorkshopItem item)
bool Internal_Report(EWorkshopReportType eReport, string sMessage, BackendCallback callback)
ref SCR_WorkshopItemActionAddAuthorBlock m_ActionAddAuthorBlock
bool GetRevisionsLoaded()
void GetReport(out EWorkshopReportType reportType, out string reportDescription)
void UnregisterDependency(SCR_WorkshopItem item)
void Callback_LoadDependencies_OnError(BackendCallback cb)
SCR_WorkshopItemActionDownload DownloadRevision(Revision targetRevision, bool isDownloadRunning)
ref Revision m_ItemTargetRevision
bool GetScenariosLoaded()
void _print(string str, LogLevel logLevel=LogLevel.DEBUG)
ref BackendCallback m_CancelDownloadCallback
bool GetAnyDependencyMissing()
float Internal_GetProcessingProgress()
float m_fPrevDownloadProgress
bool GetModAuthorReportedByMe()
ref Dependency m_Dependency
bool GetItemDataLoaded()
Getters for loading state.
ref array< ref SCR_WorkshopItem > m_aDependencies
bool GetOnline()
True when the item is stored in the backend.
ref SCR_WorkshopItemActionRemoveAuthorBlock m_ActionRemoveAuthorBlock
SCR_WorkshopItemActionDownload GetDownloadAction()
Returns current download action.
bool GetDependenciesLoaded()
int GetTimeSinceFirstDownload()
Revision GetItemTargetRevision()
void Callback_LoadScenarios_OnError(BackendCallback cb)
ref SCR_WorkshopItemActionDownload m_ActionDownload
Dependency GetDependency()
ref array< Revision > m_aRevisions
ref BackendCallback m_CallbackLoadMyReport
bool GetCurrentLocalVersionMatchDependency()
Returns true if current local version matches version of dependency.
void SetTargetRevisionPatchSize(float size)
void SetMyRating(bool newRating)
static SCR_WorkshopItem Internal_CreateFromDependency(Dependency dependency)
SCR_WorkshopItemActionAddAuthorBlock AddAuthorBlock()
Add block for workshop author and all author mods.
WorkshopItem GetWorkshopItem()
Use these only if absoulutely necessary to intarract with game API.
bool CancelDownload()
Cancels current download, if possible.
void CustomDebugError(string message)
array< ref SCR_WorkshopItem > GetMissingDependencies()
Returns dependencies which are missing.
void TryLoadDependencies(bool log=true)
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
ERestResult
States and result + error code produced by RestApi.
EPendingLoadState
Specifies which data of Revision were not yet loaded from the backend,.