Merge up to 26394 / 1d7dbcc52ca3 (FS tip).
commit
47124812cd
|
|
@ -103,6 +103,7 @@ Aleric Inglewood
|
|||
STORM-864
|
||||
STORM-955
|
||||
STORM-960
|
||||
STORM-1793
|
||||
Ales Beaumont
|
||||
VWR-9352
|
||||
SNOW-240
|
||||
|
|
@ -610,6 +611,7 @@ Jonathan Yap
|
|||
STORM-1788
|
||||
STORM-1799
|
||||
STORM-1796
|
||||
STORM-1793
|
||||
Kadah Coba
|
||||
STORM-1060
|
||||
Jondan Lundquist
|
||||
|
|
@ -1239,6 +1241,8 @@ WolfPup Lowenhar
|
|||
VWR-20741
|
||||
VWR-20933
|
||||
Wundur Primbee
|
||||
Xellessanova Zenith
|
||||
STORM-1793
|
||||
Xiki Luik
|
||||
xstorm Radek
|
||||
YongYong Francois
|
||||
|
|
|
|||
|
|
@ -469,6 +469,47 @@ void LLScriptLibrary::init()
|
|||
// IF YOU ADD NEW SCRIPT CALLS, YOU MUST PUT THEM AT THE END OF THIS LIST.
|
||||
// Otherwise the bytecode numbers for each call will be wrong, and all
|
||||
// existing scripts will crash.
|
||||
|
||||
// <FS:Ansariel> According to Kelly Linden we don't need to obey the function ID order in the viewer!
|
||||
// Server v11.08.10.238207 new functions:
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetMemoryLimit", "i", "i");
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetMemoryLimit", "i", NULL);
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetLinkMedia", "i", "iil");
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetLinkMedia", "l", "iil");
|
||||
addFunction(10.f, 0.f, dummy_func, "llClearLinkMedia", "i", "ii");
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetLinkCamera", NULL, "ivv");
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetContentType", NULL, "ki");
|
||||
addFunction(10.f, 0.f, dummy_func, "llLinkSitTarget", NULL, "ivq");
|
||||
addFunction(10.f, 0.f, dummy_func, "llAvatarOnLinkSitTarget", "k", "i");
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetVelocity", NULL, "vi");
|
||||
|
||||
// Server v11.09.09.240509 new functions:
|
||||
addFunction(10.f, 0.f, dummy_func, "llCastRay", "l", "vvl");
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetMassMKS", "f", NULL);
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetPhysicsMaterial", NULL, "iffff");
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetPhysicsMaterial", "l", NULL);
|
||||
|
||||
// Server v11.10.18.243270 new functions:
|
||||
addFunction(10.f, 0.f, dummy_func, "llManageEstateAccess", "i", "ik");
|
||||
|
||||
// Server RC magnum v11.10.31.244254 new function:
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetKeyframedMotion", NULL, "ll");
|
||||
|
||||
// Server RC Le Tigre v11.10.30.245889 new function:
|
||||
addFunction(10.f, 0.f, dummy_func, "llTransferLindenDollars", "k", "ki");
|
||||
|
||||
// Server new function 2011-12-13:
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetParcelMusicURL", "s", NULL);
|
||||
|
||||
// Missing script functions as of 2011-12-13
|
||||
addFunction(10.f, 0.f, dummy_func, "llScriptProfiler", NULL, "i");
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetSPMaxMemory", "i", NULL);
|
||||
addFunction(10.f, 0.f, dummy_func, "llGetUsedMemory", "i", NULL);
|
||||
addFunction(10.f, 0.f, dummy_func, "llSetAngularVelocity", NULL, "vi");
|
||||
|
||||
// Server 12.01.24.248357 new functions
|
||||
addFunction(0.f, 0.f, dummy_func, "llSetRegionPos", "i", "v");
|
||||
// </FS:Ansariel> According to Kelly Linden we don't need to obey the function ID order in the viewer!
|
||||
}
|
||||
|
||||
LLScriptLibraryFunction::LLScriptLibraryFunction(F32 eu, F32 st, void (*exec_func)(LLScriptLibData *, LLScriptLibData *, const LLUUID &), const char *name, const char *ret_type, const char *args, BOOL god_only)
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ remote_data remote_data(integer event_type, key channel, key message_id, str
|
|||
http_response http_response(key request_id, integer status, list metadata, string body):Triggered when task receives a response to one of its llHTTPRequests
|
||||
http_request http_request(key id, string method, string body):Triggered when task receives an http request against a public URL
|
||||
|
||||
# <FS:Ansariel> Added manually
|
||||
transaction_result transaction_result(key id, integer success, string data): Triggered when L$ is given to task
|
||||
|
||||
# integer constants
|
||||
[word .1, .1, .5]
|
||||
TRUE Integer constant for Boolean operations
|
||||
|
|
@ -588,6 +591,64 @@ STATUS_NOT_SUPPORTED Feature not supported
|
|||
STATUS_INTERNAL_ERROR An internal error occurred
|
||||
STATUS_WHITELIST_FAILED URL failed to pass whitelist
|
||||
|
||||
# <FS:Ansariel> Manually added constants
|
||||
KFM_COMMAND Option for llSetKeyframedMotion(), followed by one of KFM_CMD_STOP, KFM_CMD_PLAY, KFM_CMD_PAUSE. Note that KFM_COMMAND must be the only option in the list, and cannot be specified in the same function call that sets the keyframes list.
|
||||
KFM_MODE Option for llSetKeyframedMotion(), used to specify the playback mode, followed by one of KFM_FORWARD, KFM_LOOP, KFM_PING_PONG or KFM_REVERSE.
|
||||
KFM_DATA Option for llSetKeyframedMotion(), followed by a bitwise combination of KFM_TRANSLATION and KFM_ROTATION. If you specify one or the other, you should only include translations or rotations in your keyframe list.
|
||||
KFM_FORWARD Option for llSetKeyframedMotion(), used after KFM_MODE to specify the forward playback mode.
|
||||
KFM_LOOP Option for llSetKeyframedMotion(), used after KFM_MODE to specify the loop playback mode.
|
||||
KFM_PING_PONG Option for llSetKeyframedMotion(), used after KFM_MODE to specify the ping pong playback mode.
|
||||
KFM_REVERSE Option for llSetKeyframedMotion(), used after KFM_MODE to specify the reverse playback mode.
|
||||
KFM_ROTATION Option for llSetKeyframedMotion(), used after KFM_DATA, possibly as a bitwise combination with KFM_TRANSLATION.
|
||||
KFM_TRANSLATION Option for llSetKeyframedMotion(), used after KFM_DATA, possibly as a bitwise combination with KFM_ROTATION.
|
||||
KFM_CMD_PLAY Option for llSetKeyframedMotion(), used after KFM_COMMAND to play the motion.
|
||||
KFM_CMD_STOP Option for llSetKeyframedMotion(), used after KFM_COMMAND to stop the motion.
|
||||
KFM_CMD_PAUSE Option for llSetKeyframedMotion(), used after KFM_COMMAND to pause the motion.
|
||||
|
||||
ESTATE_ACCESS_ALLOWED_AGENT_ADD Used with llManageEstateAccess to add an agent to this estate's allowed residents list.
|
||||
ESTATE_ACCESS_ALLOWED_AGENT_REMOVE Used with llManageEstateAccess to remove an agent from this estate's allowed residents list.
|
||||
ESTATE_ACCESS_ALLOWED_GROUP_ADD Used with llManageEstateAccess to add a group to this estate's allowed groups list.
|
||||
ESTATE_ACCESS_ALLOWED_GROUP_REMOVE Used with llManageEstateAccess to remove a group from this estate's allowed groups list.
|
||||
ESTATE_ACCESS_BANNED_AGENT_ADD Used with llManageEstateAccess to add an agent to this estate's banned residents list.
|
||||
ESTATE_ACCESS_BANNED_AGENT_REMOVE Used with llManageEstateAccess to remove an agent from this estate's banned residents list.
|
||||
|
||||
OBJECT_PHYSICS_COST Used with llGetObjectDetails to get the physics cost.
|
||||
OBJECT_PRIM_EQUIVALENCE Used with llGetObjectDetails to get the prim equivalence.
|
||||
OBJECT_SERVER_COST Used with llGetObjectDetails to get the server cost.
|
||||
OBJECT_STREAMING_COST Used with llGetObjectDetails to get the streaming (download) cost.
|
||||
|
||||
PRIM_PHYSICS_SHAPE_TYPE For primitive physics shape type. Followed with either PRIM_PHYSICS_SHAPE_PRIM, PRIM_PHYSICS_SHAPE_NONE or PRIM_PHYSICS_SHAPE_CONVEX.
|
||||
PRIM_PHYSICS_SHAPE_PRIM Use the normal prim shape for physics (this is the default for all non-mesh objects)
|
||||
PRIM_PHYSICS_SHAPE_NONE Use the convex hull of the prim shape for physics (this is the default for mesh objects)
|
||||
PRIM_PHYSICS_SHAPE_CONVEX Ignore this prim in the physics shape. This cannot be applied to the root prim.
|
||||
|
||||
DENSITY For use with llSetPhysicsMaterial() as a bitwise value in its material_bits parameter, to set the density.
|
||||
FRICTION For use with llSetPhysicsMaterial() as a bitwise value in its material_bits parameter, to set the friction.
|
||||
RESTITUTION For use with llSetPhysicsMaterial() as a bitwise value in its material_bits parameter, to set the restitution.
|
||||
GRAVITY_MULTIPLIER For use with llSetPhysicsMaterial() as a bitwise value in its material_bits parameter, to set the gravity multiplier.
|
||||
|
||||
PROFILE_SCRIPT_NONE Disables memory profiling when passed to llScriptProfiler()
|
||||
PROFILE_SCRIPT_MEMORY Enables memory profiling when passed to llScriptProfiler()
|
||||
|
||||
RCERR_UNKNOWN Returned by llCastRay() when the raycast failed for an unspecified reason.
|
||||
RCERR_SIM_PERF_LOW Returned by llCastRay() when the raycast failed because simulator performance is low.
|
||||
RCERR_CAST_TIME_EXCEEDED Returned by llCastRay() when the raycast failed because the parcel or agent has exceeded the maximum time allowed for raycasting.
|
||||
|
||||
RC_REJECT_TYPES Option for llCastRay() used to ignore specific types of objects, followed with a bitwise combination of RC_REJECT_AGENTS, RC_REJECT_PHYSICAL, RC_REJECT_NONPHYSICAL and RC_REJECT_LAND.
|
||||
RC_DETECT_PHANTOM Option for llCastRay() followed with TRUE to detect phantom AND volume detect objects, FASLE otherwise.
|
||||
RC_DATA_FLAGS Option for llCastRay() followed with a bitwise combination of RC_GET_NORMAL, RC_GET_ROOT_KEY and RC_GET_LINK_NUM.
|
||||
RC_MAX_HITS Option for llCastRay() followed with an integer specifying the maximum number of hits to return (must be <= 256).
|
||||
|
||||
RC_REJECT_AGENTS Flag used in the RC_REJECT_TYPES mask to reject agents in llCastRay().
|
||||
RC_REJECT_PHYSICAL Flag used in the RC_REJECT_TYPES mask to reject physical objects in llCastRay().
|
||||
RC_REJECT_NONPHYSICAL Flag used in the RC_REJECT_TYPES mask to reject non-physical objects in llCastRay().
|
||||
RC_REJECT_LAND Flag used in the RC_REJECT_TYPES mask to reject land in llCastRay().
|
||||
|
||||
RC_GET_NORMAL Flag used in the RC_DATA_FLAGS mask to get hit normals in llCastRay() results.
|
||||
RC_GET_ROOT_KEY Flag used in the RC_DATA_FLAGS mask to get root keys in llCastRay() results.
|
||||
RC_GET_LINK_NUM Flag used in the RC_DATA_FLAGS mask to get link numbers in llCastRay() results.
|
||||
# </FS:Ansariel> Manually added constants
|
||||
|
||||
# string constants
|
||||
[word .1, .3, .5]
|
||||
NULL_KEY Indicates an empty key
|
||||
|
|
|
|||
|
|
@ -3661,6 +3661,15 @@ void LLAppViewer::requestQuit()
|
|||
{
|
||||
sendLogoutRequest();
|
||||
}
|
||||
else if(LLStartUp::getStartupState() == STATE_STARTED) // LO: Fix for FIRE-2613: sidebar tabs and floaters not remembering being open/torn off
|
||||
{
|
||||
if (gFloaterView)
|
||||
{
|
||||
// application is quitting
|
||||
gFloaterView->closeAllChildren(true);
|
||||
}
|
||||
|
||||
} // ~LO
|
||||
|
||||
// Quit immediately
|
||||
forceQuit();
|
||||
|
|
@ -4154,6 +4163,12 @@ bool finish_disconnect(const LLSD& notification, const LLSD& response)
|
|||
|
||||
if (1 == option)
|
||||
{
|
||||
if (gFloaterView)
|
||||
{
|
||||
// application is quitting
|
||||
gFloaterView->closeAllChildren(true);
|
||||
}
|
||||
|
||||
LLAppViewer::instance()->forceQuit();
|
||||
}
|
||||
return false;
|
||||
|
|
@ -4162,6 +4177,12 @@ bool finish_disconnect(const LLSD& notification, const LLSD& response)
|
|||
// Callback from an early disconnect dialog, force an exit
|
||||
bool finish_forced_disconnect(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
if (gFloaterView)
|
||||
{
|
||||
// application is quitting
|
||||
gFloaterView->closeAllChildren(true);
|
||||
}
|
||||
|
||||
LLAppViewer::instance()->forceQuit();
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1093,17 +1093,19 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
|
|||
|
||||
bool LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size)
|
||||
{
|
||||
LLVolume* volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod));
|
||||
LLPointer<LLVolume> volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod));
|
||||
std::string mesh_string((char*) data, data_size);
|
||||
std::istringstream stream(mesh_string);
|
||||
|
||||
if (volume->unpackVolumeFaces(stream, data_size))
|
||||
{
|
||||
LoadedMesh mesh(volume, mesh_params, lod);
|
||||
if (volume->getNumFaces() > 0)
|
||||
{
|
||||
LLMutexLock lock(mMutex);
|
||||
mLoadedQ.push(mesh);
|
||||
LoadedMesh mesh(volume, mesh_params, lod);
|
||||
{
|
||||
LLMutexLock lock(mMutex);
|
||||
mLoadedQ.push(mesh);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,6 +90,8 @@ const F32 DOT_SCALE = 0.75f;
|
|||
const F32 MIN_PICK_SCALE = 2.f;
|
||||
const S32 MOUSE_DRAG_SLOP = 2; // How far the mouse needs to move before we think it's a drag
|
||||
|
||||
const F64 COARSEUPDATE_MAX_Z = 1020.0f;
|
||||
|
||||
const F32 WIDTH_PIXELS = 2.f;
|
||||
const S32 CIRCLE_STEPS = 100;
|
||||
|
||||
|
|
@ -342,7 +344,8 @@ void LLNetMap::draw()
|
|||
}
|
||||
|
||||
LLVector3 map_center_agent = gAgent.getPosAgentFromGlobal(mObjectImageCenterGlobal);
|
||||
map_center_agent -= gAgentCamera.getCameraPositionAgent();
|
||||
LLVector3 camera_position = gAgentCamera.getCameraPositionAgent();
|
||||
map_center_agent -= camera_position;
|
||||
map_center_agent.mV[VX] *= mScale/region_width;
|
||||
map_center_agent.mV[VY] *= mScale/region_width;
|
||||
|
||||
|
|
@ -363,9 +366,6 @@ void LLNetMap::draw()
|
|||
|
||||
gGL.popMatrix();
|
||||
|
||||
LLVector3d pos_global;
|
||||
LLVector3 pos_map;
|
||||
|
||||
// Mouse pointer in local coordinates
|
||||
S32 local_mouse_x;
|
||||
S32 local_mouse_y;
|
||||
|
|
@ -375,143 +375,109 @@ void LLNetMap::draw()
|
|||
F32 closest_dist_squared = F32_MAX; // value will be overridden in the loop
|
||||
F32 min_pick_dist_squared = (mDotRadius * MIN_PICK_SCALE) * (mDotRadius * MIN_PICK_SCALE);
|
||||
|
||||
LLVector3 pos_map;
|
||||
uuid_vec_t avatar_ids;
|
||||
std::vector<LLVector3d> positions;
|
||||
bool unknown_relative_z;
|
||||
|
||||
LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, gAgentCamera.getCameraPositionGlobal());
|
||||
|
||||
// Draw avatars
|
||||
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
|
||||
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
|
||||
for (U32 i = 0; i < avatar_ids.size(); i++)
|
||||
{
|
||||
LLViewerRegion* regionp = *iter;
|
||||
const LLVector3d& origin_global = regionp->getOriginGlobal();
|
||||
//pos_map = globalPosToView(positions[i]); // <FS:Ansariel> Do this later after advanced height check
|
||||
LLUUID uuid = avatar_ids[i];
|
||||
|
||||
S32 count = regionp->mMapAvatars.count();
|
||||
S32 i;
|
||||
LLVector3 pos_local;
|
||||
U32 compact_local;
|
||||
U8 bits;
|
||||
// TODO: it'd be very cool to draw these in sorted order from lowest Z to highest.
|
||||
// just be careful to sort the avatar IDs along with the positions. -MG
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
compact_local = regionp->mMapAvatars.get(i);
|
||||
|
||||
bits = compact_local & 0xFF;
|
||||
pos_local.mV[VZ] = F32(bits) * 4.f;
|
||||
compact_local >>= 8;
|
||||
|
||||
bits = compact_local & 0xFF;
|
||||
pos_local.mV[VY] = (F32)bits;
|
||||
compact_local >>= 8;
|
||||
|
||||
bits = compact_local & 0xFF;
|
||||
pos_local.mV[VX] = (F32)bits;
|
||||
|
||||
// Ansariel: Moved further down
|
||||
//pos_global.setVec( pos_local );
|
||||
//pos_global += origin_global;
|
||||
|
||||
//pos_map = globalPosToView(pos_global);
|
||||
// END Ansariel: Moved further down
|
||||
|
||||
LLUUID uuid(NULL);
|
||||
BOOL show_as_friend = FALSE;
|
||||
if( i < regionp->mMapAvatarIDs.count())
|
||||
{
|
||||
uuid = regionp->mMapAvatarIDs.get(i);
|
||||
// show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL);
|
||||
// bool show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL);
|
||||
// [RLVa:KB] - Checked: 2010-04-19 (RLVa-1.2.0f) | Modified: RLVa-1.2.0f
|
||||
show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL) &&
|
||||
(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES));
|
||||
bool show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL) &&
|
||||
(!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES));
|
||||
// [/RLVa:KB]
|
||||
}
|
||||
|
||||
LLColor4 color = show_as_friend ? map_avatar_friend_color : map_avatar_color;
|
||||
LLColor4 color = show_as_friend ? map_avatar_friend_color : map_avatar_color;
|
||||
|
||||
// Ansariel: Colorize and make use of avatar viewer objects
|
||||
// for improved height indication
|
||||
bool isHeightUnknown = (pos_local.mV[VZ] == 0.f);
|
||||
if (uuid.notNull())
|
||||
// <FS:Ansariel> Also check for legacy unknown height reported as height = 0m
|
||||
//unknown_relative_z = positions[i].mdV[VZ] == COARSEUPDATE_MAX_Z &&
|
||||
// camera_position.mV[VZ] >= COARSEUPDATE_MAX_Z;
|
||||
unknown_relative_z = (positions[i].mdV[VZ] == COARSEUPDATE_MAX_Z &&
|
||||
camera_position.mV[VZ] >= COARSEUPDATE_MAX_Z) || (positions[i].mdV[VZ] == 0.f);
|
||||
// </FS:Ansariel>
|
||||
|
||||
// Colorize muted avatars and Lindens
|
||||
std::string fullName;
|
||||
LLMuteList* muteListInstance = LLMuteList::getInstance();
|
||||
|
||||
if (muteListInstance->isMuted(uuid)) color = map_avatar_muted_color;
|
||||
else if (gCacheName->getFullName(uuid, fullName) && muteListInstance->isLinden(fullName)) color = map_avatar_linden_color;
|
||||
|
||||
// Try to workaround 1020m bug by using
|
||||
// the viewer object for the avatar.
|
||||
if (unknown_relative_z)
|
||||
{
|
||||
LLViewerObject* viewerObject = gObjectList.findObject(uuid);
|
||||
if (viewerObject)
|
||||
{
|
||||
// Colorize muted avatars and Lindens
|
||||
std::string fullName;
|
||||
LLMuteList* muteListInstance = LLMuteList::getInstance();
|
||||
positions[i].mdV[VZ] = viewerObject->getPositionGlobal().mdV[VZ];
|
||||
unknown_relative_z = false;
|
||||
}
|
||||
}
|
||||
pos_map = globalPosToView(positions[i]);
|
||||
|
||||
if (muteListInstance->isMuted(uuid)) color = map_avatar_muted_color;
|
||||
else if (gCacheName->getFullName(uuid, fullName) && muteListInstance->isLinden(fullName)) color = map_avatar_linden_color;
|
||||
|
||||
// Try to workaround 1020m bug by using
|
||||
// the viewer object for the avatar.
|
||||
if (isHeightUnknown)
|
||||
{
|
||||
LLViewerObject* viewerObject = gObjectList.findObject(uuid);
|
||||
if (viewerObject)
|
||||
{
|
||||
pos_local.mV[VZ] = viewerObject->getPositionGlobal().mdV[VZ];
|
||||
isHeightUnknown = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Mark Avatars with special colors - Ansariel
|
||||
if (LLNetMap::sAvatarMarksMap.find(uuid) != LLNetMap::sAvatarMarksMap.end())
|
||||
{
|
||||
color = LLNetMap::sAvatarMarksMap[uuid];
|
||||
}
|
||||
// Mark Avatars with special colors - Ansariel
|
||||
if (LLNetMap::sAvatarMarksMap.find(uuid) != LLNetMap::sAvatarMarksMap.end())
|
||||
{
|
||||
color = LLNetMap::sAvatarMarksMap[uuid];
|
||||
}
|
||||
|
||||
//color based on contact sets prefs
|
||||
if(LGGContactSets::getInstance()->hasFriendColorThatShouldShow(uuid,FALSE,FALSE,FALSE,TRUE))
|
||||
{
|
||||
color = LGGContactSets::getInstance()->getFriendColor(uuid);
|
||||
}
|
||||
}
|
||||
//color based on contact sets prefs
|
||||
if(LGGContactSets::getInstance()->hasFriendColorThatShouldShow(uuid,FALSE,FALSE,FALSE,TRUE))
|
||||
{
|
||||
color = LGGContactSets::getInstance()->getFriendColor(uuid);
|
||||
}
|
||||
|
||||
// Ansariel: Moved down here so we can take precise
|
||||
// height data into account
|
||||
pos_global.setVec( pos_local );
|
||||
pos_global += origin_global;
|
||||
pos_map = globalPosToView(pos_global);
|
||||
LLWorldMapView::drawAvatar(
|
||||
pos_map.mV[VX], pos_map.mV[VY],
|
||||
color,
|
||||
pos_map.mV[VZ], mDotRadius,
|
||||
unknown_relative_z);
|
||||
|
||||
LLWorldMapView::drawAvatar(
|
||||
pos_map.mV[VX], pos_map.mV[VY],
|
||||
color,
|
||||
pos_map.mV[VZ], mDotRadius,
|
||||
isHeightUnknown);
|
||||
|
||||
if(uuid.notNull())
|
||||
if(uuid.notNull())
|
||||
{
|
||||
bool selected = false;
|
||||
uuid_vec_t::iterator sel_iter = gmSelected.begin();
|
||||
for (; sel_iter != gmSelected.end(); sel_iter++)
|
||||
{
|
||||
bool selected = false;
|
||||
uuid_vec_t::iterator sel_iter = gmSelected.begin();
|
||||
for (; sel_iter != gmSelected.end(); sel_iter++)
|
||||
if(*sel_iter == uuid)
|
||||
{
|
||||
if(*sel_iter == uuid)
|
||||
{
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(selected)
|
||||
{
|
||||
if( (pos_map.mV[VX] < 0) ||
|
||||
(pos_map.mV[VY] < 0) ||
|
||||
(pos_map.mV[VX] >= getRect().getWidth()) ||
|
||||
(pos_map.mV[VY] >= getRect().getHeight()) )
|
||||
{
|
||||
S32 x = llround( pos_map.mV[VX] );
|
||||
S32 y = llround( pos_map.mV[VY] );
|
||||
LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10);
|
||||
} else
|
||||
{
|
||||
LLWorldMapView::drawTrackingDot(pos_map.mV[VX],pos_map.mV[VY],color,0.f);
|
||||
}
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
F32 dist_to_cursor_squared = dist_vec_squared(LLVector2(pos_map.mV[VX], pos_map.mV[VY]),
|
||||
LLVector2(local_mouse_x,local_mouse_y));
|
||||
if(dist_to_cursor_squared < min_pick_dist_squared && dist_to_cursor_squared < closest_dist_squared)
|
||||
if(selected)
|
||||
{
|
||||
closest_dist_squared = dist_to_cursor_squared;
|
||||
mClosestAgentToCursor = regionp->mMapAvatarIDs.get(i);
|
||||
mClosestAgentPosition = pos_global;
|
||||
if( (pos_map.mV[VX] < 0) ||
|
||||
(pos_map.mV[VY] < 0) ||
|
||||
(pos_map.mV[VX] >= getRect().getWidth()) ||
|
||||
(pos_map.mV[VY] >= getRect().getHeight()) )
|
||||
{
|
||||
S32 x = llround( pos_map.mV[VX] );
|
||||
S32 y = llround( pos_map.mV[VY] );
|
||||
LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10);
|
||||
} else
|
||||
{
|
||||
LLWorldMapView::drawTrackingDot(pos_map.mV[VX],pos_map.mV[VY],color,0.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
F32 dist_to_cursor_squared = dist_vec_squared(LLVector2(pos_map.mV[VX], pos_map.mV[VY]),
|
||||
LLVector2(local_mouse_x,local_mouse_y));
|
||||
if(dist_to_cursor_squared < min_pick_dist_squared && dist_to_cursor_squared < closest_dist_squared)
|
||||
{
|
||||
closest_dist_squared = dist_to_cursor_squared;
|
||||
mClosestAgentToCursor = uuid;
|
||||
mClosestAgentPosition = positions[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Draw dot for autopilot target
|
||||
|
|
@ -534,7 +500,7 @@ void LLNetMap::draw()
|
|||
}
|
||||
|
||||
// Draw dot for self avatar position
|
||||
pos_global = gAgent.getPositionGlobal();
|
||||
LLVector3d pos_global = gAgent.getPositionGlobal();
|
||||
pos_map = globalPosToView(pos_global);
|
||||
S32 dot_width = llround(mDotRadius * 2.f);
|
||||
LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage;
|
||||
|
|
@ -617,9 +583,11 @@ void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
|
|||
createObjectImage();
|
||||
}
|
||||
|
||||
LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos )
|
||||
LLVector3 LLNetMap::globalPosToView(const LLVector3d& global_pos)
|
||||
{
|
||||
LLVector3d relative_pos_global = global_pos - gAgentCamera.getCameraPositionGlobal();
|
||||
LLVector3d camera_position = gAgentCamera.getCameraPositionGlobal();
|
||||
|
||||
LLVector3d relative_pos_global = global_pos - camera_position;
|
||||
LLVector3 pos_local;
|
||||
pos_local.setVec(relative_pos_global); // convert to floats from doubles
|
||||
|
||||
|
|
@ -657,7 +625,7 @@ void LLNetMap::drawRing(const F32 radius, const LLVector3 pos_map, const LLUICol
|
|||
void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,
|
||||
BOOL draw_arrow )
|
||||
{
|
||||
LLVector3 pos_local = globalPosToView( pos_global );
|
||||
LLVector3 pos_local = globalPosToView(pos_global);
|
||||
if( (pos_local.mV[VX] < 0) ||
|
||||
(pos_local.mV[VY] < 0) ||
|
||||
(pos_local.mV[VX] >= getRect().getWidth()) ||
|
||||
|
|
@ -815,8 +783,8 @@ BOOL LLNetMap::handleToolTipAgent(const LLUUID& avatar_id)
|
|||
LLVector3d delta = otherPosition - myPosition;
|
||||
F32 distance = (F32)delta.magVec();
|
||||
|
||||
// If avatar is >1020, the value for Z is returned as 0
|
||||
bool isHigher1020mBug = (otherPosition[VZ] == 0.0);
|
||||
// If avatar is >1020, the value for Z is returned as 0 (legacy) or 1020 (new)
|
||||
bool isHigher1020mBug = (otherPosition[VZ] == COARSEUPDATE_MAX_Z || otherPosition[VZ] == 0.0);
|
||||
|
||||
// Ansariel: Try to get distance from the nearby people panel
|
||||
// aka radar. This usually contains better data,
|
||||
|
|
@ -827,11 +795,13 @@ BOOL LLNetMap::handleToolTipAgent(const LLUUID& avatar_id)
|
|||
LLAvatarListItem* avatar_list_item = ((LLPanelPeople*)panel_people)->getNearbyList()->getAvatarListItem(avatar_id);
|
||||
if (avatar_list_item != NULL)
|
||||
{
|
||||
distance = avatar_list_item->getRange();
|
||||
F32 radar_distance = avatar_list_item->getRange();
|
||||
|
||||
// If avatar is >1020m and no viewer object exists,
|
||||
// it is beyond far clip, so the distance value is wrong!
|
||||
isHigher1020mBug = (isHigher1020mBug && gObjectList.findObject(avatar_id) == NULL);
|
||||
if (isHigher1020mBug && radar_distance > -1.f)
|
||||
{
|
||||
distance = radar_distance;
|
||||
isHigher1020mBug = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -983,7 +983,7 @@ void LLPanelPeople::updateNearbyList()
|
|||
av->setAvatarName(avName); // maintain compatibility with underlying list, deprecated
|
||||
U32 lastZOffsetTime = av->getLastZOffsetTime();
|
||||
F32 avZOffset = av->getZOffset();
|
||||
if (avPos[VZ] < 0.1) // if our official z position is 0.0, we need a correction.
|
||||
if (avPos[VZ] < 0.1 || avPos[VZ] == 1020.f) // if our official z position is 0.0 (legacy) or 1020 (new), we need a correction.
|
||||
{
|
||||
// set correction if we have it
|
||||
if (avZOffset > 0.1)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public:
|
|||
protected:
|
||||
LLSideTrayTab(const Params& params);
|
||||
|
||||
void dock(LLFloater* floater_tab);
|
||||
void dock(bool app_quitting, LLFloater* floater_tab); // LO: Fix for FIRE-2613: sidebar tabs and floaters not remembering being open/torn off
|
||||
void undock(LLFloater* floater_tab);
|
||||
|
||||
LLSideTray* getSideTray();
|
||||
|
|
@ -87,7 +87,7 @@ public:
|
|||
const std::string& getTabTitle() const { return mTabTitle;}
|
||||
|
||||
void onOpen (const LLSD& key);
|
||||
void toggleTabDocked(bool toggle_floater = true);
|
||||
void toggleTabDocked(bool app_quitting = false, bool toggle_floater = true); // LO: Fix for FIRE-2613: sidebar tabs and floaters not remembering being open/torn off
|
||||
void setDocked(bool dock);
|
||||
bool isDocked() const;
|
||||
void minimizeTab();
|
||||
|
|
|
|||
|
|
@ -1210,34 +1210,13 @@ void send_agent_resume()
|
|||
LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3d& region_origin)
|
||||
// [/SL:KB]
|
||||
{
|
||||
// Ansariel: The old way of unpacking does not work properly and
|
||||
// sometimes wrong values.
|
||||
/*
|
||||
LLVector3d pos_global;
|
||||
LLVector3 pos_local;
|
||||
U8 bits;
|
||||
LLVector3d pos_local;
|
||||
|
||||
bits = compact_local & 0xFF;
|
||||
pos_local.mV[VZ] = F32(bits) * 4.f;
|
||||
compact_local >>= 8;
|
||||
pos_local.mdV[VZ] = (compact_local & 0xFFU) * 4;
|
||||
pos_local.mdV[VY] = (compact_local >> 8) & 0xFFU;
|
||||
pos_local.mdV[VX] = (compact_local >> 16) & 0xFFU;
|
||||
|
||||
bits = compact_local & 0xFF;
|
||||
pos_local.mV[VY] = (F32)bits;
|
||||
compact_local >>= 8;
|
||||
|
||||
bits = compact_local & 0xFF;
|
||||
pos_local.mV[VX] = (F32)bits;
|
||||
|
||||
pos_global.setVec( pos_local );
|
||||
pos_global += region_origin;
|
||||
return pos_global;
|
||||
*/
|
||||
|
||||
LLVector3d pos_global(region_origin);
|
||||
pos_global.mdV[VZ] += F64(compact_local & 0xFF) * 4.f;
|
||||
pos_global.mdV[VY] += F64((compact_local >> 8) & 0xFF);
|
||||
pos_global.mdV[VX] += F64((compact_local >> 16) & 0xFF);
|
||||
return pos_global;
|
||||
return region_origin + pos_local;
|
||||
}
|
||||
|
||||
void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positions, const LLVector3d& relative_to, F32 radius) const
|
||||
|
|
@ -1258,24 +1237,17 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
|
|||
iter != LLCharacter::sInstances.end(); ++iter)
|
||||
{
|
||||
LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
|
||||
if(!pVOAvatar->isDead() && !pVOAvatar->isSelf())
|
||||
LLVector3d pos_global = pVOAvatar->getPositionGlobal();
|
||||
LLUUID uuid = pVOAvatar->getID();
|
||||
if( !pVOAvatar->isDead() &&
|
||||
!pVOAvatar->isSelf() &&
|
||||
!uuid.isNull() &&
|
||||
dist_vec_squared(pos_global, relative_to) <= radius_squared &&
|
||||
positions != NULL &&
|
||||
avatar_ids != NULL)
|
||||
{
|
||||
LLUUID uuid = pVOAvatar->getID();
|
||||
if(!uuid.isNull())
|
||||
{
|
||||
LLVector3d pos_global = pVOAvatar->getPositionGlobal();
|
||||
if(dist_vec_squared(pos_global, relative_to) <= radius_squared)
|
||||
{
|
||||
if(positions != NULL)
|
||||
{
|
||||
positions->push_back(pos_global);
|
||||
}
|
||||
if(avatar_ids !=NULL)
|
||||
{
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
positions->push_back(pos_global);
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
}
|
||||
// region avatars added for situations where radius is greater than RenderFarClip
|
||||
|
|
@ -1292,13 +1264,13 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
|
|||
{
|
||||
LLUUID uuid = regionp->mMapAvatarIDs.get(i);
|
||||
// if this avatar doesn't already exist in the list, add it
|
||||
if(uuid.notNull() && avatar_ids!=NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end())
|
||||
if(uuid.notNull() && avatar_ids != NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end())
|
||||
{
|
||||
if(positions != NULL)
|
||||
{
|
||||
positions->push_back(pos_global);
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
avatar_ids->push_back(uuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ LLUIImagePtr LLWorldMapView::sAvatarYouLargeImage = NULL;
|
|||
LLUIImagePtr LLWorldMapView::sAvatarLevelImage = NULL;
|
||||
LLUIImagePtr LLWorldMapView::sAvatarAboveImage = NULL;
|
||||
LLUIImagePtr LLWorldMapView::sAvatarBelowImage = NULL;
|
||||
LLUIImagePtr LLWorldMapView::sAvatarHeightUnknownImage = NULL;
|
||||
LLUIImagePtr LLWorldMapView::sAvatarUnknownImage = NULL;
|
||||
|
||||
LLUIImagePtr LLWorldMapView::sTelehubImage = NULL;
|
||||
LLUIImagePtr LLWorldMapView::sInfohubImage = NULL;
|
||||
|
|
@ -125,7 +125,9 @@ void LLWorldMapView::initClass()
|
|||
sAvatarLevelImage = LLUI::getUIImage("map_avatar_32.tga");
|
||||
sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_32.tga");
|
||||
sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_32.tga");
|
||||
sAvatarHeightUnknownImage = LLUI::getUIImage("map_avatar_unknown.tga");
|
||||
// <FS:Ansariel> Use our own, established indicator
|
||||
//sAvatarUnknownImage = LLUI::getUIImage("map_avatar_unknown_32.tga");
|
||||
sAvatarUnknownImage = LLUI::getUIImage("map_avatar_unknown.tga");
|
||||
|
||||
sHomeImage = LLUI::getUIImage("map_home.tga");
|
||||
sTelehubImage = LLUI::getUIImage("map_telehub.tga");
|
||||
|
|
@ -158,7 +160,7 @@ void LLWorldMapView::cleanupClass()
|
|||
sAvatarLevelImage = NULL;
|
||||
sAvatarAboveImage = NULL;
|
||||
sAvatarBelowImage = NULL;
|
||||
sAvatarHeightUnknownImage = NULL;
|
||||
sAvatarUnknownImage = NULL;
|
||||
|
||||
sTelehubImage = NULL;
|
||||
sInfohubImage = NULL;
|
||||
|
|
@ -1215,23 +1217,26 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,
|
|||
const LLColor4& color,
|
||||
F32 relative_z,
|
||||
F32 dot_radius,
|
||||
bool heightUnknown) // Ansariel: For drawing unknown height indicator
|
||||
bool unknown_relative_z)
|
||||
{
|
||||
const F32 HEIGHT_THRESHOLD = 7.f;
|
||||
LLUIImagePtr dot_image = sAvatarLevelImage;
|
||||
|
||||
// Ansariel: If height is unknown, draw our special icon
|
||||
if (heightUnknown)
|
||||
if (unknown_relative_z)
|
||||
{
|
||||
dot_image = sAvatarHeightUnknownImage;
|
||||
dot_image = sAvatarUnknownImage;
|
||||
}
|
||||
else if(relative_z < -HEIGHT_THRESHOLD)
|
||||
else
|
||||
{
|
||||
dot_image = sAvatarBelowImage;
|
||||
}
|
||||
else if(relative_z > HEIGHT_THRESHOLD)
|
||||
{
|
||||
dot_image = sAvatarAboveImage;
|
||||
if(relative_z < -HEIGHT_THRESHOLD)
|
||||
{
|
||||
dot_image = sAvatarBelowImage;
|
||||
}
|
||||
else if(relative_z > HEIGHT_THRESHOLD)
|
||||
{
|
||||
dot_image = sAvatarAboveImage;
|
||||
}
|
||||
}
|
||||
S32 dot_width = llround(dot_radius * 2.f);
|
||||
dot_image->draw(llround(x_pixels - dot_radius),
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ public:
|
|||
const LLColor4& color,
|
||||
F32 relative_z = 0.f,
|
||||
F32 dot_radius = 3.f,
|
||||
bool heightUnknown = false); // Ansariel: For drawing unknown height indicator
|
||||
bool reached_max_z = false);
|
||||
static void drawIconName(F32 x_pixels,
|
||||
F32 y_pixels,
|
||||
const LLColor4& color,
|
||||
|
|
@ -139,7 +139,7 @@ public:
|
|||
static LLUIImagePtr sAvatarLevelImage;
|
||||
static LLUIImagePtr sAvatarAboveImage;
|
||||
static LLUIImagePtr sAvatarBelowImage;
|
||||
static LLUIImagePtr sAvatarHeightUnknownImage;
|
||||
static LLUIImagePtr sAvatarUnknownImage;
|
||||
|
||||
static LLUIImagePtr sTelehubImage;
|
||||
static LLUIImagePtr sInfohubImage;
|
||||
|
|
|
|||
|
|
@ -240,7 +240,8 @@ void ParticleEditor::onParameterChange()
|
|||
if(mTexture->getID()==IMG_DEFAULT || mTexture->getID().isNull())
|
||||
mTexture=mDefaultParticleTexture;
|
||||
|
||||
mParticles.mBurstRate=mBurstRateSpinner->getValueF32();
|
||||
// limit burst rate to 0.01 to avoid internal freeze, script still gets the real value
|
||||
mParticles.mBurstRate=llmax(0.01f,mBurstRateSpinner->getValueF32());
|
||||
mParticles.mBurstPartCount=mBurstCountSpinner->getValue().asInteger();
|
||||
mParticles.mBurstRadius=mBurstRadiusSpinner->getValueF32();
|
||||
mParticles.mInnerAngle=mAngleBeginSpinner->getValueF32();
|
||||
|
|
|
|||
|
|
@ -1955,6 +1955,135 @@ llGetEnv(string name)
|
|||
Returns a string with the requested data about the region
|
||||
</string>
|
||||
|
||||
<!-- FS:Ansariel: LSL function tooltip help texts manually added -->
|
||||
<string name="LSLTipText_llSetMemoryLimit" translate="false">
|
||||
integer llSetMemoryLimit(integer limit)
|
||||
Request limit bytes to be reserved for this script.
|
||||
Returns a success/failure flag (STATUS_OK when sucessful, another of the STATUS_* flags on failure) for whether the memory limit was set.
|
||||
Only relevant for Mono-compiled scripts.
|
||||
</string>
|
||||
<string name="LSLTipText_llGetMemoryLimit" translate="false">
|
||||
integer llGetUsedMemory()
|
||||
Get the maximum memory a script can use.
|
||||
Returns the integer amount of memory the script can use in bytes.
|
||||
</string>
|
||||
<string name="LSLTipText_llSetLinkMedia" translate="false">
|
||||
integer llSetLinkMedia(integer link, integer face, list params)
|
||||
Set the media params for a particular face on the 'link'ed prim without a delay.
|
||||
Returns an integer that is flag (STATUS_OK when sucessful, another of the STATUS_* flags on failure) which details the success/failure of the operation(s).
|
||||
Takes the same parameters as llSetPrimMediaParams()
|
||||
</string>
|
||||
<string name="LSLTipText_llGetLinkMedia" translate="false">
|
||||
list llGetLinkMedia(integer link, integer face, list params)
|
||||
Get the media params for a particular face on a 'link'ed prim(s), given the desired list of named params.
|
||||
Returns a list of values in the order requested (empty list if no media exists on the face).
|
||||
Takes the same parameters as llGetPrimMediaParams()
|
||||
</string>
|
||||
<string name="LSLTipText_llClearLinkMedia" translate="false">
|
||||
integer llClearLinkMedia(integer link, integer face)
|
||||
Clears (deletes) the media and all params from the given face on the linked prim(s).
|
||||
Returns an integer that is flag (STATUS_OK when sucessful, another of the STATUS_* flags on failure) which details the success/failure of the operation(s).
|
||||
</string>
|
||||
<string name="LSLTipText_llSetLinkCamera" translate="false">
|
||||
llSetLinkCamera(integer link, vector eye, vector at)
|
||||
Sets the camera eye offset, and the offset that camera is looking at, for avatars that sit on the linked prim.
|
||||
The two vector parameters are offsets relative to the object's center and expressed in local coordinates.
|
||||
</string>
|
||||
<string name="LSLTipText_llSetContentType" translate="false">
|
||||
llSetContentType(key request_id, integer content_type)
|
||||
Set the Internet media type of an LSL HTTP server response.
|
||||
content_type may be one of CONTENT_TYPE_TEXT (default) "text/plain", or CONTENT_TYPE_HTML "text/html", only valid for embedded browsers on content owned by the person viewing. Falls back to "text/plain" otherwise.
|
||||
</string>
|
||||
<string name="LSLTipText_llLinkSitTarget" translate="false">
|
||||
llLinkSitTarget(integer link, vector offset, rotation rot)
|
||||
Set the sit location for the 'link'ed prim(s). The sit location is relative to the prim's position and rotation.
|
||||
Equivalent to calling llSitTarget on link prim(s) in the link set.
|
||||
</string>
|
||||
<string name="LSLTipText_llAvatarOnLinkSitTarget" translate="false">
|
||||
key llAvatarOnLinkSitTarget(integer link)
|
||||
Returns a key that is the UUID of the user seated on the 'link'ed prim.
|
||||
Equivalent to calling llAvatarOnSitTarget on link prim in the link set.
|
||||
</string>
|
||||
<string name="LSLTipText_llSetVelocity" translate="false">
|
||||
llSetVelocity(vector force, integer local)
|
||||
Applies velocity with 'force' to object and 'local' a boolean (if TRUE, force is treated as a local directional vector instead of region directional vector).
|
||||
</string>
|
||||
<string name="LSLTipText_llSetAngularVelocity" translate="false">
|
||||
llSetAngularVelocity(vector force, integer local)
|
||||
Applies rotational velocity with 'force' to object and 'local' a boolean (if TRUE uses local axis, if FALSE uses region axis).
|
||||
</string>
|
||||
<string name="LSLTipText_llCastRay" translate="false">
|
||||
list llCastRay(vector start, vector end, list options)
|
||||
Cast a ray from start to end and report collision data for intersections with objects.
|
||||
</string>
|
||||
<string name="LSLTipText_llGetMassMKS" translate="false">
|
||||
float llGetMassMKS()
|
||||
Returns a float that is the mass in kilograms of the object the script is attached to.
|
||||
</string>
|
||||
<string name="LSLTipText_llSetPhysicsMaterial" translate="false">
|
||||
llSetPhysicsMaterial(integer material_bits, float gravity_multiplier, float restitution, float friction, float density)
|
||||
Sets the physics properties of the object the script is attached to.
|
||||
material_bits is a bitwise combination of DENSITY, FRICTION, RESTITUTION and GRAVITY_MULTIPLIER, specifying which floats to actually apply.
|
||||
</string>
|
||||
<string name="LSLTipText_llGetPhysicsMaterial" translate="false">
|
||||
list llGetPhysicsMaterial()
|
||||
Returns a list of the object physics properties: [ float gravity_multiplier, float restitution, float friction, float density ]
|
||||
</string>
|
||||
<string name="LSLTipText_llManageEstateAccess" translate="false">
|
||||
integer llManageEstateAccess(integer action, key id)
|
||||
To add or remove agents from the estate's agent access or ban lists or groups from the estate's group access list.
|
||||
Only works for objects owned by the Estate Owner or an Estate Manager.
|
||||
Returns TRUE if successful and FALSE if throttled, on invalid action, on invalid or null id, or if object owner is not allowed to manage the estate.
|
||||
'action' can be any of: ESTATE_ACCESS_ALLOWED_[AGENT/GROUP]_[ADD/REMOVE] or ESTATE_ACCESS_BANNED_AGENT_[ADD/REMOVE]
|
||||
</string>
|
||||
<string name="LSLTipText_llSetKeyframedMotion" translate="false">
|
||||
llSetKeyframedMotion(list keyframes, list options)
|
||||
Specify a list of times, positions, and orientations to be followed by an object.
|
||||
The object will be smoothly moved between keyframes by the simulator.
|
||||
list keyframes: strided keyframe list of the form:
|
||||
- vector position (optional via KFM_TRANSLATION and KFM_DATA)
|
||||
- rotation orientation (optional via KFM_ROTATION and KFM_DATA)
|
||||
- float time
|
||||
list options: modifiers among:
|
||||
- KFM_COMMAND followed by one of KFM_CMD_PLAY, KFM_CMD_STOP, KFM_CMD_PAUSE.
|
||||
- KFM_MODE followed by one of KFM_FORWARD, KFM_LOOP, KFM_PING_PONG, KFM_REVERSE.
|
||||
- KFM_DATA followed by KFM_ROTATION or KFM_TRANSLATION.
|
||||
Note that if KFM_COMMAND is provided in the options list, it must be the only option in the list, and cannot be specified in the same function call that sets the keyframes list.
|
||||
</string>
|
||||
<string name="LSLTipText_llTransferLindenDollars" translate="false">
|
||||
key llTransferLindenDollars(key id, integer amount)
|
||||
Attempt to transfer amount of L$ from the owner of the object to 'id'. Requires PERMISSION_DEBIT.
|
||||
Returns a key used in a matching transaction_result() event for the success or failure of the transfer.
|
||||
</string>
|
||||
<string name="LSLTipText_llGetParcelMusicURL" translate="false">
|
||||
string llGetParcelMusicURL()
|
||||
Returns the music URL of the object's current parcel if the script owner also owns the parcel.
|
||||
</string>
|
||||
<string name="LSLTipText_llScriptProfiler" translate="false">
|
||||
llScriptProfiler(integer flags)
|
||||
Enables or disables the scripts profiling state.
|
||||
Flags can be either of PROFILE_SCRIPT_NONE or PROFILE_SCRIPT_MEMORY.
|
||||
Applies to Mono-compiled scripts only.
|
||||
</string>
|
||||
<string name="LSLTipText_llGetSPMaxMemory" translate="false">
|
||||
integer llGetSPMaxMemory()
|
||||
Returns the integer of the most bytes used while llScriptProfiler() was last active.
|
||||
Only relevant for Mono-compiled scripts.
|
||||
</string>
|
||||
<string name="LSLTipText_llGetUsedMemory" translate="false">
|
||||
integer llGetUsedMemory()
|
||||
Returns the integer of the number of bytes of memory currently in use by the script.
|
||||
Only relevant for Mono-compiled scripts.
|
||||
</string>
|
||||
<string name="LSLTipText_llSetAngularVelocity" translate="false">
|
||||
llSetAngularVelocity(vector force, integer local)
|
||||
Applies rotational velocity to object.
|
||||
</string>
|
||||
<string name="LSLTipText_llSetRegionPos" translate="false">
|
||||
integer llSetRegionPos(vector position)
|
||||
Tries to moves the entire object so that the root prim is within 0.1m of position.
|
||||
</string>
|
||||
<!-- END FS:Ansariel: LSL function tooltip help texts manually added -->
|
||||
|
||||
<!-- Avatar busy/away mode -->
|
||||
<string name="AvatarSetNotAway">Not Away</string>
|
||||
|
|
|
|||
Loading…
Reference in New Issue