Creative Commons License Machine/Badge Script
Jump to navigation
Jump to search
float gTouchTimeout = 30.0; // constant integer gDialogChannel = 85021; // constant integer gKioskChannel; integer gKioskListener; key gOriginalKey = NULL_KEY; list gParams; // user parameters, stride two: [ <param>, <value> ... ] string gLicenseImage; string gLicenseURL; string gLicenseName; string gLicenseDescription; string gFullTitle; string gShortTitle; integer gListener; integer gCatalog = FALSE; float gCatalogRate = 86400.0; // once a day float gCatalogTime; addParam(string param, string value) { gParams += [ param, value ]; } string getParam(string param) { integer i = llListFindList(gParams, [ param ]); if (i < 0) return ""; return llList2String(gParams, i + 1); } reciteParam(string param, string prompt) { string value = getParam(param); if (value == "") return; llSay(0, prompt + value); } aboutWork() { llSetObjectName(gShortTitle); reciteParam("title", "Title: "); reciteParam("description", "Description: "); reciteParam("tags", "Tags: "); reciteParam("format", "Format: "); reciteParam("creator", "Creator: "); reciteParam("holder", "Copyright Holder: "); reciteParam("year", "Copyright Year: "); reciteParam("source", "Source URL: "); llSetObjectName(gFullTitle); } emailCatalog() { string message; message += "original-key: " + (string)gOriginalKey + "\n"; message += "current-key: " + (string)llGetKey() + "\n"; integer n = llGetListLength(gParams); integer i; for (i = 0; i < n; i += 2) { string param = llList2String(gParams, i); string value = llList2String(gParams, i + 1); message += param + ": " + value + "\n"; } llEmail("ccsl-object@notabene-sl.com", "list", message); gCatalogTime = llGetGMTclock(); } addToCatalog() { llInstantMessage(llGetOwner(), "Listing in catalog (takes about 20 seconds)..."); gCatalog = TRUE; emailCatalog(); llInstantMessage(llGetOwner(), "...done."); } removeFromCatalog() { llInstantMessage(llGetOwner(), "Removing from catalog (takes about 20 seconds)..."); gCatalog = FALSE; string message; message += "original-key: " + (string)gOriginalKey + "\n"; message += "current-key: " + (string)llGetKey() + "\n"; llEmail("ccsl-object@notabene-sl.com", "unlist", message); llInstantMessage(llGetOwner(), "...done."); } setUp() { string commercialUse = getParam("commercial-use"); string modifications = getParam("modifications"); string license = "by"; if (commercialUse == "no") { license += "-nc"; } if (modifications == "no") { license += "-nd"; } if (modifications == "share") { license += "-sa"; } gLicenseURL = "http://creativecommons.org/licenses/" + license + "/2.5/"; gLicenseName = "Creative Commons Attribution"; if (commercialUse == "no") { gLicenseName += "-NonCommercial"; } if (modifications == "no") { gLicenseName += "-NoDerivs"; } if (modifications == "share") { gLicenseName += "-ShareAlike"; } gLicenseName += " 2.5 License"; gLicenseDescription = "This work is licensed under a " + gLicenseName; gLicenseImage = getParam("image-key"); gShortTitle = "CC Notice"; gFullTitle = "Creative Commons Notice"; string title = getParam("title"); if (title != "") { gFullTitle += " for \"" + title + "\""; } llSetObjectName(gFullTitle); llSetObjectDesc(gLicenseDescription); } showLicenseImage() { llSetPrimitiveParams([ PRIM_TEXTURE, 2, gLicenseImage, <1.0, 0.8, 1.0>, <0.0, 0.075, 0.0>, 0.0, PRIM_TEXTURE, 4, gLicenseImage, <1.0, 0.8, 1.0>, <0.0, 0.075, 0.0>, 0.0 ]); } showBadgeImage() { llSetPrimitiveParams([ PRIM_TEXTURE, 2, "badge", <1.0, 1.0, 1.0>, <0.0, 0.0, 0.0>, 0.0, PRIM_TEXTURE, 4, "badge", <1.0, 1.0, 1.0>, <0.0, 0.0, 0.0>, 0.0 ]); } default { on_rez(integer ch) { if (ch == 0) { if (gOriginalKey != NULL_KEY) { llOwnerSay("You took a copy of this cc license before it was ready, . Please generate a new one."); llDie(); } else { // user rez from inventory of prototype } } else { // rez from kiosk gOriginalKey = llGetKey(); gKioskChannel = ch; llListen(gKioskChannel, "", NULL_KEY, ""); llSay(gKioskChannel, "go"); } } listen(integer ch, string who, key id, string what) { integer i = llSubStringIndex(what, ":"); if (i > 0) { string param = llGetSubString(what, 0, i - 1); string value = llGetSubString(what, i + 1, -1); addParam(param, value); } else { if (llGetSubString(what, 0, 3) == "done") { vector p = (vector)llGetSubString(what, 5, -1); vector s = <0.1, 0.512, 0.180>; llSetPrimitiveParams([ PRIM_SIZE, s, PRIM_POSITION, p, PRIM_TEXTURE, 2, "badge", <1, 1, 1>, <0, 0, 0>, 0.0, PRIM_TEXTURE, 4, "badge", <1, 1, 1>, <0, 0, 0>, 0.0 ]); setUp(); state ready; } } } touch_start(integer n) { } } state ready { state_entry() { llSay(0, "Take a copy of this badge, then attach it to the work."); if (gKioskChannel != 0) { gKioskListener = llListen(gKioskChannel, "", NULL_KEY, ""); } } on_rez(integer n) { if (gKioskChannel != 0) { llListenRemove(gKioskListener); gKioskChannel = 0; } } state_exit() { llSetTimerEvent(0.0); } touch_start(integer n) { showLicenseImage(); gListener = llListen(gDialogChannel, "", NULL_KEY, ""); integer i; for (i = 0; i < n; ++i) { key id = llDetectedKey(i); string message = gLicenseDescription + "\n\nDeed: go to deed page on web" + "\nAbout: speak details about the work"; list buttons = [ "Deed", "About" ]; if (id == llGetOwner()) { if (!gCatalog) { message += "\nList: add object to public catalog at http://www.notabene-sl.com/cc"; buttons += [ "List" ]; } else { message += "\nUnlist: remove item from public catalog at http://www.notabene-sl.com/cc"; buttons += [ "Unlist" ]; } } llDialog(id, message, buttons, gDialogChannel); } llSetTimerEvent(gTouchTimeout); } listen(integer ch, string who, key id, string what) { if (what == "Deed") { llLoadURL(id, gLicenseName, gLicenseURL); } else if (what == "About") { aboutWork(); } else if (what == "die") { llDie(); } else if (id == llGetOwner()) { if (what == "List") { addToCatalog(); } else if (what == "Unlist") { removeFromCatalog(); } } } timer() { showBadgeImage(); llListenRemove(gListener); if (gCatalog) { if ((llGetGMTclock() - gCatalogTime) >= gCatalogRate) { emailCatalog(); } llSetTimerEvent(gCatalogRate); } else { llSetTimerEvent(0.0); } } }