From 9e372a9a482b3d2a03919341a25ec288d1b6dfcb Mon Sep 17 00:00:00 2001 From: Ramzi Ramey Date: Fri, 2 Oct 2009 18:22:50 +0000 Subject: DEV-40452 Correct linguistic consistency in the LSL editor tooltips - Set these tooltips for translate="false". We have decided not to localize these tooltips at this time. --- indra/newview/skins/default/xui/en/strings.xml | 710 +++++++++++++------------ 1 file changed, 356 insertions(+), 354 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 1e85cac539..a34a143abc 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -301,1450 +301,1452 @@ Choose Directory - + + Sleeps script for [SLEEP_TIME] seconds. - + float llSin(float theta) Returns the sine of theta (theta in radians) - + float llCos(float theta) Returns the cosine of theta (theta in radians) - + float llTan(float theta) Returns the tangent of theta (theta in radians) - + float llAtan2(float y, float x) Returns the arctangent2 of y, x - + float llSqrt(float val) Returns the square root of val, or returns 0 and triggers a Math Error for imaginary results - + float llPow(float base, float exponent) Returns the base raised to the power exponent, or returns 0 and triggers Math Error for imaginary results - + integer llAbs(integer val) Returns the positive version of val - + float llFabs(float val) Returns the positive version of val - + float llFrand(float mag) Returns a pseudo random number in the range [0,mag) or (mag,0] - + integer llFloor(float val) Returns largest integer value <= val - + integer llCeil(float val) Returns smallest integer value >= val - + integer llRound(float val) Returns val rounded to the nearest integer - + float llVecMag(vector v) Returns the magnitude of v - + vector llVecNorm(vector v) Returns the v normalized - + float llVecDist(vector v1, vector v2) Returns the 3D distance between v1 and v2 - + vector llRot2Euler(rotation q) Returns the Euler representation (roll, pitch, yaw) of q - + rotation llEuler2Rot(vector v) Returns the rotation representation of Euler Angles v - + rotation llAxes2Rot(vector fwd, vector left, vector up) Returns the rotation defined by the coordinate axes - + vector llRot2Fwd(rotation q) Returns the forward vector defined by q - + vector llRot2Left(rotation q) Returns the left vector defined by q - + vector llRot2Up(rotation q) Returns the up vector defined by q - + rotation llRotBetween(vector v1, vector v2) Returns the rotation to rotate v1 to v2 - + llWhisper(integer channel, string msg) Whispers the text of msg on channel - + llSay(integer channel, string msg) Says the text of msg on channel - + llShout(integer channel, string msg) Shouts the text of msg on channel - + integer llListen(integer channel, string name, key id, string msg) Sets a callback for msg on channel from name and id (name, id, and/or msg can be empty) and returns an identifier that can be used to deactivate or remove the listen - + llListenControl(integer number, integer active) Makes a listen event callback active or inactive - + llListenRemove(integer number) Removes listen event callback number - + llSensor(string name, key id, integer type, float range, float arc) Performs a single scan for name and id with type (AGENT, ACTIVE, PASSIVE, and/or SCRIPTED) within range meters and arc radians of forward vector (name, id, and/or keytype can be empty or 0) - + llSensorRepeat(string name, key id, integer type, float range, float arc, float rate) Sets a callback for name and id with type (AGENT, ACTIVE, PASSIVE, and/or SCRIPTED) within range meters and arc radians of forward vector (name, id, and/or keytype can be empty or 0) and repeats every rate seconds - + llSensorRemove() Removes the sensor setup by llSensorRepeat - + string llDetectedName(integer number) Returns the name of detected object number (returns empty string if number is not a valid sensed object) - + key llDetectedKey(integer number) Returns the key of detected object number (returns empty key if number is not a valid sensed object) - + key llDetectedOwner(integer number) Returns the key of detected object's owner (returns empty key if number is not a valid sensed object) - + integer llDetectedType(integer number) Returns the type (AGENT, ACTIVE, PASSIVE, SCRIPTED) of detected object (returns 0 if number is not a valid sensed object) - + vector llDetectedPos(integer number) Returns the position of detected object number (returns <0,0,0> if number is not a valid sensed object) - + vector llDetectedVel(integer number) Returns the velocity of detected object number (returns <0,0,0> if number is not a valid sensed object) - + vector llDetectedGrab(integer number) Returns the grab offset of the user touching object (returns <0,0,0> if number is not a valid sensed object) - + rotation llDetectedRot(integer number) Returns the rotation of detected object number (returns <0,0,0,1> if number is not a valid sensed object) - + integer llDetectedGroup(integer number) Returns TRUE if detected object is part of same group as owner - + integer llDetectedLinkNumber(integer number) Returns the link position of the triggered event for touches and collisions only - + llDie() Deletes the object - + float llGround(vector offset) Returns the ground height below the object position + offset - + float llCloud(vector offset) Returns the cloud density at the object position + offset - + vector llWind(vector offset) Returns the wind velocity at the object position + offset - + llSetStatus(integer status, integer value) Sets status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) to value - + integer llGetStatus(integer status) Returns value of status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) - + llSetScale(vector scale) Sets the scale of the prim - + vector llGetScale() Returns the scale of the prim - + llSetColor(vector color, integer face) Sets the color on face of the prim - + float llGetAlpha(integer face) Returns the alpha of face - + llSetAlpha(float alpha, integer face) Sets the alpha on face - + vector llGetColor(integer face) Returns the color on face - + llSetTexture(string texture, integer face) Sets the texture of face or ALL_SIDES - + llScaleTexture(float u, float v, integer face) Sets the texture u & v scales for the chosen face or ALL_SIDES - + llOffsetTexture(float u, float v, integer face) Sets the texture u & v offsets for the chosen face or ALL_SIDES - + llRotateTexture(float rotation, integer face) Sets the texture rotation for the chosen face - + string llGetTexture(integer face) Returns a string that is the texture on face (the inventory name if it is a texture in the prim's inventory, otherwise the key) - + llSetPos(vector pos) Moves the object or prim towards pos without using physics (if the script isn't physical) - + vector llGetPos() Returns the position of the task in region coordinates - + vector llGetLocalPos() Returns the position relative to the root - + llSetRot(rotation rot) Sets the rotation - + rotation llGetRot() Returns the rotation relative to the region's axes - + rotation llGetLocalRot() Returns the rotation local to the root - + llSetForce(vector force, integer local) Applies force to the object (if the script is physical), in local coords if local == TRUE - + vector llGetForce() Returns the force (if the script is physical) - + integer llTarget(vector position, float range) Sets positions within range of position as a target and return an ID for the target - + llTargetRemove(integer number) Removes positional target number registered with llTarget - + integer llRotTarget(rotation rot, float error) Set rotations with error of rot as a rotational target and return an ID for the rotational target - + llRotTargetRemove(integer number) Removes rotational target number registered with llRotTarget - + llMoveToTarget(vector target, float tau) Critically damps to target in tau seconds (if the script is physical) - + llStopMoveToTarget() Stops critically damped motion - + llApplyImpulse(vector force, integer local) Applies impulse to object (if the script is physical), in local coords if local == TRUE - + llApplyRotationalImpulse(vector force, integer local) Applies rotational impulse to object (if the script is physical), in local coords if local == TRUE - + llSetTorque(vector torque, integer local) Sets the torque of object (if the script is physical), in local coords if local == TRUE - + vector llGetTorque() Returns the torque (if the script is physical) - + llSetForceAndTorque(vector force, vector torque, integer local) Sets the force and torque of object (if the script is physical), in local coords if local == TRUE - + vector llGetVel() Returns the velocity of the object - + vector llGetAccel() Returns the acceleration of the object relative to the region's axes - + vector llGetOmega() Returns the rotation velocity in radians per second - + float llGetTimeOfDay() Returns the time in seconds since [SECOND_LIFE] server midnight or since region up-time, whichever is smaller - + float llGetWallclock() Returns the time in seconds since midnight California Pacific time (PST/PDT) - + float llGetTime() Returns the time in seconds since the last region reset, script reset, or call to either llResetTime or llGetAndResetTime - + llResetTime() Sets the script timer to zero - + float llGetAndResetTime() Returns the script time in seconds and then resets the script timer to zero - + llSound(string sound, float volume, integer queue, integer loop) Plays sound at volume and whether it should loop or not - + llPlaySound(string sound, float volume) Plays attached sound once at volume (0.0 - 1.0) - + llLoopSound(string sound, float volume) Plays attached sound looping indefinitely at volume (0.0 - 1.0) - + llLoopSoundMaster(string sound, float volume) Plays attached sound looping at volume (0.0 - 1.0), declares it a sync master - + llLoopSoundSlave(string sound, float volume) Plays attached sound looping at volume (0.0 - 1.0), synced to most audible sync master - + llPlaySoundSlave(string sound, float volume) Plays attached sound once at volume (0.0 - 1.0), synced to next loop of most audible sync master - + llTriggerSound(string sound, float volume) Plays sound at volume (0.0 - 1.0), centered at but not attached to object - + llStopSound() Stops currently attached sound - + llPreloadSound(string sound) Preloads a sound on viewers within range - + string llGetSubString(string src, integer start, integer end) Returns the indicated substring - + string llDeleteSubString(string src, integer start, integer end) Removes the indicated substring and returns the result - + string llInsertString(string dst, integer position, string src) Returns a destination string dst with the string src inserted starting at position pos - + string llToUpper(string src) Returns a string that is src with all upper-case characters - + string llToLower(string src) Returns a string that is src with all lower-case characters - + llGiveMoney(key destination, integer amount) Transfers amount of L$ from script owner to destination - + llMakeExplosion(integer particles, float scale, float vel, float lifetime, float arc, string texture, vector offset) Makes a round explosion of particles - + llMakeFountain(integer particles, float scale, float vel, float lifetime, float arc, integer bounce, string texture, vector offset, float bounce_offset) Makes a fountain of particles - + llMakeSmoke(integer particles, float scale, float vel, float lifetime, float arc, string texture, vector offset) Makes smoke like particles - + llMakeFire(integer particles, float scale, float vel, float lifetime, float arc, string texture, vector offset) Makes fire like particles - + llRezObject(string inventory, vector pos, vector vel, rotation rot, integer param) Instantiates owner's inventory object at pos with velocity vel and rotation rot with start parameter param - + llLookAt(vector target, float strength, float damping) Causes object to point its up axis (positive z) towards target, while keeping its forward axis (positive x) below the horizon - + llStopLookAt() Stops causing object to point at a target - + llSetTimerEvent(float sec) Causes the timer event to be triggered a maximum of once every sec seconds - + llSleep(float sec) Puts the script to sleep for sec seconds - + float llGetMass() Returns the mass of object that the script is attached to - + llCollisionFilter(string name, key id, integer accept) Sets the collision filter, exclusively or inclusively. If accept == TRUE, only accept collisions with objects name and id (either is optional), otherwise with objects not name or id - + llTakeControls(integer controls, integer accept, integer pass_on) Allows for intercepting keyboard and mouse clicks from the agent the script has permissions for - + llReleaseControls() Stops taking inputs that were taken with llTakeControls - + llAttachToAvatar(integer attach_point) Attaches the object to the avatar who has granted permission to the script - + llDetachFromAvatar() Detaches object from avatar - + llTakeCamera(key avatar) Moves avatar's viewpoint to task - + llReleaseCamera(key avatar) Returns camera to agent avatar - + key llGetOwner() Returns the object owner's UUID - + llInstantMessage(key user, string message) Sends the specified string as an Instant Message to the user - + llEmail(string address, string subject, string message) Sends an email to address with the subject and message - + llGetNextEmail(string address, string subject) Gets the next waiting email that comes from address, with specified subject - + key llGetKey() Returns the key of the prim the script is attached to - + llSetBuoyancy(float buoyancy) Sets the buoyancy of the task or object (0 is disabled, < 1.0 sinks, 1.0 floats, > 1.0 rises) - + llSetHoverHeight(float height, integer water, float tau) Critically damps to a height above the ground (or water) in tau seconds - + llStopHover() Stops hovering to a height - + llMinEventDelay(float delay) Sets the minimum time between events being handled - + llSoundPreload(string sound) Preloads a sound on viewers within range - + llRotLookAt(rotation target, float strength, float damping) Causes object name to point its forward axis towards target - + integer llStringLength(string str) Returns the length of string - + llStartAnimation(string anim) Starts animation anim for agent that granted PERMISSION_TRIGGER_ANIMATION if the permission has not been revoked - + llStopAnimation(string anim) Stops animation anim for agent that granted permission - + llPointAt(vector pos) Makes agent that owns object point at pos - + llStopPointAt() Stops pointing agent that owns object - + llTargetOmega(vector axis, float spinrate, float gain) Rotates the object around axis at spinrate with strength gain - + integer llGetStartParameter() Returns an integer that is the script start/rez parameter - + llGodLikeRezObject(key inventory, vector pos) Rezzes directly off of UUID if owner is in God Mode - + llRequestPermissions(key agent, integer perm) Asks the agent for permission to run certain classes of functions - + key llGetPermissionsKey() Returns the key of the avatar that last granted permissions to the script - + integer llGetPermissions() Returns an integer bitfield with the permissions that have been granted - + integer llGetLinkNumber() Returns the link number of the prim containing the script (0 means not linked, 1 the prim is the root, 2 the prim is the first child, etc) - + llSetLinkColor(integer linknumber, vector color, integer face) Sets face to color if a task exists in the link chain at linknumber - + llCreateLink(key target, integer parent) Attempts to link the script's object with the target (requires that PERMISSION_CHANGE_LINKS be granted). If parent == TRUE, then the script's object becomes the root - + llBreakLink(integer linknum) Delinks the prim with the given link number in a linked object set (requires that PERMISSION_CHANGE_LINKS be granted) - + llBreakAllLinks() Delinks all prims in the link set (requires that PERMISSION_CHANGE_LINKS be granted) - + key llGetLinkKey(integer linknumber) Returns the key of the linked prim linknumber - + string llGetLinkName(integer linknumber) Returns the name of linknumber in a link set - + integer llGetInventoryNumber(integer type) Returns the number of items of a given type (INVENTORY_* flag) in the prim's inventory - + string llGetInventoryName(integer type, integer number) Returns the name of the inventory item number of a given type - + llSetScriptState(string name, integer run) Sets the running state of the specified script - + float llGetEnergy() Returns how much energy is in the object as a percentage of maximum - + llGiveInventory(key destination, string inventory) Gives inventory to destination - + llRemoveInventory(string item) Removes the named inventory item - + llSetText(string text, vector color, float alpha) Displays text that hovers over the prim with specific color and translucency specified with alpha - + float llWater(vector offset) Returns the water height below the object position + offset - + llPassTouches(integer pass) If pass == TRUE, touches are passed from children on to parents - + key llRequestAgentData(key id, integer data) Requests data about agent id. When data is available the dataserver event will be raised. - + key llRequestInventoryData(string name) Requests data from object's inventory object. When data is available the dataserver event will be raised. - + llSetDamage(float damage) Sets the amount of damage that will be done when this object hits an avatar. - + llTeleportAgentHome(key id) Teleports avatar on the owner's land to their home location without any warning - + llModifyLand(integer action, integer brush) Modifies land using the specified action on the specified brush size of land - + llCollisionSound(string impact_sound, float impact_volume) Suppresses default collision sounds, replaces default impact sounds with impact_sound at the volume impact_volume - + llCollisionSprite(string impact_sprite) Suppresses default collision sprites, replaces default impact sprite with impact_sprite (use an empty string to just suppress) - + string llGetAnimation(key id) Returns the name of the currently playing locomotion animation for avatar id - + llResetScript() Resets the script - + llMessageLinked(integer linknum, integer num, string str, key id) Allows scripts in the same object to communicate. Triggers a link_message event with the same parameters num, str, and id in all scripts in the prim(s) described by linknum. - + llPushObject(key id, vector impulse, vector ang_impulse, integer local) Applies impulse and ang_impulse to object id - + llPassCollisions(integer pass) If pass == TRUE, collisions are passed from children on to parents (default is FALSE) - + string llGetScriptName() Returns the name of the script that this function is used in - + integer llGetNumberOfSides() Returns the number of faces (or sides) of the prim - + rotation llAxisAngle2Rot(vector axis, float angle) Returns the rotation that is a generated angle about axis - + vector llRot2Axis(rotation rot) Returns the rotation axis represented by rot - + float llRot2Angle(rotation rot) Returns the rotation angle represented by rot - + float llAcos(float val) Returns the arccosine in radians of val - + float llAsin(float val) Returns the arcsine in radians of val - + float llAngleBetween(rotation a, rotation b) Returns angle between rotation a and b - + key llGetInventoryKey(string name) Returns the key that is the UUID of the inventory name - + llAllowInventoryDrop(integer add) If add == TRUE, users without modify permissions can still drop inventory items onto a prim - + vector llGetSunDirection() Returns a normalized vector of the direction of the sun in the region - + vector llGetTextureOffset(integer face) Returns the texture offset of face in the x and y components of a vector - + vector llGetTextureScale(integer side) Returns the texture scale of side in the x and y components of a vector - + float llGetTextureRot(integer side) Returns the texture rotation of side - + integer llSubStringIndex(string source, string pattern) Returns an integer that is the index in source where pattern first appears. (Returns -1 if not found) - + key llGetOwnerKey(key id) Returns the owner of object id - + vector llGetCenterOfMass() Returns the prim's center of mass (unless called from the root prim, where it returns the object's center of mass) - + list llListSort(list src, integer stride, integer ascending) Sorts the list into blocks of stride, in ascending order if ascending == TRUE. The sort order is affected by type. - + integer llGetListLength(list src) Returns the number of elements in the list - + integer llList2Integer(list src, integer index) Copies the integer at index in the list - + float llList2Float(list src, integer index) Copies the float at index in the list - + string llList2String(list src, integer index) Copies the string at index in the list - + key llList2Key(list src, integer index) Copies the key at index in the list - + vector llList2Vector(list src, integer index) Copies the vector at index in the list - + rotation llList2Rot(list src, integer index) Copies the rotation at index in the list - + list llList2List(list src, integer start, integer end) Copies the slice of the list from start to end - + list llDeleteSubList(list src, integer start, integer end) Removes the slice from start to end and returns the remainder of the list - + integer llGetListEntryType(list src, integer index) Returns the type of the index entry in the list (TYPE_INTEGER, TYPE_FLOAT, TYPE_STRING, TYPE_KEY, TYPE_VECTOR, TYPE_ROTATION, or TYPE_INVALID if index is off list) - + string llList2CSV(list src) Creates a string of comma separated values from list - + list llCSV2List(string src) Creates a list from a string of comma separated values - + list llListRandomize(list src, integer stride) Returns a randomized list of blocks of size stride - + list llList2ListStrided(list src, integer start, integer end, integer stride) Copies the strided slice of the list from start to end - + vector llGetRegionCorner() Returns a vector in meters that is the global location of the south-west corner of the region which the object is in - + list llListInsertList(list dest, list src, integer start) Returns a list that contains all the elements from dest but with the elements from src inserted at position start - + integer llListFindList(list src, list test) Returns the index of the first instance of test in src. (Returns -1 if not found) - + string llGetObjectName() Returns the name of the prim which the script is attached to - + llSetObjectName(string name) Sets the prim's name to the name parameter - + string llGetDate() Returns the current date in the UTC time zone in the format YYYY-MM-DD - + integer llEdgeOfWorld(vector pos, vector dir) Checks to see whether the border hit by dir from pos is the edge of the world (has no neighboring region) - + integer llGetAgentInfo(key id) Returns an integer bitfield containing the agent information about id. Returns AGENT_FLYING, AGENT_ATTACHMENTS, AGENT_SCRIPTED, AGENT_SITTING, AGENT_ON_OBJECT, AGENT_MOUSELOOK, AGENT_AWAY, AGENT_BUSY, AGENT_TYPING, AGENT_CROUCHING, AGENT_ALWAYS_RUN, AGENT_WALKING and/or AGENT_IN_AIR. - + llAdjustSoundVolume(float volume) Adjusts volume of attached sound (0.0 - 1.0) - + llSetSoundQueueing(integer queue) Sets whether attached sounds wait for the current sound to finish (If queue == TRUE then queuing is enabled, if FALSE queuing is disabled [default]) - + llSetSoundRadius(float radius) Establishes a hard cut-off radius for audibility of scripted sounds (both attached and triggered) - + string llKey2Name(key id) Returns the name of the prim or avatar specified by id. (The id must be a valid rezzed prim or avatar key in the current simulator, otherwise an empty string is returned.) - + llSetTextureAnim(integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate) Animates the texture on the specified face/faces - + llTriggerSoundLimited(string sound, float volume, vector top_north_east, vector bottom_south_west) Plays sound at volume (0.0 - 1.0), centered at but not attached to object, limited to the box defined by vectors top_north_east and bottom_south_west - + llEjectFromLand(key avatar) Ejects avatar from the parcel - + list llParseString2List(string src, list separators, list spacers) Breaks src into a list, discarding separators, keeping spacers (separators and spacers must be lists of strings, maximum of 8 each) - + integer llOverMyLand(key id) Returns TRUE if id is over land owned by the script owner, otherwise FALSE - + key llGetLandOwnerAt(vector pos) Returns the key of the land owner, returns NULL_KEY if public - + key llGetNotecardLine(string name, integer line) Returns line line of notecard name via the dataserver event - + vector llGetAgentSize(key id) If the avatar is in the same region, returns the size of the bounding box of the requested avatar by id, otherwise returns ZERO_VECTOR - + integer llSameGroup(key id) Returns TRUE if avatar id is in the same region and has the same active group, otherwise FALSE - + key llUnSit(key id) If avatar identified by id is sitting on the object the script is attached to or is over land owned by the object's owner, the avatar is forced to stand up - + vector llGroundSlope(vector offset) Returns the ground slope below the object position + offset - + vector llGroundNormal(vector offset) Returns the ground normal below the object position + offset - + vector llGroundCountour(vector offset) Returns the ground contour direction below the object position + offset - + integer llGetAttached() Returns the object's attachment point, or 0 if not attached - + integer llGetFreeMemory() Returns the number of free bytes of memory the script can use - + string llGetRegionName() Returns the current region name - + float llGetRegionTimeDilation() Returns the current time dilation as a float between 0.0 (full dilation) and 1.0 (no dilation) - + float llGetRegionFPS() Returns the mean region frames per second - + llParticleSystem(list rules) Creates a particle system based on rules. An empty list removes the particle system. List format is [ rule1, data1, rule2, data2 . . . rulen, datan ] - + llGroundRepel(float height, integer water, float tau) Critically damps to height if within height*0.5 of level (either above ground level, or above the higher of land and water if water == TRUE) - + llGiveInventoryList(key target, string folder, list inventory) Gives inventory items to target, creating a new folder to put them in - + llSetVehicleType(integer type) Sets the vehicle to one of the default types - + llSetVehicleFloatParam(integer param, float value) Sets the specified vehicle float parameter - + llSetVehicleVectorParam(integer param, vector vec) Sets the specified vehicle vector parameter - + llSetVehicleVectorParam(integer param, rotation rot) Sets the specified vehicle rotation parameter - + llSetVehicleFlags(integer flags) Sets the enabled bits in 'flags' - + llRemoveVehicleFlags(integer flags) Removes the enabled bits in 'flags' - + llSitTarget(vector offset, rotation rot) Sets the sit location for the prim. If offset == <0,0,0> then the sit target is removed. - + key llAvatarOnSitTarget() If an avatar is seated on the sit target, returns the avatar's key, otherwise NULL_KEY - + llAddToLandPassList(key avatar, float hours) Adds avatar to the land pass list for hours, or indefinitely if hours is 0 - + llSetTouchText(string text) Displays text rather than the default 'Touch' in the pie menu - + llSetSitText(string text) Displays text rather than the default 'Sit Here' in the pie menu - + llSetCameraEyeOffset(vector offset) Sets the camera eye offset for avatars that sit on the object - + llSetCameraAtOffset(vector offset) Sets the point the camera is looking at to offset for avatars that sit on the object - + string llDumpList2String(list src, string separator) Returns the list in a single string, using separator between the entries - + integer llScriptDanger(vector pos) Returns TRUE if pos is over public land, sandbox land, land that doesn't allow everyone to edit and build, or land that doesn't allow outside scripts - + llDialog(key avatar, string message, list buttons, integer chat_channel Shows a dialog box on the avatar's screen with a message and up to 12 buttons. If a button is pressed, the avatar says the text of the button label on chat_channel. - + llVolumeDetect(integer detect) If detect = TRUE, object works much like Phantom, but triggers collision_start and collision_end events when other objects start and stop interpenetrating. Must be applied to the root prim. - + llResetOtherScript(string name) Resets script name - + integer llGetScriptState(string name) Returns TRUE if the script name is running - + DEPRECATED! Please use llRemoteLoadScriptPin instead. - + llSetRemoteScriptAccessPin(integer pin) If pin is set to a non-zero number, allows a prim to have scripts remotely loaded via llRemoteLoadScriptPin when it passes in the correct pin. Otherwise, llRemoteLoadScriptPin is ignored. - + llRemoteLoadScriptPin(key target, string name, integer pin, integer running, integer start_param) Copies script name onto target, if the owner of this scripted object can modify target and is in the same region, and the matching pin is used. If running == TRUE, starts the script with start_param - + llOpenRemoteDataChannel() Creates a channel to listen for XML-RPC calls, and will trigger a remote_data event with channel id once it is available - + key llSendRemoteData(key channel, string dest, integer idata, string sdata) Sends an XML-RPC request to dest through channel with payload of channel (in a string), integer idata and string sdata. Returns a key that is the message_id for the resulting remote_data events. - + llRemoteDataReply(key channel, key message_id, string sdata, integer idata) Sends an XML-RPC reply to message_id on channel with payload of string sdata and integer idata - + llCloseRemoteDataChannel(key channel) Closes XML-RPC channel - + string llMD5String(string src, integer nonce) Returns a string of 32 hex characters that is a RSA Data Security, Inc. MD5 Message-Digest Algorithm of src with nonce - + llSetPrimitiveParams(list rules) Sets the prim's parameters according to rules - + string llStringToBase64(string str) Converts a string to the Base64 representation of the string - + string llBase64ToString(string str) Converts a Base64 string to a conventional string. If the conversion creates any unprintable characters, they are converted to spaces. - + string llXorBase64Strings(string s1, string s2) DEPRECATED! Please use llXorBase64StringsCorrect instead. Incorrectly performs an exclusive or on two Base64 strings and returns a Base64 string. s2 repeats if it is shorter than s1. Retained for backwards compatability. - + llRemoteDataSetRegion() DEPRECATED! Please use llOpenRemoteDataChannel instead. If an object using remote data channels changes regions, you must call this function to reregister the remote data channels. This call is not needed if the prim does not change regions. - + float llLog10(float val) Returns the base 10 logarithm of val. Returns zero if val <= 0. - + float llLog(float val) Returns the natural logarithm of val. Returns zero if val <= 0. - + list llGetAnimationList(key id) Returns a list of keys of playing animations for avatar described by id - + llSetParcelMusicURL(string url) Sets the streaming audio URL for the parcel which the object is on - + vector llGetRootPosition() Returns the position (in region coordinates) of the root prim of the object which the script is attached to - + rotation llGetRootRotation() Returns the rotation (relative to the region) of the root prim of the object which the script is attached to - + string llGetObjectDesc() Returns the description of the prim the script is attached to - + llSetObjectDesc(string name) Sets the prim's description - + key llGetCreator() Returns a key for the creator of the prim - + string llGetTimestamp() Returns the timestamp in the UTC time zone in the format: YYYY-MM-DDThh:mm:ss.ff..fZ - + llSetLinkAlpha(integer linknumber, float alpha, integer face) If a prim exists in the link chain at linknumber, sets face to alpha - + integer llGetNumberOfPrims() Returns the number of prims in a link set the script is attached to - + key llGetNumberOfNotecardLines(string name) Returns number of lines in notecard name via the dataserver event (cast return value to integer) - + list llGetBoundingBox(key object) Returns the bounding box around the object (including any linked prims) relative to its root prim, in a list in the format [ (vector) min_corner, (vector) max_corner ] - + vector llGetGeometricCenter() Returns the geometric center of the linked set the script is attached to. - + list llGetPrimitiveParams(list params) Returns the primitive parameters specified in the params list. - + string llIntegerToBase64(integer number) Returns a string that is a Base64 big endian encode of number - + integer llBase64ToInteger(string str) Returns an integer that is the str Base64 decoded as a big endian integer - + float llGetGMTclock() Returns the time in seconds since midnight GMT - + string llGetSimulatorHostname() Returns the hostname of the machine which the script is running on (same as string in viewer Help dialog) - + llSetLocalRot(rotation rot) Sets the rotation of a child prim relative to the root prim - + list llParseStringKeepNulls(string src, list separators, list spacers) Breaks src into a list, discarding separators, keeping spacers, keeping any null values generated. (separators and spacers must be lists of strings, maximum of 8 each) - + llRezAtRoot(string inventory, vector pos, vector vel, rotation rot, integer param) Instantiates owner's inventory object rotated to rot with its root at pos, moving at vel, using param as the start parameter - + integer llGetObjectPermMask(integer mask) Returns the requested permission mask for the root object the task is attached to - + llSetObjectPermMask(integer mask, integer value) Sets the given permission mask to the new value on the root object the task is attached to - + integer llGetInventoryPermMask(string item, integer mask) Returns the requested permission mask for the inventory item - + llSetInventoryPermMask(string item, integer mask, integer value) Sets the given permission mask to the new value on the inventory item - + key llGetInventoryCreator(string item) Returns a key for the creator of the inventory item - + llOwnerSay(string msg) Says msg to owner only. (Owner must be in the same region.) - + key llRequestSimulatorData(string simulator, integer data) Requests data about simulator. When data is available the dataserver event will be raised. - + llForceMouselook(integer mouselook) If mouselook is TRUE, any avatar that sits upon the prim will be forced into mouselook mode - + float llGetObjectMass(key id) Returns the mass of the avatar or object in the region - + list llListReplaceList(list dest, list src, integer start, integer end) Returns a list that is dest with start through end removed and src inserted at start - + llLoadURL(key avatar, string message, string url) Shows a dialog to avatar offering to load the web page at url with a message. If user clicks yes, launches the page in their web browser. - + llParcelMediaCommandList(list command) Sends a list of commands, some with arguments, to a parcel to control the playback of movies and other media - + list llParcelMediaQuery(list query) Returns a list containing results of the sent query - + integer llModPow(integer a, integer b, integer c) Returns a raised to the b power, mod c. ( (a**b)%c ) b is capped at 0xFFFF (16 bits). - + integer llGetInventoryType(string name) Returns the type of the inventory item name - + llSetPayPrice(integer price, list quick_pay_buttons) Sets the default amount on the dialog that appears when someone chooses to pay this prim - + vector llGetCameraPos() Returns the current camera position for the agent the task has permissions for - + rotation llGetCameraRot() Returns the current camera orientation for the agent the task has permissions for - + llSetPrimURL(string url) Updates the URL for the web page shown on the sides of the object - + llRefreshPrimURL() Reloads the web page shown on the sides of the object - + string llEscapeURL(string url) Returns an escaped/encoded version of url, replacing spaces with %20 etc. - + string llUnescapeURL(string url) Returns an unescaped/ unencoded version of url, replacing %20 with spaces etc. - + llMapDestination(string simname, vector pos, vector look_at) Opens the World Map centered on the region simname with pos highlighted. (NOTE: look_at currently does nothing.) Only works for scripts attached to avatar, or during touch events. - + llAddToLandBanList(key avatar, float hours) Adds avatar to the land ban list for hours, or indefinitely if hours is 0 - + llRemoveFromLandPassList(key avatar) Removes avatar from the land pass list - + llRemoveFromLandBanList(key avatar) Removes avatar from the land ban list - + llSetCameraParams(list rules) Sets multiple camera parameters at once. List format is [ rule1, data1, rule2, data2 . . . rulen, datan ] - + llClearCameraParams() Resets all camera parameters to default values and turns off scripted camera control - + float llListStatistics(integer operation, list src) Performs statistical aggregate functions on list src using LIST_STAT_* operations - + integer llGetUnixTime() Returns the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC from the system clock - + integer llGetParcelFlags(vector pos) Returns a mask of the parcel flags (PARCEL_FLAG_*) for the parcel that includes the point pos - + integer llGetRegionFlags() Returns the region flags (REGION_FLAG_*) for the region the object is in - + string llXorBase64StringsCorrect(string s1, string s2) Correctly performs an exclusive or on two Base64 strings and returns a Base64 string. s2 repeats if it is shorter than s1. - + llHTTPRequest(string url, list parameters, string body) Sends an HTTP request to the specified url with the body of the request and parameters - + llResetLandBanList() Removes all residents from the land ban list - + llResetLandPassList() Removes all residents from the land access/pass list - + integer llGetObjectPrimCount(key object_id) Returns the total number of prims for an object in the region - + list llGetParcelPrimOwners(vector pos) Returns a list of all residents who own objects on the parcel at pos and with individual prim counts. Requires owner-like permissions for the parcel. - + integer llGetParcelPrimCount(vector pos, integer category, integer sim_wide) Returns the number of prims on the parcel at pos of the given category. Categories: PARCEL_COUNT_TOTAL, _OWNER, _GROUP, _OTHER, _SELECTED, _TEMP - + integer llGetParcelMaxPrims(vector pos, integer sim_wide) Returns the maximum number of prims allowed on the parcel at pos - + list llGetParcelDetails(vector pos, list params) Returns the parcel details specified in params for the parcel at pos. Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA - + llSetLinkPrimitiveParams(integer linknumber, list rules) Sets primitive parameters for linknumber based on rules - + llSetLinkTexture(integer linknumber, string texture, integer face) Sets the texture of face for a task that exists in the link chain at linknumber - + string llStringTrim(string src, integer trim_type) Trims the leading and/or trailing white spaces from a string. trim_type can be STRING_TRIM, STRING_TRIM_HEAD or STRING_TRIM_TAIL. - + llRegionSay(integer channel, string msg) Broadcasts msg on channel (not 0) that can be heard anywhere in the region by a script listening on channel - + list llGetObjectDetails(key id, list params) Returns the object details specified in params for the object with key id. Params are OBJECT_NAME, _DESC, _POS, _ROT, _VELOCITY, _OWNER, _GROUP, _CREATOR - + llSetClickAction(integer action) Sets the action performed when a prim is clicked upon - + integer llGetRegionAgentCount() Returns the number of avatars in the region - + llTextBox(key avatar, string message, integer chat_channel Shows a dialog box on the avatar's screen with the message. It contains a text box for input, and if entered that text is chatted on chat_channel. - + string llGetAgentLanguage(key avatar) Returns the language code of the preferred interface language of the avatar - + vector llDetectedTouchUV(integer index) Returns the u and v coordinates in the first two components of a vector, for the texture coordinates where the prim was touched in a triggered touch event - + integer llDetectedTouchFace(integer index) Returns the index of the face where the avatar clicked in a triggered touch event - + vector llDetectedTouchPos(integer index) Returns the position where the object was touched in a triggered touch event - + vector llDetectedTouchNormal(integer index) Returns the surface normal for a triggered touch event - + vector llDetectedTouchBinormal(integer index) Returns the surface binormal for a triggered touch event - + vector llDetectedTouchST(integer index) Returns the s and t coordinates in the first two components of a vector, for the surface coordinates where the prim was touched in a triggered touch event - + string llSHA1String(string src) Returns a string of 40 hex characters that is the SHA1 security Hash of src - + integer llGetFreeURLs() Returns the number of available URLs for the current script - + key llRequestURL() Requests one HTTP:// url for use by this object. An http_request event is triggered with the results. - + key llRequestSecureURL() Requests one HTTPS:// (SSL) url for use by this object. An http_request event is triggered with the results. - + llReleaseURL(string url) Releases the specified URL, it will no longer be usable - + llHTTPResponse(key request_id, integer status, string body) Responds to request_id with status and body - + string llGetHTTPHeader(key request_id, string header) Returns the value for header for request_id - + llSetPrimMediaParams(integer face, list params) Sets the media params for a particular face on an object. If media is not already on this object, add it. List is a set of name/value pairs in no particular order. Params not specified are unchanged, or if new media is added then set to the default specified. The possible names are below, along with the types of values and what they mean. - + list llGetPrimMediaParams(integer face, list params) Returns the media params for a particular face on an object, given the desired list of names, in the order requested. (Returns an empty list if no media exists on the face.) - + llClearPrimMedia(integer face) Clears (deletes) the media and all params from the given face. -- cgit v1.2.3 From b630e62ad4266099a0daa14b3f02802a696c6fe9 Mon Sep 17 00:00:00 2001 From: Ramzi Ramey Date: Fri, 2 Oct 2009 19:12:40 +0000 Subject: EXT-261: Labels in /character/avatar_lad.xml are not localizable - there were a bunch of missing strings from the original fix, causing a MissingString(..) error to the user --- indra/newview/skins/default/xui/en/strings.xml | 53 ++++++++++++++++++++------ 1 file changed, 41 insertions(+), 12 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index a34a143abc..f398cc33b5 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2251,9 +2251,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Belly Size Blonde Hair Big Eyeball - Big Hair Back - Big Hair Front - Big Hair Top + Big Hair: Back + Big Hair: Front + Big Hair: Top Body Fat Body Thickness Breast Buoyancy @@ -2310,7 +2310,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Hair Thickess Hair Tilted Left Hair Tilted Right - Hair Volume + Hair: Volume Hand Size Head Length Head Shape @@ -2358,10 +2358,39 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Nostril Division Nostril Width Open Front + Lipstick Color + Lipstick + Lipgloss + Blush + Blush Color + Blush Opacity + Inner Shadow + Inner Shadow Color + Inner Shadow Opacity + Body Definition + Body Freckles + Facial Definition + Hair: Front + Hair: Sides + Hair: Back + Front Fringe + Side Fringe + Back Fringe + Hair Sweep + Pigtails + Ponytail + Hair Tilt + Eyebrow Size + Eyebrow Density + + Sideburns + Moustache + Soulpatch + Chin Curtains Outer Eye Corner Outer Shadow - Out Shdw Opacity - Out Shdw Color + Outer Shadow Opacity + Outer Shadow Color Package Pants Crotch Pants Fit @@ -2401,10 +2430,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Slanted Forehead Sleeve Length Sleeve Looseness - Slit Back - Slit Front - Slit Left - Slit Right + Slit: Back + Slit: Front + Slit: Left + Slit: Right Socks Length Spiked Hair Squash/Stretch Head @@ -2426,12 +2455,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. White Hair big belly skirt bigbutt skirt - bustle skirt + Bustle Skirt legs skirt loose skirt poofy skirt tight skirt - wrinkles + Wrinkles Add to My Landmarks -- cgit v1.2.3 From fc16786d6f1da421e9b720f43fd014917a455542 Mon Sep 17 00:00:00 2001 From: Ramzi Ramey Date: Fri, 2 Oct 2009 21:48:32 +0000 Subject: DEV-38453 (part4) Modernize the foreign languages by - moving some existing translations into strings.xml - deleting sentences that were removed from EN in notifications.xml - converting structures in floater_god_tools.xml NO CHANGES TO ENGLISH --- indra/newview/skins/default/xui/da/strings.xml | 108 +++++++++++++++++++++ .../skins/default/xui/de/floater_god_tools.xml | 12 +-- .../newview/skins/default/xui/de/notifications.xml | 36 +------ indra/newview/skins/default/xui/de/strings.xml | 104 ++++++++++++++++++++ .../skins/default/xui/es/floater_god_tools.xml | 14 +-- .../skins/default/xui/es/floater_postcard.xml | 2 +- .../newview/skins/default/xui/es/notifications.xml | 40 +------- indra/newview/skins/default/xui/es/strings.xml | 106 ++++++++++++++++++++ .../skins/default/xui/fr/floater_god_tools.xml | 12 +-- .../newview/skins/default/xui/fr/notifications.xml | 40 +------- indra/newview/skins/default/xui/fr/strings.xml | 105 ++++++++++++++++++++ .../skins/default/xui/it/floater_postcard.xml | 2 +- .../newview/skins/default/xui/it/notifications.xml | 39 +------- indra/newview/skins/default/xui/it/strings.xml | 105 ++++++++++++++++++++ .../skins/default/xui/ja/floater_god_tools.xml | 24 ++--- .../newview/skins/default/xui/ja/notifications.xml | 41 +------- indra/newview/skins/default/xui/ja/strings.xml | 104 ++++++++++++++++++++ .../skins/default/xui/nl/floater_postcard.xml | 2 +- .../newview/skins/default/xui/nl/notifications.xml | 42 +------- indra/newview/skins/default/xui/nl/strings.xml | 106 ++++++++++++++++++++ .../skins/default/xui/pl/floater_about_land.xml | 2 +- .../skins/default/xui/pl/floater_god_tools.xml | 14 +-- .../skins/default/xui/pl/floater_postcard.xml | 2 +- .../newview/skins/default/xui/pl/notifications.xml | 42 +------- indra/newview/skins/default/xui/pl/strings.xml | 105 ++++++++++++++++++++ .../skins/default/xui/pt/floater_god_tools.xml | 14 +-- .../skins/default/xui/pt/floater_postcard.xml | 2 +- .../newview/skins/default/xui/pt/notifications.xml | 40 +------- indra/newview/skins/default/xui/pt/strings.xml | 104 ++++++++++++++++++++ 29 files changed, 1002 insertions(+), 367 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index dda5e9bd1a..9849f2f56d 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -513,4 +513,112 @@ Høj + + + Linden sted + Adult + Kunst & kultur + Business + Uddannelse + Spil + Afslapning + Nybegynder venligt + Parker & natur + Beboelse + Indkøb + Andet + + + Forbinder til stemmechat... + + + Forbundet + + + Stemmechat er ikke tilladt hvor du befinder dig + + + Stemme chat er afbrudt + + + '[OBJECTNAME]', en genstand, ejet af '[OWNERNAME]', lokaliseret i [REGIONNAME] på [REGIONPOS], har fået tilladelse til: [PERMISSIONS]. + + + '[OBJECTNAME]', en genstand, ejet af '[OWNERNAME]', lokaliseret i [REGIONNAME] på [REGIONPOS], er afvist tilladelse til: [PERMISSIONS]. + + + Tag Linden dollars (L$) fra dig + + + Reagér på dine kontrol-taster + + + Ændre dine kontrol-taster + + + Animér din avatar + + + Sæt på din avatar + + + Fjern ejerskabet og sæt til offentlig + + + Sammenkæd og adskil andre genstande + + + Tilføj og fjern sammenkødninger med andre genstande + + + Ændre dens tilladelser + + + Spor dit kamera + + + Kontrollér dit kamera + + + Du er den eneste deltager i denne samtale + + + [FIRST] [LAST] er ikke logget på. + + + Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat. + + + Du har blokeret denne beboer. Hvis du starter en samtale vil denne blokering automatisk blive fjernet. + + + Kunne ikke etablere forbindelse, prøv igen senere + + + Du har ikke de fornødne rettigheder. + + + Denne samtale er lukket ned + + + Du har ikke den mulighed. + + + Du er ikke moderator for denne samtale. + + + Du er blevet "blokeret". + + + Ikke muligt at tilføge brugere til samtale med [RECIPIENT]. + + + Ikke muligt at sende din besked til samtalen med [RECIPIENT]. + + + Du er blevet fjernet fra gruppen. + + + Du har ikke længere mulighed for at deltage i samtalen + diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml index 39c064b265..c7cfb5d9d3 100644 --- a/indra/newview/skins/default/xui/de/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml @@ -115,17 +115,17 @@ Ziel: - - + + Anfrage: - - - - + + + + Parameter: diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index b5741438ae..b738b2d864 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -565,7 +565,7 @@ Verschieben Sie alle betreffenden Objekte in dieselbe Region. [EXTRA] -[URL] für Informationen zum Deviseneinkauf öffnen? +[_URL] für Informationen zum Deviseneinkauf öffnen? @@ -796,7 +796,6 @@ Keine Gruppe ausgewählt. Land kann nicht übertragen werden: Kann die Region nicht finden, in der sich dieses Land befindet. -Bitte melden Sie dies über „Hilfe“ > „Fehler melden“. Land kann nicht übertragen werden: @@ -842,8 +841,6 @@ Parzellen, die Ihnen gehören, werden grün dargestellt. Land kann nicht aufgegeben werden: Kann die Region nicht finden, in der sich dieses Land befindet. - -Bitte melden Sie dies über „Hilfe“ > „Fehler melden“. Land kann nicht aufgegeben werden: @@ -882,14 +879,10 @@ Land teilen? Land kann nicht aufgeteilt werden: Kann die Region nicht finden, in der sich dieses Land befindet. - -Bitte melden Sie dies über „Hilfe“ > „Fehler melden“. Land kann nicht zusammengelegt werden: Kann die Region nicht finden, in der sich dieses Land befindet. - -Bitte melden Sie dies über „Hilfe“ > „Fehler melden“. Land kann nicht zusammengelegt werden: @@ -949,8 +942,6 @@ Grau = Öffentlich [NAME] kann nicht in Zentral-Asset-Speicher geladen werden. Dies ist ein temporärer Fehler. Bitte passen Sie das Kleidungsstück in einigen Minuten noch einmal an und speichern Sie es erneut. - -Tritt dieses Problem wiederholt auf, klicken Sie auf das Pulldown-Menü „Hilfe“ > „Fehler melden“ und geben Sie Details zu Ihrem Netzwerk-Setup an. Sie wurden von [SECOND_LIFE] abgemeldet: @@ -1290,10 +1281,6 @@ In Ihren Anwendungsordner herunterladen? Zu www.secondlife.com, um Ihr Konto zu verwalten? - - Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Fehler richtig meldet. - - Informieren Sie sich im [SECOND_LIFE] Wiki, wie man Sicherheitsprobleme richtig meldet. @@ -1973,22 +1960,9 @@ Als besonderen Service für Einwohner und Besucher übernimmt der Eigentümer di (Den Vertrag können Sie unter „Welt“ > „Land-Info“ einsehen.) - Das Resultat, das sich aus dieser Meldung ergibt, betrifft nur diese Region; der Einwohnerzugang zu anderen Bereichen von [SECOND_LIFE] ist davon nicht betroffen. Nur Linden Lab kann den Zugang zu [SECOND_LIFE] beschränken. - - - Verwenden Sie dieses Tool *nur*, um technische Features zu melden, die nicht wie beschrieben oder erwartet funktionieren. Bitte machen Sie so viele Angaben wie möglich. Sie können auf die automatische Antwort-E-Mail antworten, um Ihre Meldung noch zu ergänzen. -Alle gemeldeten Fehler werden geprüft und bewertet. Sie erhalten keine persönliche Antwort auf Ihre E-Mail. -- -Bei technischen Problemen wenden Sie sich bitte an den Support unter: -http://secondlife.com/community/support.php -- -Hinweis: Unvollständige Meldungen werden nicht bearbeitet. Wählen Sie eine Missbrauchskategorie aus. -Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts. - - - Wählen Sie eine Fehler-Kategorie aus. Die Angabe einer Kategorie hilft uns bei der Bearbeitung des Berichts. @@ -2002,18 +1976,10 @@ Eine genaue Angabe hilft uns, Fälle von Missbrauch zu ahnden. Bitte geben Sie eine Zusammenfassung des Vorfalls ein. Eine genaue Zusammenfassung hilft uns, Fälle von Missbrauch zu ahnden. - - - Bitte geben Sie eine Zusammenfassung des Fehlers ein. -Eine genaue Zusammenfassung hilft uns, Fehler schneller zu beseitigen. Bitte geben Sie eine ausführliche Beschreibung des Vorfalls ein. Eine möglichst genaue Beschreibung mit Namen und Einzelheiten hilft uns, Fälle von Missbrauch zu ahnden. - - - Bitte geben Sie eine ausführliche Fehlerbeschreibung ein. -Eine möglichst genaue Beschreibung mit Schritten zur Reproduktion des Fehlers hilft uns, Fehler schneller zu beseitigen. Sehr geehrte(r) Einwohner(in), diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 380046f72d..5df1570bfd 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -517,4 +517,108 @@ Hoch + + + Lindenort + Adult + Kunst & Kultur + Business + Bildung + Spielen + Treffpunkt + Anfängergerecht + Parks und Natur + Wohngebiet + Shopping + Sonstige + + Verbindung mit In-Welt-Voice-Chat... + + + Verbunden + + + Der aktuelle Standort unterstützt keine Voice-Kommunikation + + + Verbindung mit In-Welt-Voice-Chat getrennt + + + Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung erteilt: [PERMISSIONS]. + + + Dem Objekt „[OBJECTNAME]“, ein Objekt von „[OWNERNAME]“, in [REGIONNAME] [REGIONPOS], wurde folgende Berechtigung verweigert: [PERMISSIONS]. + + + Linden-Dollar (L$) von Ihnen nehmen + + + Steuerung festlegen + + + Steuerung neu zuweisen + + + Avatar animieren + + + An Avatar anhängen + + + Eigentum aufgeben und öffentlich machen + + + Mit Objekten verknüpfen und davon trennen + + + Verbindungen zu anderen Objekten hinzufügen und entfernen + + + Berechtigungen ändern + + + Kameraverfolgung + + + Kamerasteuerung + + + Sie sind der einzige Benutzer in dieser Sitzung. + + + [FIRST] [LAST] ist offline. + + + Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen. + + + Fehler bei Anfrage, bitte versuchen Sie es später. + + + Sie sind dazu nicht berechtigt. + + + Die Sitzung ist abgelaufen + + + Sie besitzen diese Fähigkeit nicht. + + + Sie sind kein Sitzungsmoderator. + + + Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert. + + + Es konnten keine Benutzer zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden. + + + Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden. + + + Sie wurden von der Gruppe ausgeschlossen. + + + Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen. + diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml index 1ba0b685c6..ea2571ecb8 100644 --- a/indra/newview/skins/default/xui/es/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_god_tools.xml @@ -54,7 +54,7 @@ Factor cobrable: - L$ por m2: + L$ por m²: -- cgit v1.2.3 From 92aaa3778872a660bed78b1ab7e77dc441200d3b Mon Sep 17 00:00:00 2001 From: James Cook Date: Mon, 5 Oct 2009 16:17:51 +0000 Subject: Tweak inspector tooltip icon spacing. --- indra/llui/lltooltip.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 8f5c029816..d742281f30 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -189,7 +189,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p) addChild(LLUICtrlFactory::create(icon_params)); // move text over to fit image in - mTextBox->translate(TOOLTIP_ICON_SIZE,0); + mTextBox->translate(TOOLTIP_ICON_SIZE + mPadding, 0); } if (p.click_callback.isProvided()) -- cgit v1.2.3 From c480ff056f0536063fca868638536861aa66caee Mon Sep 17 00:00:00 2001 From: James Cook Date: Mon, 5 Oct 2009 17:16:02 +0000 Subject: Fix viewer-2 build due to duplicate lines in a header merge. --- indra/newview/llpanelteleporthistory.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index ecbe281b7a..c4b7f995e0 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -82,9 +82,6 @@ private: void onAccordionTabRightClick(LLView *view, S32 x, S32 y, MASK mask); void onAccordionTabOpen(LLAccordionCtrlTab *tab); void onAccordionTabClose(LLAccordionCtrlTab *tab); - void onAccordionTabRightClick(LLView *view, S32 x, S32 y, MASK mask); - void onAccordionTabOpen(LLAccordionCtrlTab *tab); - void onAccordionTabClose(LLAccordionCtrlTab *tab); void showTeleportHistory(); void handleItemSelect(LLFlatListView* ); LLFlatListView* getFlatListViewFromTab(LLAccordionCtrlTab *); -- cgit v1.2.3 From 3e29163b47719c55ef3e48adbc57a0ce733768e3 Mon Sep 17 00:00:00 2001 From: Rick Pasetto Date: Mon, 5 Oct 2009 17:19:09 +0000 Subject: small change to turn off ShaderLoading debug logging --- indra/newview/app_settings/logcontrol.xml | 1 - 1 file changed, 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index a49ccb77b4..d7bb64ce8a 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -40,7 +40,6 @@ tags - ShaderLoading -- cgit v1.2.3 From 349eb393bc0666e323feff3b3a7eacab4f9bba84 Mon Sep 17 00:00:00 2001 From: Rick Pasetto Date: Mon, 5 Oct 2009 17:21:08 +0000 Subject: DEV-40650: Refactor llmediadataresponder and llmediadatafetcher into a single reusable class CC Review #7 (monroe) LLMediaDataResponder and LLMediaDataFetcher were helpful classes that interacted with each other, but they were not general enough to cleanly be used for all media service interaction. This change refactors these classes into one (in fact, it is closer to a complete rewrite): LLMediaDataClient. This class has the following design points: - You subclass from it when you want to specialize the responder, and then subclass from LLMediaDataClient::Responder if desired - It has a few inner classes: - LLMediaDataClient::Request, which now holds all of the data pertaining to a request, including retry counts - LLMediaDataClient::Responder, which is now the LLHTTPClient::Responder - LLMediaDataClient::PriorityQueue, which is now a STL priority_queue of Request objects. - LLMediaDataClient::QueueTimer, which is the timer that fires to peel off queue items - LLMediaDataClient::Responder::RetryTimer, which is the timer that is used when 503 errors are received. The encapsulation of these inner classes is a lot cleaner and better reflects the scope of their responsibilities. By and large, the logic hasn't really changed much. However, now there are two subclasses of LLMediaDataClient: one for the ObjectMedia cap and the other for the ObjectMediaNavigate cap. (I decided it was overkill to make three subclasses, one each for GET, UPDATE, and NAVIGATE, but we could still do that). LLVOVolume now instantiates both of these classes as statics (and destroys them on shutdown). They now have very simple API: - LLObjectMediaDataClient::fetchMedia(LLVOVolume*) fetches the media for the given object - LLObjectMediaDataClient::updateMedia(LLVOVolume*) sends an UPDATE of the media from the given object - LLObjectMediaNavigateClient::navigate(LLVOVolume*, U8 texture_index, const std::string &url) navigates the given face (texture_index) on the given object to the given url. --- indra/newview/CMakeLists.txt | 6 +- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llmediadataclient.cpp | 627 ++++++++++++++++++++++++++++++++ indra/newview/llmediadataclient.h | 263 ++++++++++++++ indra/newview/llviewerobject.cpp | 1 - indra/newview/llvovolume.cpp | 53 +-- indra/newview/llvovolume.h | 7 +- 7 files changed, 910 insertions(+), 49 deletions(-) create mode 100755 indra/newview/llmediadataclient.cpp create mode 100755 indra/newview/llmediadataclient.h (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 14a37981a6..d368dd5497 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -264,8 +264,7 @@ set(viewer_SOURCE_FILES llmaniptranslate.cpp llmapresponders.cpp llmediactrl.cpp - llmediadataresponder.cpp - llmediadatafetcher.cpp + llmediadataclient.cpp llmediaremotectrl.cpp llmemoryview.cpp llmenucommands.cpp @@ -735,8 +734,7 @@ set(viewer_HEADER_FILES llmanipscale.h llmaniptranslate.h llmapresponders.h - llmediadataresponder.h - llmediadatafetcher.h + llmediadataclient.h llmediaremotectrl.h llmemoryview.h llmenucommands.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 94a5f5c52b..7f96e0761e 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5294,7 +5294,7 @@ Value 13 - PrimMediaFetchQueueDelay + PrimMediaRequestQueueDelay Comment Timer delay for fetching media from the queue (in seconds). diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp new file mode 100755 index 0000000000..e3d3f1a96b --- /dev/null +++ b/indra/newview/llmediadataclient.cpp @@ -0,0 +1,627 @@ +/** + * @file llmediadataclient.cpp + * @brief class for queueing up requests for media data + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llmediadataclient.h" + +#include + +#include "llhttpstatuscodes.h" +#include "llnotifications.h" +#include "llsdutil.h" +#include "llmediaentry.h" +#include "lltextureentry.h" +#include "llviewerregion.h" +#include "llvovolume.h" + +// +// When making a request +// - obtain the "overall interest score" of the object. +// This would be the sum of the impls' interest scores. +// - put the request onto a queue sorted by this score +// (highest score at the front of the queue) +// - On a timer, once a second, pull off the head of the queue and send +// the request. +// - Any request that gets a 503 still goes through the retry logic +// + +// Some helpful logging macros + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient::Request +// +////////////////////////////////////////////////////////////////////////////////////// +/*static*/U32 LLMediaDataClient::Request::sNum = 0; + +LLMediaDataClient::Request::Request(const std::string &cap_name, + const LLSD& sd_payload, + LLVOVolume *obj, + LLMediaDataClient *mdc) + : mCapName(cap_name), + mPayload(sd_payload), + mObject(obj), + mNum(++sNum), + mRetryCount(0), + mMDC(mdc) +{ +} + +LLMediaDataClient::Request::~Request() +{ + mMDC = NULL; + mObject = NULL; +} + + +std::string LLMediaDataClient::Request::getCapability() const +{ + return getObject()->getRegion()->getCapability(getCapName()); +} + +// Helper function to get the "type" of request, which just pokes around to +// discover it. +LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const +{ + if (mCapName == "ObjectMediaNavigate") + { + return NAVIGATE; + } + else if (mCapName == "ObjectMedia") + { + const std::string &verb = mPayload["verb"]; + if (verb == "GET") + { + return GET; + } + else if (verb == "UPDATE") + { + return UPDATE; + } + } + llassert(false); + return GET; +} + +const char *LLMediaDataClient::Request::getTypeAsString() const +{ + Type t = getType(); + switch (t) + { + case GET: + return "GET"; + break; + case UPDATE: + return "UPDATE"; + break; + case NAVIGATE: + return "NAVIGATE"; + break; + } + return ""; +} + + +void LLMediaDataClient::Request::reEnqueue() const +{ + // I sure hope this doesn't deref a bad pointer: + mMDC->enqueue(this); +} + +std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r) +{ + s << "" + << "" << r.getNum() << "" + << "" << r.getTypeAsString() << "" + << "" << r.getObject()->getID() << "" + << "" << r.getRetryCount() << "" + << " "; + return s; +} + + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient::Responder::RetryTimer +// +////////////////////////////////////////////////////////////////////////////////////// + +LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr) + : LLEventTimer(time), mResponder(mdr) +{ +} + +// virtual +LLMediaDataClient::Responder::RetryTimer::~RetryTimer() +{ + mResponder = NULL; +} + +// virtual +BOOL LLMediaDataClient::Responder::RetryTimer::tick() +{ + // Instead of retrying, we just put the request back onto the queue + LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << "retrying" << LL_ENDL; + mResponder->getRequest()->reEnqueue(); + // Don't fire again + return TRUE; +} + + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient::Responder +// +////////////////////////////////////////////////////////////////////////////////////// + +LLMediaDataClient::Responder::Responder(const request_ptr_t &request) + : mRequest(request) +{ +} + +LLMediaDataClient::Responder::~Responder() +{ + mRequest = NULL; +} + +/*virtual*/ +void LLMediaDataClient::Responder::error(U32 status, const std::string& reason) +{ + extern LLControlGroup gSavedSettings; + + if (status == HTTP_SERVICE_UNAVAILABLE) + { + F32 retry_timeout = gSavedSettings.getF32("PrimMediaRetryTimerDelay"); + if (retry_timeout <= 0.0) + { + retry_timeout = (F32)UNAVAILABLE_RETRY_TIMER_DELAY; + } + LL_INFOS("LLMediaDataClient") << *mRequest << "got SERVICE_UNAVAILABLE...retrying in " << retry_timeout << " seconds" << LL_ENDL; + + mRequest->incRetryCount(); + + // Start timer (instances are automagically tracked by + // InstanceTracker<> and LLEventTimer) + new RetryTimer(F32(retry_timeout/*secs*/), this); + } + else { + std::string msg = boost::lexical_cast(status) + ": " + reason; + LL_INFOS("LLMediaDataClient") << *mRequest << " error(" << msg << ")" << LL_ENDL; + LLSD args; + args["ERROR"] = msg; + LLNotifications::instance().add("ObjectMediaFailure", args); + } +} + + +/*virtual*/ +void LLMediaDataClient::Responder::result(const LLSD& content) +{ + LL_INFOS("LLMediaDataClient") << *mRequest << "result : " << ll_pretty_print_sd(content) << LL_ENDL; +} + + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient::Comparator +// +////////////////////////////////////////////////////////////////////////////////////// + +bool LLMediaDataClient::Comparator::operator() (const request_ptr_t &o1, const request_ptr_t &o2) const +{ + if (o2.isNull()) return true; + if (o1.isNull()) return false; + + // The score is intended to be a measure of how close an object is or + // how much screen real estate (interest) it takes up + // Further away = lower score. + // Lesser interest = lower score + // For instance, here are some cases: + // 1: Two items with no impl, closest one wins + // 2: Two items with an impl: interest should rule, but distance is + // still taken into account (i.e. something really close might take + // precedence over a large item far away) + // 3: One item with an impl, another without: item with impl wins + // (XXX is that what we want?) + // Calculate the scores for each. + F64 o1_score = Comparator::getObjectScore(o1->getObject()); + F64 o2_score = Comparator::getObjectScore(o2->getObject()); + + return ( o1_score > o2_score ); +} + +// static +F64 LLMediaDataClient::Comparator::getObjectScore(const ll_vo_volume_ptr_t &obj) +{ + // *TODO: make this less expensive? + F32 dist = obj->getRenderPosition().length() + 0.1; // avoids div by 0 + // square the distance so that they are in the same "unit magnitude" as + // the interest (which is an area) + dist *= dist; + F64 interest = (F64)1; + int i = 0; + int end = obj->getNumTEs(); + for ( ; i < end; ++i) + { + const viewer_media_t &impl = obj->getMediaImpl(i); + if (!impl.isNull()) + { + interest += impl->getInterest(); + } + } + + return interest/dist; +} + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient::PriorityQueue +// Queue of LLVOVolume smart pointers to request media for. +// +////////////////////////////////////////////////////////////////////////////////////// + +// dump the queue +std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::PriorityQueue &q) +{ + int i = 0; + std::vector::const_iterator iter = q.c.begin(); + std::vector::const_iterator end = q.c.end(); + while (iter < end) + { + s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString(); + iter++; + i++; + } + return s; +} + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient::QueueTimer +// Queue of LLVOVolume smart pointers to request media for. +// +////////////////////////////////////////////////////////////////////////////////////// + +LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc) + : LLEventTimer(time), mMDC(mdc) +{ + mMDC->setIsRunning(true); +} + +LLMediaDataClient::QueueTimer::~QueueTimer() +{ + mMDC->setIsRunning(false); + mMDC = NULL; +} + +// virtual +BOOL LLMediaDataClient::QueueTimer::tick() +{ + if (NULL == mMDC->pRequestQueue) + { + // Shutting down? stop. + LL_DEBUGS("LLMediaDataClient") << "queue gone" << LL_ENDL; + return TRUE; + } + + LLMediaDataClient::PriorityQueue &queue = *(mMDC->pRequestQueue); + + if (queue.empty()) + { + LL_DEBUGS("LLMediaDataClient") << "queue empty: " << queue << LL_ENDL; + return TRUE; + } + + LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, queue is: " << queue << LL_ENDL; + + // Peel one off of the items from the queue, and execute request + request_ptr_t request = queue.top(); + llassert(!request.isNull()); + const ll_vo_volume_ptr_t &object = request->getObject(); + bool performed_request = false; + llassert(!object.isNull()); + if (!object.isNull() && object->hasMedia()) + { + std::string url = request->getCapability(); + if (!url.empty()) + { + const LLSD &sd_payload = request->getPayload(); + LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL; + + // Call the subclass for creating the responder + LLHTTPClient::post(url, sd_payload, mMDC->createResponder(request)); + performed_request = true; + } + else { + LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL; + } + } + else { + if (!object->hasMedia()) + { + LL_INFOS("LLMediaDataClient") << "Not Sending request for " << *request << " hasMedia() is false!" << LL_ENDL; + } + } + bool exceeded_retries = request->getRetryCount() > LLMediaDataClient::MAX_RETRIES; + if (performed_request || exceeded_retries) // Try N times before giving up + { + if (exceeded_retries) + { + LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for " << LLMediaDataClient::MAX_RETRIES << " tries...popping object id " << object->getID() << LL_ENDL; + // XXX Should we bring up a warning dialog?? + } + queue.pop(); + } + else { + request->incRetryCount(); + } + LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, queue is now: " << (*(mMDC->pRequestQueue)) << LL_ENDL; + + return queue.empty(); +} + +void LLMediaDataClient::startQueueTimer() +{ + if (! mQueueTimerIsRunning) + { + extern LLControlGroup gSavedSettings; + F32 queue_timer_delay = gSavedSettings.getF32("PrimMediaRequestQueueDelay"); + if (queue_timer_delay <= 0.0f) + { + queue_timer_delay = (F32)LLMediaDataClient::QUEUE_TIMER_DELAY; + } + LL_INFOS("LLMediaDataClient") << "starting queue timer (delay=" << queue_timer_delay << " seconds)" << LL_ENDL; + // LLEventTimer automagically takes care of the lifetime of this object + new QueueTimer(queue_timer_delay, this); + } +} + +void LLMediaDataClient::stopQueueTimer() +{ + mQueueTimerIsRunning = false; +} + +void LLMediaDataClient::request(LLVOVolume *object, const LLSD &payload) +{ + if (NULL == object || ! object->hasMedia()) return; + + // Push the object on the priority queue + enqueue(new Request(getCapabilityName(), payload, object, this)); +} + +void LLMediaDataClient::enqueue(const Request *request) +{ + LL_INFOS("LLMediaDataClient") << "Queuing request for " << *request << LL_ENDL; + // Push the request on the priority queue + // Sadly, we have to const-cast because items put into the queue are not const + pRequestQueue->push(const_cast(request)); + LL_DEBUGS("LLMediaDataClient") << "Queue:" << (*pRequestQueue) << LL_ENDL; + // Start the timer if not already running + startQueueTimer(); +} + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLMediaDataClient +// +////////////////////////////////////////////////////////////////////////////////////// + +LLMediaDataClient::LLMediaDataClient() +{ + pRequestQueue = new PriorityQueue(); +} + + +LLMediaDataClient::~LLMediaDataClient() +{ + stopQueueTimer(); + + // This should clear the queue, and hopefully call all the destructors. + while (! pRequestQueue->empty()) pRequestQueue->pop(); + + delete pRequestQueue; + pRequestQueue = NULL; +} + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLObjectMediaDataClient +// Subclass of LLMediaDataClient for the ObjectMedia cap +// +////////////////////////////////////////////////////////////////////////////////////// + +LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const +{ + return new LLObjectMediaDataClient::Responder(request); +} + +const char *LLObjectMediaDataClient::getCapabilityName() const +{ + return "ObjectMedia"; +} + +void LLObjectMediaDataClient::fetchMedia(LLVOVolume *object) +{ + LLSD sd_payload; + sd_payload["verb"] = "GET"; + sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID(); + request(object, sd_payload); +} + +void LLObjectMediaDataClient::updateMedia(LLVOVolume *object) +{ + LLSD sd_payload; + sd_payload["verb"] = "UPDATE"; + sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID(); + LLSD object_media_data; + for (int i=0; i < object->getNumTEs(); i++) { + LLTextureEntry *texture_entry = object->getTE(i); + llassert((texture_entry->getMediaData() != NULL) == texture_entry->hasMedia()); + const LLSD &media_data = + (texture_entry->getMediaData() == NULL) ? LLSD() : texture_entry->getMediaData()->asLLSD(); + object_media_data.append(media_data); + } + sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data; + + LL_INFOS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_pretty_print_sd(sd_payload) << LL_ENDL; + + request(object, sd_payload); +} + +/*virtual*/ +void LLObjectMediaDataClient::Responder::result(const LLSD& content) +{ + const LLMediaDataClient::Request::Type type = getRequest()->getType(); + llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE) + if (type == LLMediaDataClient::Request::GET) + { + LL_INFOS("LLMediaDataClient") << *(getRequest()) << "GET returned: " << ll_pretty_print_sd(content) << LL_ENDL; + + // Look for an error + if (content.has("error")) + { + const LLSD &error = content["error"]; + LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" << + error["code"].asString() << ": " << error["message"].asString() << LL_ENDL; + + // XXX Warn user? + } + else { + // Check the data + const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY]; + if (object_id != getRequest()->getObject()->getID()) + { + // NOT good, wrong object id!! + LL_WARNS("LLMediaDataClient") << *(getRequest()) << "DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL; + return; + } + + // Otherwise, update with object media data + getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY]); + } + } + else if (type == LLMediaDataClient::Request::UPDATE) + { + // just do what our superclass does + LLMediaDataClient::Responder::result(content); + } +} + +////////////////////////////////////////////////////////////////////////////////////// +// +// LLObjectMediaNavigateClient +// Subclass of LLMediaDataClient for the ObjectMediaNavigate cap +// +////////////////////////////////////////////////////////////////////////////////////// +LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const +{ + return new LLObjectMediaNavigateClient::Responder(request); +} + +const char *LLObjectMediaNavigateClient::getCapabilityName() const +{ + return "ObjectMediaNavigate"; +} + +void LLObjectMediaNavigateClient::navigate(LLVOVolume *object, U8 texture_index, const std::string &url) +{ + LLSD sd_payload; + sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID(); + sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url; + sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index; + request(object, sd_payload); +} + +/*virtual*/ +void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason) +{ + // Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base + // class + if (status == HTTP_SERVICE_UNAVAILABLE) + { + LLMediaDataClient::Responder::error(status, reason); + } + else { + // bounce the face back + bounceBack(); + LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL; + } +} + +/*virtual*/ +void LLObjectMediaNavigateClient::Responder::result(const LLSD& content) +{ + LL_DEBUGS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_pretty_print_sd(content) << LL_ENDL; + + if (content.has("error")) + { + const LLSD &error = content["error"]; + int error_code = error["code"]; + + if (ERROR_PERMISSION_DENIED_CODE == error_code) + { + LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Navigation denied: bounce back" << LL_ENDL; + // bounce the face back + bounceBack(); + } + else { + LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" << + error["code"].asString() << ": " << error["message"].asString() << LL_ENDL; + } + // XXX Warn user? + } + else { + // just do what our superclass does + LLMediaDataClient::Responder::result(content); + } +} + + +void LLObjectMediaNavigateClient::Responder::bounceBack() +{ + const LLSD &payload = getRequest()->getPayload(); + U8 texture_index = (U8)(LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]; + viewer_media_t impl = getRequest()->getObject()->getMediaImpl(texture_index); + // Find the media entry for this navigate + LLMediaEntry* mep = NULL; + LLTextureEntry *te = getRequest()->getObject()->getTE(texture_index); + if(te) + { + mep = te->getMediaData(); + } + + if (mep && impl) + { + impl->navigateTo(mep->getCurrentURL()); + } +} diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h new file mode 100755 index 0000000000..59c4334251 --- /dev/null +++ b/indra/newview/llmediadataclient.h @@ -0,0 +1,263 @@ +/** + * @file llmediadataclient.h + * @brief class for queueing up requests to the media service + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + * + * Copyright (c) 2007-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLMEDIADATACLIENT_H +#define LL_LLMEDIADATACLIENT_H + +#include "llhttpclient.h" +#include +#include "llrefcount.h" +#include "lltimer.h" + +// Forward decls +class LLVOVolume; + +typedef LLPointer ll_vo_volume_ptr_t; + +// This object creates a priority queue for requests. +// Abstracts the Cap URL, the request, and the responder +class LLMediaDataClient : public LLRefCount +{ +public: + LOG_CLASS(LLMediaDataClient); + + const static int QUEUE_TIMER_DELAY = 1; // seconds(s) + const static int MAX_RETRIES = 4; + + // Constructor + LLMediaDataClient(); + + // Make the request + void request(LLVOVolume *object, const LLSD &payload); + +protected: + // Destructor + virtual ~LLMediaDataClient(); // use unref + + // Request + class Request : public LLRefCount + { + public: + enum Type { + GET, + UPDATE, + NAVIGATE + }; + + Request(const std::string &cap_name, const LLSD& sd_payload, LLVOVolume *obj, LLMediaDataClient *mdc); + const std::string &getCapName() const { return mCapName; } + const LLSD &getPayload() const { return mPayload; } + LLVOVolume *getObject() const { return mObject; } + + U32 getNum() const { return mNum; } + + U32 getRetryCount() const { return mRetryCount; } + void incRetryCount() { mRetryCount++; } + + // Note: may return empty string! + std::string getCapability() const; + + Type getType() const; + const char *getTypeAsString() const; + + // Re-enqueue thyself + void reEnqueue() const; + + public: + friend std::ostream& operator<<(std::ostream &s, const Request &q); + + protected: + virtual ~Request(); // use unref(); + + private: + std::string mCapName; + LLSD mPayload; + ll_vo_volume_ptr_t mObject; + // Simple tracking + const U32 mNum; + static U32 sNum; + U32 mRetryCount; + + // Back pointer to the MDC...not a ref! + LLMediaDataClient *mMDC; + }; + typedef LLPointer request_ptr_t; + + // Responder + class Responder : public LLHTTPClient::Responder + { + static const int UNAVAILABLE_RETRY_TIMER_DELAY = 5; // secs + + public: + Responder(const request_ptr_t &request); + //If we get back an error (not found, etc...), handle it here + virtual void error(U32 status, const std::string& reason); + //If we get back a normal response, handle it here. Default just logs it. + virtual void result(const LLSD& content); + + const request_ptr_t &getRequest() const { return mRequest; } + + protected: + virtual ~Responder(); + + private: + + class RetryTimer : public LLEventTimer + { + public: + RetryTimer(F32 time, Responder *); + virtual ~RetryTimer(); + virtual BOOL tick(); + private: + // back-pointer + boost::intrusive_ptr mResponder; + }; + + request_ptr_t mRequest; + }; + +protected: + + void enqueue(const Request*); + + // Subclasses must override this factory method to return a new responder + virtual Responder *createResponder(const request_ptr_t &request) const = 0; + + // Subclasses must override to return a cap name + virtual const char *getCapabilityName() const = 0; + +private: + + // Comparator for PriorityQueue + class Comparator + { + public: + bool operator() (const request_ptr_t &o1, const request_ptr_t &o2) const; + private: + static F64 getObjectScore(const ll_vo_volume_ptr_t &obj); + }; + + class PriorityQueue : public std::priority_queue< + request_ptr_t, + std::vector, + Comparator > + { + public: + friend std::ostream& operator<<(std::ostream &s, const PriorityQueue &q); + }; + + friend std::ostream& operator<<(std::ostream &s, const Request &q); + friend std::ostream& operator<<(std::ostream &s, const PriorityQueue &q); + + class QueueTimer : public LLEventTimer + { + public: + QueueTimer(F32 time, LLMediaDataClient *mdc); + virtual BOOL tick(); + protected: + virtual ~QueueTimer(); + private: + // back-pointer + LLPointer mMDC; + }; + + void startQueueTimer(); + void stopQueueTimer(); + void setIsRunning(bool val) { mQueueTimerIsRunning = val; } + + bool mQueueTimerIsRunning; + + PriorityQueue *pRequestQueue; +}; + + +// MediaDataResponder specific for the ObjectMedia cap +class LLObjectMediaDataClient : public LLMediaDataClient +{ +public: + LLObjectMediaDataClient() {} + ~LLObjectMediaDataClient() {} + + void fetchMedia(LLVOVolume *object); + void updateMedia(LLVOVolume *object); + +protected: + // Subclasses must override this factory method to return a new responder + virtual Responder *createResponder(const request_ptr_t &request) const; + + // Subclasses must override to return a cap name + virtual const char *getCapabilityName() const; + + class Responder : public LLMediaDataClient::Responder + { + public: + Responder(const request_ptr_t &request) + : LLMediaDataClient::Responder(request) {} + virtual void result(const LLSD &content); + }; +}; + + +// MediaDataResponder specific for the ObjectMediaNavigate cap +class LLObjectMediaNavigateClient : public LLMediaDataClient +{ + // NOTE: from llmediaservice.h + static const int ERROR_PERMISSION_DENIED_CODE = 8002; + +public: + LLObjectMediaNavigateClient() {} + ~LLObjectMediaNavigateClient() {} + + void navigate(LLVOVolume *object, U8 texture_index, const std::string &url); + +protected: + // Subclasses must override this factory method to return a new responder + virtual Responder *createResponder(const request_ptr_t &request) const; + + // Subclasses must override to return a cap name + virtual const char *getCapabilityName() const; + + class Responder : public LLMediaDataClient::Responder + { + public: + Responder(const request_ptr_t &request) + : LLMediaDataClient::Responder(request) {} + virtual void error(U32 status, const std::string& reason); + virtual void result(const LLSD &content); + private: + void bounceBack(); + }; + +}; + + +#endif // LL_LLMEDIADATACLIENT_H diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 05011a1568..1f4f1322fd 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -47,7 +47,6 @@ #include "llframetimer.h" #include "llinventory.h" #include "llmaterialtable.h" -#include "llmediadataresponder.h" #include "llmutelist.h" #include "llnamevalue.h" #include "llprimitive.h" diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index e69779b2dc..583246c23e 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -46,7 +46,6 @@ #include "llvolumemessage.h" #include "material_codes.h" #include "message.h" -#include "llmediadataresponder.h" #include "llpluginclassmedia.h" // for code in the mediaEvent handler #include "object_flags.h" #include "llagentconstants.h" @@ -69,7 +68,7 @@ #include "pipeline.h" #include "llsdutil.h" #include "llmediaentry.h" -#include "llmediadatafetcher.h" +#include "llmediadataclient.h" #include "llagent.h" const S32 MIN_QUIET_FRAMES_COALESCE = 30; @@ -86,6 +85,8 @@ F32 LLVOVolume::sLODFactor = 1.f; F32 LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop F32 LLVOVolume::sDistanceFactor = 1.0f; S32 LLVOVolume::sNumLODChanges = 0; +LLPointer LLVOVolume::sObjectMediaClient = NULL; +LLPointer LLVOVolume::sObjectMediaNavigateClient = NULL; static LLFastTimer::DeclareTimer FTM_GEN_TRIANGLES("Generate Triangles"); static LLFastTimer::DeclareTimer FTM_GEN_VOLUME("Generate Volumes"); @@ -133,13 +134,15 @@ LLVOVolume::~LLVOVolume() // static void LLVOVolume::initClass() { - LLMediaDataFetcher::initClass(); + sObjectMediaClient = new LLObjectMediaDataClient(); + sObjectMediaNavigateClient = new LLObjectMediaNavigateClient(); } // static void LLVOVolume::cleanupClass() { - LLMediaDataFetcher::cleanupClass(); + sObjectMediaClient = NULL; + sObjectMediaNavigateClient = NULL; } U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, @@ -1621,7 +1624,7 @@ bool LLVOVolume::hasMedia() const void LLVOVolume::requestMediaDataUpdate() { - LLMediaDataFetcher::fetchMedia(this); + sObjectMediaClient->fetchMedia(this); } void LLVOVolume::cleanUpMediaImpls() @@ -1752,21 +1755,7 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, llinfos << "broadcasting navigate with URI " << new_location << llendl; - // Post the navigate to the cap - std::string cap = getRegion()->getCapability("ObjectMediaNavigate"); - if(cap.empty()) - { - // XXX *TODO: deal with no cap! It may happen! (retry?) - LL_WARNS("Media") << "Can't broadcast navigate event -- ObjectMediaNavigate cap is not available" << LL_ENDL; - return; - } - - // If we got here, the cap is available. Index through all faces that have this media and send the navigate message. - LLSD sd; - sd["object_id"] = mID; - sd["current_url"] = new_location; - sd["texture_index"] = face_index; - LLHTTPClient::post(cap, sd, new LLMediaDataResponder("ObjectMediaNavigate", sd, this)); + sObjectMediaNavigateClient->navigate(this, face_index, new_location); } } break; @@ -1790,29 +1779,9 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, } -void LLVOVolume::sendMediaDataUpdate() const +void LLVOVolume::sendMediaDataUpdate() { - std::string url = getRegion()->getCapability("ObjectMedia"); - if (!url.empty()) - { - LLSD sd_payload; - sd_payload["verb"] = "UPDATE"; - sd_payload[LLTextureEntry::OBJECT_ID_KEY] = mID; - LLSD object_media_data; - for (int i=0; i < getNumTEs(); i++) { - LLTextureEntry *texture_entry = getTE(i); - llassert((texture_entry->getMediaData() != NULL) == texture_entry->hasMedia()); - const LLSD &media_data = - (texture_entry->getMediaData() == NULL) ? LLSD() : texture_entry->getMediaData()->asLLSD(); - object_media_data.append(media_data); - } - sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data; - - llinfos << "Sending media data: " << getID() << " " << ll_pretty_print_sd(sd_payload) << llendl; - - LLHTTPClient::post(url, sd_payload, new LLMediaDataResponder("ObjectMedia", sd_payload, this)); - } - // XXX *TODO: deal with no cap! It may happen! (retry?) + sObjectMediaClient->updateMedia(this); } void LLVOVolume::removeMediaImpl(S32 texture_index) diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 9a79b620d5..250c3ed917 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -45,6 +45,8 @@ class LLViewerTextureAnim; class LLDrawPool; class LLSelectNode; +class LLObjectMediaDataClient; +class LLObjectMediaNavigateClient; typedef std::vector media_list_t; @@ -238,7 +240,7 @@ public: void syncMediaData(S32 te, const LLSD &media_data, bool merge, bool ignore_agent); // Send media data update to the simulator. - void sendMediaDataUpdate() const; + void sendMediaDataUpdate(); viewer_media_t getMediaImpl(U8 face_id) const; S32 getFaceIndexWithMediaImpl(const LLViewerMediaImpl* media_impl, S32 start_face_id); @@ -283,6 +285,9 @@ public: static F32 sLODFactor; // LOD scale factor static F32 sDistanceFactor; // LOD distance factor + static LLPointer sObjectMediaClient; + static LLPointer sObjectMediaNavigateClient; + protected: static S32 sNumLODChanges; -- cgit v1.2.3 From c6a3df44d81107fc725fb232645ba08829ab3923 Mon Sep 17 00:00:00 2001 From: Rick Pasetto Date: Mon, 5 Oct 2009 17:44:42 +0000 Subject: Disable "bounceBack" if nav permissions are refused --- indra/newview/llmediadataclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index e3d3f1a96b..6a932d76bf 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -622,6 +622,6 @@ void LLObjectMediaNavigateClient::Responder::bounceBack() if (mep && impl) { - impl->navigateTo(mep->getCurrentURL()); +// impl->navigateTo(mep->getCurrentURL()); } } -- cgit v1.2.3 From 9818f158366a0df980a2e4b9251177d9a9209cfb Mon Sep 17 00:00:00 2001 From: James Cook Date: Mon, 5 Oct 2009 19:01:07 +0000 Subject: EXT-1225 EXT-1187 Unable to submit resident name in "Choose Resident". Input field was incorrectly changed to text_editor from line_editor, so I switched it back. Not reviewed. --- indra/newview/skins/default/xui/en/floater_avatar_picker.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml index 3ab5c18300..f76e4acbc9 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml @@ -55,14 +55,13 @@ width="220"> Type part of a person's name: -