disableSerialization: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (template:command argument fix)
mNo edit summary
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Command|= Comments
{{Command|Comments=
____________________________________________________________________________________________
____________________________________________________________________________________________


| arma2 |= Game name
| arma2 |Game name=


|1.00|= Game version
|1.00|Game version=
 
|gr1= GUI Control |GROUP1=
____________________________________________________________________________________________
____________________________________________________________________________________________


| Disable saving of script containing this command. After this, the script can work with data types which do not support serialization (UI types). <br><br>
| Disable saving of script containing this command. After this, the script can work with data types which do not support serialization (UI types). See [[Namespace#Namespace serialization|Namespace serialization]] for more information.
'''NOTE''': When using [[spawn]] command, if the argument passed to it is [[Display]] or [[Control]], an error will show asking to consider to disable serialization because of use of _this variable. What's more neither [[disableSerialization]] no use of [[uiNamespace]] will solve this. Passing [[Display]] or [[Control]] as part of an array however, will do the job: 
<code>[[findDisplay]] 46 [[spawn]] {[[hint]] [[str]] _this}; // serialization error
<nowiki>[</nowiki>[[findDisplay]] 46] [[spawn]] {[[hint]] [[str]] (_this [[select]] 0)}; // OK </code>


|= Description
{{Important | '''In {{arma2}}''' and up to a certain version of {{arma3}}, <!--
-->giving a [[Display]] or [[Control]] to [[spawn]]ed code would raise an error due to the usage of the then non-serializable <tt>[[Magic Variables#this|_this]]</tt> variable. <!--
-->Using [[disableSerialization]] or [[uiNamespace]] wouldn't help; the trick here is to pass the argument inside an array:
<code>_display {{=}} [[findDisplay]] 46;<br><!--
-->&nbsp;_display&nbsp; [[spawn]] { [[hint]] [[str]] _this; }; {{cc|would raise a serialization error}}<br><!--
-->[_display] [[spawn]] { [[hint]] [[str]] (_this [[select]] 0); }; {{cc|OK}}</code>}} |DESCRIPTION=
____________________________________________________________________________________________
____________________________________________________________________________________________


| '''disableSerialization''' |= Syntax
| [[disableSerialization]] |SYNTAX=
 
|p1= |PARAMETER1=
 
|p2= |PARAMETER2=
 
|p3= |PARAMETER3=  


| [[Nothing]] |RETURNVALUE=  
| [[Nothing]] |RETURNVALUE=  


|x1= <code>[[disableSerialization]];
|x1= <code>[[disableSerialization]];
_display = [[findDisplay]] 46;</code>|EXAMPLE1=  
_display = [[findDisplay]] 46;</code> |EXAMPLE1=  


____________________________________________________________________________________________
____________________________________________________________________________________________
Line 32: Line 30:
| [[Display]], [[displayAddEventHandler]], [[displayRemoveAllEventHandlers]], [[displayRemoveEventHandler]], [[uiSleep]] |SEEALSO=  
| [[Display]], [[displayAddEventHandler]], [[displayRemoveAllEventHandlers]], [[displayRemoveEventHandler]], [[uiSleep]] |SEEALSO=  


|  |MPBEHAVIOUR=  
|  |MPBEHAVIOUR=
____________________________________________________________________________________________
}}
}}


Line 43: Line 40:
<dd class="note">
<dd class="note">
Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside.
Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside.
_loaded = [] [[spawn]] {[[disableSerialization]]; [[waitUntil]] {[[false]]};};
<code>_loaded = [] [[spawn]] { [[disableSerialization]]; [[waitUntil]] { [[false]] }; };
[[waitUntil]] {[[scriptDone]] _loaded;};
[[waitUntil]] { [[scriptDone]] _loaded; };
[[hint]] "Game was loaded!"
[[hint]] "Game was loaded!";</code>
Works for all possible load types - loading user save, loading autosave and resuming mission from main menu.
Works for all possible load types - loading user save, loading autosave and resuming mission from main menu.


Line 62: Line 59:
This code will not: <code>[[findDisplay]] 123 [[displayCtrl]] -1 [[ctrlSetText]] "LOL";</code>
This code will not: <code>[[findDisplay]] 123 [[displayCtrl]] -1 [[ctrlSetText]] "LOL";</code>


<dd class="notedate">Posted on July 25, 2017 - 18:15 (UTC)</dd>
<dt class="note">[[User:IT07|IT07]]</dt>
<dd class="note">
In Arma 3 1.72.142223, a scripted FSM does somehow not work with [[disableSerialization]]. As a workaround, store a display inside an array.
Example: <code>_d = [findDisplay idd];</code>


<!-- Note Section END -->
<!-- Note Section END -->
Line 67: Line 69:


<h3 style='display:none'>Bottom Section</h3>
<h3 style='display:none'>Bottom Section</h3>
[[Category:ArmA 2: New Scripting Commands List|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Take On Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
 
<!-- CONTINUE Notes -->
<dl class="command_description">
<dd class="notedate">Posted on July 25, 2017 - 18:15 (UTC)</dd>
<dt class="note">[[User:IT07|IT07]]</dt>
<dd class="note">
In ArmA 3 1.72.142223, a scripted FSM does somehow not work with [[disableSerialization]]. As a workaround, store a display inside an array.
Example: <code>_d = [ findDisplay idd ];</code>
</dd>
</dl>
<!-- DISCONTINUE Notes -->

Revision as of 14:07, 20 September 2020

Hover & click on the images for description

Description

Description:
Disable saving of script containing this command. After this, the script can work with data types which do not support serialization (UI types). See Namespace serialization for more information.
In Arma 2 and up to a certain version of Arma 3, giving a Display or Control to spawned code would raise an error due to the usage of the then non-serializable _this variable. Using disableSerialization or uiNamespace wouldn't help; the trick here is to pass the argument inside an array: _display = findDisplay 46;
 _display  spawn { hint str _this; }; // would raise a serialization error
[_display] spawn { hint str (_this select 0); }; // OK
Groups:
GUI Control

Syntax

Syntax:
disableSerialization
Return Value:
Nothing

Examples

Example 1:
disableSerialization; _display = findDisplay 46;

Additional Information

See also:
DisplaydisplayAddEventHandlerdisplayRemoveAllEventHandlersdisplayRemoveEventHandleruiSleep

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note

Notes

Posted on 19 June, 2010
Str
Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside. _loaded = [] spawn { disableSerialization; waitUntil { false }; }; waitUntil { scriptDone _loaded; }; hint "Game was loaded!"; Works for all possible load types - loading user save, loading autosave and resuming mission from main menu. Use with caution, as it handles two threads in memory, having impact at overall scripting time.
Posted on 23 October, 2013
Killzone_Kid
If you do not store UI elements (Display, Control) in variables, you do not need disableSerialization; UI elements are usually returned by scripting commands such as findDisplay or passed as params in UI event handler scripts (displayAddEventHandler, ctrlAddEventHandler). This code will require disableSerialization: disableSerialization; _display = findDisplay 123; _ctrl = _display displayCtrl -1; _ctrl ctrlSetText "LOL"; This code will not: findDisplay 123 displayCtrl -1 ctrlSetText "LOL";
Posted on July 25, 2017 - 18:15 (UTC)
IT07
In Arma 3 1.72.142223, a scripted FSM does somehow not work with disableSerialization. As a workaround, store a display inside an array. Example: _d = [findDisplay idd];

Bottom Section