From 0e87ee7a5e36799b0693cca3283e9464340b14b9 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Tue, 27 May 2014 05:33:43 +1000 Subject: Last part of switching the sim over to the new specs. --- .../onefang%27s%20test%20bed/~poser 2.lsl | 200 +++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 media/Test%20sim/onefang%27s%20test%20bed/~poser 2.lsl (limited to 'media/Test%20sim/onefang%27s%20test%20bed/~poser 2.lsl') diff --git a/media/Test%20sim/onefang%27s%20test%20bed/~poser 2.lsl b/media/Test%20sim/onefang%27s%20test%20bed/~poser 2.lsl new file mode 100644 index 0000000..fc976c4 --- /dev/null +++ b/media/Test%20sim/onefang%27s%20test%20bed/~poser 2.lsl @@ -0,0 +1,200 @@ +// MPLV2 2.3 by Learjeff Innis, based on +// MLP MULTI-LOVE-POSE V1.2 - Copyright (c) 2006, by Miffy Fluffy (BSD License) +// OpenSim port by Jez Ember +// Meta 7 fixes by onefang Rejected + +integer ch; +string animation = "stand"; +key avatar; + +integer ExprEnabled = TRUE; +string Expression; +float ExprTimer; + +integer BallNum; + +list Expressions = [ + "" + , "express_open_mouth" // 1 + , "express_surprise_emote" // 2 + , "express_tongue_out" // 3 + , "express_smile" // 4 + , "express_toothsmile" // 5 + , "express_wink_emote" // 6 + , "express_cry_emote" // 7 + , "express_kiss" // 8 + , "express_laugh_emote" // 9 + , "express_disdain" // 10 + , "express_repulsed_emote" // 11 + , "express_anger_emote" // 12 + , "express_bored_emote" // 13 + , "express_sad_emote" // 14 + , "express_embarrassed_emote" // 15 + , "express_frown" // 16 + , "express_shrug_emote" // 17 + , "express_afraid_emote" // 18 + , "express_worry_emote" // 19 + , "SLEEP" // 20 +]; + + +stopAnim() { + key id = llGetPermissionsKey(); + list anims = llGetAnimationList(id); + integer ix; + for (ix = 0; ix < llGetListLength(anims); ++ix) { + string anim = llList2String(anims, ix); + if (anim != "") { + llStopAnimation(anim); + } + } + llSetTimerEvent(0.0); +} + +startAnim(string anim) { + if (Expression != "") { + if (Expression == "SLEEP") { + llStartAnimation("express_disdain"); + llStartAnimation("express_smile"); + } else { + llStartAnimation(Expression); + } + if (ExprEnabled) { + llSetTimerEvent(ExprTimer); + } + } else { + stopAnim(); + } + if (anim != "") { + llStartAnimation(anim); + } +} + +// Animation names with a "*" suffix get open mouth +// Those with a suffix of "::" followed by a number +// get the expression associated with that number. +// This can optionally be followed by another "::" delim, +// with a timer value following. +// Return the anim name without the suffix. +string getExpression(string anim) { + if (llGetSubString(anim,-1,-1) == "*") { + Expression = llList2String(Expressions, 1); + ExprTimer = 0.5; + return llGetSubString(anim, 0, -2); + } + integer ix = llSubStringIndex(anim, "::"); + if (ix == -1) { + Expression = ""; + ExprTimer = 0.5; + return anim; + } + + list parms = llParseString2List(anim, ["::"], []); + anim = llList2String(parms, 0); + integer exprIx = (integer) llList2String(parms, 1); + Expression = llList2String(Expressions, exprIx); + ExprTimer = (float) llList2String(parms,2); + + if (ExprTimer <= 0.0) { + ExprTimer = 0.5; + } + + return anim; +} + +getChan() { + BallNum = (integer) llGetSubString(llGetScriptName(),-1,-1); //offset from script name suffix + ch = BallNum + + (integer)("0x"+llGetSubString((string)llGetKey(),-4,-1)); //fixed channel for prim +} + +default { + state_entry() { + state s_on; + } +} + +state s_on { + state_entry() { + getChan(); + llListen(ch+8,"",NULL_KEY,""); + } + + on_rez(integer arg) { + state default; + } + + link_message(integer from, integer num, string an, key id) { //an animation is set + if (an == "PRIMTOUCH") { + return; + } + + if (num != ch) return; + an = getExpression(an); // get & save expression, and return unadorned anim + + if (avatar == llGetPermissionsKey() + && avatar != NULL_KEY + && animation != "") { + llStopAnimation(animation); + llMessageLinked(LINK_SET, -11002, (string)BallNum + "|" + an, avatar); + startAnim(an); + } + animation = an; + } + + timer() { // timer to keep mouth open + if (Expression == "SLEEP") { + llStartAnimation("express_disdain"); + llStartAnimation("express_smile"); + } else if (Expression != "") { + llStartAnimation(Expression); + } + } + + listen(integer channel, string name, key id, string str) { + if (str == "ALIVE" || str == "DIE") { + llMessageLinked(LINK_THIS,2,str,""); //send msg from ball to menu + if (str == "DIE") { + avatar = NULL_KEY; + llSetTimerEvent(0.0); + } + return; + } + + avatar = (key) str; //avatar (sit) or NULL_KEY (stand up) + if (avatar == NULL_KEY) { + if (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) { + stopAnim(); + llMessageLinked(LINK_SET, -11001, (string)BallNum, llGetPermissionsKey()); + } + // llReleaseControls(); + return; + } + + if (avatar != llGetPermissionsKey() + || ! (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION)) { + ExprEnabled = TRUE; + llRequestPermissions(avatar, PERMISSION_TRIGGER_ANIMATION); + } else { + stopAnim(); + llMessageLinked(LINK_SET, -11000, (string)BallNum + "|" + animation, avatar); + startAnim(animation); + } + } + + run_time_permissions(integer perm) { + if (avatar != llGetPermissionsKey()) { + llWhisper(DEBUG_CHANNEL, "avatar != perm key"); + return; + } + + if (perm & PERMISSION_TRIGGER_ANIMATION) { + stopAnim(); + llMessageLinked(LINK_SET, -11000, (string)BallNum + "|" + animation, avatar); + startAnim(animation); + } else { + llMessageLinked(LINK_SET, -11001, (string)BallNum, avatar); + llSetTimerEvent(0.0); + } + } +} -- cgit v1.1