{"id":12893,"date":"2024-06-19T20:27:18","date_gmt":"2024-06-19T18:27:18","guid":{"rendered":"https:\/\/pappcseperke.hu\/?p=12893"},"modified":"2025-10-25T08:19:33","modified_gmt":"2025-10-25T06:19:33","slug":"breakdown-of-hud-script-for-secondlife","status":"publish","type":"post","link":"https:\/\/pappcseperke.hu\/hu\/breakdown-of-hud-script-for-secondlife\/","title":{"rendered":"Breakdown of HUD script for Secondlife"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"12893\" class=\"elementor elementor-12893\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a5c9334 e-flex e-con-boxed e-con e-parent\" data-id=\"a5c9334\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-806e5f3 elementor-widget elementor-widget-text-editor\" data-id=\"806e5f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This is a breakdown of a scripted HUD I created for Secondlife, and the explanation of how its parts work that can be used for the creation of future HUDs.<\/p><p>I am not a professional coder, I learned lsl scripting in June 2023 (with the help of chatGPT that helped explaining some core concepts), but I wanted to create a HUD that works with particle effects during dance choreographies.<\/p><p>If you find this information useful, please make sure to buy the HUD on mp as a token of your appreciation:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f02fc01 elementor-widget elementor-widget-image\" data-id=\"f02fc01\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/marketplace.secondlife.com\/p\/Rubys-Art-Deco-Particle-Effects-and-HUD-with-Timer\/24907520\" target=\"_blank\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud-vendor-pic.png\" class=\"attachment-large size-large wp-image-12943\" alt=\"\" srcset=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud-vendor-pic.png 512w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud-vendor-pic-300x300.png 300w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud-vendor-pic-150x150.png 150w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud-vendor-pic-12x12.png 12w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-139ef67 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"139ef67\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/community.secondlife.com\/knowledgebase\/english\/heads-up-displays-huds-r34\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-chalkboard-teacher\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">HUDs in Secondlife, general usage<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/wiki.secondlife.com\/wiki\/Creating_HUDs\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"far fa-hand-point-right\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Creating HUDs in Secondlife (wiki)<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/marketplace.secondlife.com\/p\/Rubys-Art-Deco-Particle-Effects-and-HUD-with-Timer\/24907520\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-list-alt\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Link to my HUD on marketplace<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/nwn.blogs.com\/nwn\/2024\/01\/chatgpt-llm-second-life-use.html\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-robot\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">ChatGPT and scripting (article)<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a31c896 elementor-widget elementor-widget-text-editor\" data-id=\"a31c896\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If a sound is triggered using <a title=\"LlPlaySound\" href=\"https:\/\/wiki.secondlife.com\/wiki\/LlPlaySound\">llPlaySound()<\/a>, only the HUD wearer will hear it. If the land parcel they&#8217;re over restricts sound entry\/exit, the sound will not play.<\/p><ul><li>If a sound is triggered using <a title=\"LlTriggerSound\" href=\"https:\/\/wiki.secondlife.com\/wiki\/LlTriggerSound\">llTriggerSound()<\/a>, the wearer and any bystanders will hear it.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09c346e elementor-widget elementor-widget-heading\" data-id=\"09c346e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HUD features:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6996be elementor-widget elementor-widget-image\" data-id=\"d6996be\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"727\" src=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_01.png\" class=\"attachment-large size-large wp-image-12946\" alt=\"\" srcset=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_01.png 872w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_01-300x272.png 300w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_01-768x698.png 768w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_01-13x12.png 13w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4829a40 elementor-widget elementor-widget-heading\" data-id=\"4829a40\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HUD texture (512\u00d7512)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0347e elementor-widget elementor-widget-image\" data-id=\"fd0347e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud_20230611.png\" class=\"attachment-large size-large wp-image-12944\" alt=\"\" srcset=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud_20230611.png 512w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud_20230611-300x300.png 300w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud_20230611-150x150.png 150w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/art-deco-hud_20230611-12x12.png 12w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97a9b4c elementor-widget elementor-widget-heading\" data-id=\"97a9b4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HUD in build mode in SL<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18d52fd elementor-widget elementor-widget-image\" data-id=\"18d52fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"784\" height=\"760\" src=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_in-build-mode.png\" class=\"attachment-large size-large wp-image-12953\" alt=\"\" srcset=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_in-build-mode.png 784w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_in-build-mode-300x291.png 300w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_in-build-mode-768x744.png 768w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_in-build-mode-12x12.png 12w\" sizes=\"(max-width: 784px) 100vw, 784px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f59d1b8 elementor-widget elementor-widget-heading\" data-id=\"f59d1b8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HUD's structure explanation<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-72435e3 elementor-widget elementor-widget-text-editor\" data-id=\"72435e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The HUD consist of a central prim and many linked prims that function as buttons and also as the container of floating displayed text.<\/p><p>There is one script within each linked button that is triggered when a button is touched:<\/p><p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-299c83e elementor-widget elementor-widget-heading\" data-id=\"299c83e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Button script<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-adb5801 elementor-widget elementor-widget-image\" data-id=\"adb5801\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"599\" src=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_buttonwname_inbuildmode.png\" class=\"attachment-large size-large wp-image-12954\" alt=\"\" srcset=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_buttonwname_inbuildmode.png 977w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_buttonwname_inbuildmode-300x225.png 300w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_buttonwname_inbuildmode-768x575.png 768w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/hud_buttonwname_inbuildmode-16x12.png 16w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-62cd2de elementor-widget elementor-widget-text-editor\" data-id=\"62cd2de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>When each button is touched,<\/p><ul><li>the <strong>linkNumber<\/strong> (identification number of the linked Prim based on the order of linking when the objects are linked.)<\/li><li>and the <strong>buttonName<\/strong> (linkName)<\/li><li>are both sent in a Message to the root prim.<\/li><\/ul><p>All other functions are arranged by the script in the root prim.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db5a42e elementor-widget elementor-widget-code-highlight\" data-id=\"db5a42e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-cpp line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-cpp\">\n\t\t\t\t\t<xmp>default\n{\n    touch_start(integer total_number)\n    {\n        integer linkNumber = llGetLinkNumber();\n        string buttonName = llGetLinkName(LINK_THIS);\n        llMessageLinked(LINK_ROOT, linkNumber, buttonName, \"\"); \n    }\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0c2f1c elementor-widget elementor-widget-text-editor\" data-id=\"d0c2f1c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4>Naming system for buttons:<\/h4><h5>Color button names:<\/h5><ul><li>Start_Color<\/li><li>End_Color<\/li><li>End_Color_Sample<\/li><li>Start_Color_Sample<\/li><\/ul><h5>Arrow and Default button names:<\/h5><p>Particle parameters types are BurstCount, BurstRate, Glow, Alpha and Acceleration<\/p><ul><li>&#8220;ParticleParameterType&#8221;_Default<\/li><li>&#8220;ParticleParameterType&#8221;_Increase<\/li><li>&#8220;ParticleParameterType&#8221;_Decrease<\/li><li>&#8220;ParticleParameterType&#8221;_Activate<\/li><\/ul><h5>Timer and Particle Controller Buttons:<\/h5><ul><li>Timer_Controller_START<\/li><li>Timer_Controller_STOP<\/li><li>TimeAndParticles_Controller_START<\/li><li>TimeAndParticles_Controller_STOP<\/li><li>Particles_Controller_START<\/li><li>Particles_Controller_STOP<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f6b25e elementor-widget elementor-widget-heading\" data-id=\"0f6b25e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HUD root script<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-408f7c1 elementor-widget elementor-widget-n-accordion\" data-id=\"408f7c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;default_state&quot;:&quot;expanded&quot;,&quot;max_items_expended&quot;:&quot;one&quot;,&quot;n_accordion_animation_duration&quot;:{&quot;unit&quot;:&quot;ms&quot;,&quot;size&quot;:400,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-accordion\" aria-label=\"Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys\">\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6760\" class=\"e-n-accordion-item\" open>\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"1\" tabindex=\"0\" aria-expanded=\"true\" aria-controls=\"e-n-accordion-item-6760\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Global Variables <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6760\" class=\"elementor-element elementor-element-ff8796e e-con-full e-flex e-con e-child\" data-id=\"ff8796e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bac8758 elementor-widget elementor-widget-text-editor\" data-id=\"bac8758\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>activeMessage<\/strong> is a string that is parsed each time a button is pressed. Each time a button is pressed, its name is sent to the listener: the main HUD, its channel number is an integer called<strong> listen_Channel<\/strong>.<\/p><p>The HUD uses a timer, and we have an integer that stores it state: <strong>is_Timer_ON<\/strong>.<\/p><p>\u00a0<\/p><p>For maximizing and miimizing the HUD, we are storing some further variables rleated to rotation: <strong>maxRot, minRot and currentRot<\/strong>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11438b9 elementor-widget elementor-widget-code-highlight\" data-id=\"11438b9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>string activeMessage;\ninteger listen_Channel = 689689;\ninteger is_Timer_ON;\n\n\/\/HUD rotation variables\nrotation maxRot =  <0.00000, 0.00000, 0.00000, 1.00000>; \/\/ HUD Maximized \nrotation minRot =  <0.00000, -0.70711, 0.00000, 0.70711>; \/\/ HUD Minimized\nrotation currentRot = maxRot;<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6761\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"2\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6761\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Hover Effects <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6761\" class=\"elementor-element elementor-element-b65a0cf e-con-full e-flex e-con e-child\" data-id=\"b65a0cf\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4eb2f52 elementor-widget elementor-widget-code-highlight\" data-id=\"4eb2f52\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/Creates a visual effect where the specified link (button or object) briefly appears fully opaque for 0.2 seconds and then becomes fully transparent again. \nbrief_HoverEffect_Alpha (integer senderNUMBER)\n{\n    \/\/set of button 100% for 0.2 seconds,  face 4\n    llSetLinkAlpha(senderNUMBER, 1.0, 4);\n    llSleep(0.2);\n    llSetLinkAlpha(senderNUMBER, 0.0, 4);\n}    \n\n\/\/Creates a visual effect where the specified link (button or object) briefly changes color for 0.2 seconds and then resets \nbrief_HoverEffect_Color (integer senderNUMBER)\n{\n    \/\/set of button 100% for 0.2 seconds,  face 4\n    llSetLinkColor(senderNUMBER, <1.0, 1.0, 1.0>, ALL_SIDES);\n    llSleep(0.1);\n    llSetLinkColor(senderNUMBER, <0.86, 0.68, 0.36>, ALL_SIDES);\n}    <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6762\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"3\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6762\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Clear\/Populate Hover Text <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6762\" class=\"elementor-element elementor-element-32ee401 e-con-full e-flex e-con e-child\" data-id=\"32ee401\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8930db elementor-widget elementor-widget-text-editor\" data-id=\"e8930db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Maybe these two functions could be combined, I will need to look itno this:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6db302 elementor-widget elementor-widget-code-highlight\" data-id=\"c6db302\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>clearHoverText()\n{\n    \/\/ Get all linked prims\n    integer linkCount = llGetNumberOfPrims();\n    \n    \/\/ Iterate through each prim\n    integer linkNum;\n    for (linkNum = 1; linkNum <= linkCount; linkNum++)\n    {\n        \/\/ Get the prim name\n        string primName = llGetLinkName(linkNum);\n        \n        \/\/ Check if the prim is a Display prim\n        if (llSubStringIndex(primName, \"Display\") != -1)\n        {\n            \/\/ Clear the prim's hover text\n            llSetLinkPrimitiveParamsFast(linkNum, [  PRIM_TEXT, \"\",ZERO_VECTOR, 0]);\n        }\n    }\n}\n\npopulateHoverText()\n{\n    \/\/ Get all linked prims\n    integer linkCount = llGetNumberOfPrims();\n    \n    \/\/ Iterate through each prim\n    integer linkNum;\n    for (linkNum = 1; linkNum <= linkCount; linkNum++)\n    {\n        \/\/ Get the prim name\n        string primName = llGetLinkName(linkNum);\n        \n        \/\/ Check if the prim is a Display prim\n        if (llSubStringIndex(primName, \"Display\") != -1)\n        {\n            \/\/ Get the prim's description\n            list primParamList =  llGetLinkPrimitiveParams(linkNum, [ PRIM_DESC, PRIM_COLOR, ALL_SIDES ]);\n            string primDescription = llList2String(primParamList, 0); \n            vector tempColor = llList2Vector(primParamList,1);    \n    \n            \/\/ Set the prim's hover text to the description text with gained color\n            llSetLinkPrimitiveParams(linkNum, [ PRIM_TEXT, primDescription,  tempColor, 1.0 ]);\n        }\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6763\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"4\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6763\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Check Prim Name <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6763\" class=\"elementor-element elementor-element-d6aff84 e-flex e-con-boxed e-con e-child\" data-id=\"d6aff84\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d37ded1 elementor-widget elementor-widget-text-editor\" data-id=\"d37ded1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This is needed to identify which button is pressed on the HUD. You must name the buttons properly and build the relevant functions afterward.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-206866d elementor-widget elementor-widget-code-highlight\" data-id=\"206866d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\n\/\/Allows you to determine if a given string starts with a specific pattern. It returns TRUE (1) if the string starts with the pattern and FALSE (0) if it does not.\n\/\/example: check if prim name starts with string pattern (\"Acceleration\")\ninteger CheckPrimName(string stringtoTest , string pattern)\n{\n    integer result;\n\n    \/\/ Get the substring from the start of the string with the same length as the pattern\n    string substring = llGetSubString(stringtoTest, 0, llStringLength(pattern) - 1);\n\n    if (substring == pattern) \n    {\n        \/\/ The string starts with \"Acceleration\"\n        result = TRUE; \n    }\n    else\n    {\n    \/\/ The string does not start with \"Acceleration\"\n        result = FALSE;\n    }    \n    return result;\n    \n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6764\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"5\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6764\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Vector to String <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6764\" class=\"elementor-element elementor-element-6488a7f e-flex e-con-boxed e-con e-child\" data-id=\"6488a7f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ccb957b elementor-widget elementor-widget-text-editor\" data-id=\"ccb957b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This is needed to be able to display the vectors on the HUD as text.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-49bfb9d elementor-widget elementor-widget-code-highlight\" data-id=\"49bfb9d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/Takes a string representation of a vector, parses it into a list, and extracts the desired element (x, y, or z) based on the listNumber parameter. If the parsed list does not have three elements, an error message is sent to the owner, and the function returns 0.0.\n\/\/vector component = listNumber: x = 0, y=1, z=2\nfloat ParseStringVector2String(string StringVector2Parse, integer listNumber)\n{\n     \/\/ Remove the angle brackets (\"<\" and \">\") from the vector string\n    string cleanedString = llDeleteSubString(StringVector2Parse, 0,0);\n    cleanedString = llDeleteSubString(cleanedString, -1,-1);    \n    \n     \/\/ Parse the cleaned string into a list using comma (\",\") as the delimiter\n    list vectorList = llParseString2List(cleanedString, [\",\"], []);\n    \n    \/\/ Check if the list has three elements (x, y, z)\n    if (llGetListLength(vectorList) == 3)\n    {\n        \/\/ Extract the three Float values from the list\n        float FloatResult = llList2Float(vectorList, listNumber);    \n        return FloatResult;\n    }\n    else\n    {\n        llOwnerSay(\"Invalid vector string format: \" + StringVector2Parse);\n        return 0.0;\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6765\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"6\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6765\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Updating part of a Vector data <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6765\" class=\"elementor-element elementor-element-bd30cac e-flex e-con-boxed e-con e-child\" data-id=\"bd30cac\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-459a5dc elementor-widget elementor-widget-text-editor\" data-id=\"459a5dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Some particles parameters like acceleration are expressed in vector format. (three float values together). The HUD allows to modify float values individually, and we will need to update the vector value based on the updated floats.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8480400 elementor-widget elementor-widget-code-highlight\" data-id=\"8480400\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/Vector updater with new data\n\/\/takes a vector, converts it to a list, replaces the float value at the specified index with a new value, and then converts the modified list back to a vector. It returns the modified vector as the result.\nvector ReplaceFloatInVector(vector originalVector, float replacementValue, integer index)\n{\n    \/\/ Convert the original vector to a list\n    list vectorList = [originalVector.x, originalVector.y, originalVector.z]; ;\n\n    \/\/ Replace the Float value at the specified index in the list\n    vectorList = llListReplaceList(vectorList, [replacementValue], index, index);\n\n    \/\/ Convert the modified list back to a vector\n    vector modifiedVector = llList2Vector(vectorList, 0);\n\n    return modifiedVector;\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6766\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"7\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6766\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Formating floats (with rounding) <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6766\" class=\"elementor-element elementor-element-72a6394 e-flex e-con-boxed e-con e-child\" data-id=\"72a6394\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9775ea4 elementor-widget elementor-widget-code-highlight\" data-id=\"9775ea4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/converts a float value to a string, extracts the integer and decimal parts, truncates or pads the decimal part to the desired decimal places, concatenates the parts, and returns the formatted string representation of the float value.\nstring formatFloat(float value, integer decimalPlaces)\n{\n    \/\/llOwnerSay(\"formatFloat Function Triggered.\");\n    \/\/ Convert the Float value to a string\n    string stringValue = (string)value;\n\n    \/\/ Find the position of the decimal point\n    integer decimalPos = llSubStringIndex(stringValue, \".\");\n\n    \/\/ Get the integer part of the Float value\n    string integerPart = llGetSubString(stringValue, 0, decimalPos - 1);\n\n    \/\/ Get the decimal part of the Float value\n    string decimalPart = llGetSubString(stringValue, decimalPos + 1, -1);\n\n    \/\/ Truncate or pad the decimal part to the desired decimal places\n    if (llStringLength(decimalPart) > decimalPlaces)\n    {\n        decimalPart = llGetSubString(decimalPart, 0, decimalPlaces - 1);\n    }\n    else\n    {\n        while (llStringLength(decimalPart) < decimalPlaces)\n        {\n            decimalPart += \"0\";\n        }\n    }\n\n    \/\/ Concatenate the parts with a dot\n    string result = integerPart + \".\" + decimalPart;\n\n    \/\/llOwnerSay(\"formatFloat Function result: \"+result);\n    return result;\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6767\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"8\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6767\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Get Prim Number <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6767\" class=\"elementor-element elementor-element-b6f10f4 e-flex e-con-boxed e-con e-child\" data-id=\"b6f10f4\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-70988e7 elementor-widget elementor-widget-text-editor\" data-id=\"70988e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This is needed to be able to determine the linked prim&#8217;s number to be able to target it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c7a7c5 elementor-widget elementor-widget-code-highlight\" data-id=\"8c7a7c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/returns: currentLinkNumber\n\/\/searches for a specific prim in the linkset based on the provided parameters and returns the link number of the matching prim\ninteger GetPrimNumber ( string current_Param, string current_Action, string current_DetailString )\n{\n    \/\/Debug Test message\n    \/\/llOwnerSay(\"GetPrimNumber Function Triggered\");\n    \n    integer linkNum = llGetNumberOfPrims();\n    integer currentLinkNumber = 999; \/\/ Default value if no match is found\n    integer matchFound = FALSE; \/\/ Flag to indicate if a match is found\n    \n    if (current_DetailString != \"\")\n    {\n    current_Action = current_Action+\"_\"+current_DetailString;\n    }\n    \n    integer i = 0;\n    while (i <= linkNum && !matchFound)\n    {\n        string LinkName = llGetLinkName(i);\n        if (LinkName == current_Param + \"_\" + current_Action)\n        {\n            currentLinkNumber = i;\n            matchFound = TRUE;\n        }\n        i++;\n    }\n    \n    \/\/llOwnerSay((string)currentLinkNumber+\" primnumber is found.\");\n    if (currentLinkNumber == 999)\n    {\n    llOwnerSay(\"Something is wrong with finding \" +current_Param + \"_\" + current_Action +\" button!\");    \n    }\n    return currentLinkNumber;\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6768\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"9\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6768\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Get Prim Description <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6768\" class=\"elementor-element elementor-element-ec9f0f6 e-flex e-con-boxed e-con e-child\" data-id=\"ec9f0f6\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-45eb02f elementor-widget elementor-widget-text-editor\" data-id=\"45eb02f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>We are storing the activated values in the prim descriptions, we need the info when populating the HUD with updated hovering text<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fbba86c elementor-widget elementor-widget-code-highlight\" data-id=\"fbba86c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/ Uses GetPrimNumber to retrieve the link number and then retrieves the primitive description of that prim.\nstring GetPrimDescription (string current_Param, string current_Action, string current_DetailString )\n{\n    integer linkNumber = GetPrimNumber ( current_Param, current_Action, current_DetailString );\n    list DescriptionList = llGetLinkPrimitiveParams(linkNumber, [ PRIM_DESC ] );\n    string Description = llList2String(DescriptionList, 0);\n    return Description;\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6769\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"10\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6769\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Defining increments for parameters <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6769\" class=\"elementor-element elementor-element-86b1430 e-flex e-con-boxed e-con e-child\" data-id=\"86b1430\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e63b921 elementor-widget elementor-widget-code-highlight\" data-id=\"e63b921\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/determines the value of the increment based on the provided parameters current_Param and current_Action. \n\/\/ Burst Count - 1\n\/\/ StartGlow - 0.01\n\/\/ all other - 0.1\nfloat GetIncrement(string current_Param, string current_Action)\n{\n    \/\/Debug Test message\n    \/\/llOwnerSay(\"increment Function Triggered\");\n    \n    float Increment;\n    if (current_Param == \"BurstCount\")\n    {\n        Increment = 1;\n    }\n    else if (current_Param == \"StartGlow\")\n    {\n        Increment = 0.01;\n    }\n    else\n    {\n        Increment = 0.1;\n    }\n    \n    if (current_Action == \"Decrease\")\n    {\n        Increment = -Increment;\n    } \n    \n    return Increment;\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67610\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"11\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67610\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Display <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67610\" class=\"elementor-element elementor-element-8de1285 e-flex e-con-boxed e-con e-child\" data-id=\"8de1285\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1b9aed8 elementor-widget elementor-widget-text-editor\" data-id=\"1b9aed8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This is a complex function that determines the match_Value, sets the color for the text based on the matching condition, and displays the text and updates the description for the relevant display prims based on the current_Action.<\/p><p>It is called with the following parameters (variables as input)<\/p><ul><li>current_Action,<\/li><li>current_Param,<\/li><li>current_Value,<\/li><li>activated_Value,<\/li><li>current_DetailString<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c8bdc7c elementor-widget elementor-widget-text-editor\" data-id=\"c8bdc7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>It starts checking if the current_Param is<\/p><ul><li>Acceleration<\/li><\/ul><p>and if the current_Action is either<\/p><ul><li>Increase<\/li><li>Decrease<\/li><\/ul><p>\u00a0<\/p><p>This check for Acceleration is needed to be done first, because Acceleration values are vectors and have to be handled a little differently than simple floats.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-135e8a8 elementor-widget elementor-widget-code-highlight\" data-id=\"135e8a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/determines the match_Value, sets the color for the text based on the matching condition, and sets the text and updates the description for the relevant display prims based on the current_Action.\nDisplay (string current_Action, string current_Param, string current_Value, string activated_Value, string current_DetailString)\n{\n    \/\/Debug Test message\n    \/\/llOwnerSay(\"Display Function Triggered. current_Action is: \"+current_Action+\" current_Param is: \"+current_Param+\" current_Value is:\"+current_Value+\" activated_Value is: \"+activated_Value+\" current_DetailString is: \"+current_DetailString);\n    \n    string match_Value;\n    \n    \/\/check if primname starts with \"Acceleration\"\n    integer currentParam_isAcceleration = CheckPrimName(current_Param, \"Acceleration\");\n\n    if (current_Param == \"Acceleration\" && (current_Action == \"Increase\" || current_Action == \"Decrease\"))\n    {\n        \n        \/\/replaces updated component value in vector to match against\n        string modifiedVectorString = MatchVectorValue(activated_Value, current_Value, current_DetailString);\n        match_Value = modifiedVectorString;     \n        \/\/llOwnerSay(\"match_Value is: \"+match_Value);\n    }\n    \n    <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ef6d9e elementor-widget elementor-widget-text-editor\" data-id=\"1ef6d9e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This part is needed because there is an activation button. Until the activation is not done, the parameters are not sent to the particles and the numbers are gold, not green. Only when the values get sent (activated) to the particles, then the numbers turn green:<\/p><p>The color of displayed text is defined in local variable &#8220;textColor&#8221;<\/p><ul><li>activated color<\/li><li>display color<\/li><\/ul><p>depending on the match_Value and activated_Value when the arows are clicked, the color needs to be checked and properly set.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-32ab008 elementor-widget elementor-widget-code-highlight\" data-id=\"32ab008\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp> else\n    {\n         match_Value = current_Value;    \n         \/\/llOwnerSay(\"match_Value is: \"+match_Value);\n    }\n    \n    vector textColor;\n    \/\/check for matching values\n    if (match_Value == activated_Value)\n    {\n        \/\/define activated color\n        textColor = <0.478431, 0.815686, 0.043137>;\n        \/\/llOwnerSay(\"textColor is: \"+(string)textColor);\n    } \n    \n    else if (match_Value != activated_Value)\n    {\n        \/\/define display color\n        textColor = <0.871, 0.718, 0.455>;\n        \/\/llOwnerSay(\"textColor is: \"+(string)textColor);\n    }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ad137e elementor-widget elementor-widget-text-editor\" data-id=\"5ad137e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In below part the in case of Default or Activate buttons the text needs to be updated in the Display prims.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e77db33 elementor-widget elementor-widget-code-highlight\" data-id=\"e77db33\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/set hover text and description for vector value (all 3 x,y,z floats)\n\n    if ((current_Action == \"Default\" || current_Action == \"Activate\") && current_Param == \"Acceleration\" )\n    {\n        \/\/gets the relevant Display Primnumber\n        integer Param_DisplayPrimNumber = GetPrimNumber(current_Param,\"Display\",\"0\");\n        \/\/gets the relevant component of the activated value\n        float currentParsed_Value = ParseStringVector2String(activated_Value, 0);\n        \/\/truncates the relevant compoment of the activated value\n        string currentString_Value = formatFloat(currentParsed_Value, 2);\n        \/\/sets the hover text and the description of the Display Prim to the truncated relevant compoment of the activated value\n        llSetLinkPrimitiveParamsFast(Param_DisplayPrimNumber, [PRIM_TEXT, currentString_Value, textColor, 1.0, PRIM_DESC, currentString_Value, PRIM_COLOR, ALL_SIDES, textColor, 0.0]);\n\n        \/\/repeat for y and z:\n        integer Param_DisplayPrimNumber1 = GetPrimNumber(current_Param,\"Display\",\"1\");\n        float currentParsed_Value1 = ParseStringVector2String(activated_Value, 1);\n        string currentString_Value1 = formatFloat(currentParsed_Value1, 2);\n        llSetLinkPrimitiveParamsFast(Param_DisplayPrimNumber1, [PRIM_TEXT, currentString_Value1, textColor, 1.0, PRIM_DESC, currentString_Value1, PRIM_COLOR, ALL_SIDES, textColor, 0.0]);\n        integer Param_DisplayPrimNumber2 = GetPrimNumber(current_Param,\"Display\",\"2\");\n        float currentParsed_Value2 = ParseStringVector2String(activated_Value, 2);\n        string currentString_Value2 = formatFloat(currentParsed_Value2, 2);\n        llSetLinkPrimitiveParamsFast(Param_DisplayPrimNumber2, [PRIM_TEXT, currentString_Value2, textColor, 1.0, PRIM_DESC, currentString_Value2, PRIM_COLOR, ALL_SIDES, textColor, 0.0]);\n    }\n        else  \n    {\n        \/\/set hover text and description for standalone float value\n        integer Param_DisplayPrimNumber = GetPrimNumber(current_Param,\"Display\",current_DetailString);\n        llSetLinkPrimitiveParamsFast(Param_DisplayPrimNumber, [PRIM_TEXT, current_Value, textColor, 1.0, PRIM_DESC, current_Value, PRIM_COLOR, ALL_SIDES, textColor, 0.0]);\n        \n        \/\/Debug Test message\n        \/\/llOwnerSay (current_Param+\" DisplayPrimNumber is: \"+(string)Param_DisplayPrimNumber+\" Current \"+current_Param+\" value is: \"+(string)current_Value+\" textColor is: \"+(string)textColor);\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67611\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"12\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67611\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Activate <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67611\" class=\"elementor-element elementor-element-9e24b21 e-flex e-con-boxed e-con e-child\" data-id=\"9e24b21\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6b1349b elementor-widget elementor-widget-text-editor\" data-id=\"6b1349b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This function is called when the Activate buttons are pressed.<\/p><p>The end of this function calls the above Display function.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-367c278 elementor-widget elementor-widget-code-highlight\" data-id=\"367c278\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/sets the activated value to the current value, updates the object's description, sends an update message to a channel, outputs debug messages, and calls the Display function to show the current and activated values.\nActivate(string current_Action, string current_Param, string current_Value, string current_DetailString )\n{\n    \/\/Debug Test message - check if function was triggered\n    \/\/llOwnerSay(\"ACTIVATE Function Triggered. current_Action is: \"+current_Action+\" current_Param is: \"+current_Param+\" current_Value is: \"+current_Value+\" current_DetailString is: \"+current_DetailString);\n    \n    \/\/set activated value to current value\n    string activated_Value = current_Value;\n    \n    \/\/store it in object description\n    integer currentActivate_PrimNumber = GetPrimNumber ( current_Param, \"Activate\", \"\" );\n    llSetLinkPrimitiveParamsFast(currentActivate_PrimNumber, [ PRIM_DESC, activated_Value ] );\n    \n    \/\/send info to particles\n    llSay(listen_Channel, \"Update_\"+current_Param+\"_\"+activated_Value);\n    \n    \/\/send time info to chat\n    if (is_Timer_ON) \n    {\n        float time = llGetTime();\n        llOwnerSay((string)time +\"|RS:\"+(string)listen_Channel+\":Update_\"+current_Param+\" \"+activated_Value); \n    }\n    \n    \/\/Debug Test message - check values and parameters\n    \/\/llOwnerSay(\"current_Param :\"+current_Param+\" current_Value: \"+current_Value+\" activated_Value: \"+activated_Value);\n    \n    llPlaySound(\"Retro Game Lock\",1.0);\n    llSetLinkAlpha(currentActivate_PrimNumber, 1.0, ALL_SIDES);\n    llSleep(0.1);\n    llSetLinkAlpha(currentActivate_PrimNumber, 0.0, ALL_SIDES);    \n    \n    Display (current_Action, current_Param, current_Value, activated_Value, current_DetailString);       \n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67612\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"13\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67612\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Change <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67612\" class=\"elementor-element elementor-element-d2faa53 e-flex e-con-boxed e-con e-child\" data-id=\"d2faa53\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b9ead39 elementor-widget elementor-widget-code-highlight\" data-id=\"b9ead39\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/performs various operations on the provided parameters, calculates a changed value based on an increment, applies specific rules for certain parameters, retrieves an activated value, and then calls the Display function to show the changed value.\nChange(integer linkNumber, string current_Action, string current_Param, string current_Value, string current_DetailString)\n{\n    \/\/check if primname starts with \"Acceleration\"\n    integer currentParam_isAcceleration = CheckPrimName(current_Param, \"Acceleration\");\n    \n    \/\/Debug Test message - check if function was triggered\n    \/\/llOwnerSay(\"Change Function Triggered. \"+\" linkNumber is: \"+(string)linkNumber+\" current_Action is: \"+current_Action+\" Current_Param is: \"+current_Param+\" current_Value is : \"+current_Value+\" current_DetailString is :\"+current_DetailString);\n    \n    \/\/ Local variables\n    float changedValue;\n    string finalValue;\n\n    \/\/ Convert string current_Value to Float\n    float FloatValue = (float)current_Value;\n    \n    \/\/ Debug Test message    \n    \/\/llOwnerSay(\"Current Value (Float): \" + (string)FloatValue);\n\n    \/\/ Call GetIncrement function, add increment\n    float increment = GetIncrement(current_Param, current_Action);\n    changedValue = FloatValue + increment;\n    \n    \/\/ Debug Test message   - changed value check \n    \/\/llOwnerSay(\"increment is: \"+(string)increment+\", changed value is: \"+(string)changedValue );\n\n\n    \/\/ Set max, min values\n    \n    if (current_Param == \"BurstCount\")\n    {\n        if (changedValue > 50)\n        {\n            changedValue = 50;\n            llOwnerSay(\"Burst Count value cannot be larger than 50\");\n        } else if (changedValue < 0)\n        {\n            changedValue = 0;\n            llOwnerSay(\"Burst Count value cannot be negative.\");\n        }\n        finalValue = formatFloat(changedValue, 1); \n\n        \/\/ Debug Test message - check final value\n        \/\/llOwnerSay(\"finalValue is: \"+finalValue);\n    } \n    else if  (current_Param == \"StartGlow\")\n    {\n         if (changedValue > 0.1)\n        {\n            changedValue = 0.1;\n            llOwnerSay(\"StartGlow value cannot be larger than 0.1\");\n        } else if (changedValue < 0)\n        {\n            changedValue = 0;\n            llOwnerSay(\"StartGlow value cannot be negative.\");\n        }\n        finalValue = formatFloat(changedValue, 2); \n\n        \/\/ Debug Test message - check final value\n        \/\/llOwnerSay(\"finalValue is: \"+finalValue);\n    } \n\n    else \n    {\n        if (changedValue > 1.0)\n        {\n            changedValue = 1.0;\n            llOwnerSay(current_Param+ \" value cannot be larger than 1.0\");\n        }\n        else if (changedValue < 0 &&  (!currentParam_isAcceleration))  \/\/acceleration can be negative\n        {\n            changedValue = 0;\n            llOwnerSay(current_Param+ \" value cannot be negative.\");\n        }\n        finalValue = formatFloat(changedValue, 2);\n        \n        \/\/ Debug Test message        \n        \/\/llOwnerSay(\"finalValue is: \"+finalValue);\n    }\n    \n    \/\/ Get activated value from Activate Description for Display function to match it against current value (and set its color)\n    string activatedValue = GetPrimDescription (current_Param, \"Activate\" , \"\");\n    \n    \/\/ Debug Test message - check values\n    \/\/llOwnerSay(\"current_Param: \"+current_Param+\" finalValue: \"+finalValue+\" activatedValue: \"+activatedValue);\n    \n    brief_HoverEffect_Alpha (linkNumber);\n    \/\/ Call Display function to display changed value (with proper color)\n    Display(current_Action, current_Param, finalValue, activatedValue, current_DetailString);\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67613\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"14\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67613\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Color <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67613\" class=\"elementor-element elementor-element-3763cae e-flex e-con-boxed e-con e-child\" data-id=\"3763cae\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ed07c1f elementor-widget elementor-widget-image\" data-id=\"ed07c1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_06_customcolors.png\" class=\"attachment-large size-large wp-image-12945\" alt=\"\" srcset=\"https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_06_customcolors.png 512w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_06_customcolors-300x300.png 300w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_06_customcolors-150x150.png 150w, https:\/\/pappcseperke.hu\/wp-content\/uploads\/2024\/02\/tutorials_06_customcolors-12x12.png 12w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cc7d8b7 elementor-widget elementor-widget-text-editor\" data-id=\"cc7d8b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The color buttons can be individually edited as shown in diagram above.<\/p><h5>Color button names:<\/h5><ul><li>Start_Color<\/li><li>End_Color<\/li><li>End_Color_Sample<\/li><li>Start_Color_Sample<\/li><\/ul><h5>Color function<\/h5><p>When the user clicks the color buttons, the following functions called:<\/p><ol><li>a Sound is played<\/li><li>the button&#8217;s color is received in a variable<\/li><li>a color message is sent to the particle and the sample prim on the HUD that shows the current Start and End colors.<\/li><li>The position of the pressed button gets stored in a variable<\/li><li>the Indicator Ring&#8217;s color is set to the same color and position.<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2fbf8a elementor-widget elementor-widget-code-highlight\" data-id=\"c2fbf8a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/current_Param is Start or End: button names: Start_Color, End_Color\nColor (integer linkNumber, string current_Param)\n{  \n    llPlaySound(\"Tiny Beep\",1.0);\n    \n    \/\/Debug Test message\n    \/\/llOwnerSay(\"Color Function Triggered\");\n                    \n    \/\/ get color of button prim    \n    list senderColorParams = llGetLinkPrimitiveParams(linkNumber, [PRIM_COLOR, 0]);\n    vector effect_color = llList2Vector(senderColorParams, 0);\n    string color_message = llList2String(senderColorParams, 0);\n                                                           \n    llSay(listen_Channel,\"Update_\"+current_Param+\"Color_\"+color_message);\n        if (is_Timer_ON) \n        {\n            float time = llGetTime();\n            llOwnerSay((string)time +\"|RS:\"+(string)listen_Channel+\":Update_\"+current_Param+\"Color_\"+color_message);\n        }\n    \n    llSetLinkColor(linkNumber, <1.0, 1.0, 1.0>, ALL_SIDES);\n    llSleep(0.05);\n    llSetLinkColor(linkNumber, effect_color, ALL_SIDES);\n                    \n    \/\/get Color Sample Prim's number, set its color to match pressed Color button's color\n    integer Display_num = GetPrimNumber ( current_Param, \"Color\" ,\"Sample\");\n    llSetLinkPrimitiveParams(Display_num, [PRIM_COLOR, -1, effect_color,1.0]);\n    \n    \/\/get pressed Color Button's position (to later set indicator ring's position to this vector)\n    list TempColorPosParams = llGetLinkPrimitiveParams(linkNumber, [ PRIM_POS_LOCAL ]);\n    vector TempColorPos = llList2Vector(TempColorPosParams, 0);\n    \n    \/\/get Indicator Ring's prim number,  set its position and color\n    integer Indicator_num = GetPrimNumber ( current_Param, \"Color\" ,\"Indicator\");\n    llSetLinkPrimitiveParams(Indicator_num, [ PRIM_POS_LOCAL, TempColorPos, PRIM_COLOR, -1, effect_color,0.5]);\n    }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67614\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"15\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67614\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Controller <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67614\" class=\"elementor-element elementor-element-ceecaed e-flex e-con-boxed e-con e-child\" data-id=\"ceecaed\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-656f369 elementor-widget elementor-widget-text-editor\" data-id=\"656f369\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This function is called when the Particle and Timer controller buttons are pressed on the top of the HUD.<\/p><h5>Timer and Particle Controller Buttons:<\/h5><ul><li>Timer_Controller_START<\/li><li>Timer_Controller_STOP<\/li><li>TimeAndParticles_Controller_START<\/li><li>TimeAndParticles_Controller_STOP<\/li><li>Particles_Controller_START<\/li><li>Particles_Controller_STOP<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-369f32b elementor-widget elementor-widget-code-highlight\" data-id=\"369f32b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>Controller (string current_Param, string current_DetailString)\n{\n    llPlaySound(\"Upward Bleeps\",1.0);\n    \n    \/\/Debug Test message\n    \/\/llOwnerSay(\"Controller Function Triggered\");\n    \n    \/\/Timer stop and start for both cases\n    if (current_Param == \"TimeAndParticles\" || current_Param  == \"Timer\")    \n    {\n        if (current_DetailString == \"START\")\n        {\n            is_Timer_ON = TRUE;                 \n            llOwnerSay(\"Timer Started: 00.00\");\n            llResetTime();   \n        } else if (current_DetailString == \"STOP\")\n        {\n            is_Timer_ON = FALSE; \n            float time = llGetTime();\n            llOwnerSay((string)time +\"|STOP\");\n        }\n    }\n    \n    \/\/Particle stop and start for both cases                    \n    if (current_Param == \"TimeAndParticles\" || current_Param == \"Particles\") \n    {\n        \/\/Send message to Particles to start or stop playing\n        llSay(listen_Channel,current_DetailString+\"Particles\");\n        float time = llGetTime();\n        llOwnerSay((string)time +\"|RS:\"+(string)listen_Channel+\":\"+current_DetailString+\"Particles\");\n    }           \n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67615\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"16\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67615\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Set Default Values <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67615\" class=\"elementor-element elementor-element-ee969e2 e-flex e-con-boxed e-con e-child\" data-id=\"ee969e2\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c6bfd2 elementor-widget elementor-widget-text-editor\" data-id=\"0c6bfd2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The first time the default values are set, the Activate function is called.<\/p><p>All other times, when the Default buttons are clicked, the Display functions is called.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0634612 elementor-widget elementor-widget-code-highlight\" data-id=\"0634612\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/when default buttons are pressed\n\/\/retrieves the default value for a specific primitive, and then activates an action using that default value along with other provided parameters.\nSetDefaultValue (string current_Action, string current_Param, string current_DetailString)\n{\n    \/\/get default vector value in string format from relevant Default prim's Description\n    string DefaultValue = GetPrimDescription (current_Param, \"Default\" ,\"\"); \/\/The Default string names don't have a 3rd component.\n    string activated_Value= GetPrimDescription ( current_Param,  \"Activate\",  current_DetailString ) ;\n    Display (current_Action, current_Param, DefaultValue, activated_Value, current_DetailString);\n}\n\n\/\/used in state entry state and reset\n\/\/retrieves the default value for a specific primitive, and then activates an action using that default value along with other provided parameters.\nSetDefaultValueFirst (string current_Action, string current_Param, string current_DetailString)\n{\n    \/\/get default vector value in string format from relevant Default prim's Description\n    string DefaultValue = GetPrimDescription (current_Param, \"Default\" ,\"\"); \/\/The Default string names don't have a 3rd component.\n    Activate(current_Action, current_Param, DefaultValue, current_DetailString);\n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67616\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"17\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67616\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Parse Button Name <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67616\" class=\"elementor-element elementor-element-2fceb66 e-flex e-con-boxed e-con e-child\" data-id=\"2fceb66\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-21aac03 elementor-widget elementor-widget-text-editor\" data-id=\"21aac03\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Button names consist of 2 or 3\u00a0 parts divided by &#8220;_&#8221;, these are converted into the following variables:<\/p><ul><li>current_Param<\/li><li>current_Action<\/li><li>current_DetailString<\/li><\/ul><p>The rest of the functions checks for certain actions:<\/p><p>Default<\/p><p>Activate<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3979e22 elementor-widget elementor-widget-heading\" data-id=\"3979e22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Parsing, Default<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b80e35d elementor-widget elementor-widget-code-highlight\" data-id=\"b80e35d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/extracts relevant information, and performs different actions based on the extracted values\nparse_buttonName (string buttonName, integer linkNumber)\n{\n\n    \/\/Debug Test message\n    \/\/llOwnerSay(\"parse_buttonName Function Triggered\");\n    \n    list parsedList = llParseString2List(buttonName, [\"_\"], []);\n\n    string current_Param = llList2String(parsedList, 0);\n    string current_Action = llList2String(parsedList, 1);\n    string current_DetailString = llList2String(parsedList, 2);\n\n    \/\/Debug Message\n    \/\/llOwnerSay(\"Part 0: \" + current_Param);\n    \/\/llOwnerSay(\"Part 1: \" + current_Action);\n    \/\/llOwnerSay(\"Part 2: \" + current_DetailString);\n    \n    \/\/call Default function\n    if (current_Action == \"Default\") \n    {\n        brief_HoverEffect_Color (linkNumber);\n        SetDefaultValue (current_Action, current_Param, current_DetailString);\n    }\n    <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f26cd1d elementor-widget elementor-widget-heading\" data-id=\"f26cd1d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Call ACTIVATE function<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56bbe29 elementor-widget elementor-widget-text-editor\" data-id=\"56bbe29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Acceleration vector needs to be combined from 3 button descriptions:<\/p><ul><li>Acceleration_Display_0<\/li><li>Acceleration_Display_1<\/li><li>Acceleration_Display_2<\/li><\/ul><p>The remaining floats are gathered from the relevant &#8220;Display&#8221; buttons.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54d02a8 elementor-widget elementor-widget-code-highlight\" data-id=\"54d02a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>    \/\/call Activate function\n    else if (current_Action == \"Activate\") \n    {\n        \/\/Debug Message\n        \/\/llOwnerSay(\"Activate Function is being called from Parse function via Activate buttons\");\n        string current_Value;\n        \n        if (current_Param == \"Acceleration\")\n        {\n            string AccelerationX = GetPrimDescription(\"Acceleration\", \"Display\", \"0\");\n            string AccelerationY = GetPrimDescription(\"Acceleration\", \"Display\", \"1\");\n            string AccelerationZ = GetPrimDescription(\"Acceleration\", \"Display\", \"2\");\n            current_Value = \"<\"+AccelerationX+\",\"+AccelerationY+\",\"+AccelerationZ+\">\";\n        }        \n        else\n        {\n            current_Value = GetPrimDescription(current_Param, \"Display\", current_DetailString);\n        }\n        Activate ( current_Action, current_Param, current_Value, current_DetailString);  \n    }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3f7a28e elementor-widget elementor-widget-heading\" data-id=\"3f7a28e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Call CHANGE function<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-31a57c9 elementor-widget elementor-widget-code-highlight\" data-id=\"31a57c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>    \/\/call Change function        \n    else if (current_Action == \"Increase\" || current_Action == \"Decrease\")\n    {\n        if (current_Action == \"Increase\")\n        { \n            llPlaySound(\"Plastic Switch 13\",1.0);\n        } \n        else \/\/if Decrease\n        {\n             llPlaySound(\"Plastic Light Switch 2\",1.0);   \n        }\n        \n        string current_Value = GetPrimDescription(current_Param, \"Display\", current_DetailString);\n        \n        \/\/Debug Message\n        \/\/llOwnerSay(\"Change (\"+current_Action+\") Function is being called from Parse function. Current passed value for \"+current_Param+\" is: \"+current_Value);\n                \n        Change (linkNumber, current_Action, current_Param, current_Value, current_DetailString);    \n    }\n    \n    \/\/call Color function\n    else if (current_Action == \"Color\")\n    {\n        Color (linkNumber, current_Param);\n    }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65c8a2b elementor-widget elementor-widget-heading\" data-id=\"65c8a2b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Call CONTROLLER function<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-afd9900 elementor-widget elementor-widget-code-highlight\" data-id=\"afd9900\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>    \/\/call Controller function\n    else if (current_Action == \"Controller\")\n    {\n        Controller (current_Param, current_DetailString);\n    }\n    else if (current_Param == \"Minimize\") \n    \n    {\n        currentRot = minRot;\n        clearHoverText();\n        llSetLocalRot(currentRot); \/\/ Set the new rotation\n    }\n    \n        \/\/Maximize button     \n    else if (current_Param == \"Maximize\") \n    {\n        currentRot = maxRot;\n        populateHoverText();\n        llSetLocalRot(currentRot); \/\/ Set the new rotation                \n    }\n    \n    \/\/Detach button     \n    else if (current_Param == \"Detach\") \n    {\n        llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);\n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-67617\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"18\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-67617\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Core script <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-67617\" class=\"elementor-element elementor-element-9cf6af1 e-flex e-con-boxed e-con e-child\" data-id=\"9cf6af1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a7c3178 elementor-widget elementor-widget-text-editor\" data-id=\"a7c3178\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Core HUD Script (working with above functions)<\/p><p>The default values are set, any messages are litened to.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-69aede5 elementor-widget elementor-widget-code-highlight\" data-id=\"69aede5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>default\n{\n    state_entry()\n    {\n        SetDefaultValueFirst(\"Default\",\"BurstRate\",\"\");\n        SetDefaultValueFirst(\"Default\",\"BurstCount\",\"\");\n        SetDefaultValueFirst(\"Default\",\"StartAlpha\",\"\");\n        SetDefaultValueFirst(\"Default\",\"StartGlow\",\"\");\n        SetDefaultValueFirst (\"Default\",\"Acceleration\",\"0\");\n        SetDefaultValueFirst (\"Default\",\"Acceleration\",\"1\");\n        SetDefaultValueFirst (\"Default\",\"Acceleration\",\"2\");\n        llOwnerSay(\"Ready.\");\n    }\n\n\n    link_message(integer senderNumber, integer linkNumber, string buttonName, key id)\n    {\n         \/\/Debug Message\n         \/\/llOwnerSay(\"Link message received: \"+(string)senderNumber+\" \"+(string)linkNumber+\" \"+buttonName);\n         parse_buttonName(buttonName, linkNumber);\n    }\n    \n    run_time_permissions(integer perm) \n    {\n        if (perm & PERMISSION_ATTACH)\n        {\n            llDetachFromAvatar( );\n        }\n        else \n        {\n            llOwnerSay(\"Permission denied!\");\n        }\n    }        \n}\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-094025c e-flex e-con-boxed e-con e-parent\" data-id=\"094025c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8d5a6ba elementor-widget elementor-widget-heading\" data-id=\"8d5a6ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">PARTICLE script attached to hands<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-425f996 elementor-widget elementor-widget-n-accordion\" data-id=\"425f996\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;default_state&quot;:&quot;expanded&quot;,&quot;max_items_expended&quot;:&quot;one&quot;,&quot;n_accordion_animation_duration&quot;:{&quot;unit&quot;:&quot;ms&quot;,&quot;size&quot;:400,&quot;sizes&quot;:[]}}\" data-widget_type=\"nested-accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-accordion\" aria-label=\"Accordion. Open links with Enter or Space, close with Escape, and navigate with Arrow Keys\">\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6950\" class=\"e-n-accordion-item\" open>\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"1\" tabindex=\"0\" aria-expanded=\"true\" aria-controls=\"e-n-accordion-item-6950\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Global Variables <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6950\" class=\"elementor-element elementor-element-75482ab e-con-full e-flex e-con e-child\" data-id=\"75482ab\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2047c28 elementor-widget elementor-widget-code-highlight\" data-id=\"2047c28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/define listener channel - same as in HUD\ninteger LISTENER_CHANNEL = 689689;\ninteger is_ParticleON = FALSE;\ninteger update_ParticleSystem = FALSE;\n\n\/\/Timer interval\nfloat TIMER_INTERVAL = .5;\n\n\/\/ generic declarations:\nfloat ParticleDelay = 0.1;\nfloat ParticleDuration =  10.0;\n\nvector StartColor = <1.000000,1.000000,1.000000>;\nvector EndColor = <1.000000,1.000000,1.000000>;\nfloat color_range_variation = 0.2;\n\nfloat BurstRate = 1.0; \/\/ Set starting burst Rate\ninteger BurstCount = 5;\nvector Acceleration = <0.000000,0.000000,0.100000>;\nfloat StartAlpha = 0.6;\nfloat StartGlow = 0.2;\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6951\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"2\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6951\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Function: Strings to Vector <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6951\" class=\"elementor-element elementor-element-ee01595 e-con-full e-flex e-con e-child\" data-id=\"ee01595\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e41819 elementor-widget elementor-widget-code-highlight\" data-id=\"6e41819\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\/\/Strings to vector conversion\nvector String2Vector_Conversion(string colorString)\n    {\n        list colorList = llParseString2List(colorString, [\",\", \"<\", \">\"], []);\n    \n        float r = (float)llList2String(colorList, 0);\n        float g = (float)llList2String(colorList, 1);\n        float b = (float)llList2String(colorList, 2);\n        \n        vector colorVector = <r, g, b>;\n        \n        return colorVector;\n    }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6952\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"3\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6952\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> functions: Particles ON\/OFF <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6952\" class=\"elementor-element elementor-element-dad1059 e-con-full e-flex e-con e-child\" data-id=\"dad1059\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c5c6349 elementor-widget elementor-widget-code-highlight\" data-id=\"c5c6349\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>\n\/\/Use Particles_ON() and  Particles_OFF() to turn the system on and off\n\/\/move the variables from below function to global if needed!!!\n\nParticles_ON() \n    {\n        \/\/Particle effect configurations - Individual differences per prim\n        \n        \/\/Root prim specifications (small twinkle):\n        list UniqueParticle_Params = [\n           \/\/ Texture Parameters:\n            PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_DROP,\n            PSYS_SRC_BURST_RADIUS,0,\n            PSYS_SRC_ANGLE_BEGIN,0,\n            PSYS_SRC_ANGLE_END,0,\n            PSYS_SRC_TARGET_KEY,llGetKey(),\n            PSYS_PART_START_COLOR,StartColor,\n            PSYS_PART_END_COLOR,EndColor,\n            PSYS_PART_START_ALPHA,StartAlpha,\n            PSYS_PART_END_ALPHA,0,\n            PSYS_PART_START_GLOW,StartGlow,\n            PSYS_PART_END_GLOW,0.0,\n            PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,\n            PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA,\n            PSYS_PART_START_SCALE,<0.500000,0.500000,0.000000>,\n            PSYS_PART_END_SCALE,<0.500000,4.000000,0.000000>,\n            PSYS_SRC_TEXTURE,\"eace85d3-b142-5a0a-4971-f4063dab483c\",\n            PSYS_SRC_MAX_AGE,0,\n            PSYS_PART_MAX_AGE,5,\n            PSYS_SRC_BURST_RATE,BurstRate,\n            PSYS_SRC_BURST_PART_COUNT,BurstCount,\n            PSYS_SRC_ACCEL,Acceleration,\n            PSYS_SRC_OMEGA,<0.000000,0.000000,0.000000>,\n            PSYS_SRC_BURST_SPEED_MIN,0.5,\n            PSYS_SRC_BURST_SPEED_MAX,0.5,\n            PSYS_PART_FLAGS,\n                0 |\n                PSYS_PART_EMISSIVE_MASK |\n                PSYS_PART_INTERP_COLOR_MASK |\n                PSYS_PART_INTERP_SCALE_MASK\n        ];\n        \n \n            llParticleSystem(UniqueParticle_Params);          \n}\n    \nParticles_OFF() \n    {\n        llParticleSystem( [ ] );\n    }\n    \n    <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t\t<details id=\"e-n-accordion-item-6953\" class=\"e-n-accordion-item\" >\n\t\t\t\t<summary class=\"e-n-accordion-item-title\" data-accordion-index=\"4\" tabindex=\"-1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-6953\" >\n\t\t\t\t\t<span class='e-n-accordion-item-title-header'><div class=\"e-n-accordion-item-title-text\"> Core Script <\/div><\/span>\n\t\t\t\t\t\t\t<span class='e-n-accordion-item-title-icon'>\n\t\t\t<span class='e-opened' ><i aria-hidden=\"true\" class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t<span class='e-closed'><i aria-hidden=\"true\" class=\"fas fa-plus\"><\/i><\/span>\n\t\t<\/span>\n\n\t\t\t\t\t\t<\/summary>\n\t\t\t\t<div role=\"region\" aria-labelledby=\"e-n-accordion-item-6953\" class=\"elementor-element elementor-element-b5f4f66 e-flex e-con-boxed e-con e-child\" data-id=\"b5f4f66\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f10c74a elementor-widget elementor-widget-text-editor\" data-id=\"f10c74a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The parsing of the message could be done by a separate function too maybe&#8230;<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5b2ee69 elementor-widget elementor-widget-code-highlight\" data-id=\"5b2ee69\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>default\n{\n    state_entry() \n    {    \n        Particles_OFF(); \n        llListen(LISTENER_CHANNEL, \"\", NULL_KEY, \"\");\n    \n    }\n\n listen(integer channel, string name, key id, string message) \n    {\n        if (llGetOwnerKey(id) == llGetOwner() )\n        {\n            list parsedList_fromMessage = llParseString2List(message, [\"_\"], []);\n\n            string active_Action = llList2String(parsedList_fromMessage, 0);\n            string active_Param = llList2String(parsedList_fromMessage, 1);\n            string active_Value = llList2String(parsedList_fromMessage, 2);\n            \/\/llOwnerSay(\"Message received. Action is :\"+active_Action+\" Param is: \"+active_Param+\". Value is: \"+active_Value);\n                \n            if (active_Action == \"Update\")\n            {\n                if (active_Param == \"BurstCount\")\n                {\n                    BurstCount = llList2Integer(parsedList_fromMessage, 2);\n                    \/\/llOwnerSay(\"BurstRate is: \"+(string)BurstRate);\n                }\n                if (active_Param == \"BurstRate\")\n                {\n                    BurstRate = llList2Float(parsedList_fromMessage, 2);\n                    \/\/llOwnerSay(\"BurstRate is: \"+(string)BurstRate);\n                }\n                if (active_Param == \"StartGlow\")\n                {\n                    StartGlow = llList2Float(parsedList_fromMessage, 2);\n                    \/\/llOwnerSay(\"StartGlow is: \"+(string)StartGlow);\n                }\n                if (active_Param == \"StartAlpha\")\n                {\n                    StartAlpha = llList2Float(parsedList_fromMessage, 2);\n                    \/\/llOwnerSay(\"StartAlpha is: \"+(string)StartAlpha);\n                }\n                if (active_Param == \"StartColor\")\n                {\n                string ColorInfo = llList2String(parsedList_fromMessage, 2);\n                StartColor = String2Vector_Conversion(ColorInfo);     \n                \/\/llOwnerSay(\"StartColor is: \"+(string)StartColor);\n                }\n                if (active_Param == \"EndColor\")\n                {\n                string ColorInfo = llList2String(parsedList_fromMessage, 2);\n                EndColor = String2Vector_Conversion(ColorInfo);     \n               \/\/ llOwnerSay(\"EndColor is: \"+(string)EndColor);\n                }\n                if (active_Param == \"Acceleration\")\n                {\n                string accelInfo = llList2String(parsedList_fromMessage, 2);\n                Acceleration = String2Vector_Conversion(accelInfo);     \n                \/\/llOwnerSay(\"Acceleration is: \"+(string)Acceleration);\n                }\n                update_ParticleSystem = TRUE;\n            }\n            else if (active_Action == \"STARTParticles\")\n                {\n                    \/\/llOwnerSay(\"Start message received\");\n                    Particles_ON();\n                    is_ParticleON = TRUE;\n                    llSetTimerEvent(TIMER_INTERVAL);\n                }   \n                        \/\/check if time is up (for current linknumber prim)\n            else if (active_Action == \"STOPParticles\")   \n            {\n                \/\/llOwnerSay(\"Stop message received\");\n                Particles_OFF();\n                is_ParticleON = FALSE;\n                llSetTimerEvent(0.0);\n            }            \n            \n\n        }\n    }\n\n    changed(integer change)\n    {\n        \/\/ reset script when the owner or the inventory changed\n        if (change & (CHANGED_OWNER | CHANGED_INVENTORY))\n        {\n            llResetScript();\n        }\n    }\n\n    timer() \n    {\n            \n        if (update_ParticleSystem == TRUE)\n            {   \n                Particles_ON(); \n                update_ParticleSystem = FALSE;\n            }   \n         \n    }\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/details>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>This is a breakdown of a scripted HUD I created for Secondlife, and the explanation of how its parts work that can be used for the creation of future HUDs. I am not a professional coder, I learned lsl scripting in June 2023 (with the help of chatGPT that helped explaining some core concepts), but [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":13835,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-12893","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-egyeb"],"_links":{"self":[{"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/posts\/12893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/comments?post=12893"}],"version-history":[{"count":148,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/posts\/12893\/revisions"}],"predecessor-version":[{"id":13081,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/posts\/12893\/revisions\/13081"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/media\/13835"}],"wp:attachment":[{"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/media?parent=12893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/categories?post=12893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pappcseperke.hu\/hu\/wp-json\/wp\/v2\/tags?post=12893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}