{"id":7378,"date":"2024-01-26T09:31:11","date_gmt":"2024-01-26T15:31:11","guid":{"rendered":"https:\/\/blog.zoha-islands.com\/?p=7378"},"modified":"2024-01-26T09:31:11","modified_gmt":"2024-01-26T15:31:11","slug":"%f0%9f%91%a9%f0%9f%92%bb-scripting-changes-coming-soon","status":"publish","type":"post","link":"https:\/\/zoha-islands.com\/blog\/%f0%9f%91%a9%f0%9f%92%bb-scripting-changes-coming-soon\/","title":{"rendered":"&#x1f469;&#x200d;&#x1f4bb; Scripting changes coming soon"},"content":{"rendered":"<h2 class=\"ipsType_pageTitle ipsContained_container\"><span class=\"ipsContained ipsType_break\">News from the Second Life Team &#8211; January 2024 Edition <\/span><\/h2>\n<p>&nbsp;<\/p>\n<p>Happy New Year! We\u2019re off to a great start to the year at the Lab and happy to share more Second Life updates with you. You\u2019ll find news on scripting additions, PBR Materials, Project Viewers, and an update on the Second Life Mobile Private Alpha program. Enjoy!<\/p>\n<p>A handful of new, useful scripting features will be getting released in the coming weeks:<\/p>\n<h3>llComputeHash<\/h3>\n<p>LSL&#8217;s old llMD5 function has a significant flaw: it always adds a &#8220;:&#8221; character to the input string. This makes it useless for most hashing purposes. Enter: <a href=\"https:\/\/wiki.secondlife.com\/wiki\/LlComputeHash\" target=\"_blank\" rel=\"external nofollow noopener\">llComputeHash<\/a>! This new function can generate a hash of an input string using any of the following hashing algorithms: <strong>md5, md5_sha1, sha1, sha224, sha256, sha384, <\/strong>and<strong> sha512<\/strong>.<\/p>\n<div id=\"gist127794047\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container file-box\">\n<div id=\"file-llcomputehash_demo-lsl\" class=\"file my-2\">\n<div class=\"Box-body p-0 blob-wrapper data type-lsl  \">\n<div class=\"js-check-bidi js-blob-code-container blob-code-content\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">default<\/span> {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">touch_start<\/span>(<span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">count<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">string<\/span> <span class=\"pl-smi\">message<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>your-test-message-here<span class=\"pl-pds\">&#8220;<\/span><\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC4\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">list<\/span> <span class=\"pl-smi\">algorithms<\/span> <span class=\"pl-k\">=<\/span> [<span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>md5<span class=\"pl-pds\">&#8220;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>md5_sha1<span class=\"pl-pds\">&#8220;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>sha1<span class=\"pl-pds\">&#8220;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>sha224<span class=\"pl-pds\">&#8220;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>sha256<span class=\"pl-pds\">&#8220;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>sha384<span class=\"pl-pds\">&#8220;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>sha512<span class=\"pl-pds\">&#8220;<\/span><\/span>];<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC6\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC7\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">algorithmCount<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">llGetListLength<\/span>(<span class=\"pl-smi\">algorithms<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC8\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llOwnerSay<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>message=&#8217;<span class=\"pl-pds\">&#8220;<\/span><\/span> <span class=\"pl-k\">+<\/span> <span class=\"pl-smi\">message<\/span> <span class=\"pl-k\">+<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>&#8216;<span class=\"pl-pds\">&#8220;<\/span><\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC9\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">i<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">0<\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC11\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">for<\/span> (<span class=\"pl-smi\">i<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">0<\/span>; <span class=\"pl-smi\">i<\/span> <span class=\"pl-k\">&lt;<\/span> <span class=\"pl-smi\">algorithmCount<\/span>; <span class=\"pl-k\">++<\/span><span class=\"pl-smi\">i<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC12\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">string<\/span> <span class=\"pl-smi\">algorithm<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">llList2String<\/span>(<span class=\"pl-smi\">algorithms<\/span>, <span class=\"pl-smi\">i<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC13\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">string<\/span> <span class=\"pl-smi\">hash<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-en\">llComputeHash<\/span>(<span class=\"pl-smi\">message<\/span>, <span class=\"pl-smi\">algorithm<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC14\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llOwnerSay<\/span>(<span class=\"pl-smi\">algorithm<\/span> <span class=\"pl-k\">+<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>=<span class=\"pl-pds\">&#8220;<\/span><\/span> <span class=\"pl-k\">+<\/span> <span class=\"pl-smi\">hash<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC15\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC16\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div id=\"gist127794047\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container file-box\">\n<div id=\"file-llcomputehash_demo-lsl\" class=\"file my-2\">\n<div class=\"Box-body p-0 blob-wrapper data type-lsl  \">\n<div class=\"js-check-bidi js-blob-code-container blob-code-content\">\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llcomputehash_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llcomputehash_demo-lsl-LC17\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"gist-meta\"><a class=\"Link--inTextBlock\" href=\"https:\/\/gist.github.com\/sl-service-account\/61a9cd3e01009c6d2bca30092a20b54f\/raw\/96da28bd6683f96e0c4f5c803ec39bb2af392107\/llcomputehash_demo.lsl\" target=\"_blank\" rel=\"noopener\">view raw<\/a> <a class=\"Link--inTextBlock\" href=\"https:\/\/gist.github.com\/sl-service-account\/61a9cd3e01009c6d2bca30092a20b54f#file-llcomputehash_demo-lsl\" target=\"_blank\" rel=\"noopener\">llcomputehash_demo.lsl <\/a> hosted with &#x2764; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><\/div>\n<\/div>\n<\/div>\n<h3>llGetNotecardLineSync<\/h3>\n<p>You know how it takes an incredible amount of time for your furniture to boot up after resetting its scripts? Argh! Yeah, it&#8217;s annoying, and likely due to your sofa\/throne\/maypole reading configuration from one or more notecards in its inventory.<\/p>\n<p>The new <a href=\"https:\/\/wiki.secondlife.com\/wiki\/LlGetNotecardLine\" target=\"_blank\" rel=\"external nofollow noopener\">llGetNotecardLineSync<\/a> function makes loading data from notecards in object inventory much faster by providing a synchronous access method with the caveat that the notecard must be in the region&#8217;s asset cache.<\/p>\n<div id=\"gist127795442\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container file-box\">\n<div id=\"file-llgetnotecardlinesync_demo-lsl\" class=\"file my-2\">\n<div class=\"Box-body p-0 blob-wrapper data type-lsl  \">\n<div class=\"js-check-bidi js-blob-code-container blob-code-content\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">string<\/span> <span class=\"pl-smi\">NOTECARD_NAME<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>notecard<span class=\"pl-pds\">&#8220;<\/span><\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">key<\/span> <span class=\"pl-smi\">gLineCountId<\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC3\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC4\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">default<\/span> {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">state_entry<\/span>() {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC6\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\">\/\/ Request number of notecard lines.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC7\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-smi\">gLineCountId<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">llGetNumberOfNotecardLines<\/span>(<span class=\"pl-smi\">NOTECARD_NAME<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC8\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC9\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">dataserver<\/span>(<span class=\"pl-k\">key<\/span> <span class=\"pl-smi\">id<\/span>, <span class=\"pl-k\">string<\/span> <span class=\"pl-smi\">data<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC11\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">if<\/span> (<span class=\"pl-smi\">id<\/span> <span class=\"pl-k\">!=<\/span> <span class=\"pl-smi\">gLineCountId<\/span>) { <span class=\"pl-k\">return<\/span>; }<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC12\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC13\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">count<\/span> <span class=\"pl-k\">=<\/span> (<span class=\"pl-k\">integer<\/span>)<span class=\"pl-smi\">data<\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC14\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">i<\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC15\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">for<\/span> (<span class=\"pl-smi\">i<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">0<\/span>; <span class=\"pl-smi\">i<\/span> <span class=\"pl-k\">&lt;<\/span> <span class=\"pl-smi\">count<\/span>; <span class=\"pl-k\">++<\/span><span class=\"pl-smi\">i<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC16\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">string<\/span> <span class=\"pl-smi\">line<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-en\">llGetNotecardLineSync<\/span>(<span class=\"pl-smi\">NOTECARD_NAME<\/span>, <span class=\"pl-smi\">i<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC17\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">if<\/span> (<span class=\"pl-smi\">line<\/span> <span class=\"pl-k\">==<\/span> <span class=\"pl-c1\">EOF<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC18\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llOwnerSay<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>&#8212;EOF&#8212;<span class=\"pl-pds\">&#8220;<\/span><\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC19\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC20\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">else<\/span> <span class=\"pl-k\">if<\/span> (<span class=\"pl-smi\">line<\/span> <span class=\"pl-k\">==<\/span> <span class=\"pl-smi\">NAK<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC21\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llOwnerSay<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>&#8212;NAK&#8212;<span class=\"pl-pds\">&#8220;<\/span><\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC22\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC23\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">else<\/span> {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC24\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llOwnerSay<\/span>(<span class=\"pl-smi\">line<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC25\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC26\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC27\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div id=\"gist127795442\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container file-box\">\n<div id=\"file-llgetnotecardlinesync_demo-lsl\" class=\"file my-2\">\n<div class=\"Box-body p-0 blob-wrapper data type-lsl  \">\n<div class=\"js-check-bidi js-blob-code-container blob-code-content\">\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetnotecardlinesync_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetnotecardlinesync_demo-lsl-LC28\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"gist-meta\"><a class=\"Link--inTextBlock\" href=\"https:\/\/gist.github.com\/sl-service-account\/da684a2af7cea9f6e0d090602ab56ffe\/raw\/32fee905a95dec63db36c62ca2175bf7e7f7fe63\/llgetnotecardlinesync_demo.lsl\" target=\"_blank\" rel=\"noopener\">view raw<\/a> <a class=\"Link--inTextBlock\" href=\"https:\/\/gist.github.com\/sl-service-account\/da684a2af7cea9f6e0d090602ab56ffe#file-llgetnotecardlinesync_demo-lsl\" target=\"_blank\" rel=\"noopener\">llgetnotecardlinesync_demo.lsl <\/a> hosted with &#x2764; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><\/div>\n<\/div>\n<\/div>\n<p>BTW, if you&#8217;re interested in knowing more about the scripts that power a huge amount of Second Life&#8217;s furniture, vehicles and more check out the <a href=\"https:\/\/avsitter.github.io\/\" target=\"_blank\" rel=\"external nofollow noopener\">open source AVsitter project<\/a>. <span class=\"ipsEmoji\">&#x1fa91;<\/span><\/p>\n<h3>llGetCameraAspect, llGetCameraFOV, and llWorldPosToHUD<\/h3>\n<p>Several functions have been added to help content creators position HUDs:<\/p>\n<ul>\n<li><a href=\"https:\/\/wiki.secondlife.com\/wiki\/LlGetCameraAspect\" target=\"_blank\" rel=\"external nofollow noopener\">llGetCameraAspect<\/a> &#8211; Returns the aspect ratio of the wearer&#8217;s screen as a float (width\/height)<\/li>\n<li><a href=\"https:\/\/wiki.secondlife.com\/wiki\/LlGetCameraFOV\" target=\"_blank\" rel=\"external nofollow noopener\">llGetCameraFOV<\/a> &#8211; Returns a float value for the current camera&#8217;s field of view<\/li>\n<li><a href=\"https:\/\/wiki.secondlife.com\/wiki\/LlWorldPosToHUD\" target=\"_blank\" rel=\"external nofollow noopener\">llWorldPosToHUD<\/a> &#8211; Returns HUD position of an in-world object<\/li>\n<\/ul>\n<div id=\"gist127795561\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container file-box\">\n<div id=\"file-llgetcameraaspect_fov_demo-lsl\" class=\"file my-2\">\n<div class=\"Box-body p-0 blob-wrapper data type-lsl  \">\n<div class=\"js-check-bidi js-blob-code-container blob-code-content\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">gHasPerms<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">FALSE<\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC2\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-smi\">function<\/span> <span class=\"pl-en\">printCameraInfo<\/span>() {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC4\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">float<\/span> <span class=\"pl-smi\">aspect<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-en\">llGetCameraAspect<\/span>();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">float<\/span> <span class=\"pl-smi\">fov<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-en\">llGetCameraFOV<\/span>();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC6\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llOwnerSay<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span>aspect = <span class=\"pl-pds\">&#8220;<\/span><\/span> <span class=\"pl-k\">+<\/span> (<span class=\"pl-k\">string<\/span>)<span class=\"pl-smi\">aspect<\/span> <span class=\"pl-k\">+<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&#8220;<\/span> FOV = <span class=\"pl-pds\">&#8220;<\/span><\/span> <span class=\"pl-k\">+<\/span> (<span class=\"pl-k\">string<\/span>)<span class=\"pl-smi\">fov<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC7\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC8\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC9\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">default<\/span> {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">on_rez<\/span>(<span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">a<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC11\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llResetScript<\/span>();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC12\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC13\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC14\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">state_entry<\/span>() {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC15\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llRequestPermissions<\/span>(<span class=\"pl-c1\">llGetOwner<\/span>(), <span class=\"pl-c1\">PERMISSION_TRACK_CAMERA<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC16\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC17\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC18\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">run_time_permissions<\/span>(<span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">perms<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC19\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">if<\/span> (<span class=\"pl-smi\">perms<\/span> <span class=\"pl-k\">&amp;<\/span> <span class=\"pl-c1\">PERMISSION_TRACK_CAMERA<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC20\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-smi\">gHasPerms<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">TRUE<\/span>;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC21\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">printCameraInfo<\/span>();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC22\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC23\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC24\" class=\"blob-code blob-code-inner js-file-line\">\u00a0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC25\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">touch_start<\/span>(<span class=\"pl-k\">integer<\/span> <span class=\"pl-smi\">count<\/span>)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC26\" class=\"blob-code blob-code-inner js-file-line\">{<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC27\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">if<\/span> (<span class=\"pl-smi\">gHasPerms<\/span>) {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC28\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">printCameraInfo<\/span>();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC29\" class=\"blob-code blob-code-inner js-file-line\">} <span class=\"pl-k\">else<\/span> {<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC30\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">llRequestPermissions<\/span>(<span class=\"pl-c1\">llGetOwner<\/span>(), <span class=\"pl-c1\">PERMISSION_TRACK_CAMERA<\/span>);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC31\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC32\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div id=\"gist127795561\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container file-box\">\n<div id=\"file-llgetcameraaspect_fov_demo-lsl\" class=\"file my-2\">\n<div class=\"Box-body p-0 blob-wrapper data type-lsl  \">\n<div class=\"js-check-bidi js-blob-code-container blob-code-content\">\n<table class=\"highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file\" data-hpc=\"\" data-tab-size=\"8\" data-paste-markdown-skip=\"\" data-tagsearch-lang=\"LSL\" data-tagsearch-path=\"llgetcameraaspect_fov_demo.lsl\">\n<tbody>\n<tr>\n<td id=\"file-llgetcameraaspect_fov_demo-lsl-LC33\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"gist-meta\"><a class=\"Link--inTextBlock\" href=\"https:\/\/gist.github.com\/sl-service-account\/520883e42cef3b3e14bb19def5bde101\/raw\/4a3f9b45066f4d48272feb4ea3d4e1c380253d30\/llgetcameraaspect_fov_demo.lsl\" target=\"_blank\" rel=\"noopener\">view raw<\/a> <a class=\"Link--inTextBlock\" href=\"https:\/\/gist.github.com\/sl-service-account\/520883e42cef3b3e14bb19def5bde101#file-llgetcameraaspect_fov_demo-lsl\" target=\"_blank\" rel=\"noopener\">llgetcameraaspect_fov_demo.lsl <\/a> hosted with &#x2764; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><\/div>\n<\/div>\n<\/div>\n<h3>Scripting roadmap<\/h3>\n<p>Status of these upcoming changes and more are visible on Second Life&#8217;s new public road visible at <a href=\"https:\/\/feedback.secondlife.com\" target=\"_blank\" rel=\"external nofollow noopener\">feedback.secondlife.com<\/a>. If you have ideas or feedback on the scripting system check out the <a href=\"https:\/\/feedback.secondlife.com\/scripting-features\" target=\"_blank\" rel=\"external nofollow noopener\">Scripting Features<\/a> and <a href=\"https:\/\/feedback.secondlife.com\/scripting-bugs\" target=\"_blank\" rel=\"external nofollow noopener\">Scripting Bugs<\/a> boards.<\/p>\n<h1><span class=\"ipsEmoji\">&#x1f9ea;<\/span> Project Viewers<\/h1>\n<h3><span class=\"ipsEmoji\">&#x1f600;<\/span> Emoji<\/h3>\n<p><a href=\"https:\/\/releasenotes.secondlife.com\/viewer\/6.6.15.581551.html\" target=\"_blank\" rel=\"external nofollow noopener\">This viewer<\/a> is also in RC and is based on a contribution by Kitty Barnett, and adds the ability to insert emojis in text chat.<\/p>\n<h3>Maintenance W<\/h3>\n<p>This Viewer brings many fixes (see <a href=\"https:\/\/releasenotes.secondlife.com\/viewer\/7.1.3.7453541295.html\" target=\"_blank\" rel=\"external nofollow noopener\">list here<\/a>), including a fix to a long standing issue with voice failing after quickly restarting your viewer<\/p>\n<h3>Maintenance X<\/h3>\n<p>This Viewer brings many usability improvements, including:<\/p>\n<ul>\n<li>Saving you some clicks by allowing the deletion of folders containing worn items.\u00a0<\/li>\n<li>In case you only wish to detach, Alt+Shift+R will now detach selected attachments so you can remove those less fashionable items at rapid speed.<\/li>\n<li>The time format has been changed to show the more superior SLT instead of PDT.<\/li>\n<li>The group join fee will be shown when leaving a group so you can be extra sure you want to leave it.<\/li>\n<li>Shift+Alt+N will now open the Notifications floater\u00a0<\/li>\n<li>Group notices can now be accessed directly from the People floaters Groups tab. Hover that mouse cursor over the group name for access.<\/li>\n<li>Group notices will now default as being sorted by date with the newest first\u00a0<\/li>\n<\/ul>\n<h3>Maintenance Y<\/h3>\n<p>With this Viewer, you can now preview your outfit photos when hovering your cursor over outfits in the Outfit floater. You can also now remove locations from history via the context menu located in the Places floaters Visited tab.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"ipsImage ipsImage_thumbnailed alignnone\" src=\"https:\/\/content.invisioncic.com\/Mseclife\/monthly_2024_01\/image4.thumb.png.e4b8ebc2eb040e5b5ca710d86169eef4.png\" alt=\"image4.png\" width=\"803\" height=\"750\" data-fileid=\"218667\" data-ratio=\"93.40\" data-unique=\"t3rukr1sl\" \/><\/p>\n<p>See the list of additional fixes <a href=\"https:\/\/releasenotes.secondlife.com\/viewer\/6.6.17.6935642049.html\" target=\"_blank\" rel=\"external nofollow noopener\">here<\/a>.<\/p>\n<h2>Default Viewer<\/h2>\n<h3><span class=\"ipsEmoji\">&#x1f3a8;<\/span> GLTF PBR Materials<\/h3>\n<p>At the end of November, we announced in <a href=\"https:\/\/community.secondlife.com\/blogs\/entry\/14536-second-life-pbr-materials-official-launch\/\" target=\"_blank\" rel=\"noopener\">this blog post<\/a> that PBR became available grid wide! The PBR Materials project brings increased realism and enables bringing GLTF content into Second Life with expected results. Now you can create scenes with real reflections which mimic how our eyes have learned to identify that a surface is metal, plastic, or some other material. Whether you create objects in Second Life or simply enjoy seeing and wearing them, PBR Materials will provide a big step up in the appearance of the Second Life world.<\/p>\n<p><strong>Individually faceted disco ball reflections<\/strong><br \/><img decoding=\"async\" loading=\"lazy\" class=\"ipsImage ipsImage_thumbnailed alignnone\" src=\"https:\/\/content.invisioncic.com\/Mseclife\/monthly_2024_01\/image1.png.fe1cba40ef9295c7f4efc7acaf403280.png\" alt=\"image1.png\" width=\"800\" height=\"700\" data-fileid=\"218666\" data-ratio=\"87.50\" data-unique=\"t381mp5ke\" \/><\/p>\n<p>As of January 8th, 2024, the PBR Materials Maintenance 1 viewer became the default viewer for Second Life. See Release Notes <a href=\"https:\/\/releasenotes.secondlife.com\/viewer\/7.1.2.7215179142.html\" target=\"_blank\" rel=\"external nofollow noopener\">here<\/a>. There are 17 new Materials available in the Library so you can start building with PBR today!<\/p>\n<h1><span class=\"ipsEmoji\">&#x1f4f1;<\/span> Mobile Update<\/h1>\n<p>On December 12th, we announced our Mobile Private Alpha, bringing the richness of the Second Life virtual world to your Android or iOS mobile device. Qualifying Premium Plus members can apply now for the Private Alpha. If you are Premium Plus, you can learn more at <a href=\"https:\/\/lindenlab.freshdesk.com\/support\/solutions\/articles\/31000171885-premium-plus-second-life-mobile-private-alpha-sign-up\/\" target=\"_blank\" rel=\"external nofollow noopener\">this link<\/a>.<\/p>\n<p>Check out <a href=\"https:\/\/www.youtube.com\/watch?v=KxlcY8LPSAk\" target=\"_blank\" rel=\"external nofollow noopener\">this video<\/a> if you haven\u2019t already!<\/p>\n<p>We\u2019ve had an incredible amount of interest, so if you&#8217;ve applied but haven\u2019t been added yet, you\u2019re still on our list. Future testers will be added and notified as the Private Alpha continues to expand. Thanks again for your patience as we process the ongoing demand and we look forward to your participation!<\/p>\n<h2>Have A Great Weekend From All Of Us At Zoha Islands\/Fruit Islands<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>News from the Second Life Team &#8211; January 2024 Edition &nbsp; Happy New Year! We\u2019re off to a great start to the year at the Lab and happy to share more Second Life updates with you. You\u2019ll find news on scripting additions, PBR Materials, Project Viewers, and an update on the Second Life Mobile Private &hellip; <a href=\"https:\/\/zoha-islands.com\/blog\/%f0%9f%91%a9%f0%9f%92%bb-scripting-changes-coming-soon\/\" class=\"more-link\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7381,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,3,4,5,6],"tags":[65,67,71,72,82,114,122,124,128,179,185,201,218,224,275,278,280,286,291,300,304],"_links":{"self":[{"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/posts\/7378"}],"collection":[{"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/comments?post=7378"}],"version-history":[{"count":0,"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/posts\/7378\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/media\/7381"}],"wp:attachment":[{"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/media?parent=7378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/categories?post=7378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zoha-islands.com\/blog\/wp-json\/wp\/v2\/tags?post=7378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}