removed useless _ folders
This commit is contained in:
3
ChatBot/ChatBot.sol
Normal file
3
ChatBot/ChatBot.sol
Normal file
@@ -0,0 +1,3 @@
|
||||
<Solution name="ChatBot">
|
||||
<Project name="ChatBot" path="ChatBot\ChatBot.prj" active="true"/>
|
||||
</Solution>
|
||||
12
ChatBot/ChatBot/ChatBot.prj
Normal file
12
ChatBot/ChatBot/ChatBot.prj
Normal file
@@ -0,0 +1,12 @@
|
||||
<Project name="ChatBot" guid="8dfe678f-d318-4880-a9b1-e3d77c5ccf12">
|
||||
<Object name="Object" guid="b855d6f5-b63d-4621-9bd0-f22cd922816b" active="true">
|
||||
<Animation name="avatar_type.bvh" guid="79a3eff5-e536-4ce7-843c-8d3d5d042871">
|
||||
</Animation>
|
||||
<Script name="chatbot.lsl" guid="03f8a05b-4d16-4e6c-aa8a-67d2d9e54262">
|
||||
</Script>
|
||||
<Script name="NPCchatbot.lsl" guid="c50946e0-20ad-46f6-a35e-7cf39598293f">
|
||||
</Script>
|
||||
<Script name="Script.lsl" guid="dd35c5fc-26c2-4acb-ac18-dd931faddf4c">
|
||||
</Script>
|
||||
</Object>
|
||||
</Project>
|
||||
260
ChatBot/ChatBot/Object/NPCchatbot.lsl
Normal file
260
ChatBot/ChatBot/Object/NPCchatbot.lsl
Normal file
@@ -0,0 +1,260 @@
|
||||
// :CATEGORY:ChatBot
|
||||
// :NAME:ChatBot
|
||||
// :AUTHOR:Ferd Frederix
|
||||
// :KEYWORDS:
|
||||
// :CREATED:2014-08-11 17:28:45
|
||||
// :EDITED:2014-08-11
|
||||
// :ID:1038
|
||||
// :NUM:1621
|
||||
// :REV:1.0
|
||||
// :WORLD:Second Life, OpenSim
|
||||
// :DESCRIPTION:
|
||||
// This chatbot is for OpenSim Only. It only works on NPC's.
|
||||
|
||||
// Chatbot for PersonalityForge. Get a free account at http://www.personalityforge.com.
|
||||
// 5,000 chats are free.
|
||||
// :CODE:
|
||||
// fiorst, get a free account at http://www.personalityforge.com.
|
||||
// Get an API ID, and add it to the apiKey :
|
||||
|
||||
string apiKey = "jkeU6Hv3tbk318wn1"; // your supplied apiKey from your Chat Bot API subscription
|
||||
|
||||
// Add the domain *.secondlife.com or your OpenSim server IP to the list of authorized domains at http://www.personalityforge.com/botland/myapi.php
|
||||
// Add a checkmark to the "Enable Simple API" in tyour account.
|
||||
// Click on the Simple API tab and pick a chatbot ID from the list of chatbots under the heading "Selecting A Chat Bot ID"
|
||||
// for example, Countess Elvira is 99232. Put that in chatBot ID below.
|
||||
// Sex Bot Ciran is 100387. Type menu for choices
|
||||
// 754 is Liddora a sexy tart
|
||||
|
||||
string chatBotID = "754"; // the ID of the chat bot you're talking to
|
||||
integer greeting = TRUE; // if TRUE, say hello when anyone comes up.
|
||||
|
||||
|
||||
integer debug = TRUE; // Set this TRUE to see the gory details
|
||||
|
||||
////////// REMOVE THESE IN WORLD ////////////////
|
||||
///////// LSLEDIT DEBUG ONLY////////////////////
|
||||
//osNpcSetRot(key npc, rotation rot) {llSay(0,"Roatating to " + (vector) llRot2Euler(rot));}
|
||||
//osNpcStopAnimation(key npc, string animation) {llSay(0,"Stopped " + animation);}
|
||||
//osNpcPlayAnimation(key npc, string animation) {llSay(0,"Playing " + animation);}
|
||||
//osNpcSay(string speach) {llSay(0,speach);}
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
// various tuneable code bits
|
||||
float range = 15; // haw far awy an avatar is before we greet them/. No point in making this more than 20, that cannot hear us after that
|
||||
float wpm = 33; // 33 wpm = 2.75 cps @ 5 chars per word for a typical avatar to type with.
|
||||
// Larger numbers make your NPC answer quicker.
|
||||
float cps;
|
||||
integer emotionchannel = 199; // a secret channel that the chatbot sends emotion strings on.
|
||||
// You can listen for these with other scripts worn by your chatbot, and animate something to show how your chat bot is feeling.
|
||||
// this is also sent on Link Message Number 1 to all scripts in your chatbox prim
|
||||
|
||||
// global variables
|
||||
key npcKey ; // the NPC wearing this
|
||||
string npcName; // ditto
|
||||
integer starttime; // the time we started typing
|
||||
key requestid; // check for out HTTP answer
|
||||
integer AvatarPresent;// true is someone is here
|
||||
|
||||
// first of stride is the response from the bot, the second is the built-in animation
|
||||
list gAnimations = ["normal", "hello",
|
||||
"happy","express_smile",
|
||||
"angry","express_anger",
|
||||
"averse","express_embarrased",
|
||||
"sad","express_sad",
|
||||
"evil","express_repulsed",
|
||||
"fuming","express_worry",
|
||||
"hurt","express_cry",
|
||||
"surprised","express_surprise",
|
||||
"insulted","express_afraid",
|
||||
"confused","express_shrug",
|
||||
"amused","express_laugh",
|
||||
"asking","express_shrug"];
|
||||
|
||||
|
||||
list lAvatars; // a list of visitors
|
||||
|
||||
DEBUG(string msg)
|
||||
{
|
||||
if (debug) llSay(0,msg);
|
||||
}
|
||||
|
||||
string strReplace(string str, string search, string replace) {
|
||||
return llDumpList2String(llParseStringKeepNulls(str, [search], []), replace);
|
||||
}
|
||||
|
||||
default
|
||||
{
|
||||
|
||||
on_rez(integer param)
|
||||
{
|
||||
llResetScript();
|
||||
}
|
||||
|
||||
state_entry()
|
||||
{
|
||||
|
||||
npcKey = llGetOwner();
|
||||
npcName = llKey2Name(npcKey);
|
||||
DEBUG("npc is named " + npcName);
|
||||
|
||||
llListen(0,"","","");
|
||||
cps = wpm * 5 / 60; // change from words per minute to cps.
|
||||
DEBUG("CPS = " + (string) cps);
|
||||
if (greeting)
|
||||
llSensorRepeat("","",AGENT,range,PI,10);
|
||||
}
|
||||
|
||||
sensor(integer N) {
|
||||
integer i;
|
||||
for (i = 0 ; i < N; i ++) {
|
||||
key avatarKey = llDetectedKey(i);
|
||||
|
||||
if (llListFindList(lAvatars,[avatarKey]) == -1) {
|
||||
osNpcSay(npcKey,"Hi there, " + llDetectedName(i));
|
||||
lAvatars += avatarKey;
|
||||
if (llGetListLength(lAvatars) > 1000) {
|
||||
lAvatars = llDeleteSubList(lAvatars, 0,0);
|
||||
}
|
||||
} else {
|
||||
osNpcSay(npcKey,"Hello again, " + llDetectedName(i));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
no_sensor()
|
||||
{
|
||||
AvatarPresent = FALSE; }
|
||||
|
||||
listen(integer channel, string name, key id, string message)
|
||||
{
|
||||
// if the speaker is a prim, it will have a creator. Avatars do not have a creator
|
||||
list what = llGetObjectDetails(id,[OBJECT_CREATOR, OBJECT_POS]);
|
||||
key spkrKey = llList2Key(what,0);
|
||||
|
||||
if (spkrKey != NULL_KEY && !debug)
|
||||
{
|
||||
if (! debug)
|
||||
return; // we do not want to listen to objects
|
||||
}
|
||||
|
||||
list names = llParseString2List(name,[" "],[]);
|
||||
string firstname = llList2String(names,0);
|
||||
string lastname = llList2String(names,1);
|
||||
|
||||
requestid = llHTTPRequest("http://www.personalityforge.com/api/chat"
|
||||
+ "?apiKey=" + llEscapeURL(apiKey)
|
||||
+ "&message=" + llEscapeURL(message)
|
||||
+ "&chatBotID=" + llEscapeURL(chatBotID)
|
||||
+ "&externalID=" + llEscapeURL(name)
|
||||
+ "&firstName=" + llEscapeURL(firstname)
|
||||
+ "&lastName=" + llEscapeURL(lastname)
|
||||
,[HTTP_METHOD,"GET"],"");
|
||||
|
||||
llSleep(llFrand(3)+2); // think for two to five seconds before we type - for realism
|
||||
|
||||
starttime = llGetUnixTime();
|
||||
vector vspeaker = llList2Vector(what,1);
|
||||
rotation rdelta = llRotBetween( llGetPos(), vspeaker );
|
||||
|
||||
rotation newRot = rdelta * llGetRot();
|
||||
//-- rotate the offset to be relative to npc rotation - vector now points to speaker
|
||||
|
||||
osNpcSetRot(npcKey,newRot); // * = add for quats
|
||||
|
||||
osNpcPlayAnimation(npcKey,"type");
|
||||
llSetTimerEvent(10); // for safety in case web site is down.
|
||||
}
|
||||
|
||||
timer()
|
||||
{
|
||||
osNpcStopAnimation(npcKey,"type");
|
||||
llSetTimerEvent(0);
|
||||
}
|
||||
|
||||
http_response(key request_id, integer status, list metadata, string body)
|
||||
{
|
||||
DEBUG(body);
|
||||
// typical body:
|
||||
// Checking origin: '71.252.253.290' (regex: '71\.252\.253\.290')<br>Matched!<br>{"success":1,"errorMessage":"","message":{"chatBotName":"Liddora","chatBotID":"754","message":"Look up. It's Liddora. So how have you been lately, hello?","emotion":"asking"}}
|
||||
|
||||
if (request_id == requestid)
|
||||
{
|
||||
llSetTimerEvent(0); // shut off the error handler
|
||||
|
||||
// get the name of the bot from the reponse
|
||||
integer botname = llSubStringIndex(body,"chatBotName");
|
||||
string namestr = llGetSubString(body,botname,-1);
|
||||
integer botnameend = llSubStringIndex(namestr,"\",\"");
|
||||
|
||||
string botName = llGetSubString(namestr,14, botnameend-1);
|
||||
DEBUG("Bot Name:" + (string) botName);
|
||||
|
||||
integer begin = llSubStringIndex(body, "message\":\"");
|
||||
string msg = llGetSubString(body, begin +10, -1);
|
||||
integer msgend = llSubStringIndex(msg, "emotion");
|
||||
string reply = llGetSubString(msg, 0, msgend-4);
|
||||
DEBUG("reponse:" + reply);
|
||||
|
||||
// change the name in the reply to the bots real name.
|
||||
DEBUG("reply:" + reply);
|
||||
DEBUG("botName:" + botName);
|
||||
DEBUG("npcName:" + npcName);
|
||||
|
||||
|
||||
reply = strReplace(reply,botName,npcName);
|
||||
|
||||
DEBUG("after nameswap:" + reply);
|
||||
DEBUG("Len:" + llStringLength(reply));
|
||||
// calculate how long it would take for a person to type the answer in cps or wpm
|
||||
float delay = (float) llStringLength(reply) / cps;
|
||||
delay -= llGetUnixTime() - starttime ; // subtract how long it has taken to look up the bots answer since we started typing.
|
||||
if (delay > 0) {
|
||||
DEBUG("delay:" + (string) delay);
|
||||
llSleep(delay) ; // fake out the delay that happens when an avatar is typing an answer
|
||||
}
|
||||
|
||||
|
||||
// Emotion Logic - speak on a chat channel what emotional stste the bot is in, for other scripts to use.
|
||||
string emotion = llGetSubString(msg, msgend,-1);
|
||||
DEBUG((string) emotion);
|
||||
|
||||
msgend = llSubStringIndex(emotion, "\"}");
|
||||
emotion = llGetSubString(emotion, 10,msgend-1);
|
||||
DEBUG("Emotion:" + (string) emotion);
|
||||
|
||||
// sends a link animate to prim animator, attempts to play an animation
|
||||
// normal, happy, angry, averse, sad, evil, fuming,
|
||||
// hurt, surprised, insulted, confused, amused, asking.
|
||||
|
||||
llMessageLinked(LINK_SET,1,emotion,"");
|
||||
|
||||
// and also chats it on channel "emotionchannel" for external gadgetry to respond with.
|
||||
llSay(emotionchannel,emotion); // for controlling external gadgets based on emotes
|
||||
|
||||
osNpcStopAnimation(npcKey,"type");
|
||||
|
||||
// emotional state output
|
||||
|
||||
// you can override the built-in emotion by adding an animation
|
||||
// with any of the following names to the inventory
|
||||
// normal, happy, angry, averse, sad, evil, fuming,
|
||||
// hurt, surprised, insulted, confused, amused, asking.
|
||||
|
||||
if (llGetInventoryType(emotion) == INVENTORY_ANIMATION) {
|
||||
DEBUG("Playing animation from inventory named " + emotion);
|
||||
osNpcPlayAnimation(npcKey,emotion);
|
||||
} else {
|
||||
integer index = llListFindList(gAnimations,[emotion]);
|
||||
if (index != -1) {
|
||||
string toPlay = llList2String(gAnimations,index + 1);
|
||||
DEBUG("Playing built-in animation named " + toPlay);
|
||||
osNpcPlayAnimation(npcKey,toPlay);
|
||||
}
|
||||
}
|
||||
osNpcSay(npcKey,reply); // now speak it.
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
174
ChatBot/ChatBot/Object/Script.lsl
Normal file
174
ChatBot/ChatBot/Object/Script.lsl
Normal file
@@ -0,0 +1,174 @@
|
||||
// :CATEGORY:Chatbot
|
||||
// :NAME:ChatBot
|
||||
// :AUTHOR:Ferd Frederix
|
||||
// :KEYWORDS:
|
||||
// :CREATED:2014-08-11 17:29:33
|
||||
// :EDITED:2014-08-11
|
||||
// :ID:1038
|
||||
// :NUM:1622
|
||||
// :REV:1
|
||||
// :WORLD:Second Life
|
||||
// :DESCRIPTION:
|
||||
// NPC for Opensim Chatbot script
|
||||
// :CODE:
|
||||
//integer gToggle = 0;
|
||||
integer gAnimNumber;
|
||||
integer gTotalAnims;
|
||||
integer gTotalAnims2;
|
||||
integer gInList2;
|
||||
|
||||
string gAnimName = "type";
|
||||
|
||||
|
||||
list gAnimations = [ "aim_R_bazooka", "aim_R_handgun", "aim_R_rifle", "angry_fingerwag",
|
||||
"angry_tantrum", "away", "backflip", "blowkiss", "bow", "brush", "clap",
|
||||
"courtbow", "cross_arms", "crouch", "crouchwalk", "curtsy",
|
||||
"dance1", "dance2", "dance3", "dance4", "dance5", "dance6", "dance7", "dance8",
|
||||
"dead", "drink", "express_afraid", "express_anger", "express_bored",
|
||||
"express_cry", "express_embarrased", "express_laugh", "express_repulsed",
|
||||
"express_sad", "express_shrug", "express_surprise", "express_wink",
|
||||
"express_worry", "falldown", "female_walk", "fist_pump", "fly", "flyslow",
|
||||
"hello", "hold_R_bazooka", "hold_R_handgun", "hold_R_rifle",
|
||||
"hold_throw_R", "hover", "hover_down", "hover_up", "impatient",
|
||||
"jump", "jumpforjoy", "kick_roundhouse_R", "kissmybutt", "kneel_left",
|
||||
"kneel_right", "land", "musclebeach", "no_head", "no_unhappy",
|
||||
"nyanya", "peace", "point_me", "point_you", "prejump", "punch_L",
|
||||
"punch_onetwo", "punch_R", "RPS_countdown" ];
|
||||
|
||||
list gAnimations2 = [ "RPS_paper", "RPS_rock",
|
||||
"RPS_scissors", "run", "salute", "shout", "sit", "sit_ground", "sit_to_stand",
|
||||
"sleep", "slowwalk", "smoke_idle", "smoke_inhale", "smoke_throw_down",
|
||||
"snapshot", "soft_land", "stand", "standup", "stand_1", "stand_2",
|
||||
"stand_3", "stand_4", "stretch", "stride", "surf", "sword_strike_R",
|
||||
"talk", "throw_R", "tryon_shirt", "turnback_180", "turnleft", "turnright",
|
||||
"turn_180", "type", "uphillwalk", "walk", "whisper", "whistle", "wink_hollywood", "yell",
|
||||
"yes_happy", "yes_head", "yoga_float" ];
|
||||
|
||||
default {
|
||||
state_entry() {
|
||||
//llSay(0, "Init...");
|
||||
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
|
||||
gTotalAnims = llGetListLength(gAnimations);
|
||||
gTotalAnims2 = llGetListLength(gAnimations2);
|
||||
gAnimNumber = -1;
|
||||
gInList2 = FALSE;
|
||||
llListen(0, "", llGetOwner(), "");
|
||||
}
|
||||
|
||||
on_rez(integer param) {
|
||||
llGiveInventory(llGetOwner(), "Animation Names");
|
||||
llResetScript();
|
||||
}
|
||||
|
||||
listen(integer channel, string name, key id, string mesg) {
|
||||
string preamble = llGetSubString(mesg, 0, 3);
|
||||
if (preamble != "anim" && preamble != "stop")
|
||||
return;
|
||||
|
||||
integer perm = llGetPermissions();
|
||||
|
||||
if ( !(perm & PERMISSION_TRIGGER_ANIMATION)) {
|
||||
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
|
||||
return;
|
||||
}
|
||||
|
||||
list parsed = llParseString2List(mesg, [ " " ], []);
|
||||
//llSay(0, (string)parsed);
|
||||
|
||||
string anim = llList2String(parsed, 1);
|
||||
|
||||
if (preamble == "stop") {
|
||||
//llSay(0, "Stopping: " + llGetAnimation(llGetOwner()));
|
||||
//llStopAnimation(llGetAnimation(llGetOwner()));
|
||||
if (anim == "")
|
||||
anim = gAnimName;
|
||||
|
||||
if (anim == "all") {
|
||||
integer i;
|
||||
llSay(0, "Stoping");
|
||||
for (i=0; i<gTotalAnims; i++)
|
||||
llStopAnimation(llList2String(gAnimations, i));
|
||||
|
||||
for (i=0; i<gTotalAnims2; i++)
|
||||
llStopAnimation(llList2String(gAnimations2, i));
|
||||
|
||||
llSay(0, "Done.");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//llSay(0, "Stopping: " + anim);
|
||||
llStopAnimation(anim);
|
||||
return;
|
||||
}
|
||||
|
||||
gAnimName = anim;
|
||||
//llSay(0, "Animation: " + gAnimName);
|
||||
llStartAnimation(gAnimName);
|
||||
}
|
||||
|
||||
run_time_permissions(integer perm) {
|
||||
//llStopAnimation(gAnimName);
|
||||
//gToggle = 0;
|
||||
}
|
||||
|
||||
attach(key id) {
|
||||
integer perm = llGetPermissions();
|
||||
|
||||
if (id != NULL_KEY) {
|
||||
|
||||
if (! (perm & PERMISSION_TRIGGER_ANIMATION)) {
|
||||
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
if (perm & PERMISSION_TRIGGER_ANIMATION) {
|
||||
llStopAnimation(gAnimName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
touch_start(integer total_number) {
|
||||
if (llDetectedKey(0) != llGetOwner())
|
||||
return;
|
||||
|
||||
integer perm = llGetPermissions();
|
||||
|
||||
if (perm & PERMISSION_TRIGGER_ANIMATION) {
|
||||
if (gAnimNumber != -1) {
|
||||
if (gInList2)
|
||||
llStopAnimation( llList2String(gAnimations2, gAnimNumber) );
|
||||
else
|
||||
llStopAnimation( llList2String(gAnimations, gAnimNumber) );
|
||||
}
|
||||
|
||||
|
||||
gAnimNumber++;
|
||||
|
||||
if (gInList2) {
|
||||
if (gAnimNumber == gTotalAnims2) {
|
||||
gAnimNumber = 0;
|
||||
gInList2 = FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (gAnimNumber == gTotalAnims) {
|
||||
gAnimNumber = 0;
|
||||
gInList2 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (gInList2)
|
||||
gAnimName = llList2String(gAnimations2, gAnimNumber);
|
||||
else
|
||||
gAnimName = llList2String(gAnimations, gAnimNumber);
|
||||
|
||||
llStartAnimation( gAnimName );
|
||||
llSay(0, "Animation: " + gAnimName);
|
||||
}
|
||||
else {
|
||||
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
149
ChatBot/ChatBot/Object/avatar_type.bvh
Normal file
149
ChatBot/ChatBot/Object/avatar_type.bvh
Normal file
@@ -0,0 +1,149 @@
|
||||
HIERARCHY
|
||||
ROOT hip
|
||||
{
|
||||
OFFSET 0.00 0.00 0.00
|
||||
CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
|
||||
JOINT abdomen
|
||||
{
|
||||
OFFSET 0.000000 0.000000 0.000000
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT chest
|
||||
{
|
||||
OFFSET 0.000000 5.018152 -1.882228
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT neckDummy
|
||||
{
|
||||
OFFSET 0.000000 8.316447 0.784897
|
||||
CHANNELS 3 Xrotation Yrotation Zrotation
|
||||
JOINT neck
|
||||
{
|
||||
OFFSET 0.000000 2.280413 -0.392801
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT head
|
||||
{
|
||||
OFFSET 0.000000 3.496879 0.529469
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT figureHair
|
||||
{
|
||||
OFFSET 0.000000 4.699570 0.720622
|
||||
CHANNELS 3 Zrotation Yrotation Xrotation
|
||||
End Site
|
||||
{
|
||||
OFFSET 0.000000 -6.419331 0.000000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
JOINT lCollar
|
||||
{
|
||||
OFFSET 0.599237 8.316447 0.784897
|
||||
CHANNELS 3 Yrotation Zrotation Xrotation
|
||||
JOINT lShldr
|
||||
{
|
||||
OFFSET 6.421198 0.010146 -0.332128
|
||||
CHANNELS 3 Zrotation Yrotation Xrotation
|
||||
JOINT lForeArm
|
||||
{
|
||||
OFFSET 10.552783 0.025574 0.125508
|
||||
CHANNELS 3 Yrotation Zrotation Xrotation
|
||||
JOINT lHand
|
||||
{
|
||||
OFFSET 11.035963 0.319619 0.041520
|
||||
CHANNELS 3 Zrotation Yrotation Xrotation
|
||||
End Site
|
||||
{
|
||||
OFFSET 10.353753 0.000000 0.000000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
JOINT rCollar
|
||||
{
|
||||
OFFSET -0.599237 8.316447 0.784897
|
||||
CHANNELS 3 Yrotation Zrotation Xrotation
|
||||
JOINT rShldr
|
||||
{
|
||||
OFFSET -6.421198 0.010146 -0.332128
|
||||
CHANNELS 3 Zrotation Yrotation Xrotation
|
||||
JOINT rForeArm
|
||||
{
|
||||
OFFSET -10.552783 0.025574 0.125508
|
||||
CHANNELS 3 Yrotation Zrotation Xrotation
|
||||
JOINT rHand
|
||||
{
|
||||
OFFSET -11.035963 0.319619 0.041520
|
||||
CHANNELS 3 Zrotation Yrotation Xrotation
|
||||
End Site
|
||||
{
|
||||
OFFSET -10.353753 0.000000 0.000000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
JOINT lThigh
|
||||
{
|
||||
OFFSET 4.500466 -6.400484 -1.832696
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT lShin
|
||||
{
|
||||
OFFSET -1.359117 -18.918689 1.179887
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT lFoot
|
||||
{
|
||||
OFFSET -0.652380 -17.215186 -0.312137
|
||||
CHANNELS 3 Xrotation Yrotation Zrotation
|
||||
End Site
|
||||
{
|
||||
OFFSET 0.000000 0.000000 10.353752
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
JOINT rThigh
|
||||
{
|
||||
OFFSET -4.500466 -6.400484 -1.832696
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT rShin
|
||||
{
|
||||
OFFSET 1.359117 -18.918689 1.179887
|
||||
CHANNELS 3 Xrotation Zrotation Yrotation
|
||||
JOINT rFoot
|
||||
{
|
||||
OFFSET 0.652380 -17.215186 -0.312137
|
||||
CHANNELS 3 Xrotation Yrotation Zrotation
|
||||
End Site
|
||||
{
|
||||
OFFSET 0.000000 0.000000 10.353752
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
MOTION
|
||||
Frames: 20
|
||||
Frame Time: 0.066667
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -5.602665 0.692895 -0.999750 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -45.312199 -28.361601 -6.437040 -85.572998 -44.321999 4.115680 22.688700 6.434930 24.572500 -2.021920 5.690310 -0.063351 47.524502 17.444599 -9.449780 96.743202 40.100101 -12.457400 -12.207400 -9.114560 50.627300 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.530616 -4.334307 0.100752 15.830232 3.319340 0.622262 -8.660608 -1.559428 0.936809
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -5.802714 0.371659 -0.579152 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -47.180473 -28.228901 -5.594771 -90.299255 -39.289246 1.194210 26.265350 5.033503 24.901260 -2.021920 5.690310 -0.063351 46.979572 18.392992 -9.648436 98.211319 37.028625 -13.372793 -13.185279 -8.174255 50.774910 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.530616 -4.334307 0.100752 15.830232 3.319340 0.622262 -8.660608 -1.559428 0.936809
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.063016 -0.046329 -0.031874 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -49.642559 -28.057348 -4.480888 -92.784599 -35.134602 -0.389246 28.351900 4.867320 25.002300 -2.021920 5.690310 -0.063351 46.265060 19.591881 -9.910472 100.083427 32.987583 -14.550499 -15.019100 -6.791880 50.992001 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.530616 -4.334307 0.100752 15.830232 3.319340 0.622262 -8.660608 -1.559428 0.936809
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.356364 -0.517383 0.584884 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -51.394981 -27.923710 -3.701625 -86.723595 -36.127731 3.204253 24.722046 8.632764 24.359707 -2.021920 5.690310 -0.063351 45.484287 20.885418 -10.197384 101.633133 30.088182 -15.488061 -18.322517 -4.913835 51.285515 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.541284 -4.335290 0.100323 15.850134 3.319600 0.623621 -8.670751 -1.558202 0.936774
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.664823 -1.012702 1.233411 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -50.907700 -27.914900 -3.972350 -78.084198 -39.382198 8.483360 20.478300 12.755100 23.749599 -2.021920 5.690310 -0.063351 44.726017 22.169096 -10.475073 102.068001 30.802200 -15.623200 -20.191601 -4.050860 51.410198 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.541285 -4.335289 0.100323 15.840267 3.319063 0.622893 -8.660734 -1.558720 0.936864
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.970458 -1.503486 1.876000 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -47.342522 -28.104080 -5.682922 -74.201202 -41.084034 11.101078 21.353376 13.217446 24.008877 -2.021920 5.690310 -0.063351 44.078999 23.338406 -10.709437 100.966911 36.452309 -14.666931 -17.973396 -5.457377 51.154484 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.520178 -4.332916 0.101153 15.810387 3.318801 0.620304 -8.640448 -1.561168 0.936936
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.255333 -1.960933 2.474942 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -42.628670 -28.509411 -7.921168 -74.844345 -41.162811 11.071470 25.767128 10.923965 24.848372 -2.021920 5.690310 -0.063351 43.632008 24.288841 -10.866380 99.394066 43.764828 -13.423463 -13.826456 -7.648414 50.717327 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574976 -4.335261 0.098837 15.919619 3.321326 0.628477 -8.709791 -1.561858 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.501513 -2.356244 2.992527 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -39.387199 -29.135300 -9.449410 -77.892097 -40.484001 9.498860 30.311199 8.009070 25.697399 -2.021920 5.690310 -0.063351 43.473801 24.915899 -10.911800 98.785004 48.317001 -12.970300 -11.112200 -8.454150 50.400299 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574976 -4.335261 0.098837 15.919619 3.321326 0.628477 -8.709791 -1.561858 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.691063 -2.660617 3.391048 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -39.461269 -29.945696 -9.398738 -81.407845 -39.788086 7.429636 32.339588 6.260051 26.103733 -2.021920 5.690310 -0.063351 43.635044 25.165306 -10.834554 100.055038 47.161655 -13.985796 -12.151986 -6.480672 50.415527 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574976 -4.335261 0.098837 15.919619 3.321326 0.628477 -8.709791 -1.561858 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.806047 -2.845253 3.632795 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -41.582397 -30.742714 -8.375322 -84.194748 -39.315697 5.678448 32.255730 6.075661 26.088982 -2.021920 5.690308 -0.063351 43.913994 25.183712 -10.715312 102.038620 43.254036 -15.551699 -15.106911 -3.437715 50.617313 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.541285 -4.335289 0.100323 15.840267 3.319063 0.622893 -8.660734 -1.558720 0.936864
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.828529 -2.881352 3.680060 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -43.704201 -31.288000 -7.354100 -85.240898 -39.182499 5.002010 31.225401 7.507520 25.793200 -2.021920 5.690307 -0.063351 44.050800 25.167999 -10.657700 103.050003 41.025002 -16.350599 -17.098000 -1.810920 50.770500 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.541285 -4.335289 0.100323 15.840267 3.319063 0.622893 -8.660734 -1.558720 0.936864
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.747013 -2.750452 3.508672 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -44.347855 -31.393389 -7.040523 -83.870651 -39.474094 5.904261 30.110575 10.400587 25.342203 -2.021920 5.690308 -0.063351 43.876858 25.242115 -10.729075 101.973473 43.409073 -15.509502 -16.083826 -3.277420 50.707096 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.543339 -4.331701 0.100078 15.860003 3.320137 0.624349 -8.680767 -1.557684 0.936683
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.578204 -2.479383 3.153757 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -44.304813 -31.071466 -7.062090 -80.753395 -40.155880 7.878061 28.557922 13.773190 24.804836 -2.021920 5.690308 -0.063351 43.588619 25.238310 -10.851757 99.973595 47.355453 -13.933051 -13.373131 -6.280302 50.527756 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574975 -4.335263 0.098837 15.919619 3.321328 0.628477 -8.709791 -1.561859 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.344236 -2.103681 2.661846 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -44.934101 -30.385000 -6.776810 -76.894798 -41.163200 10.163500 25.910299 16.437000 24.235701 -2.021920 5.690308 -0.063351 43.473801 24.915899 -10.911800 98.785004 48.317001 -12.970300 -11.112200 -8.454150 50.400299 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574975 -4.335263 0.098837 15.919619 3.321328 0.628477 -8.709791 -1.561859 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -7.065158 -1.655543 2.075093 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -47.093323 -29.439314 -5.776487 -73.565590 -42.205116 11.896695 22.090277 17.368969 23.721474 -2.021920 5.690308 -0.063351 43.750614 24.101944 -10.822457 99.573265 43.338470 -13.539507 -10.888786 -8.102924 50.446678 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574975 -4.335263 0.098837 15.919619 3.321328 0.628477 -8.709791 -1.561859 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.759047 -1.163995 1.431502 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -49.634373 -28.509924 -4.588082 -73.096718 -42.085564 11.797891 19.339241 16.207205 23.477100 -2.021920 5.690309 -0.063351 44.346069 22.908701 -10.610848 101.227570 35.832142 -14.835725 -12.056473 -6.208143 50.605305 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.509626 -4.331718 0.100831 15.810110 3.320156 0.620464 -8.660229 -1.561548 0.936643
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.442271 -0.655322 0.765489 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -50.907700 -27.914900 -3.972350 -78.084198 -39.382198 8.483360 20.478300 12.755100 23.749599 -2.021921 5.690310 -0.063351 45.130058 21.501146 -10.326545 102.068001 30.802200 -15.623200 -13.410300 -4.420720 50.768700 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.509626 -4.331718 0.100831 15.810110 3.320156 0.620464 -8.660229 -1.561548 0.936643
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -6.130195 -0.154198 0.109360 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -49.807709 -27.862867 -4.440722 -88.370590 -34.497669 2.186697 26.158653 7.650285 24.557117 -2.021921 5.690310 -0.063351 45.991310 20.022953 -10.011851 100.927116 31.752354 -15.032178 -14.027573 -3.968220 50.855228 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.574975 -4.335263 0.098837 15.919619 3.321328 0.628477 -8.709791 -1.561859 0.916431
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -5.839536 0.312535 -0.501740 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -47.489388 -28.102360 -5.468174 -92.784599 -35.134602 -0.389246 28.351900 4.867320 25.002300 -2.021920 5.690310 -0.063351 46.831421 18.607119 -9.703973 98.757568 35.946148 -13.708339 -14.155356 -4.321314 50.890865 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.530733 -4.334104 0.100738 15.830261 3.319198 0.622245 -8.660609 -1.559427 0.936809
|
||||
0.000000 42.014908 0.240040 0.000000 0.000000 0.000000 7.150620 2.007150 0.929046 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 17.981501 -1.360380 -0.079195 -5.602665 0.692895 -0.999750 0.000000 0.000000 0.000000 2.021920 -5.690310 -0.063351 -45.312199 -28.361601 -6.437040 -85.572998 -44.321999 4.115680 22.688700 6.434930 24.572500 -2.021920 5.690310 -0.063351 47.524502 17.444599 -9.449780 96.743202 40.100101 -12.457400 -14.160000 -4.781410 50.909901 -7.548709 4.016634 0.126881 15.890360 -3.336124 -0.813312 -8.628910 1.044381 -0.888102 -7.530616 -4.334307 0.100752 15.830232 3.319340 0.622262 -8.660608 -1.559428 0.936809
|
||||
91
ChatBot/ChatBot/Object/chatbot.lsl
Normal file
91
ChatBot/ChatBot/Object/chatbot.lsl
Normal file
@@ -0,0 +1,91 @@
|
||||
// :CATEGORY:ChatBot
|
||||
// :NAME:ChatBot
|
||||
// :AUTHOR:Ferd Frederix
|
||||
// :KEYWORDS:
|
||||
// :CREATED:2014-08-11 17:28:45
|
||||
// :EDITED:2014-08-11
|
||||
// :ID:1038
|
||||
// :NUM:1620
|
||||
// :REV:1.0
|
||||
// :WORLD:Second Life, OpenSim
|
||||
// :DESCRIPTION:
|
||||
// Chatbot for PersonalityForge. Get a free account at http://www.personalityforge.com.
|
||||
// 5,000 chats are free.
|
||||
// Get an API ID, and add it to the apiKey below
|
||||
// Add the domain *.secondlife.com or your OpenSim server IP to the list of authorized domains at http://www.personalityforge.com/botland/myapi.php
|
||||
// add a checkmark to the Enable Simple API
|
||||
// click on the Simple API tab and pick a chatbot ID from the list of chatbots under the heading "Selecting A Chat Bot ID"
|
||||
// for example, Countess Elvira is 99232. Put that in chatBot ID below.
|
||||
// 754 is for a ssex flirt.
|
||||
|
||||
// :CODE:
|
||||
key requestid;
|
||||
string apiKey = "jkeU6Hv3tbk318wn1"; // your supplied apiKey from your Chat Bot API subscription
|
||||
string chatBotID = "754"; // the ID of the chat bot you're talking to
|
||||
integer debug = FALSE;
|
||||
|
||||
DEBUG(string msg)
|
||||
{
|
||||
if (debug) llSay(0,msg);
|
||||
}
|
||||
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
llListen(0,"","","");
|
||||
}
|
||||
|
||||
on_rez(integer param)
|
||||
{
|
||||
llResetScript();
|
||||
}
|
||||
|
||||
listen(integer channel, string name, key id, string message)
|
||||
{
|
||||
|
||||
// if the speaker is a prim, it will have a creator
|
||||
list what = llGetObjectDetails(id,[OBJECT_CREATOR]);
|
||||
key spkrKey = llList2Key(what,0);
|
||||
|
||||
if (spkrKey != NULL_KEY)
|
||||
{
|
||||
return; // we do not want to listen to objects
|
||||
}
|
||||
|
||||
list names = llParseString2List(name,[" "],[]);
|
||||
string firstname = llList2String(names,0);
|
||||
string lastname = llList2String(names,1);
|
||||
|
||||
requestid = llHTTPRequest("http://www.personalityforge.com/api/chat"
|
||||
+ "?apiKey=" + llEscapeURL(apiKey)
|
||||
+ "&message=" + llEscapeURL(message)
|
||||
+ "&chatBotID=" + llEscapeURL(chatBotID)
|
||||
+ "&externalID=" + llEscapeURL(name)
|
||||
+ "&firstName=" + llEscapeURL(firstname)
|
||||
+ "&lastName=" + llEscapeURL(lastname)
|
||||
,[HTTP_METHOD,"GET"],"");
|
||||
}
|
||||
http_response(key request_id, integer status, list metadata, string body)
|
||||
{
|
||||
|
||||
DEBUG(body);
|
||||
// typical body:
|
||||
// Checking origin: '71.252.253.190' (regex: '71\.252\.253\.190')<br>Matched!<br>{"success":1,"errorMessage":"","message":{"chatBotName":"Liddora","chatBotID":"754","message":"Look up. It's Liddora. So how have you been lately, hello?","emotion":"asking"}}
|
||||
|
||||
if (request_id == requestid)
|
||||
{
|
||||
integer begin = llSubStringIndex(body, "message\":\"");
|
||||
DEBUG((string) begin);
|
||||
|
||||
string msg = llGetSubString(body, begin +10, -1);
|
||||
DEBUG((string) msg);
|
||||
|
||||
integer end = llSubStringIndex(msg, "emotion");
|
||||
DEBUG((string) end);
|
||||
|
||||
string reply = llGetSubString(msg, 0, end-4);
|
||||
llSay(0,reply);
|
||||
}
|
||||
}
|
||||
}
|
||||
22
ChatBot/ChatBot/Object/new.lsl
Normal file
22
ChatBot/ChatBot/Object/new.lsl
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
llListen(9898,"","","scream");
|
||||
llSetAlpha(0.0, ALL_SIDES);
|
||||
}
|
||||
|
||||
listen(integer channel, string name, key id, string message)
|
||||
{
|
||||
llSetAlpha(1.0, ALL_SIDES);
|
||||
llSleep(3);
|
||||
llSetAlpha(0.0, ALL_SIDES);
|
||||
}
|
||||
|
||||
on_rez(integer wtf)
|
||||
{
|
||||
llResetScript();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user