Object Formats

From OpenSimulator

Revision as of 18:05, 25 October 2012 by Justincc (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

There are currently two object formats in OpenSimulator - 'xml' and 'xml2'. These are semantically identical and physically almost identical - by a sad quirk of fate slightly different formats are used for different purposes (e.g. serialization to asset store and storage in OAR files).

In addition, these formats evolved out of the automatic serialization of the internal SceneObjectGroup and SceneObjectPart objects (hence the names). This means that they contain some cryptic and redundant information.

Internally, these formats are used to store object data when an object is taken into inventory from a region (as opposed to objects on regions, which are stored directly in region database tables). They are also used to transfer object data when a user cross regions or teleports.

Externally, these formats are used to save object data in OARs and IARs for later restoration.

Contents

'xml' format

Here's an example

<SceneObjectGroup>
  <RootPart>
    <SceneObjectPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <AllowedDrop>false</AllowedDrop>
      <CreatorID>
        <UUID>57956c4b-ff2e-4fc1-9995-613c6256cc98</UUID>
      </CreatorID>
      <FolderID>
        <UUID>b06d2e45-650e-4e5d-a08a-b03a6dd67bff</UUID>
      </FolderID>
      <InventorySerial>0</InventorySerial>
      <TaskInventory>
        <TaskInventoryItem>
          <AssetID>
            <UUID>db014308-b772-4ea4-821a-9872cb05f491</UUID>
          </AssetID>
          <BasePermissions>581632</BasePermissions>
          <CreationDate>1338276966</CreationDate>
          <CreatorID>
            <UUID>a1944ebf-4771-4524-9154-1738efe34abd</UUID>
          </CreatorID>
          <Description>2011-12-06 15:25:33 lsl2 script</Description>
          <EveryonePermissions>0</EveryonePermissions>
          <Flags>1048576</Flags>
          <GroupID>
            <UUID>00000000-0000-0000-0000-000000000000</UUID>
          </GroupID>
          <GroupPermissions>0</GroupPermissions>
          <InvType>10</InvType>
          <ItemID>
            <UUID>c1ed6809-cc24-4061-a4c2-93082a2d1f1d</UUID>
          </ItemID>
          <OldItemID>
            <UUID>db328934-68e9-471f-a72c-9a49491c0301</UUID>
          </OldItemID>
          <LastOwnerID>
            <UUID>00000000-0000-0000-0000-000000000000</UUID>
          </LastOwnerID>
          <Name>radarHUD script</Name>
          <NextPermissions>581632</NextPermissions>
          <OwnerID>
            <UUID>a1944ebf-4771-4524-9154-1738efe34abd</UUID>
          </OwnerID>
          <CurrentPermissions>581632</CurrentPermissions>
          <ParentID>
            <UUID>52641dc1-a7e9-4c5c-ac83-e5884e759f99</UUID>
          </ParentID>
          <ParentPartID>
            <UUID>52641dc1-a7e9-4c5c-ac83-e5884e759f99</UUID>
          </ParentPartID>
          <PermsGranter>
            <UUID>00000000-0000-0000-0000-000000000000</UUID>
          </PermsGranter>
          <PermsMask>0</PermsMask>
          <Type>10</Type>
          <OwnerChanged>false</OwnerChanged>
        </TaskInventoryItem>
      </TaskInventory>
      <UUID>
        <UUID>b06d2e45-650e-4e5d-a08a-b03a6dd67bff</UUID>
      </UUID>
      <LocalId>2094307979</LocalId>
      <Name>Companion cube</Name>
      <Material>3</Material>
      <PassTouches>false</PassTouches>
      <RegionHandle>1099511628032000</RegionHandle>
      <ScriptAccessPin>0</ScriptAccessPin>
      <GroupPosition>
        <X>81.85081</X>
        <Y>157.5245</Y>
        <Z>21.32862</Z>
      </GroupPosition>
      <OffsetPosition>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
      </OffsetPosition>
      <RotationOffset>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
        <W>1</W>
      </RotationOffset>
      <Velocity>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
      </Velocity>
      <AngularVelocity>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
      </AngularVelocity>
      <Acceleration>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
      </Acceleration>
      <Description/>
      <Color>
        <R>0</R>
        <G>0</G>
        <B>0</B>
        <A>255</A>
      </Color>
      <Text/>
      <SitName/>
      <TouchName/>
      <LinkNum>0</LinkNum>
      <ClickAction>0</ClickAction>
      <Shape>
        <ProfileCurve>1</ProfileCurve>
        <TextureEntry>iVVnRyTLQ+2SC0fK7RVGXwAAAAAAAAAAgD8AAACAPwAAAAAAAAAAAAAAAAAAAA==</TextureEntry>
        <ExtraParams>AA==</ExtraParams>
        <PathBegin>0</PathBegin>
        <PathCurve>16</PathCurve>
        <PathEnd>0</PathEnd>
        <PathRadiusOffset>0</PathRadiusOffset>
        <PathRevolutions>0</PathRevolutions>
        <PathScaleX>100</PathScaleX>
        <PathScaleY>100</PathScaleY>
        <PathShearX>0</PathShearX>
        <PathShearY>0</PathShearY>
        <PathSkew>0</PathSkew>
        <PathTaperX>0</PathTaperX>
        <PathTaperY>0</PathTaperY>
        <PathTwist>0</PathTwist>
        <PathTwistBegin>0</PathTwistBegin>
        <PCode>9</PCode>
        <ProfileBegin>0</ProfileBegin>
        <ProfileEnd>0</ProfileEnd>
        <ProfileHollow>0</ProfileHollow>
        <State>0</State>
        <ProfileShape>Square</ProfileShape>
        <HollowShape>Same</HollowShape>
        <SculptTexture>
          <UUID>00000000-0000-0000-0000-000000000000</UUID>
        </SculptTexture>
        <SculptType>0</SculptType>
        <SculptData/>
        <FlexiSoftness>0</FlexiSoftness>
        <FlexiTension>0</FlexiTension>
        <FlexiDrag>0</FlexiDrag>
        <FlexiGravity>0</FlexiGravity>
        <FlexiWind>0</FlexiWind>
        <FlexiForceX>0</FlexiForceX>
        <FlexiForceY>0</FlexiForceY>
        <FlexiForceZ>0</FlexiForceZ>
        <LightColorR>0</LightColorR>
        <LightColorG>0</LightColorG>
        <LightColorB>0</LightColorB>
        <LightColorA>1</LightColorA>
        <LightRadius>0</LightRadius>
        <LightCutoff>0</LightCutoff>
        <LightFalloff>0</LightFalloff>
        <LightIntensity>1</LightIntensity>
        <FlexiEntry>false</FlexiEntry>
        <LightEntry>false</LightEntry>
        <SculptEntry>false</SculptEntry>
      </Shape>
      <Scale>
        <X>0.5</X>
        <Y>0.5</Y>
        <Z>0.5</Z>
      </Scale>
      <SitTargetOrientation>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
        <W>1</W>
      </SitTargetOrientation>
      <SitTargetPosition>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
      </SitTargetPosition>
      <SitTargetPositionLL>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
      </SitTargetPositionLL>
      <SitTargetOrientationLL>
        <X>0</X>
        <Y>0</Y>
        <Z>0</Z>
        <W>1</W>
      </SitTargetOrientationLL>
      <ParentID>0</ParentID>
      <CreationDate>1325896997</CreationDate>
      <Category>0</Category>
      <SalePrice>0</SalePrice>
      <ObjectSaleType>0</ObjectSaleType>
      <OwnershipCost>0</OwnershipCost>
      <GroupID>
        <UUID>00000000-0000-0000-0000-000000000000</UUID>
      </GroupID>
      <OwnerID>
        <UUID>57956c4b-ff2e-4fc1-9995-613c6256cc98</UUID>
      </OwnerID>
      <LastOwnerID>
        <UUID>57956c4b-ff2e-4fc1-9995-613c6256cc98</UUID>
      </LastOwnerID>
      <BaseMask>2147483647</BaseMask>
      <OwnerMask>2147483647</OwnerMask>
      <GroupMask>0</GroupMask>
      <EveryoneMask>0</EveryoneMask>
      <NextOwnerMask>2147483647</NextOwnerMask>
      <Flags>None</Flags>
      <CollisionSound>
        <UUID>00000000-0000-0000-0000-000000000000</UUID>
      </CollisionSound>
      <CollisionSoundVolume>0</CollisionSoundVolume>
      <TextureAnimation/>
      <ParticleSystem/>
      <PayPrice0>-2</PayPrice0>
      <PayPrice1>-2</PayPrice1>
      <PayPrice2>-2</PayPrice2>
      <PayPrice3>-2</PayPrice3>
      <PayPrice4>-2</PayPrice4>
    </SceneObjectPart>
  </RootPart>
  <OtherParts/>
  <GroupScriptStates>
    <!-- A large amount of scripting data comes here.  Please see later sections -->
  </GroupScriptStates>
</SceneObjectGroup>

Explanation

TODO: Need to add more properties. Please feel free to ask on the opensim-dev mailing list for more explanation.

<SceneObjectGroup> - Each object in OpenSimulator is a group of prims, otherwise known as a link set.

<RootPart> - One prim is always the root prim (here referred to as the root part. Other prims will be in the OtherParts section but will have exactly the same format as the root SceneObjectPart.

<SceneObjectPart> - This contains all the individual prim properties.

<CreatorID> - The creator of the prim. Each user in OpenSimulator has their own unique id (UUID).

<TaskInventory> - This contains data on each item within the object, one to each <TaskInventoryItem>. TODO: Need to add separate explanation of components in this section.

<UUID> - If this is the outer property (i.e. isn't a <UUID> within a different property), then this is the ID of the part itself.

<LocalId> - The local id is a temporary id given to a prim when it's within a scene. It plays no useful role in the external format and one day should be eliminated.

<Name> - The name of the part

<RegionHandle> - The region that the part was in when it was last serialized. Again, this has no use in an external format.

<GroupPosition> - The position that a prim occupied in a region. <X>, <Y> and <Z> are the co-ordinates in three dimension space.

<OffsetPosition> - The offset of this prim from the root prim. For a root prim this will always be 0, 0, 0

<RotationOffset> - The rotation compared to the rotation of the root prim. This is in quaternion format where the components are <X>, <Y>, <Z> and <W>.

<Velocity> - The velocity of the prim in the scene.

<AngularVelocity> - The angular velocity of the prim in the scene.

<Acceleration> - The acceleration of the prim in the scene.

<Description> - The description field of the prim.

<Color> - The color of the prim. This is expressed as a 0-255 value of red <R>, green <G>, blue <B> and alpha <A>, where alpha = 0 is fully transparent.

<Text> - The text that hovers over the prim in-world

<LinkNum> - The number of this prim in the SceneObjectGroup (linkset). The root prim will always have LinkNum = 0. Subsequent prims will have consecutive numbers, 1, 2, 3 ...

<Shape> - Shape details of the prim, e.g. taper, profile shape, etc. Essentially, all those properties that you see in the edit box of a client

<TextureEntry> - An encoded field which contains all the texture references for faces of the prim. This is encoded because it's a direct copy of the on-the-wire format. See the TextureEntry class in libopenmetaverse for more details on how to decode/encode. That in itself ain't pretty.

<SculptTexture> - If this prim is a sculpt or mesh, then this refers to the sculpt texture or mesh asset that defines its shape.

<Scale> - The scale of the prim.

<ParentID> - The local id of the root prim for this prim. If this is the root prim then this will be 0.

<GroupID> - The group that this belongs to. 0000000-0000-0000-0000-000000000000 if it belongs to no group.

<OwnerID> - The owner of the prim.

<LastOwnerID> - The previous owner of the prim.

<BaseMask> - Base permissions.

<OwnerMask> - Owner permissions.

<GroupMask> - Group permissions.

<EveryoneMask> - Everyone permissions.

<NextOwnerMasks> - Next owner permissions

<Flags> - The flags of this prim. Flags include None, Physics, CreateSelected, ObjectModify, ObjectCopy, ObjectAnyOwner, ObjectYouOwner, Scripted, Touch, ObjectMove, Money, Phantom, InventoryEmpty, JointHinge, JointP2P, JointLP2P, JointWheel, AllowInventoryDrop, ObjectTransfer, ObjectGroupOwned, ObjectYouOfficer, CameraDecoupled, AnimSource, CameraSource, CastShadows, DieAtEdge, ReturnAtEdge, Sandbox, Flying, ObjectOwnerModify, TemporaryOnRez, Temporary, ZlibCompressed. Multiple flags are comma separated (I think!).

<PayPrice0> - The payment price for this prim (what you see when you try to buy it).

'xml2' format

Here's the same object as above, but in 'XML2' format. As you can see, the format is identical except that there is no <RootPart> tag around the root part - it is assumed to be simply the first part instead. For brevity, no <TaskInventory> section is included (i.e. the object has no items in this case).

<SceneObjectGroup>
  <SceneObjectPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <AllowedDrop>false</AllowedDrop>
    <CreatorID>
      <UUID>57956c4b-ff2e-4fc1-9995-613c6256cc98</UUID>
    </CreatorID>
    <FolderID>
      <UUID>b06d2e45-650e-4e5d-a08a-b03a6dd67bff</UUID>
    </FolderID>
    <InventorySerial>0</InventorySerial>
    <UUID>
      <UUID>b06d2e45-650e-4e5d-a08a-b03a6dd67bff</UUID>
    </UUID>
    <LocalId>2094307979</LocalId>
    <Name>Companion cube</Name>
    <Material>3</Material>
    <PassTouches>false</PassTouches>
    <RegionHandle>1099511628032000</RegionHandle>
    <ScriptAccessPin>0</ScriptAccessPin>
    <GroupPosition>
      <X>81.85081</X>
      <Y>157.5245</Y>
      <Z>21.32862</Z>
    </GroupPosition>
    <OffsetPosition>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </OffsetPosition>
    <RotationOffset>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
      <W>1</W>
    </RotationOffset>
    <Velocity>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </Velocity>
    <AngularVelocity>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </AngularVelocity>
    <Acceleration>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </Acceleration>
    <Description/>
    <Color>
      <R>0</R>
      <G>0</G>
      <B>0</B>
      <A>255</A>
    </Color>
    <Text/>
    <SitName/>
    <TouchName/>
    <LinkNum>0</LinkNum>
    <ClickAction>0</ClickAction>
    <Shape>
      <ProfileCurve>1</ProfileCurve>
      <TextureEntry>iVVnRyTLQ+2SC0fK7RVGXwAAAAAAAAAAgD8AAACAPwAAAAAAAAAAAAAAAAAAAA==</TextureEntry>
      <ExtraParams>AA==</ExtraParams>
      <PathBegin>0</PathBegin>
      <PathCurve>16</PathCurve>
      <PathEnd>0</PathEnd>
      <PathRadiusOffset>0</PathRadiusOffset>
      <PathRevolutions>0</PathRevolutions>
      <PathScaleX>100</PathScaleX>
      <PathScaleY>100</PathScaleY>
      <PathShearX>0</PathShearX>
      <PathShearY>0</PathShearY>
      <PathSkew>0</PathSkew>
      <PathTaperX>0</PathTaperX>
      <PathTaperY>0</PathTaperY>
      <PathTwist>0</PathTwist>
      <PathTwistBegin>0</PathTwistBegin>
      <PCode>9</PCode>
      <ProfileBegin>0</ProfileBegin>
      <ProfileEnd>0</ProfileEnd>
      <ProfileHollow>0</ProfileHollow>
      <State>0</State>
      <ProfileShape>Square</ProfileShape>
      <HollowShape>Same</HollowShape>
      <SculptTexture>
        <UUID>00000000-0000-0000-0000-000000000000</UUID>
      </SculptTexture>
      <SculptType>0</SculptType>
      <SculptData/>
      <FlexiSoftness>0</FlexiSoftness>
      <FlexiTension>0</FlexiTension>
      <FlexiDrag>0</FlexiDrag>
      <FlexiGravity>0</FlexiGravity>
      <FlexiWind>0</FlexiWind>
      <FlexiForceX>0</FlexiForceX>
      <FlexiForceY>0</FlexiForceY>
      <FlexiForceZ>0</FlexiForceZ>
      <LightColorR>0</LightColorR>
      <LightColorG>0</LightColorG>
      <LightColorB>0</LightColorB>
      <LightColorA>1</LightColorA>
      <LightRadius>0</LightRadius>
      <LightCutoff>0</LightCutoff>
      <LightFalloff>0</LightFalloff>
      <LightIntensity>1</LightIntensity>
      <FlexiEntry>false</FlexiEntry>
      <LightEntry>false</LightEntry>
      <SculptEntry>false</SculptEntry>
    </Shape>
    <Scale>
      <X>0.5</X>
      <Y>0.5</Y>
      <Z>0.5</Z>
    </Scale>
    <SitTargetOrientation>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
      <W>1</W>
    </SitTargetOrientation>
    <SitTargetPosition>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </SitTargetPosition>
    <SitTargetPositionLL>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </SitTargetPositionLL>
    <SitTargetOrientationLL>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
      <W>1</W>
    </SitTargetOrientationLL>
    <ParentID>0</ParentID>
    <CreationDate>1325896997</CreationDate>
    <Category>0</Category>
    <SalePrice>0</SalePrice>
    <ObjectSaleType>0</ObjectSaleType>
    <OwnershipCost>0</OwnershipCost>
    <GroupID>
      <UUID>00000000-0000-0000-0000-000000000000</UUID>
    </GroupID>
    <OwnerID>
      <UUID>57956c4b-ff2e-4fc1-9995-613c6256cc98</UUID>
    </OwnerID>
    <LastOwnerID>
      <UUID>57956c4b-ff2e-4fc1-9995-613c6256cc98</UUID>
    </LastOwnerID>
    <BaseMask>2147483647</BaseMask>
    <OwnerMask>2147483647</OwnerMask>
    <GroupMask>0</GroupMask>
    <EveryoneMask>0</EveryoneMask>
    <NextOwnerMask>2147483647</NextOwnerMask>
    <Flags>None</Flags>
    <CollisionSound>
      <UUID>00000000-0000-0000-0000-000000000000</UUID>
    </CollisionSound>
    <CollisionSoundVolume>0</CollisionSoundVolume>
    <TextureAnimation/>
    <ParticleSystem/>
    <PayPrice0>-2</PayPrice0>
    <PayPrice1>-2</PayPrice1>
    <PayPrice2>-2</PayPrice2>
    <PayPrice3>-2</PayPrice3>
    <PayPrice4>-2</PayPrice4>
  </SceneObjectPart>
  <OtherParts/>
  <GroupScriptStates>
    <!-- A large amount of scripting data comes here.  Please see later sections -->
  </GroupScriptStates>
</SceneObjectGroup>

Script states

If there are any scripts in any of the parts of the serialized object, then the state associated with that script will be included in the <GroupScriptStates> section at the end of the serialization. This state save allows the script to be restarted when rerezzed at the same point in the script's operation as when it was saved.

Each script will have it's own <SavedScriptState> entry. Here's an example.

<GroupScriptStates>
  <SavedScriptState UUID="c1ed6809-cc24-4061-a4c2-93082a2d1f1d">
    <State UUID="c1ed6809-cc24-4061-a4c2-93082a2d1f1d" Asset="db014308-b772-4ea4-821a-9872cb05f491" Engine="XEngine">
      <ScriptState>
        <State>default</State>
        <Running>False</Running>
        <Variables>
          <Variable type="OpenSim.Region.ScriptEngine.Shared.LSL_Types+LSLFloat" name="gRange">30.000000</Variable>
          <Variable type="OpenSim.Region.ScriptEngine.Shared.LSL_Types+LSLInteger" name="gClearRadarFlag">1</Variable>
        </Variables>
        <Queue>
          <Item event="attach">
            <Params>
              <Param type="OpenSim.Region.ScriptEngine.Shared.LSL_Types+LSLString">00000000-0000-0000-0000-000000000000</Param>
            </Params>
            <Detected/>
          </Item>
        </Queue>
        <Plugins>
          <ListItem type="System.String">sensor</ListItem>
          <ListItem type="System.Int32">6</ListItem>
          <ListItem type="System.Double">1</ListItem>
          <ListItem type="System.String"/>
          <ListItem type="OpenMetaverse.UUID">00000000-0000-0000-0000-000000000000</ListItem>
          <ListItem type="System.Int32">1</ListItem>
          <ListItem type="System.Double">30</ListItem>
          <ListItem type="System.Double">3.14159274101257</ListItem>
        </Plugins>
      </ScriptState>
      <Assembly Filename="CommonCompiler_compiled_db014308-b772-4ea4-821a-9872cb05f491.dll">TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAEDAHi6ElAAAAAAAAAAAOAADiELAQYAABIAAAAEAAAAAAAAACAAAAAgAAAAQAAAAABAAAAgAAAAAgAABAAAAAAAAAAEAAAAAAAAAACAAAAAAgAAAAAAAAMAAAAAABAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAABggAABPAAAAAEAAALgDAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAACAAAAAAAAAAAAAAAZCAAAEgAAAAAAAAAAAAAAC50ZXh0AAAAlBAAAAAgAAAAEgAAAAIAAAAAAAAAAAAAAAAAACAAAGAucnNyYwAAALgDAAAAQAAAAAQAAAAUAAAAAAAAAAAAAAAAAABAAABALnJlbG9jAAAMAAAAAGAAAAACAAAAGAAAAAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAAD/JRAgQAAAAAAAAAAAAAAAQCAAAAAAAABaIAAAAAAAAAAAAABOIAAAECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfQ29yRGxsTWFpbgBtc2NvcmVlLmRsbABAIAAAAAAAAAAASAAAAAIABQB0JwAAIAkAAAEAAAAAAAAAcCcAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMwBAAlAAAAAAAAAAIfHnMBAAAKKAIAAAp9AQAABAIWcwEAAAp9AgAABAIoAwAACioAAAATMBcAyQAAAAEAABECKAQAAAoWcwEAAAooBQAACigGAAAKOa0AAAACKAcAAAoKEgB7CAAACigJAAAKCwIWcwEAAAooCgAACiOamZmZmZnJP3MLAAAKKAwAAAojmpmZmZmZyT9zCwAACigNAAAKKAwAAApzDgAACigPAAAKAgIWcwEAAAooCgAACiMAAACgRt+RP1ogDgEAAHMBAAAKKAoAAAojAAAAoEbfkT9aIA4BAABzAQAACigKAAAKIwAAAKBG35E/WnMOAAAKKBAAAAooEQAACioAAAATMBMAhwAAAAAAAAACKAIAAAYCfhIAAAp9AgAABAIVH2NzAQAACigTAAAKcgEAAHBzFAAACigVAAAKcg0AAHBzFAAACigVAAAKKBYAAAoCcg0AAHBzFAAACigVAAAKcg0AAHBzFAAACigVAAAKFwJ7AQAABCgMAAAKIwAAAGD7IQlAF3MBAAAKKAoAAAooFwAACioAHgIoAwAABipKAhdzAQAACigKAAAKKBgAAAoqABMwDABEAAAAAAAAAAIoBAAAChZzAQAACigFAAAKKAYAAAo5KAAAAAIWcwEAAAooCgAACigYAAAKAhdzAQAACigKAAAKKBkAAAoCKAMAAAYqEzBwAKIDAAACAAARAigHAAAKChIAexoAAAooCQAACiOamZmZmZmpP3MLAAAKKBsAAAojAAAAAAAAAEBzCwAACigcAAAKCwcCewEAAAQoHAAACgwCKB0AAAoNAgIoHgAACigfAAAKEwQjAAAAINylTEASBHsgAAAKWigJAAAKEwURBSgMAAAKFnMBAAAKKAoAAApBGAAAACBoAQAAcwEAAAooAgAAChEFKCEAAAoTBRIGFigBAAAKAigiAAAKGnMBAAAKKBMAAAooIwAAChMHEgYWKAEAAAo4swIAAAIRBigTAAAKKCQAAAoTCBEIcg0AAHBzFAAACigVAAAKKCUAAAo5GwIAAAIRCCgVAAAKFnMBAAAKKBMAAAoWcwEAAAooEwAACigmAAAKAhEIKBUAAAoCEQgoFQAACnIPAABwcxQAAAooFQAACignAAAKF3MBAAAKKBMAAAooKAAACigTAAAKAhEIKBUAAApyDwAAcHMUAAAKKBUAAAooJwAAChdzAQAACigTAAAKKCgAAAooEwAACigmAAAKKCkAAAoTCQIRBigTAAAKKCoAAAoTChIKexoAAAoSA3saAAAKWSgJAAAKEwsSCnsIAAAKEgN7CAAAClkoCQAAChMMAgkRCigrAAAKEw0jAAAAINylTEAoCQAACgIRDCgMAAAKEQsoDAAACigsAAAKKC0AAAoTDhEO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ZXJFdmVudABsbFNsZWVwAHgAb3BfU3VidHJhY3Rpb24Ab3BfRGl2aXNpb24AbGxHZXRQb3MAbGxHZXRSb3QAbGxSb3QyRXVsZXIAegBvcF9BZGRpdGlvbgBsbEdldE51bWJlck9mUHJpbXMAbGxEZXRlY3RlZE5hbWUAbGxHZXRTdWJTdHJpbmcAbGxTdWJTdHJpbmdJbmRleABsbERldGVjdGVkUG9zAGxsVmVjRGlzdABsbEF0YW4yAG9wX011bHRpcGx5AGxsQ29zAGxsU2luAG9wX0V4cGxpY2l0AG9wX0luY3JlbWVudABvcF9MZXNzVGhhbgBvcF9FcXVhbGl0eQBUUlVFAENvbW1vbkNvbXBpbGVyX2NvbXBpbGVkX2RiMDE0MzA4LWI3NzItNGVhNC04MjFhLTk4NzJjYjA1ZjQ5MQA8TW9kdWxlPgBDb21tb25Db21waWxlcl9jb21waWxlZF9kYjAxNDMwOC1iNzcyLTRlYTQtODIxYS05ODcyY2IwNWY0OTEuZGxsAFNlY29uZExpZmUAU2NyaXB0AGdSYW5nZQBnQ2xlYXJSYWRhckZsYWcAcmVwb3NpdGlvbgBpbml0aWFsaXNlSFVEAGRlZmF1bHRfZXZlbnRfc3RhdGVfZW50cnkAZGVmYXVsdF9ldmVudF9vbl9yZXoAc3RhcnRfcGFyYW0AZGVmYXVsdF9ldmVudF90aW1lcgBkZWZhdWx0X2V2ZW50X3NlbnNvcgBudW1fZGV0ZWN0ZWQAZGVmYXVsdF9ldmVudF9ub19zZW5zb3IAbXNjb3JsaWIAUnVudGltZUNvbXBhdGliaWxpdHlBdHRyaWJ1dGUAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwAAAAALcgBlAHMAZQB0AAABAAMgAAADfAAASTAAMAAwADAAMAAwADAAMAAtADAAMAAwADAALQAwADAAMAAwAC0AMAAwADAAMAAtADAAMAAwADAAMAAwADAAMAAwADAAMAAwAAAAAAAABCABAQgGAAERDREJAyAAAQQgABEJCAACEQkRCREJBQABAhEJBCAAERUCBg0FAAERDQ0FAAENEQkEIAEBDQUAAQ0RDQYAARENEQ0GIAMBDQ0NBSABAREVBiABERkRFQUgAQERGQMGEQkFAAEIEQkEIAEBDgUAAQ4RHQcgBAEICA4OCSAGAQ4OCA0NDQgAAhENEQ0RDQQgABEZBiABERURGQcAAhEJEQkIBSABER0IBgACAhEdDgcgAxEdDggIBiACEQkODggAAhEdER0RHQUgAREVCAggAhENERURFQYgAhENDQ0HAAIRDRENCAUgARENDQYAAREdERUGAAERCREJAwYRDQYHAhEVEQ0FIAEBEQkoBxMRFRENEQ0RFREVEQ0RCREJER0RHREVEQ0RDRENEQ0RDRENER0RHQYHAhEJER0It3pcVhk04IkeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBAAAADrNngTWsuk+LeuoGZkCJjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAABgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAEgAAABYQAAAYAMAAAAAAAAAAAAAYAM0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAfwCwBMACAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAJwCAAABADAAMAA3AGYAMAA0AGIAMAAAACgAAgABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAAACAAAAAkAAIAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAACAAAAAkAAIAAQBQAHIAbwBkAHUAYwB0AE4AYQBtAGUAAAAAACAAAAAoAAIAAQBMAGUAZwBhAGwAQwBvAHAAeQByAGkAZwBoAHQAAAAgAAAAnAA9AAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABDAG8AbQBtAG8AbgBDAG8AbQBwAGkAbABlAHIAXwBjAG8AbQBwAGkAbABlAGQAXwBkAGIAMAAxADQAMwAwADgALQBiADcANwAyAC0ANABlAGEANAAtADgAMgAxAGEALQA5ADgANwAyAGMAYgAwADUAZgA0ADkAMQAAAAAALAACAAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAACAAAAAcAAIAAQBDAG8AbQBtAGUAbgB0AHMAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAArABBAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAEMAbwBtAG0AbwBuAEMAbwBtAHAAaQBsAGUAcgBfAGMAbwBtAHAAaQBsAGUAZABfAGQAYgAwADEANAAzADAAOAAtAGIANwA3ADIALQA0AGUAYQA0AC0AOAAyADEAYQAtADkAOAA3ADIAYwBiADAANQBmADQAOQAxAC4AZABsAGwAAAAAACwAAgABAEwAZQBnAGEAbABUAHIAYQBkAGUAbQBhAHIAawBzAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAwAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</Assembly>
      <LineMap Filename="CommonCompiler_compiled_db014308-b772-4ea4-821a-9872cb05f491.dll.map"/>
    </State>
  </SavedScriptState>
<GroupScriptStates>
  • SavedScriptState - The UUID attribute will match the script item associated with this state. In this case, it matches the item in the 'xml' example above.
  • State (child of SavedScriptState) - UUID is identical to that in SavedScriptState. Asset matches the asset ID of the script item. Engine is the script engine which understands this state.
  • State (child of ScriptState) - The current LSL state of this script.
  • Running - true or false depending on whether the script was running when serialization was performed.
  • Variables - global variables for the script. In this case we have a float called gRange with the value 30, and an integer called gClearRadarFlag with the value 1.
  • Queue - events that were waiting to be processed when this serialization was performed. In this case, there was a detach event (indicated by the UUID.Zero attach parameter).
  • Plugins - Data output from various script engine plugins that handle data server listeners, sensors, timers, etc. The first parameter is the plugin type, in this case sensor. The second is the number of data parameters that follow. After that come parameters specific to that particular plugin.
  • Assembly - A base64 encoding of the compiled C# DLL for this script.
Personal tools
General
About This Wiki