harayoki
2007年10月24日 07:47
integer debug = FALSE;
Trace(string s){
debug = TRUE;
if(debug) llOwnerSay(s);
}
integer initialized = FALSE;
key owner;
integer ch = 86492;
Init(){
if(initialized) return;
Trace("Init");
initialized = TRUE;
owner = llGetOwner();
string desc = llGetObjectDesc();
if(desc!=""){
ch = (integer)desc;
}
llListen(ch,"",owner,"");
Trace("channel : "+(string)ch);
InitSoundList();
}
list soundList;
InitSoundList(){
Trace("InitSoundList");
soundList = [];
integer len = llGetInventoryNumber(INVENTORY_SOUND);
integer i;
for(i=0;i<len;i++){
soundList += [llGetInventoryName(INVENTORY_SOUND,i)];
}
}
string LISTEN_COMMAND = "speak";
string BROADCAST_COMMAND = "harayoki.speakreq";
Speak(list l){
Trace("Speak "+llList2CSV(l));
string soundName = llList2String(l,1);
string soundKeyString = "";
if(llSubStringIndex(soundName,"#")==0){
//soundName is index number
integer i = (integer)llGetSubString(soundName,1,-1);
soundName = llList2String(soundList,i);
}
soundKeyString = (string)llGetInventoryKey(soundName);
if(soundKeyString==(string)NULL_KEY){
//soundName is key string
soundKeyString = soundName;
}
string vol = llList2String(l,2);
if(vol=="") vol= "1.0";
string s = BROADCAST_COMMAND+" "+soundKeyString+" "+vol;
Trace("Speak -> "+s);
llRegionSay(ch,s);
}
default{
state_entry(){
Init();
}
on_rez(integer num){
llResetScript();
}
touch_start(integer total_number){
if(llDetectedKey(0)==owner){
llResetScript();
}
}
listen(integer cha,string name,key id,string mes){
integer index = llSubStringIndex(mes,LISTEN_COMMAND+" ");
if(index==0){
list l = llParseString2List(mes,[" "],[]);
Speak(l);
}
}
changed(integer cha){
if(cha & CHANGED_INVENTORY){
InitSoundList();
}
}
}