With the creation of llRezObjectWithParams, which offers far more flexibility and scalability than the llRezObject/llRezAtRoot functions, I felt that it would be an excellent idea to re-visit a couple of old classic's as well: llSensor and llSensorRepeat
These two have been a staple in this program for many years, however with the advent of llCastRay, as well as the Combat 2.0 suite of functions coming soon, it would be fair to at least revisit these two functions and give it a proper facelift and some TLC. In a similar spirit as llRezObjectWithParams, I would like to propose the creation of llSensorWithParams.
The principle is the same as its predecessor, which will do a scan and it will return a list based on the filtered results.
llSensorWithParams(list params );
*An empty list should only trigger a no_sensor event
Parameters should include, but not limited to, the following:
SENSOR_NAME - Object or avatar name
SENSOR_KEY - group, avatar or object UUID
SENSOR_TYPE - mask (AGENT_BY_LEGACY_NAME, AGENT_BY_USERNAME, ACTIVE,
PASSIVE, and/or SCRIPTED)
SENSOR_RADIUS - distance in meters from center, [0.0, 96.0]
SENSOR_ARC – the max angle between the object's local X-axis and detectable objects, [0.0, PI]
SENSOR_RATE - how often a scan is performed
SENSOR_RC - Performs similar to llCastRay, however start/end vectors could be offset of both endpoints. A TRUE/FALSE flag should be made for the offset based on Global Position or with Rotation factored in. The start vector is the prim calling the Sensor event, while the end is the llDetectedPos. All other RC flags should still apply from llCast Ray
SENSOR_HEALTH - Prims/Objects with OBJECT_HEALTH set. (See https://feedback.secondlife.com/combat-20/p/new-llsensor-flag-mask-object-health)
A practical application of this new function is for combat/fantasy role play sims. For example, if a player wants to do a melee attack, throw something explosive like a rocket or fireball, you could call the function as follows for a wall-safe detonation what will filter out those that are in range, but are behind cover:
llSensorWithParams([
SENSOR_TYPE ,AGENT,
SENSOR_RADIUS, 10,
SENSOR_ARC, PI,
SENSOR_RC,
ZERO_VECTOR, TRUE(global), //start vector
ZERO_VECTOR, TRUE(global), //end vector
OTHER_FLAGS
]);
These are some of the applications that can be involved with this new function. More folks might want to chip in to expand the functionality of it.