375 lines
12 KiB
Text
375 lines
12 KiB
Text
#include "ZNICommon.lsl"
|
|
|
|
|
|
list g_lAdmins;
|
|
string g_sDefault;
|
|
list g_lModes;
|
|
list g_lNotifModes;
|
|
string g_sCurrentMode;
|
|
integer g_iLstn=-1;
|
|
integer g_iChn;
|
|
integer g_iDEV=FALSE;
|
|
list g_lNew;
|
|
list g_lOld;
|
|
integer updater_channel = 15418070;
|
|
string g_sProduct;
|
|
key g_kUpdater;
|
|
integer g_iScanType = AGENT_LIST_REGION;
|
|
|
|
integer g_iChangeNotification = 0;
|
|
list g_lExempt;
|
|
|
|
integer ZCS_MESSAGE = -291451;
|
|
SendZCS(string m){
|
|
string obj = llGetObjectName();
|
|
llSetObjectName("zCS");
|
|
llRegionSay(ZCS_MESSAGE, "mod;;"+m+";;312eb154-0759-4c1e-8013-fef05c7a8e55");
|
|
llSetObjectName(obj);
|
|
}
|
|
|
|
integer g_iAPI = 0;
|
|
integer g_iAPIChan = 0x9; // cant be 0
|
|
|
|
|
|
SetMode(string mode)
|
|
{
|
|
// Set the mode from g_lModes, perform any notification action!
|
|
string oldMode = g_sCurrentMode;
|
|
g_sCurrentMode=mode;
|
|
llSetObjectDesc(mode);
|
|
if(g_iAPI)
|
|
{
|
|
llRegionSay(g_iAPIChan, llList2Json(JSON_OBJECT, ["op", "mode", "newmode", mode]));
|
|
}
|
|
|
|
if(!g_iDEV)
|
|
llSetText("Current mode: "+mode,<1,1,1>,1);
|
|
else
|
|
llSetText("Current mode: "+mode+"\nFree Memory: "+(string)llGetFreeMemory()+"\n \n* Debug Mode *", <1,0,0>,1);
|
|
integer index = llListFindList(g_lNotifModes,[mode]);
|
|
if(index==-1)
|
|
{
|
|
llRegionSayTo(llGetOwner(),0,"ERROR: Mode '"+mode+"' not found in the notification config");
|
|
g_sCurrentMode=g_sDefault;
|
|
llSetObjectDesc(g_sCurrentMode);
|
|
}else{
|
|
if(g_iDEV){
|
|
integer iMode = llList2Integer(g_lNotifModes,index+1);
|
|
string msg = llList2String(g_lNotifModes,index+2);
|
|
|
|
if(iMode&1)llRegionSayTo(llGetOwner(), 0,msg);
|
|
if(iMode&2)llDialog(llGetOwner(), msg, ["-dismiss-"], -999999);
|
|
}else {
|
|
NotifyAdmins("[MODE CHANGE] New Status: "+mode);
|
|
if(g_iChangeNotification == 1){
|
|
// OK //
|
|
string Msg = "";
|
|
integer iM = llList2Integer(g_lNotifModes,index+1);
|
|
if(iM)Msg=llList2String(g_lNotifModes,index+2);
|
|
|
|
SendZCS("/me # [Sim Status] ["+oldMode+"]->["+mode+"] "+Msg);
|
|
} else if(g_iChangeNotification ==2){
|
|
g_lOld=[1];
|
|
}
|
|
}
|
|
|
|
if(llGetInventoryType(mode)==INVENTORY_TEXTURE)
|
|
{
|
|
llSetTexture(mode, ALL_SIDES);
|
|
}
|
|
}
|
|
}
|
|
NotifyAdmins(string m)
|
|
{
|
|
integer i=0;
|
|
integer end = llGetListLength(g_lAdmins);
|
|
for(i=0;i<end;i++)
|
|
{
|
|
llRegionSayTo(llList2Key(g_lAdmins,i),0,m);
|
|
}
|
|
}
|
|
NotifyAdminsWithMask(integer mask,string m)
|
|
{
|
|
integer i=0;
|
|
integer end = llGetListLength(g_lAdmins);
|
|
for(i=0;i<end;i++)
|
|
{
|
|
if(mask&1)
|
|
llRegionSayTo(llList2Key(g_lAdmins,i),0,m);
|
|
if(mask&2)
|
|
llDialog(llList2Key(g_lAdmins,i), m, ["-dismiss-"],-999999);
|
|
}
|
|
}
|
|
|
|
ProcessNewAvatars()
|
|
{
|
|
integer modeIndex = llListFindList(g_lNotifModes,[g_sCurrentMode]);
|
|
if(modeIndex==-1)return;
|
|
else{
|
|
integer notifier = llList2Integer(g_lNotifModes,modeIndex+1);
|
|
// Notifier is the bitmask
|
|
string message = llList2String(g_lNotifModes, modeIndex+2);
|
|
|
|
integer i=0;
|
|
integer end = llGetListLength(g_lNew);
|
|
for(i=0;i<end;i++)
|
|
{
|
|
// We do not care about old avatars leaving the region
|
|
if(llListFindList(g_lOld, [llList2Key(g_lNew,i)])==-1)
|
|
{
|
|
// This is a new avatar, perform the notifier
|
|
if(g_iDEV){
|
|
NotifyAdminsWithMask(notifier,"Sim Status ("+g_sCurrentMode+")\n \n"+message);
|
|
}else{
|
|
if(llListFindList(g_lExempt, [llList2Key(g_lNew,i)]) == -1){
|
|
if(notifier&1)llRegionSayTo(llList2Key(g_lNew,i),0,"Sim Status ("+g_sCurrentMode+")\n \n"+message);
|
|
if(notifier&2)llDialog(llList2Key(g_lNew,i),"Sim Status ("+g_sCurrentMode+")\n \n"+message,["-dismiss-"],-999999);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
g_lOld=g_lNew;
|
|
}
|
|
}
|
|
// ---------------
|
|
// NEW CODE FOR UPDATE DELIVERY BEGINS HERE
|
|
// ---------------
|
|
|
|
Send(string Req){
|
|
g_lReqs += [Req];
|
|
Sends();
|
|
}
|
|
Sends(){
|
|
if(g_kCurrentReq == NULL_KEY){
|
|
DoNextRequest();
|
|
}
|
|
//g_lReqs += [llHTTPRequest(URL + llList2String(lTmp,0), [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded"], llDumpList2String(llList2List(lTmp,1,-1), "?"))];
|
|
}
|
|
key g_kCurrentReq = NULL_KEY;
|
|
DoNextRequest(){
|
|
if(llGetListLength(g_lReqs)==0)return;
|
|
g_kCurrentReq = llHTTPRequest(API_SERVER + llList2String(g_lReqs,0), [], "");
|
|
}
|
|
|
|
list g_lReqs;
|
|
integer initial_start=1;
|
|
|
|
|
|
checkUpdate()
|
|
{
|
|
llSay(0, "Checking for updates is not possible in the open sourced build. Purchase from Aria's Creations to get this functionality");
|
|
}
|
|
requestProductServer()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
default
|
|
{
|
|
state_entry()
|
|
{
|
|
VERSION = "1.22";
|
|
UpdateDSRequest(NULL, llGetNumberOfNotecardLines("Configuration"), "nread");
|
|
llSetTimerEvent(10);
|
|
llListen(updater_channel, "", "", "");
|
|
g_sCurrentMode = llGetObjectDesc();
|
|
}
|
|
on_rez(integer t)
|
|
{
|
|
llResetScript();
|
|
}
|
|
timer()
|
|
{
|
|
g_lNew = llGetAgentList(g_iScanType, []);
|
|
if(g_lOld==[])g_lOld=g_lNew;
|
|
ProcessNewAvatars();
|
|
}
|
|
dataserver(key k, string d)
|
|
{
|
|
if(HasDSRequest(k)!=-1)
|
|
{
|
|
string meta = GetDSMeta(k);
|
|
list lTmp = llParseString2List(meta,[":"],[]);
|
|
if(llList2String(lTmp,0)=="nread")
|
|
{
|
|
UpdateDSRequest(k, llGetNotecardLine("Configuration",0), "read:0:"+d);
|
|
}else if(llList2String(lTmp,0) == "read")
|
|
{
|
|
if(d==EOF){
|
|
DeleteDSReq(k);
|
|
llSetText("Config read: 100%", <1,1,1>,1);
|
|
llSleep(5);
|
|
SetMode(g_sCurrentMode);
|
|
} else {
|
|
integer line = llList2Integer(lTmp,1);
|
|
line++;
|
|
integer total = llList2Integer(lTmp,2);
|
|
|
|
integer percent = line*100/total;
|
|
|
|
list lTmp2 = llParseString2List(d,[" = ", "="],[]);
|
|
if(llGetSubString(d,0,0)=="#")jump over;
|
|
if(llList2String(lTmp2,0) == "ADMIN")
|
|
{
|
|
UpdateDSRequest(NULL, llRequestUserKey(llList2String(lTmp2,1)), "get_admin");
|
|
} else if(llList2String(lTmp2,0) == "DEFAULTMODE")
|
|
{
|
|
g_sDefault = llList2String(lTmp2,1);
|
|
} else if(llList2String(lTmp2,0) == "MODE")
|
|
{
|
|
g_lModes += [llList2String(lTmp2,1)];
|
|
} else if(llList2String(lTmp2,0)=="DEVELOPER")
|
|
{
|
|
g_iDEV=1;
|
|
} else if(llListFindList(g_lModes, [llList2String(lTmp2,0)])!=-1)
|
|
{
|
|
integer iFinal;
|
|
string sLowerMode = llList2String(lTmp2,1);
|
|
sLowerMode = llToLower(sLowerMode);
|
|
if(sLowerMode == "im")iFinal = 1;
|
|
if(sLowerMode=="dialog")iFinal=2;
|
|
if(sLowerMode == "both")iFinal=1|2;
|
|
g_lNotifModes += [llList2String(lTmp2,0), iFinal, llList2String(lTmp2,2)];
|
|
}else if(llList2String(lTmp2,0) == "CHANGE")
|
|
{
|
|
switch(llToLower(llList2String(lTmp2,1))){
|
|
case "zcs":{
|
|
g_iChangeNotification=1;
|
|
break;
|
|
}
|
|
case "normal":{
|
|
g_iChangeNotification=2;
|
|
break;
|
|
}
|
|
case "none":{
|
|
g_iChangeNotification=0;
|
|
break;
|
|
}
|
|
default:{
|
|
g_iChangeNotification=0;
|
|
break;
|
|
}
|
|
}
|
|
} else if(llList2String(lTmp2,0) == "EXEMPT")
|
|
{
|
|
UpdateDSRequest(NULL, llRequestUserKey(llList2String(lTmp2,1)), "get_exempt");
|
|
} else if(llList2String(lTmp2,0) == "PARCEL"){
|
|
g_iScanType = AGENT_LIST_PARCEL;
|
|
} else if(llList2String(lTmp2,0) == "API")
|
|
{
|
|
g_iAPI=TRUE;
|
|
g_iAPIChan = (integer)llList2String(lTmp2,1);
|
|
}
|
|
|
|
@over;
|
|
llSetText("Read Config: "+(string)percent+"%", <1,1,1>,1);
|
|
UpdateDSRequest(k, llGetNotecardLine("Configuration",line),"read:"+(string)line+":"+(string)total);
|
|
}
|
|
} else if(llList2String(lTmp,0) == "get_admin")
|
|
{
|
|
DeleteDSReq(k);
|
|
g_lAdmins += [(key)d];
|
|
}else if(llList2String(lTmp,0) == "get_exempt"){
|
|
DeleteDSReq(k);
|
|
g_lExempt += [(key)d];
|
|
}
|
|
}
|
|
}
|
|
|
|
touch_start(integer t)
|
|
{
|
|
if(llListFindList(g_lAdmins,[llDetectedKey(0)])==-1)return;
|
|
if(g_iLstn !=-1)
|
|
{
|
|
llListenRemove(g_iLstn);
|
|
}
|
|
g_iChn = llRound(llFrand(8574833));
|
|
g_iLstn = llListen(g_iChn, "", llDetectedKey(0), "");
|
|
llDialog(llDetectedKey(0), "What mode do you want to set?\n\nCurrent mode: "+g_sCurrentMode, g_lModes+["-exit-", "chk.update"], g_iChn);
|
|
}
|
|
|
|
changed(integer c)
|
|
{
|
|
if(c&CHANGED_REGION_START|CHANGED_INVENTORY|CHANGED_ALLOWED_DROP)
|
|
{
|
|
llResetScript();
|
|
}
|
|
}
|
|
|
|
http_response(key r, integer s,list m,string b)
|
|
{
|
|
if(g_kCurrentReq == r)
|
|
{
|
|
if(g_iDEV)
|
|
{
|
|
llSay(0, "Status Code: "+ (string)s+"\n" + b);
|
|
}
|
|
|
|
|
|
g_lReqs = llDeleteSubList(g_lReqs,0,0);
|
|
list tmp = llParseString2List(b,[";;",";"],[]);
|
|
if(llList2String(tmp,0)=="Modify_Product")
|
|
{
|
|
g_sProduct = llList2String(tmp,1);
|
|
string ver = llList2String(tmp,2);
|
|
if(ver==VERSION)
|
|
{
|
|
llWhisper(0, "No update available");
|
|
llRegionSayTo(g_kUpdater,updater_channel,"no_update");
|
|
}else{
|
|
llWhisper(0, "Requesting delivery of update");
|
|
llRegionSayTo(g_kUpdater,updater_channel,(string)g_kUpdater);
|
|
requestProductServer();
|
|
}
|
|
} else if(llList2String(tmp,0)=="Get_Server_URL"){
|
|
llHTTPRequest(llList2String(tmp,2), [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded"], llList2Json(JSON_OBJECT, ["product", g_sProduct, "owner", llGetOwner()]));
|
|
llSleep(5);
|
|
llInstantMessage(llGetOwner(), "Alert: Old status notifier script removed. Insert the new one upon delivery");
|
|
llSetText("DEACTIVATED\nSim Status Notifier\n \nInsert updated script", <1,0,0>,1);
|
|
llRemoveInventory(llGetScriptName());
|
|
}
|
|
|
|
g_kCurrentReq = NULL_KEY;
|
|
llSleep(1);
|
|
|
|
DoNextRequest();
|
|
}
|
|
}
|
|
|
|
listen(integer c,string n,key i,string m)
|
|
{
|
|
if(m=="-exit-")
|
|
{
|
|
llListenRemove(g_iLstn);
|
|
g_iLstn=-1;
|
|
return;
|
|
} else if(m == "chk.update")
|
|
{
|
|
if(initial_start)
|
|
{
|
|
llRegionSayTo(i, 0, "Startup still in progress. Please wait a moment before trying again");
|
|
return;
|
|
}
|
|
checkUpdate();
|
|
return;
|
|
}
|
|
llDialog(i, "What mode do you want to set?\n\nCurrent mode: "+m, g_lModes+["-exit-"], c);
|
|
SetMode(m);
|
|
}
|
|
|
|
link_message(integer s,integer n,string m,key i)
|
|
{
|
|
if(n == 0x004f)
|
|
{
|
|
API_SERVER = DecipherService(m,"api") + "/zni";
|
|
if(!initial_start)
|
|
{
|
|
return;
|
|
}
|
|
initial_start=0;
|
|
|
|
}
|
|
}
|
|
}
|