////////////////////////////////////////////////////////// // (C) Wizardry and Steamworks - 2011, GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html // // for legal details, rights of fair usage and // // the disclaimer and warranty conditions. // ////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// // INTERNALS // /////////////////////////////////////////////////////////////////////////// integer Key2Number(key objKey) { return llAbs(((integer)("0x"+llGetSubString((string)objKey,-8,-1)) & 0x3FFFFFFF) ^ 0xBFFFFFFF); } integer hidTarget = -1; integer nTarget = -1; key avKey = NULL_KEY; default { at_target(integer tnum, vector targetpos, vector ourpos) { if(avKey == NULL_KEY) return; llParticleSystem([ // start of particle settings // Texture Parameters: PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), PSYS_PART_START_SCALE, <.50, .50, .50>, PSYS_PART_END_SCALE, <.50, .50, .50>, PSYS_PART_START_COLOR, <1,1,1>, PSYS_PART_END_COLOR, <1,1,1>, PSYS_PART_START_ALPHA, (float) 1, PSYS_PART_END_ALPHA, (float) 1, // Production Parameters: PSYS_SRC_BURST_PART_COUNT, (integer) 2, PSYS_SRC_BURST_RATE, (float) .20, PSYS_PART_MAX_AGE, (float) 3.30, PSYS_SRC_MAX_AGE, (float) .00, // Placement Parameters: PSYS_SRC_PATTERN, (integer) 8, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=CONE, // Placement Parameters (for any non-DROP pattern): PSYS_SRC_BURST_SPEED_MIN, (float) .01, PSYS_SRC_BURST_SPEED_MAX, (float) .05, PSYS_SRC_BURST_RADIUS, (float) 2, // Placement Parameters (only for ANGLE & CONE patterns): PSYS_SRC_ANGLE_BEGIN, (float) .00 *PI, PSYS_SRC_ANGLE_END, (float) 1 *PI, PSYS_SRC_OMEGA, <00.00, 00.00, 00.00>, // After-Effect & Influence Parameters: //PSYS_SRC_ACCEL, < 0, 0, 0>, PSYS_SRC_TARGET_KEY, (key) llGetLinkKey(llGetLinkNumber() + 1), PSYS_PART_FLAGS, (integer) ( 0 // Texture Options: | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK | PSYS_PART_EMISSIVE_MASK // | PSYS_PART_FOLLOW_VELOCITY_MASK // After-effect & Influence Options: | PSYS_PART_WIND_MASK | PSYS_PART_BOUNCE_MASK // | PSYS_PART_FOLLOW_SRC_MASK | PSYS_PART_TARGET_POS_MASK // | PSYS_PART_TARGET_LINEAR_MASK ) //end of particle settings ]); } not_at_target() { llSleep(1); llTargetRemove(nTarget); vector pos = llList2Vector(llGetObjectDetails(avKey, [OBJECT_POS]), 0); nTarget = llTarget(pos, 1); llMoveToTarget(pos, .5); } timer() { llSetTimerEvent(0); llTargetRemove(nTarget); vector pos = llList2Vector(llGetObjectDetails(avKey, [OBJECT_POS]), 0); nTarget = llTarget(pos, 1); llMoveToTarget(pos, .5); llSetTimerEvent(1); } on_rez(integer param) { hidTarget = param; llSetPrimitiveParams([PRIM_TEMP_ON_REZ, 1]); llSensorRepeat("", "", AGENT, 64, TWO_PI, (1.0 - llGetRegionTimeDilation())*10.0); } sensor(integer num_detected) { integer itra; for(itra=0; itra); llSetStatus(STATUS_PHYSICS|STATUS_PHANTOM, TRUE); llSetTimerEvent(1); return; } } } }