disableSerialization: Difference between revisions
Jump to navigation
Jump to search
m (Text replace - "</dd>" to "") |
mNo edit summary |
||
(17 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
{{Command|= | {{Command|Comments= | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| arma2 | | | arma2 |Game name= | ||
|1.00| | |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). See [[Namespace#Namespace serialization|Namespace serialization]] for more information. | ||
| | {{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><!-- | |||
| | --> _display [[spawn]] { [[hint]] [[str]] _this; }; {{cc|would raise a serialization error}}<br><!-- | ||
-->[_display] [[spawn]] { [[hint]] [[str]] (_this [[select]] 0); }; {{cc|OK}}</code>}} |DESCRIPTION= | |||
____________________________________________________________________________________________ | |||
| | | [[disableSerialization]] |SYNTAX= | ||
| [[Nothing]] |RETURNVALUE= | |||
|x1= <code>disableSerialization; | |x1= <code>[[disableSerialization]]; | ||
_display | _display = [[findDisplay]] 46;</code> |EXAMPLE1= | ||
____________________________________________________________________________________________ | ____________________________________________________________________________________________ | ||
| [[Display]], [[displayAddEventHandler]], [[displayRemoveAllEventHandlers]], [[displayRemoveEventHandler]] |= | | [[Display]], [[displayAddEventHandler]], [[displayRemoveAllEventHandlers]], [[displayRemoveEventHandler]], [[uiSleep]] |SEEALSO= | ||
| |= | | |MPBEHAVIOUR= | ||
}} | }} | ||
Line 39: | 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. | ||
<code>_loaded = [] [[spawn]] { [[disableSerialization]]; [[waitUntil]] { [[false]] }; }; | |||
[[waitUntil]] { [[scriptDone]] _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. | ||
Use with caution, as it handles two threads in memory, having impact at overall [[Code_Optimisation#Threads|scripting time]]. | Use with caution, as it handles two threads in memory, having impact at overall [[Code_Optimisation#Threads|scripting time]]. | ||
<dd class="notedate">Posted on 23 October, 2013 | |||
<dt class="note">[[User:Killzone_Kid|Killzone_Kid]] | |||
<dd class="note"> | |||
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]]: <code>[[disableSerialization]]; | |||
_display = [[findDisplay]] 123; | |||
_ctrl = _display [[displayCtrl]] -1; | |||
_ctrl [[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 50: | Line 69: | ||
<h3 style='display:none'>Bottom Section</h3> | <h3 style='display:none'>Bottom Section</h3> | ||
[[Category:Scripting Commands | [[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]] | ||
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]] | [[Category:Scripting Commands Take On Helicopters|{{uc:{{PAGENAME}}}}]] |
Revision as of 14:07, 20 September 2020
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.
- 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];