One of the commercial and very expensive objects you can purchase on marketplace is a zero-primitive holo display. That is, the object is a board that will display text messages by changing the texture of the tiles. However, since for a simple 10x10-tile board one would already consume 100 primitives, the board contains a mechanism that continuously rezzes the tiles as temporary over and over again and applies the corresponding letter texture.
This is the opensource version, courtesy of Wizardry and Steamworks.
The Holo Display is made of two scripts:
[K] Holo Panel
.[K] Holo Tile
.Both objects are named, meaning that the scripts rely on them having exactly those names.
The [K] Holo Tile
is a primitive that contains just one script:
[K] Holo
which listens to llWhisper
messages and sets the tile texture.and the following textures which are created by Steve Matteson and carries an Apache License which is compatible with GNU GPLv3:
File | Asset UUID |
---|---|
ASCII Number 126 | d8b54f47-56cc-a306-e08d-7ccc17d973f1 |
ASCII Number 125 | 65a27c6e-dbcc-c7a6-b79e-5e4b85480f56 |
ASCII Number 124 | 773b742a-0b17-c412-61c9-46da7a4fd188 |
ASCII Number 123 | 73c81fad-fe69-c9c1-e624-1e62121619a7 |
ASCII Number 122 | e3b11806-6fc2-c93a-0395-8460ef262a1b |
ASCII Number 121 | 4137395e-adcc-fb88-73ff-b30e721bc81c |
ASCII Number 120 | fcfa1923-097e-44b3-faf6-9b7070c5dd75 |
ASCII Number 119 | c8997016-7d81-542e-0160-a534936ba5f9 |
ASCII Number 118 | 34fa461b-9789-da82-7d03-ff596c49078d |
ASCII Number 117 | e3a71a2a-3901-82d0-0047-d20ed37a334f |
ASCII Number 116 | 4dda7e97-fdff-c9d0-2d58-540b9e888475 |
ASCII Number 115 | 0994a922-e4b6-fd37-5c98-c04c37b83b46 |
ASCII Number 114 | 6d07262d-198c-8267-eb9e-34252fd92a17 |
ASCII Number 113 | 93ee26d4-3cad-b840-9e51-fbaa66a70030 |
ASCII Number 112 | 8e1a7884-b653-06a2-27ae-df7bad1b38af |
ASCII Number 111 | 52f426ad-a960-32f6-6f91-17ebf007f346 |
ASCII Number 110 | f74c18a9-3ac8-d40d-b04b-954ff50bc800 |
ASCII Number 109 | 4933e0cb-13d0-6be0-e4e7-fc28f3b7dd1f |
ASCII Number 108 | 757c7c0b-b686-a86b-b817-b2f168ab95cd |
ASCII Number 107 | 466ea6e8-9497-d796-14c3-db04645fe3f0 |
ASCII Number 106 | 63aeaa2a-abbd-2098-4338-e42f16c82798 |
ASCII Number 105 | afa14604-4770-5070-ada1-7a7846b7ac50 |
ASCII Number 104 | 3e7101d9-ad42-6ba0-0d85-6e4ee6dc338d |
ASCII Number 103 | 0b3730e8-87c3-99ae-3fa6-d51fb8f6802d |
ASCII Number 102 | ef3eff41-2c6e-1e70-ec7f-7f44d1bd62f5 |
ASCII Number 101 | 4992e3b5-595c-a14b-2528-4dbb7f936d94 |
ASCII Number 100 | af7b4c4c-2ff7-80d3-2849-d5822addf287 |
ASCII Number 99 | fbc404a0-86c6-6ec0-e937-0a6beaada5bc |
ASCII Number 98 | b6595a6f-8715-b87b-232e-4ac7e87a9f7e |
ASCII Number 97 | ae5e56d4-bf7e-3028-cffe-9115a85dca53 |
ASCII Number 96 | 377e5b6c-5649-4eb4-13b8-127b264c8b5c |
ASCII Number 95 | 0b8719d7-2fe6-2bc5-9ee9-94a2bf39e52d |
ASCII Number 94 | ea6515b1-c436-9090-f593-6fc997e1baad |
ASCII Number 93 | f91c30ad-1f41-0161-1ece-730c66a15625 |
ASCII Number 92 | 90da5e13-d0f9-3bd1-0753-20b23c5bfc13 |
ASCII Number 91 | f3ba29bd-cdb0-2a27-a7f5-84bfefde1eb4 |
ASCII Number 90 | a0e9567d-abc6-be31-e526-b43cf5d36518 |
ASCII Number 89 | 039447f7-7824-efe7-46fe-b59471616cdb |
ASCII Number 88 | 2675b59d-ad29-9969-e5a3-34ca5345d510 |
ASCII Number 87 | f37cdc18-bf3c-4d39-c8d8-4a6708fcce8a |
ASCII Number 86 | e0954dc1-7641-6179-f238-bd3a95a7a753 |
ASCII Number 85 | d01fafd5-da8f-e8b1-761d-1d204c65ae5c |
ASCII Number 84 | 0fb0b222-bb4b-2383-5c01-66fdad9e5ad6 |
ASCII Number 83 | 662edfa4-7a5b-6fa0-c2dc-70032c15b4c9 |
ASCII Number 82 | 97e0be84-dc52-9147-8e25-75a1809f64d2 |
ASCII Number 81 | d0910e94-408b-7873-8523-12ca6c3eaffc |
ASCII Number 80 | d844c72c-baa8-e449-278a-15d1986bbcd5 |
ASCII Number 79 | 53909715-1cea-5b39-d491-10c6a86f034d |
ASCII Number 78 | 23f068ef-e897-b69e-5bb3-c23079641e77 |
ASCII Number 77 | 0240ba93-8704-ceec-e917-1ec27792cc69 |
ASCII Number 76 | 82ed5956-835c-9580-769f-812dab6b6f04 |
ASCII Number 75 | ea2c5050-d95a-adbe-40b9-5b8208d377c9 |
ASCII Number 74 | cf878b0a-eb17-cf5f-abe0-2457d14a3209 |
ASCII Number 73 | 7f72b788-aa03-b12c-64d4-08ff42fd0d76 |
ASCII Number 72 | ce6cb5e3-4960-7c32-c5b9-60ef717e733d |
ASCII Number 71 | d1a1216f-fa64-93fb-e3ac-9b61935be0e7 |
ASCII Number 70 | 6898db10-e43e-08fb-cd7f-a78ea1ddd8a4 |
ASCII Number 69 | a2f9d98e-a0b6-3d34-669a-ff53aa6263e3 |
ASCII Number 68 | d524ddaf-0d05-bda5-aced-70871266d18e |
ASCII Number 67 | eafdb177-d952-bc02-fef8-6d5549c75dca |
ASCII Number 66 | 1d6449e4-4c7d-f84a-1472-b07559b0221e |
ASCII Number 65 | ee30cc90-918f-11fc-db29-412be076c0c1 |
ASCII Number 64 | 16fd6a5d-ff62-85c5-d6d7-1b86b498b458 |
ASCII Number 63 | 2135e922-4fb4-6e79-2f03-993938a50572 |
ASCII Number 62 | 64538835-67b3-1554-b8e0-4ddba7fb01be |
ASCII Number 61 | 8a6dd86c-488e-25f7-befc-3d30db7b789b |
ASCII Number 60 | 8b310383-376e-8a77-9c07-e3f71e0ef93c |
ASCII Number 59 | b61712f4-b492-b15f-76f3-701dae7ac8e6 |
ASCII Number 58 | 24f4146b-da33-2301-defe-0c473668f6eb |
ASCII Number 57 | 355bdc23-c7f2-83e8-84d1-c5fe72efe6c4 |
ASCII Number 56 | bf634086-3400-7753-17e1-eaa5daf1c505 |
ASCII Number 55 | e031e370-7a27-0515-1955-84e2fe48dd66 |
ASCII Number 54 | b42df016-eb61-02df-78b2-5490596ffe44 |
ASCII Number 53 | f7fd10e5-54db-4013-52ba-6c3aa16d58f7 |
ASCII Number 52 | 0fffbe33-258e-24c4-eb94-1b69e034225b |
ASCII Number 51 | 662cbeeb-b2e5-e65e-a347-938142c5ce3a |
ASCII Number 50 | 5569f0e7-8ee9-de8b-6bd0-b24f68e1191b |
ASCII Number 49 | 92595b6b-7551-6b7b-913e-38f1cb32cfa6 |
ASCII Number 48 | 36657cbe-a6c8-f812-912f-bb4ac661fd47 |
ASCII Number 47 | 4bddb509-aef0-55d3-4e04-2e4a67ea2aea |
ASCII Number 46 | 1c7f3347-ccf1-ee6f-6f91-d9a345aa2cf6 |
ASCII Number 45 | 50923169-33e0-c759-b5c0-19a4aa1e88b2 |
ASCII Number 44 | f72e316c-55d0-7c9a-c5d9-4d7df13f233d |
ASCII Number 43 | d5f4b2bf-d396-5ae9-500b-90283f5e8df4 |
ASCII Number 42 | 90823a84-3c64-60cd-35d0-cdcb1873371a |
ASCII Number 41 | 1ee3d1b0-3c00-eeec-7224-07690daa95ea |
ASCII Number 40 | af1b8821-725c-b3a9-4b58-57326ec6cacc |
ASCII Number 39 | c9e96d68-f2ae-d591-3bc7-31f56ff8a353 |
ASCII Number 38 | bb61bd21-8a84-3bce-bee8-d1ee23188637 |
ASCII Number 37 | 52aa48d3-40c4-2da2-e46f-1a98b33cb696 |
ASCII Number 36 | cf9bd934-eb7f-686e-918d-c6867ab36346 |
ASCII Number 35 | bd84abb9-5d0f-9697-6558-b633b2509373 |
ASCII Number 34 | a4406722-cd3b-d693-3bc1-61bed4249c13 |
ASCII Number 33 | 7a5d01e0-8841-cfa9-cd3e-f462a8a1ce03 |
ASCII Number 32 | 6325f460-f5e8-1d45-9764-d2a1fe790374 |
Wizardry and Steamworks wishes you a mellow time uploading 95 textures. Otherwise, you can alter the code and reference them there by using the texture asset UUID (key) and spare yourself a whopping L$950 (that's why we posted the UUIDs here).
The last texture ASCII 32 with the asset UUID 6325f460-f5e8-1d45-9764-d2a1fe790374
is space, which is a blank texture. It may be used to create invisible primitives which are much better than the textures offered by hacked viewers (they don't seem to have collisions with water).
The [K] Holo Panel
contains 5 scripts, some of them optional:
[K] FTC
which is the fast texture cacher from Wizardry and Steamworks (Optional but recommended).[K] Holo Display Tiler
which is the Planar Tile Generator from Wizardry and Steamworks.[K] Regen
which is a dispatcher for the rezzing script.[K] Rezzer
which is a script that listens to link-messages from [K] Regen
and rezzes a new tile in case one tile just died. You can have any number of these.[K] Transmit
which listens to link-messages from [K] Rezzer
.
All these scripts must be placed in a primitive named [K] Holo Panel
.
Once you set-up the primitives, you can click the [K] Holo Panel
to start deploying [K] Tile
s. After all the [K] Tile
s have been deployed, the [K] Holo Panel
will stay there and process rez-requests. You can type something on local chat in order to test the system.
The code may of course be extended, depending on the application, to process messages from things such as llTextBox
or add the messages line-by-line.
This part is supposed to go in the tile to be rezzed.
////////////////////////////////////////////////////////// // WaS (c) grimore.org - 2011, License: GPLv3 with the// // exception of the Ord function created by Pedro // // Oval which carries an unknown license. // ////////////////////////////////////////////////////////// // Ord() function, written by Pedro Oval, 2010-05-28 // This function works by using llEscapeURL to find the corresponding UTF-8 // string then converts it to the Unicode code. In cases where llEscapeURL // doesn't help, a combination of llStringToBase64 and llBase64ToInteger // does the job instead. integer Ord(string chr) { if (chr == "") return 0; string hex = llEscapeURL(chr); if (llGetSubString(hex, 0, 0) != "%") { // Regular character - we can't take advantage of llEscapeURL in this case, // so we use llStringToBase64/llBase64ToInteger instead. return llBase64ToInteger("AAAA" + llStringToBase64(llGetSubString(chr, 0, 0))); } integer b = (integer)("0x" + llGetSubString(hex, 1, 2)); if (b < 194 || b > 244) return b; if (b < 224) return ((b & 0x1F) << 6) | (integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F; integer cp; if (b < 240) { cp = (b & 0x0F) << 12; cp += ((integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F) << 6; cp += (integer)("0x" + llGetSubString(hex, 7, 8)) & 0x3F; return cp; } cp = (b & 0x07) << 18; cp += ((integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F) << 12; cp += ((integer)("0x" + llGetSubString(hex, 7, 8)) & 0x3F) << 6; cp += (integer)("0x" + llGetSubString(hex, 10, 11)) & 0x3F; return cp; } key _owner = NULL_KEY; string letter = ""; integer comChannel = 0; default { state_entry() { _owner = llGetOwner(); comChannel = ((integer)("0x"+llGetSubString((string)llGetOwner(),-8,-1)) & 0x3FFFFFFF) ^ 0xBFFFFFFF; llListen(comChannel, "[K] Holo Panel", "", ""); } listen(integer channel, string name, key id, string message) { list pSet = llCSV2List(message); integer idx = llListFindList(pSet, (list)llGetObjectDesc()); if(~idx) letter = llList2String(pSet,idx+1); if(letter == "") letter = " "; llSetTexture("OpenSans_Regular_" + (string)Ord(letter), 3); } timer() { llWhisper(comChannel, "die," + llGetObjectDesc() + ",pos," + (string)llGetPos() + ",let," + letter); llDie(); } on_rez(integer param) { llSetTimerEvent(56.25); // alarm - see http://grimore.org/wiki/Wizardry_and_Steamworks/Randomness,_Entropy_and_Statistics llSetObjectDesc((string)param); _owner = llGetOwner(); } changed(integer change) { if(change & CHANGED_OWNER) _owner = llGetOwner(); } }
This is the fast-texture cache adapted from lsl and should go in the rezzer itself.
////////////////////////////////////////////////////////// // (C) Wizardry and Steamworks 2011, license: GPLv3 // ////////////////////////////////////////////////////////// // Requires: link message, string set to "kpre", string of // texture keys separated by commas. // Provides: link message, string set to "kok" when ready. ////////////////////////////////////////////////////////// // About: A script to cache textures and keep them alive. ////////////////////////////////////////////////////////// list slides = [ "d8b54f47-56cc-a306-e08d-7ccc17d973f1", "65a27c6e-dbcc-c7a6-b79e-5e4b85480f56", "773b742a-0b17-c412-61c9-46da7a4fd188", "73c81fad-fe69-c9c1-e624-1e62121619a7", "e3b11806-6fc2-c93a-0395-8460ef262a1b", "4137395e-adcc-fb88-73ff-b30e721bc81c", "fcfa1923-097e-44b3-faf6-9b7070c5dd75", "c8997016-7d81-542e-0160-a534936ba5f9", "34fa461b-9789-da82-7d03-ff596c49078d", "e3a71a2a-3901-82d0-0047-d20ed37a334f", "4dda7e97-fdff-c9d0-2d58-540b9e888475", "0994a922-e4b6-fd37-5c98-c04c37b83b46", "6d07262d-198c-8267-eb9e-34252fd92a17", "93ee26d4-3cad-b840-9e51-fbaa66a70030", "8e1a7884-b653-06a2-27ae-df7bad1b38af", "52f426ad-a960-32f6-6f91-17ebf007f346", "f74c18a9-3ac8-d40d-b04b-954ff50bc800", "4933e0cb-13d0-6be0-e4e7-fc28f3b7dd1f", "757c7c0b-b686-a86b-b817-b2f168ab95cd", "466ea6e8-9497-d796-14c3-db04645fe3f0", "63aeaa2a-abbd-2098-4338-e42f16c82798", "afa14604-4770-5070-ada1-7a7846b7ac50", "3e7101d9-ad42-6ba0-0d85-6e4ee6dc338d", "0b3730e8-87c3-99ae-3fa6-d51fb8f6802d", "ef3eff41-2c6e-1e70-ec7f-7f44d1bd62f5", "4992e3b5-595c-a14b-2528-4dbb7f936d94", "af7b4c4c-2ff7-80d3-2849-d5822addf287", "fbc404a0-86c6-6ec0-e937-0a6beaada5bc", "b6595a6f-8715-b87b-232e-4ac7e87a9f7e", "ae5e56d4-bf7e-3028-cffe-9115a85dca53", "377e5b6c-5649-4eb4-13b8-127b264c8b5c", "0b8719d7-2fe6-2bc5-9ee9-94a2bf39e52d", "ea6515b1-c436-9090-f593-6fc997e1baad", "f91c30ad-1f41-0161-1ece-730c66a15625", "90da5e13-d0f9-3bd1-0753-20b23c5bfc13", "f3ba29bd-cdb0-2a27-a7f5-84bfefde1eb4", "a0e9567d-abc6-be31-e526-b43cf5d36518", "039447f7-7824-efe7-46fe-b59471616cdb", "2675b59d-ad29-9969-e5a3-34ca5345d510", "f37cdc18-bf3c-4d39-c8d8-4a6708fcce8a", "e0954dc1-7641-6179-f238-bd3a95a7a753", "d01fafd5-da8f-e8b1-761d-1d204c65ae5c", "0fb0b222-bb4b-2383-5c01-66fdad9e5ad6", "662edfa4-7a5b-6fa0-c2dc-70032c15b4c9", "97e0be84-dc52-9147-8e25-75a1809f64d2", "d0910e94-408b-7873-8523-12ca6c3eaffc", "d844c72c-baa8-e449-278a-15d1986bbcd5", "53909715-1cea-5b39-d491-10c6a86f034d", "23f068ef-e897-b69e-5bb3-c23079641e77", "0240ba93-8704-ceec-e917-1ec27792cc69", "82ed5956-835c-9580-769f-812dab6b6f04", "ea2c5050-d95a-adbe-40b9-5b8208d377c9", "cf878b0a-eb17-cf5f-abe0-2457d14a3209", "7f72b788-aa03-b12c-64d4-08ff42fd0d76", "ce6cb5e3-4960-7c32-c5b9-60ef717e733d", "d1a1216f-fa64-93fb-e3ac-9b61935be0e7", "6898db10-e43e-08fb-cd7f-a78ea1ddd8a4", "a2f9d98e-a0b6-3d34-669a-ff53aa6263e3", "d524ddaf-0d05-bda5-aced-70871266d18e", "eafdb177-d952-bc02-fef8-6d5549c75dca", "1d6449e4-4c7d-f84a-1472-b07559b0221e", "ee30cc90-918f-11fc-db29-412be076c0c1", "16fd6a5d-ff62-85c5-d6d7-1b86b498b458", "2135e922-4fb4-6e79-2f03-993938a50572", "64538835-67b3-1554-b8e0-4ddba7fb01be", "8a6dd86c-488e-25f7-befc-3d30db7b789b", "8b310383-376e-8a77-9c07-e3f71e0ef93c", "b61712f4-b492-b15f-76f3-701dae7ac8e6", "24f4146b-da33-2301-defe-0c473668f6eb", "355bdc23-c7f2-83e8-84d1-c5fe72efe6c4", "bf634086-3400-7753-17e1-eaa5daf1c505", "e031e370-7a27-0515-1955-84e2fe48dd66", "b42df016-eb61-02df-78b2-5490596ffe44", "f7fd10e5-54db-4013-52ba-6c3aa16d58f7", "0fffbe33-258e-24c4-eb94-1b69e034225b", "662cbeeb-b2e5-e65e-a347-938142c5ce3a", "5569f0e7-8ee9-de8b-6bd0-b24f68e1191b", "92595b6b-7551-6b7b-913e-38f1cb32cfa6", "36657cbe-a6c8-f812-912f-bb4ac661fd47", "4bddb509-aef0-55d3-4e04-2e4a67ea2aea", "1c7f3347-ccf1-ee6f-6f91-d9a345aa2cf6", "50923169-33e0-c759-b5c0-19a4aa1e88b2", "f72e316c-55d0-7c9a-c5d9-4d7df13f233d", "d5f4b2bf-d396-5ae9-500b-90283f5e8df4", "90823a84-3c64-60cd-35d0-cdcb1873371a", "1ee3d1b0-3c00-eeec-7224-07690daa95ea", "af1b8821-725c-b3a9-4b58-57326ec6cacc", "c9e96d68-f2ae-d591-3bc7-31f56ff8a353", "bb61bd21-8a84-3bce-bee8-d1ee23188637", "52aa48d3-40c4-2da2-e46f-1a98b33cb696", "cf9bd934-eb7f-686e-918d-c6867ab36346", "bd84abb9-5d0f-9697-6558-b633b2509373", "a4406722-cd3b-d693-3bc1-61bed4249c13", "7a5d01e0-8841-cfa9-cd3e-f462a8a1ce03", "6325f460-f5e8-1d45-9764-d2a1fe790374" ]; integer gitra = 0; default { state_entry() { // Thanks for the music Salahzar Stenvaag, 10 faces is cool! llSetPrimitiveParams([PRIM_TYPE, PRIM_TYPE_PRISM, 32, <.199, .8, .0>, .30, <.0, .0, .0>, <1, 1, .0>, <.0, .0, .0>, PRIM_SIZE, <.03, 2.89, .5>, PRIM_COLOR, ALL_SIDES, <1,1,1>, .0 ]); llSetTimerEvent(1.02-llGetRegionTimeDilation()); } timer() { llSetTimerEvent(0); if(gitra == llGetListLength(slides)) { gitra = 0; } integer itra=llGetNumberOfSides()-1; do { if(llList2Key(slides, gitra+itra)) llSetTexture(llList2Key(slides, gitra+itra), itra); } while(--itra>-1); ++gitra; llSetTimerEvent(1.02-llGetRegionTimeDilation()); } }
This is just Planar Tile Generator and should go in the rezzer.
/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// // CONFIGURATION // ////////////////////////////////////////////////////////// // The height of the generated board. integer BOARD_HEIGHT = 10; // The width of the generated board. integer BOARD_WIDTH = 10; // The delay between rezzing the object in the primitive. float SPEED = .2; // Set this to the scale of the primitive inside the object. vector OBJECT_SCALE = <.1,.1,.1>; // Set this to the name of the object to rez. string TILE_NAME = "[K] Holo Tile"; ////////////////////////////////////////////////////////// // INTERNALS // ////////////////////////////////////////////////////////// integer runner = 0; integer gitra = 0; integer gitrb = 0; vector tilePos = ZERO_VECTOR; default { state_entry() { llSay(0, "Click the glowing prim to deploy more tiles."); } touch_start(integer total_number) { // Sanity. if(BOARD_HEIGHT*BOARD_WIDTH < 1) { llSay(DEBUG_CHANNEL, "Sorry, the width and height have to be larger than zero. Aborting."); return; } if(TILE_NAME == "") { llSay(DEBUG_CHANNEL, "Sorry, I could not find an object in the inventory to rez. Aborting."); return; } runner = BOARD_HEIGHT*BOARD_WIDTH; tilePos = llGetPos(); state deploy; } } state deploy { state_entry() { llSay(0, "Please wait, deploying prims. Touch To stop..."); llSetTimerEvent(SPEED); } touch_start(integer num) { llSetTimerEvent(0); state default; } timer() { llSetTimerEvent(0); if(runner > BOARD_WIDTH*BOARD_HEIGHT) { state default; return; } if(gitrb < BOARD_HEIGHT) { if(gitra < BOARD_WIDTH-1) { llRezObject(TILE_NAME,tilePos,ZERO_VECTOR,ZERO_ROTATION,runner--); tilePos.x += OBJECT_SCALE.x; llSetPos(tilePos); // llSetLinkPrimitiveParamsFast(LINK_THIS, [OBJECT_POS, tilePos]); // Thanks, FailedNoob Resident. - SL Compatible ++gitra; llSetTimerEvent(SPEED); return; } llRezObject(TILE_NAME,tilePos,ZERO_VECTOR,ZERO_ROTATION,runner--); tilePos.z += OBJECT_SCALE.z; tilePos.x -= (BOARD_WIDTH-1)*OBJECT_SCALE.x; llSetPos(tilePos); // llSetLinkPrimitiveParamsFast(LINK_THIS, [OBJECT_POS, tilePos]); // Thanks, FailedNoob Resident. - SL Compatible //OBJECT_SCALE.x *= -1; ++gitrb; gitra = 0; llSetTimerEvent(SPEED); return; } } }
This is the regenerator that dispatches rez requests to the rezzers and should go in the rezzer primitive itself.
/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// // Set this to the amount of rezzers. integer REZZERS = 5; key _owner = NULL_KEY; integer runner = 0; default { state_entry() { _owner = llGetOwner(); integer comChannel = ((integer)("0x"+llGetSubString((string)llGetOwner(),-8,-1)) & 0x3FFFFFFF) ^ 0xBFFFFFFF; llListen(comChannel, "[K] Holo Tile", "", ""); } listen(integer channel, string name, key id, string message) { if(runner >= REZZERS) runner = 0; llMessageLinked(LINK_THIS, runner++, message, "rez"); } on_rez(integer param) { _owner = llGetOwner(); } changed(integer change) { if(change & CHANGED_OWNER) { _owner = llGetOwner(); } } }
This is one of the rezzers. You must configure the REZZER_ID
in the configuration section of the script and set it for each rezzer you want to have. This script should go in the rezzer itself.
/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// // CONFIGURATION // ////////////////////////////////////////////////////////// // The id of the rezzer, change this for as many rezzers as // you wish to have. First rezzer has an ID of 0, second 1, ... integer REZZER_ID = 0; ////////////////////////////////////////////////////////// // INTERNALS // ////////////////////////////////////////////////////////// default { link_message(integer sender_num, integer num, string str, key id) { if(id != "rez" || num != REZZER_ID) return; list dList = llCSV2List(str); vector tilePos = ZERO_VECTOR; list tileVec = llParseString2List(llList2String(dList,3), ["<", ">", ","], []); tilePos.x = llList2Float(tileVec, 0); tilePos.y = llList2Float(tileVec, 1); tilePos.z = llList2Float(tileVec, 2); llRezObject("[K] Holo Tile",tilePos,ZERO_VECTOR,ZERO_ROTATION,llList2Integer(dList,1)); if(llList2String(dList, 5) == "") return; llMessageLinked(LINK_THIS, llList2Integer(dList, 1), llList2String(dList, 5), "bcst"); } }
This part sends off the messages to the tiles as well as updating the tiles with the messages on local chat. You must configure the BOARD_HEIGHT
and BOARD_WIDTH
to be identical to the size of the board you generated with the [K] Holo Display Tiler
. This part should go into the rezzer as well.
/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2011 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// // CONFIGURATION // ////////////////////////////////////////////////////////// // Set this to the height of the board. integer BOARD_HEIGHT = 10; // Set this to the width of the board. integer BOARD_WIDTH = 10; ////////////////////////////////////////////////////////// // INTERNALS // ////////////////////////////////////////////////////////// key _owner = NULL_KEY; integer comChannel = 0; default { state_entry() { _owner = llGetOwner(); comChannel = ((integer)("0x"+llGetSubString((string)llGetOwner(),-8,-1)) & 0x3FFFFFFF) ^ 0xBFFFFFFF; llListen(0, "", llGetOwner(), ""); } listen(integer channel, string name, key id, string message) { integer itra = BOARD_HEIGHT*BOARD_WIDTH; string pld = ""; do { pld += (string)(itra+1) + "," + llGetSubString(message, itra, itra) + ","; } while(--itra>=0); llWhisper(comChannel, pld); } link_message(integer sender_num, integer num, string str, key id) { if(id != "bcst") return; llWhisper(comChannel, (string)num + "," + str); } on_rez(integer param) { _owner = llGetOwner(); } changed(integer change) { if(change & CHANGED_OWNER) { _owner = llGetOwner(); } } }