Difference between revisions of "Super Spengbab"
(New page: An upgraded spengbab cube designed by Afroduck. Commands are given on a negative channel that isn't as often monitored by HUDs. You can use the Afro Relay script to communicate with it...) |
|||
| Line 342: | Line 342: | ||
} | } | ||
</lsl> | </lsl> | ||
| + | |||
| + | |||
| + | [[Category:Second Life]] | ||
Latest revision as of 04:26, 8 July 2010
An upgraded spengbab cube designed by Afroduck. Commands are given on a negative channel that isn't as often monitored by HUDs. You can use the Afro Relay script to communicate with it. All these additions had to be worked out from scratch cause nobody will give away interesting information or they demand spacebux for it. Well, now everyone can see them for free. Haha!
Available commands:
- spengbab target <avatar name> - targets an avatar
- spengbab pwn <avatar name> - this uses a single command to make the spengbab(s) scream, enable z-axis and sends them after the avatar
- spengbab autoreturn
- spengbab enable z-axis - allows movement in 3 dimensions
- spengbab scream - AAAAAHHAAAAHHHHHAAAAAHAHAHAHAHHHHH
- spengbab noscream - ......
- spengbab getaids - deletes the spengbab
When initially rezzed, the spengbab cubes will simply sit and slowly spin until you give them a command.
Super Spengbab v1.3
<lsl> // Super Spengbab v1.3 // Made by Afroduck // Just for educational purposes // Of course
float gAutoreturn = 600; integer gActive_z_axis = FALSE; integer gScream = FALSE; string gTarget = ""; integer gTransIdSend = 0; integer gTransIdReceive = 0; integer gTransferComplete = FALSE; string gChild_key = ""; integer gAntiNoob = FALSE;
default {
on_rez(integer start_param)
{
gAutoreturn = 600;
gActive_z_axis = FALSE;
gScream = FALSE;
gTarget = "";
gTransIdSend = 0;
gTransIdReceive = start_param;
gTransferComplete = FALSE;
gChild_key = "";
gAntiNoob = FALSE;
}
state_entry()
{
llSetTexture("3f0f9fa9-e6ae-7ab4-ec11-02381ab8ef06",ALL_SIDES); //Set object texture
//Killswitch
llListen(-6666,"",NULL_KEY,"");
//Killswitch end
llTargetOmega(<0,0,.1>,PI,.2);
if (gTransferComplete)
{
llSensorRepeat("", "", AGENT, 96, PI, 0.5);
}
llSetTimerEvent(gAutoreturn);
}
sensor(integer num_detected)
{
vector here = llGetPos();
vector target;
if((llRound(llGetTime() / 30) % 2) == 0)
{
target = llDetectedPos(num_detected - 1) +
<llFrand(6) - 3, llFrand(6) - 3, 0>;
}
else
{
target = llDetectedPos(0) +
<llFrand(2) - 1, llFrand(2) - 1, 0>;
}
//Eyetsalk Sensor
vector avatarspos = llDetectedPos(0);
vector inclination = avatarspos - llGetPos();
llSetPrimitiveParams([PRIM_FLEXIBLE, TRUE, 1, 0, .5, 0, 10, inclination]);
//Eyestalk Sensor end
vector distance = target - here;
vector fracdist = distance/2.0;
list div1 = [1.25,1.5,1.75,2.0,2.5,3.0,4.0,5.0,6.0,8.0,12.0,24.0];
integer i = 0;
integer vector_safe;
integer list_length = llGetListLength(div1);
integer trap_check = llGetParcelFlags(target);
//This whole subroutine is to check along the object's path
//for any "safe" areas that have scripts turned off
//otherwise the object will get stuck
if ((PARCEL_FLAG_ALLOW_SCRIPTS & trap_check))
{
for (; i < list_length; ++i)
{
integer frac_trap_check = llGetParcelFlags(here + distance / llList2Float(div1, i) );
if ( (PARCEL_FLAG_ALLOW_SCRIPTS & frac_trap_check) )
{
vector_safe = TRUE;
}
else
{
vector_safe = FALSE;
i = list_length;
}
}
if (vector_safe)
{
if( ((here.x + fracdist.x) > 0 && (here.x + fracdist.x) < 256) &&
((here.y + fracdist.y) > 0 && (here.y + fracdist.y) < 256))
{
if (gActive_z_axis && ((here.z + fracdist.z) > 0) && ((here.z + fracdist.z) < 4000) )
{
;
}
else
{
fracdist.z = 0;
}
llSetPos(here + <fracdist.x, fracdist.y, fracdist.z>);
}
}
else
{
;
}
}
}
listen(integer chan, string name, key id, string message)
{
string x_check = llGetSubString(message, 5, -1);
string transfer_check = llGetSubString(message, 0, 3); // gets transfer id
string command_check = llGetSubString(message, 5, 23); // checks if this is a transfer command or not
// Transfer settings from previous spengbab
if ((string)gTransIdReceive == transfer_check)
{
// Auto-return settings
if (command_check == "spengbab autoreturn")
{
string value_change = llGetSubString(message, 25, -1); // gets value
list da_list = [value_change];
float auto_temp = (llList2Integer(da_list,0));
gAutoreturn = auto_temp;
llSetTimerEvent(0.0);
llSetTimerEvent(gAutoreturn);
}
// Target an avatar
string target_check = llGetSubString(message, 5, 19); // checks for "target" command
if (target_check == "spengbab target")
{
gTarget = llGetSubString(message, 21, -1); // gets target name
if (gTarget == "null")
{
llSensorRepeat("", "", AGENT, 96, PI, 0.5);
}
else
{
if (gTarget == "me")
{
gTarget = llKey2Name(llGetOwner());
}
llSensorRepeat(gTarget, "", AGENT, 96, PI, 0.5);
}
}
// Noob pwn command
string pwn_check = llGetSubString(message, 5, 17); // checks for "pwn" command
if (pwn_check == "spengbab pwn")
{
gAntiNoob = TRUE;
llSetSoundRadius(5.0);
gTarget = llGetSubString(message, 19, -1); // gets target name
llSensorRepeat(gTarget, "", AGENT, 96, PI, 0.5);
gActive_z_axis = TRUE;
gScream = TRUE;
llLoopSound("99c3568e-f82f-d74d-6029-a3366bbb1efe", 1.0);
}
// Z-Axis controls
if (x_check == "spengbab enable z-axis")
{
gActive_z_axis = TRUE;
}
// Screaming
if (x_check == "spengbab scream")
{
gScream = TRUE;
llLoopSound("99c3568e-f82f-d74d-6029-a3366bbb1efe", 1.0);
}
// Is transfer done?
if (x_check == "transfer complete")
{
gTransferComplete = TRUE;
}
}
// Normal commands
if (llGetOwnerKey(id) == llGetOwner())
{
// Auto-return settings
string command_check = llGetSubString(message, 0, 18); // checks for "autoreturn" command
if (command_check == "spengbab autoreturn")
{
string value_change = llGetSubString(message, 20, -1); // gets value
list da_list = [value_change];
float auto_temp = (llList2Integer(da_list,0));
gAutoreturn = (auto_temp * 60) - 30;
if (auto_temp != gAutoreturn)
{
llSetTimerEvent(0.0);
llSetTimerEvent(gAutoreturn);
}
}
// Target an avatar
string target_check = llGetSubString(message, 0, 14); // checks for "spengbab target" command
if (target_check == "spengbab target")
{
gTarget = llGetSubString(message, 16, -1); // gets target name
if (gTarget == "null")
{
llSensorRepeat("", "", AGENT, 96, PI, 0.5);
}
else
{
if (gTarget == "me")
{
gTarget = llKey2Name(llGetOwner());
}
llSensorRepeat(gTarget, "", AGENT, 96, PI, 0.5);
}
}
// Noob pwn command
string pwn_check = llGetSubString(message, 0, 11); // checks for "pwn" command
if (pwn_check == "spengbab pwn")
{
gAntiNoob = TRUE;
llSetSoundRadius(5.0);
gTarget = llGetSubString(message, 13, -1); // gets target name
llSensorRepeat(gTarget, "", AGENT, 96, PI, 0.5);
gActive_z_axis = TRUE;
gScream = TRUE;
llLoopSound("99c3568e-f82f-d74d-6029-a3366bbb1efe", 1.0);
}
// Killswitch
if (message == "spengbab getaids")
{
llDie();
}
// Z-Axis controls
if (message == "spengbab enable z-axis")
{
gActive_z_axis = TRUE;
}
if (message == "spengbab disable z-axis")
{
gActive_z_axis = FALSE;
}
// Screaming
if (message == "spengbab scream")
{
gScream = TRUE;
llLoopSound("99c3568e-f82f-d74d-6029-a3366bbb1efe", 1.0);
}
if (message == "spengbab noscream")
{
gScream = FALSE;
llStopSound();
}
}
else
{
;
}
}
timer()
{
vector here_rez = llGetPos();
integer rez_trap_check = llGetParcelFlags(here_rez);
if ((PARCEL_FLAG_ALLOW_SCRIPTS & rez_trap_check))
{
integer random = (integer)llFrand(9999.0) + 1000;
string interim = (string)random;
gTransIdSend = (integer)interim;
llRezObject("Spengbab", llGetPos(), ZERO_VECTOR, ZERO_ROTATION, gTransIdSend);
}
}
object_rez(key child)
{
llGiveInventory(child, llKey2Name(child));
gChild_key = child;
llSleep(2.0);
llRegionSay(-6666, (string)gTransIdSend + " spengbab autoreturn " + (string)gAutoreturn);
llSleep(0.5);
if (gAntiNoob == TRUE)
{
llRegionSay(-6666, (string)gTransIdSend + " pwn " + gTarget);
}
else
{
llRegionSay(-6666, (string)gTransIdSend + " spengbab target " + gTarget);
llSleep(0.5);
if (gActive_z_axis)
{
llRegionSay(-6666, (string)gTransIdSend + " spengbab enable z-axis");
llSleep(0.5);
}
if (gScream)
{
llRegionSay(-6666, (string)gTransIdSend + " spengbab scream");
llSleep(0.5);
}
}
llRegionSay(-6666, (string)gTransIdSend + " transfer complete");
llDie();
}
} </lsl>