first commit
This commit is contained in:
parent
e7d01132b3
commit
34f30ac80a
48 changed files with 13160 additions and 534 deletions
188
AVsitter2/Plugins/AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl
Normal file
188
AVsitter2/Plugins/AVcontrol/Xcite!-Sensations/[AV]Xcite!.lsl
Normal file
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* Copyright (c) the AVsitter Contributors (http://avsitter.github.io)
|
||||
* AVsitter™ is a trademark. For trademark use policy see:
|
||||
* https://avsitter.github.io/TRADEMARK.mediawiki
|
||||
*
|
||||
* Please consider supporting continued development of AVsitter and
|
||||
* receive automatic updates and other benefits! All details and user
|
||||
* instructions can be found at http://avsitter.github.io
|
||||
*/
|
||||
|
||||
string product = "AVsitter™ Xcite!";
|
||||
string version = "1.02";
|
||||
string notecard_name = "[AV]Xcite_settings";
|
||||
key notecard_key;
|
||||
key notecard_query;
|
||||
integer notecard_line;
|
||||
integer verbose = 0;
|
||||
list POSE_AND_SITTER;
|
||||
list XCITE_COMMANDS;
|
||||
list XCITE_TILT;
|
||||
integer TIMER_DEFAULT = 30;
|
||||
string CURRENT_POSE;
|
||||
list TIMERS;
|
||||
list SITTERS;
|
||||
integer DEBUG;
|
||||
Out(integer level, string out)
|
||||
{
|
||||
if (verbose >= level)
|
||||
{
|
||||
llOwnerSay(llGetScriptName() + "[" + version + "]:" + out);
|
||||
}
|
||||
}
|
||||
key key_request;
|
||||
string parse_text(string say)
|
||||
{
|
||||
integer i;
|
||||
for (i = 0; i < llGetListLength(SITTERS); i++)
|
||||
{
|
||||
string sitter_name = llList2String(llParseString2List(llKey2Name(llList2String(SITTERS, i)), [" "], []), 0);
|
||||
if (sitter_name == "")
|
||||
{
|
||||
sitter_name = "(nobody)";
|
||||
}
|
||||
say = strReplace(say, "/" + (string)i, sitter_name);
|
||||
}
|
||||
return say;
|
||||
}
|
||||
string strReplace(string str, string search, string replace)
|
||||
{
|
||||
return llDumpList2String(llParseStringKeepNulls(str, [search], []), replace);
|
||||
}
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
notecard_key = llGetInventoryKey(notecard_name);
|
||||
Out(0, "Loading...");
|
||||
notecard_query = llGetNotecardLine(notecard_name, 0);
|
||||
}
|
||||
changed(integer change)
|
||||
{
|
||||
if (change & CHANGED_INVENTORY)
|
||||
{
|
||||
if (llGetInventoryKey(notecard_name) != notecard_key)
|
||||
{
|
||||
llResetScript();
|
||||
}
|
||||
}
|
||||
if (change & CHANGED_LINK)
|
||||
{
|
||||
if (llGetAgentSize(llGetLinkKey(llGetNumberOfPrims())) == ZERO_VECTOR)
|
||||
{
|
||||
TIMERS = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
link_message(integer sender, integer num, string msg, key id)
|
||||
{
|
||||
if (sender == llGetLinkNumber())
|
||||
{
|
||||
if (num == 90045)
|
||||
{
|
||||
string name = llKey2Name(id);
|
||||
if (name != "")
|
||||
{
|
||||
integer i = llGetListLength(TIMERS);
|
||||
while (i > 0)
|
||||
{
|
||||
i--;
|
||||
if (!llSubStringIndex(llList2String(TIMERS, i), name + "|"))
|
||||
{
|
||||
TIMERS = llDeleteSubList(TIMERS, i, i);
|
||||
}
|
||||
}
|
||||
llSetTimerEvent(TIMER_DEFAULT);
|
||||
list data = llParseStringKeepNulls(msg, ["|"], []);
|
||||
integer script_channel = (integer)llList2String(data, 0);
|
||||
CURRENT_POSE = llList2String(data, 1);
|
||||
SITTERS = llParseStringKeepNulls(llList2String(data, 4), ["@"], []);
|
||||
integer index = llListFindList(POSE_AND_SITTER, [CURRENT_POSE + "|" + (string)script_channel]);
|
||||
if (!~index)
|
||||
{
|
||||
index = llListFindList(POSE_AND_SITTER, [CURRENT_POSE + "|*"]);
|
||||
if (!~index)
|
||||
{
|
||||
index = llListFindList(POSE_AND_SITTER, ["*|*"]);
|
||||
if (!~index)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (llList2Integer(XCITE_TILT, index) != 0)
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
Out(0, "Setting " + name + "'s tilt to " + (string)llList2Integer(XCITE_TILT, index));
|
||||
}
|
||||
llMessageLinked(LINK_SET, 20020, name + "|" + (string)llList2Integer(XCITE_TILT, index), "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
Out(0, "Restoring " + name + "'s tilt.");
|
||||
}
|
||||
llMessageLinked(LINK_SET, 20014, name, "");
|
||||
}
|
||||
data = llParseStringKeepNulls(llList2String(XCITE_COMMANDS, index), ["|"], []);
|
||||
TIMERS += [name + "|" + llList2String(data, 0) + "|" + llList2String(data, 1) + "||" + llList2String(data, 3)];
|
||||
string commands = parse_text(llList2String(XCITE_COMMANDS, index));
|
||||
llMessageLinked(LINK_SET, 20001, name + "|" + commands, NULL_KEY);
|
||||
if (DEBUG)
|
||||
{
|
||||
Out(0, "Sending xcite commands: " + name + "|" + commands);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
timer()
|
||||
{
|
||||
integer i;
|
||||
for (; i < llGetListLength(TIMERS); i++)
|
||||
{
|
||||
llMessageLinked(LINK_SET, 20001, llList2String(TIMERS, i), NULL_KEY);
|
||||
if (DEBUG)
|
||||
{
|
||||
Out(0, "Sending xcite commands: " + llList2String(TIMERS, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
dataserver(key query_id, string data)
|
||||
{
|
||||
if (query_id == notecard_query)
|
||||
{
|
||||
if (data == EOF || llStringTrim(llToLower(data), STRING_TRIM) == "end")
|
||||
{
|
||||
Out(0, (string)llGetListLength(POSE_AND_SITTER) + " items Ready, Mem=" + (string)llGetFreeMemory());
|
||||
}
|
||||
else
|
||||
{
|
||||
data = llStringTrim(data, STRING_TRIM);
|
||||
string command = llGetSubString(data, 0, llSubStringIndex(data, " ") - 1);
|
||||
list parts = llParseStringKeepNulls(llGetSubString(data, llSubStringIndex(data, " ") + 1, -1), [" | ", " |", "| ", "|"], []);
|
||||
if (command == "TIMER")
|
||||
{
|
||||
TIMER_DEFAULT = (integer)llList2String(parts, 0);
|
||||
}
|
||||
else if (command == "DEBUG")
|
||||
{
|
||||
DEBUG = (integer)llList2String(parts, 0);
|
||||
}
|
||||
else if (command == "XCITE")
|
||||
{
|
||||
POSE_AND_SITTER += [llStringTrim(llList2String(parts, 0), STRING_TRIM) + "|" + llList2String(parts, 1)];
|
||||
XCITE_COMMANDS += [llList2String(parts, 2) + "|" + llList2String(parts, 3) + "|" + llList2String(parts, 4) + "|" + llList2String(parts, 5)];
|
||||
XCITE_TILT += (integer)llList2String(parts, 6);
|
||||
}
|
||||
notecard_query = llGetNotecardLine(notecard_name, ++notecard_line);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
#############################################################
|
||||
Example Xcite! notecard for use with AVsitter™ Xcite! plugin.
|
||||
#############################################################
|
||||
//
|
||||
// Your object MUST contain your Xcite! partner script (provided by Xcite!) and/or your Sensations partner script (provided by Sensations).
|
||||
//
|
||||
// Please refer to your Xcite! and/or Sensations partner information for details.
|
||||
//
|
||||
// This notecard must be called "[AV]Xcite_settings"
|
||||
//
|
||||
// Format of each line is as follows:
|
||||
//
|
||||
// XCITE pose_name|sitter_number|arousal|arousal_max|text|kink|tilt
|
||||
//
|
||||
// For pose_name you can use * to apply to all poses, otherwise use the menu name of one pose.
|
||||
//
|
||||
// For sitter_number you can use * to apply to all sitters otherwise it should be 0,1, etc
|
||||
//
|
||||
// arousal and arousal_max are described in your Xcite! and Sensations partner information.
|
||||
//
|
||||
// For text you may include any text messages that you want to be said out when this arousal occurs.
|
||||
// If you want the message to take the form of an emote simply start the text message with '/me'.
|
||||
// You may also use any of the following special codes for appropriate pronouns in the text:
|
||||
//
|
||||
// %o - Replaced by the owner's first name
|
||||
// %f - Replaced by the owner's full name
|
||||
// %p - Replaced by the possessive pronoun according to sex (his, her)
|
||||
// %r - Replaced by the objective pronoun (him, her)
|
||||
// %s - Replaced by the subjective pronoun (he, she)
|
||||
// %w - Replaced by the possessive form appropriate to the target rather than the owner
|
||||
//
|
||||
// Refer to your Xcite! partner information for full details on text.
|
||||
//
|
||||
// You can also refer to the sitters by first name with /0 /1 etc.
|
||||
//
|
||||
// Adding text is optional and isn't required for the arousal to occur.
|
||||
//
|
||||
// Note each notecard line can only be 255 characters maximum.
|
||||
//
|
||||
// You may also include a custom timer as follows:
|
||||
// TIMER 30
|
||||
//
|
||||
// Arousal will be re-applied at this interval (default is 30 seconds)
|
||||
//
|
||||
// If you wish to debug Xcite commands sent, include:
|
||||
// DEBUG 1
|
||||
//
|
||||
// Switching off Xcite! or Sensations features should be done via your Xcite or Sensations product's menu.
|
||||
//
|
||||
#############################################################
|
||||
Example data follows....
|
||||
#############################################################
|
||||
|
||||
DEBUG 0
|
||||
TIMER 30
|
||||
|
||||
// Typical settings for poses
|
||||
XCITE Couples1|0|15|95|/0 takes /1 by the hand...|kink|0
|
||||
XCITE Couples1|1|5|95|example text for male...|kink|50
|
||||
XCITE Couples_Climax|*|10|100||kink|50
|
||||
|
||||
// Pose with slowly diminishing arousal
|
||||
XCITE Waiting|*|-15|95
|
||||
|
||||
// Pose that sets arousal to 0
|
||||
XCITE Rest|*|0|0
|
||||
|
||||
// Default arousal for all poses
|
||||
XCITE *|*|5|90
|
||||
|
||||
// Default arousal for sitter1's poses
|
||||
XCITE *|1|5|90
|
Loading…
Add table
Add a link
Reference in a new issue