<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kreechur+Resident</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kreechur+Resident"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Kreechur_Resident"/>
	<updated>2026-07-27T00:55:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=UUID&amp;diff=1174243</id>
		<title>UUID</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=UUID&amp;diff=1174243"/>
		<updated>2012-11-05T17:02:44Z</updated>

		<summary type="html">&lt;p&gt;Kreechur Resident: /* Land UUIDs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Help |Glossary=*}}{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
UUID is an abbreviation for &#039;&#039;&#039;Universally Unique Identifier&#039;&#039;&#039;.  It is a 128-bit (16 byte) value which is generated in such a way as to make collisions very unlikely.  They are often represented as a string of 32 hex characters with four dashes interspersed.  See [http://en.wikipedia.org/wiki/UUID Wikipedia on UUIDs] for more information.&lt;br /&gt;
&lt;br /&gt;
In LSL they are stored in the [[key]] variable type (which is a specialized form of a string).&lt;br /&gt;
&lt;br /&gt;
== The UUID and Secondlife ==&lt;br /&gt;
In Second Life every object and every avatar has an UUID and they can be split up into four groups: Asset, Instance, Account and Land UUID&#039;s.&lt;br /&gt;
&lt;br /&gt;
SL uses Version 4 UUIDs as defined in {{RFC|4122|target=section-4.1.3}}, though there are some that are not V4.&lt;br /&gt;
&lt;br /&gt;
=== Inventory ===&lt;br /&gt;
Inventory as it is thought of is really only a permissions layer. The inventory item, is really just a wrapper around an [[asset]]. The wrapper contains the permissions, creator &amp;amp; owner of the asset and a link to the asset. The link is the asset UUID.&lt;br /&gt;
&lt;br /&gt;
=== Asset UUIDs ===&lt;br /&gt;
Asset UUIDs are used as the handle for all types that can be inventory items. The asset UUID is what is returned by [[llGetInventoryKey]] and by the &amp;quot;Copy UUID&amp;quot; feature in the client. Full (asset) permissions are required to get the UUID. Assets are immutable (they cannot be modified); when the user is editing an asset, they are in fact creating new assets. The appearance is that modified inventory items are assigned new UUIDs. &lt;br /&gt;
&lt;br /&gt;
* Animation&lt;br /&gt;
* Gestures&lt;br /&gt;
* Objects&lt;br /&gt;
* Notecards&lt;br /&gt;
* Scripts&lt;br /&gt;
* Sounds&lt;br /&gt;
* Textures (including sculpty textures)&lt;br /&gt;
----&lt;br /&gt;
*When an Object is modified in-world, it is not assigned a new asset UUID until it is derezzed, copied back to inventory or during sim-state save. Modifying an instance of an asset will not update other instances or inventory copies.&lt;br /&gt;
*Brand new notecards are just asset wrappers without an asset. That is to say, new notecards have an asset UUID of [[NULL_KEY]]. The asset isn&#039;t created until the notecard is edited and then saved.&lt;br /&gt;
*Assets that are no longer inventory and are not referenced by any script are eventually deleted. Before they are deleted they are place in a database where they await deletion but can still be revived.&lt;br /&gt;
&lt;br /&gt;
=== Instance UUIDs ===&lt;br /&gt;
Every time an object is [[rez]]zed, all of the prims (including the root prim) are assigned instance UUIDs. An avatar&#039;s attachments keeps it&#039;s instance UUIDs when the user teleports or moves from one region to another (they are not kept when an avatar logs off). The instance UUID is what is returned by [[llGetKey]] and other functions.&lt;br /&gt;
&lt;br /&gt;
=== Account UUIDs ===&lt;br /&gt;
Account UUIDs are assigned during the creation process and never change. They are generally public information.&lt;br /&gt;
* Avatar - Public&lt;br /&gt;
* Group - Public or private depending on setup.&lt;br /&gt;
The avatar UUID is returned by [[llGetOwner]] and other functions.&lt;br /&gt;
&lt;br /&gt;
=== Land UUIDs ===&lt;br /&gt;
* Parcel&lt;br /&gt;
* Region&lt;br /&gt;
----&lt;br /&gt;
* This information is technically available to the public but there is no interface to get at it directly (the UUIDs are sent to the client but consumed internally and never exposed to the user).&lt;br /&gt;
** The parcel UUID is returned by [[llGetParcelDetails]].&lt;br /&gt;
* Only one instance of these can exist in-world at any time.&lt;br /&gt;
** When copied, new UUIDs are assigned.&lt;br /&gt;
* Modification does not cause a new UUID to be assigned.&lt;br /&gt;
&amp;lt;!--* Joining parcels causes a new UUID to be assigned. --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kreechur Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Viewer_URI_Name_Space&amp;diff=1153201</id>
		<title>Viewer URI Name Space</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Viewer_URI_Name_Space&amp;diff=1153201"/>
		<updated>2011-09-07T22:17:36Z</updated>

		<summary type="html">&lt;p&gt;Kreechur Resident: corrected /chat to reflect that it does not work on channel 0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ProtocolNav}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The SL client supports links of the format secondlife://Region/123/45/67/, which have traditionally specified a region name and x/y/z location.  This means &amp;quot;run Second Life viewer and show Region on the world map&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The new URL scheme has 3 slashes, and allows direct control of the user interface and login.  For example, secondlife:///app/login&lt;br /&gt;
&lt;br /&gt;
Most secondlife:///app URLs only work from browser instances running inside Second Life because of a denial-of-service attack using secondlife:///app/teleport links to force repeated teleports.  SLURLs that work with external browsers include:&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;secondlife://&amp;lt;region name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* secondlife:///app/login&lt;br /&gt;
&lt;br /&gt;
In chat, dialogs and other user interface elements, these URLs will be highlighted as clickable links, often with custom formatting including icons. The full functionality is available in Viewer 2.0 and up. Clickable links without formatting were available only in older versions&#039; chat and IM history.&lt;br /&gt;
&lt;br /&gt;
These links also may be known as &#039;&#039;Viewer URL Namespace&#039;&#039;, &#039;&#039;SLAPP URLs&#039;&#039; or &#039;&#039;Application SLURL&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;secondlife://&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: &#039;&#039;&#039;&amp;lt;region_name&amp;gt;&#039;&#039;&#039; log in to this region or, if logged in, show information and offer teleport&lt;br /&gt;
:: &#039;&#039;&#039;/&amp;lt;local_x&amp;gt;&#039;&#039;&#039; optional X position, defaults to 128&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;local_y&amp;gt;&#039;&#039;&#039; optional Y position, defaults to 128&lt;br /&gt;
:::: &#039;&#039;&#039;/&amp;lt;local_z&amp;gt;&#039;&#039;&#039; optional Z position, defaults to 0&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;/app&#039;&#039;&#039;&lt;br /&gt;
:: &#039;&#039;&#039;/agent&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;agent_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/about&#039;&#039;&#039; open agent&#039;s profile, with 2nd Life tab selected&lt;br /&gt;
:::: &#039;&#039;&#039;/inspect&#039;&#039;&#039; display info dialog for agent (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/im&#039;&#039;&#039; start an IM session with the agent (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/offerteleport&#039;&#039;&#039; display teleport offer dialog (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/pay&#039;&#039;&#039; display pay resident dialog (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/requestfriend&#039;&#039;&#039; display friendship offer dialog (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/mute&#039;&#039;&#039; add to block list (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/unmute&#039;&#039;&#039; remove from block list (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;/completename&#039;&#039;&#039; replace the URL with the avatar&#039;s display and user names,&lt;br /&gt;
:::::e.g. &amp;quot;hmm &amp;lt;nowiki&amp;gt;secondlife:///app/agent/eea40b5a-553d-4a07-b1ca-9f6e2f867814/complete&amp;lt;/nowiki&amp;gt; wow&amp;quot; in chat becomes &amp;quot;hmm Cerise (cerise.sorbet) wow&amp;quot; (2.4)&lt;br /&gt;
:::: &#039;&#039;&#039;/displayname&#039;&#039;&#039; replace the URL with the avatar&#039;s display name (2.4)&lt;br /&gt;
:::: &#039;&#039;&#039;/username&#039;&#039;&#039; replace the URL with the avatar&#039;s username e.g. &amp;quot;user.name&amp;quot; (2.4)&lt;br /&gt;
:: &#039;&#039;&#039;/appearance&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/show&#039;&#039;&#039; display the sidebar appearance tab (2.0)&lt;br /&gt;
:: &#039;&#039;&#039;/balance&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/request&#039;&#039;&#039; request a L$ balance update from the server (2.0)&lt;br /&gt;
:: &#039;&#039;&#039;/chat&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;channel&amp;gt;&#039;&#039;&#039; any channel number greater than 0&lt;br /&gt;
:::: &#039;&#039;&#039;/&amp;amp;lt;text&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:: &#039;&#039;&#039;/classified&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;classified_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/about&#039;&#039;&#039; open floater describing classified&lt;br /&gt;
:: &#039;&#039;&#039;/event&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;event_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/about&#039;&#039;&#039; open floater describing event&lt;br /&gt;
:: &#039;&#039;&#039;/group&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;group_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/about&#039;&#039;&#039; open floater describing group&lt;br /&gt;
:::: &#039;&#039;&#039;/inspect&#039;&#039;&#039; display info dialog for group (2.0)&lt;br /&gt;
::: &#039;&#039;&#039;/create&#039;&#039;&#039; open the create group dialog (1.20)&lt;br /&gt;
::: &#039;&#039;&#039;/list&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/show&#039;&#039;&#039; open the list of groups to which user belongs (1.20)&lt;br /&gt;
:: &#039;&#039;&#039;/help&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;help_query&amp;gt;&#039;&#039;&#039; optional help topic (2.0)&lt;br /&gt;
:: &#039;&#039;&#039;/inventory&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;inventory_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/select&#039;&#039;&#039; inventory offer (2.0)&lt;br /&gt;
::: &#039;&#039;&#039;/show&#039;&#039;&#039; open the inventory sidebar tab (2.0)&lt;br /&gt;
:: &#039;&#039;&#039;/login&#039;&#039;&#039; log in on launch. External and internal browsers.&lt;br /&gt;
::: see below for query parameters, of course, values are URL escaped&lt;br /&gt;
:: &#039;&#039;&#039;/maptrackavatar&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;friend_id&amp;gt;&#039;&#039;&#039; find a friend on the world map, requires permission (2.4)&lt;br /&gt;
:: &#039;&#039;&#039;/objectim&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;object_id&amp;gt;&#039;&#039;&#039; display an info dialog for the object sending this message (2.0)&lt;br /&gt;
:::: &#039;&#039;&#039;?name=&amp;lt;object_name&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;&amp;amp;owner=&amp;lt;owner_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;&amp;amp;groupowned=true&#039;&#039;&#039; (add if the object is deeded to a group)&lt;br /&gt;
:::: &#039;&#039;&#039;&amp;amp;slurl=&amp;lt;region&amp;gt;/&amp;lt;x&amp;gt;/&amp;lt;y&amp;gt;/&amp;lt;z&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:: &#039;&#039;&#039;/parcel&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;parcel_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/about&#039;&#039;&#039; open floater describing place&lt;br /&gt;
:: &#039;&#039;&#039;&amp;lt;strike&amp;gt;/region&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;region_id&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/about&#039;&#039;&#039; information from database about that region?  list of parcels?  covenant?&amp;lt;/strike&amp;gt;&lt;br /&gt;
:: &#039;&#039;&#039;/search&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;category&amp;gt;&#039;&#039;&#039; &amp;quot;all&amp;quot;, &amp;quot;people&amp;quot;, &amp;quot;places&amp;quot;, &amp;quot;events&amp;quot;, &amp;quot;groups&amp;quot;, &amp;quot;wiki&amp;quot;, &amp;quot;destinations&amp;quot;, &amp;quot;classifieds&amp;quot;&lt;br /&gt;
:::: &#039;&#039;&#039;/&amp;lt;search_term&amp;gt;&#039;&#039;&#039; open a search floater with matching results (2.0)&lt;br /&gt;
:: &#039;&#039;&#039;/sharewithavatar&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;agent_id&amp;gt;&#039;&#039;&#039; open an inventory share/IM window for agent (2.4)&lt;br /&gt;
:: &#039;&#039;&#039;/teleport&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;region_name&amp;gt;&#039;&#039;&#039; teleport instantly to this region, no dialog&lt;br /&gt;
:::: &#039;&#039;&#039;/&amp;lt;local_x&amp;gt;&#039;&#039;&#039; optional X position, defaults to 128&lt;br /&gt;
::::: &#039;&#039;&#039;/&amp;lt;local_y&amp;gt;&#039;&#039;&#039; optional Y position, defaults to 128&lt;br /&gt;
:::::: &#039;&#039;&#039;/&amp;lt;local_z&amp;gt;&#039;&#039;&#039; optional Z position, defaults to 0&lt;br /&gt;
:: &#039;&#039;&#039;/voicecallavatar&#039;&#039;&#039;&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;agent_id&amp;gt;&#039;&#039;&#039; start a private voice session (2.4)&lt;br /&gt;
:: &#039;&#039;&#039;/worldmap&#039;&#039;&#039; open the map with this destination selected (2.0)&lt;br /&gt;
::: &#039;&#039;&#039;/&amp;lt;region_name&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:::: &#039;&#039;&#039;/&amp;lt;local_x&amp;gt;&#039;&#039;&#039; optional X position, defaults to 128&lt;br /&gt;
::::: &#039;&#039;&#039;/&amp;lt;local_y&amp;gt;&#039;&#039;&#039; optional Y position, defaults to 128&lt;br /&gt;
:::::: &#039;&#039;&#039;/&amp;lt;local_z&amp;gt;&#039;&#039;&#039; optional Z position, defaults to 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This could be extended to things like:&lt;br /&gt;
: &#039;&#039;&#039;/app/event/&amp;lt;event_id&amp;gt;/subscribe&#039;&#039;&#039; to register for notifications&lt;br /&gt;
: &#039;&#039;&#039;/app/parcel/&amp;lt;parcel_id&amp;gt;/teleport&#039;&#039;&#039; to teleport to a specific location&lt;br /&gt;
&lt;br /&gt;
== Login Query Parameters ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| first || the account first name&lt;br /&gt;
|-&lt;br /&gt;
| last || the account last name&lt;br /&gt;
|-&lt;br /&gt;
| session || the secure session id&lt;br /&gt;
|-&lt;br /&gt;
| location || login location, format TBD, optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Name Spaces]]&lt;br /&gt;
[[Category:Search]]&lt;br /&gt;
[[Category:LSL Chat]]&lt;br /&gt;
[[Category:LSL_Dialog]]&lt;/div&gt;</summary>
		<author><name>Kreechur Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=AGENT&amp;diff=1148173</id>
		<title>AGENT</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=AGENT&amp;diff=1148173"/>
		<updated>2011-07-07T12:44:58Z</updated>

		<summary type="html">&lt;p&gt;Kreechur Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=AGENT&lt;br /&gt;
|type=integer&lt;br /&gt;
|value={{LSL Hex|0x1}}&lt;br /&gt;
|desc=If it is contained in the result of llDetectedType(), it means it is avatar.&amp;lt;br /&amp;gt;If it is used as an filter of llSensor() or llSensorRepeat(), it will search for avatars.&lt;br /&gt;
|constants={{LSL Constants Sensor|no_wrapper=true|examples=*}}&lt;br /&gt;
|caveats=There is no avatar whose llDetectedType() is &#039;&#039;equal to&#039;&#039; 1([[AGENT]]) since there is no avatar who doesn&#039;t require the physical calculation, even if they are just standing. Standing agent&#039;s type will be equal to 3([[AGENT]]&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;[[ACTIVE]]). Sitting agent&#039;s type will be equal to 5([[AGENT]]&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;[[PASSIVE]]).&lt;br /&gt;
|functions=&lt;br /&gt;
{{LSL DefineRow||[[llDetectedType]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSensor]]|}}&lt;br /&gt;
{{LSL DefineRow||[[llSensorRepeat]]|}}&lt;br /&gt;
|events=&lt;br /&gt;
|cat1=Sensor&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kreechur Resident</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:LindaB_Helendale/UTF8StringLength&amp;diff=1141155</id>
		<title>User:LindaB Helendale/UTF8StringLength</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:LindaB_Helendale/UTF8StringLength&amp;diff=1141155"/>
		<updated>2011-04-20T12:45:01Z</updated>

		<summary type="html">&lt;p&gt;Kreechur Resident: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
UTF8StringLength : returns the number of bytes a string takes in UTF-8 coding.&lt;br /&gt;
&lt;br /&gt;
Channel communication, llOwnerSay, notecards, email, http calls, etc. use UTF-8 coding, with one character taking one, two or three bytes. The limits of message length are defined as bytes (e.g. llEmail 4500 bytes, llSay 1024 bytes). This function can be used to guard against clipped messages and to split long messages to parts that fit in the limits.&lt;br /&gt;
&lt;br /&gt;
  Explanation of the formula:&lt;br /&gt;
    L is the string length in utf-8 we want.&lt;br /&gt;
    N is the length of the string escaped by llEscapeURL.&lt;br /&gt;
    In the escaped string utf-8 characters with [1, 2, 3] bytes &lt;br /&gt;
    map to strings of [1, 6, 9] plain ascii chars, with each triplet&lt;br /&gt;
    of the form %XX.&lt;br /&gt;
    Let P be the number of &#039;%&#039; characters in the escaped string, &lt;br /&gt;
    and n1, n2 and n3 the number of 1,2 and 3 byte characters. Then&lt;br /&gt;
            L = n1 + 2 n2 + 3 n3&lt;br /&gt;
            N = n1 + 6 n2 + 9 n3&lt;br /&gt;
            P = 2 n1 + 3 n3&lt;br /&gt;
    Substitute P to N &lt;br /&gt;
            N = n1 + 3 P   =&amp;gt;   n1 = N - 3 P&lt;br /&gt;
    and substitute in L&lt;br /&gt;
            L = (N - 3 P) + P = N - 2 P&lt;br /&gt;
      &lt;br /&gt;
    Another way to derive the formula, more intuitively: &lt;br /&gt;
         In the escaped string every % represents triplet %XX, corresponding to&lt;br /&gt;
         one byte in the UTF-8 code, and it increases the escaped string length &lt;br /&gt;
         by three, thus subtracting 2*number of &amp;quot;%&amp;quot;&#039;s  from the escaped string &lt;br /&gt;
         length gives the number of bytes.&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
You may use this script any way you wish.&lt;br /&gt;
(c) LindaB Helendale&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;      &lt;br /&gt;
integer UTF8StringLength(string str) {&lt;br /&gt;
    // UTF8StringLength : returns the number of bytes a string takes in UTF-8 coding.&lt;br /&gt;
    // Useful in guarding against limits in communication to avoid clipped messages.&lt;br /&gt;
    // LindaB Helendale, permission to use this script in any way granted.&lt;br /&gt;
    string strEscaped = llEscapeURL(str);&lt;br /&gt;
    integer N = llStringLength(strEscaped);&lt;br /&gt;
    integer P = llGetListLength(llParseStringKeepNulls(strEscaped,[&amp;quot;%&amp;quot;],[]))-1;&lt;br /&gt;
    return N - 2 * P ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Demo script to see it works:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer UTF8StringLength(string str) {&lt;br /&gt;
    // UTF8StringLength : returns the number of bytes a string takes in UTF-8 coding.&lt;br /&gt;
    // Useful in guarding against limits in communication to avoid clipped messages.&lt;br /&gt;
    // LindaB Helendale, permission to use this script in any way granted.&lt;br /&gt;
    string strEscaped = llEscapeURL(str);&lt;br /&gt;
    integer N = llStringLength(strEscaped);&lt;br /&gt;
    integer P = llGetListLength(llParseStringKeepNulls(strEscaped,[&amp;quot;%&amp;quot;],[]))-1;&lt;br /&gt;
    return N - 2 * P ;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
test(string s) {&lt;br /&gt;
    llOwnerSay(&amp;quot;[&amp;quot; + s + &amp;quot;] Length: &amp;quot; + (string)llStringLength(s) + &amp;quot; characters, &amp;quot; + (string)UTF8StringLength(s) + &amp;quot; bytes&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        test(&amp;quot;This should be 24 bytes.&amp;quot;);&lt;br /&gt;
        test(&amp;quot;% or %% won&#039;t break it :)&amp;quot;);&lt;br /&gt;
        test(&amp;quot;ÄÖÅ are two bytes each, they add 3 bytes.&amp;quot;);&lt;br /&gt;
        test(&amp;quot;these 20 three-byte chars add 40 bytes ☈☉☊☋☌☍☎☏☐☑☒ℋℌℍℏℐℑℒ⚃㐎.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
With output&lt;br /&gt;
 [04:45] demo: [This should be 24 bytes.] Length: 24 characters, 24 bytes&lt;br /&gt;
 [04:45] demo: [% or %% won&#039;t break it :)] Length: 25 characters, 25 bytes&lt;br /&gt;
 [04:45] demo: [ÄÖÅ are two bytes each, they add 3 bytes.] Length: 41 characters, 44 bytes&lt;br /&gt;
 [04:45] demo: [these 20 three-byte chars add 40 bytes ☈☉☊☋☌☍☎☏☐☑☒ℋℌℍℏℐℑℒ⚃㐎.] Length: 60 characters, 100 bytes&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:sort|UTF8StringLength}}{{LSLC|Examples}}&lt;br /&gt;
[[Category:LSL Examples]]&lt;/div&gt;</summary>
		<author><name>Kreechur Resident</name></author>
	</entry>
</feed>