integer channel = -35;
vector movement= <0.0, 0.0, 5.43252>;
vector pos;

setVisibility(float vis)
{
    integer idx;
    integer max=llGetNumberOfPrims();
    for (idx=1; idx<=max; idx++) {
        llSetLinkAlpha(idx, vis, ALL_SIDES);
    }        
}

sprayon() {
    llParticleSystem([
        PSYS_PART_FLAGS,
            PSYS_PART_EMISSIVE_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_INTERP_COLOR_MASK,
        PSYS_SRC_PATTERN,
            PSYS_SRC_PATTERN_ANGLE_CONE,
        PSYS_SRC_TEXTURE,           
            "2ca57748-4944-de53-b301-8d0efbafb2c6",
        PSYS_SRC_BURST_RADIUS,      0.1,
        PSYS_SRC_ANGLE_BEGIN,       0.0,
        PSYS_SRC_ANGLE_END,         PI,
        PSYS_PART_START_COLOR,      <0.6,0.6,0.6>,
        PSYS_PART_START_SCALE,      <3.0,3.0,3.0>,
        PSYS_PART_END_SCALE,        <0.51,0.51,0.51>,
        PSYS_PART_START_ALPHA,      1.0,
        PSYS_PART_END_ALPHA,        0.0,
        PSYS_PART_START_GLOW,       0.0,
        PSYS_SRC_MAX_AGE,           0.0,
        PSYS_PART_MAX_AGE,          2.0,
        PSYS_SRC_BURST_RATE,        0.1,
        PSYS_SRC_BURST_PART_COUNT,  25,
        PSYS_SRC_ACCEL,             <0.0,0.0,-3.0>,
        PSYS_SRC_BURST_SPEED_MIN,   1.0,
        PSYS_SRC_BURST_SPEED_MAX,   1.5
    ]);
}

sprayoff() {
    llParticleSystem([]);
}

default
{
    on_rez(integer z)
    {
        llResetScript();
    }
    
    state_entry()
    {
        setVisibility(0.0);
        llListen(channel, "", NULL_KEY, "");
    }

    listen(integer channel, string name, key id, string msg) 
    {
        id = llGetOwnerKey(id);
        if (id != llGetOwner()) {
            return;
        }
        
        if (msg == "sawsayt") {
            llWhisper(-10, "sawsok");
        } else if (msg == "sawsshow") {
            pos = llGetPos();
            pos -= movement;
            llSetPos(pos);
            sprayon();
            llPreloadSound("sawstart");
            llPreloadSound("sawends");
            llSleep(1.0);
            setVisibility(1.0);
            sprayoff();
        } else if (msg == "sawshide") {
            pos = llGetPos();
            pos += movement;
            llSetPos(pos);
            setVisibility(0.0);
        } else if (msg == "sawson") {
            llPlaySound("sawstart", 1.0);
        } else if (msg == "sawsoff") {
            llPlaySound("sawends", 1.0);
        } else if (msg == "sawsdie") {
            llDie();
        }
    }

}
