integer held;
float cfGuessMass(key id)
{
list bound = llGetBoundingBox(id);
vector v1 = llList2Vector(bound, 0);
vector v2 = llList2Vector(bound, 1);
vector dim = <llFabs(v2.x - v1.x),
llFabs(v2.y - v1.y),
llFabs(v2.z - v1.z)>;
return (dim.x * dim.y * dim.z * 10);
}
default
{
state_entry()
{
// llSetAlpha(0.0,ALL_SIDES);
if (llGetAttached()) {
llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS |
PERMISSION_TRIGGER_ANIMATION);
}
}
attach(key id)
{
if (id != NULL_KEY) { // was attached
//llOwnerSay("requesting perms");
llRequestPermissions(id, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION);
} else {
if ( llGetPermissions() & PERMISSION_TRIGGER_ANIMATION ) {
llStopAnimation("hold_r_handgun");
llStopAnimation("aim_r_handgun");
}
llResetScript();
}
}
run_time_permissions (integer p) {
if (p & PERMISSION_TRIGGER_ANIMATION) {
llStartAnimation("hold_r_handgun");
}
if (p & PERMISSION_TAKE_CONTROLS) {
//llOwnerSay("got controls perm");
llTakeControls(CONTROL_ML_LBUTTON | CONTROL_DOWN, TRUE,TRUE);
}
}
control(key id, integer level, integer edge)
{
if (level & edge & CONTROL_ML_LBUTTON) {
llSensor("", NULL_KEY, AGENT | ACTIVE | PASSIVE, 96, .1309); // 15/2 degree arc
held = 1;
} else if (edge & CONTROL_ML_LBUTTON) { // !level implied.
if (!held)
return;
held = 0;
llMessageLinked(LINK_SET, 0, "", NULL_KEY);
llStopSound();
llTriggerSound("cab97eb4-eb0a-6117-8e3f-2c5144750cf9", 0.5);
} else if ((level & CONTROL_ML_LBUTTON) && (edge & level & CONTROL_DOWN)) { //
when crouch is pressed down while holding the mouse button
llGetAndResetTime();
} else if ((level & CONTROL_ML_LBUTTON) && (edge & ~level & CONTROL_DOWN)) {
if (!held)
return;
held = 0;
float time = llGetAndResetTime();
float pushStrength;
if (time < 0.35) {
pushStrength = 15000000;
} else {
pushStrength = llPow(time*5.0,2);
}
//llOwnerSay("push time = " + (string)time + " strength= " + (string)pushStrength);
llTriggerSound("e371ec35-1fe4-cb63-76e1-f233fbf23588", 1);
llMessageLinked(LINK_SET, 100, (string)pushStrength, NULL_KEY);
llStopSound();
}
}
sensor(integer tnum)
{
key id = llDetectedKey(0);
float mass;
mass = llGetObjectMass(id);
vector p = llDetectedPos(0);
llMessageLinked(LINK_SET,
llDetectedType(0),
llList2CSV([p.x, p.y, p.z, mass]),
id);
llSetText((string)llKey2Name(id),<1,1,1>,1.0);
llTriggerSound("e104c0ca-cde6-b2f3-8688-96950d533b89", 1);
llLoopSound("6697c5d6-2d00-06de-4b68-a0ffd43798a6", 1);
llTriggerSound("0d89df4d-92ea-e5fd-38d5-5ac4cf7e6b48", 1);
}
no_sensor()
{
llTriggerSound("ca09a455-8c16-3304-ef15-8ace9fbdae65", 1);
held=0;
}
}