 |
|
 |
|
Advanced

Group: Elite Members
Posts: 89
Joined: 20-February 09
Member No.: 843,883
|
|
 |
|
 |

|
Warning: Untested, Etc. This gun is basically a particle shooter that fires a stream and creates an invisible following box on people it hits that makes it look like they're burning. Best used as a trolling aid. ###### around with the first script in the gun and the flame object's particles if you want different color fire.
Instructions Jam the first 3 scripts into a gun. After jamming the first 3 scripts into a gun, rez a tiny cube, make it phantom and transparent. Put the Flame script in it and name it "Flame"
Code Gun Script #1
default { link_message(integer sn, integer num, string who, key id) { if (num == 66) { llSensorRepeat("", NULL_KEY, AGENT, 6, .4 / .90, .1); } else { llSensorRemove(); } } sensor(integer tn) { integer basechan = 65536 + (integer)llFrand(65536); integer i; for (i = 0; i < tn; i++) { llRezObject("Flame", llGetPos(), ZERO_VECTOR, ZERO_ROTATION, basechan + i); } llSleep(.1); for (i = 0; i < tn; i++) { llShout(basechan + i, llDetectedKey(i)); } } }Gun Script #2
// RedZergling ###### stole this script lol integer held; default { state_entry() { if (llGetAttached()) { llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); } } on_rez(integer pam) { llResetScript(); } attach(key id) { if (id != NULL_KEY) { // was attached llRequestPermissions(id, PERMISSION_TAKE_CONTROLS | PERMISSION_TRIGGER_ANIMATION); } else { if ( llGetPermissions() & PERMISSION_TRIGGER_ANIMATION ) llStopAnimation("hold_r_rifle"); llStopAnimation("aim_r_rifle"); llStopAnimation("hold_r_handgun"); llStopAnimation("aim_r_handgun"); llSetTimerEvent(0); } } run_time_permissions (integer p) { if (p & PERMISSION_TRIGGER_ANIMATION) { } if (p & PERMISSION_TAKE_CONTROLS) { llTakeControls(CONTROL_ML_LBUTTON | CONTROL_DOWN, 1, 0); } } control(key id, integer level, integer edge) { if (level & edge & CONTROL_ML_LBUTTON) { llTriggerSound("81ffda57-76cf-3207-bfd7-90c361f8b2b9", 1); llLoopSound("48db54d0-24ff-34c8-3d5d-1496c6878d34", 1.0); llMessageLinked(LINK_SET, 66, "fire", ""); llStartAnimation("aim_r_handgun"); held = 1; } else if (edge & CONTROL_ML_LBUTTON) { // !level implied. if (!held) return; held = 0; llMessageLinked(LINK_SET, 65, "", ""); llStopSound(); llStopAnimation("hold_r_handgun"); llStopAnimation("aim_r_handgun"); llSetTimerEvent(0.0); }} } Gun Script #3
default { link_message(integer sender, integer i, string s, key id) { if(i == 66) { llParticleSystem([ PSYS_PART_FLAGS,PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_EMISSIVE_MASK | PSYS_PART_FOLLOW_SRC_MASK, PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE_CONE, PSYS_PART_START_COLOR, <0,0.5,1.0>, PSYS_PART_END_COLOR, <1,1,1.0>, PSYS_PART_START_ALPHA, 0.5, PSYS_PART_END_ALPHA, 0.1, PSYS_PART_START_SCALE, <0.50,0.50,0.50>, PSYS_PART_END_SCALE, <1.4,1.4,1.44>, PSYS_SRC_ANGLE_BEGIN, 0.0, PSYS_SRC_ANGLE_END, 0.0, PSYS_SRC_BURST_RATE, 0.01, PSYS_SRC_BURST_PART_COUNT, 200000, PSYS_SRC_BURST_RADIUS, 0.5, PSYS_PART_MAX_AGE, 1.8, PSYS_SRC_TEXTURE, "dcab6cc4-172f-e30d-b1d0-f558446f20d4", PSYS_SRC_BURST_SPEED_MIN, 1.6, PSYS_SRC_BURST_SPEED_MAX, 2.2, PSYS_SRC_ACCEL, <0,0,0.40> ]); } if(i == 65) { llParticleSystem([]); } }} Flame Script
// Function to change velocity to a target vel. // Vel is desired velocity, strength is how forcefully to change to that velocity. // Call this function repeatedly in an evenly timed loop. irCorrectVelocity(vector vel, float strength) { if (strength > 1) strength = 1; if (strength > 0) { // Do nothing if no strength! vector retro = llGetVel(); retro *= -(strength); vel *= strength; llApplyImpulse((retro + vel) * llGetMass(), FALSE); } } flame(integer on) { if (!on) { llParticleSystem([]); return; } llParticleSystem([ PSYS_PART_FLAGS, PSYS_PART_WIND_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_EMISSIVE_MASK, PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_ANGLE_CONE, PSYS_PART_START_COLOR, <0.0,0.5,1.0>, PSYS_PART_END_COLOR, <1,1,1.0>, PSYS_PART_START_SCALE, <1,1,0>, PSYS_PART_END_SCALE, <0,.05,0>, PSYS_PART_START_ALPHA, 1.0, // emissive, always fullbright D:. PSYS_SRC_TEXTURE, "dcab6cc4-172f-e30d-b1d0-f558446f20d4", PSYS_PART_MAX_AGE, .75, PSYS_SRC_ANGLE_BEGIN, 0.0, PSYS_SRC_ANGLE_END, 45 * DEG_TO_RAD, PSYS_SRC_BURST_RATE, .05, PSYS_SRC_BURST_PART_COUNT, 10, PSYS_SRC_BURST_SPEED_MIN, .5, PSYS_SRC_BURST_SPEED_MAX, 1.5, PSYS_SRC_ACCEL, <0,0,4> // PSYS_SRC_TEXTURE, "bf3559f9-02dc-dbf8-9c7a-7bffd31c9ac6" ]); } key tgt; integer nosense = 0; integer on = 0; integer colcheck = 1; // Checking for collision ( def true) float end; default { state_entry() { flame(FALSE); } on_rez(integer s) { if (s) { llListen(s, "", NULL_KEY, ""); llSetAlpha(0, ALL_SIDES); llListen(999999, "", NULL_KEY, (string)llGetKey()); } } listen(integer c, string who, key id, string msg) { if (c == 999999) // For extinguishers to use llDie(); llSetBuoyancy(1.0); llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z, FALSE); llSetStatus(STATUS_PHYSICS, TRUE); tgt = (key)msg; nosense =0; on = 0; colcheck=1; llSensor("flame-"+(string)tgt, NULL_KEY, ACTIVE, TWO_PI, 96); } no_sensor() { if (colcheck) { colcheck = 0; llSetObjectName("flame-"+(string)tgt); end = llGetWallclock() + 30; llResetTime(); llSleep(.05); llSensorRepeat("", tgt, AGENT, 96, TWO_PI, .05); return; } nosense++; if (nosense > 5) llDie(); } sensor(integer t) { if (colcheck) { //Oops, got a burny assigned to them. colcheck = 0; // does this really even matter? YES OF COURSE llDie(); } if (llGetWallclock() > end) llDie(); nosense = 0; vector h = llGetAgentSize(tgt); vector me = llGetPos(); if (me.z <= llWater(ZERO_VECTOR)) llDie(); vector to = llDetectedPos(0) + (llDetectedVel(0) * llGetAndResetTime()) + <0,0,h.z/4>; vector toward = (to - me); if (llVecMag(toward) > 10) { llMoveToTarget(me + (llVecNorm(toward)*10), .1); } else { llMoveToTarget(to, .1); } if (!on) { if(llVecDist(llGetPos(), to) < 2) { flame(TRUE); llLoopSound("48db54d0-24ff-34c8-3d5d-1496c6878d34", .4); } } } }
|