disableSerialization: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - "\[\[Category:ArmA 2: New Scripting Commands List\|{{uc:{{PAGENAME}}}}\]\]\s*" to "") |
Lou Montana (talk | contribs) m (Text replacement - "[] spawn" to "0 spawn") |
||
(62 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{RV|type=command | ||
| arma2 | | |game1= arma2 | ||
|version1= 1.00 | |||
|1. | |game2= arma2oa | ||
|version2= 1.50 | |||
| | |game3= tkoh | ||
|version3= 1.00 | |||
|game4= arma3 | |||
|version4= 0.50 | |||
|gr1= Namespaces | |||
|gr2= GUI Control | |||
| [[ | |descr= Disable saving of script containing this command. After this, the script can work with data types which do not support serialization (UI types). | ||
{{Feature|informative|See [[Namespace#Namespace serialization|Namespace serialization]] for more information.}} | |||
| [[ | {{Feature|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 {{hl|[[Magic Variables#this|_this]]}} variable. <!-- | |||
-->Using [[disableSerialization]] or [[uiNamespace]] wouldn't help; the trick here is to pass the argument inside an array: | |||
<sqf> | |||
_display = findDisplay 46; | |||
_display spawn { hint str _this; }; // would raise a serialization error | |||
[_display] spawn { hint str (_this select 0); }; // OK</sqf> | |||
}} | |||
| | |s1= [[disableSerialization]] | ||
|r1= [[Nothing]] | |||
| | |x1= <sqf> | ||
disableSerialization; | |||
private _display = findDisplay 46; | |||
</sqf> | |||
| | |seealso= [[Display]] [[displayAddEventHandler]] [[displayRemoveAllEventHandlers]] [[displayRemoveEventHandler]] [[uiSleep]] | ||
}} | }} | ||
{{Note | |||
|user= Str | |||
|timestamp= 20100619102600 | |||
|text= Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside. | |||
<sqf> | |||
0 spawn { disableSerialization; waitUntil { false }; hint "Game was loaded!";}; | |||
Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside. | </sqf> | ||
< | |||
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 | Use with caution, as it creates an infinite loop, having impact at overall [[Code_Optimisation#Threads|scripting time]]. | ||
}} | |||
{{Note | |||
|user= Killzone_Kid | |||
|timestamp= 20131023025700 | |||
|text= 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]]: | |||
<sqf> | |||
disableSerialization; | |||
_display = findDisplay 123; | |||
_ctrl = _display displayCtrl -1; | |||
_ctrl ctrlSetText "LOL"; | |||
</sqf> | |||
This code will not: | |||
<sqf>findDisplay 123 displayCtrl -1 ctrlSetText "LOL";</sqf> | |||
}} | |||
{{Note | |||
|user= Nelis75733126 | |||
|timestamp= 20170625181500 | |||
|text= In {{arma3}} 1.74, a scripted FSM is somehow incompatible with <sqf inline>disableSerialization</sqf>.<br> | |||
As a workaround, store a display inside an array. Example: | |||
<sqf>_display = [findDisplay idd];</sqf> | |||
}} | |||
In | |||
Example: < | |||
Latest revision as of 21:24, 2 September 2024
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).
- Groups:
- NamespacesGUI Control
Syntax
- Syntax:
- disableSerialization
- Return Value:
- Nothing
Examples
- Example 1:
Additional Information
- See also:
- Display displayAddEventHandler displayRemoveAllEventHandlers displayRemoveEventHandler uiSleep
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
- Posted on Jun 19, 2010 - 10:26 (UTC)
- Can be used to detecting load. Scope with disabled serialization is discontinued after load, even if there's endless loop inside. Works for all possible load types - loading user save, loading autosave and resuming mission from main menu. Use with caution, as it creates an infinite loop, having impact at overall scripting time.
- Posted on Oct 23, 2013 - 02:57 (UTC)
-
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:
This code will not:disableSerialization; _display = findDisplay 123; _ctrl = _display displayCtrl -1; _ctrl ctrlSetText "LOL";
- Posted on Jun 25, 2017 - 18:15 (UTC)
-
In Arma 3 1.74, a scripted FSM is somehow incompatible with disableSerialization.
As a workaround, store a display inside an array. Example: